agentgui 1.0.423 → 1.0.425

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.
@@ -111,7 +111,8 @@ export function register(router, deps) {
111
111
  if (!agent || agent.protocol !== 'acp') return { subAgents: [] };
112
112
  try {
113
113
  const data = await acpFetch(agent.acpPort || 8080, '/agents/search', {});
114
- return { subAgents: (data?.agents || []).map(a => ({ id: a.agent_id || a.id, name: a.metadata?.ref?.name || a.name || a.agent_id || a.id })) };
114
+ const list = Array.isArray(data) ? data : (data?.agents || []);
115
+ return { subAgents: list.map(a => ({ id: a.agent_id || a.id, name: a.metadata?.ref?.name || a.name || a.agent_id || a.id })) };
115
116
  } catch (_) { return { subAgents: [] }; }
116
117
  });
117
118
 
@@ -143,12 +144,21 @@ export function register(router, deps) {
143
144
  } catch (_) {}
144
145
  try {
145
146
  const data = await acpFetch(port, '/agents/search', {});
147
+ const list = Array.isArray(data) ? data : (data?.agents || []);
146
148
  const allModels = new Map();
147
- for (const a of (data?.agents || [])) {
149
+ for (const a of list) {
150
+ const agentId = a.agent_id || a.id;
151
+ const name = a.metadata?.ref?.name || a.name || agentId;
152
+ if (agentId && name) allModels.set(agentId, name);
148
153
  for (const m of (a.metadata?.models || a.specs?.models || [])) {
149
154
  const id = m.id || m;
150
155
  if (id) allModels.set(id, m.name || m.label || id);
151
156
  }
157
+ try {
158
+ const desc = await acpFetch(port, `/agents/${agentId}/descriptor`);
159
+ const enumVals = desc?.specs?.config?.properties?.model?.enum || desc?.specs?.input?.properties?.model?.enum || [];
160
+ for (const v of enumVals) allModels.set(v, v);
161
+ } catch (_) {}
152
162
  }
153
163
  if (allModels.size > 0) {
154
164
  const models = Array.from(allModels.entries()).map(([id, label]) => ({ id, label }));
@@ -157,6 +167,23 @@ export function register(router, deps) {
157
167
  }
158
168
  } catch (_) {}
159
169
  }
170
+ const acpAgents = discoveredAgents.filter(x => x.protocol === 'acp');
171
+ for (const acpAgent of acpAgents) {
172
+ const port = acpAgent.acpPort || 8080;
173
+ try {
174
+ const desc = await acpFetch(port, `/agents/${p.id}/descriptor`);
175
+ if (desc) {
176
+ const enumVals = desc?.specs?.config?.properties?.model?.enum || desc?.specs?.input?.properties?.model?.enum || [];
177
+ if (enumVals.length > 0) {
178
+ const models = enumVals.map(v => ({ id: v, label: v }));
179
+ modelCache.set(p.id, { models, ts: Date.now() });
180
+ return { models };
181
+ }
182
+ const name = desc?.metadata?.ref?.name;
183
+ if (name) { const models = [{ id: p.id, label: name }]; modelCache.set(p.id, { models, ts: Date.now() }); return { models }; }
184
+ }
185
+ } catch (_) {}
186
+ }
160
187
  try {
161
188
  const models = await getModelsForAgent(p.id);
162
189
  modelCache.set(p.id, { models, ts: Date.now() });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentgui",
3
- "version": "1.0.423",
3
+ "version": "1.0.425",
4
4
  "description": "Multi-agent ACP client with real-time communication",
5
5
  "type": "module",
6
6
  "main": "server.js",
package/server.js CHANGED
@@ -568,18 +568,7 @@ async function getModelsForAgent(agentId) {
568
568
  let models = null;
569
569
 
570
570
  if (agentId === 'claude-code') {
571
- const hardcodedModels = [
572
- { id: 'haiku', label: 'Haiku (Default)' },
573
- { id: 'sonnet', label: 'Sonnet' },
574
- { id: 'opus', label: 'Opus' },
575
- ];
576
-
577
- const apiModels = await fetchClaudeModelsFromAPI();
578
- if (apiModels) {
579
- models = [...hardcodedModels, ...apiModels.slice(1)];
580
- } else {
581
- models = hardcodedModels;
582
- }
571
+ models = await fetchClaudeModelsFromAPI();
583
572
  } else if (agentId === 'gemini') {
584
573
  models = await fetchGeminiModelsFromAPI();
585
574
  }
@@ -632,88 +621,8 @@ async function getModelsForAgent(agentId) {
632
621
  }
633
622
  }
634
623
 
635
- // Fallback default models for agents that fail to retrieve models
636
- const fallbackModels = {
637
- 'claude-code': [
638
- { id: 'haiku', label: 'Haiku (Default)' },
639
- { id: 'sonnet', label: 'Sonnet' },
640
- { id: 'opus', label: 'Opus' }
641
- ],
642
- 'gemini': [
643
- { id: 'gemini-1.5-pro', label: 'Gemini 1.5 Pro' },
644
- { id: 'gemini-1.5-flash', label: 'Gemini 1.5 Flash' },
645
- { id: 'gemini-2.0-pro', label: 'Gemini 2.0 Pro' },
646
- { id: 'gemini-2.0-flash', label: 'Gemini 2.0 Flash' }
647
- ],
648
- 'opencode': [
649
- { id: 'claude-sonnet-4-20250514', label: 'Claude Sonnet 4' },
650
- { id: 'claude-haiku-4-20250514', label: 'Claude Haiku 4' },
651
- { id: 'gpt-4-turbo', label: 'GPT-4 Turbo' },
652
- { id: 'gemini-pro', label: 'Gemini Pro' }
653
- ],
654
- 'kilo': [
655
- { id: 'claude-sonnet-4', label: 'Claude Sonnet 4' },
656
- { id: 'gemini-2.0-flash', label: 'Gemini 2.0 Flash' },
657
- { id: 'gpt-4', label: 'GPT-4' }
658
- ],
659
- 'goose': [
660
- { id: 'default', label: 'Default Model' },
661
- { id: 'goose-pro', label: 'Goose Pro' }
662
- ],
663
- 'openhands': [
664
- { id: 'default', label: 'Default Model' },
665
- { id: 'openhands-1', label: 'OpenHands 1' }
666
- ],
667
- 'augment': [
668
- { id: 'default', label: 'Default Model' },
669
- { id: 'augment-pro', label: 'Augment Pro' }
670
- ],
671
- 'cline': [
672
- { id: 'default', label: 'Default Model' },
673
- { id: 'cline-1', label: 'Cline 1' }
674
- ],
675
- 'kimi': [
676
- { id: 'default', label: 'Default Model' },
677
- { id: 'kimi-pro', label: 'Kimi Pro' }
678
- ],
679
- 'qwen': [
680
- { id: 'default', label: 'Default Model' },
681
- { id: 'qwen-7b', label: 'Qwen 7B' },
682
- { id: 'qwen-14b', label: 'Qwen 14B' }
683
- ],
684
- 'codex': [
685
- { id: 'default', label: 'Default Model' },
686
- { id: 'code-davinci-002', label: 'Code Davinci 002' },
687
- { id: 'code-cushman-001', label: 'Code Cushman 001' }
688
- ],
689
- 'mistral': [
690
- { id: 'default', label: 'Default Model' },
691
- { id: 'mistral-small', label: 'Mistral Small' },
692
- { id: 'mistral-medium', label: 'Mistral Medium' },
693
- { id: 'mistral-large', label: 'Mistral Large' }
694
- ],
695
- 'kiro': [
696
- { id: 'default', label: 'Default Model' },
697
- { id: 'kiro-1', label: 'Kiro 1' }
698
- ],
699
- 'fast-agent': [
700
- { id: 'default', label: 'Default Model' },
701
- { id: 'fast-agent-1', label: 'Fast Agent 1' }
702
- ]
703
- };
704
-
705
- if (fallbackModels[agentId]) {
706
- const models = fallbackModels[agentId];
707
- modelCache.set(agentId, { models, timestamp: Date.now() });
708
- return models;
709
- }
710
-
711
- // Default fallback for any other agent
712
- const defaultFallback = [
713
- { id: 'default', label: 'Default Model' }
714
- ];
715
- modelCache.set(agentId, { models: defaultFallback, timestamp: Date.now() });
716
- return defaultFallback;
624
+ modelCache.set(agentId, { models: [], timestamp: Date.now() });
625
+ return [];
717
626
  }
718
627
 
719
628
  const GEMINI_SCOPES = [