agent-phonon 0.2.3 → 0.2.4
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/dist/cli.js +62 -16
- package/dist/cli.js.map +1 -1
- package/dist/daemon.d.ts +4 -0
- package/dist/daemon.js +30 -10
- package/dist/daemon.js.map +1 -1
- package/package.json +2 -2
package/dist/cli.js
CHANGED
|
@@ -4245,11 +4245,12 @@ var OpenClawGatewayAdapter = class {
|
|
|
4245
4245
|
if (subAgents.length === 0)
|
|
4246
4246
|
subAgents = [{ id: this.defaultAgent }];
|
|
4247
4247
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
4248
|
+
const gatewayModels = await this.listGatewayModels();
|
|
4248
4249
|
return subAgents.map((a) => {
|
|
4249
4250
|
if (a.workspace)
|
|
4250
4251
|
this.workspaceCache.set(`openclaw:${a.id}`, a.workspace);
|
|
4251
4252
|
const primaryModel = typeof a.model === "string" ? a.model : a.model?.primary;
|
|
4252
|
-
const models = primaryModel ? [{ id: primaryModel, available: true }] : [];
|
|
4253
|
+
const models = gatewayModels.length > 0 ? gatewayModels : primaryModel ? [{ id: primaryModel, available: true }] : [];
|
|
4253
4254
|
return {
|
|
4254
4255
|
// 复合 agentId:openclaw:<subAgentId>(design D32)
|
|
4255
4256
|
agentId: `openclaw:${a.id}`,
|
|
@@ -4262,6 +4263,32 @@ var OpenClawGatewayAdapter = class {
|
|
|
4262
4263
|
};
|
|
4263
4264
|
});
|
|
4264
4265
|
}
|
|
4266
|
+
async listGatewayModels() {
|
|
4267
|
+
try {
|
|
4268
|
+
const r = await this.gw.rpc("models.list", { view: "all" }, 8e3);
|
|
4269
|
+
const rows = Array.isArray(r.models) ? r.models : [];
|
|
4270
|
+
const models = [];
|
|
4271
|
+
const seen = /* @__PURE__ */ new Set();
|
|
4272
|
+
for (const row of rows) {
|
|
4273
|
+
const id = typeof row.key === "string" ? row.key : typeof row.id === "string" ? row.id : void 0;
|
|
4274
|
+
if (!id || seen.has(id))
|
|
4275
|
+
continue;
|
|
4276
|
+
if (row.available === false || row.missing === true)
|
|
4277
|
+
continue;
|
|
4278
|
+
seen.add(id);
|
|
4279
|
+
const contextWindow = typeof row.contextWindow === "number" ? row.contextWindow : typeof row.contextTokens === "number" ? row.contextTokens : void 0;
|
|
4280
|
+
models.push({
|
|
4281
|
+
id,
|
|
4282
|
+
...typeof row.name === "string" ? { displayName: row.name } : {},
|
|
4283
|
+
...contextWindow && contextWindow > 0 ? { contextWindow } : {},
|
|
4284
|
+
available: true
|
|
4285
|
+
});
|
|
4286
|
+
}
|
|
4287
|
+
return models;
|
|
4288
|
+
} catch {
|
|
4289
|
+
return [];
|
|
4290
|
+
}
|
|
4291
|
+
}
|
|
4265
4292
|
async createSession(params) {
|
|
4266
4293
|
await this.gw.connect();
|
|
4267
4294
|
const subAgent = params.agentConfig?.openclawAgent ?? (params.agentId.includes(":") ? params.agentId.split(":")[1] : this.defaultAgent);
|
|
@@ -4814,10 +4841,7 @@ var CodexAdapter = class {
|
|
|
4814
4841
|
available,
|
|
4815
4842
|
...available ? {} : { unavailableReason: "codex CLI not found" },
|
|
4816
4843
|
...version ? { version } : {},
|
|
4817
|
-
models: [
|
|
4818
|
-
{ id: "gpt-5.5", displayName: "GPT-5.5", available: true },
|
|
4819
|
-
{ id: "gpt-5.3-codex", displayName: "GPT-5.3 Codex", available: true }
|
|
4820
|
-
],
|
|
4844
|
+
models: this.env.models?.length ? this.env.models : [{ id: this.env.defaultModel, available: true }],
|
|
4821
4845
|
capabilities: CAPABILITIES2,
|
|
4822
4846
|
scannedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
4823
4847
|
}];
|
|
@@ -5685,11 +5709,7 @@ var ClaudeCodeAdapter = class {
|
|
|
5685
5709
|
available,
|
|
5686
5710
|
...available ? {} : { unavailableReason: "claude CLI not found" },
|
|
5687
5711
|
...version ? { version } : {},
|
|
5688
|
-
models: [
|
|
5689
|
-
{ id: "claude-opus-4.6", displayName: "Claude Opus 4.6", available: true },
|
|
5690
|
-
{ id: "claude-opus-4.7", displayName: "Claude Opus 4.7", available: true },
|
|
5691
|
-
{ id: "claude-sonnet-4.6", displayName: "Claude Sonnet 4.6", available: true }
|
|
5692
|
-
],
|
|
5712
|
+
models: this.env.models?.length ? this.env.models : [{ id: this.env.defaultModel, available: true }],
|
|
5693
5713
|
capabilities: CAPABILITIES5,
|
|
5694
5714
|
scannedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
5695
5715
|
}];
|
|
@@ -6387,17 +6407,39 @@ function openCodeBin() {
|
|
|
6387
6407
|
const bundled = join12(homedir10(), ".opencode", "bin", "opencode");
|
|
6388
6408
|
return existsSync12(bundled) ? bundled : "opencode";
|
|
6389
6409
|
}
|
|
6410
|
+
function modelInfosFromProvider(provider) {
|
|
6411
|
+
const raw = Array.isArray(provider.models) ? provider.models : [];
|
|
6412
|
+
const out = [];
|
|
6413
|
+
const seen = /* @__PURE__ */ new Set();
|
|
6414
|
+
for (const m of raw) {
|
|
6415
|
+
const row = m;
|
|
6416
|
+
const id = typeof row.id === "string" ? row.id : typeof row.key === "string" ? row.key : void 0;
|
|
6417
|
+
if (!id || seen.has(id)) continue;
|
|
6418
|
+
seen.add(id);
|
|
6419
|
+
const contextWindow = typeof row.contextWindow === "number" ? row.contextWindow : typeof row.contextTokens === "number" ? row.contextTokens : void 0;
|
|
6420
|
+
out.push({
|
|
6421
|
+
id,
|
|
6422
|
+
...typeof row.name === "string" ? { displayName: row.name } : {},
|
|
6423
|
+
...contextWindow && contextWindow > 0 ? { contextWindow } : {},
|
|
6424
|
+
available: true
|
|
6425
|
+
});
|
|
6426
|
+
}
|
|
6427
|
+
return out;
|
|
6428
|
+
}
|
|
6390
6429
|
function readDefaultLlmGateway() {
|
|
6391
6430
|
try {
|
|
6392
6431
|
const p = join12(homedir10(), ".openclaw", "openclaw.json");
|
|
6393
6432
|
const j = JSON.parse(readFileSync5(p, "utf8"));
|
|
6394
6433
|
const provider = j.models?.providers?.["phgeek-gw"];
|
|
6395
|
-
if (provider?.baseUrl && provider?.apiKey)
|
|
6434
|
+
if (provider?.baseUrl && provider?.apiKey) {
|
|
6435
|
+
const models = modelInfosFromProvider(provider);
|
|
6436
|
+
return { baseUrl: provider.baseUrl.replace(/\/$/, ""), apiKey: provider.apiKey, models, claudeModels: models.filter((m) => m.id.toLowerCase().includes("claude")) };
|
|
6437
|
+
}
|
|
6396
6438
|
} catch {
|
|
6397
6439
|
}
|
|
6398
6440
|
const baseUrl = process.env.PHONON_LLM_BASE_URL;
|
|
6399
6441
|
const apiKey = process.env.PHONON_LLM_API_KEY;
|
|
6400
|
-
return baseUrl && apiKey ? { baseUrl: baseUrl.replace(/\/$/, ""), apiKey } : void 0;
|
|
6442
|
+
return baseUrl && apiKey ? { baseUrl: baseUrl.replace(/\/$/, ""), apiKey, models: [], claudeModels: [] } : void 0;
|
|
6401
6443
|
}
|
|
6402
6444
|
function autoDetectAdapters(adapters) {
|
|
6403
6445
|
const out = [...adapters];
|
|
@@ -6407,11 +6449,15 @@ function autoDetectAdapters(adapters) {
|
|
|
6407
6449
|
if (!has("opencode") && probe(ocBin).ok) out.push({ type: "opencode", opencodeBinPath: ocBin === "opencode" ? void 0 : ocBin });
|
|
6408
6450
|
const gw = readDefaultLlmGateway();
|
|
6409
6451
|
if (gw) {
|
|
6452
|
+
for (const a of out) {
|
|
6453
|
+
if (a.type === "claude-code" && !a.claudeModels?.length) a.claudeModels = gw.claudeModels;
|
|
6454
|
+
if (a.type === "codex" && !a.codexModels?.length) a.codexModels = gw.models;
|
|
6455
|
+
}
|
|
6410
6456
|
if (!has("claude-code") && probe("claude").ok) {
|
|
6411
|
-
out.push({ type: "claude-code", claudeBaseUrl: gw.baseUrl, claudeAuthToken: gw.apiKey, claudeDefaultModel: "claude-opus-4.8" });
|
|
6457
|
+
out.push({ type: "claude-code", claudeBaseUrl: gw.baseUrl, claudeAuthToken: gw.apiKey, claudeDefaultModel: "claude-opus-4.8", claudeModels: gw.claudeModels });
|
|
6412
6458
|
}
|
|
6413
6459
|
if (!has("codex") && probe("codex").ok) {
|
|
6414
|
-
out.push({ type: "codex", codexBaseUrl: `${gw.baseUrl}/v1`, codexApiKey: gw.apiKey, codexDefaultModel: "gpt-5.5", codexWireApi: "responses" });
|
|
6460
|
+
out.push({ type: "codex", codexBaseUrl: `${gw.baseUrl}/v1`, codexApiKey: gw.apiKey, codexDefaultModel: "gpt-5.5", codexWireApi: "responses", codexModels: gw.models });
|
|
6415
6461
|
}
|
|
6416
6462
|
}
|
|
6417
6463
|
return out;
|
|
@@ -6467,9 +6513,9 @@ function buildRegistry(adapters) {
|
|
|
6467
6513
|
const token = a.gatewayToken ?? readOpenClawGatewayToken();
|
|
6468
6514
|
if (token) reg.register(new OpenClawGatewayAdapter({ gateway: { baseUrl: a.gatewayUrl ?? "ws://127.0.0.1:18789", token }, defaultAgent: a.defaultAgent ?? "main" }));
|
|
6469
6515
|
} else if (a.type === "claude-code" && a.claudeBaseUrl && a.claudeAuthToken) {
|
|
6470
|
-
reg.register(new ClaudeCodeAdapter({ env: { baseUrl: a.claudeBaseUrl, authToken: a.claudeAuthToken, defaultModel: a.claudeDefaultModel ?? "claude-opus-4.6" } }));
|
|
6516
|
+
reg.register(new ClaudeCodeAdapter({ env: { baseUrl: a.claudeBaseUrl, authToken: a.claudeAuthToken, defaultModel: a.claudeDefaultModel ?? "claude-opus-4.6", models: a.claudeModels } }));
|
|
6471
6517
|
} else if (a.type === "codex" && a.codexBaseUrl && a.codexApiKey) {
|
|
6472
|
-
reg.register(new CodexAdapter({ env: { baseUrl: a.codexBaseUrl, apiKey: a.codexApiKey, defaultModel: a.codexDefaultModel ?? "gpt-5.5", wireApi: a.codexWireApi ?? "responses" } }));
|
|
6518
|
+
reg.register(new CodexAdapter({ env: { baseUrl: a.codexBaseUrl, apiKey: a.codexApiKey, defaultModel: a.codexDefaultModel ?? "gpt-5.5", models: a.codexModels, wireApi: a.codexWireApi ?? "responses" } }));
|
|
6473
6519
|
} else if (a.type === "hermes") {
|
|
6474
6520
|
reg.register(new HermesAdapter({ env: { defaultModel: a.hermesModel, provider: a.hermesProvider } }));
|
|
6475
6521
|
} else if (a.type === "opencode") {
|