@okclaw-build/cli 1.0.0-beta.45 → 1.0.0-beta.46
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.
|
@@ -12,8 +12,14 @@ export declare class OpenclawInstaller implements Installer {
|
|
|
12
12
|
* }
|
|
13
13
|
* }
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
15
|
+
* REPLACES openclaw.json -> models.providers entirely. The old merge
|
|
16
|
+
* semantics left stale providers behind on every deploy: switching from
|
|
17
|
+
* deepseek to qwen would still leave deepseek under models.providers.
|
|
18
|
+
* models.providers is a protected map in openclaw — full replacement
|
|
19
|
+
* requires the --replace flag, otherwise `openclaw config set` refuses
|
|
20
|
+
* to drop existing keys.
|
|
21
|
+
*
|
|
22
|
+
* Sets agents.defaults.model.primary to the first provider's first model.
|
|
17
23
|
*/
|
|
18
24
|
configure(config: Record<string, unknown>): Promise<void>;
|
|
19
25
|
uninstall(): Promise<void>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { existsSync, cpSync, mkdirSync, rmSync } from 'node:fs';
|
|
2
2
|
import { shell, shellRetry, shellCapture } from '../utils/shell.js';
|
|
3
3
|
import { ensureNodeVersion, checkDiskSpace } from '../utils/deps.js';
|
|
4
4
|
import { info, warn } from '../utils/logger.js';
|
|
@@ -76,73 +76,46 @@ export class OpenclawInstaller {
|
|
|
76
76
|
* }
|
|
77
77
|
* }
|
|
78
78
|
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
79
|
+
* REPLACES openclaw.json -> models.providers entirely. The old merge
|
|
80
|
+
* semantics left stale providers behind on every deploy: switching from
|
|
81
|
+
* deepseek to qwen would still leave deepseek under models.providers.
|
|
82
|
+
* models.providers is a protected map in openclaw — full replacement
|
|
83
|
+
* requires the --replace flag, otherwise `openclaw config set` refuses
|
|
84
|
+
* to drop existing keys.
|
|
85
|
+
*
|
|
86
|
+
* Sets agents.defaults.model.primary to the first provider's first model.
|
|
81
87
|
*/
|
|
82
88
|
async configure(config) {
|
|
83
89
|
if (Object.keys(config).length === 0)
|
|
84
90
|
return;
|
|
85
|
-
//
|
|
86
|
-
//
|
|
87
|
-
//
|
|
88
|
-
//
|
|
89
|
-
//
|
|
90
|
-
//
|
|
91
|
-
//
|
|
92
|
-
// (cli writes channels.dingtalk.clientSecret → daemon reload picks
|
|
93
|
-
// up an older view that didn't have it → daemon rewrites the
|
|
94
|
-
// channels block without clientSecret)
|
|
95
|
-
// The latter form looks like a successful deploy with mysteriously
|
|
96
|
-
// missing config fields. Stop the daemon for the entire configure().
|
|
91
|
+
// `openclaw config set` does a hash-checked atomic replace on
|
|
92
|
+
// openclaw.json; if the daemon's file-watcher writes its own snapshot
|
|
93
|
+
// back mid-flight the cli set either fails with
|
|
94
|
+
// ConfigMutationConflictError or silently overwrites cli-written
|
|
95
|
+
// fields with a stale view (e.g. dingtalk.clientSecret disappears
|
|
96
|
+
// after a successful-looking deploy). Stop the daemon for the entire
|
|
97
|
+
// configure() window.
|
|
97
98
|
await stopDaemonForExclusiveAccess('openclaw provider config');
|
|
98
99
|
info('Configuring openclaw models & providers...');
|
|
99
|
-
|
|
100
|
-
if (existsSync(OPENCLAW_CONFIG)) {
|
|
101
|
-
try {
|
|
102
|
-
openclawConfig = JSON.parse(readFileSync(OPENCLAW_CONFIG, 'utf8'));
|
|
103
|
-
}
|
|
104
|
-
catch {
|
|
105
|
-
warn('Failed to parse existing openclaw.json, starting fresh for models section.');
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
// Ensure models.providers exists
|
|
109
|
-
if (!openclawConfig.models || typeof openclawConfig.models !== 'object') {
|
|
110
|
-
openclawConfig.models = { mode: 'merge', providers: {} };
|
|
111
|
-
}
|
|
112
|
-
const models = openclawConfig.models;
|
|
113
|
-
if (!models.providers || typeof models.providers !== 'object') {
|
|
114
|
-
models.providers = {};
|
|
115
|
-
}
|
|
116
|
-
const existingProviders = models.providers;
|
|
117
|
-
// Merge providers and find default model
|
|
100
|
+
// Default model = first provider's first model id
|
|
118
101
|
let defaultModel = '';
|
|
119
102
|
for (const [providerName, providerConfig] of Object.entries(config)) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
if (
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
if (modelList?.[0]?.id) {
|
|
126
|
-
defaultModel = `${providerName}/${modelList[0].id}`;
|
|
127
|
-
}
|
|
103
|
+
const pc = providerConfig;
|
|
104
|
+
const modelList = pc.models;
|
|
105
|
+
if (modelList?.[0]?.id) {
|
|
106
|
+
defaultModel = `${providerName}/${modelList[0].id}`;
|
|
107
|
+
break;
|
|
128
108
|
}
|
|
129
109
|
}
|
|
130
|
-
//
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
110
|
+
// Full replace via `openclaw config set ... --replace`. --strict-json
|
|
111
|
+
// forces JSON parsing (no raw-string fallback). Single quotes are
|
|
112
|
+
// escaped using the standard '\'' pattern so an apiKey containing a
|
|
113
|
+
// single quote doesn't break out of the shell argument.
|
|
114
|
+
const providersJson = JSON.stringify(config).replace(/'/g, `'\\''`);
|
|
115
|
+
await shell(`openclaw config set models.providers '${providersJson}' --strict-json --replace`);
|
|
116
|
+
info(`Replaced models.providers with: ${Object.keys(config).join(', ')}`);
|
|
135
117
|
if (defaultModel) {
|
|
136
|
-
|
|
137
|
-
await shell(`openclaw config set agents.defaults.model.primary '${defaultModel}'`).catch(() => {
|
|
138
|
-
warn('Failed to set default model via CLI, patching directly...');
|
|
139
|
-
const agents = (openclawConfig.agents ?? {});
|
|
140
|
-
const defaults = (agents.defaults ?? {});
|
|
141
|
-
defaults.model = { primary: defaultModel };
|
|
142
|
-
agents.defaults = defaults;
|
|
143
|
-
openclawConfig.agents = agents;
|
|
144
|
-
writeFileSync(OPENCLAW_CONFIG, JSON.stringify(openclawConfig, null, 2) + '\n', 'utf8');
|
|
145
|
-
});
|
|
118
|
+
await shell(`openclaw config set agents.defaults.model.primary '${defaultModel}'`);
|
|
146
119
|
info(`Default model: ${defaultModel}`);
|
|
147
120
|
}
|
|
148
121
|
info('openclaw configured.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/installers/openclaw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"openclaw.js","sourceRoot":"","sources":["../../src/installers/openclaw.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED