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,341 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Push Tool — Live-update running agents via Tailscale SSH
|
|
4
|
+
*
|
|
5
|
+
* Syncs workspace files, skills, config, and OpenClaw updates to
|
|
6
|
+
* running agent instances without redeploying infrastructure.
|
|
7
|
+
*
|
|
8
|
+
* Platform-agnostic implementation using RuntimeAdapter.
|
|
9
|
+
*/
|
|
10
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
13
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
14
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
15
|
+
}
|
|
16
|
+
Object.defineProperty(o, k2, desc);
|
|
17
|
+
}) : (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
o[k2] = m[k];
|
|
20
|
+
}));
|
|
21
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
22
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
23
|
+
}) : function(o, v) {
|
|
24
|
+
o["default"] = v;
|
|
25
|
+
});
|
|
26
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
+
var ownKeys = function(o) {
|
|
28
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
+
var ar = [];
|
|
30
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
+
return ar;
|
|
32
|
+
};
|
|
33
|
+
return ownKeys(o);
|
|
34
|
+
};
|
|
35
|
+
return function (mod) {
|
|
36
|
+
if (mod && mod.__esModule) return mod;
|
|
37
|
+
var result = {};
|
|
38
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
+
__setModuleDefault(result, mod);
|
|
40
|
+
return result;
|
|
41
|
+
};
|
|
42
|
+
})();
|
|
43
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
44
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
45
|
+
};
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.pushTool = void 0;
|
|
48
|
+
const fs = __importStar(require("fs"));
|
|
49
|
+
const path = __importStar(require("path"));
|
|
50
|
+
const config_1 = require("../lib/config");
|
|
51
|
+
const core_1 = require("@clawup/core");
|
|
52
|
+
const workspace_1 = require("../lib/workspace");
|
|
53
|
+
const pulumi_1 = require("../lib/pulumi");
|
|
54
|
+
const identity_1 = require("@clawup/core/identity");
|
|
55
|
+
const core_2 = require("@clawup/core");
|
|
56
|
+
const core_3 = require("@clawup/core");
|
|
57
|
+
const os = __importStar(require("os"));
|
|
58
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
59
|
+
/** SSH options for non-interactive connections */
|
|
60
|
+
const SSH_OPTS = [
|
|
61
|
+
"-o", "StrictHostKeyChecking=no",
|
|
62
|
+
"-o", "UserKnownHostsFile=/dev/null",
|
|
63
|
+
"-o", "BatchMode=yes",
|
|
64
|
+
];
|
|
65
|
+
const REMOTE_WORKSPACE = `/home/${core_1.SSH_USER}/.openclaw/workspace`;
|
|
66
|
+
const REMOTE_SKILLS = `${REMOTE_WORKSPACE}/skills`;
|
|
67
|
+
/**
|
|
68
|
+
* Run a command over SSH, returning success/failure and output.
|
|
69
|
+
*/
|
|
70
|
+
function sshExec(exec, host, command) {
|
|
71
|
+
const result = exec.capture("ssh", [
|
|
72
|
+
"-o", "ConnectTimeout=15",
|
|
73
|
+
...SSH_OPTS,
|
|
74
|
+
`${core_1.SSH_USER}@${host}`,
|
|
75
|
+
`"${command.replace(/"/g, '\\"')}"`,
|
|
76
|
+
]);
|
|
77
|
+
return { ok: result.exitCode === 0, output: result.stdout || result.stderr };
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Run rsync to sync a local directory to a remote path.
|
|
81
|
+
*/
|
|
82
|
+
function rsyncDir(exec, localDir, host, remoteDir) {
|
|
83
|
+
// Ensure trailing slash on localDir so rsync syncs contents
|
|
84
|
+
const src = localDir.endsWith("/") ? localDir : `${localDir}/`;
|
|
85
|
+
const result = exec.capture("rsync", [
|
|
86
|
+
"-avz", "--delete",
|
|
87
|
+
"-e", `ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o BatchMode=yes`,
|
|
88
|
+
src,
|
|
89
|
+
`${core_1.SSH_USER}@${host}:${remoteDir}/`,
|
|
90
|
+
]);
|
|
91
|
+
return { ok: result.exitCode === 0, output: result.stdout || result.stderr };
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Copy a single file to a remote path via scp.
|
|
95
|
+
*/
|
|
96
|
+
function scpFile(exec, localFile, host, remotePath) {
|
|
97
|
+
const result = exec.capture("scp", [
|
|
98
|
+
...SSH_OPTS,
|
|
99
|
+
localFile,
|
|
100
|
+
`${core_1.SSH_USER}@${host}:${remotePath}`,
|
|
101
|
+
]);
|
|
102
|
+
return { ok: result.exitCode === 0, output: result.stdout || result.stderr };
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Resolve an agent query (name, role, alias, displayName) against the manifest.
|
|
106
|
+
*/
|
|
107
|
+
function findAgent(agents, query) {
|
|
108
|
+
const q = query.toLowerCase();
|
|
109
|
+
const resolvedRole = core_1.AGENT_ALIASES[q] ?? q;
|
|
110
|
+
return agents.find((a) => a.role === resolvedRole ||
|
|
111
|
+
a.name === q ||
|
|
112
|
+
a.name === `agent-${q}` ||
|
|
113
|
+
a.displayName.toLowerCase() === q);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Push tool implementation
|
|
117
|
+
*/
|
|
118
|
+
const pushTool = async (runtime, options) => {
|
|
119
|
+
const { ui, exec } = runtime;
|
|
120
|
+
ui.intro("Clawup");
|
|
121
|
+
// Ensure workspace is set up
|
|
122
|
+
const wsResult = (0, workspace_1.ensureWorkspace)();
|
|
123
|
+
if (!wsResult.ok) {
|
|
124
|
+
throw new Error(wsResult.error ?? "Failed to set up workspace.");
|
|
125
|
+
}
|
|
126
|
+
const cwd = (0, workspace_1.getWorkspaceDir)();
|
|
127
|
+
// Resolve config name and load manifest
|
|
128
|
+
let configName;
|
|
129
|
+
try {
|
|
130
|
+
configName = (0, config_1.resolveConfigName)(options.config);
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
throw new Error(err.message);
|
|
134
|
+
}
|
|
135
|
+
const manifest = (0, config_1.loadManifest)(configName);
|
|
136
|
+
if (!manifest) {
|
|
137
|
+
throw new Error(`Config '${configName}' could not be loaded.`);
|
|
138
|
+
}
|
|
139
|
+
// Select Pulumi stack to read tailnet config
|
|
140
|
+
const stackResult = (0, pulumi_1.selectOrCreateStack)(manifest.stackName, cwd);
|
|
141
|
+
if (!stackResult.ok) {
|
|
142
|
+
throw new Error(`Could not select Pulumi stack "${manifest.stackName}".`);
|
|
143
|
+
}
|
|
144
|
+
// Get tailnet DNS name
|
|
145
|
+
const tailnetDnsName = (0, pulumi_1.getConfig)("tailnetDnsName", cwd);
|
|
146
|
+
if (!tailnetDnsName) {
|
|
147
|
+
throw new Error("Could not determine tailnet DNS name from Pulumi config.");
|
|
148
|
+
}
|
|
149
|
+
// Default behavior: if no flags are set, push skills + workspace
|
|
150
|
+
const noFlags = !options.skills && !options.workspace && !options.memoryReset &&
|
|
151
|
+
!options.openclaw && !options.pushConfig;
|
|
152
|
+
const doSkills = options.skills || noFlags;
|
|
153
|
+
const doWorkspace = options.workspace || noFlags;
|
|
154
|
+
// Determine target agents
|
|
155
|
+
let targetAgents = manifest.agents;
|
|
156
|
+
if (options.agent) {
|
|
157
|
+
const matched = findAgent(manifest.agents, options.agent);
|
|
158
|
+
if (!matched) {
|
|
159
|
+
const validNames = manifest.agents
|
|
160
|
+
.map((a) => `${a.role}, ${a.displayName.toLowerCase()}, ${a.name}`)
|
|
161
|
+
.join("\n ");
|
|
162
|
+
ui.log.error(`Unknown agent: "${options.agent}"\nValid identifiers:\n ${validNames}`);
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
targetAgents = [matched];
|
|
166
|
+
}
|
|
167
|
+
// Describe what we're pushing
|
|
168
|
+
const actions = [];
|
|
169
|
+
if (doSkills)
|
|
170
|
+
actions.push("skills");
|
|
171
|
+
if (doWorkspace)
|
|
172
|
+
actions.push("workspace");
|
|
173
|
+
if (options.memoryReset)
|
|
174
|
+
actions.push("memory-reset");
|
|
175
|
+
if (options.openclaw)
|
|
176
|
+
actions.push("openclaw upgrade");
|
|
177
|
+
if (options.pushConfig)
|
|
178
|
+
actions.push("config");
|
|
179
|
+
ui.log.step(`Pushing [${actions.join(", ")}] to ${targetAgents.length} agent(s)...`);
|
|
180
|
+
console.log();
|
|
181
|
+
let allOk = true;
|
|
182
|
+
for (const agent of targetAgents) {
|
|
183
|
+
const tsHost = (0, core_1.tailscaleHostname)(manifest.stackName, agent.name);
|
|
184
|
+
const host = `${tsHost}.${tailnetDnsName}`;
|
|
185
|
+
ui.log.info(`${picocolors_1.default.bold(agent.displayName)} (${agent.role}) — ${host}`);
|
|
186
|
+
let needsRestart = false;
|
|
187
|
+
// 1. Push workspace files and skills (unified via identity system)
|
|
188
|
+
if (doWorkspace || doSkills) {
|
|
189
|
+
try {
|
|
190
|
+
const identityCacheDir = path.join(os.homedir(), ".clawup", "identity-cache");
|
|
191
|
+
const identity = (0, identity_1.fetchIdentitySync)(agent.identity, identityCacheDir);
|
|
192
|
+
// Ensure remote workspace dir exists
|
|
193
|
+
sshExec(exec, host, `mkdir -p ${REMOTE_WORKSPACE}`);
|
|
194
|
+
// Write identity files to a temp dir for transfer
|
|
195
|
+
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "push-identity-"));
|
|
196
|
+
for (const [relPath, content] of Object.entries(identity.files)) {
|
|
197
|
+
const localFile = path.join(tmpDir, relPath);
|
|
198
|
+
fs.mkdirSync(path.dirname(localFile), { recursive: true });
|
|
199
|
+
fs.writeFileSync(localFile, content);
|
|
200
|
+
}
|
|
201
|
+
// Sync workspace files (non-skill files)
|
|
202
|
+
if (doWorkspace) {
|
|
203
|
+
const topFiles = Object.keys(identity.files).filter(f => !f.startsWith("skills/"));
|
|
204
|
+
let wsOk = true;
|
|
205
|
+
for (const relPath of topFiles) {
|
|
206
|
+
const localFile = path.join(tmpDir, relPath);
|
|
207
|
+
const result = scpFile(exec, localFile, host, `${REMOTE_WORKSPACE}/${relPath}`);
|
|
208
|
+
if (!result.ok) {
|
|
209
|
+
console.log(` ${picocolors_1.default.red("FAIL")} workspace file ${relPath}: ${result.output.substring(0, 100)}`);
|
|
210
|
+
wsOk = false;
|
|
211
|
+
allOk = false;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
if (wsOk) {
|
|
215
|
+
console.log(` ${picocolors_1.default.green("OK")} workspace files synced (${topFiles.length} files)`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Sync skills
|
|
219
|
+
if (doSkills) {
|
|
220
|
+
const skillsLocalDir = path.join(tmpDir, "skills");
|
|
221
|
+
if (fs.existsSync(skillsLocalDir)) {
|
|
222
|
+
sshExec(exec, host, `mkdir -p ${REMOTE_SKILLS}`);
|
|
223
|
+
const result = rsyncDir(exec, skillsLocalDir, host, REMOTE_SKILLS);
|
|
224
|
+
if (result.ok) {
|
|
225
|
+
console.log(` ${picocolors_1.default.green("OK")} skills synced`);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
console.log(` ${picocolors_1.default.red("FAIL")} skills sync failed: ${result.output.substring(0, 100)}`);
|
|
229
|
+
allOk = false;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// Install public skills via clawhub
|
|
233
|
+
const { public: publicSkills } = (0, core_2.classifySkills)(identity.manifest.skills);
|
|
234
|
+
for (const skill of publicSkills) {
|
|
235
|
+
const cmd = `export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" && clawhub install ${skill.slug}`;
|
|
236
|
+
const result = sshExec(exec, host, cmd);
|
|
237
|
+
if (result.ok) {
|
|
238
|
+
console.log(` ${picocolors_1.default.green("OK")} clawhub skill installed: ${skill.slug}`);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
console.log(` ${picocolors_1.default.red("FAIL")} clawhub skill ${skill.slug}: ${result.output.substring(0, 100)}`);
|
|
242
|
+
allOk = false;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
// Run dep post-install scripts (e.g., gh auth)
|
|
246
|
+
if (identity.manifest.deps?.length) {
|
|
247
|
+
const resolved = (0, core_3.resolveDeps)(identity.manifest.deps);
|
|
248
|
+
for (const dep of resolved) {
|
|
249
|
+
if (!dep.entry.postInstallScript)
|
|
250
|
+
continue;
|
|
251
|
+
const cmd = dep.entry.postInstallScript;
|
|
252
|
+
const result = sshExec(exec, host, cmd);
|
|
253
|
+
if (result.ok) {
|
|
254
|
+
console.log(` ${picocolors_1.default.green("OK")} dep post-install: ${dep.name}`);
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
console.log(` ${picocolors_1.default.red("FAIL")} dep post-install ${dep.name}: ${result.output.substring(0, 100)}`);
|
|
258
|
+
allOk = false;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// Cleanup temp dir
|
|
264
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
265
|
+
}
|
|
266
|
+
catch (err) {
|
|
267
|
+
console.log(` ${picocolors_1.default.red("FAIL")} identity fetch failed: ${err.message}`);
|
|
268
|
+
allOk = false;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
// 3. Memory reset
|
|
272
|
+
if (options.memoryReset) {
|
|
273
|
+
const cmd = `rm -rf ${REMOTE_WORKSPACE}/memory ${REMOTE_WORKSPACE}/MEMORY.md`;
|
|
274
|
+
const result = sshExec(exec, host, cmd);
|
|
275
|
+
if (result.ok) {
|
|
276
|
+
console.log(` ${picocolors_1.default.green("OK")} memory reset`);
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
console.log(` ${picocolors_1.default.red("FAIL")} memory reset failed: ${result.output.substring(0, 100)}`);
|
|
280
|
+
allOk = false;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// 4. OpenClaw upgrade
|
|
284
|
+
if (options.openclaw) {
|
|
285
|
+
const cmd = `npm install -g openclaw@latest 2>&1`;
|
|
286
|
+
const result = sshExec(exec, host, cmd);
|
|
287
|
+
if (result.ok) {
|
|
288
|
+
console.log(` ${picocolors_1.default.green("OK")} openclaw upgraded`);
|
|
289
|
+
needsRestart = true;
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
console.log(` ${picocolors_1.default.red("FAIL")} openclaw upgrade failed: ${result.output.substring(0, 100)}`);
|
|
293
|
+
allOk = false;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
// 5. Config push
|
|
297
|
+
if (options.pushConfig) {
|
|
298
|
+
const localConfig = path.join(`/home/${core_1.SSH_USER}/.openclaw`, "openclaw.json");
|
|
299
|
+
// The local config is on the operator's machine at ~/.openclaw/openclaw.json
|
|
300
|
+
// However, this should reference the operator's local file
|
|
301
|
+
const operatorConfig = path.join(process.env.HOME ?? "", ".openclaw", "openclaw.json");
|
|
302
|
+
if (fs.existsSync(operatorConfig)) {
|
|
303
|
+
const result = scpFile(exec, operatorConfig, host, `/home/${core_1.SSH_USER}/.openclaw/openclaw.json`);
|
|
304
|
+
if (result.ok) {
|
|
305
|
+
console.log(` ${picocolors_1.default.green("OK")} openclaw.json pushed`);
|
|
306
|
+
needsRestart = true;
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
console.log(` ${picocolors_1.default.red("FAIL")} config push failed: ${result.output.substring(0, 100)}`);
|
|
310
|
+
allOk = false;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
console.log(` ${picocolors_1.default.red("FAIL")} local openclaw.json not found at ${operatorConfig}`);
|
|
315
|
+
allOk = false;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// 6. Restart gateway if needed
|
|
319
|
+
if (needsRestart) {
|
|
320
|
+
const result = sshExec(exec, host, "systemctl --user restart openclaw-gateway");
|
|
321
|
+
if (result.ok) {
|
|
322
|
+
console.log(` ${picocolors_1.default.green("OK")} gateway restarted`);
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
console.log(` ${picocolors_1.default.red("FAIL")} gateway restart failed: ${result.output.substring(0, 100)}`);
|
|
326
|
+
allOk = false;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
console.log();
|
|
330
|
+
}
|
|
331
|
+
// Summary
|
|
332
|
+
if (allOk) {
|
|
333
|
+
ui.log.success(`Push completed successfully for ${targetAgents.length} agent(s).`);
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
ui.log.warn("Push completed with some failures. Check output above.");
|
|
337
|
+
throw new Error("Push completed with failures.");
|
|
338
|
+
}
|
|
339
|
+
};
|
|
340
|
+
exports.pushTool = pushTool;
|
|
341
|
+
//# sourceMappingURL=push.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../tools/push.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redeploy Tool — Update agents in-place with pulumi up --refresh
|
|
3
|
+
*
|
|
4
|
+
* Platform-agnostic implementation using RuntimeAdapter.
|
|
5
|
+
* Unlike destroy+deploy, this reuses existing infrastructure (including Tailscale devices).
|
|
6
|
+
*/
|
|
7
|
+
import type { ToolImplementation } from "../adapters";
|
|
8
|
+
export interface RedeployOptions {
|
|
9
|
+
/** Skip confirmation prompt */
|
|
10
|
+
yes?: boolean;
|
|
11
|
+
/** Config name (auto-detected if only one) */
|
|
12
|
+
config?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Redeploy tool implementation
|
|
16
|
+
*/
|
|
17
|
+
export declare const redeployTool: ToolImplementation<RedeployOptions>;
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Redeploy Tool — Update agents in-place with pulumi up --refresh
|
|
4
|
+
*
|
|
5
|
+
* Platform-agnostic implementation using RuntimeAdapter.
|
|
6
|
+
* Unlike destroy+deploy, this reuses existing infrastructure (including Tailscale devices).
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.redeployTool = void 0;
|
|
13
|
+
const config_1 = require("../lib/config");
|
|
14
|
+
const workspace_1 = require("../lib/workspace");
|
|
15
|
+
const tailscale_1 = require("../lib/tailscale");
|
|
16
|
+
const tool_helpers_1 = require("../lib/tool-helpers");
|
|
17
|
+
const ui_1 = require("../lib/ui");
|
|
18
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
19
|
+
/**
|
|
20
|
+
* Redeploy tool implementation
|
|
21
|
+
*/
|
|
22
|
+
const redeployTool = async (runtime, options) => {
|
|
23
|
+
const { ui, exec } = runtime;
|
|
24
|
+
ui.intro("Agent Army");
|
|
25
|
+
// Ensure workspace is set up
|
|
26
|
+
const wsResult = (0, workspace_1.ensureWorkspace)();
|
|
27
|
+
if (!wsResult.ok) {
|
|
28
|
+
ui.log.error(wsResult.error ?? "Failed to set up workspace.");
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
const cwd = (0, workspace_1.getWorkspaceDir)();
|
|
32
|
+
// Resolve config name and load manifest
|
|
33
|
+
let configName;
|
|
34
|
+
try {
|
|
35
|
+
configName = (0, config_1.resolveConfigName)(options.config);
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
ui.log.error(err.message);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
const manifest = (0, config_1.loadManifest)(configName);
|
|
42
|
+
if (!manifest) {
|
|
43
|
+
ui.log.error(`Config '${configName}' could not be loaded.`);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
// Try to select existing stack
|
|
47
|
+
const selectResult = exec.capture("pulumi", ["stack", "select", manifest.stackName], cwd);
|
|
48
|
+
const stackExists = selectResult.exitCode === 0;
|
|
49
|
+
if (!stackExists) {
|
|
50
|
+
// Stack doesn't exist — fall back to regular deploy flow
|
|
51
|
+
ui.log.warn(`Stack "${manifest.stackName}" does not exist. Falling back to fresh deploy.`);
|
|
52
|
+
const initResult = exec.capture("pulumi", ["stack", "init", manifest.stackName], cwd);
|
|
53
|
+
if (initResult.exitCode !== 0) {
|
|
54
|
+
ui.log.error(initResult.stderr || `Could not create Pulumi stack "${manifest.stackName}".`);
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Show redeploy summary
|
|
59
|
+
ui.note([
|
|
60
|
+
`Stack: ${manifest.stackName}`,
|
|
61
|
+
`Region: ${manifest.region}`,
|
|
62
|
+
`Mode: ${stackExists ? "In-place update (--refresh)" : "Fresh deploy (new stack)"}`,
|
|
63
|
+
``,
|
|
64
|
+
`Agents (${manifest.agents.length}):`,
|
|
65
|
+
(0, ui_1.formatAgentList)(manifest.agents),
|
|
66
|
+
``,
|
|
67
|
+
stackExists
|
|
68
|
+
? `This will update resources in-place where possible.\nTailscale devices will be preserved.`
|
|
69
|
+
: `This will create all resources from scratch.`,
|
|
70
|
+
].join("\n"), "Redeploy Summary");
|
|
71
|
+
// Confirm
|
|
72
|
+
if (!options.yes) {
|
|
73
|
+
const confirmed = await ui.confirm({
|
|
74
|
+
message: "Proceed with redeploy?",
|
|
75
|
+
});
|
|
76
|
+
if (!confirmed) {
|
|
77
|
+
ui.cancel("Redeploy cancelled.");
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Sync manifest to project root so the Pulumi program can read it
|
|
82
|
+
(0, config_1.syncManifestToProject)(configName, cwd);
|
|
83
|
+
// Sync instanceType from manifest to Pulumi config
|
|
84
|
+
const configSetResult = exec.capture("pulumi", ["config", "set", "instanceType", manifest.instanceType], cwd);
|
|
85
|
+
if (configSetResult.exitCode !== 0) {
|
|
86
|
+
ui.log.error(`Failed to set Pulumi config: ${configSetResult.stderr || "unknown error"}`);
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
// Clean up stale Tailscale devices before deploying
|
|
90
|
+
// This prevents duplicates when Pulumi replaces servers (create-before-delete)
|
|
91
|
+
const tailnetDnsName = (0, tool_helpers_1.getConfig)(exec, "tailnetDnsName", cwd);
|
|
92
|
+
const tailscaleApiKey = (0, tool_helpers_1.getConfig)(exec, "tailscaleApiKey", cwd);
|
|
93
|
+
if (tailnetDnsName && tailscaleApiKey) {
|
|
94
|
+
const spinner = ui.spinner("Cleaning up stale Tailscale devices...");
|
|
95
|
+
const { cleaned, failed } = (0, tailscale_1.cleanupTailscaleDevices)(tailscaleApiKey, tailnetDnsName, manifest.stackName, manifest.agents);
|
|
96
|
+
if (cleaned.length > 0) {
|
|
97
|
+
spinner.stop(`Removed ${cleaned.length} stale Tailscale device(s)`);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
spinner.stop("No stale Tailscale devices found");
|
|
101
|
+
}
|
|
102
|
+
if (failed.length > 0) {
|
|
103
|
+
ui.log.warn(`Could not remove some devices: ${failed.join(", ")}. Check https://login.tailscale.com/admin/machines`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Ensure MagicDNS is enabled (required for Tailscale hostname resolution)
|
|
107
|
+
if (tailscaleApiKey) {
|
|
108
|
+
const spinner = ui.spinner("Ensuring Tailscale MagicDNS is enabled...");
|
|
109
|
+
const magicDnsChanged = (0, tailscale_1.ensureMagicDns)(tailscaleApiKey);
|
|
110
|
+
spinner.stop(magicDnsChanged ? "MagicDNS enabled" : "MagicDNS OK");
|
|
111
|
+
}
|
|
112
|
+
// Ensure Tailscale Funnel prerequisites if any agent uses Linear
|
|
113
|
+
const hasLinearAgents = manifest.agents.some((a) => !!(0, tool_helpers_1.getConfig)(exec, `${a.role}LinearApiKey`, cwd));
|
|
114
|
+
if (hasLinearAgents && tailscaleApiKey) {
|
|
115
|
+
const spinner = ui.spinner("Ensuring Tailscale Funnel prerequisites...");
|
|
116
|
+
const funnel = (0, tailscale_1.ensureTailscaleFunnel)(tailscaleApiKey);
|
|
117
|
+
const changes = [];
|
|
118
|
+
if (funnel.funnelAcl)
|
|
119
|
+
changes.push("Funnel ACL enabled");
|
|
120
|
+
spinner.stop(changes.length > 0 ? changes.join(", ") : "Funnel prerequisites OK");
|
|
121
|
+
}
|
|
122
|
+
// Run pulumi up with --refresh to read actual cloud state first
|
|
123
|
+
const pulumiArgs = stackExists
|
|
124
|
+
? ["up", "--refresh", "--yes"]
|
|
125
|
+
: ["up", "--yes"];
|
|
126
|
+
ui.log.step(stackExists ? "Running pulumi up --refresh..." : "Running pulumi up...");
|
|
127
|
+
console.log();
|
|
128
|
+
const exitCode = await exec.stream("pulumi", pulumiArgs, { cwd });
|
|
129
|
+
console.log();
|
|
130
|
+
if (exitCode !== 0) {
|
|
131
|
+
ui.log.error("Redeploy failed. Check the output above for details.");
|
|
132
|
+
if (stackExists) {
|
|
133
|
+
ui.log.warn("If the in-place update cannot recover, try: clawup destroy && clawup deploy");
|
|
134
|
+
}
|
|
135
|
+
process.exit(1);
|
|
136
|
+
}
|
|
137
|
+
ui.log.success("Redeploy complete!");
|
|
138
|
+
// Show outputs
|
|
139
|
+
const outputsResult = exec.capture("pulumi", [
|
|
140
|
+
"stack",
|
|
141
|
+
"output",
|
|
142
|
+
"--json",
|
|
143
|
+
"--show-secrets",
|
|
144
|
+
], cwd);
|
|
145
|
+
if (outputsResult.exitCode === 0) {
|
|
146
|
+
try {
|
|
147
|
+
const outputs = JSON.parse(outputsResult.stdout);
|
|
148
|
+
const lines = [];
|
|
149
|
+
for (const agent of manifest.agents) {
|
|
150
|
+
const urlKey = `${agent.role}TailscaleUrl`;
|
|
151
|
+
const ipKey = `${agent.role}PublicIp`;
|
|
152
|
+
const idKey = `${agent.role}InstanceId`;
|
|
153
|
+
lines.push(`${agent.displayName} (${agent.role}):`);
|
|
154
|
+
if (outputs[urlKey])
|
|
155
|
+
lines.push(` Tailscale URL: ${outputs[urlKey]}`);
|
|
156
|
+
if (outputs[ipKey])
|
|
157
|
+
lines.push(` Public IP: ${outputs[ipKey]}`);
|
|
158
|
+
if (outputs[idKey])
|
|
159
|
+
lines.push(` Instance ID: ${outputs[idKey]}`);
|
|
160
|
+
lines.push("");
|
|
161
|
+
}
|
|
162
|
+
ui.note(lines.join("\n"), "Agent Details");
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
ui.log.warn(`Could not parse stack outputs: ${err instanceof Error ? err.message : String(err)}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Remind user about Tailscale if not connected
|
|
169
|
+
if (!(0, tailscale_1.isTailscaleInstalled)()) {
|
|
170
|
+
const hint = process.platform === "darwin"
|
|
171
|
+
? "Install from the Mac App Store or https://tailscale.com/download"
|
|
172
|
+
: "Install from https://tailscale.com/download";
|
|
173
|
+
ui.log.warn(`Tailscale is required to connect to agents.\n ${hint}\n Then run: ${picocolors_1.default.cyan("tailscale up")}`);
|
|
174
|
+
}
|
|
175
|
+
else if (!(0, tailscale_1.isTailscaleRunning)()) {
|
|
176
|
+
ui.log.warn(`Tailscale is not running. Start it before validating agents.\n Open the Tailscale app or run: ${picocolors_1.default.cyan("tailscale up")}`);
|
|
177
|
+
}
|
|
178
|
+
ui.outro("Agents updated. Run `clawup validate` to verify.");
|
|
179
|
+
};
|
|
180
|
+
exports.redeployTool = redeployTool;
|
|
181
|
+
//# sourceMappingURL=redeploy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redeploy.js","sourceRoot":"","sources":["../../tools/redeploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Status Tool — Show agent statuses from stack outputs
|
|
3
|
+
*
|
|
4
|
+
* Platform-agnostic implementation using RuntimeAdapter.
|
|
5
|
+
*/
|
|
6
|
+
import type { ToolImplementation } from "../adapters";
|
|
7
|
+
export interface StatusOptions {
|
|
8
|
+
/** Output as JSON */
|
|
9
|
+
json?: boolean;
|
|
10
|
+
/** Config name (auto-detected if only one) */
|
|
11
|
+
config?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Status tool implementation
|
|
15
|
+
*/
|
|
16
|
+
export declare const statusTool: ToolImplementation<StatusOptions>;
|