@agenthifive/openclaw 0.1.0 → 0.2.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 +16 -13
- package/dist/auto-patch.d.ts +56 -0
- package/dist/auto-patch.d.ts.map +1 -0
- package/dist/auto-patch.js +446 -0
- package/dist/auto-patch.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/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/patch-verify.d.ts +6 -9
- package/dist/patch-verify.d.ts.map +1 -1
- package/dist/patch-verify.js +22 -21
- package/dist/patch-verify.js.map +1 -1
- package/dist/setup-wizard.d.ts +5 -3
- package/dist/setup-wizard.d.ts.map +1 -1
- package/dist/setup-wizard.js +109 -26
- package/dist/setup-wizard.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -37,7 +37,7 @@ Or add to your OpenClaw config manually:
|
|
|
37
37
|
|
|
38
38
|
### 2. Setup
|
|
39
39
|
|
|
40
|
-
Run the setup wizard to bootstrap agent auth
|
|
40
|
+
Run the setup wizard to bootstrap agent auth, discover connected services, write config, and apply the credential proxying patch:
|
|
41
41
|
|
|
42
42
|
```bash
|
|
43
43
|
openclaw setup-vault
|
|
@@ -49,7 +49,13 @@ Or non-interactively:
|
|
|
49
49
|
openclaw setup-vault --base-url https://app.agenthifive.com --bootstrap-secret ah5b_...
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
The wizard
|
|
52
|
+
The wizard automatically:
|
|
53
|
+
- Writes plugin config to `~/.openclaw/openclaw.json`
|
|
54
|
+
- Applies the credential proxying patch to your OpenClaw installation
|
|
55
|
+
|
|
56
|
+
Additional flags:
|
|
57
|
+
- `--config-path <path>` — explicit config file path
|
|
58
|
+
- `--openclaw-dir <path>` — explicit OpenClaw installation directory
|
|
53
59
|
|
|
54
60
|
### 3. Connect Services
|
|
55
61
|
|
|
@@ -82,20 +88,17 @@ Plugin config goes in `plugins.entries.agenthifive.config` in your `openclaw.jso
|
|
|
82
88
|
| `pollTimeoutMs` | number | Approval poll timeout (default: 300000) |
|
|
83
89
|
| `pollIntervalMs` | number | Approval poll interval (default: 3000) |
|
|
84
90
|
|
|
85
|
-
## LLM Credential Proxying
|
|
86
|
-
|
|
87
|
-
To route LLM API calls through the vault (so agents don't need local API keys), apply the included patch:
|
|
91
|
+
## LLM Credential Proxying
|
|
88
92
|
|
|
89
|
-
|
|
90
|
-
pnpm patch openclaw
|
|
91
|
-
cd <temp-directory>
|
|
92
|
-
patch -p1 < node_modules/@agenthifive/openclaw/patches/model-auth.patch
|
|
93
|
-
pnpm patch-commit <temp-directory>
|
|
94
|
-
```
|
|
93
|
+
The setup wizard automatically patches OpenClaw's `resolveApiKeyForProvider()` to route LLM API calls through the vault, so agents don't need local API keys.
|
|
95
94
|
|
|
96
|
-
|
|
95
|
+
The patch is applied during `openclaw setup-vault` and:
|
|
96
|
+
- Works with both npm installs (`dist/` chunks) and source installs (`src/`)
|
|
97
|
+
- Creates a `.bak` backup of the patched file
|
|
98
|
+
- Is idempotent (safe to run multiple times)
|
|
99
|
+
- Uses dynamic imports — no-op when the plugin is not installed
|
|
97
100
|
|
|
98
|
-
|
|
101
|
+
To apply manually (e.g. after an OpenClaw upgrade), re-run the setup wizard or see [`patches/README.md`](patches/README.md).
|
|
99
102
|
|
|
100
103
|
## Programmatic Usage
|
|
101
104
|
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-patching for OpenClaw's credential resolution.
|
|
3
|
+
*
|
|
4
|
+
* Finds the OpenClaw installation and injects vault credential resolution
|
|
5
|
+
* into resolveApiKeyForProvider(). Supports both source installs (TypeScript)
|
|
6
|
+
* and npm installs (compiled JS chunks with hashed filenames).
|
|
7
|
+
*
|
|
8
|
+
* The patch adds two tiers before local profile resolution:
|
|
9
|
+
* - Tier 0: Proxied providers (vault bearer token used directly)
|
|
10
|
+
* - Tier 0.5: Credential provider chain (query vault before local profiles)
|
|
11
|
+
*/
|
|
12
|
+
export interface OpenClawInstall {
|
|
13
|
+
dir: string;
|
|
14
|
+
kind: "source" | "dist";
|
|
15
|
+
}
|
|
16
|
+
export interface PatchResult {
|
|
17
|
+
applied: boolean;
|
|
18
|
+
alreadyPatched: boolean;
|
|
19
|
+
message: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Locate the OpenClaw installation directory.
|
|
23
|
+
*
|
|
24
|
+
* Strategy (cascading, first match wins):
|
|
25
|
+
* 1. `which`/`where` openclaw → resolve symlink → walk up to package.json
|
|
26
|
+
* 2. `npm root -g` → check for openclaw package
|
|
27
|
+
* 3. Well-known paths (Linux, macOS, Windows)
|
|
28
|
+
* 4. `find` as last resort (Linux/macOS only, with timeout)
|
|
29
|
+
*
|
|
30
|
+
* Returns null if not found — caller should ask the user.
|
|
31
|
+
*/
|
|
32
|
+
export declare function findOpenClawInstallDir(): Promise<OpenClawInstall | null>;
|
|
33
|
+
/**
|
|
34
|
+
* Find all OpenClaw installations (for disambiguation when multiple exist).
|
|
35
|
+
*/
|
|
36
|
+
export declare function findAllOpenClawInstalls(): Promise<OpenClawInstall[]>;
|
|
37
|
+
/**
|
|
38
|
+
* Validate a user-provided OpenClaw installation path.
|
|
39
|
+
*/
|
|
40
|
+
export declare function validateOpenClawDir(dir: string): OpenClawInstall | null;
|
|
41
|
+
/**
|
|
42
|
+
* Find the chunk file containing resolveApiKeyForProvider in dist/.
|
|
43
|
+
*/
|
|
44
|
+
export declare function findDistChunk(distDir: string): string | null;
|
|
45
|
+
export declare function applyDistPatch(openclawDir: string): PatchResult;
|
|
46
|
+
export declare function applySourcePatch(openclawDir: string): PatchResult;
|
|
47
|
+
/**
|
|
48
|
+
* Apply the credential resolution patch to an OpenClaw installation.
|
|
49
|
+
* Automatically detects source vs dist installs.
|
|
50
|
+
*/
|
|
51
|
+
export declare function applyPatch(install: OpenClawInstall): PatchResult;
|
|
52
|
+
/**
|
|
53
|
+
* Check if the credential resolution patch is applied in an OpenClaw installation.
|
|
54
|
+
*/
|
|
55
|
+
export declare function isPatchApplied(install: OpenClawInstall): boolean;
|
|
56
|
+
//# sourceMappingURL=auto-patch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-patch.d.ts","sourceRoot":"","sources":["../src/auto-patch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAiBH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AA+DD;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAoB9E;AAkKD;;GAEG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAiB1E;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAIvE;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA6B5D;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAqD/D;AAMD,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAmFjE;AAMD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,WAAW,CAIhE;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAUhE"}
|
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-patching for OpenClaw's credential resolution.
|
|
3
|
+
*
|
|
4
|
+
* Finds the OpenClaw installation and injects vault credential resolution
|
|
5
|
+
* into resolveApiKeyForProvider(). Supports both source installs (TypeScript)
|
|
6
|
+
* and npm installs (compiled JS chunks with hashed filenames).
|
|
7
|
+
*
|
|
8
|
+
* The patch adds two tiers before local profile resolution:
|
|
9
|
+
* - Tier 0: Proxied providers (vault bearer token used directly)
|
|
10
|
+
* - Tier 0.5: Credential provider chain (query vault before local profiles)
|
|
11
|
+
*/
|
|
12
|
+
import { execSync } from "node:child_process";
|
|
13
|
+
import { existsSync, readdirSync, readFileSync, realpathSync, writeFileSync, } from "node:fs";
|
|
14
|
+
import path from "node:path";
|
|
15
|
+
import { fileURLToPath } from "node:url";
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Marker used to detect if the patch is already applied
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
const PATCH_MARKER = "@agenthifive/openclaw/runtime";
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Code injected into compiled dist files
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
const INJECTED_CODE = `
|
|
24
|
+
\t// -- AgentHiFive: Tier 0 + Tier 0.5 vault credential resolution --
|
|
25
|
+
\t// @agenthifive/openclaw/runtime
|
|
26
|
+
\ttry {
|
|
27
|
+
\t\tconst runtime = await import("@agenthifive/openclaw/runtime");
|
|
28
|
+
\t\tif (runtime.isInitialized()) {
|
|
29
|
+
\t\t\tconst proxiedProviders = runtime.getProxiedProviders();
|
|
30
|
+
\t\t\tif (proxiedProviders.includes(provider)) {
|
|
31
|
+
\t\t\t\tconst vaultToken = runtime.getVaultBearerToken();
|
|
32
|
+
\t\t\t\tif (vaultToken) {
|
|
33
|
+
\t\t\t\t\treturn { apiKey: vaultToken, source: "vault:agent-token", mode: "api-key" };
|
|
34
|
+
\t\t\t\t}
|
|
35
|
+
\t\t\t}
|
|
36
|
+
\t\t\tconst vaultResult = await runtime.resolveCredential({
|
|
37
|
+
\t\t\t\tkind: "model_provider",
|
|
38
|
+
\t\t\t\tprovider,
|
|
39
|
+
\t\t\t\tprofileId: preferredProfile,
|
|
40
|
+
\t\t\t});
|
|
41
|
+
\t\t\tif (vaultResult?.apiKey) {
|
|
42
|
+
\t\t\t\treturn {
|
|
43
|
+
\t\t\t\t\tapiKey: vaultResult.apiKey,
|
|
44
|
+
\t\t\t\t\tsource: "credential-provider:vault",
|
|
45
|
+
\t\t\t\t\tmode: vaultResult.mode ?? "api-key",
|
|
46
|
+
\t\t\t\t};
|
|
47
|
+
\t\t\t}
|
|
48
|
+
\t\t}
|
|
49
|
+
\t} catch {
|
|
50
|
+
\t\t// Plugin not installed -- skip vault credential resolution
|
|
51
|
+
\t}
|
|
52
|
+
`;
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// Anchor patterns
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
/**
|
|
57
|
+
* Regex matching the store assignment line in resolveApiKeyForProvider.
|
|
58
|
+
* This is stable across upstream versions — it's the first line after
|
|
59
|
+
* the destructuring of params.
|
|
60
|
+
*
|
|
61
|
+
* Upstream dist (2026.3.13):
|
|
62
|
+
* const store = params.store ?? ensureAuthProfileStore(params.agentDir);
|
|
63
|
+
* if (profileId) {
|
|
64
|
+
*/
|
|
65
|
+
const DIST_ANCHOR = /const store\s*=\s*params\.store\s*\?\?\s*ensureAuthProfileStore\(params\.agentDir\);\n/;
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
// Find OpenClaw installation
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
/**
|
|
70
|
+
* Locate the OpenClaw installation directory.
|
|
71
|
+
*
|
|
72
|
+
* Strategy (cascading, first match wins):
|
|
73
|
+
* 1. `which`/`where` openclaw → resolve symlink → walk up to package.json
|
|
74
|
+
* 2. `npm root -g` → check for openclaw package
|
|
75
|
+
* 3. Well-known paths (Linux, macOS, Windows)
|
|
76
|
+
* 4. `find` as last resort (Linux/macOS only, with timeout)
|
|
77
|
+
*
|
|
78
|
+
* Returns null if not found — caller should ask the user.
|
|
79
|
+
*/
|
|
80
|
+
export async function findOpenClawInstallDir() {
|
|
81
|
+
// Strategy 1: which/where → resolve symlink
|
|
82
|
+
const result = await findViaWhich();
|
|
83
|
+
if (result)
|
|
84
|
+
return result;
|
|
85
|
+
// Strategy 2: npm root -g
|
|
86
|
+
const npmResult = findViaNpmRoot();
|
|
87
|
+
if (npmResult)
|
|
88
|
+
return npmResult;
|
|
89
|
+
// Strategy 3: well-known paths
|
|
90
|
+
const wellKnown = findViaWellKnownPaths();
|
|
91
|
+
if (wellKnown)
|
|
92
|
+
return wellKnown;
|
|
93
|
+
// Strategy 4: find command (Linux/macOS only)
|
|
94
|
+
if (process.platform !== "win32") {
|
|
95
|
+
const found = findViaFind();
|
|
96
|
+
if (found)
|
|
97
|
+
return found;
|
|
98
|
+
}
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
function classifyInstall(dir) {
|
|
102
|
+
const hasSrc = existsSync(path.join(dir, "src", "agents", "model-auth.ts"));
|
|
103
|
+
return { dir, kind: hasSrc ? "source" : "dist" };
|
|
104
|
+
}
|
|
105
|
+
function isOpenClawDir(dir) {
|
|
106
|
+
const pkgPath = path.join(dir, "package.json");
|
|
107
|
+
if (!existsSync(pkgPath))
|
|
108
|
+
return false;
|
|
109
|
+
try {
|
|
110
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
111
|
+
return pkg.name === "openclaw";
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function walkUpToPackageRoot(startDir) {
|
|
118
|
+
let dir = startDir;
|
|
119
|
+
for (let i = 0; i < 10; i++) {
|
|
120
|
+
if (isOpenClawDir(dir))
|
|
121
|
+
return dir;
|
|
122
|
+
const parent = path.dirname(dir);
|
|
123
|
+
if (parent === dir)
|
|
124
|
+
break;
|
|
125
|
+
dir = parent;
|
|
126
|
+
}
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
async function findViaWhich() {
|
|
130
|
+
const cmd = process.platform === "win32" ? "where openclaw" : "which openclaw";
|
|
131
|
+
try {
|
|
132
|
+
const bin = execSync(cmd, {
|
|
133
|
+
encoding: "utf-8",
|
|
134
|
+
timeout: 5_000,
|
|
135
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
136
|
+
}).trim();
|
|
137
|
+
if (!bin)
|
|
138
|
+
return null;
|
|
139
|
+
// Resolve symlinks to find the real binary location
|
|
140
|
+
let realBin;
|
|
141
|
+
try {
|
|
142
|
+
realBin = realpathSync(bin);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
realBin = bin;
|
|
146
|
+
}
|
|
147
|
+
// Walk up from binary to find package root
|
|
148
|
+
const root = walkUpToPackageRoot(path.dirname(realBin));
|
|
149
|
+
if (root)
|
|
150
|
+
return classifyInstall(root);
|
|
151
|
+
// Binary might be a wrapper script — check if it references a node_modules path
|
|
152
|
+
try {
|
|
153
|
+
const content = readFileSync(realBin, "utf-8");
|
|
154
|
+
const match = /["']([^"']+openclaw[^"']*)['"]/i.exec(content);
|
|
155
|
+
if (match?.[1]) {
|
|
156
|
+
const candidate = path.resolve(path.dirname(realBin), match[1]);
|
|
157
|
+
const root2 = walkUpToPackageRoot(path.dirname(candidate));
|
|
158
|
+
if (root2)
|
|
159
|
+
return classifyInstall(root2);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
// Not readable as text
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// which/where failed
|
|
168
|
+
}
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
function findViaNpmRoot() {
|
|
172
|
+
try {
|
|
173
|
+
const root = execSync("npm root -g", {
|
|
174
|
+
encoding: "utf-8",
|
|
175
|
+
timeout: 5_000,
|
|
176
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
177
|
+
}).trim();
|
|
178
|
+
if (!root)
|
|
179
|
+
return null;
|
|
180
|
+
const candidate = path.join(root, "openclaw");
|
|
181
|
+
if (isOpenClawDir(candidate))
|
|
182
|
+
return classifyInstall(candidate);
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
// npm not available or failed
|
|
186
|
+
}
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
function findViaWellKnownPaths() {
|
|
190
|
+
const candidates = [];
|
|
191
|
+
if (process.platform === "win32") {
|
|
192
|
+
const appData = process.env.APPDATA;
|
|
193
|
+
if (appData) {
|
|
194
|
+
candidates.push(path.join(appData, "npm", "node_modules", "openclaw"));
|
|
195
|
+
}
|
|
196
|
+
const localAppData = process.env.LOCALAPPDATA;
|
|
197
|
+
if (localAppData) {
|
|
198
|
+
candidates.push(path.join(localAppData, "pnpm", "global", "5", "node_modules", "openclaw"));
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
candidates.push("/usr/lib/node_modules/openclaw", "/usr/local/lib/node_modules/openclaw", path.join(process.env.HOME ?? "", ".local/share/pnpm/global/5/node_modules/openclaw"));
|
|
203
|
+
if (process.platform === "darwin") {
|
|
204
|
+
candidates.push("/opt/homebrew/lib/node_modules/openclaw", "/usr/local/Cellar/node/*/lib/node_modules/openclaw");
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
for (const candidate of candidates) {
|
|
208
|
+
if (isOpenClawDir(candidate))
|
|
209
|
+
return classifyInstall(candidate);
|
|
210
|
+
}
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
function findViaFind() {
|
|
214
|
+
// Search common directories for openclaw package.json
|
|
215
|
+
const searchDirs = ["/usr", "/opt", process.env.HOME ?? ""].filter((d) => d && existsSync(d));
|
|
216
|
+
for (const searchDir of searchDirs) {
|
|
217
|
+
try {
|
|
218
|
+
const output = execSync(`find "${searchDir}" -maxdepth 8 -name "package.json" -path "*/openclaw/package.json" 2>/dev/null`, {
|
|
219
|
+
encoding: "utf-8",
|
|
220
|
+
timeout: 10_000,
|
|
221
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
222
|
+
}).trim();
|
|
223
|
+
if (!output)
|
|
224
|
+
continue;
|
|
225
|
+
const matches = output
|
|
226
|
+
.split("\n")
|
|
227
|
+
.filter(Boolean)
|
|
228
|
+
.map((p) => path.dirname(p))
|
|
229
|
+
.filter(isOpenClawDir);
|
|
230
|
+
if (matches.length === 1)
|
|
231
|
+
return classifyInstall(matches[0]);
|
|
232
|
+
if (matches.length > 1) {
|
|
233
|
+
// Multiple installs found — return null so caller can ask the user
|
|
234
|
+
// Store matches for the caller to display
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
// find timed out or failed
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Find all OpenClaw installations (for disambiguation when multiple exist).
|
|
246
|
+
*/
|
|
247
|
+
export async function findAllOpenClawInstalls() {
|
|
248
|
+
const results = [];
|
|
249
|
+
const seen = new Set();
|
|
250
|
+
const add = (install) => {
|
|
251
|
+
if (!install)
|
|
252
|
+
return;
|
|
253
|
+
const resolved = path.resolve(install.dir);
|
|
254
|
+
if (seen.has(resolved))
|
|
255
|
+
return;
|
|
256
|
+
seen.add(resolved);
|
|
257
|
+
results.push({ ...install, dir: resolved });
|
|
258
|
+
};
|
|
259
|
+
add(await findViaWhich());
|
|
260
|
+
add(findViaNpmRoot());
|
|
261
|
+
add(findViaWellKnownPaths());
|
|
262
|
+
return results;
|
|
263
|
+
}
|
|
264
|
+
// ---------------------------------------------------------------------------
|
|
265
|
+
// Validate user-provided path
|
|
266
|
+
// ---------------------------------------------------------------------------
|
|
267
|
+
/**
|
|
268
|
+
* Validate a user-provided OpenClaw installation path.
|
|
269
|
+
*/
|
|
270
|
+
export function validateOpenClawDir(dir) {
|
|
271
|
+
const resolved = path.resolve(dir);
|
|
272
|
+
if (!isOpenClawDir(resolved))
|
|
273
|
+
return null;
|
|
274
|
+
return classifyInstall(resolved);
|
|
275
|
+
}
|
|
276
|
+
// ---------------------------------------------------------------------------
|
|
277
|
+
// Apply patch to dist (compiled JS)
|
|
278
|
+
// ---------------------------------------------------------------------------
|
|
279
|
+
/**
|
|
280
|
+
* Find the chunk file containing resolveApiKeyForProvider in dist/.
|
|
281
|
+
*/
|
|
282
|
+
export function findDistChunk(distDir) {
|
|
283
|
+
if (!existsSync(distDir))
|
|
284
|
+
return null;
|
|
285
|
+
const files = readdirSync(distDir).filter((f) => f.endsWith(".js"));
|
|
286
|
+
// Primary: look for auth-profiles-*.js (upstream chunk name)
|
|
287
|
+
const authChunk = files.find((f) => f.startsWith("auth-profiles") || f.startsWith("model-auth"));
|
|
288
|
+
if (authChunk) {
|
|
289
|
+
const content = readFileSync(path.join(distDir, authChunk), "utf-8");
|
|
290
|
+
if (content.includes("resolveApiKeyForProvider")) {
|
|
291
|
+
return path.join(distDir, authChunk);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// Fallback: search all JS files
|
|
295
|
+
for (const file of files) {
|
|
296
|
+
const filePath = path.join(distDir, file);
|
|
297
|
+
const content = readFileSync(filePath, "utf-8");
|
|
298
|
+
if (content.includes("async function resolveApiKeyForProvider") &&
|
|
299
|
+
content.includes("ensureAuthProfileStore")) {
|
|
300
|
+
return filePath;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
return null;
|
|
304
|
+
}
|
|
305
|
+
export function applyDistPatch(openclawDir) {
|
|
306
|
+
const distDir = path.join(openclawDir, "dist");
|
|
307
|
+
const chunkPath = findDistChunk(distDir);
|
|
308
|
+
if (!chunkPath) {
|
|
309
|
+
return {
|
|
310
|
+
applied: false,
|
|
311
|
+
alreadyPatched: false,
|
|
312
|
+
message: "Could not find resolveApiKeyForProvider in OpenClaw dist/. " +
|
|
313
|
+
"The OpenClaw version may be incompatible.",
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
const source = readFileSync(chunkPath, "utf-8");
|
|
317
|
+
// Already patched?
|
|
318
|
+
if (source.includes(PATCH_MARKER)) {
|
|
319
|
+
return {
|
|
320
|
+
applied: true,
|
|
321
|
+
alreadyPatched: true,
|
|
322
|
+
message: `Already patched: ${path.basename(chunkPath)}`,
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
// Find anchor
|
|
326
|
+
const match = DIST_ANCHOR.exec(source);
|
|
327
|
+
if (!match) {
|
|
328
|
+
return {
|
|
329
|
+
applied: false,
|
|
330
|
+
alreadyPatched: false,
|
|
331
|
+
message: `Found ${path.basename(chunkPath)} but could not locate the anchor point. ` +
|
|
332
|
+
"The OpenClaw version may be incompatible.",
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
// Create backup
|
|
336
|
+
const backupPath = chunkPath + ".bak";
|
|
337
|
+
writeFileSync(backupPath, source);
|
|
338
|
+
// Inject code after the anchor line
|
|
339
|
+
const insertPos = match.index + match[0].length;
|
|
340
|
+
const patched = source.slice(0, insertPos) + INJECTED_CODE + source.slice(insertPos);
|
|
341
|
+
writeFileSync(chunkPath, patched);
|
|
342
|
+
return {
|
|
343
|
+
applied: true,
|
|
344
|
+
alreadyPatched: false,
|
|
345
|
+
message: `Patched ${path.basename(chunkPath)} (backup: ${path.basename(backupPath)})`,
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
// ---------------------------------------------------------------------------
|
|
349
|
+
// Apply patch to source install
|
|
350
|
+
// ---------------------------------------------------------------------------
|
|
351
|
+
export function applySourcePatch(openclawDir) {
|
|
352
|
+
const targetFile = path.join(openclawDir, "src", "agents", "model-auth.ts");
|
|
353
|
+
if (!existsSync(targetFile)) {
|
|
354
|
+
return {
|
|
355
|
+
applied: false,
|
|
356
|
+
alreadyPatched: false,
|
|
357
|
+
message: "src/agents/model-auth.ts not found",
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
const source = readFileSync(targetFile, "utf-8");
|
|
361
|
+
if (source.includes(PATCH_MARKER)) {
|
|
362
|
+
return {
|
|
363
|
+
applied: true,
|
|
364
|
+
alreadyPatched: true,
|
|
365
|
+
message: "Source already patched",
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
// Try using the patch command
|
|
369
|
+
const patchFile = path.join(path.dirname(fileURLToPath(import.meta.url)), "..", "patches", "model-auth.patch");
|
|
370
|
+
if (!existsSync(patchFile)) {
|
|
371
|
+
return {
|
|
372
|
+
applied: false,
|
|
373
|
+
alreadyPatched: false,
|
|
374
|
+
message: "patches/model-auth.patch not found in plugin package",
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
try {
|
|
378
|
+
execSync(`patch -p1 --forward < "${patchFile}"`, {
|
|
379
|
+
cwd: openclawDir,
|
|
380
|
+
encoding: "utf-8",
|
|
381
|
+
timeout: 10_000,
|
|
382
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
383
|
+
});
|
|
384
|
+
return {
|
|
385
|
+
applied: true,
|
|
386
|
+
alreadyPatched: false,
|
|
387
|
+
message: "Source patch applied via patch -p1",
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
catch (err) {
|
|
391
|
+
// patch command failed — try manual injection as fallback
|
|
392
|
+
const match = DIST_ANCHOR.exec(source);
|
|
393
|
+
if (match) {
|
|
394
|
+
const backupPath = targetFile + ".bak";
|
|
395
|
+
writeFileSync(backupPath, source);
|
|
396
|
+
const insertPos = match.index + match[0].length;
|
|
397
|
+
const patched = source.slice(0, insertPos) +
|
|
398
|
+
"\n" +
|
|
399
|
+
INJECTED_CODE.replace(/\t/g, " ") +
|
|
400
|
+
"\n" +
|
|
401
|
+
source.slice(insertPos);
|
|
402
|
+
writeFileSync(targetFile, patched);
|
|
403
|
+
return {
|
|
404
|
+
applied: true,
|
|
405
|
+
alreadyPatched: false,
|
|
406
|
+
message: `Source patched via text injection (backup: ${path.basename(backupPath)})`,
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
return {
|
|
410
|
+
applied: false,
|
|
411
|
+
alreadyPatched: false,
|
|
412
|
+
message: `patch command failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
// ---------------------------------------------------------------------------
|
|
417
|
+
// Unified apply
|
|
418
|
+
// ---------------------------------------------------------------------------
|
|
419
|
+
/**
|
|
420
|
+
* Apply the credential resolution patch to an OpenClaw installation.
|
|
421
|
+
* Automatically detects source vs dist installs.
|
|
422
|
+
*/
|
|
423
|
+
export function applyPatch(install) {
|
|
424
|
+
return install.kind === "source"
|
|
425
|
+
? applySourcePatch(install.dir)
|
|
426
|
+
: applyDistPatch(install.dir);
|
|
427
|
+
}
|
|
428
|
+
// ---------------------------------------------------------------------------
|
|
429
|
+
// Check if patch is applied
|
|
430
|
+
// ---------------------------------------------------------------------------
|
|
431
|
+
/**
|
|
432
|
+
* Check if the credential resolution patch is applied in an OpenClaw installation.
|
|
433
|
+
*/
|
|
434
|
+
export function isPatchApplied(install) {
|
|
435
|
+
if (install.kind === "source") {
|
|
436
|
+
const file = path.join(install.dir, "src", "agents", "model-auth.ts");
|
|
437
|
+
if (!existsSync(file))
|
|
438
|
+
return false;
|
|
439
|
+
return readFileSync(file, "utf-8").includes(PATCH_MARKER);
|
|
440
|
+
}
|
|
441
|
+
const chunkPath = findDistChunk(path.join(install.dir, "dist"));
|
|
442
|
+
if (!chunkPath)
|
|
443
|
+
return false;
|
|
444
|
+
return readFileSync(chunkPath, "utf-8").includes(PATCH_MARKER);
|
|
445
|
+
}
|
|
446
|
+
//# sourceMappingURL=auto-patch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-patch.js","sourceRoot":"","sources":["../src/auto-patch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw config file discovery and merge utilities.
|
|
3
|
+
*
|
|
4
|
+
* Reimplements OpenClaw's config path resolution logic since we can't
|
|
5
|
+
* import from the openclaw package (we're a plugin, not a dependency).
|
|
6
|
+
*
|
|
7
|
+
* Resolution order (matches OpenClaw's src/config/paths.ts):
|
|
8
|
+
* 1. $OPENCLAW_CONFIG_PATH / $CLAWDBOT_CONFIG_PATH (explicit override)
|
|
9
|
+
* 2. $OPENCLAW_STATE_DIR/openclaw.json
|
|
10
|
+
* 3. ~/.openclaw/openclaw.json (preferred)
|
|
11
|
+
* 4. Legacy: ~/.openclaw/clawdbot.json, ~/.clawdbot/, ~/.moltbot/, ~/.moldbot/
|
|
12
|
+
* 5. Return null — caller must ask the user
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Find an existing OpenClaw config file.
|
|
16
|
+
*
|
|
17
|
+
* Returns the absolute path to the first existing config file found,
|
|
18
|
+
* or `null` if no config file exists anywhere. The caller should prompt
|
|
19
|
+
* the user rather than silently creating a default file.
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolveOpenClawConfigPath(env?: NodeJS.ProcessEnv): string | null;
|
|
22
|
+
/**
|
|
23
|
+
* Return the canonical default config path (for prompting the user).
|
|
24
|
+
*/
|
|
25
|
+
export declare function defaultConfigPath(): string;
|
|
26
|
+
/**
|
|
27
|
+
* Read an existing config file. Returns `{}` if the file doesn't exist.
|
|
28
|
+
* Throws on parse errors so the caller can warn the user.
|
|
29
|
+
*/
|
|
30
|
+
export declare function readExistingConfig(configPath: string): Record<string, unknown>;
|
|
31
|
+
/**
|
|
32
|
+
* Deep-merge the AgentHiFive plugin config into an existing OpenClaw config.
|
|
33
|
+
*
|
|
34
|
+
* - Sets `plugins.enabled = true`
|
|
35
|
+
* - Adds `"agenthifive"` to `plugins.allow` (deduped)
|
|
36
|
+
* - Adds `"@agenthifive/openclaw"` to `plugins.load.paths` (deduped)
|
|
37
|
+
* - Replaces `plugins.entries.agenthifive` entirely
|
|
38
|
+
* - Preserves ALL other keys untouched
|
|
39
|
+
*/
|
|
40
|
+
export declare function mergePluginConfig(existing: Record<string, unknown>, pluginBlock: Record<string, unknown>): Record<string, unknown>;
|
|
41
|
+
//# sourceMappingURL=config-discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-discovery.d.ts","sourceRoot":"","sources":["../src/config-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAiDH;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,GAAG,IAAI,CAgCf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAMD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyCzB"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw config file discovery and merge utilities.
|
|
3
|
+
*
|
|
4
|
+
* Reimplements OpenClaw's config path resolution logic since we can't
|
|
5
|
+
* import from the openclaw package (we're a plugin, not a dependency).
|
|
6
|
+
*
|
|
7
|
+
* Resolution order (matches OpenClaw's src/config/paths.ts):
|
|
8
|
+
* 1. $OPENCLAW_CONFIG_PATH / $CLAWDBOT_CONFIG_PATH (explicit override)
|
|
9
|
+
* 2. $OPENCLAW_STATE_DIR/openclaw.json
|
|
10
|
+
* 3. ~/.openclaw/openclaw.json (preferred)
|
|
11
|
+
* 4. Legacy: ~/.openclaw/clawdbot.json, ~/.clawdbot/, ~/.moltbot/, ~/.moldbot/
|
|
12
|
+
* 5. Return null — caller must ask the user
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
15
|
+
import os from "node:os";
|
|
16
|
+
import path from "node:path";
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Constants
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
const STATE_DIRNAMES = [".openclaw", ".clawdbot", ".moltbot", ".moldbot"];
|
|
21
|
+
const CONFIG_FILENAMES = [
|
|
22
|
+
"openclaw.json",
|
|
23
|
+
"clawdbot.json",
|
|
24
|
+
"moltbot.json",
|
|
25
|
+
"moldbot.json",
|
|
26
|
+
];
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Home directory resolution (cross-platform)
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
function resolveHome() {
|
|
31
|
+
// Match OpenClaw's home-dir.ts: OPENCLAW_HOME → HOME → USERPROFILE → os.homedir()
|
|
32
|
+
const explicit = process.env.OPENCLAW_HOME?.trim();
|
|
33
|
+
if (explicit && !explicit.startsWith("~"))
|
|
34
|
+
return path.resolve(explicit);
|
|
35
|
+
const home = process.env.HOME?.trim() ||
|
|
36
|
+
process.env.USERPROFILE?.trim() ||
|
|
37
|
+
os.homedir();
|
|
38
|
+
if (explicit) {
|
|
39
|
+
// OPENCLAW_HOME starts with ~ — expand it
|
|
40
|
+
return path.resolve(explicit.replace(/^~(?=$|[/\\])/, home));
|
|
41
|
+
}
|
|
42
|
+
return home;
|
|
43
|
+
}
|
|
44
|
+
function expandTilde(p) {
|
|
45
|
+
if (!p.startsWith("~"))
|
|
46
|
+
return path.resolve(p);
|
|
47
|
+
return path.resolve(p.replace(/^~(?=$|[/\\])/, resolveHome()));
|
|
48
|
+
}
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// Config path resolution
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
/**
|
|
53
|
+
* Find an existing OpenClaw config file.
|
|
54
|
+
*
|
|
55
|
+
* Returns the absolute path to the first existing config file found,
|
|
56
|
+
* or `null` if no config file exists anywhere. The caller should prompt
|
|
57
|
+
* the user rather than silently creating a default file.
|
|
58
|
+
*/
|
|
59
|
+
export function resolveOpenClawConfigPath(env = process.env) {
|
|
60
|
+
// 1. Explicit override
|
|
61
|
+
const explicit = env.OPENCLAW_CONFIG_PATH?.trim() || env.CLAWDBOT_CONFIG_PATH?.trim();
|
|
62
|
+
if (explicit) {
|
|
63
|
+
const resolved = expandTilde(explicit);
|
|
64
|
+
return existsSync(resolved) ? resolved : null;
|
|
65
|
+
}
|
|
66
|
+
// 2. State dir override
|
|
67
|
+
const stateDir = env.OPENCLAW_STATE_DIR?.trim() || env.CLAWDBOT_STATE_DIR?.trim();
|
|
68
|
+
if (stateDir) {
|
|
69
|
+
const resolved = expandTilde(stateDir);
|
|
70
|
+
for (const name of CONFIG_FILENAMES) {
|
|
71
|
+
const candidate = path.join(resolved, name);
|
|
72
|
+
if (existsSync(candidate))
|
|
73
|
+
return candidate;
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
// 3. Default dirs × config filenames
|
|
78
|
+
const home = resolveHome();
|
|
79
|
+
for (const dir of STATE_DIRNAMES) {
|
|
80
|
+
for (const name of CONFIG_FILENAMES) {
|
|
81
|
+
const candidate = path.join(home, dir, name);
|
|
82
|
+
if (existsSync(candidate))
|
|
83
|
+
return candidate;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// 4. Not found — caller should ask the user
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Return the canonical default config path (for prompting the user).
|
|
91
|
+
*/
|
|
92
|
+
export function defaultConfigPath() {
|
|
93
|
+
return path.join(resolveHome(), ".openclaw", "openclaw.json");
|
|
94
|
+
}
|
|
95
|
+
// ---------------------------------------------------------------------------
|
|
96
|
+
// Config read / merge / write helpers
|
|
97
|
+
// ---------------------------------------------------------------------------
|
|
98
|
+
/**
|
|
99
|
+
* Read an existing config file. Returns `{}` if the file doesn't exist.
|
|
100
|
+
* Throws on parse errors so the caller can warn the user.
|
|
101
|
+
*/
|
|
102
|
+
export function readExistingConfig(configPath) {
|
|
103
|
+
if (!existsSync(configPath))
|
|
104
|
+
return {};
|
|
105
|
+
const raw = readFileSync(configPath, "utf-8").trim();
|
|
106
|
+
if (!raw)
|
|
107
|
+
return {};
|
|
108
|
+
// Try standard JSON first (most configs are valid JSON)
|
|
109
|
+
try {
|
|
110
|
+
return JSON.parse(raw);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
// Try stripping single-line comments and trailing commas (light JSON5 compat)
|
|
114
|
+
const cleaned = raw
|
|
115
|
+
.replace(/\/\/.*$/gm, "") // strip // comments
|
|
116
|
+
.replace(/\/\*[\s\S]*?\*\//g, "") // strip /* */ comments
|
|
117
|
+
.replace(/,(\s*[}\]])/g, "$1"); // strip trailing commas
|
|
118
|
+
return JSON.parse(cleaned);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Deep-merge the AgentHiFive plugin config into an existing OpenClaw config.
|
|
123
|
+
*
|
|
124
|
+
* - Sets `plugins.enabled = true`
|
|
125
|
+
* - Adds `"agenthifive"` to `plugins.allow` (deduped)
|
|
126
|
+
* - Adds `"@agenthifive/openclaw"` to `plugins.load.paths` (deduped)
|
|
127
|
+
* - Replaces `plugins.entries.agenthifive` entirely
|
|
128
|
+
* - Preserves ALL other keys untouched
|
|
129
|
+
*/
|
|
130
|
+
export function mergePluginConfig(existing, pluginBlock) {
|
|
131
|
+
const result = { ...existing };
|
|
132
|
+
// Extract our plugin config from the block buildConfigOutput() produces
|
|
133
|
+
const srcPlugins = pluginBlock.plugins;
|
|
134
|
+
const srcEntries = srcPlugins.entries ?? {};
|
|
135
|
+
// Build merged plugins object
|
|
136
|
+
const plugins = {
|
|
137
|
+
...(result.plugins ?? {}),
|
|
138
|
+
};
|
|
139
|
+
plugins.enabled = true;
|
|
140
|
+
// Merge allow list
|
|
141
|
+
const allow = new Set(plugins.allow ?? []);
|
|
142
|
+
allow.add("agenthifive");
|
|
143
|
+
plugins.allow = [...allow];
|
|
144
|
+
// Merge load paths
|
|
145
|
+
const load = {
|
|
146
|
+
...(plugins.load ?? {}),
|
|
147
|
+
};
|
|
148
|
+
const paths = new Set(load.paths ?? []);
|
|
149
|
+
paths.add("@agenthifive/openclaw");
|
|
150
|
+
load.paths = [...paths];
|
|
151
|
+
plugins.load = load;
|
|
152
|
+
// Replace agenthifive entry entirely (fresh bootstrap replaces old)
|
|
153
|
+
const entries = {
|
|
154
|
+
...(plugins.entries ?? {}),
|
|
155
|
+
};
|
|
156
|
+
entries.agenthifive = srcEntries.agenthifive;
|
|
157
|
+
plugins.entries = entries;
|
|
158
|
+
result.plugins = plugins;
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=config-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-discovery.js","sourceRoot":"","sources":["../src/config-discovery.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,9 @@ export { VaultActionProxy } from "./vault-action-proxy.js";
|
|
|
7
7
|
export { VaultCredentialProvider } from "./vault-provider.js";
|
|
8
8
|
export { verifyPatches } from "./patch-verify.js";
|
|
9
9
|
export type { PatchStatus } from "./patch-verify.js";
|
|
10
|
+
export { resolveOpenClawConfigPath, defaultConfigPath, readExistingConfig, mergePluginConfig, } from "./config-discovery.js";
|
|
11
|
+
export { findOpenClawInstallDir, findAllOpenClawInstalls, validateOpenClawDir, applyPatch, applyDistPatch, applySourcePatch, isPatchApplied, findDistChunk, } from "./auto-patch.js";
|
|
12
|
+
export type { OpenClawInstall, PatchResult } from "./auto-patch.js";
|
|
10
13
|
export { runSetupWizard, parseSetupArgs, buildConfigOutput } from "./setup-wizard.js";
|
|
11
14
|
export type { SetupOptions } from "./setup-wizard.js";
|
|
12
15
|
export { setCurrentSessionContext, getCurrentSessionContext, parseSessionKey, } from "./session-context.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,eAAe,CAAC;AAGlD,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtF,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EAEtB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,OAAO,EACP,eAAe,EACf,cAAc,EACd,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,eAAe,CAAC;AAGlD,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGpE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtF,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EAEtB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,YAAY,GACb,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,OAAO,EACP,eAAe,EACf,cAAc,EACd,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,10 @@ export { VaultActionProxy } from "./vault-action-proxy.js";
|
|
|
12
12
|
export { VaultCredentialProvider } from "./vault-provider.js";
|
|
13
13
|
// Patch runtime (separate entry point at @agenthifive/openclaw/runtime)
|
|
14
14
|
export { verifyPatches } from "./patch-verify.js";
|
|
15
|
+
// Config discovery
|
|
16
|
+
export { resolveOpenClawConfigPath, defaultConfigPath, readExistingConfig, mergePluginConfig, } from "./config-discovery.js";
|
|
17
|
+
// Auto-patching
|
|
18
|
+
export { findOpenClawInstallDir, findAllOpenClawInstalls, validateOpenClawDir, applyPatch, applyDistPatch, applySourcePatch, isPatchApplied, findDistChunk, } from "./auto-patch.js";
|
|
15
19
|
// Setup wizard
|
|
16
20
|
export { runSetupWizard, parseSetupArgs, buildConfigOutput } from "./setup-wizard.js";
|
|
17
21
|
// Session context
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,eAAe,CAAC;AAElD,kDAAkD;AAClD,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,SAAS;AACT,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEzD,gBAAgB;AAChB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEnF,wCAAwC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,wEAAwE;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,eAAe;AACf,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtF,kBAAkB;AAClB,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAE9B,oBAAoB;AACpB,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAgChC,iDAAiD;AACjD,OAAO,EACL,OAAO,EACP,eAAe,EACf,cAAc,EACd,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,eAAe,CAAC;AAElD,kDAAkD;AAClD,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,SAAS;AACT,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEzD,gBAAgB;AAChB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEnF,wCAAwC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,wEAAwE;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,mBAAmB;AACnB,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAE/B,gBAAgB;AAChB,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,aAAa,GACd,MAAM,iBAAiB,CAAC;AAGzB,eAAe;AACf,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtF,kBAAkB;AAClB,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAE9B,oBAAoB;AACpB,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAgChC,iDAAiD;AACjD,OAAO,EACL,OAAO,EACP,eAAe,EACf,cAAc,EACd,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
|
package/dist/patch-verify.d.ts
CHANGED
|
@@ -5,6 +5,12 @@
|
|
|
5
5
|
* proxying features are available. The plugin works fully (tools, hooks,
|
|
6
6
|
* prompt injection) WITHOUT patches — they only enable LLM credential
|
|
7
7
|
* proxying via model-auth.ts.
|
|
8
|
+
*
|
|
9
|
+
* Detection strategies:
|
|
10
|
+
* 1. import.meta.resolve — finds sibling model-auth.js (works when plugin
|
|
11
|
+
* is co-located with OpenClaw, e.g. source/dev installs)
|
|
12
|
+
* 2. findOpenClawInstallDir — finds the global/npm OpenClaw installation
|
|
13
|
+
* and checks the dist chunk for the patch marker
|
|
8
14
|
*/
|
|
9
15
|
import type { PluginLogger } from "./pending-approvals.js";
|
|
10
16
|
export type PatchStatus = {
|
|
@@ -14,15 +20,6 @@ export type PatchStatus = {
|
|
|
14
20
|
/**
|
|
15
21
|
* Probe whether the model-auth patch is applied by checking if OpenClaw's
|
|
16
22
|
* resolveApiKeyForProvider function consults our runtime module.
|
|
17
|
-
*
|
|
18
|
-
* Strategy: We check if the patched module can be resolved. The patch adds
|
|
19
|
-
* a dynamic import of "@agenthifive/openclaw/runtime" — if the import path
|
|
20
|
-
* resolves, the module exists. The actual behavior test would require calling
|
|
21
|
-
* resolveApiKeyForProvider which is too invasive for a startup check.
|
|
22
|
-
*
|
|
23
|
-
* Instead, we do a simpler check: look for our credential resolution code
|
|
24
|
-
* in the model-auth module by attempting to import it and checking for the
|
|
25
|
-
* patched function signature.
|
|
26
23
|
*/
|
|
27
24
|
export declare function verifyPatches(logger: PluginLogger): Promise<PatchStatus>;
|
|
28
25
|
//# sourceMappingURL=patch-verify.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patch-verify.d.ts","sourceRoot":"","sources":["../src/patch-verify.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"patch-verify.d.ts","sourceRoot":"","sources":["../src/patch-verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAG3D,MAAM,MAAM,WAAW,GAAG;IACxB,qEAAqE;IACrE,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAsC9E"}
|
package/dist/patch-verify.js
CHANGED
|
@@ -5,30 +5,22 @@
|
|
|
5
5
|
* proxying features are available. The plugin works fully (tools, hooks,
|
|
6
6
|
* prompt injection) WITHOUT patches — they only enable LLM credential
|
|
7
7
|
* proxying via model-auth.ts.
|
|
8
|
+
*
|
|
9
|
+
* Detection strategies:
|
|
10
|
+
* 1. import.meta.resolve — finds sibling model-auth.js (works when plugin
|
|
11
|
+
* is co-located with OpenClaw, e.g. source/dev installs)
|
|
12
|
+
* 2. findOpenClawInstallDir — finds the global/npm OpenClaw installation
|
|
13
|
+
* and checks the dist chunk for the patch marker
|
|
8
14
|
*/
|
|
15
|
+
import { findOpenClawInstallDir, isPatchApplied } from "./auto-patch.js";
|
|
9
16
|
/**
|
|
10
17
|
* Probe whether the model-auth patch is applied by checking if OpenClaw's
|
|
11
18
|
* resolveApiKeyForProvider function consults our runtime module.
|
|
12
|
-
*
|
|
13
|
-
* Strategy: We check if the patched module can be resolved. The patch adds
|
|
14
|
-
* a dynamic import of "@agenthifive/openclaw/runtime" — if the import path
|
|
15
|
-
* resolves, the module exists. The actual behavior test would require calling
|
|
16
|
-
* resolveApiKeyForProvider which is too invasive for a startup check.
|
|
17
|
-
*
|
|
18
|
-
* Instead, we do a simpler check: look for our credential resolution code
|
|
19
|
-
* in the model-auth module by attempting to import it and checking for the
|
|
20
|
-
* patched function signature.
|
|
21
19
|
*/
|
|
22
20
|
export async function verifyPatches(logger) {
|
|
23
21
|
const status = { modelAuth: false };
|
|
22
|
+
// Strategy 1: Check sibling module (source/dev installs)
|
|
24
23
|
try {
|
|
25
|
-
// Try to import model-auth and check if it has vault awareness
|
|
26
|
-
// The patched version exports a marker or has vault-related code paths.
|
|
27
|
-
// We check by looking for the `resolveApiKeyForProvider` and testing
|
|
28
|
-
// whether it consults our runtime module.
|
|
29
|
-
//
|
|
30
|
-
// Simplest reliable approach: check if the source contains our patch
|
|
31
|
-
// marker comment that we add in the patch file.
|
|
32
24
|
const modelAuthPath = await findModuleFile("../agents/model-auth.js");
|
|
33
25
|
if (modelAuthPath) {
|
|
34
26
|
const { readFileSync } = await import("node:fs");
|
|
@@ -37,13 +29,24 @@ export async function verifyPatches(logger) {
|
|
|
37
29
|
}
|
|
38
30
|
}
|
|
39
31
|
catch {
|
|
40
|
-
// Module not found
|
|
32
|
+
// Module not found — try strategy 2
|
|
33
|
+
}
|
|
34
|
+
// Strategy 2: Find OpenClaw installation and check dist chunk
|
|
35
|
+
if (!status.modelAuth) {
|
|
36
|
+
try {
|
|
37
|
+
const install = await findOpenClawInstallDir();
|
|
38
|
+
if (install) {
|
|
39
|
+
status.modelAuth = isPatchApplied(install);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// Detection failed — assume not patched
|
|
44
|
+
}
|
|
41
45
|
}
|
|
42
46
|
if (!status.modelAuth) {
|
|
43
47
|
logger.warn?.("AgentHiFive: model-auth patch not detected. LLM credential proxying is unavailable. " +
|
|
44
48
|
"Tools, prompt injection, and approval flow work normally. " +
|
|
45
|
-
"
|
|
46
|
-
"see @agenthifive/openclaw/patches/README.md");
|
|
49
|
+
"Run 'openclaw setup-vault' to apply the patch automatically.");
|
|
47
50
|
}
|
|
48
51
|
else {
|
|
49
52
|
logger.info?.("AgentHiFive: model-auth patch detected — credential proxying enabled");
|
|
@@ -56,9 +59,7 @@ export async function verifyPatches(logger) {
|
|
|
56
59
|
*/
|
|
57
60
|
async function findModuleFile(specifier) {
|
|
58
61
|
try {
|
|
59
|
-
// Use import.meta.resolve to find the module path
|
|
60
62
|
const resolved = import.meta.resolve(specifier);
|
|
61
|
-
// Convert file:// URL to path
|
|
62
63
|
if (resolved.startsWith("file://")) {
|
|
63
64
|
const { fileURLToPath } = await import("node:url");
|
|
64
65
|
return fileURLToPath(resolved);
|
package/dist/patch-verify.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patch-verify.js","sourceRoot":"","sources":["../src/patch-verify.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"patch-verify.js","sourceRoot":"","sources":["../src/patch-verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAOzE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAoB;IACtD,MAAM,MAAM,GAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAEjD,yDAAyD;IACzD,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,yBAAyB,CAAC,CAAC;QACtE,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;IACtC,CAAC;IAED,8DAA8D;IAC9D,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,sBAAsB,EAAE,CAAC;YAC/C,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;QAC1C,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,EAAE,CACX,sFAAsF;YACpF,4DAA4D;YAC5D,8DAA8D,CACjE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,EAAE,CAAC,sEAAsE,CAAC,CAAC;IACxF,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,cAAc,CAAC,SAAiB;IAC7C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YACnD,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
package/dist/setup-wizard.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Setup wizard for AgentHiFive vault integration.
|
|
3
3
|
*
|
|
4
|
-
* Bootstraps agent auth, discovers capabilities,
|
|
5
|
-
*
|
|
4
|
+
* Bootstraps agent auth, discovers capabilities, writes config to
|
|
5
|
+
* openclaw.json, and auto-applies the credential resolution patch.
|
|
6
6
|
*
|
|
7
7
|
* Two modes:
|
|
8
8
|
* - Interactive: prompts via Node.js readline
|
|
9
|
-
* - Non-interactive: accepts --base-url
|
|
9
|
+
* - Non-interactive: accepts --base-url, --bootstrap-secret, and other flags
|
|
10
10
|
*
|
|
11
11
|
* Registered as `openclaw setup-vault` via api.registerCommand() in register.ts.
|
|
12
12
|
*/
|
|
@@ -14,6 +14,8 @@ export interface SetupOptions {
|
|
|
14
14
|
baseUrl?: string;
|
|
15
15
|
bootstrapSecret?: string;
|
|
16
16
|
nonInteractive?: boolean;
|
|
17
|
+
configPath?: string;
|
|
18
|
+
openclawDir?: string;
|
|
17
19
|
}
|
|
18
20
|
export declare function buildConfigOutput(params: {
|
|
19
21
|
baseUrl: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-wizard.d.ts","sourceRoot":"","sources":["../src/setup-wizard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"setup-wizard.d.ts","sourceRoot":"","sources":["../src/setup-wizard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAsBH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8HD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B,GAAG,MAAM,CA4BT;AAMD,wBAAsB,cAAc,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0O3E;AA6CD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CA4B3D"}
|
package/dist/setup-wizard.js
CHANGED
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Setup wizard for AgentHiFive vault integration.
|
|
3
3
|
*
|
|
4
|
-
* Bootstraps agent auth, discovers capabilities,
|
|
5
|
-
*
|
|
4
|
+
* Bootstraps agent auth, discovers capabilities, writes config to
|
|
5
|
+
* openclaw.json, and auto-applies the credential resolution patch.
|
|
6
6
|
*
|
|
7
7
|
* Two modes:
|
|
8
8
|
* - Interactive: prompts via Node.js readline
|
|
9
|
-
* - Non-interactive: accepts --base-url
|
|
9
|
+
* - Non-interactive: accepts --base-url, --bootstrap-secret, and other flags
|
|
10
10
|
*
|
|
11
11
|
* Registered as `openclaw setup-vault` via api.registerCommand() in register.ts.
|
|
12
12
|
*/
|
|
13
|
+
import { mkdirSync, writeFileSync } from "node:fs";
|
|
14
|
+
import path from "node:path";
|
|
13
15
|
import { generateKeyPair, exportJWK } from "jose";
|
|
14
16
|
import { VaultTokenManager } from "./vault-token-manager.js";
|
|
17
|
+
import { resolveOpenClawConfigPath, defaultConfigPath, readExistingConfig, mergePluginConfig, } from "./config-discovery.js";
|
|
18
|
+
import { findOpenClawInstallDir, validateOpenClawDir, applyPatch, } from "./auto-patch.js";
|
|
15
19
|
// ---------------------------------------------------------------------------
|
|
16
20
|
// Readline helpers
|
|
17
21
|
// ---------------------------------------------------------------------------
|
|
@@ -216,13 +220,7 @@ export async function runSetupWizard(opts = {}) {
|
|
|
216
220
|
if (vaultConnections.length === 0) {
|
|
217
221
|
log(" No connections found. Add connections in the AgentHiFive dashboard.");
|
|
218
222
|
}
|
|
219
|
-
// Step 7:
|
|
220
|
-
let showPatchInstructions = false;
|
|
221
|
-
if (proxiedProviders.length > 0 && !opts.nonInteractive) {
|
|
222
|
-
log("");
|
|
223
|
-
showPatchInstructions = await confirm(" Enable LLM credential proxying? (requires a one-time patch)");
|
|
224
|
-
}
|
|
225
|
-
// Step 8: Output config
|
|
223
|
+
// Step 7: Build config block
|
|
226
224
|
const configBlock = buildConfigOutput({
|
|
227
225
|
baseUrl,
|
|
228
226
|
agentId,
|
|
@@ -231,24 +229,91 @@ export async function runSetupWizard(opts = {}) {
|
|
|
231
229
|
connectedProviders,
|
|
232
230
|
proxiedProviders,
|
|
233
231
|
});
|
|
232
|
+
// Step 8: Write config to openclaw.json
|
|
234
233
|
log("");
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
234
|
+
let configPath = opts.configPath ?? resolveOpenClawConfigPath();
|
|
235
|
+
if (!configPath && !opts.nonInteractive) {
|
|
236
|
+
const suggested = defaultConfigPath();
|
|
237
|
+
configPath = await prompt(" OpenClaw config path", suggested);
|
|
238
|
+
if (!configPath)
|
|
239
|
+
configPath = null;
|
|
240
|
+
}
|
|
241
|
+
if (configPath) {
|
|
242
|
+
try {
|
|
243
|
+
const existing = readExistingConfig(configPath);
|
|
244
|
+
const merged = mergePluginConfig(existing, configBlock);
|
|
245
|
+
mkdirSync(path.dirname(configPath), { recursive: true });
|
|
246
|
+
writeFileSync(configPath, JSON.stringify(merged, null, 2) + "\n", "utf-8");
|
|
247
|
+
log(` Config written to: ${configPath}`);
|
|
248
|
+
log("");
|
|
249
|
+
log(" Plugin config (agenthifive):");
|
|
250
|
+
log(" " + "-".repeat(40));
|
|
251
|
+
const ah5Entry = configBlock.plugins;
|
|
252
|
+
const entries = ah5Entry.entries;
|
|
253
|
+
const lines = JSON.stringify(entries.agenthifive, null, 2).split("\n");
|
|
254
|
+
for (const line of lines) {
|
|
255
|
+
log(` ${line}`);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
catch (err) {
|
|
259
|
+
log(` WARNING: Could not write config: ${err instanceof Error ? err.message : String(err)}`);
|
|
260
|
+
log("");
|
|
261
|
+
log(" Add this to your openclaw.json manually:");
|
|
262
|
+
log(JSON.stringify(configBlock, null, 2));
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
log(" Could not determine config path.");
|
|
267
|
+
log(" Add this to your openclaw.json manually:");
|
|
250
268
|
log("");
|
|
269
|
+
log(JSON.stringify(configBlock, null, 2));
|
|
270
|
+
}
|
|
271
|
+
log("");
|
|
272
|
+
// Step 9: Auto-apply credential proxying patch
|
|
273
|
+
log(" " + "-".repeat(50));
|
|
274
|
+
log(" Applying credential proxying patch...");
|
|
275
|
+
let openclawInstall = opts.openclawDir
|
|
276
|
+
? validateOpenClawDir(opts.openclawDir)
|
|
277
|
+
: await findOpenClawInstallDir();
|
|
278
|
+
if (!openclawInstall && !opts.nonInteractive) {
|
|
279
|
+
const userPath = await prompt(" OpenClaw installation path (press Enter to skip)");
|
|
280
|
+
if (userPath) {
|
|
281
|
+
openclawInstall = validateOpenClawDir(userPath);
|
|
282
|
+
if (!openclawInstall) {
|
|
283
|
+
log(` WARNING: "${userPath}" does not appear to be an OpenClaw installation.`);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
251
286
|
}
|
|
287
|
+
if (openclawInstall) {
|
|
288
|
+
try {
|
|
289
|
+
const result = applyPatch(openclawInstall);
|
|
290
|
+
if (result.applied) {
|
|
291
|
+
log(` ${result.message}`);
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
log(` WARNING: ${result.message}`);
|
|
295
|
+
logManualPatchInstructions(log);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
catch (err) {
|
|
299
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
300
|
+
if (msg.includes("EACCES") || msg.includes("permission denied")) {
|
|
301
|
+
log(" ERROR: Permission denied. Try running with sudo:");
|
|
302
|
+
log(" sudo openclaw setup-vault ...");
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
log(` WARNING: Auto-patch failed: ${msg}`);
|
|
306
|
+
}
|
|
307
|
+
logManualPatchInstructions(log);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
if (!opts.nonInteractive) {
|
|
312
|
+
log(" Could not find OpenClaw installation. Skipping auto-patch.");
|
|
313
|
+
}
|
|
314
|
+
logManualPatchInstructions(log);
|
|
315
|
+
}
|
|
316
|
+
log("");
|
|
252
317
|
log(" Setup complete!");
|
|
253
318
|
log("");
|
|
254
319
|
}
|
|
@@ -266,7 +331,7 @@ function outputMinimalConfig(log, baseUrl, agentId, privateKey) {
|
|
|
266
331
|
});
|
|
267
332
|
log("");
|
|
268
333
|
log(" " + "=".repeat(50));
|
|
269
|
-
log(" Add this to your
|
|
334
|
+
log(" Add this to your openclaw.json:");
|
|
270
335
|
log(" (capabilities could not be fetched - update manually)");
|
|
271
336
|
log(" " + "=".repeat(50));
|
|
272
337
|
log("");
|
|
@@ -274,6 +339,14 @@ function outputMinimalConfig(log, baseUrl, agentId, privateKey) {
|
|
|
274
339
|
log("");
|
|
275
340
|
}
|
|
276
341
|
// ---------------------------------------------------------------------------
|
|
342
|
+
// Manual patch instructions (shown when auto-patch fails)
|
|
343
|
+
// ---------------------------------------------------------------------------
|
|
344
|
+
function logManualPatchInstructions(log) {
|
|
345
|
+
log("");
|
|
346
|
+
log(" To apply the patch manually, see:");
|
|
347
|
+
log(" node_modules/@agenthifive/openclaw/patches/README.md");
|
|
348
|
+
}
|
|
349
|
+
// ---------------------------------------------------------------------------
|
|
277
350
|
// CLI argument parser (for non-interactive mode)
|
|
278
351
|
// ---------------------------------------------------------------------------
|
|
279
352
|
export function parseSetupArgs(args) {
|
|
@@ -290,6 +363,16 @@ export function parseSetupArgs(args) {
|
|
|
290
363
|
if (val)
|
|
291
364
|
opts.bootstrapSecret = val;
|
|
292
365
|
}
|
|
366
|
+
else if (arg === "--config-path" && args[i + 1]) {
|
|
367
|
+
const val = args[++i];
|
|
368
|
+
if (val)
|
|
369
|
+
opts.configPath = val;
|
|
370
|
+
}
|
|
371
|
+
else if (arg === "--openclaw-dir" && args[i + 1]) {
|
|
372
|
+
const val = args[++i];
|
|
373
|
+
if (val)
|
|
374
|
+
opts.openclawDir = val;
|
|
375
|
+
}
|
|
293
376
|
else if (arg === "--non-interactive") {
|
|
294
377
|
opts.nonInteractive = true;
|
|
295
378
|
}
|
package/dist/setup-wizard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-wizard.js","sourceRoot":"","sources":["../src/setup-wizard.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"setup-wizard.js","sourceRoot":"","sources":["../src/setup-wizard.ts"],"names":[],"mappings":"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"}
|