@openclawbrain/openclaw 0.2.3 → 0.3.1
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 +2 -1
- package/dist/extension/index.d.ts +1 -0
- package/dist/extension/index.js +81 -0
- package/dist/extension/index.js.map +1 -0
- package/dist/extension/runtime-guard.d.ts +61 -0
- package/dist/extension/runtime-guard.js +230 -0
- package/dist/extension/runtime-guard.js.map +1 -0
- package/dist/src/cli.d.ts +19 -9
- package/dist/src/cli.js +1464 -380
- package/dist/src/cli.js.map +1 -1
- package/dist/src/daemon.d.ts +7 -4
- package/dist/src/daemon.js +275 -47
- package/dist/src/daemon.js.map +1 -1
- package/dist/src/index.d.ts +150 -2
- package/dist/src/index.js +769 -139
- package/dist/src/index.js.map +1 -1
- package/dist/src/learning-spine.d.ts +2 -1
- package/dist/src/learning-spine.js +8 -0
- package/dist/src/learning-spine.js.map +1 -1
- package/dist/src/ollama-client.d.ts +46 -0
- package/dist/src/ollama-client.js +231 -0
- package/dist/src/ollama-client.js.map +1 -0
- package/dist/src/openclaw-home-layout.d.ts +17 -0
- package/dist/src/openclaw-home-layout.js +182 -0
- package/dist/src/openclaw-home-layout.js.map +1 -0
- package/dist/src/provider-config.d.ts +64 -0
- package/dist/src/provider-config.js +306 -0
- package/dist/src/provider-config.js.map +1 -0
- package/dist/src/resolve-activation-root.d.ts +5 -5
- package/dist/src/resolve-activation-root.js +76 -34
- package/dist/src/resolve-activation-root.js.map +1 -1
- package/dist/src/session-store.js +16 -5
- package/dist/src/session-store.js.map +1 -1
- package/dist/src/session-tail.js +14 -2
- package/dist/src/session-tail.js.map +1 -1
- package/dist/src/shadow-extension-proof.d.ts +40 -0
- package/dist/src/shadow-extension-proof.js +214 -0
- package/dist/src/shadow-extension-proof.js.map +1 -0
- package/dist/src/teacher-labeler.d.ts +50 -0
- package/dist/src/teacher-labeler.js +424 -0
- package/dist/src/teacher-labeler.js.map +1 -0
- package/extension/index.ts +22 -1
- package/extension/runtime-guard.ts +17 -2
- package/package.json +8 -7
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
declare const OPENCLAWBRAIN_PROVIDER_DEFAULTS_CONTRACT = "openclawbrain_provider_defaults.v1";
|
|
2
|
+
declare const ALLOWED_TEACHER_PROVIDERS: readonly ["heuristic", "ollama", "off"];
|
|
3
|
+
declare const ALLOWED_EMBEDDER_PROVIDERS: readonly ["keywords", "ollama", "off"];
|
|
4
|
+
export type OpenClawBrainProviderConfigEnv = Readonly<Record<string, string | undefined>>;
|
|
5
|
+
export type OpenClawBrainTeacherProvider = (typeof ALLOWED_TEACHER_PROVIDERS)[number];
|
|
6
|
+
export type OpenClawBrainEmbedderProvider = (typeof ALLOWED_EMBEDDER_PROVIDERS)[number];
|
|
7
|
+
export type OpenClawBrainProviderResolvedNote = string;
|
|
8
|
+
export interface OpenClawBrainProviderDefaultsRecord {
|
|
9
|
+
contract: typeof OPENCLAWBRAIN_PROVIDER_DEFAULTS_CONTRACT;
|
|
10
|
+
writtenAt: string;
|
|
11
|
+
source: "install";
|
|
12
|
+
teacherBaseUrl?: string;
|
|
13
|
+
embedderBaseUrl?: string;
|
|
14
|
+
teacher?: {
|
|
15
|
+
provider?: OpenClawBrainTeacherProvider;
|
|
16
|
+
model?: string | null;
|
|
17
|
+
timeoutMs?: number;
|
|
18
|
+
maxPromptChars?: number;
|
|
19
|
+
maxResponseChars?: number;
|
|
20
|
+
maxOutputTokens?: number;
|
|
21
|
+
maxArtifactsPerExport?: number;
|
|
22
|
+
maxInteractionsPerExport?: number;
|
|
23
|
+
detectedLocally?: boolean;
|
|
24
|
+
detectedFromModel?: string | null;
|
|
25
|
+
};
|
|
26
|
+
embedder?: {
|
|
27
|
+
provider?: OpenClawBrainEmbedderProvider;
|
|
28
|
+
model?: string | null;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export interface OpenClawBrainProviderDefaultsReadResult {
|
|
32
|
+
defaults: OpenClawBrainProviderDefaultsRecord | null;
|
|
33
|
+
warnings: string[];
|
|
34
|
+
}
|
|
35
|
+
export interface ReadOpenClawBrainProviderConfigInput {
|
|
36
|
+
env?: OpenClawBrainProviderConfigEnv;
|
|
37
|
+
activationRoot?: string | null;
|
|
38
|
+
defaults?: OpenClawBrainProviderDefaultsRecord | null;
|
|
39
|
+
}
|
|
40
|
+
export interface OpenClawBrainProviderSelection<TProvider extends string> {
|
|
41
|
+
provider: TProvider;
|
|
42
|
+
model: string;
|
|
43
|
+
}
|
|
44
|
+
export interface OpenClawBrainTeacherConfig extends OpenClawBrainProviderSelection<OpenClawBrainTeacherProvider> {
|
|
45
|
+
timeoutMs?: number;
|
|
46
|
+
maxPromptChars?: number;
|
|
47
|
+
maxResponseChars?: number;
|
|
48
|
+
maxOutputTokens?: number;
|
|
49
|
+
maxArtifactsPerExport?: number;
|
|
50
|
+
maxInteractionsPerExport?: number;
|
|
51
|
+
}
|
|
52
|
+
export interface OpenClawBrainProviderConfig {
|
|
53
|
+
teacherBaseUrl: string;
|
|
54
|
+
embedderBaseUrl: string;
|
|
55
|
+
teacher: OpenClawBrainTeacherConfig;
|
|
56
|
+
embedder: OpenClawBrainProviderSelection<OpenClawBrainEmbedderProvider>;
|
|
57
|
+
warnings: string[];
|
|
58
|
+
}
|
|
59
|
+
export declare function resolveOpenClawBrainProviderDefaultsPath(activationRoot: string): string;
|
|
60
|
+
export declare function readOpenClawBrainProviderDefaults(activationRoot: string): OpenClawBrainProviderDefaultsReadResult;
|
|
61
|
+
export declare function resolveOpenClawBrainProviderConfigNotes(config: OpenClawBrainProviderConfig): OpenClawBrainProviderResolvedNote[];
|
|
62
|
+
export declare function readOpenClawBrainProviderConfig(env?: OpenClawBrainProviderConfigEnv): OpenClawBrainProviderConfig;
|
|
63
|
+
export declare function readOpenClawBrainProviderConfigFromSources(input?: ReadOpenClawBrainProviderConfigInput): OpenClawBrainProviderConfig;
|
|
64
|
+
export {};
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import process from "node:process";
|
|
4
|
+
const OPENCLAWBRAIN_TEACHER_BASE_URL_ENV = "OPENCLAWBRAIN_TEACHER_BASE_URL";
|
|
5
|
+
const OPENCLAWBRAIN_EMBEDDER_BASE_URL_ENV = "OPENCLAWBRAIN_EMBEDDER_BASE_URL";
|
|
6
|
+
const OPENCLAWBRAIN_TEACHER_PROVIDER_ENV = "OPENCLAWBRAIN_TEACHER_PROVIDER";
|
|
7
|
+
const OPENCLAWBRAIN_TEACHER_MODEL_ENV = "OPENCLAWBRAIN_TEACHER_MODEL";
|
|
8
|
+
const OPENCLAWBRAIN_TEACHER_TIMEOUT_MS_ENV = "OPENCLAWBRAIN_TEACHER_TIMEOUT_MS";
|
|
9
|
+
const OPENCLAWBRAIN_TEACHER_MAX_PROMPT_CHARS_ENV = "OPENCLAWBRAIN_TEACHER_MAX_PROMPT_CHARS";
|
|
10
|
+
const OPENCLAWBRAIN_TEACHER_MAX_RESPONSE_CHARS_ENV = "OPENCLAWBRAIN_TEACHER_MAX_RESPONSE_CHARS";
|
|
11
|
+
const OPENCLAWBRAIN_TEACHER_MAX_OUTPUT_TOKENS_ENV = "OPENCLAWBRAIN_TEACHER_MAX_OUTPUT_TOKENS";
|
|
12
|
+
const OPENCLAWBRAIN_TEACHER_MAX_ARTIFACTS_ENV = "OPENCLAWBRAIN_TEACHER_MAX_ARTIFACTS";
|
|
13
|
+
const OPENCLAWBRAIN_TEACHER_MAX_INTERACTIONS_ENV = "OPENCLAWBRAIN_TEACHER_MAX_INTERACTIONS";
|
|
14
|
+
const OPENCLAWBRAIN_EMBEDDER_PROVIDER_ENV = "OPENCLAWBRAIN_EMBEDDER_PROVIDER";
|
|
15
|
+
const OPENCLAWBRAIN_EMBEDDER_MODEL_ENV = "OPENCLAWBRAIN_EMBEDDER_MODEL";
|
|
16
|
+
const DEFAULT_BASE_URL = "http://127.0.0.1:11434";
|
|
17
|
+
const DEFAULT_TEACHER_PROVIDER = "heuristic";
|
|
18
|
+
const DEFAULT_TEACHER_MODEL = "qwen3.5:9b";
|
|
19
|
+
const DEFAULT_EMBEDDER_PROVIDER = "ollama";
|
|
20
|
+
const DEFAULT_EMBEDDER_MODEL = "bge-large";
|
|
21
|
+
const OPENCLAWBRAIN_PROVIDER_DEFAULTS_CONTRACT = "openclawbrain_provider_defaults.v1";
|
|
22
|
+
const OPENCLAWBRAIN_PROVIDER_DEFAULTS_FILE = "provider-defaults.json";
|
|
23
|
+
const ALLOWED_TEACHER_PROVIDERS = ["heuristic", "ollama", "off"];
|
|
24
|
+
const ALLOWED_EMBEDDER_PROVIDERS = ["keywords", "ollama", "off"];
|
|
25
|
+
export function resolveOpenClawBrainProviderDefaultsPath(activationRoot) {
|
|
26
|
+
return path.resolve(activationRoot, OPENCLAWBRAIN_PROVIDER_DEFAULTS_FILE);
|
|
27
|
+
}
|
|
28
|
+
export function readOpenClawBrainProviderDefaults(activationRoot) {
|
|
29
|
+
const warnings = [];
|
|
30
|
+
const defaultsPath = resolveOpenClawBrainProviderDefaultsPath(activationRoot);
|
|
31
|
+
if (!existsSync(defaultsPath)) {
|
|
32
|
+
return {
|
|
33
|
+
defaults: null,
|
|
34
|
+
warnings
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
let parsed;
|
|
38
|
+
try {
|
|
39
|
+
parsed = JSON.parse(readFileSync(defaultsPath, "utf8"));
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
warnings.push(`provider defaults file is unreadable; ignoring ${defaultsPath}: ${describeUnknownError(error)}`);
|
|
43
|
+
return {
|
|
44
|
+
defaults: null,
|
|
45
|
+
warnings
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
if (!isRecord(parsed) || parsed.contract !== OPENCLAWBRAIN_PROVIDER_DEFAULTS_CONTRACT) {
|
|
49
|
+
warnings.push(`provider defaults file must use contract ${OPENCLAWBRAIN_PROVIDER_DEFAULTS_CONTRACT}; ignoring ${defaultsPath}`);
|
|
50
|
+
return {
|
|
51
|
+
defaults: null,
|
|
52
|
+
warnings
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
defaults: parsed,
|
|
57
|
+
warnings
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export function resolveOpenClawBrainProviderConfigNotes(config) {
|
|
61
|
+
const notes = [
|
|
62
|
+
`teacher_base_url=${config.teacherBaseUrl}`,
|
|
63
|
+
`embedder_base_url=${config.embedderBaseUrl}`,
|
|
64
|
+
`teacher_provider=${config.teacher.provider}`,
|
|
65
|
+
`teacher_model=${config.teacher.model}`,
|
|
66
|
+
`embedder_provider=${config.embedder.provider}`,
|
|
67
|
+
`embedder_model=${config.embedder.model}`
|
|
68
|
+
];
|
|
69
|
+
const optionalTeacherNotes = [
|
|
70
|
+
["teacher_timeout_ms", config.teacher.timeoutMs],
|
|
71
|
+
["teacher_max_prompt_chars", config.teacher.maxPromptChars],
|
|
72
|
+
["teacher_max_response_chars", config.teacher.maxResponseChars],
|
|
73
|
+
["teacher_max_output_tokens", config.teacher.maxOutputTokens],
|
|
74
|
+
["teacher_max_artifacts", config.teacher.maxArtifactsPerExport],
|
|
75
|
+
["teacher_max_interactions", config.teacher.maxInteractionsPerExport]
|
|
76
|
+
];
|
|
77
|
+
for (const [name, value] of optionalTeacherNotes) {
|
|
78
|
+
if (value !== undefined) {
|
|
79
|
+
notes.push(`${name}=${value}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return notes;
|
|
83
|
+
}
|
|
84
|
+
export function readOpenClawBrainProviderConfig(env = process.env) {
|
|
85
|
+
return readOpenClawBrainProviderConfigFromSources({ env });
|
|
86
|
+
}
|
|
87
|
+
export function readOpenClawBrainProviderConfigFromSources(input = {}) {
|
|
88
|
+
const env = input.env ?? process.env;
|
|
89
|
+
const warnings = [];
|
|
90
|
+
const defaultsResult = input.defaults !== undefined
|
|
91
|
+
? { defaults: input.defaults, warnings: [] }
|
|
92
|
+
: input.activationRoot === undefined || input.activationRoot === null
|
|
93
|
+
? { defaults: null, warnings: [] }
|
|
94
|
+
: readOpenClawBrainProviderDefaults(input.activationRoot);
|
|
95
|
+
warnings.push(...defaultsResult.warnings);
|
|
96
|
+
const resolvedDefaults = resolveProviderDefaults(defaultsResult.defaults, warnings);
|
|
97
|
+
return {
|
|
98
|
+
teacherBaseUrl: readBaseUrlEnv(env, OPENCLAWBRAIN_TEACHER_BASE_URL_ENV, resolvedDefaults.teacherBaseUrl, warnings),
|
|
99
|
+
embedderBaseUrl: readBaseUrlEnv(env, OPENCLAWBRAIN_EMBEDDER_BASE_URL_ENV, resolvedDefaults.embedderBaseUrl, warnings),
|
|
100
|
+
teacher: {
|
|
101
|
+
provider: readProviderEnv(env, OPENCLAWBRAIN_TEACHER_PROVIDER_ENV, ALLOWED_TEACHER_PROVIDERS, resolvedDefaults.teacherProvider, warnings),
|
|
102
|
+
model: readModelEnv(env, OPENCLAWBRAIN_TEACHER_MODEL_ENV, resolvedDefaults.teacherModel ?? DEFAULT_TEACHER_MODEL, warnings),
|
|
103
|
+
...readTeacherBudgetEnv(env, warnings, resolvedDefaults)
|
|
104
|
+
},
|
|
105
|
+
embedder: {
|
|
106
|
+
provider: readProviderEnv(env, OPENCLAWBRAIN_EMBEDDER_PROVIDER_ENV, ALLOWED_EMBEDDER_PROVIDERS, resolvedDefaults.embedderProvider, warnings),
|
|
107
|
+
model: readModelEnv(env, OPENCLAWBRAIN_EMBEDDER_MODEL_ENV, resolvedDefaults.embedderModel ?? DEFAULT_EMBEDDER_MODEL, warnings)
|
|
108
|
+
},
|
|
109
|
+
warnings
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
function readBaseUrlEnv(env, name, fallback, warnings) {
|
|
113
|
+
const raw = env[name];
|
|
114
|
+
if (raw === undefined) {
|
|
115
|
+
return fallback;
|
|
116
|
+
}
|
|
117
|
+
const value = normalizeOptionalEnvString(raw);
|
|
118
|
+
if (value === undefined) {
|
|
119
|
+
warnings.push(`${name} must be a valid http(s) URL when set; using default ${fallback}`);
|
|
120
|
+
return fallback;
|
|
121
|
+
}
|
|
122
|
+
let parsed;
|
|
123
|
+
try {
|
|
124
|
+
parsed = new URL(value);
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
warnings.push(`${name} must be a valid http(s) URL when set; using default ${fallback}`);
|
|
128
|
+
return fallback;
|
|
129
|
+
}
|
|
130
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
131
|
+
warnings.push(`${name} must use http or https when set; using default ${fallback}`);
|
|
132
|
+
return fallback;
|
|
133
|
+
}
|
|
134
|
+
return parsed.toString().replace(/\/+$/, "");
|
|
135
|
+
}
|
|
136
|
+
function readProviderEnv(env, name, allowedValues, fallback, warnings) {
|
|
137
|
+
const raw = env[name];
|
|
138
|
+
if (raw === undefined) {
|
|
139
|
+
return fallback;
|
|
140
|
+
}
|
|
141
|
+
const value = normalizeOptionalEnvString(raw);
|
|
142
|
+
if (value === undefined) {
|
|
143
|
+
warnings.push(`${name} must be one of ${allowedValues.join("|")}; using default ${fallback}`);
|
|
144
|
+
return fallback;
|
|
145
|
+
}
|
|
146
|
+
if (allowedValues.includes(value)) {
|
|
147
|
+
return value;
|
|
148
|
+
}
|
|
149
|
+
warnings.push(`${name} must be one of ${allowedValues.join("|")}; using default ${fallback}`);
|
|
150
|
+
return fallback;
|
|
151
|
+
}
|
|
152
|
+
function readModelEnv(env, name, fallback, warnings) {
|
|
153
|
+
const raw = env[name];
|
|
154
|
+
if (raw === undefined) {
|
|
155
|
+
return fallback;
|
|
156
|
+
}
|
|
157
|
+
const value = normalizeOptionalEnvString(raw);
|
|
158
|
+
if (value !== undefined) {
|
|
159
|
+
return value;
|
|
160
|
+
}
|
|
161
|
+
warnings.push(`${name} must be a non-empty string when set; using default ${fallback}`);
|
|
162
|
+
return fallback;
|
|
163
|
+
}
|
|
164
|
+
function readTeacherBudgetEnv(env, warnings, defaults) {
|
|
165
|
+
return {
|
|
166
|
+
...readOptionalPositiveIntegerEnv(env, OPENCLAWBRAIN_TEACHER_TIMEOUT_MS_ENV, "timeoutMs", warnings, defaults.teacherTimeoutMs),
|
|
167
|
+
...readOptionalPositiveIntegerEnv(env, OPENCLAWBRAIN_TEACHER_MAX_PROMPT_CHARS_ENV, "maxPromptChars", warnings, defaults.teacherMaxPromptChars),
|
|
168
|
+
...readOptionalPositiveIntegerEnv(env, OPENCLAWBRAIN_TEACHER_MAX_RESPONSE_CHARS_ENV, "maxResponseChars", warnings, defaults.teacherMaxResponseChars),
|
|
169
|
+
...readOptionalPositiveIntegerEnv(env, OPENCLAWBRAIN_TEACHER_MAX_OUTPUT_TOKENS_ENV, "maxOutputTokens", warnings, defaults.teacherMaxOutputTokens),
|
|
170
|
+
...readOptionalPositiveIntegerEnv(env, OPENCLAWBRAIN_TEACHER_MAX_ARTIFACTS_ENV, "maxArtifactsPerExport", warnings, defaults.teacherMaxArtifactsPerExport),
|
|
171
|
+
...readOptionalPositiveIntegerEnv(env, OPENCLAWBRAIN_TEACHER_MAX_INTERACTIONS_ENV, "maxInteractionsPerExport", warnings, defaults.teacherMaxInteractionsPerExport)
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
function readOptionalPositiveIntegerEnv(env, name, propertyName, warnings, fallback) {
|
|
175
|
+
const raw = env[name];
|
|
176
|
+
if (raw === undefined) {
|
|
177
|
+
if (fallback === undefined) {
|
|
178
|
+
return {};
|
|
179
|
+
}
|
|
180
|
+
return {
|
|
181
|
+
[propertyName]: fallback
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
const value = normalizeOptionalEnvString(raw);
|
|
185
|
+
if (value === undefined || /^[0-9]+$/u.test(value) === false) {
|
|
186
|
+
warnings.push(`${name} must be a positive integer when set; leaving it unset`);
|
|
187
|
+
return {};
|
|
188
|
+
}
|
|
189
|
+
const parsed = Number.parseInt(value, 10);
|
|
190
|
+
if (!Number.isInteger(parsed) || parsed <= 0) {
|
|
191
|
+
warnings.push(`${name} must be a positive integer when set; leaving it unset`);
|
|
192
|
+
return {};
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
[propertyName]: parsed
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
function normalizeOptionalEnvString(value) {
|
|
199
|
+
const normalized = value?.trim();
|
|
200
|
+
if (normalized === undefined || normalized.length === 0) {
|
|
201
|
+
return undefined;
|
|
202
|
+
}
|
|
203
|
+
return normalized;
|
|
204
|
+
}
|
|
205
|
+
function resolveProviderDefaults(defaults, warnings) {
|
|
206
|
+
if (defaults === null) {
|
|
207
|
+
return {
|
|
208
|
+
teacherBaseUrl: DEFAULT_BASE_URL,
|
|
209
|
+
embedderBaseUrl: DEFAULT_BASE_URL,
|
|
210
|
+
teacherProvider: DEFAULT_TEACHER_PROVIDER,
|
|
211
|
+
teacherModel: null,
|
|
212
|
+
teacherTimeoutMs: undefined,
|
|
213
|
+
teacherMaxPromptChars: undefined,
|
|
214
|
+
teacherMaxResponseChars: undefined,
|
|
215
|
+
teacherMaxOutputTokens: undefined,
|
|
216
|
+
teacherMaxArtifactsPerExport: undefined,
|
|
217
|
+
teacherMaxInteractionsPerExport: undefined,
|
|
218
|
+
embedderProvider: DEFAULT_EMBEDDER_PROVIDER,
|
|
219
|
+
embedderModel: DEFAULT_EMBEDDER_MODEL
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
const teacherDefaults = isRecord(defaults.teacher) ? defaults.teacher : null;
|
|
223
|
+
const embedderDefaults = isRecord(defaults.embedder) ? defaults.embedder : null;
|
|
224
|
+
const teacherProvider = readDefaultProvider(teacherDefaults?.provider, "teacher.provider", ALLOWED_TEACHER_PROVIDERS, DEFAULT_TEACHER_PROVIDER, warnings);
|
|
225
|
+
const embedderProvider = readDefaultProvider(embedderDefaults?.provider, "embedder.provider", ALLOWED_EMBEDDER_PROVIDERS, DEFAULT_EMBEDDER_PROVIDER, warnings);
|
|
226
|
+
return {
|
|
227
|
+
teacherBaseUrl: readDefaultBaseUrl(defaults.teacherBaseUrl, "teacherBaseUrl", warnings),
|
|
228
|
+
embedderBaseUrl: readDefaultBaseUrl(defaults.embedderBaseUrl, "embedderBaseUrl", warnings),
|
|
229
|
+
teacherProvider,
|
|
230
|
+
teacherModel: teacherProvider === "ollama"
|
|
231
|
+
? readDefaultModel(teacherDefaults?.model, "teacher.model", warnings)
|
|
232
|
+
: null,
|
|
233
|
+
teacherTimeoutMs: readDefaultPositiveInteger(teacherDefaults?.timeoutMs, "teacher.timeoutMs", warnings),
|
|
234
|
+
teacherMaxPromptChars: readDefaultPositiveInteger(teacherDefaults?.maxPromptChars, "teacher.maxPromptChars", warnings),
|
|
235
|
+
teacherMaxResponseChars: readDefaultPositiveInteger(teacherDefaults?.maxResponseChars, "teacher.maxResponseChars", warnings),
|
|
236
|
+
teacherMaxOutputTokens: readDefaultPositiveInteger(teacherDefaults?.maxOutputTokens, "teacher.maxOutputTokens", warnings),
|
|
237
|
+
teacherMaxArtifactsPerExport: readDefaultPositiveInteger(teacherDefaults?.maxArtifactsPerExport, "teacher.maxArtifactsPerExport", warnings),
|
|
238
|
+
teacherMaxInteractionsPerExport: readDefaultPositiveInteger(teacherDefaults?.maxInteractionsPerExport, "teacher.maxInteractionsPerExport", warnings),
|
|
239
|
+
embedderProvider,
|
|
240
|
+
embedderModel: embedderProvider === "off"
|
|
241
|
+
? null
|
|
242
|
+
: readDefaultModel(embedderDefaults?.model, "embedder.model", warnings) ?? DEFAULT_EMBEDDER_MODEL
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
function readDefaultBaseUrl(value, fieldName, warnings) {
|
|
246
|
+
if (typeof value !== "string") {
|
|
247
|
+
return DEFAULT_BASE_URL;
|
|
248
|
+
}
|
|
249
|
+
const normalized = normalizeOptionalEnvString(value);
|
|
250
|
+
if (normalized === undefined) {
|
|
251
|
+
warnings.push(`provider defaults ${fieldName} must be a valid http(s) URL; using ${DEFAULT_BASE_URL}`);
|
|
252
|
+
return DEFAULT_BASE_URL;
|
|
253
|
+
}
|
|
254
|
+
let parsed;
|
|
255
|
+
try {
|
|
256
|
+
parsed = new URL(normalized);
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
warnings.push(`provider defaults ${fieldName} must be a valid http(s) URL; using ${DEFAULT_BASE_URL}`);
|
|
260
|
+
return DEFAULT_BASE_URL;
|
|
261
|
+
}
|
|
262
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") {
|
|
263
|
+
warnings.push(`provider defaults ${fieldName} must use http or https; using ${DEFAULT_BASE_URL}`);
|
|
264
|
+
return DEFAULT_BASE_URL;
|
|
265
|
+
}
|
|
266
|
+
return parsed.toString().replace(/\/+$/, "");
|
|
267
|
+
}
|
|
268
|
+
function readDefaultProvider(value, fieldName, allowedValues, fallback, warnings) {
|
|
269
|
+
if (typeof value === "string" && allowedValues.includes(value)) {
|
|
270
|
+
return value;
|
|
271
|
+
}
|
|
272
|
+
if (value !== undefined) {
|
|
273
|
+
warnings.push(`provider defaults ${fieldName} must be one of ${allowedValues.join("|")}; using ${fallback}`);
|
|
274
|
+
}
|
|
275
|
+
return fallback;
|
|
276
|
+
}
|
|
277
|
+
function readDefaultModel(value, fieldName, warnings) {
|
|
278
|
+
if (value === null || value === undefined) {
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
if (typeof value === "string") {
|
|
282
|
+
const normalized = normalizeOptionalEnvString(value);
|
|
283
|
+
if (normalized !== undefined) {
|
|
284
|
+
return normalized;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
warnings.push(`provider defaults ${fieldName} must be a non-empty string when set; leaving it unset`);
|
|
288
|
+
return null;
|
|
289
|
+
}
|
|
290
|
+
function readDefaultPositiveInteger(value, fieldName, warnings) {
|
|
291
|
+
if (value === undefined || value === null) {
|
|
292
|
+
return undefined;
|
|
293
|
+
}
|
|
294
|
+
if (typeof value === "number" && Number.isInteger(value) && value > 0) {
|
|
295
|
+
return value;
|
|
296
|
+
}
|
|
297
|
+
warnings.push(`provider defaults ${fieldName} must be a positive integer when set; leaving it unset`);
|
|
298
|
+
return undefined;
|
|
299
|
+
}
|
|
300
|
+
function isRecord(value) {
|
|
301
|
+
return typeof value === "object" && value !== null;
|
|
302
|
+
}
|
|
303
|
+
function describeUnknownError(error) {
|
|
304
|
+
return error instanceof Error ? error.message : String(error);
|
|
305
|
+
}
|
|
306
|
+
//# sourceMappingURL=provider-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-config.js","sourceRoot":"","sources":["../../src/provider-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Resolution order:
|
|
5
5
|
* 1. Explicit `--activation-root <path>` (passed as `explicit` arg)
|
|
6
|
-
* 2. A selected OpenClaw
|
|
7
|
-
* 3.
|
|
8
|
-
* 4.
|
|
6
|
+
* 2. A selected OpenClaw home (`openclawHome` option or OPENCLAW_HOME env)
|
|
7
|
+
* 3. Unpinned host auto-detect from ~/.openclawbrain/activation and installed hooks
|
|
8
|
+
* 4. Refuse clearly if host-local signals disagree or are unresolved
|
|
9
9
|
* 5. Fail with a clear error message
|
|
10
10
|
*
|
|
11
11
|
* Exported for use by CLI commands and other agents' code.
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
export interface ResolveActivationRootOptions {
|
|
14
14
|
/** Value from --activation-root flag, if provided. null/undefined/"" means not provided. */
|
|
15
15
|
explicit?: string | null;
|
|
16
|
-
/** Specific OpenClaw
|
|
16
|
+
/** Specific OpenClaw home to inspect for the installed extension. */
|
|
17
17
|
openclawHome?: string | null;
|
|
18
|
-
/** If true, return
|
|
18
|
+
/** If true, return "" instead of throwing when nothing is found or auto-detect is ambiguous. */
|
|
19
19
|
quiet?: boolean;
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
@@ -3,15 +3,16 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Resolution order:
|
|
5
5
|
* 1. Explicit `--activation-root <path>` (passed as `explicit` arg)
|
|
6
|
-
* 2. A selected OpenClaw
|
|
7
|
-
* 3.
|
|
8
|
-
* 4.
|
|
6
|
+
* 2. A selected OpenClaw home (`openclawHome` option or OPENCLAW_HOME env)
|
|
7
|
+
* 3. Unpinned host auto-detect from ~/.openclawbrain/activation and installed hooks
|
|
8
|
+
* 4. Refuse clearly if host-local signals disagree or are unresolved
|
|
9
9
|
* 5. Fail with a clear error message
|
|
10
10
|
*
|
|
11
11
|
* Exported for use by CLI commands and other agents' code.
|
|
12
12
|
*/
|
|
13
|
-
import { existsSync,
|
|
13
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
14
14
|
import path from "node:path";
|
|
15
|
+
import { describeOpenClawHomeInspection, discoverOpenClawHomes, formatOpenClawHomeLayout, inspectOpenClawHome } from "./openclaw-home-layout.js";
|
|
15
16
|
function getHomeDir() {
|
|
16
17
|
return process.env.HOME ?? process.env.USERPROFILE ?? "~";
|
|
17
18
|
}
|
|
@@ -22,9 +23,12 @@ function normalizeOptionalString(value) {
|
|
|
22
23
|
const trimmed = value.trim();
|
|
23
24
|
return trimmed.length > 0 ? trimmed : null;
|
|
24
25
|
}
|
|
25
|
-
function
|
|
26
|
+
function buildInstallGuidance() {
|
|
26
27
|
return "Run: openclawbrain install --openclaw-home <path>";
|
|
27
28
|
}
|
|
29
|
+
function buildProfilePinningGuidance() {
|
|
30
|
+
return "Pass --activation-root <path> to pin the brain directly, or --openclaw-home <path> (or OPENCLAW_HOME) to select one installed OpenClaw home.";
|
|
31
|
+
}
|
|
28
32
|
function extractActivationRootFromExtension(filePath) {
|
|
29
33
|
try {
|
|
30
34
|
const content = readFileSync(filePath, "utf8");
|
|
@@ -41,7 +45,7 @@ function extractActivationRootFromExtension(filePath) {
|
|
|
41
45
|
candidate === "__ACTIVATION_" + "ROOT__") {
|
|
42
46
|
return {
|
|
43
47
|
activationRoot: null,
|
|
44
|
-
diagnostic: `installed extension ${filePath} still contains the ACTIVATION_ROOT
|
|
48
|
+
diagnostic: `installed extension ${filePath} still contains the ACTIVATION_ROOT placeholder`
|
|
45
49
|
};
|
|
46
50
|
}
|
|
47
51
|
const resolvedCandidate = path.resolve(candidate);
|
|
@@ -71,29 +75,49 @@ function readActivationRootFromOpenClawHome(openclawHome) {
|
|
|
71
75
|
return extractActivationRootFromExtension(extensionIndex);
|
|
72
76
|
}
|
|
73
77
|
/**
|
|
74
|
-
* Scan ~/.openclaw
|
|
75
|
-
*
|
|
78
|
+
* Scan discoverable ~/.openclaw* directories for installed hooks and record
|
|
79
|
+
* either the pinned activation root or the reason the hook is unresolved.
|
|
76
80
|
*/
|
|
77
|
-
function
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
function scanInstalledProfileActivationRoots() {
|
|
82
|
+
const probes = [];
|
|
83
|
+
for (const inspection of discoverOpenClawHomes(path.resolve(getHomeDir()))) {
|
|
84
|
+
const openclawHome = inspection.openclawHome;
|
|
85
|
+
const extensionIndex = path.join(openclawHome, "extensions", "openclawbrain", "index.ts");
|
|
86
|
+
if (!existsSync(extensionIndex)) {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
const found = extractActivationRootFromExtension(extensionIndex);
|
|
90
|
+
probes.push({
|
|
91
|
+
openclawHome,
|
|
92
|
+
extensionIndex,
|
|
93
|
+
activationRoot: found.activationRoot,
|
|
94
|
+
diagnostic: found.diagnostic,
|
|
95
|
+
inspection
|
|
96
|
+
});
|
|
82
97
|
}
|
|
83
|
-
|
|
84
|
-
|
|
98
|
+
return probes.sort((left, right) => left.openclawHome.localeCompare(right.openclawHome));
|
|
99
|
+
}
|
|
100
|
+
function buildUnpinnedResolutionRefusal(input) {
|
|
101
|
+
const details = [];
|
|
102
|
+
const { defaultActivationRoot, installedProfileProbes } = input;
|
|
103
|
+
if (defaultActivationRoot !== null) {
|
|
104
|
+
details.push(` - default HOME root -> ${defaultActivationRoot}`);
|
|
85
105
|
}
|
|
86
|
-
for (const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
if (!existsSync(extensionIndex))
|
|
106
|
+
for (const probe of installedProfileProbes) {
|
|
107
|
+
const inspectionSummary = describeOpenClawHomeInspection(probe.inspection);
|
|
108
|
+
if (probe.activationRoot !== null) {
|
|
109
|
+
details.push(` - ${probe.openclawHome} [${inspectionSummary}] -> ${probe.activationRoot}`);
|
|
91
110
|
continue;
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
return found.activationRoot;
|
|
111
|
+
}
|
|
112
|
+
details.push(` - ${probe.openclawHome} [${inspectionSummary}] -> unresolved: ${probe.diagnostic ?? `installed extension ${probe.extensionIndex} is unresolved`}`);
|
|
95
113
|
}
|
|
96
|
-
return
|
|
114
|
+
return [
|
|
115
|
+
"Refusing to auto-select an activation root from unpinned host state.",
|
|
116
|
+
"Detected targets:",
|
|
117
|
+
...details,
|
|
118
|
+
buildProfilePinningGuidance(),
|
|
119
|
+
buildInstallGuidance()
|
|
120
|
+
].join("\n");
|
|
97
121
|
}
|
|
98
122
|
/**
|
|
99
123
|
* Resolve the activation root path through the detection chain.
|
|
@@ -108,8 +132,9 @@ export function resolveActivationRoot(options = {}) {
|
|
|
108
132
|
return path.resolve(explicit);
|
|
109
133
|
}
|
|
110
134
|
const selectedOpenClawHome = normalizeOptionalString(openclawHome) ?? normalizeOptionalString(process.env.OPENCLAW_HOME);
|
|
111
|
-
// 2. A selected OpenClaw
|
|
135
|
+
// 2. A selected OpenClaw home is authoritative on many-profile hosts.
|
|
112
136
|
if (selectedOpenClawHome !== null) {
|
|
137
|
+
const selectedInspection = inspectOpenClawHome(selectedOpenClawHome);
|
|
113
138
|
const selectedActivationRoot = readActivationRootFromOpenClawHome(selectedOpenClawHome);
|
|
114
139
|
const selectedActivationRootPath = selectedActivationRoot?.activationRoot ?? null;
|
|
115
140
|
if (selectedActivationRootPath !== null) {
|
|
@@ -120,24 +145,41 @@ export function resolveActivationRoot(options = {}) {
|
|
|
120
145
|
}
|
|
121
146
|
const selectedActivationRootDiagnostic = selectedActivationRoot?.diagnostic ?? null;
|
|
122
147
|
if (selectedActivationRootDiagnostic !== null) {
|
|
123
|
-
throw new Error(`OpenClawBrain extension found for OpenClaw
|
|
148
|
+
throw new Error(`OpenClawBrain extension found for OpenClaw home ${path.resolve(selectedOpenClawHome)} (${formatOpenClawHomeLayout(selectedInspection.layout)}), but activation root is unresolved: ${selectedActivationRootDiagnostic}. ${buildInstallGuidance()}`);
|
|
124
149
|
}
|
|
125
|
-
throw new Error(`No brain found for OpenClaw
|
|
150
|
+
throw new Error(`No brain found for OpenClaw home ${path.resolve(selectedOpenClawHome)} (${formatOpenClawHomeLayout(selectedInspection.layout)}). ${buildInstallGuidance()}`);
|
|
126
151
|
}
|
|
127
152
|
// 3. Default location: ~/.openclawbrain/activation
|
|
128
153
|
const defaultPath = path.join(getHomeDir(), ".openclawbrain", "activation");
|
|
129
|
-
|
|
130
|
-
|
|
154
|
+
const resolvedDefaultPath = existsSync(defaultPath) ? path.resolve(defaultPath) : null;
|
|
155
|
+
// 4. Scan installed hooks under HOME
|
|
156
|
+
const installedProfileProbes = scanInstalledProfileActivationRoots();
|
|
157
|
+
const resolvedCandidateRoots = new Set();
|
|
158
|
+
const hasUnresolvedInstalledProfiles = installedProfileProbes.some((probe) => probe.activationRoot === null);
|
|
159
|
+
if (resolvedDefaultPath !== null) {
|
|
160
|
+
resolvedCandidateRoots.add(resolvedDefaultPath);
|
|
161
|
+
}
|
|
162
|
+
for (const probe of installedProfileProbes) {
|
|
163
|
+
if (probe.activationRoot !== null) {
|
|
164
|
+
resolvedCandidateRoots.add(path.resolve(probe.activationRoot));
|
|
165
|
+
}
|
|
131
166
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
167
|
+
if (resolvedCandidateRoots.size === 1 && !hasUnresolvedInstalledProfiles) {
|
|
168
|
+
return [...resolvedCandidateRoots][0];
|
|
169
|
+
}
|
|
170
|
+
if ((resolvedCandidateRoots.size > 1 || hasUnresolvedInstalledProfiles) && installedProfileProbes.length > 0) {
|
|
171
|
+
if (quiet) {
|
|
172
|
+
return "";
|
|
173
|
+
}
|
|
174
|
+
throw new Error(buildUnpinnedResolutionRefusal({
|
|
175
|
+
defaultActivationRoot: resolvedDefaultPath,
|
|
176
|
+
installedProfileProbes
|
|
177
|
+
}));
|
|
136
178
|
}
|
|
137
179
|
// 5. Nothing found
|
|
138
180
|
if (quiet) {
|
|
139
181
|
return "";
|
|
140
182
|
}
|
|
141
|
-
throw new Error(`No brain found. ${
|
|
183
|
+
throw new Error(`No brain found. ${buildInstallGuidance()}`);
|
|
142
184
|
}
|
|
143
185
|
//# sourceMappingURL=resolve-activation-root.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-activation-root.js","sourceRoot":"","sources":["../../src/resolve-activation-root.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"resolve-activation-root.js","sourceRoot":"","sources":["../../src/resolve-activation-root.ts"],"names":[],"mappings":"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"}
|