mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-19 09:58:38 +00:00
docs(secrets): clarify partial migration guidance
This commit is contained in:
committed by
Peter Steinberger
parent
7671c1dd10
commit
14897e8de7
@@ -78,9 +78,15 @@ Flags:
|
|||||||
Notes:
|
Notes:
|
||||||
|
|
||||||
- `configure` targets secret-bearing fields in `openclaw.json`.
|
- `configure` targets secret-bearing fields in `openclaw.json`.
|
||||||
|
- Include all secret-bearing fields you intend to migrate (for example both `models.providers.*.apiKey` and `skills.entries.*.apiKey`) so audit can reach a clean state.
|
||||||
- It performs preflight resolution before apply.
|
- It performs preflight resolution before apply.
|
||||||
- Apply path is one-way for migrated plaintext values.
|
- Apply path is one-way for migrated plaintext values.
|
||||||
|
|
||||||
|
Exec provider safety note:
|
||||||
|
|
||||||
|
- Homebrew installs often expose symlinked binaries under `/opt/homebrew/bin/*`.
|
||||||
|
- Set `allowSymlinkCommand: true` only when needed for trusted package-manager paths, and pair it with `trustedDirs` (for example `["/opt/homebrew"]`).
|
||||||
|
|
||||||
## Apply a saved plan
|
## Apply a saved plan
|
||||||
|
|
||||||
Apply or preflight a plan generated previously:
|
Apply or preflight a plan generated previously:
|
||||||
@@ -105,3 +111,5 @@ openclaw secrets audit --check
|
|||||||
openclaw secrets configure
|
openclaw secrets configure
|
||||||
openclaw secrets audit --check
|
openclaw secrets audit --check
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If `audit --check` still reports plaintext findings after a partial migration, verify you also migrated skill keys (`skills.entries.*.apiKey`) and any other reported target paths.
|
||||||
|
|||||||
@@ -128,6 +128,7 @@ Define providers under `secrets.providers`:
|
|||||||
- Runs configured absolute binary path, no shell.
|
- Runs configured absolute binary path, no shell.
|
||||||
- By default, `command` must point to a regular file (not a symlink).
|
- By default, `command` must point to a regular file (not a symlink).
|
||||||
- Set `allowSymlinkCommand: true` to allow symlink command paths (for example Homebrew shims). OpenClaw validates the resolved target path.
|
- Set `allowSymlinkCommand: true` to allow symlink command paths (for example Homebrew shims). OpenClaw validates the resolved target path.
|
||||||
|
- Enable `allowSymlinkCommand` only when required for trusted package-manager paths, and pair it with `trustedDirs` (for example `["/opt/homebrew"]`).
|
||||||
- When `trustedDirs` is set, checks apply to the resolved target path.
|
- When `trustedDirs` is set, checks apply to the resolved target path.
|
||||||
- Supports timeout, no-output timeout, output byte limits, env allowlist, and trusted dirs.
|
- Supports timeout, no-output timeout, output byte limits, env allowlist, and trusted dirs.
|
||||||
- Request payload (stdin):
|
- Request payload (stdin):
|
||||||
@@ -310,6 +311,11 @@ openclaw secrets configure
|
|||||||
openclaw secrets audit --check
|
openclaw secrets audit --check
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Migration completeness:
|
||||||
|
|
||||||
|
- Include `skills.entries.<skillKey>.apiKey` targets when those skills use API keys.
|
||||||
|
- If `audit --check` still reports plaintext findings after a partial migration, migrate the remaining reported paths and rerun audit.
|
||||||
|
|
||||||
### `secrets audit`
|
### `secrets audit`
|
||||||
|
|
||||||
Findings include:
|
Findings include:
|
||||||
|
|||||||
@@ -108,7 +108,18 @@ describe("secrets CLI", () => {
|
|||||||
protocolVersion: 1,
|
protocolVersion: 1,
|
||||||
generatedAt: "2026-02-26T00:00:00.000Z",
|
generatedAt: "2026-02-26T00:00:00.000Z",
|
||||||
generatedBy: "openclaw secrets configure",
|
generatedBy: "openclaw secrets configure",
|
||||||
targets: [],
|
targets: [
|
||||||
|
{
|
||||||
|
type: "skills.entries.apiKey",
|
||||||
|
path: "skills.entries.qa-secret-test.apiKey",
|
||||||
|
pathSegments: ["skills", "entries", "qa-secret-test", "apiKey"],
|
||||||
|
ref: {
|
||||||
|
source: "env",
|
||||||
|
provider: "default",
|
||||||
|
id: "QA_SECRET_TEST_API_KEY",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
preflight: {
|
preflight: {
|
||||||
mode: "dry-run",
|
mode: "dry-run",
|
||||||
@@ -129,7 +140,19 @@ describe("secrets CLI", () => {
|
|||||||
|
|
||||||
await createProgram().parseAsync(["secrets", "configure"], { from: "user" });
|
await createProgram().parseAsync(["secrets", "configure"], { from: "user" });
|
||||||
expect(runSecretsConfigureInteractive).toHaveBeenCalled();
|
expect(runSecretsConfigureInteractive).toHaveBeenCalled();
|
||||||
expect(runSecretsApply).toHaveBeenCalledWith(expect.objectContaining({ write: true }));
|
expect(runSecretsApply).toHaveBeenCalledWith(
|
||||||
|
expect.objectContaining({
|
||||||
|
write: true,
|
||||||
|
plan: expect.objectContaining({
|
||||||
|
targets: expect.arrayContaining([
|
||||||
|
expect.objectContaining({
|
||||||
|
type: "skills.entries.apiKey",
|
||||||
|
path: "skills.entries.qa-secret-test.apiKey",
|
||||||
|
}),
|
||||||
|
]),
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
);
|
||||||
expect(runtimeLogs.at(-1)).toContain("Secrets applied");
|
expect(runtimeLogs.at(-1)).toContain("Secrets applied");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user