clawconnect-agent 0.1.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/.env.example +41 -0
- package/README.md +259 -0
- package/README.zh-CN.md +329 -0
- package/dist/commands/backup-manager.d.ts +21 -0
- package/dist/commands/backup-manager.js +346 -0
- package/dist/commands/backup-manager.js.map +1 -0
- package/dist/commands/install.d.ts +6 -0
- package/dist/commands/install.js +107 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/local-handlers.d.ts +2 -0
- package/dist/commands/local-handlers.js +375 -0
- package/dist/commands/local-handlers.js.map +1 -0
- package/dist/commands/local-runtime.d.ts +36 -0
- package/dist/commands/local-runtime.js +445 -0
- package/dist/commands/local-runtime.js.map +1 -0
- package/dist/commands/pair.d.ts +7 -0
- package/dist/commands/pair.js +100 -0
- package/dist/commands/pair.js.map +1 -0
- package/dist/commands/provider-config.d.ts +35 -0
- package/dist/commands/provider-config.js +291 -0
- package/dist/commands/provider-config.js.map +1 -0
- package/dist/commands/provider-handlers.d.ts +2 -0
- package/dist/commands/provider-handlers.js +216 -0
- package/dist/commands/provider-handlers.js.map +1 -0
- package/dist/commands/provider-registry.d.ts +19 -0
- package/dist/commands/provider-registry.js +120 -0
- package/dist/commands/provider-registry.js.map +1 -0
- package/dist/commands/run.d.ts +1 -0
- package/dist/commands/run.js +35 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/send-file-utils.d.ts +6 -0
- package/dist/commands/send-file-utils.js +94 -0
- package/dist/commands/send-file-utils.js.map +1 -0
- package/dist/commands/send-file.d.ts +41 -0
- package/dist/commands/send-file.js +492 -0
- package/dist/commands/send-file.js.map +1 -0
- package/dist/commands/set-token.d.ts +1 -0
- package/dist/commands/set-token.js +43 -0
- package/dist/commands/set-token.js.map +1 -0
- package/dist/commands/status.d.ts +1 -0
- package/dist/commands/status.js +135 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/voice-reply.d.ts +39 -0
- package/dist/commands/voice-reply.js +329 -0
- package/dist/commands/voice-reply.js.map +1 -0
- package/dist/config/config.d.ts +32 -0
- package/dist/config/config.js +103 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/env.d.ts +16 -0
- package/dist/config/env.js +138 -0
- package/dist/config/env.js.map +1 -0
- package/dist/i18n/index.d.ts +1 -0
- package/dist/i18n/index.js +147 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +117 -0
- package/dist/index.js.map +1 -0
- package/dist/platform/service-manager-common.d.ts +26 -0
- package/dist/platform/service-manager-common.js +51 -0
- package/dist/platform/service-manager-common.js.map +1 -0
- package/dist/platform/service-manager-linux.d.ts +6 -0
- package/dist/platform/service-manager-linux.js +229 -0
- package/dist/platform/service-manager-linux.js.map +1 -0
- package/dist/platform/service-manager.d.ts +16 -0
- package/dist/platform/service-manager.js +165 -0
- package/dist/platform/service-manager.js.map +1 -0
- package/dist/relay/attachment-staging.d.ts +12 -0
- package/dist/relay/attachment-staging.js +116 -0
- package/dist/relay/attachment-staging.js.map +1 -0
- package/dist/relay/chat-history.d.ts +29 -0
- package/dist/relay/chat-history.js +69 -0
- package/dist/relay/chat-history.js.map +1 -0
- package/dist/relay/chat-payload.d.ts +6 -0
- package/dist/relay/chat-payload.js +170 -0
- package/dist/relay/chat-payload.js.map +1 -0
- package/dist/relay/chat-send-attachments.d.ts +4 -0
- package/dist/relay/chat-send-attachments.js +47 -0
- package/dist/relay/chat-send-attachments.js.map +1 -0
- package/dist/relay/gateway-client.d.ts +41 -0
- package/dist/relay/gateway-client.js +288 -0
- package/dist/relay/gateway-client.js.map +1 -0
- package/dist/relay/office-payload.d.ts +19 -0
- package/dist/relay/office-payload.js +205 -0
- package/dist/relay/office-payload.js.map +1 -0
- package/dist/relay/reconnect.d.ts +14 -0
- package/dist/relay/reconnect.js +27 -0
- package/dist/relay/reconnect.js.map +1 -0
- package/dist/relay/relay-manager.d.ts +36 -0
- package/dist/relay/relay-manager.js +619 -0
- package/dist/relay/relay-manager.js.map +1 -0
- package/dist/relay/session-context.d.ts +19 -0
- package/dist/relay/session-context.js +323 -0
- package/dist/relay/session-context.js.map +1 -0
- package/dist/relay/slash-command-catalog.d.ts +8 -0
- package/dist/relay/slash-command-catalog.generated.d.ts +226 -0
- package/dist/relay/slash-command-catalog.generated.js +275 -0
- package/dist/relay/slash-command-catalog.generated.js.map +1 -0
- package/dist/relay/slash-command-catalog.js +3 -0
- package/dist/relay/slash-command-catalog.js.map +1 -0
- package/dist/relay/voice-reply-preference.d.ts +25 -0
- package/dist/relay/voice-reply-preference.js +103 -0
- package/dist/relay/voice-reply-preference.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import { readFile, writeFile, mkdir, readdir } from "fs/promises";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
import { homedir } from "os";
|
|
4
|
+
import { PROVIDER_REGISTRY } from "./provider-registry.js";
|
|
5
|
+
const OPENCLAW_DIR = join(homedir(), ".openclaw");
|
|
6
|
+
const OPENCLAW_CONFIG = join(OPENCLAW_DIR, "openclaw.json");
|
|
7
|
+
const AGENTS_DIR = join(OPENCLAW_DIR, "agents");
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Internal helpers
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
function maskKey(key) {
|
|
12
|
+
if (key.length <= 8)
|
|
13
|
+
return key.slice(0, 2) + "***" + key.slice(-2);
|
|
14
|
+
return key.slice(0, 4) + "***" + key.slice(-4);
|
|
15
|
+
}
|
|
16
|
+
async function resolveAgentId() {
|
|
17
|
+
try {
|
|
18
|
+
const entries = await readdir(AGENTS_DIR, { withFileTypes: true });
|
|
19
|
+
const dirs = entries.filter(e => e.isDirectory()).map(e => e.name);
|
|
20
|
+
if (dirs.length > 0)
|
|
21
|
+
return dirs[0];
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// agents dir missing or unreadable
|
|
25
|
+
}
|
|
26
|
+
return "main";
|
|
27
|
+
}
|
|
28
|
+
async function readJson(filePath) {
|
|
29
|
+
try {
|
|
30
|
+
const raw = await readFile(filePath, "utf-8");
|
|
31
|
+
return JSON.parse(raw);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return {};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async function writeJson(filePath, data) {
|
|
38
|
+
await writeFile(filePath, JSON.stringify(data, null, 2), "utf-8");
|
|
39
|
+
}
|
|
40
|
+
function getNestedObj(root, keys) {
|
|
41
|
+
let cur = root;
|
|
42
|
+
for (const key of keys) {
|
|
43
|
+
if (cur[key] == null || typeof cur[key] !== "object" || Array.isArray(cur[key])) {
|
|
44
|
+
cur[key] = {};
|
|
45
|
+
}
|
|
46
|
+
cur = cur[key];
|
|
47
|
+
}
|
|
48
|
+
return cur;
|
|
49
|
+
}
|
|
50
|
+
function authProfilesPath(agentId) {
|
|
51
|
+
return join(AGENTS_DIR, agentId, "agent", "auth-profiles.json");
|
|
52
|
+
}
|
|
53
|
+
/** Extract the first model ID from a provider's models array in openclaw.json */
|
|
54
|
+
function extractModelId(providerRaw) {
|
|
55
|
+
const models = providerRaw["models"];
|
|
56
|
+
if (Array.isArray(models) && models.length > 0) {
|
|
57
|
+
const first = models[0];
|
|
58
|
+
return typeof first["id"] === "string" ? first["id"] : null;
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
/** Infer provider type from its id in models.providers */
|
|
63
|
+
function inferType(id) {
|
|
64
|
+
// custom providers have ids like "custom-<uuid>"
|
|
65
|
+
if (id.startsWith("custom-"))
|
|
66
|
+
return "custom";
|
|
67
|
+
return id;
|
|
68
|
+
}
|
|
69
|
+
function readStringArray(value) {
|
|
70
|
+
if (!Array.isArray(value))
|
|
71
|
+
return [];
|
|
72
|
+
return value.filter((item) => typeof item === "string" && item.length > 0);
|
|
73
|
+
}
|
|
74
|
+
function modelContextWindow(modelRaw) {
|
|
75
|
+
const candidates = ["contextWindow", "context_window", "contextLength", "context_length", "maxInputTokens"];
|
|
76
|
+
for (const key of candidates) {
|
|
77
|
+
const value = modelRaw[key];
|
|
78
|
+
if (typeof value === "string" && value.trim().length > 0)
|
|
79
|
+
return value.trim();
|
|
80
|
+
if (typeof value === "number" && Number.isFinite(value))
|
|
81
|
+
return String(value);
|
|
82
|
+
}
|
|
83
|
+
return "--";
|
|
84
|
+
}
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
// Public API
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
export async function listProviderEntries() {
|
|
89
|
+
const config = await readJson(OPENCLAW_CONFIG);
|
|
90
|
+
const agentId = await resolveAgentId();
|
|
91
|
+
const authProfiles = await readJson(authProfilesPath(agentId));
|
|
92
|
+
const profiles = authProfiles["profiles"] ?? {};
|
|
93
|
+
// Determine current default
|
|
94
|
+
const agents = config["agents"] ?? {};
|
|
95
|
+
const defaults = agents["defaults"] ?? {};
|
|
96
|
+
const model = defaults["model"] ?? {};
|
|
97
|
+
const primaryModel = typeof model["primary"] === "string" ? model["primary"] : "";
|
|
98
|
+
const entries = [];
|
|
99
|
+
// --- Providers from models.providers (non-builtIn) ---
|
|
100
|
+
const models = config["models"] ?? {};
|
|
101
|
+
const providers = models["providers"] ?? {};
|
|
102
|
+
for (const [id, providerRaw] of Object.entries(providers)) {
|
|
103
|
+
const p = providerRaw ?? {};
|
|
104
|
+
const type = inferType(id);
|
|
105
|
+
const info = PROVIDER_REGISTRY[type];
|
|
106
|
+
const baseUrl = typeof p["baseUrl"] === "string" ? p["baseUrl"] : "";
|
|
107
|
+
const modelId = extractModelId(p);
|
|
108
|
+
// auth-profiles key is "${id}:default"
|
|
109
|
+
const profileKey = `${id}:default`;
|
|
110
|
+
const profileRaw = profiles[profileKey];
|
|
111
|
+
const profile = profileRaw != null && typeof profileRaw === "object" && !Array.isArray(profileRaw)
|
|
112
|
+
? profileRaw
|
|
113
|
+
: null;
|
|
114
|
+
const apiKey = profile != null && typeof profile["key"] === "string" ? profile["key"] : null;
|
|
115
|
+
const hasKey = apiKey != null && apiKey.length > 0;
|
|
116
|
+
const keyMasked = hasKey ? maskKey(apiKey) : null;
|
|
117
|
+
const isDefault = primaryModel === id || primaryModel.startsWith(`${id}/`);
|
|
118
|
+
entries.push({
|
|
119
|
+
id,
|
|
120
|
+
type,
|
|
121
|
+
name: info?.displayName ?? type,
|
|
122
|
+
baseUrl,
|
|
123
|
+
modelId,
|
|
124
|
+
keyMasked,
|
|
125
|
+
hasKey,
|
|
126
|
+
isDefault,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
// --- Built-in providers (anthropic, google) — detected via auth-profiles ---
|
|
130
|
+
for (const [type, info] of Object.entries(PROVIDER_REGISTRY)) {
|
|
131
|
+
if (!info.builtIn)
|
|
132
|
+
continue;
|
|
133
|
+
const profileKey = `${type}:default`;
|
|
134
|
+
const profileRaw = profiles[profileKey];
|
|
135
|
+
if (profileRaw == null)
|
|
136
|
+
continue; // not configured
|
|
137
|
+
const profile = typeof profileRaw === "object" && !Array.isArray(profileRaw)
|
|
138
|
+
? profileRaw
|
|
139
|
+
: null;
|
|
140
|
+
const apiKey = profile != null && typeof profile["key"] === "string" ? profile["key"] : null;
|
|
141
|
+
const hasKey = apiKey != null && apiKey.length > 0;
|
|
142
|
+
const keyMasked = hasKey ? maskKey(apiKey) : null;
|
|
143
|
+
const isDefault = primaryModel === type || primaryModel.startsWith(`${type}/`);
|
|
144
|
+
entries.push({
|
|
145
|
+
id: type,
|
|
146
|
+
type,
|
|
147
|
+
name: info.displayName,
|
|
148
|
+
baseUrl: info.defaultBaseUrl,
|
|
149
|
+
modelId: info.defaultModelId ?? null,
|
|
150
|
+
keyMasked,
|
|
151
|
+
hasKey,
|
|
152
|
+
isDefault,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
return entries;
|
|
156
|
+
}
|
|
157
|
+
export async function listConfiguredModels() {
|
|
158
|
+
const config = await readJson(OPENCLAW_CONFIG);
|
|
159
|
+
const agents = config["agents"] ?? {};
|
|
160
|
+
const defaults = agents["defaults"] ?? {};
|
|
161
|
+
const modelDefaults = defaults["model"] ?? {};
|
|
162
|
+
const primaryModel = typeof modelDefaults["primary"] === "string" ? modelDefaults["primary"] : "";
|
|
163
|
+
const entries = [];
|
|
164
|
+
const seen = new Set();
|
|
165
|
+
const models = config["models"] ?? {};
|
|
166
|
+
const providers = models["providers"] ?? {};
|
|
167
|
+
const modelAliases = defaults["models"] ?? {};
|
|
168
|
+
for (const [fullKey, aliasRaw] of Object.entries(modelAliases)) {
|
|
169
|
+
const slashIndex = fullKey.indexOf("/");
|
|
170
|
+
if (slashIndex <= 0 || slashIndex >= fullKey.length - 1)
|
|
171
|
+
continue;
|
|
172
|
+
const providerId = fullKey.slice(0, slashIndex);
|
|
173
|
+
const modelId = fullKey.slice(slashIndex + 1);
|
|
174
|
+
const aliasObj = aliasRaw != null && typeof aliasRaw === "object" && !Array.isArray(aliasRaw)
|
|
175
|
+
? aliasRaw
|
|
176
|
+
: {};
|
|
177
|
+
const alias = typeof aliasObj["alias"] === "string" && aliasObj["alias"].trim().length > 0
|
|
178
|
+
? aliasObj["alias"].trim()
|
|
179
|
+
: modelId;
|
|
180
|
+
if (seen.has(fullKey))
|
|
181
|
+
continue;
|
|
182
|
+
seen.add(fullKey);
|
|
183
|
+
const providerConfig = providers[providerId] ?? {};
|
|
184
|
+
const configuredModels = Array.isArray(providerConfig["models"]) ? providerConfig["models"] : [];
|
|
185
|
+
const modelRecord = configuredModels.find((entry) => {
|
|
186
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry))
|
|
187
|
+
return false;
|
|
188
|
+
const record = entry;
|
|
189
|
+
return record["id"] === modelId;
|
|
190
|
+
});
|
|
191
|
+
const info = PROVIDER_REGISTRY[inferType(providerId)];
|
|
192
|
+
entries.push({
|
|
193
|
+
providerId,
|
|
194
|
+
provider: info?.displayName ?? providerId,
|
|
195
|
+
modelId,
|
|
196
|
+
alias,
|
|
197
|
+
name: alias,
|
|
198
|
+
contextWindow: modelRecord ? modelContextWindow(modelRecord) : "--",
|
|
199
|
+
tags: modelRecord ? [modelId, ...readStringArray(modelRecord["tags"])] : [modelId],
|
|
200
|
+
isSelected: false,
|
|
201
|
+
isDefault: fullKey === primaryModel,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
return entries;
|
|
205
|
+
}
|
|
206
|
+
export async function addProvider(params) {
|
|
207
|
+
const { id, type, apiKey, baseUrl, api, apiKeyEnvName, modelId } = params;
|
|
208
|
+
const info = PROVIDER_REGISTRY[type];
|
|
209
|
+
// --- Update openclaw.json (skip for builtIn providers) ---
|
|
210
|
+
if (!info?.builtIn) {
|
|
211
|
+
const config = await readJson(OPENCLAW_CONFIG);
|
|
212
|
+
const models = getNestedObj(config, ["models"]);
|
|
213
|
+
const providers = getNestedObj(models, ["providers"]);
|
|
214
|
+
// "apiKey" is the env var name reference (not the actual key value)
|
|
215
|
+
const providerEntry = { type, baseUrl, api, apiKey: apiKeyEnvName };
|
|
216
|
+
if (modelId !== undefined && modelId.length > 0) {
|
|
217
|
+
providerEntry["models"] = [{ id: modelId, name: modelId }];
|
|
218
|
+
}
|
|
219
|
+
providers[id] = providerEntry;
|
|
220
|
+
await writeJson(OPENCLAW_CONFIG, config);
|
|
221
|
+
}
|
|
222
|
+
// --- Update auth-profiles.json (only if apiKey provided) ---
|
|
223
|
+
if (apiKey != null && apiKey.length > 0) {
|
|
224
|
+
const agentId = await resolveAgentId();
|
|
225
|
+
const profilesPath = authProfilesPath(agentId);
|
|
226
|
+
const profilesDir = join(AGENTS_DIR, agentId, "agent");
|
|
227
|
+
await mkdir(profilesDir, { recursive: true });
|
|
228
|
+
const authProfiles = await readJson(profilesPath);
|
|
229
|
+
const profiles = getNestedObj(authProfiles, ["profiles"]);
|
|
230
|
+
// Profile key is "${id}:default" — for builtIn, id === type
|
|
231
|
+
const profileKey = `${id}:default`;
|
|
232
|
+
profiles[profileKey] = { type: "api_key", provider: type, key: apiKey };
|
|
233
|
+
await writeJson(profilesPath, authProfiles);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
export async function deleteProvider(id) {
|
|
237
|
+
const type = inferType(id);
|
|
238
|
+
const info = PROVIDER_REGISTRY[type];
|
|
239
|
+
// --- Update openclaw.json (skip for builtIn) ---
|
|
240
|
+
if (!info?.builtIn) {
|
|
241
|
+
const config = await readJson(OPENCLAW_CONFIG);
|
|
242
|
+
const models = getNestedObj(config, ["models"]);
|
|
243
|
+
const providers = getNestedObj(models, ["providers"]);
|
|
244
|
+
delete providers[id];
|
|
245
|
+
await writeJson(OPENCLAW_CONFIG, config);
|
|
246
|
+
}
|
|
247
|
+
// --- Update auth-profiles.json ---
|
|
248
|
+
const agentId = await resolveAgentId();
|
|
249
|
+
const profilesPath = authProfilesPath(agentId);
|
|
250
|
+
const authProfiles = await readJson(profilesPath);
|
|
251
|
+
const profiles = getNestedObj(authProfiles, ["profiles"]);
|
|
252
|
+
const profileKey = `${id}:default`;
|
|
253
|
+
if (profileKey in profiles) {
|
|
254
|
+
delete profiles[profileKey];
|
|
255
|
+
await writeJson(profilesPath, authProfiles);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
export async function setDefaultProvider(id) {
|
|
259
|
+
const type = inferType(id);
|
|
260
|
+
const info = PROVIDER_REGISTRY[type];
|
|
261
|
+
// Determine the model ID for this provider
|
|
262
|
+
let modelId = null;
|
|
263
|
+
if (info?.builtIn) {
|
|
264
|
+
// Built-in providers: use registry default, no models.providers entry
|
|
265
|
+
modelId = info.defaultModelId ?? null;
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
// Read from models.providers entry
|
|
269
|
+
const config = await readJson(OPENCLAW_CONFIG);
|
|
270
|
+
const models = config["models"] ?? {};
|
|
271
|
+
const providers = models["providers"] ?? {};
|
|
272
|
+
const providerRaw = providers[id] ?? {};
|
|
273
|
+
modelId = extractModelId(providerRaw) ?? info?.defaultModelId ?? null;
|
|
274
|
+
}
|
|
275
|
+
const primary = modelId ? `${id}/${modelId}` : id;
|
|
276
|
+
const config = await readJson(OPENCLAW_CONFIG);
|
|
277
|
+
const agents = getNestedObj(config, ["agents"]);
|
|
278
|
+
const defaults = getNestedObj(agents, ["defaults"]);
|
|
279
|
+
const model = getNestedObj(defaults, ["model"]);
|
|
280
|
+
model["primary"] = primary;
|
|
281
|
+
await writeJson(OPENCLAW_CONFIG, config);
|
|
282
|
+
}
|
|
283
|
+
export async function setDefaultModel(providerId, modelId) {
|
|
284
|
+
const config = await readJson(OPENCLAW_CONFIG);
|
|
285
|
+
const agents = getNestedObj(config, ["agents"]);
|
|
286
|
+
const defaults = getNestedObj(agents, ["defaults"]);
|
|
287
|
+
const model = getNestedObj(defaults, ["model"]);
|
|
288
|
+
model["primary"] = `${providerId}/${modelId}`;
|
|
289
|
+
await writeJson(OPENCLAW_CONFIG, config);
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=provider-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-config.js","sourceRoot":"","sources":["../../src/commands/provider-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { randomUUID } from "crypto";
|
|
2
|
+
import { requestGatewayRestart } from "./local-runtime.js";
|
|
3
|
+
import { PROVIDER_REGISTRY } from "./provider-registry.js";
|
|
4
|
+
import { listProviderEntries, listConfiguredModels, addProvider, deleteProvider, setDefaultProvider, setDefaultModel, } from "./provider-config.js";
|
|
5
|
+
async function restartGateway() {
|
|
6
|
+
const restart = await requestGatewayRestart("provider");
|
|
7
|
+
if (!restart.ok) {
|
|
8
|
+
console.warn("[provider] gateway restart request failed:", restart.error);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// HTTP key validation
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
async function validateApiKey(type, apiKey, baseUrl) {
|
|
15
|
+
const info = PROVIDER_REGISTRY[type];
|
|
16
|
+
if (!info)
|
|
17
|
+
return { ok: false, error: `Unknown provider type: ${type}` };
|
|
18
|
+
if (!info.requiresApiKey || !apiKey)
|
|
19
|
+
return { ok: true };
|
|
20
|
+
return new Promise((resolve) => {
|
|
21
|
+
try {
|
|
22
|
+
const url = new URL(info.validationPath, baseUrl);
|
|
23
|
+
if (info.validationAuth === "google-query-param") {
|
|
24
|
+
url.searchParams.set("key", apiKey);
|
|
25
|
+
}
|
|
26
|
+
const headers = {};
|
|
27
|
+
if (info.validationAuth === "bearer") {
|
|
28
|
+
headers["Authorization"] = `Bearer ${apiKey}`;
|
|
29
|
+
}
|
|
30
|
+
else if (info.validationAuth === "x-api-key") {
|
|
31
|
+
headers["x-api-key"] = apiKey;
|
|
32
|
+
headers["anthropic-version"] = "2023-06-01";
|
|
33
|
+
}
|
|
34
|
+
// Use http or https based on protocol
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
36
|
+
const mod = url.protocol === "https:" ? require("https") : require("http");
|
|
37
|
+
const req = mod.get({
|
|
38
|
+
hostname: url.hostname,
|
|
39
|
+
port: url.port || undefined,
|
|
40
|
+
path: url.pathname + url.search,
|
|
41
|
+
headers,
|
|
42
|
+
}, (res) => {
|
|
43
|
+
res.resume(); // drain body
|
|
44
|
+
const status = res.statusCode ?? 0;
|
|
45
|
+
if (status >= 200 && status < 300) {
|
|
46
|
+
resolve({ ok: true });
|
|
47
|
+
}
|
|
48
|
+
else if (status === 401 || status === 403) {
|
|
49
|
+
resolve({ ok: false, error: "API Key 无效" });
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
resolve({ ok: false, error: `验证失败 (HTTP ${status})` });
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
req.setTimeout(10_000, () => {
|
|
56
|
+
req.destroy();
|
|
57
|
+
resolve({ ok: false, error: "验证超时" });
|
|
58
|
+
});
|
|
59
|
+
req.on("error", (e) => resolve({ ok: false, error: e.message }));
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
resolve({ ok: false, error: String(e) });
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
// Command handlers
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
async function cmdList() {
|
|
70
|
+
try {
|
|
71
|
+
const providers = await listProviderEntries();
|
|
72
|
+
return { ok: true, payload: { providers } };
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
return { ok: false, error: String(err) };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async function cmdValidateKey(params) {
|
|
79
|
+
try {
|
|
80
|
+
const type = params.type;
|
|
81
|
+
const apiKey = params.apiKey;
|
|
82
|
+
const baseUrl = params.baseUrl ?? PROVIDER_REGISTRY[type]?.defaultBaseUrl ?? "";
|
|
83
|
+
const result = await validateApiKey(type, apiKey, baseUrl);
|
|
84
|
+
if (result.ok)
|
|
85
|
+
return { ok: true };
|
|
86
|
+
return { ok: false, error: result.error ?? "验证失败" };
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
return { ok: false, error: String(err) };
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async function cmdAdd(params) {
|
|
93
|
+
try {
|
|
94
|
+
const type = params.type;
|
|
95
|
+
const apiKey = params.apiKey ?? null;
|
|
96
|
+
const info = PROVIDER_REGISTRY[type];
|
|
97
|
+
if (!info)
|
|
98
|
+
return { ok: false, error: `Unknown provider type: ${type}` };
|
|
99
|
+
const baseUrl = params.baseUrl || info.defaultBaseUrl;
|
|
100
|
+
const modelId = params.modelId ?? info.defaultModelId;
|
|
101
|
+
// Validate key before writing config
|
|
102
|
+
if (info.requiresApiKey && apiKey) {
|
|
103
|
+
const v = await validateApiKey(type, apiKey, baseUrl);
|
|
104
|
+
if (!v.ok)
|
|
105
|
+
return { ok: false, error: v.error ?? "API Key 无效" };
|
|
106
|
+
}
|
|
107
|
+
// custom providers get a UUID suffix; id and apiKeyEnvName share the same UUID so they're traceable
|
|
108
|
+
const uuid = info.allowMultiple ? randomUUID() : null;
|
|
109
|
+
const id = uuid ? `custom-${uuid}` : type;
|
|
110
|
+
const apiKeyEnvName = uuid
|
|
111
|
+
? `CUSTOM_${uuid.replace(/-/g, "_").toUpperCase()}_API_KEY`
|
|
112
|
+
: info.apiKeyEnvName;
|
|
113
|
+
await addProvider({ id, type, apiKey, baseUrl, api: info.api, apiKeyEnvName, modelId });
|
|
114
|
+
restartGateway();
|
|
115
|
+
return { ok: true, payload: { id } };
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
return { ok: false, error: String(err) };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
async function cmdDelete(params) {
|
|
122
|
+
try {
|
|
123
|
+
const id = params.id;
|
|
124
|
+
if (!id)
|
|
125
|
+
return { ok: false, error: "id required" };
|
|
126
|
+
await deleteProvider(id);
|
|
127
|
+
restartGateway();
|
|
128
|
+
return { ok: true };
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
return { ok: false, error: String(err) };
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async function cmdSetDefault(params) {
|
|
135
|
+
try {
|
|
136
|
+
const id = params.id;
|
|
137
|
+
if (!id)
|
|
138
|
+
return { ok: false, error: "id required" };
|
|
139
|
+
await setDefaultProvider(id);
|
|
140
|
+
restartGateway();
|
|
141
|
+
return { ok: true };
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
return { ok: false, error: String(err) };
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
async function cmdListModels() {
|
|
148
|
+
try {
|
|
149
|
+
const items = await listConfiguredModels();
|
|
150
|
+
return { ok: true, payload: { items } };
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
return { ok: false, error: String(err) };
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
async function cmdSelectModel(_params) {
|
|
157
|
+
return { ok: false, error: "Use chat.send with /model <alias> for session model switching" };
|
|
158
|
+
}
|
|
159
|
+
async function cmdSetDefaultModel(params) {
|
|
160
|
+
try {
|
|
161
|
+
const providerId = typeof params.providerId === "string" ? params.providerId.trim() : "";
|
|
162
|
+
const modelId = typeof params.modelId === "string" ? params.modelId.trim() : "";
|
|
163
|
+
const modelAlias = typeof params.modelAlias === "string" ? params.modelAlias.trim() : "";
|
|
164
|
+
if (!providerId || !modelId) {
|
|
165
|
+
return { ok: false, error: "providerId and modelId are required" };
|
|
166
|
+
}
|
|
167
|
+
await setDefaultModel(providerId, modelId);
|
|
168
|
+
restartGateway();
|
|
169
|
+
return { ok: true, payload: { providerId, modelId, modelAlias, defaultModel: `${providerId}/${modelId}` } };
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
return { ok: false, error: String(err) };
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// ---------------------------------------------------------------------------
|
|
176
|
+
// Main dispatch
|
|
177
|
+
// ---------------------------------------------------------------------------
|
|
178
|
+
export function handleProviderCommand(method, params) {
|
|
179
|
+
if (!method.startsWith("clawpilot.provider.")
|
|
180
|
+
&& !method.startsWith("pocketclaw.provider.")
|
|
181
|
+
&& !method.startsWith("clawconnect.provider.")
|
|
182
|
+
&& !method.startsWith("clawpilot.model.")
|
|
183
|
+
&& !method.startsWith("pocketclaw.model.")
|
|
184
|
+
&& !method.startsWith("clawconnect.model."))
|
|
185
|
+
return null;
|
|
186
|
+
const p = (params ?? {});
|
|
187
|
+
switch (method) {
|
|
188
|
+
case "clawconnect.provider.list":
|
|
189
|
+
case "pocketclaw.provider.list":
|
|
190
|
+
case "clawpilot.provider.list": return cmdList();
|
|
191
|
+
case "clawconnect.provider.validateKey":
|
|
192
|
+
case "pocketclaw.provider.validateKey":
|
|
193
|
+
case "clawpilot.provider.validateKey": return cmdValidateKey(p);
|
|
194
|
+
case "clawconnect.provider.add":
|
|
195
|
+
case "pocketclaw.provider.add":
|
|
196
|
+
case "clawpilot.provider.add": return cmdAdd(p);
|
|
197
|
+
case "clawconnect.provider.delete":
|
|
198
|
+
case "pocketclaw.provider.delete":
|
|
199
|
+
case "clawpilot.provider.delete": return cmdDelete(p);
|
|
200
|
+
case "clawconnect.provider.setDefault":
|
|
201
|
+
case "pocketclaw.provider.setDefault":
|
|
202
|
+
case "clawpilot.provider.setDefault": return cmdSetDefault(p);
|
|
203
|
+
case "clawconnect.model.list":
|
|
204
|
+
case "pocketclaw.model.list":
|
|
205
|
+
case "clawpilot.model.list": return cmdListModels();
|
|
206
|
+
case "clawconnect.model.select":
|
|
207
|
+
case "pocketclaw.model.select":
|
|
208
|
+
case "clawpilot.model.select": return cmdSelectModel(p);
|
|
209
|
+
case "clawconnect.model.setDefault":
|
|
210
|
+
case "pocketclaw.model.setDefault":
|
|
211
|
+
case "clawpilot.model.setDefault": return cmdSetDefaultModel(p);
|
|
212
|
+
default:
|
|
213
|
+
return Promise.resolve({ ok: false, error: `Unknown provider command: ${method}` });
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=provider-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-handlers.js","sourceRoot":"","sources":["../../src/commands/provider-handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface ProviderTypeInfo {
|
|
2
|
+
displayName: string;
|
|
3
|
+
defaultBaseUrl: string;
|
|
4
|
+
api: "anthropic-messages" | "openai-completions" | "openai-responses";
|
|
5
|
+
apiKeyEnvName: string;
|
|
6
|
+
validationPath: string;
|
|
7
|
+
validationAuth: "bearer" | "x-api-key" | "google-query-param" | "none";
|
|
8
|
+
requiresApiKey: boolean;
|
|
9
|
+
allowMultiple: boolean;
|
|
10
|
+
showBaseUrl: boolean;
|
|
11
|
+
showModelId: boolean;
|
|
12
|
+
defaultModelId?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Built-in OpenClaw providers (anthropic, google) — do NOT write a
|
|
15
|
+
* models.providers entry; only write to auth-profiles.json.
|
|
16
|
+
*/
|
|
17
|
+
builtIn?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare const PROVIDER_REGISTRY: Record<string, ProviderTypeInfo>;
|