clawup 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/README.md +245 -0
  2. package/dist/adapters/api-adapter.d.ts +76 -0
  3. package/dist/adapters/api-adapter.js +250 -0
  4. package/dist/adapters/api-adapter.js.map +1 -0
  5. package/dist/adapters/cli-adapter.d.ts +15 -0
  6. package/dist/adapters/cli-adapter.js +208 -0
  7. package/dist/adapters/cli-adapter.js.map +1 -0
  8. package/dist/adapters/index.d.ts +22 -0
  9. package/dist/adapters/index.js +32 -0
  10. package/dist/adapters/index.js.map +1 -0
  11. package/dist/adapters/types.d.ts +135 -0
  12. package/dist/adapters/types.js +14 -0
  13. package/dist/adapters/types.js.map +1 -0
  14. package/dist/bin.d.ts +8 -0
  15. package/dist/bin.js +221 -0
  16. package/dist/bin.js.map +1 -0
  17. package/dist/commands/config.d.ts +21 -0
  18. package/dist/commands/config.js +323 -0
  19. package/dist/commands/config.js.map +1 -0
  20. package/dist/commands/deploy.d.ts +7 -0
  21. package/dist/commands/deploy.js +13 -0
  22. package/dist/commands/deploy.js.map +1 -0
  23. package/dist/commands/destroy.d.ts +7 -0
  24. package/dist/commands/destroy.js +13 -0
  25. package/dist/commands/destroy.js.map +1 -0
  26. package/dist/commands/init.d.ts +13 -0
  27. package/dist/commands/init.js +698 -0
  28. package/dist/commands/init.js.map +1 -0
  29. package/dist/commands/list.d.ts +8 -0
  30. package/dist/commands/list.js +42 -0
  31. package/dist/commands/list.js.map +1 -0
  32. package/dist/commands/push.d.ts +7 -0
  33. package/dist/commands/push.js +19 -0
  34. package/dist/commands/push.js.map +1 -0
  35. package/dist/commands/redeploy.d.ts +7 -0
  36. package/dist/commands/redeploy.js +13 -0
  37. package/dist/commands/redeploy.js.map +1 -0
  38. package/dist/commands/secrets.d.ts +16 -0
  39. package/dist/commands/secrets.js +169 -0
  40. package/dist/commands/secrets.js.map +1 -0
  41. package/dist/commands/ssh.d.ts +9 -0
  42. package/dist/commands/ssh.js +108 -0
  43. package/dist/commands/ssh.js.map +1 -0
  44. package/dist/commands/status.d.ts +7 -0
  45. package/dist/commands/status.js +13 -0
  46. package/dist/commands/status.js.map +1 -0
  47. package/dist/commands/update.d.ts +7 -0
  48. package/dist/commands/update.js +126 -0
  49. package/dist/commands/update.js.map +1 -0
  50. package/dist/commands/validate.d.ts +7 -0
  51. package/dist/commands/validate.js +13 -0
  52. package/dist/commands/validate.js.map +1 -0
  53. package/dist/commands/webhooks.d.ts +7 -0
  54. package/dist/commands/webhooks.js +13 -0
  55. package/dist/commands/webhooks.js.map +1 -0
  56. package/dist/lib/__tests__/identity.test.d.ts +1 -0
  57. package/dist/lib/__tests__/identity.test.js +186 -0
  58. package/dist/lib/__tests__/identity.test.js.map +1 -0
  59. package/dist/lib/__tests__/validate-agent.test.d.ts +1 -0
  60. package/dist/lib/__tests__/validate-agent.test.js +38 -0
  61. package/dist/lib/__tests__/validate-agent.test.js.map +1 -0
  62. package/dist/lib/config.d.ts +69 -0
  63. package/dist/lib/config.js +218 -0
  64. package/dist/lib/config.js.map +1 -0
  65. package/dist/lib/constants.d.ts +5 -0
  66. package/dist/lib/constants.js +29 -0
  67. package/dist/lib/constants.js.map +1 -0
  68. package/dist/lib/exec.d.ts +24 -0
  69. package/dist/lib/exec.js +63 -0
  70. package/dist/lib/exec.js.map +1 -0
  71. package/dist/lib/prerequisites.d.ts +8 -0
  72. package/dist/lib/prerequisites.js +146 -0
  73. package/dist/lib/prerequisites.js.map +1 -0
  74. package/dist/lib/process.d.ts +18 -0
  75. package/dist/lib/process.js +37 -0
  76. package/dist/lib/process.js.map +1 -0
  77. package/dist/lib/pulumi.d.ts +37 -0
  78. package/dist/lib/pulumi.js +87 -0
  79. package/dist/lib/pulumi.js.map +1 -0
  80. package/dist/lib/tailscale.d.ts +75 -0
  81. package/dist/lib/tailscale.js +251 -0
  82. package/dist/lib/tailscale.js.map +1 -0
  83. package/dist/lib/tool-helpers.d.ts +15 -0
  84. package/dist/lib/tool-helpers.js +35 -0
  85. package/dist/lib/tool-helpers.js.map +1 -0
  86. package/dist/lib/ui.d.ts +26 -0
  87. package/dist/lib/ui.js +86 -0
  88. package/dist/lib/ui.js.map +1 -0
  89. package/dist/lib/update-check.d.ts +8 -0
  90. package/dist/lib/update-check.js +151 -0
  91. package/dist/lib/update-check.js.map +1 -0
  92. package/dist/lib/vendor.d.ts +34 -0
  93. package/dist/lib/vendor.js +128 -0
  94. package/dist/lib/vendor.js.map +1 -0
  95. package/dist/lib/workspace.d.ts +21 -0
  96. package/dist/lib/workspace.js +170 -0
  97. package/dist/lib/workspace.js.map +1 -0
  98. package/dist/tools/deploy.d.ts +16 -0
  99. package/dist/tools/deploy.js +181 -0
  100. package/dist/tools/deploy.js.map +1 -0
  101. package/dist/tools/destroy.d.ts +16 -0
  102. package/dist/tools/destroy.js +119 -0
  103. package/dist/tools/destroy.js.map +1 -0
  104. package/dist/tools/index.d.ts +20 -0
  105. package/dist/tools/index.js +34 -0
  106. package/dist/tools/index.js.map +1 -0
  107. package/dist/tools/push.d.ts +29 -0
  108. package/dist/tools/push.js +341 -0
  109. package/dist/tools/push.js.map +1 -0
  110. package/dist/tools/redeploy.d.ts +17 -0
  111. package/dist/tools/redeploy.js +181 -0
  112. package/dist/tools/redeploy.js.map +1 -0
  113. package/dist/tools/status.d.ts +16 -0
  114. package/dist/tools/status.js +205 -0
  115. package/dist/tools/status.js.map +1 -0
  116. package/dist/tools/validate.d.ts +16 -0
  117. package/dist/tools/validate.js +219 -0
  118. package/dist/tools/validate.js.map +1 -0
  119. package/dist/tools/webhooks.d.ts +17 -0
  120. package/dist/tools/webhooks.js +181 -0
  121. package/dist/tools/webhooks.js.map +1 -0
  122. package/dist/types.d.ts +6 -0
  123. package/dist/types.js +10 -0
  124. package/dist/types.js.map +1 -0
  125. package/infra/Pulumi.yaml +6 -0
  126. package/infra/dist/components/cloud-init.js +412 -0
  127. package/infra/dist/components/config-generator.js +254 -0
  128. package/infra/dist/components/hetzner-agent.js +162 -0
  129. package/infra/dist/components/index.js +18 -0
  130. package/infra/dist/components/openclaw-agent.js +287 -0
  131. package/infra/dist/components/shared.js +132 -0
  132. package/infra/dist/components/types.js +6 -0
  133. package/infra/dist/index.js +387 -0
  134. package/infra/dist/shared-vpc.js +167 -0
  135. package/infra/node_modules/@clawup/core/dist/__tests__/schemas.test.d.ts +2 -0
  136. package/infra/node_modules/@clawup/core/dist/__tests__/schemas.test.d.ts.map +1 -0
  137. package/infra/node_modules/@clawup/core/dist/__tests__/schemas.test.js +124 -0
  138. package/infra/node_modules/@clawup/core/dist/__tests__/schemas.test.js.map +1 -0
  139. package/infra/node_modules/@clawup/core/dist/coding-agent-registry.d.ts +32 -0
  140. package/infra/node_modules/@clawup/core/dist/coding-agent-registry.d.ts.map +1 -0
  141. package/infra/node_modules/@clawup/core/dist/coding-agent-registry.js +56 -0
  142. package/infra/node_modules/@clawup/core/dist/coding-agent-registry.js.map +1 -0
  143. package/infra/node_modules/@clawup/core/dist/constants.d.ts +137 -0
  144. package/infra/node_modules/@clawup/core/dist/constants.d.ts.map +1 -0
  145. package/infra/node_modules/@clawup/core/dist/constants.js +314 -0
  146. package/infra/node_modules/@clawup/core/dist/constants.js.map +1 -0
  147. package/infra/node_modules/@clawup/core/dist/dep-registry.d.ts +25 -0
  148. package/infra/node_modules/@clawup/core/dist/dep-registry.d.ts.map +1 -0
  149. package/infra/node_modules/@clawup/core/dist/dep-registry.js +46 -0
  150. package/infra/node_modules/@clawup/core/dist/dep-registry.js.map +1 -0
  151. package/infra/node_modules/@clawup/core/dist/deps.d.ts +18 -0
  152. package/infra/node_modules/@clawup/core/dist/deps.d.ts.map +1 -0
  153. package/infra/node_modules/@clawup/core/dist/deps.js +39 -0
  154. package/infra/node_modules/@clawup/core/dist/deps.js.map +1 -0
  155. package/infra/node_modules/@clawup/core/dist/identity.d.ts +20 -0
  156. package/infra/node_modules/@clawup/core/dist/identity.d.ts.map +1 -0
  157. package/infra/node_modules/@clawup/core/dist/identity.js +217 -0
  158. package/infra/node_modules/@clawup/core/dist/identity.js.map +1 -0
  159. package/infra/node_modules/@clawup/core/dist/index.d.ts +18 -0
  160. package/infra/node_modules/@clawup/core/dist/index.d.ts.map +1 -0
  161. package/infra/node_modules/@clawup/core/dist/index.js +52 -0
  162. package/infra/node_modules/@clawup/core/dist/index.js.map +1 -0
  163. package/infra/node_modules/@clawup/core/dist/plugin-registry.d.ts +13 -0
  164. package/infra/node_modules/@clawup/core/dist/plugin-registry.d.ts.map +1 -0
  165. package/infra/node_modules/@clawup/core/dist/plugin-registry.js +24 -0
  166. package/infra/node_modules/@clawup/core/dist/plugin-registry.js.map +1 -0
  167. package/infra/node_modules/@clawup/core/dist/schemas/identity.d.ts +74 -0
  168. package/infra/node_modules/@clawup/core/dist/schemas/identity.d.ts.map +1 -0
  169. package/infra/node_modules/@clawup/core/dist/schemas/identity.js +45 -0
  170. package/infra/node_modules/@clawup/core/dist/schemas/identity.js.map +1 -0
  171. package/infra/node_modules/@clawup/core/dist/schemas/index.d.ts +6 -0
  172. package/infra/node_modules/@clawup/core/dist/schemas/index.d.ts.map +1 -0
  173. package/infra/node_modules/@clawup/core/dist/schemas/index.js +13 -0
  174. package/infra/node_modules/@clawup/core/dist/schemas/index.js.map +1 -0
  175. package/infra/node_modules/@clawup/core/dist/schemas/manifest.d.ts +159 -0
  176. package/infra/node_modules/@clawup/core/dist/schemas/manifest.d.ts.map +1 -0
  177. package/infra/node_modules/@clawup/core/dist/schemas/manifest.js +54 -0
  178. package/infra/node_modules/@clawup/core/dist/schemas/manifest.js.map +1 -0
  179. package/infra/node_modules/@clawup/core/dist/skills.d.ts +30 -0
  180. package/infra/node_modules/@clawup/core/dist/skills.d.ts.map +1 -0
  181. package/infra/node_modules/@clawup/core/dist/skills.js +52 -0
  182. package/infra/node_modules/@clawup/core/dist/skills.js.map +1 -0
  183. package/infra/node_modules/@clawup/core/dist/types.d.ts +59 -0
  184. package/infra/node_modules/@clawup/core/dist/types.d.ts.map +1 -0
  185. package/infra/node_modules/@clawup/core/dist/types.js +30 -0
  186. package/infra/node_modules/@clawup/core/dist/types.js.map +1 -0
  187. package/infra/node_modules/@clawup/core/package.json +46 -0
  188. package/infra/package.json +12 -0
  189. package/package.json +43 -0
  190. package/scripts/postinstall.mjs +395 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../tools/webhooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Re-export all types from @clawup/core for backward compatibility.
