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 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) return { baseUrl: provider.baseUrl.replace(/\/$/, ""), apiKey: 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") {