Skip to content

Commit 89a4f2a

Browse files
committed
refactor(config): centralize runtime config state
1 parent b888741 commit 89a4f2a

13 files changed

Lines changed: 366 additions & 256 deletions

File tree

src/cli/update-cli/update-command.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
writeConfigFile,
1212
} from "../../config/config.js";
1313
import { formatConfigIssueLines } from "../../config/issue-format.js";
14+
import { asResolvedSourceConfig, asRuntimeConfig } from "../../config/materialize.js";
1415
import { resolveGatewayService } from "../../daemon/service.js";
1516
import { nodeVersionSatisfiesEngine } from "../../infra/runtime-guard.js";
1617
import {
@@ -1023,8 +1024,10 @@ export async function updateCommand(opts: UpdateCommandOptions): Promise<void> {
10231024
postUpdateConfigSnapshot = {
10241025
...configSnapshot,
10251026
parsed: next,
1026-
resolved: next,
1027-
config: next,
1027+
sourceConfig: asResolvedSourceConfig(next),
1028+
resolved: asResolvedSourceConfig(next),
1029+
runtimeConfig: asRuntimeConfig(next),
1030+
config: asRuntimeConfig(next),
10281031
};
10291032
if (!opts.json) {
10301033
defaultRuntime.log(theme.muted(`Update channel set to ${requestedChannel}.`));

src/commands/models/load-config.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { resolveCommandSecretRefsViaGateway } from "../../cli/command-secret-gateway.js";
22
import { getModelsCommandSecretTargetIds } from "../../cli/command-secret-targets.js";
33
import {
4-
loadConfig,
5-
readConfigFileSnapshotForWrite,
4+
getRuntimeConfig,
5+
readSourceConfigSnapshotForWrite,
66
setRuntimeConfigSnapshot,
77
type OpenClawConfig,
88
} from "../../config/config.js";
@@ -16,9 +16,9 @@ export type LoadedModelsConfig = {
1616

1717
async function loadSourceConfigSnapshot(fallback: OpenClawConfig): Promise<OpenClawConfig> {
1818
try {
19-
const { snapshot } = await readConfigFileSnapshotForWrite();
19+
const { snapshot } = await readSourceConfigSnapshotForWrite();
2020
if (snapshot.valid) {
21-
return snapshot.resolved;
21+
return snapshot.sourceConfig;
2222
}
2323
} catch {
2424
// Fall back to runtime-loaded config if source snapshot cannot be read.
@@ -30,7 +30,7 @@ export async function loadModelsConfigWithSource(params: {
3030
commandName: string;
3131
runtime?: RuntimeEnv;
3232
}): Promise<LoadedModelsConfig> {
33-
const runtimeConfig = loadConfig();
33+
const runtimeConfig = getRuntimeConfig();
3434
const sourceConfig = await loadSourceConfigSnapshot(runtimeConfig);
3535
const { resolvedConfig, diagnostics } = await resolveCommandSecretRefsViaGateway({
3636
config: runtimeConfig,

src/config/config.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export {
44
clearRuntimeConfigSnapshot,
55
registerConfigWriteListener,
66
createConfigIO,
7+
getRuntimeConfig,
78
getRuntimeConfigSnapshot,
89
getRuntimeConfigSourceSnapshot,
910
projectConfigOntoRuntimeSourceSnapshot,
@@ -12,6 +13,8 @@ export {
1213
parseConfigJson5,
1314
readConfigFileSnapshot,
1415
readConfigFileSnapshotForWrite,
16+
readSourceConfigSnapshot,
17+
readSourceConfigSnapshotForWrite,
1518
resetConfigRuntimeState,
1619
resolveConfigSnapshotHash,
1720
setRuntimeConfigSnapshotRefreshHandler,
@@ -20,6 +23,7 @@ export {
2023
} from "./io.js";
2124
export type { ConfigWriteNotification } from "./io.js";
2225
export { migrateLegacyConfig } from "./legacy-migrate.js";
26+
export { ConfigMutationConflictError, mutateConfigFile, replaceConfigFile } from "./mutate.js";
2327
export * from "./paths.js";
2428
export * from "./runtime-overrides.js";
2529
export * from "./types.js";

0 commit comments

Comments
 (0)