3
+ * External consumers importing "clawup/types" will get these.
4
+ */
5
+ export { validateAgentDefinition, } from "@clawup/core";
6
+ export type { AgentDefinition, ClawupManifest, IdentityManifest, IdentityResult, PluginConfigFile, PrereqResult, } from "@clawup/core";
package/dist/types.js ADDED
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateAgentDefinition = void 0;
4
+ /**
5
+ * Re-export all types from @clawup/core for backward compatibility.
6
+ * External consumers importing "clawup/types" will get these.
7
+ */
8
+ var core_1 = require("@clawup/core");
9
+ Object.defineProperty(exports, "validateAgentDefinition", { enumerable: true, get: function () { return core_1.validateAgentDefinition; } });
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,qCAEsB;AADpB,+GAAA,uBAAuB,OAAA"}
@@ -0,0 +1,6 @@
1
+ name: clawup
2
+ description: Multi-agent OpenClaw deployment - PM, Engineer, and Tester
3
+ runtime:
4
+ name: nodejs
5
+ options:
6
+ packagemanager: npm
@@ -0,0 +1,412 @@
1
+ "use strict";
2
+ /**
3
+ * Cloud-init script generator for OpenClaw agents
4
+ * Generates the user-data script for EC2 instance provisioning
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.generateCloudInit = generateCloudInit;
41
+ exports.interpolateCloudInit = interpolateCloudInit;
42
+ exports.compressCloudInit = compressCloudInit;
43
+ const zlib = __importStar(require("zlib"));
44
+ const config_generator_1 = require("./config-generator");
45
+ const core_1 = require("@clawup/core");
46
+ /**
47
+ * Generates a cloud-init bash script for OpenClaw deployment
48
+ */
49
+ function generateCloudInit(config) {
50
+ const gatewayPort = config.gatewayPort ?? 18789;
51
+ const nodeVersion = config.nodeVersion ?? 22;
52
+ const nvmVersion = config.nvmVersion ?? "0.40.1";
53
+ const openclawVersion = config.openclawVersion ?? "latest";
54
+ const trustedProxies = config.trustedProxies ?? ["127.0.0.1"];
55
+ // Build PluginEntry[] for config-generator from PluginInstallConfig[]
56
+ const pluginEntries = (config.plugins ?? []).map((p) => ({
57
+ name: p.name,
58
+ enabled: true,
59
+ config: p.config ?? {},
60
+ secretEnvVars: p.secretEnvVars,
61
+ }));
62
+ // Extract braveApiKey from depSecrets for config-generator (special case)
63
+ const braveApiKey = config.depSecrets?.["BRAVE_API_KEY"];
64
+ const codingAgentName = config.codingAgent ?? "claude-code";
65
+ const codingAgentEntry = core_1.CODING_AGENT_REGISTRY[codingAgentName];
66
+ const configPatchScript = (0, config_generator_1.generateConfigPatchScript)({
67
+ gatewayPort,
68
+ gatewayToken: config.gatewayToken,
69
+ trustedProxies,
70
+ enableControlUi: true,
71
+ plugins: pluginEntries,
72
+ braveApiKey: braveApiKey,
73
+ backupModel: config.backupModel,
74
+ codingAgent: codingAgentName,
75
+ });
76
+ // Dynamic dep installation scripts (runs as root)
77
+ const depInstallScript = (config.deps ?? [])
78
+ .filter(d => d.installScript)
79
+ .map(d => d.installScript)
80
+ .join("\n");
81
+ // Dynamic dep post-install scripts (runs as ubuntu user)
82
+ const depPostInstallScript = (config.deps ?? [])
83
+ .filter(d => d.postInstallScript)
84
+ .map(d => `
85
+ # Post-install: ${d.name}
86
+ sudo -u ubuntu bash << 'DEP_POST_INSTALL'
87
+ ${d.postInstallScript}
88
+ DEP_POST_INSTALL
89
+ `)
90
+ .join("\n");
91
+ // Coding agent CLI installation script (registry-driven)
92
+ const codingClisInstallScript = codingAgentEntry
93
+ ? generateCodingAgentInstallScript(codingAgentEntry, config.model)
94
+ : "";
95
+ // Dynamic plugin install steps (only for installable plugins)
96
+ const installablePlugins = (config.plugins ?? []).filter((p) => p.installable !== false);
97
+ const pluginInstallScript = installablePlugins.length > 0
98
+ ? `
99
+ # Install OpenClaw plugins
100
+ echo "Installing plugins..."
101
+ sudo -H -u ubuntu bash -c '
102
+ export HOME=/home/ubuntu
103
+ export NVM_DIR="$HOME/.nvm"
104
+ [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
105
+
106
+ ${installablePlugins.map((p) => `openclaw plugins install ${p.name} || echo "WARNING: ${p.name} plugin install failed. Install manually with: openclaw plugins install ${p.name}"`).join("\n")}
107
+ '
108
+ echo "Plugin installation complete"
109
+ `
110
+ : "";
111
+ // Dynamic clawhub skill install steps
112
+ const clawhubSkillsScript = (config.clawhubSkills ?? []).length > 0
113
+ ? `
114
+ # Install public skills from clawhub
115
+ echo "Installing clawhub skills..."
116
+ sudo -H -u ubuntu bash -c '
117
+ export HOME=/home/ubuntu
118
+ export NVM_DIR="$HOME/.nvm"
119
+ [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
120
+
121
+ ${(config.clawhubSkills ?? []).map((slug) => `clawhub install ${slug} || echo "WARNING: clawhub skill ${slug} install failed."`).join("\n")}
122
+ '
123
+ echo "Clawhub skills installation complete"
124
+ `
125
+ : "";
126
+ // Generate workspace files injection script
127
+ const workspaceFilesScript = generateWorkspaceFilesScript(config.workspaceFiles);
128
+ // Generate additional env vars
129
+ const additionalEnvVars = config.envVars
130
+ ? Object.entries(config.envVars)
131
+ .map(([key, value]) => `echo 'export ${key}="${value}"' >> /home/ubuntu/.bashrc`)
132
+ .join("\n")
133
+ : "";
134
+ // Generate post-setup commands
135
+ const postSetupScript = config.postSetupCommands
136
+ ? config.postSetupCommands.join("\n")
137
+ : "";
138
+ // Create ubuntu user section (for Hetzner)
139
+ const createUserSection = config.createUbuntuUser
140
+ ? `
141
+ # Create ubuntu user (Hetzner uses root by default)
142
+ useradd -m -s /bin/bash -G docker ubuntu || true
143
+ `
144
+ : "";
145
+ // Tailscale installation section
146
+ const tailscaleSection = config.skipTailscale
147
+ ? ""
148
+ : `
149
+ # Install and configure Tailscale
150
+ echo "Installing Tailscale..."
151
+ curl -fsSL https://tailscale.com/install.sh | sh
152
+ tailscale up --authkey="\${TAILSCALE_AUTH_KEY}" --ssh${config.tailscaleHostname ? ` --hostname=${config.tailscaleHostname}` : ""} || echo "WARNING: Tailscale setup failed. Run 'sudo tailscale up' manually."
153
+ `;
154
+ // Tailscale proxy section: funnel (public access for webhooks) or serve (Tailscale-only HTTPS)
155
+ const tailscaleProxySection = config.skipTailscale
156
+ ? ""
157
+ : config.enableFunnel
158
+ ? `
159
+ # Enable Tailscale Funnel for webhook endpoint (public HTTPS)
160
+ echo "Enabling Tailscale Funnel for webhook endpoint..."
161
+ if tailscale funnel --bg ${gatewayPort}; then
162
+ echo "Tailscale Funnel enabled — webhook endpoint is publicly accessible"
163
+ else
164
+ echo "WARNING: tailscale funnel failed — falling back to tailscale serve (webhooks will NOT work until Funnel is enabled in Tailscale admin)"
165
+ tailscale serve --bg ${gatewayPort} || echo "WARNING: tailscale serve also failed. Enable HTTPS in your Tailscale admin console."
166
+ fi
167
+ `
168
+ : `
169
+ # Enable Tailscale HTTPS proxy (requires HTTPS to be enabled in Tailscale admin console)
170
+ echo "Enabling Tailscale HTTPS proxy..."
171
+ tailscale serve --bg ${gatewayPort} || echo "WARNING: tailscale serve failed. Enable HTTPS in your Tailscale admin console first."
172
+ `;
173
+ // Collect all secret env vars that need to be passed to the config-patch python script
174
+ const pluginSecretEnvVarExports = [];
175
+ for (const plugin of config.plugins ?? []) {
176
+ for (const envVar of Object.values(plugin.secretEnvVars ?? {})) {
177
+ pluginSecretEnvVarExports.push(` ${envVar}="\${${envVar}:-}"`);
178
+ }
179
+ }
180
+ const pluginSecretEnvLine = pluginSecretEnvVarExports.length > 0
181
+ ? ` \\\n${pluginSecretEnvVarExports.join(" \\\n")}`
182
+ : "";
183
+ return `#!/bin/bash
184
+ set -e
185
+
186
+ export DEBIAN_FRONTEND=noninteractive
187
+
188
+ # ============================================
189
+ # OpenClaw Agent Provisioning Script
190
+ # Generated by clawup Pulumi component
191
+ # ============================================
192
+
193
+ # Configuration
194
+ ANTHROPIC_API_KEY="\${ANTHROPIC_API_KEY}"
195
+ TAILSCALE_AUTH_KEY="\${TAILSCALE_AUTH_KEY}"
196
+ GATEWAY_TOKEN="\${GATEWAY_TOKEN}"
197
+ GATEWAY_PORT="${gatewayPort}"
198
+ NODE_VERSION="${nodeVersion}"
199
+ NVM_VERSION="${nvmVersion}"
200
+ OPENCLAW_VERSION="${openclawVersion}"
201
+
202
+ echo "Starting OpenClaw agent provisioning..."
203
+
204
+ # System updates
205
+ echo "Updating system packages..."
206
+ apt-get update
207
+ apt-get upgrade -y
208
+ apt-get install -y unzip
209
+
210
+ # Install Docker
211
+ echo "Installing Docker..."
212
+ curl -fsSL https://get.docker.com | sh
213
+ systemctl enable docker
214
+ systemctl start docker
215
+ ${createUserSection}
216
+ usermod -aG docker ubuntu
217
+ ${depInstallScript}
218
+
219
+ # Install NVM and Node.js for ubuntu user
220
+ echo "Installing Node.js $NODE_VERSION via NVM..."
221
+ sudo -u ubuntu bash << 'UBUNTU_SCRIPT'
222
+ set -e
223
+ cd ~
224
+
225
+ # Install NVM
226
+ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v${nvmVersion}/install.sh | bash
227
+
228
+ # Load NVM
229
+ export NVM_DIR="$HOME/.nvm"
230
+ [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
231
+
232
+ # Install Node.js
233
+ nvm install ${nodeVersion}
234
+ nvm use ${nodeVersion}
235
+ nvm alias default ${nodeVersion}
236
+
237
+ # Install OpenClaw
238
+ npm install -g openclaw@${openclawVersion}
239
+
240
+ # Add NVM to bashrc if not already there
241
+ if ! grep -q 'NVM_DIR' ~/.bashrc; then
242
+ echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc
243
+ echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' >> ~/.bashrc
244
+ fi
245
+ UBUNTU_SCRIPT
246
+
247
+ # Set environment variables for ubuntu user
248
+ # Auto-detect credential type and export the correct variable
249
+ if [[ "\${ANTHROPIC_API_KEY}" =~ ^sk-ant-oat ]]; then
250
+ # OAuth token from Claude Pro/Max subscription
251
+ echo 'export CLAUDE_CODE_OAUTH_TOKEN="\${ANTHROPIC_API_KEY}"' >> /home/ubuntu/.bashrc
252
+ echo "Detected OAuth token, exporting as CLAUDE_CODE_OAUTH_TOKEN"
253
+ else
254
+ # API key from Anthropic Console
255
+ echo 'export ANTHROPIC_API_KEY="\${ANTHROPIC_API_KEY}"' >> /home/ubuntu/.bashrc
256
+ echo "Detected API key, exporting as ANTHROPIC_API_KEY"
257
+ fi
258
+ ${(config.plugins ?? [])
259
+ .flatMap((p) => Object.values(p.secretEnvVars ?? {}))
260
+ .map((envVar) => `\\\${${envVar}:+echo 'export ${envVar}="\\\${${envVar}}"' >> /home/ubuntu/.bashrc}`)
261
+ .join("\n")}
262
+ ${(config.deps ?? [])
263
+ .flatMap(d => Object.values(d.secrets).map(s => s.envVar))
264
+ .map(envVar => `\\\${${envVar}:+echo 'export ${envVar}="\\\${${envVar}}"' >> /home/ubuntu/.bashrc}`)
265
+ .join("\n")}
266
+ ${additionalEnvVars}
267
+ ${tailscaleSection}${depPostInstallScript}
268
+ ${codingClisInstallScript}
269
+
270
+ # Enable systemd linger for ubuntu user (required for user services to run at boot)
271
+ loginctl enable-linger ubuntu
272
+
273
+ # Start user's systemd instance (required for user services during cloud-init)
274
+ systemctl start user@1000.service
275
+
276
+ # Run OpenClaw onboarding as ubuntu user (skip daemon install, do it separately)
277
+ echo "Running OpenClaw onboarding..."
278
+ sudo -H -u ubuntu ANTHROPIC_API_KEY="\${ANTHROPIC_API_KEY}" GATEWAY_PORT="$GATEWAY_PORT" bash -c '
279
+ export HOME=/home/ubuntu
280
+ export NVM_DIR="$HOME/.nvm"
281
+ [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
282
+
283
+ openclaw onboard --non-interactive --accept-risk \\
284
+ --mode local \\
285
+ --auth-choice apiKey \\
286
+ --gateway-port $GATEWAY_PORT \\
287
+ --gateway-bind loopback \\
288
+ --skip-daemon \\
289
+ --skip-skills || echo "WARNING: OpenClaw onboarding failed. Run openclaw onboard manually."
290
+ '
291
+ ${workspaceFilesScript}
292
+ ${pluginInstallScript}
293
+ ${clawhubSkillsScript}
294
+ # Install daemon service with XDG_RUNTIME_DIR set
295
+ echo "Installing OpenClaw daemon..."
296
+ sudo -H -u ubuntu XDG_RUNTIME_DIR=/run/user/1000 bash -c '
297
+ export HOME=/home/ubuntu
298
+ export NVM_DIR="$HOME/.nvm"
299
+ [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
300
+
301
+ openclaw daemon install || echo "WARNING: Daemon install failed. Run openclaw daemon install manually."
302
+ '
303
+
304
+ # Configure gateway for Tailscale Serve
305
+ echo "Configuring OpenClaw gateway..."
306
+ sudo -H -u ubuntu \\
307
+ GATEWAY_TOKEN="\${GATEWAY_TOKEN}" \\
308
+ ANTHROPIC_API_KEY="\${ANTHROPIC_API_KEY}" \\
309
+ BRAVE_API_KEY="${braveApiKey ?? ""}" \\
310
+ AGENT_NAME="${config.envVars?.AGENT_NAME ?? ""}" \\
311
+ AGENT_EMOJI="${config.envVars?.AGENT_EMOJI ?? ""}"${pluginSecretEnvLine} \\
312
+ python3 << 'PYTHON_SCRIPT'
313
+ ${configPatchScript}
314
+ PYTHON_SCRIPT
315
+ ${tailscaleProxySection}
316
+ # Run openclaw doctor to fix any missing config
317
+ echo "Running openclaw doctor..."
318
+ sudo -H -u ubuntu bash -c '
319
+ export HOME=/home/ubuntu
320
+ export NVM_DIR="$HOME/.nvm"
321
+ [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
322
+ openclaw doctor --fix --non-interactive || echo "WARNING: openclaw doctor failed"
323
+ '
324
+
325
+ ${postSetupScript}
326
+ echo "============================================"
327
+ echo "OpenClaw agent setup complete!"
328
+ echo "============================================"
329
+ `;
330
+ }
331
+ /**
332
+ * Generates bash script to inject workspace files
333
+ */
334
+ function generateWorkspaceFilesScript(workspaceFiles) {
335
+ if (!workspaceFiles || Object.keys(workspaceFiles).length === 0) {
336
+ return "";
337
+ }
338
+ const lines = [
339
+ "",
340
+ "# Inject workspace files",
341
+ 'echo "Injecting workspace files..."',
342
+ "mkdir -p /home/ubuntu/.openclaw/workspace",
343
+ ];
344
+ for (const [filePath, content] of Object.entries(workspaceFiles)) {
345
+ // Validate path to prevent directory traversal
346
+ const normalized = filePath.replace(/\\/g, "/");
347
+ if (normalized.includes("..") ||
348
+ normalized.startsWith("/") ||
349
+ normalized.includes("\0")) {
350
+ throw new Error(`Invalid workspace file path: "${filePath}". Paths must be relative and cannot contain "..".`);
351
+ }
352
+ const fullPath = `/home/ubuntu/.openclaw/workspace/${filePath}`;
353
+ const dirPath = fullPath.substring(0, fullPath.lastIndexOf("/"));
354
+ // Gzip + base64 encode to stay within Hetzner's 32KB user_data limit
355
+ const compressed = zlib.gzipSync(Buffer.from(content, "utf-8")).toString("base64");
356
+ lines.push(`mkdir -p "${dirPath}"`);
357
+ lines.push(`echo "${compressed}" | base64 -d | gunzip > "${fullPath}"`);
358
+ }
359
+ lines.push('chown -R ubuntu:ubuntu /home/ubuntu/.openclaw/workspace');
360
+ lines.push('echo "Workspace files injected successfully"');
361
+ return lines.join("\n");
362
+ }
363
+ /**
364
+ * Interpolates environment variables in the cloud-init script.
365
+ * Call this with actual values before passing to EC2 user data.
366
+ *
367
+ * Base secrets (anthropic, tailscale, gateway, slack, github, brave) are always handled.
368
+ * Plugin secrets are passed via the additionalSecrets map.
369
+ */
370
+ function interpolateCloudInit(script, values) {
371
+ let result = script
372
+ .replace(/\${ANTHROPIC_API_KEY}/g, values.anthropicApiKey)
373
+ .replace(/\${TAILSCALE_AUTH_KEY}/g, values.tailscaleAuthKey)
374
+ .replace(/\${GATEWAY_TOKEN}/g, values.gatewayToken);
375
+ // Plugin and dep secret env vars (includes Slack tokens, Linear keys, GitHub token, etc.)
376
+ if (values.additionalSecrets) {
377
+ for (const [envVar, value] of Object.entries(values.additionalSecrets)) {
378
+ const escaped = value.replace(/\$/g, "$$$$");
379
+ result = result.replace(new RegExp(`\\$\\{${envVar}:-\\}`, "g"), escaped);
380
+ result = result.replace(new RegExp(`\\$\\{${envVar}\\}`, "g"), escaped);
381
+ }
382
+ }
383
+ return result;
384
+ }
385
+ /**
386
+ * Wraps a cloud-init script in a gzip+base64 self-extracting bootstrap.
387
+ * Hetzner limits user_data to 32KB; this typically achieves 60-70% compression.
388
+ */
389
+ function compressCloudInit(script) {
390
+ const compressed = zlib.gzipSync(Buffer.from(script, "utf-8")).toString("base64");
391
+ return `#!/bin/bash
392
+ base64 -d <<'COMPRESSED_PAYLOAD' | gunzip | bash
393
+ ${compressed}
394
+ COMPRESSED_PAYLOAD
395
+ `;
396
+ }
397
+ /**
398
+ * Generates bash script to install a coding agent CLI and configure its default model.
399
+ * Uses the registry entry's installScript and configureModelScript.
400
+ */
401
+ function generateCodingAgentInstallScript(entry, model) {
402
+ // Strip provider prefix (e.g. "anthropic/claude-opus-4-6" -> "claude-opus-4-6")
403
+ const strippedModel = model?.replace(/^[^/]+\//, "") ?? "claude-opus-4-6";
404
+ // Replace ${MODEL} placeholder in configureModelScript
405
+ const configScript = entry.configureModelScript.replace(/\$\{MODEL\}/g, strippedModel);
406
+ return `
407
+ ${entry.installScript}
408
+
409
+ ${configScript}
410
+ `;
411
+ }
412
+ //# sourceMappingURL=cloud-init.js.map