@agenthifive/openclaw-setup 0.1.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/dist/auto-patch.d.ts +56 -0
- package/dist/auto-patch.d.ts.map +1 -0
- package/dist/auto-patch.js +422 -0
- package/dist/auto-patch.js.map +1 -0
- package/dist/cli.d.ts +18 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +51 -0
- package/dist/cli.js.map +1 -0
- package/dist/config-discovery.d.ts +41 -0
- package/dist/config-discovery.d.ts.map +1 -0
- package/dist/config-discovery.js +161 -0
- package/dist/config-discovery.js.map +1 -0
- package/dist/jwt-utils.d.ts +29 -0
- package/dist/jwt-utils.d.ts.map +1 -0
- package/dist/jwt-utils.js +55 -0
- package/dist/jwt-utils.js.map +1 -0
- package/dist/setup-wizard.d.ts +34 -0
- package/dist/setup-wizard.d.ts.map +1 -0
- package/dist/setup-wizard.js +515 -0
- package/dist/setup-wizard.js.map +1 -0
- package/dist/vault-token-manager.d.ts +42 -0
- package/dist/vault-token-manager.d.ts.map +1 -0
- package/dist/vault-token-manager.js +124 -0
- package/dist/vault-token-manager.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentHiFive standalone setup CLI.
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates the full setup flow in one command:
|
|
5
|
+
* 1. Checks OpenClaw is installed
|
|
6
|
+
* 2. Runs `openclaw onboard` if needed
|
|
7
|
+
* 3. Installs the @agenthifive/openclaw plugin
|
|
8
|
+
* 4. Bootstraps agent auth (key pair + token exchange)
|
|
9
|
+
* 5. Fetches vault capabilities
|
|
10
|
+
* 6. Writes plugin config to openclaw.json
|
|
11
|
+
* 7. Patches OpenClaw for credential proxying
|
|
12
|
+
* 8. Launches `openclaw model` for default model selection
|
|
13
|
+
*/
|
|
14
|
+
import { execSync } from "node:child_process";
|
|
15
|
+
import { mkdirSync, writeFileSync, existsSync, readdirSync } from "node:fs";
|
|
16
|
+
import os from "node:os";
|
|
17
|
+
import path from "node:path";
|
|
18
|
+
import { generateKeyPair, exportJWK } from "jose";
|
|
19
|
+
import { VaultTokenManager } from "./vault-token-manager.js";
|
|
20
|
+
import { resolveOpenClawConfigPath, defaultConfigPath, readExistingConfig, mergePluginConfig, } from "./config-discovery.js";
|
|
21
|
+
import { findOpenClawInstallDir, validateOpenClawDir, applyPatch, } from "./auto-patch.js";
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Readline helpers
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
async function prompt(question, defaultValue) {
|
|
26
|
+
const { createInterface } = await import("node:readline");
|
|
27
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
28
|
+
const suffix = defaultValue ? ` [${defaultValue}]` : "";
|
|
29
|
+
return new Promise((resolve) => {
|
|
30
|
+
rl.question(`${question}${suffix}: `, (answer) => {
|
|
31
|
+
rl.close();
|
|
32
|
+
resolve(answer.trim() || defaultValue || "");
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
// Shell helpers
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
function isOpenClawInstalled() {
|
|
40
|
+
try {
|
|
41
|
+
execSync("openclaw --version", { stdio: "pipe" });
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function isOnboarded() {
|
|
49
|
+
// Check for existing config file
|
|
50
|
+
const configPath = resolveOpenClawConfigPath();
|
|
51
|
+
if (configPath)
|
|
52
|
+
return true;
|
|
53
|
+
// Check if state directory at least exists
|
|
54
|
+
const stateDir = path.join(os.homedir(), ".openclaw");
|
|
55
|
+
return existsSync(stateDir);
|
|
56
|
+
}
|
|
57
|
+
function isPluginInstalled() {
|
|
58
|
+
const extensionsDir = path.join(os.homedir(), ".openclaw", "extensions");
|
|
59
|
+
if (!existsSync(extensionsDir))
|
|
60
|
+
return false;
|
|
61
|
+
// Check for agenthifive directory in extensions
|
|
62
|
+
try {
|
|
63
|
+
const entries = readdirSync(extensionsDir);
|
|
64
|
+
return entries.some((e) => e === "agenthifive" || e === "@agenthifive");
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function hasDefaultModel() {
|
|
71
|
+
const configPath = resolveOpenClawConfigPath();
|
|
72
|
+
if (!configPath)
|
|
73
|
+
return false;
|
|
74
|
+
try {
|
|
75
|
+
const config = readExistingConfig(configPath);
|
|
76
|
+
const agents = config.agents;
|
|
77
|
+
const defaults = agents?.defaults;
|
|
78
|
+
const model = defaults?.model;
|
|
79
|
+
if (!model)
|
|
80
|
+
return false;
|
|
81
|
+
if (typeof model === "string")
|
|
82
|
+
return true;
|
|
83
|
+
if (typeof model === "object" && model !== null) {
|
|
84
|
+
return !!model.primary;
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
// Vault API helpers
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
95
|
+
async function bootstrapAgent(baseUrl, bootstrapSecret) {
|
|
96
|
+
const { publicKey, privateKey } = await generateKeyPair("ES256");
|
|
97
|
+
const publicJWK = await exportJWK(publicKey);
|
|
98
|
+
const privateJWK = await exportJWK(privateKey);
|
|
99
|
+
const response = await fetch(`${baseUrl}/v1/agents/bootstrap`, {
|
|
100
|
+
method: "POST",
|
|
101
|
+
headers: { "Content-Type": "application/json" },
|
|
102
|
+
body: JSON.stringify({
|
|
103
|
+
bootstrapSecret: bootstrapSecret.trim(),
|
|
104
|
+
publicKey: publicJWK,
|
|
105
|
+
}),
|
|
106
|
+
signal: AbortSignal.timeout(10_000),
|
|
107
|
+
});
|
|
108
|
+
if (!response.ok) {
|
|
109
|
+
const body = await response.text().catch(() => "");
|
|
110
|
+
throw new Error(`Bootstrap failed (${response.status}): ${body || "check that the secret is valid and not expired"}`);
|
|
111
|
+
}
|
|
112
|
+
const result = (await response.json());
|
|
113
|
+
return { ...result, privateKey: privateJWK };
|
|
114
|
+
}
|
|
115
|
+
async function fetchCapabilities(baseUrl, token) {
|
|
116
|
+
const response = await fetch(`${baseUrl}/v1/capabilities/me`, {
|
|
117
|
+
method: "GET",
|
|
118
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
119
|
+
signal: AbortSignal.timeout(5_000),
|
|
120
|
+
});
|
|
121
|
+
if (!response.ok) {
|
|
122
|
+
throw new Error(`Capabilities fetch failed (${response.status})`);
|
|
123
|
+
}
|
|
124
|
+
const body = (await response.json());
|
|
125
|
+
return body.activeConnections ?? [];
|
|
126
|
+
}
|
|
127
|
+
// ---------------------------------------------------------------------------
|
|
128
|
+
// Service mapping
|
|
129
|
+
// ---------------------------------------------------------------------------
|
|
130
|
+
const SUPPORTED_SERVICES = {
|
|
131
|
+
telegram: "telegram",
|
|
132
|
+
slack: "slack",
|
|
133
|
+
"microsoft-teams": "msteams",
|
|
134
|
+
"anthropic-messages": "anthropic",
|
|
135
|
+
openai: "openai",
|
|
136
|
+
gemini: "gemini",
|
|
137
|
+
};
|
|
138
|
+
function integrationLabel(conn) {
|
|
139
|
+
if (conn.category === "llm")
|
|
140
|
+
return "LLM proxy";
|
|
141
|
+
if (conn.credentialType === "bot_token")
|
|
142
|
+
return "brokered API proxy";
|
|
143
|
+
if (conn.credentialType === "oauth")
|
|
144
|
+
return "brokered API proxy";
|
|
145
|
+
return "auth managed";
|
|
146
|
+
}
|
|
147
|
+
// ---------------------------------------------------------------------------
|
|
148
|
+
// Config output builder
|
|
149
|
+
// ---------------------------------------------------------------------------
|
|
150
|
+
export function buildConfigOutput(params) {
|
|
151
|
+
return {
|
|
152
|
+
plugins: {
|
|
153
|
+
enabled: true,
|
|
154
|
+
allow: ["agenthifive"],
|
|
155
|
+
load: {
|
|
156
|
+
paths: ["@agenthifive/openclaw"],
|
|
157
|
+
},
|
|
158
|
+
entries: {
|
|
159
|
+
agenthifive: {
|
|
160
|
+
enabled: true,
|
|
161
|
+
hooks: { allowPromptInjection: true },
|
|
162
|
+
config: {
|
|
163
|
+
baseUrl: params.baseUrl,
|
|
164
|
+
auth: {
|
|
165
|
+
mode: "agent",
|
|
166
|
+
agentId: params.agentId,
|
|
167
|
+
privateKey: Buffer.from(JSON.stringify(params.privateKey)).toString("base64"),
|
|
168
|
+
},
|
|
169
|
+
connectedProviders: params.connectedProviders,
|
|
170
|
+
proxiedProviders: params.proxiedProviders,
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
// ---------------------------------------------------------------------------
|
|
178
|
+
// Main setup flow
|
|
179
|
+
// ---------------------------------------------------------------------------
|
|
180
|
+
export async function runSetup(opts = {}) {
|
|
181
|
+
const log = (msg) => process.stdout.write(`${msg}\n`);
|
|
182
|
+
log("");
|
|
183
|
+
log(" AgentHiFive Setup");
|
|
184
|
+
log(" " + "=".repeat(40));
|
|
185
|
+
log("");
|
|
186
|
+
// -----------------------------------------------------------------------
|
|
187
|
+
// Step 0: Check OpenClaw is installed
|
|
188
|
+
// -----------------------------------------------------------------------
|
|
189
|
+
if (!isOpenClawInstalled()) {
|
|
190
|
+
throw new Error("OpenClaw is not installed. Install it first:\n\n" +
|
|
191
|
+
" npm install -g openclaw@latest\n");
|
|
192
|
+
}
|
|
193
|
+
log(" [1/7] OpenClaw installed");
|
|
194
|
+
// -----------------------------------------------------------------------
|
|
195
|
+
// Step 1: Auto-onboard if needed
|
|
196
|
+
// -----------------------------------------------------------------------
|
|
197
|
+
if (!opts.skipOnboard && !isOnboarded()) {
|
|
198
|
+
log(" [2/7] Running OpenClaw onboard...");
|
|
199
|
+
log("");
|
|
200
|
+
try {
|
|
201
|
+
execSync("openclaw onboard --non-interactive --accept-risk --auth-choice skip " +
|
|
202
|
+
"--install-daemon --skip-channels --skip-skills --skip-search --skip-health --skip-ui", { stdio: "inherit" });
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
throw new Error("OpenClaw onboard failed. Run it manually first:\n\n" +
|
|
206
|
+
" openclaw onboard --non-interactive --accept-risk --auth-choice skip " +
|
|
207
|
+
"--install-daemon --skip-channels --skip-skills --skip-search --skip-health --skip-ui\n");
|
|
208
|
+
}
|
|
209
|
+
log("");
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
log(" [2/7] OpenClaw onboarded");
|
|
213
|
+
}
|
|
214
|
+
// -----------------------------------------------------------------------
|
|
215
|
+
// Step 2: Install plugin if needed
|
|
216
|
+
// -----------------------------------------------------------------------
|
|
217
|
+
if (!opts.skipPluginInstall && !isPluginInstalled()) {
|
|
218
|
+
log(" [3/7] Installing AgentHiFive plugin...");
|
|
219
|
+
log("");
|
|
220
|
+
try {
|
|
221
|
+
execSync("openclaw plugins install @agenthifive/openclaw", {
|
|
222
|
+
stdio: "inherit",
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
throw new Error("Plugin installation failed. Try manually:\n\n" +
|
|
227
|
+
" openclaw plugins install @agenthifive/openclaw\n");
|
|
228
|
+
}
|
|
229
|
+
log("");
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
log(" [3/7] AgentHiFive plugin installed");
|
|
233
|
+
}
|
|
234
|
+
// -----------------------------------------------------------------------
|
|
235
|
+
// Step 3: Base URL
|
|
236
|
+
// -----------------------------------------------------------------------
|
|
237
|
+
let baseUrl = opts.baseUrl;
|
|
238
|
+
if (!baseUrl) {
|
|
239
|
+
if (opts.nonInteractive) {
|
|
240
|
+
throw new Error("--base-url is required in non-interactive mode");
|
|
241
|
+
}
|
|
242
|
+
baseUrl = await prompt(" AgentHiFive base URL", "https://app.agenthifive.com");
|
|
243
|
+
}
|
|
244
|
+
baseUrl = baseUrl.replace(/\/+$/, "");
|
|
245
|
+
// -----------------------------------------------------------------------
|
|
246
|
+
// Step 4: Bootstrap secret + agent auth
|
|
247
|
+
// -----------------------------------------------------------------------
|
|
248
|
+
let bootstrapSecret = opts.bootstrapSecret;
|
|
249
|
+
if (!bootstrapSecret) {
|
|
250
|
+
if (opts.nonInteractive) {
|
|
251
|
+
throw new Error("--bootstrap-secret is required in non-interactive mode");
|
|
252
|
+
}
|
|
253
|
+
log("");
|
|
254
|
+
log(" Generate a bootstrap secret from the AgentHiFive dashboard:");
|
|
255
|
+
log(" Dashboard -> Agents -> [your agent] -> Bootstrap Secret");
|
|
256
|
+
log(" The secret expires in 1 hour.");
|
|
257
|
+
log("");
|
|
258
|
+
bootstrapSecret = await prompt(" Bootstrap secret (ah5b_...)");
|
|
259
|
+
}
|
|
260
|
+
if (!bootstrapSecret.startsWith("ah5b_")) {
|
|
261
|
+
throw new Error("Bootstrap secrets must start with ah5b_");
|
|
262
|
+
}
|
|
263
|
+
log("");
|
|
264
|
+
log(" [4/7] Bootstrapping agent...");
|
|
265
|
+
const { agentId, name, status, privateKey } = await bootstrapAgent(baseUrl, bootstrapSecret);
|
|
266
|
+
log(` Agent "${name}" bootstrapped (${agentId.slice(0, 8)}..., status: ${status})`);
|
|
267
|
+
// Verify token exchange
|
|
268
|
+
log(" Verifying token exchange...");
|
|
269
|
+
const tokenManager = new VaultTokenManager({
|
|
270
|
+
baseUrl,
|
|
271
|
+
agentId,
|
|
272
|
+
privateKey,
|
|
273
|
+
tokenAudience: baseUrl,
|
|
274
|
+
});
|
|
275
|
+
try {
|
|
276
|
+
await tokenManager.init();
|
|
277
|
+
log(" Token exchange successful");
|
|
278
|
+
}
|
|
279
|
+
catch (err) {
|
|
280
|
+
log(` WARNING: Token exchange failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
281
|
+
log(" Config will still be generated — you may need to fix auth settings.");
|
|
282
|
+
tokenManager.stop();
|
|
283
|
+
outputMinimalConfig(log, baseUrl, agentId, privateKey);
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
// -----------------------------------------------------------------------
|
|
287
|
+
// Step 5: Fetch capabilities
|
|
288
|
+
// -----------------------------------------------------------------------
|
|
289
|
+
log(" [5/7] Fetching capabilities...");
|
|
290
|
+
let vaultConnections = [];
|
|
291
|
+
try {
|
|
292
|
+
vaultConnections = await fetchCapabilities(baseUrl, tokenManager.getToken());
|
|
293
|
+
}
|
|
294
|
+
catch (err) {
|
|
295
|
+
log(` WARNING: Could not fetch capabilities: ${err instanceof Error ? err.message : String(err)}`);
|
|
296
|
+
}
|
|
297
|
+
tokenManager.stop();
|
|
298
|
+
// Show connection status
|
|
299
|
+
const connections = {};
|
|
300
|
+
const connectedProviders = [];
|
|
301
|
+
const proxiedProviders = [];
|
|
302
|
+
const seenServices = new Set();
|
|
303
|
+
log("");
|
|
304
|
+
log(" Connected Services:");
|
|
305
|
+
log(" " + "-".repeat(50));
|
|
306
|
+
for (const conn of vaultConnections) {
|
|
307
|
+
const openclawName = SUPPORTED_SERVICES[conn.service] ?? conn.service;
|
|
308
|
+
connections[openclawName] = conn.connectionId ?? "vault-managed";
|
|
309
|
+
if (seenServices.has(conn.service))
|
|
310
|
+
continue;
|
|
311
|
+
seenServices.add(conn.service);
|
|
312
|
+
const displayLabel = conn.displayName || openclawName;
|
|
313
|
+
log(` + ${displayLabel.padEnd(20)} - connected (${integrationLabel(conn)})`);
|
|
314
|
+
connectedProviders.push(openclawName);
|
|
315
|
+
if (conn.category === "llm") {
|
|
316
|
+
proxiedProviders.push(openclawName);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
for (const [serviceId, openclawName] of Object.entries(SUPPORTED_SERVICES)) {
|
|
320
|
+
if (!seenServices.has(serviceId)) {
|
|
321
|
+
log(` - ${openclawName.padEnd(20)} - not connected`);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
if (vaultConnections.length === 0) {
|
|
325
|
+
log(" No connections found. Add connections in the AgentHiFive dashboard.");
|
|
326
|
+
}
|
|
327
|
+
// -----------------------------------------------------------------------
|
|
328
|
+
// Step 6: Build + write config
|
|
329
|
+
// -----------------------------------------------------------------------
|
|
330
|
+
log("");
|
|
331
|
+
log(" [6/7] Writing config...");
|
|
332
|
+
const configBlock = buildConfigOutput({
|
|
333
|
+
baseUrl,
|
|
334
|
+
agentId,
|
|
335
|
+
privateKey,
|
|
336
|
+
connections,
|
|
337
|
+
connectedProviders,
|
|
338
|
+
proxiedProviders,
|
|
339
|
+
});
|
|
340
|
+
let configPath = opts.configPath ?? resolveOpenClawConfigPath();
|
|
341
|
+
if (configPath) {
|
|
342
|
+
log(` Found config: ${configPath}`);
|
|
343
|
+
}
|
|
344
|
+
if (!configPath && !opts.nonInteractive) {
|
|
345
|
+
const suggested = defaultConfigPath();
|
|
346
|
+
configPath = await prompt(" OpenClaw config path", suggested);
|
|
347
|
+
if (!configPath)
|
|
348
|
+
configPath = null;
|
|
349
|
+
}
|
|
350
|
+
if (!configPath) {
|
|
351
|
+
configPath = defaultConfigPath();
|
|
352
|
+
}
|
|
353
|
+
try {
|
|
354
|
+
const existing = readExistingConfig(configPath);
|
|
355
|
+
const merged = mergePluginConfig(existing, configBlock);
|
|
356
|
+
mkdirSync(path.dirname(configPath), { recursive: true });
|
|
357
|
+
writeFileSync(configPath, JSON.stringify(merged, null, 2) + "\n", "utf-8");
|
|
358
|
+
log(` Config written to: ${configPath}`);
|
|
359
|
+
log("");
|
|
360
|
+
log(" Plugin config (agenthifive):");
|
|
361
|
+
log(" " + "-".repeat(40));
|
|
362
|
+
const ah5Entry = configBlock.plugins;
|
|
363
|
+
const entries = ah5Entry.entries;
|
|
364
|
+
const lines = JSON.stringify(entries.agenthifive, null, 2).split("\n");
|
|
365
|
+
for (const line of lines) {
|
|
366
|
+
log(` ${line}`);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
catch (err) {
|
|
370
|
+
log(` WARNING: Could not write config: ${err instanceof Error ? err.message : String(err)}`);
|
|
371
|
+
log("");
|
|
372
|
+
log(" Add this to your openclaw.json manually:");
|
|
373
|
+
log(JSON.stringify(configBlock, null, 2));
|
|
374
|
+
}
|
|
375
|
+
// -----------------------------------------------------------------------
|
|
376
|
+
// Step 7: Auto-patch + model selection
|
|
377
|
+
// -----------------------------------------------------------------------
|
|
378
|
+
log("");
|
|
379
|
+
log(" [7/7] Applying credential proxying patch...");
|
|
380
|
+
let openclawInstall = opts.openclawDir
|
|
381
|
+
? validateOpenClawDir(opts.openclawDir)
|
|
382
|
+
: findOpenClawInstallDir();
|
|
383
|
+
if (!openclawInstall && !opts.nonInteractive) {
|
|
384
|
+
const userPath = await prompt(" OpenClaw installation path (press Enter to skip)");
|
|
385
|
+
if (userPath) {
|
|
386
|
+
openclawInstall = validateOpenClawDir(userPath);
|
|
387
|
+
if (!openclawInstall) {
|
|
388
|
+
log(` WARNING: "${userPath}" does not appear to be an OpenClaw installation.`);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
if (openclawInstall) {
|
|
393
|
+
try {
|
|
394
|
+
const result = applyPatch(openclawInstall);
|
|
395
|
+
if (result.applied) {
|
|
396
|
+
log(` ${result.message}`);
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
log(` WARNING: ${result.message}`);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
catch (err) {
|
|
403
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
404
|
+
if (msg.includes("EACCES") || msg.includes("permission denied")) {
|
|
405
|
+
log(" ERROR: Permission denied. Try running with sudo:");
|
|
406
|
+
log(" sudo ah5-setup ...");
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
log(` WARNING: Auto-patch failed: ${msg}`);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
else {
|
|
414
|
+
log(" WARNING: Could not find OpenClaw installation. Skipping auto-patch.");
|
|
415
|
+
log(" Run 'ah5-setup --openclaw-dir /path/to/openclaw' to patch manually.");
|
|
416
|
+
}
|
|
417
|
+
// -----------------------------------------------------------------------
|
|
418
|
+
// Model selection via openclaw model
|
|
419
|
+
// -----------------------------------------------------------------------
|
|
420
|
+
if (!opts.skipModel && !hasDefaultModel()) {
|
|
421
|
+
log("");
|
|
422
|
+
log(" " + "-".repeat(50));
|
|
423
|
+
log(" Select a default LLM model for the agent.");
|
|
424
|
+
log(" (The vault will provide the API key)");
|
|
425
|
+
log("");
|
|
426
|
+
if (opts.nonInteractive) {
|
|
427
|
+
log(" Skipping model selection in non-interactive mode.");
|
|
428
|
+
log(" Run 'openclaw model' to set a default model.");
|
|
429
|
+
}
|
|
430
|
+
else {
|
|
431
|
+
try {
|
|
432
|
+
execSync("openclaw model", { stdio: "inherit" });
|
|
433
|
+
}
|
|
434
|
+
catch {
|
|
435
|
+
log(" WARNING: Could not launch model picker.");
|
|
436
|
+
log(" Run 'openclaw model' manually to set a default model.");
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
log("");
|
|
441
|
+
log(" " + "=".repeat(50));
|
|
442
|
+
log(" Setup complete!");
|
|
443
|
+
log("");
|
|
444
|
+
log(" To change the default model: openclaw model");
|
|
445
|
+
log(" To manage connections: https://app.agenthifive.com");
|
|
446
|
+
log("");
|
|
447
|
+
}
|
|
448
|
+
// ---------------------------------------------------------------------------
|
|
449
|
+
// Fallback: minimal config when token exchange fails
|
|
450
|
+
// ---------------------------------------------------------------------------
|
|
451
|
+
function outputMinimalConfig(log, baseUrl, agentId, privateKey) {
|
|
452
|
+
const configBlock = buildConfigOutput({
|
|
453
|
+
baseUrl,
|
|
454
|
+
agentId,
|
|
455
|
+
privateKey,
|
|
456
|
+
connections: {},
|
|
457
|
+
connectedProviders: [],
|
|
458
|
+
proxiedProviders: [],
|
|
459
|
+
});
|
|
460
|
+
log("");
|
|
461
|
+
log(" " + "=".repeat(50));
|
|
462
|
+
log(" Add this to your openclaw.json manually:");
|
|
463
|
+
log(" (capabilities could not be fetched - update manually)");
|
|
464
|
+
log(" " + "=".repeat(50));
|
|
465
|
+
log("");
|
|
466
|
+
log(JSON.stringify(configBlock, null, 2));
|
|
467
|
+
log("");
|
|
468
|
+
}
|
|
469
|
+
// ---------------------------------------------------------------------------
|
|
470
|
+
// CLI argument parser
|
|
471
|
+
// ---------------------------------------------------------------------------
|
|
472
|
+
export function parseSetupArgs(args) {
|
|
473
|
+
const opts = {};
|
|
474
|
+
for (let i = 0; i < args.length; i++) {
|
|
475
|
+
const arg = args[i];
|
|
476
|
+
if (arg === "--base-url" && args[i + 1]) {
|
|
477
|
+
const val = args[++i];
|
|
478
|
+
if (val)
|
|
479
|
+
opts.baseUrl = val;
|
|
480
|
+
}
|
|
481
|
+
else if (arg === "--bootstrap-secret" && args[i + 1]) {
|
|
482
|
+
const val = args[++i];
|
|
483
|
+
if (val)
|
|
484
|
+
opts.bootstrapSecret = val;
|
|
485
|
+
}
|
|
486
|
+
else if (arg === "--config-path" && args[i + 1]) {
|
|
487
|
+
const val = args[++i];
|
|
488
|
+
if (val)
|
|
489
|
+
opts.configPath = val;
|
|
490
|
+
}
|
|
491
|
+
else if (arg === "--openclaw-dir" && args[i + 1]) {
|
|
492
|
+
const val = args[++i];
|
|
493
|
+
if (val)
|
|
494
|
+
opts.openclawDir = val;
|
|
495
|
+
}
|
|
496
|
+
else if (arg === "--non-interactive") {
|
|
497
|
+
opts.nonInteractive = true;
|
|
498
|
+
}
|
|
499
|
+
else if (arg === "--skip-onboard") {
|
|
500
|
+
opts.skipOnboard = true;
|
|
501
|
+
}
|
|
502
|
+
else if (arg === "--skip-plugin-install") {
|
|
503
|
+
opts.skipPluginInstall = true;
|
|
504
|
+
}
|
|
505
|
+
else if (arg === "--skip-model") {
|
|
506
|
+
opts.skipModel = true;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
// Auto-enable non-interactive if both required args are provided
|
|
510
|
+
if (opts.baseUrl && opts.bootstrapSecret) {
|
|
511
|
+
opts.nonInteractive = true;
|
|
512
|
+
}
|
|
513
|
+
return opts;
|
|
514
|
+
}
|
|
515
|
+
//# sourceMappingURL=setup-wizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-wizard.js","sourceRoot":"","sources":["../src/setup-wizard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export type VaultTokenManagerConfig = {
|
|
2
|
+
baseUrl: string;
|
|
3
|
+
agentId: string;
|
|
4
|
+
privateKey: JsonWebKey;
|
|
5
|
+
tokenAudience?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare class VaultTokenManager {
|
|
8
|
+
private readonly baseUrl;
|
|
9
|
+
private readonly agentId;
|
|
10
|
+
private readonly privateKeyJWK;
|
|
11
|
+
private readonly tokenAudience;
|
|
12
|
+
private privateKeyObj;
|
|
13
|
+
private accessToken;
|
|
14
|
+
private tokenExpiresAt;
|
|
15
|
+
private refreshTimer;
|
|
16
|
+
private refreshInFlight;
|
|
17
|
+
/** Called after every successful token refresh with the new token. */
|
|
18
|
+
onRefresh: ((newToken: string) => void) | null;
|
|
19
|
+
/** Called when token refresh fails with 401 — indicates the agent's key is no longer valid. */
|
|
20
|
+
onAuthFailure: (() => void) | null;
|
|
21
|
+
constructor(config: VaultTokenManagerConfig);
|
|
22
|
+
/**
|
|
23
|
+
* Perform the initial token exchange and start the background refresh timer.
|
|
24
|
+
* Must be called (and awaited) before getToken().
|
|
25
|
+
*/
|
|
26
|
+
init(): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Get the current bearer token. Synchronous — relies on background refresh.
|
|
29
|
+
* Throws if init() hasn't been called.
|
|
30
|
+
*/
|
|
31
|
+
getToken(): string;
|
|
32
|
+
/** Stop the background refresh timer. */
|
|
33
|
+
stop(): void;
|
|
34
|
+
/**
|
|
35
|
+
* Force an immediate token refresh. Called on-demand when a 401 is received.
|
|
36
|
+
* Coalesces concurrent requests — if a refresh is already in flight, callers
|
|
37
|
+
* wait for the same promise instead of hammering the token endpoint.
|
|
38
|
+
*/
|
|
39
|
+
forceRefresh(): Promise<boolean>;
|
|
40
|
+
private refreshToken;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=vault-token-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-token-manager.d.ts","sourceRoot":"","sources":["../src/vault-token-manager.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAa;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,eAAe,CAA8B;IAErD,sEAAsE;IACtE,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IAEtD,+FAA+F;IAC/F,aAAa,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAQ;gBAE9B,MAAM,EAAE,uBAAuB;IAO3C;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B3B;;;OAGG;IACH,QAAQ,IAAI,MAAM;IAOlB,yCAAyC;IACzC,IAAI,IAAI,IAAI;IAOZ;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;YAsBxB,YAAY;CAqC3B"}
|