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.
- package/README.md +245 -0
- package/dist/adapters/api-adapter.d.ts +76 -0
- package/dist/adapters/api-adapter.js +250 -0
- package/dist/adapters/api-adapter.js.map +1 -0
- package/dist/adapters/cli-adapter.d.ts +15 -0
- package/dist/adapters/cli-adapter.js +208 -0
- package/dist/adapters/cli-adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +22 -0
- package/dist/adapters/index.js +32 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/types.d.ts +135 -0
- package/dist/adapters/types.js +14 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/bin.d.ts +8 -0
- package/dist/bin.js +221 -0
- package/dist/bin.js.map +1 -0
- package/dist/commands/config.d.ts +21 -0
- package/dist/commands/config.js +323 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/deploy.d.ts +7 -0
- package/dist/commands/deploy.js +13 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/destroy.d.ts +7 -0
- package/dist/commands/destroy.js +13 -0
- package/dist/commands/destroy.js.map +1 -0
- package/dist/commands/init.d.ts +13 -0
- package/dist/commands/init.js +698 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +8 -0
- package/dist/commands/list.js +42 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/push.d.ts +7 -0
- package/dist/commands/push.js +19 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/redeploy.d.ts +7 -0
- package/dist/commands/redeploy.js +13 -0
- package/dist/commands/redeploy.js.map +1 -0
- package/dist/commands/secrets.d.ts +16 -0
- package/dist/commands/secrets.js +169 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/ssh.d.ts +9 -0
- package/dist/commands/ssh.js +108 -0
- package/dist/commands/ssh.js.map +1 -0
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.js +13 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update.d.ts +7 -0
- package/dist/commands/update.js +126 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/validate.d.ts +7 -0
- package/dist/commands/validate.js +13 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/webhooks.d.ts +7 -0
- package/dist/commands/webhooks.js +13 -0
- package/dist/commands/webhooks.js.map +1 -0
- package/dist/lib/__tests__/identity.test.d.ts +1 -0
- package/dist/lib/__tests__/identity.test.js +186 -0
- package/dist/lib/__tests__/identity.test.js.map +1 -0
- package/dist/lib/__tests__/validate-agent.test.d.ts +1 -0
- package/dist/lib/__tests__/validate-agent.test.js +38 -0
- package/dist/lib/__tests__/validate-agent.test.js.map +1 -0
- package/dist/lib/config.d.ts +69 -0
- package/dist/lib/config.js +218 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/constants.d.ts +5 -0
- package/dist/lib/constants.js +29 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/exec.d.ts +24 -0
- package/dist/lib/exec.js +63 -0
- package/dist/lib/exec.js.map +1 -0
- package/dist/lib/prerequisites.d.ts +8 -0
- package/dist/lib/prerequisites.js +146 -0
- package/dist/lib/prerequisites.js.map +1 -0
- package/dist/lib/process.d.ts +18 -0
- package/dist/lib/process.js +37 -0
- package/dist/lib/process.js.map +1 -0
- package/dist/lib/pulumi.d.ts +37 -0
- package/dist/lib/pulumi.js +87 -0
- package/dist/lib/pulumi.js.map +1 -0
- package/dist/lib/tailscale.d.ts +75 -0
- package/dist/lib/tailscale.js +251 -0
- package/dist/lib/tailscale.js.map +1 -0
- package/dist/lib/tool-helpers.d.ts +15 -0
- package/dist/lib/tool-helpers.js +35 -0
- package/dist/lib/tool-helpers.js.map +1 -0
- package/dist/lib/ui.d.ts +26 -0
- package/dist/lib/ui.js +86 -0
- package/dist/lib/ui.js.map +1 -0
- package/dist/lib/update-check.d.ts +8 -0
- package/dist/lib/update-check.js +151 -0
- package/dist/lib/update-check.js.map +1 -0
- package/dist/lib/vendor.d.ts +34 -0
- package/dist/lib/vendor.js +128 -0
- package/dist/lib/vendor.js.map +1 -0
- package/dist/lib/workspace.d.ts +21 -0
- package/dist/lib/workspace.js +170 -0
- package/dist/lib/workspace.js.map +1 -0
- package/dist/tools/deploy.d.ts +16 -0
- package/dist/tools/deploy.js +181 -0
- package/dist/tools/deploy.js.map +1 -0
- package/dist/tools/destroy.d.ts +16 -0
- package/dist/tools/destroy.js +119 -0
- package/dist/tools/destroy.js.map +1 -0
- package/dist/tools/index.d.ts +20 -0
- package/dist/tools/index.js +34 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/push.d.ts +29 -0
- package/dist/tools/push.js +341 -0
- package/dist/tools/push.js.map +1 -0
- package/dist/tools/redeploy.d.ts +17 -0
- package/dist/tools/redeploy.js +181 -0
- package/dist/tools/redeploy.js.map +1 -0
- package/dist/tools/status.d.ts +16 -0
- package/dist/tools/status.js +205 -0
- package/dist/tools/status.js.map +1 -0
- package/dist/tools/validate.d.ts +16 -0
- package/dist/tools/validate.js +219 -0
- package/dist/tools/validate.js.map +1 -0
- package/dist/tools/webhooks.d.ts +17 -0
- package/dist/tools/webhooks.js +181 -0
- package/dist/tools/webhooks.js.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/infra/Pulumi.yaml +6 -0
- package/infra/dist/components/cloud-init.js +412 -0
- package/infra/dist/components/config-generator.js +254 -0
- package/infra/dist/components/hetzner-agent.js +162 -0
- package/infra/dist/components/index.js +18 -0
- package/infra/dist/components/openclaw-agent.js +287 -0
- package/infra/dist/components/shared.js +132 -0
- package/infra/dist/components/types.js +6 -0
- package/infra/dist/index.js +387 -0
- package/infra/dist/shared-vpc.js +167 -0
- package/infra/node_modules/@clawup/core/dist/__tests__/schemas.test.d.ts +2 -0
- package/infra/node_modules/@clawup/core/dist/__tests__/schemas.test.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/__tests__/schemas.test.js +124 -0
- package/infra/node_modules/@clawup/core/dist/__tests__/schemas.test.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/coding-agent-registry.d.ts +32 -0
- package/infra/node_modules/@clawup/core/dist/coding-agent-registry.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/coding-agent-registry.js +56 -0
- package/infra/node_modules/@clawup/core/dist/coding-agent-registry.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/constants.d.ts +137 -0
- package/infra/node_modules/@clawup/core/dist/constants.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/constants.js +314 -0
- package/infra/node_modules/@clawup/core/dist/constants.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/dep-registry.d.ts +25 -0
- package/infra/node_modules/@clawup/core/dist/dep-registry.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/dep-registry.js +46 -0
- package/infra/node_modules/@clawup/core/dist/dep-registry.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/deps.d.ts +18 -0
- package/infra/node_modules/@clawup/core/dist/deps.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/deps.js +39 -0
- package/infra/node_modules/@clawup/core/dist/deps.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/identity.d.ts +20 -0
- package/infra/node_modules/@clawup/core/dist/identity.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/identity.js +217 -0
- package/infra/node_modules/@clawup/core/dist/identity.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/index.d.ts +18 -0
- package/infra/node_modules/@clawup/core/dist/index.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/index.js +52 -0
- package/infra/node_modules/@clawup/core/dist/index.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/plugin-registry.d.ts +13 -0
- package/infra/node_modules/@clawup/core/dist/plugin-registry.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/plugin-registry.js +24 -0
- package/infra/node_modules/@clawup/core/dist/plugin-registry.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/schemas/identity.d.ts +74 -0
- package/infra/node_modules/@clawup/core/dist/schemas/identity.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/schemas/identity.js +45 -0
- package/infra/node_modules/@clawup/core/dist/schemas/identity.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/schemas/index.d.ts +6 -0
- package/infra/node_modules/@clawup/core/dist/schemas/index.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/schemas/index.js +13 -0
- package/infra/node_modules/@clawup/core/dist/schemas/index.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/schemas/manifest.d.ts +159 -0
- package/infra/node_modules/@clawup/core/dist/schemas/manifest.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/schemas/manifest.js +54 -0
- package/infra/node_modules/@clawup/core/dist/schemas/manifest.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/skills.d.ts +30 -0
- package/infra/node_modules/@clawup/core/dist/skills.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/skills.js +52 -0
- package/infra/node_modules/@clawup/core/dist/skills.js.map +1 -0
- package/infra/node_modules/@clawup/core/dist/types.d.ts +59 -0
- package/infra/node_modules/@clawup/core/dist/types.d.ts.map +1 -0
- package/infra/node_modules/@clawup/core/dist/types.js +30 -0
- package/infra/node_modules/@clawup/core/dist/types.js.map +1 -0
- package/infra/node_modules/@clawup/core/package.json +46 -0
- package/infra/package.json +12 -0
- package/package.json +43 -0
- 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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"}
|
package/dist/types.d.ts
ADDED
|
@@ -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,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
|