@agenthifive/openclaw-setup 0.2.6 → 0.2.7
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/cli.d.ts +3 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +33 -10
- package/dist/cli.js.map +1 -1
- package/dist/verify.d.ts +20 -0
- package/dist/verify.d.ts.map +1 -0
- package/dist/verify.js +393 -0
- package/dist/verify.js.map +1 -0
- package/package.json +1 -1
package/dist/cli.d.ts
CHANGED
|
@@ -8,11 +8,12 @@
|
|
|
8
8
|
* 3. Bootstraps agent auth with the vault
|
|
9
9
|
* 4. Writes plugin config to openclaw.json
|
|
10
10
|
* 5. Patches OpenClaw for credential proxying
|
|
11
|
-
*
|
|
11
|
+
*
|
|
12
|
+
* Also supports --verify to check an existing installation.
|
|
12
13
|
*
|
|
13
14
|
* Usage:
|
|
14
15
|
* npx @agenthifive/openclaw-setup --base-url https://app.agenthifive.com --bootstrap-secret ah5b_...
|
|
15
|
-
*
|
|
16
|
+
* npx @agenthifive/openclaw-setup --verify [--openclaw-dir /path/to/openclaw]
|
|
16
17
|
*/
|
|
17
18
|
export {};
|
|
18
19
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;GAeG"}
|
package/dist/cli.js
CHANGED
|
@@ -8,13 +8,15 @@
|
|
|
8
8
|
* 3. Bootstraps agent auth with the vault
|
|
9
9
|
* 4. Writes plugin config to openclaw.json
|
|
10
10
|
* 5. Patches OpenClaw for credential proxying
|
|
11
|
-
*
|
|
11
|
+
*
|
|
12
|
+
* Also supports --verify to check an existing installation.
|
|
12
13
|
*
|
|
13
14
|
* Usage:
|
|
14
15
|
* npx @agenthifive/openclaw-setup --base-url https://app.agenthifive.com --bootstrap-secret ah5b_...
|
|
15
|
-
*
|
|
16
|
+
* npx @agenthifive/openclaw-setup --verify [--openclaw-dir /path/to/openclaw]
|
|
16
17
|
*/
|
|
17
18
|
import { runSetup, parseSetupArgs } from "./setup-wizard.js";
|
|
19
|
+
import { runVerify } from "./verify.js";
|
|
18
20
|
const args = process.argv.slice(2);
|
|
19
21
|
if (args.includes("--help") || args.includes("-h")) {
|
|
20
22
|
process.stdout.write(`
|
|
@@ -28,7 +30,10 @@ if (args.includes("--help") || args.includes("-h")) {
|
|
|
28
30
|
ah5-setup --base-url <url> --bootstrap-secret <secret>
|
|
29
31
|
npx @agenthifive/openclaw-setup --base-url <url> --bootstrap-secret <secret>
|
|
30
32
|
|
|
31
|
-
|
|
33
|
+
Commands:
|
|
34
|
+
--verify Check an existing installation (no changes made)
|
|
35
|
+
|
|
36
|
+
Setup options:
|
|
32
37
|
--base-url <url> AgentHiFive API base URL
|
|
33
38
|
--bootstrap-secret <secret> Bootstrap secret from dashboard (ah5b_...)
|
|
34
39
|
--config-path <path> Explicit OpenClaw config file path
|
|
@@ -36,16 +41,34 @@ if (args.includes("--help") || args.includes("-h")) {
|
|
|
36
41
|
--non-interactive Run without prompts (requires --base-url and --bootstrap-secret)
|
|
37
42
|
--skip-onboard Skip OpenClaw onboard step
|
|
38
43
|
--skip-plugin-install Skip plugin installation step
|
|
39
|
-
--skip-model Skip model selection step
|
|
40
44
|
-h, --help Show this help message
|
|
41
45
|
|
|
42
46
|
`);
|
|
43
47
|
process.exit(0);
|
|
44
48
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
// --verify mode
|
|
50
|
+
if (args.includes("--verify")) {
|
|
51
|
+
// Extract --openclaw-dir if provided
|
|
52
|
+
let openclawDir;
|
|
53
|
+
const dirIdx = args.indexOf("--openclaw-dir");
|
|
54
|
+
if (dirIdx !== -1 && args[dirIdx + 1]) {
|
|
55
|
+
openclawDir = args[dirIdx + 1];
|
|
56
|
+
}
|
|
57
|
+
runVerify(openclawDir).then((ok) => {
|
|
58
|
+
process.exit(ok ? 0 : 1);
|
|
59
|
+
}).catch((err) => {
|
|
60
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
61
|
+
process.stderr.write(`\n ERROR: ${message}\n\n`);
|
|
62
|
+
process.exit(1);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// Setup mode
|
|
67
|
+
const opts = parseSetupArgs(args);
|
|
68
|
+
runSetup(opts).catch((err) => {
|
|
69
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
70
|
+
process.stderr.write(`\n ERROR: ${message}\n\n`);
|
|
71
|
+
process.exit(1);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
51
74
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;CAwBtB,CAAC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,gBAAgB;AAChB,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;IAC9B,qCAAqC;IACrC,IAAI,WAA+B,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9C,IAAI,MAAM,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QACtC,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE;QACjC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QACxB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,OAAO,MAAM,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;KAAM,CAAC;IACN,aAAa;IACb,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAElC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QACpC,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,OAAO,MAAM,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/verify.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verification / diagnostics for an OpenClaw + AgentHiFive installation.
|
|
3
|
+
*
|
|
4
|
+
* Run via: npx @agenthifive/openclaw-setup --verify
|
|
5
|
+
* ah5-setup --verify [--openclaw-dir /path/to/openclaw]
|
|
6
|
+
*
|
|
7
|
+
* Checks everything needed for a healthy installation:
|
|
8
|
+
* 1. OpenClaw installation (location, version, install type)
|
|
9
|
+
* 2. Dist chunk patch status (all chunks, version, globalThis bridge)
|
|
10
|
+
* 3. Plugin installation
|
|
11
|
+
* 4. Config file (vault URL, auth, LLM proxy baseUrls)
|
|
12
|
+
* 5. Vault connectivity
|
|
13
|
+
* 6. Backup file status
|
|
14
|
+
*
|
|
15
|
+
* Exit codes:
|
|
16
|
+
* 0 — all checks pass
|
|
17
|
+
* 1 — one or more checks failed (actionable output provided)
|
|
18
|
+
*/
|
|
19
|
+
export declare function runVerify(openclawDir?: string): Promise<boolean>;
|
|
20
|
+
//# sourceMappingURL=verify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAoYH,wBAAsB,SAAS,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA4CtE"}
|
package/dist/verify.js
ADDED
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verification / diagnostics for an OpenClaw + AgentHiFive installation.
|
|
3
|
+
*
|
|
4
|
+
* Run via: npx @agenthifive/openclaw-setup --verify
|
|
5
|
+
* ah5-setup --verify [--openclaw-dir /path/to/openclaw]
|
|
6
|
+
*
|
|
7
|
+
* Checks everything needed for a healthy installation:
|
|
8
|
+
* 1. OpenClaw installation (location, version, install type)
|
|
9
|
+
* 2. Dist chunk patch status (all chunks, version, globalThis bridge)
|
|
10
|
+
* 3. Plugin installation
|
|
11
|
+
* 4. Config file (vault URL, auth, LLM proxy baseUrls)
|
|
12
|
+
* 5. Vault connectivity
|
|
13
|
+
* 6. Backup file status
|
|
14
|
+
*
|
|
15
|
+
* Exit codes:
|
|
16
|
+
* 0 — all checks pass
|
|
17
|
+
* 1 — one or more checks failed (actionable output provided)
|
|
18
|
+
*/
|
|
19
|
+
import { existsSync, readFileSync, readdirSync, } from "node:fs";
|
|
20
|
+
import os from "node:os";
|
|
21
|
+
import path from "node:path";
|
|
22
|
+
import { findOpenClawInstallDir, validateOpenClawDir, findDistChunks, } from "./auto-patch.js";
|
|
23
|
+
import { resolveOpenClawConfigPath } from "./config-discovery.js";
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Output helpers
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
const GREEN = "\x1b[32m";
|
|
28
|
+
const RED = "\x1b[31m";
|
|
29
|
+
const YELLOW = "\x1b[33m";
|
|
30
|
+
const DIM = "\x1b[2m";
|
|
31
|
+
const NC = "\x1b[0m";
|
|
32
|
+
let _hasFailures = false;
|
|
33
|
+
function ok(msg) {
|
|
34
|
+
process.stdout.write(` ${GREEN}✔${NC} ${msg}\n`);
|
|
35
|
+
}
|
|
36
|
+
function fail(msg) {
|
|
37
|
+
_hasFailures = true;
|
|
38
|
+
process.stdout.write(` ${RED}✖${NC} ${msg}\n`);
|
|
39
|
+
}
|
|
40
|
+
function warn(msg) {
|
|
41
|
+
process.stdout.write(` ${YELLOW}!${NC} ${msg}\n`);
|
|
42
|
+
}
|
|
43
|
+
function info(msg) {
|
|
44
|
+
process.stdout.write(` ${DIM}${msg}${NC}\n`);
|
|
45
|
+
}
|
|
46
|
+
function heading(msg) {
|
|
47
|
+
process.stdout.write(`\n ${msg}\n ${"─".repeat(45)}\n`);
|
|
48
|
+
}
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// Markers (must match auto-patch.ts)
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
const PATCH_MARKER = "@agenthifive/openclaw/runtime";
|
|
53
|
+
const PATCH_VERSION = "@ah5-patch-v4";
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
// Individual checks
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
function checkInstallation(openclawDir) {
|
|
58
|
+
heading("OpenClaw Installation");
|
|
59
|
+
let install = null;
|
|
60
|
+
if (openclawDir) {
|
|
61
|
+
install = validateOpenClawDir(openclawDir);
|
|
62
|
+
if (!install) {
|
|
63
|
+
fail(`${openclawDir} is not an OpenClaw installation`);
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
ok(`Found at ${install.dir} (user-specified)`);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
install = findOpenClawInstallDir();
|
|
70
|
+
if (!install) {
|
|
71
|
+
fail("OpenClaw not found. Use --openclaw-dir or install: npm i -g openclaw");
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
ok(`Found at ${install.dir}`);
|
|
75
|
+
}
|
|
76
|
+
// Version
|
|
77
|
+
const pkgPath = path.join(install.dir, "package.json");
|
|
78
|
+
try {
|
|
79
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
80
|
+
info(`Version: ${pkg.version ?? "unknown"}`);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
info("Version: unknown");
|
|
84
|
+
}
|
|
85
|
+
ok(`Install type: ${install.kind === "source" ? "source (TypeScript)" : "dist (compiled)"}`);
|
|
86
|
+
return install;
|
|
87
|
+
}
|
|
88
|
+
function checkChunks(install) {
|
|
89
|
+
heading("Patch Status");
|
|
90
|
+
const stats = { total: 0, patched: 0, unpatched: 0 };
|
|
91
|
+
if (install.kind === "source") {
|
|
92
|
+
const target = path.join(install.dir, "src", "agents", "model-auth.ts");
|
|
93
|
+
if (!existsSync(target)) {
|
|
94
|
+
fail("model-auth.ts not found");
|
|
95
|
+
return stats;
|
|
96
|
+
}
|
|
97
|
+
stats.total = 1;
|
|
98
|
+
const content = readFileSync(target, "utf-8");
|
|
99
|
+
if (content.includes(PATCH_VERSION)) {
|
|
100
|
+
ok("model-auth.ts: patched (v4)");
|
|
101
|
+
stats.patched = 1;
|
|
102
|
+
}
|
|
103
|
+
else if (content.includes(PATCH_MARKER)) {
|
|
104
|
+
warn("model-auth.ts: OLD patch version — re-run setup to update");
|
|
105
|
+
stats.unpatched = 1;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
warn("model-auth.ts: not patched");
|
|
109
|
+
stats.unpatched = 1;
|
|
110
|
+
}
|
|
111
|
+
return stats;
|
|
112
|
+
}
|
|
113
|
+
// Dist install
|
|
114
|
+
const distDir = path.join(install.dir, "dist");
|
|
115
|
+
if (!existsSync(distDir)) {
|
|
116
|
+
fail(`dist/ not found at ${distDir}`);
|
|
117
|
+
return stats;
|
|
118
|
+
}
|
|
119
|
+
const chunks = findDistChunks(distDir);
|
|
120
|
+
stats.total = chunks.length;
|
|
121
|
+
if (chunks.length === 0) {
|
|
122
|
+
fail("No chunks containing resolveApiKeyForProvider found in dist/");
|
|
123
|
+
return stats;
|
|
124
|
+
}
|
|
125
|
+
for (const chunk of chunks) {
|
|
126
|
+
const basename = path.basename(chunk);
|
|
127
|
+
const content = readFileSync(chunk, "utf-8");
|
|
128
|
+
if (content.includes(PATCH_VERSION)) {
|
|
129
|
+
ok(`${basename}: patched (v4)`);
|
|
130
|
+
stats.patched++;
|
|
131
|
+
}
|
|
132
|
+
else if (content.includes(PATCH_MARKER)) {
|
|
133
|
+
warn(`${basename}: OLD patch version — re-run setup to update`);
|
|
134
|
+
stats.unpatched++;
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
warn(`${basename}: NOT patched`);
|
|
138
|
+
stats.unpatched++;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
info(`Total: ${stats.total} | Patched: ${stats.patched} | Need patching: ${stats.unpatched}`);
|
|
142
|
+
return stats;
|
|
143
|
+
}
|
|
144
|
+
function checkRuntimeBridge(install) {
|
|
145
|
+
heading("Runtime Bridge");
|
|
146
|
+
const distDir = path.join(install.dir, "dist");
|
|
147
|
+
if (!existsSync(distDir)) {
|
|
148
|
+
info("(skipped — source install)");
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
// Find a patched chunk to inspect
|
|
152
|
+
const files = readdirSync(distDir).filter((f) => f.endsWith(".js"));
|
|
153
|
+
let sampleContent = null;
|
|
154
|
+
for (const file of files) {
|
|
155
|
+
const content = readFileSync(path.join(distDir, file), "utf-8");
|
|
156
|
+
if (content.includes(PATCH_VERSION)) {
|
|
157
|
+
sampleContent = content;
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (!sampleContent) {
|
|
162
|
+
info("(skipped — no patched chunks found)");
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if (sampleContent.includes("globalThis.__ah5_runtime")) {
|
|
166
|
+
ok("Uses globalThis bridge (correct)");
|
|
167
|
+
}
|
|
168
|
+
else if (sampleContent.includes("await import(")) {
|
|
169
|
+
fail("Uses OLD import() approach — re-run setup to update");
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
warn("Could not determine bridge approach");
|
|
173
|
+
}
|
|
174
|
+
if (sampleContent.includes("vault:agent-token")) {
|
|
175
|
+
ok("Returns vault bearer token (Model B brokered proxy)");
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
fail("Does not return vault bearer token — patch may be corrupt");
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function checkPlugin() {
|
|
182
|
+
heading("Plugin");
|
|
183
|
+
const extensionsDir = path.join(os.homedir(), ".openclaw", "extensions");
|
|
184
|
+
if (!existsSync(extensionsDir)) {
|
|
185
|
+
warn(`Extensions directory not found: ${extensionsDir}`);
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
const candidates = ["agenthifive", "@agenthifive"];
|
|
189
|
+
let pluginDir = null;
|
|
190
|
+
for (const name of candidates) {
|
|
191
|
+
const candidate = path.join(extensionsDir, name);
|
|
192
|
+
if (existsSync(candidate)) {
|
|
193
|
+
pluginDir = candidate;
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// Also check subdirectories (npm may nest under @agenthifive/openclaw)
|
|
198
|
+
if (!pluginDir) {
|
|
199
|
+
const atDir = path.join(extensionsDir, "@agenthifive", "openclaw");
|
|
200
|
+
if (existsSync(atDir))
|
|
201
|
+
pluginDir = atDir;
|
|
202
|
+
}
|
|
203
|
+
if (!pluginDir) {
|
|
204
|
+
fail("Plugin not installed. Run: openclaw plugins install @agenthifive/openclaw");
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
ok(`Installed at ${pluginDir}`);
|
|
208
|
+
const pkgPath = path.join(pluginDir, "package.json");
|
|
209
|
+
if (existsSync(pkgPath)) {
|
|
210
|
+
try {
|
|
211
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
212
|
+
info(`Version: ${pkg.version ?? "unknown"}`);
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
// ignore
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
function checkConfig() {
|
|
220
|
+
heading("Configuration");
|
|
221
|
+
const configPath = resolveOpenClawConfigPath();
|
|
222
|
+
if (!configPath) {
|
|
223
|
+
warn("No openclaw.json found");
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
ok(`Config: ${configPath}`);
|
|
227
|
+
let config;
|
|
228
|
+
try {
|
|
229
|
+
config = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
230
|
+
}
|
|
231
|
+
catch (err) {
|
|
232
|
+
fail(`Config parse error: ${err instanceof Error ? err.message : String(err)}`);
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
// Plugin entry
|
|
236
|
+
const plugins = config.plugins;
|
|
237
|
+
const entries = plugins?.entries;
|
|
238
|
+
const ah5 = entries?.agenthifive;
|
|
239
|
+
if (!ah5) {
|
|
240
|
+
warn("No plugins.entries.agenthifive in config");
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
ok("Plugin entry present");
|
|
244
|
+
const pluginConfig = ah5.config;
|
|
245
|
+
if (!pluginConfig) {
|
|
246
|
+
warn("No plugin config block");
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
// Vault URL
|
|
250
|
+
const baseUrl = pluginConfig.baseUrl;
|
|
251
|
+
if (baseUrl) {
|
|
252
|
+
ok(`Vault URL: ${baseUrl}`);
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
fail("No vault baseUrl configured");
|
|
256
|
+
}
|
|
257
|
+
// Auth
|
|
258
|
+
const auth = pluginConfig.auth;
|
|
259
|
+
if (auth?.mode) {
|
|
260
|
+
ok(`Auth mode: ${auth.mode}`);
|
|
261
|
+
if (auth.mode === "agent" && auth.agentId) {
|
|
262
|
+
const agentId = auth.agentId;
|
|
263
|
+
info(`Agent ID: ${agentId.slice(0, 12)}...`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
fail("No auth configured");
|
|
268
|
+
}
|
|
269
|
+
// Connected providers
|
|
270
|
+
const connected = pluginConfig.connectedProviders;
|
|
271
|
+
if (connected && connected.length > 0) {
|
|
272
|
+
ok(`Connected providers: ${connected.join(", ")}`);
|
|
273
|
+
}
|
|
274
|
+
// Proxied providers
|
|
275
|
+
const proxied = pluginConfig.proxiedProviders;
|
|
276
|
+
if (proxied && proxied.length > 0) {
|
|
277
|
+
ok(`Proxied LLM providers: ${proxied.join(", ")}`);
|
|
278
|
+
}
|
|
279
|
+
// models.providers (LLM proxy baseUrl redirects)
|
|
280
|
+
const models = config.models;
|
|
281
|
+
const providers = models?.providers;
|
|
282
|
+
if (providers) {
|
|
283
|
+
const proxiedViaBaseUrl = Object.entries(providers)
|
|
284
|
+
.filter(([, v]) => typeof v?.baseUrl === "string" && v.baseUrl.includes("/v1/vault/llm/"))
|
|
285
|
+
.map(([k]) => k);
|
|
286
|
+
if (proxiedViaBaseUrl.length > 0) {
|
|
287
|
+
ok(`LLM proxy baseUrl (Model B): ${proxiedViaBaseUrl.join(", ")}`);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
// Warn about stale load.paths
|
|
291
|
+
const load = plugins?.load;
|
|
292
|
+
if (load?.paths) {
|
|
293
|
+
warn("plugins.load.paths is set — this is unnecessary and may cause issues");
|
|
294
|
+
info("Remove it from config; the plugin loads from ~/.openclaw/extensions/");
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
async function checkVaultConnectivity(configPath) {
|
|
298
|
+
heading("Vault Connectivity");
|
|
299
|
+
if (!configPath) {
|
|
300
|
+
info("(skipped — no config file)");
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
let config;
|
|
304
|
+
try {
|
|
305
|
+
config = JSON.parse(readFileSync(configPath, "utf-8"));
|
|
306
|
+
}
|
|
307
|
+
catch {
|
|
308
|
+
info("(skipped — config parse error)");
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
const plugins = config.plugins;
|
|
312
|
+
const entries = plugins?.entries;
|
|
313
|
+
const ah5 = entries?.agenthifive;
|
|
314
|
+
const pluginConfig = ah5?.config;
|
|
315
|
+
const baseUrl = pluginConfig?.baseUrl;
|
|
316
|
+
if (!baseUrl) {
|
|
317
|
+
info("(skipped — no vault baseUrl)");
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
// Health check
|
|
321
|
+
try {
|
|
322
|
+
const response = await fetch(`${baseUrl}/v1/health`, {
|
|
323
|
+
signal: AbortSignal.timeout(5_000),
|
|
324
|
+
});
|
|
325
|
+
if (response.ok) {
|
|
326
|
+
ok(`Vault reachable at ${baseUrl} (${response.status})`);
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
fail(`Vault returned ${response.status} at ${baseUrl}/v1/health`);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
catch (err) {
|
|
333
|
+
fail(`Cannot reach vault: ${err instanceof Error ? err.message : String(err)}`);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
function checkBackups(install) {
|
|
337
|
+
heading("Backups");
|
|
338
|
+
const distDir = path.join(install.dir, "dist");
|
|
339
|
+
if (!existsSync(distDir)) {
|
|
340
|
+
info("(no dist/ directory)");
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
const backups = readdirSync(distDir).filter((f) => f.endsWith(".js.bak"));
|
|
344
|
+
if (backups.length > 0) {
|
|
345
|
+
ok(`${backups.length} backup(s): ${backups.join(", ")}`);
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
info("No backup files");
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
// ---------------------------------------------------------------------------
|
|
352
|
+
// Main
|
|
353
|
+
// ---------------------------------------------------------------------------
|
|
354
|
+
export async function runVerify(openclawDir) {
|
|
355
|
+
process.stdout.write("\n AgentHiFive Installation Verification\n");
|
|
356
|
+
process.stdout.write(" ═══════════════════════════════════════════\n");
|
|
357
|
+
// 1. Installation
|
|
358
|
+
const install = checkInstallation(openclawDir);
|
|
359
|
+
if (!install) {
|
|
360
|
+
process.stdout.write(`\n ${RED}Verification failed — OpenClaw not found${NC}\n\n`);
|
|
361
|
+
return false;
|
|
362
|
+
}
|
|
363
|
+
// 2. Chunks
|
|
364
|
+
const { total, patched, unpatched } = checkChunks(install);
|
|
365
|
+
// 3. Runtime bridge
|
|
366
|
+
checkRuntimeBridge(install);
|
|
367
|
+
// 4. Plugin
|
|
368
|
+
checkPlugin();
|
|
369
|
+
// 5. Config
|
|
370
|
+
checkConfig();
|
|
371
|
+
// 6. Vault connectivity
|
|
372
|
+
const configPath = resolveOpenClawConfigPath();
|
|
373
|
+
await checkVaultConnectivity(configPath);
|
|
374
|
+
// 7. Backups
|
|
375
|
+
checkBackups(install);
|
|
376
|
+
// Summary
|
|
377
|
+
process.stdout.write("\n ═══════════════════════════════════════════\n");
|
|
378
|
+
if (!_hasFailures && total > 0 && unpatched === 0) {
|
|
379
|
+
process.stdout.write(` ${GREEN}All checks passed — ${patched}/${total} chunk(s) patched${NC}\n\n`);
|
|
380
|
+
return true;
|
|
381
|
+
}
|
|
382
|
+
else if (unpatched > 0 && !_hasFailures) {
|
|
383
|
+
process.stdout.write(` ${YELLOW}${unpatched} chunk(s) need patching${NC}\n`);
|
|
384
|
+
process.stdout.write(` Run setup again to apply:\n`);
|
|
385
|
+
process.stdout.write(` npx @agenthifive/openclaw-setup --base-url <url> --bootstrap-secret <secret>\n\n`);
|
|
386
|
+
return false;
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
process.stdout.write(` ${RED}Issues found — see above${NC}\n\n`);
|
|
390
|
+
return false;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"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"}
|