agentgui 1.0.424 → 1.0.426

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.
@@ -69,7 +69,7 @@ async function acpFetch(port, path, body = null) {
69
69
  }
70
70
 
71
71
  export function register(router, deps) {
72
- const { db, discoveredAgents, getModelsForAgent, modelCache,
72
+ const { db, discoveredAgents, modelCache,
73
73
  getAgentDescriptor, activeScripts, broadcastSync, startGeminiOAuth,
74
74
  geminiOAuthState } = deps;
75
75
 
@@ -184,11 +184,7 @@ export function register(router, deps) {
184
184
  }
185
185
  } catch (_) {}
186
186
  }
187
- try {
188
- const models = await getModelsForAgent(p.id);
189
- modelCache.set(p.id, { models, ts: Date.now() });
190
- return { models };
191
- } catch { return { models: [] }; }
187
+ return { models: [] };
192
188
  });
193
189
 
194
190
  router.handle('agent.search', (p) => db.searchAgents(discoveredAgents, p.query || p));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentgui",
3
- "version": "1.0.424",
3
+ "version": "1.0.426",
4
4
  "description": "Multi-agent ACP client with real-time communication",
5
5
  "type": "module",
6
6
  "main": "server.js",
package/server.js CHANGED
@@ -437,12 +437,6 @@ initializeDescriptors(discoveredAgents);
437
437
 
438
438
  const modelCache = new Map();
439
439
 
440
- const AGENT_MODEL_COMMANDS = {
441
- 'gemini': 'gemini models',
442
- 'opencode': 'opencode models',
443
- 'kilo': 'kilo models',
444
- };
445
-
446
440
  function modelIdToLabel(id) {
447
441
  const base = id.replace(/^claude-/, '').replace(/-\d{8}$/, '');
448
442
  const m = base.match(/^(\w+)-(\d+)(?:-(\d+))?$/);
@@ -450,45 +444,6 @@ function modelIdToLabel(id) {
450
444
  return base.replace(/-/g, ' ').replace(/\b\w/g, c => c.toUpperCase());
451
445
  }
452
446
 
453
- function extractModelsFromClaudeCLI() {
454
- try {
455
- const cliPath = path.resolve('./node_modules/@anthropic-ai/claude-code/cli.js');
456
- if (!fs.existsSync(cliPath)) return null;
457
- const src = fs.readFileSync(cliPath, 'utf8');
458
- const re = /=\{firstParty:"(claude-[^"]+)",bedrock:"[^"]+",vertex:"[^"]+"/g;
459
- const ids = new Set();
460
- let m;
461
- while ((m = re.exec(src)) !== null) ids.add(m[1]);
462
- if (ids.size === 0) return null;
463
-
464
- const models = [{ id: '', label: 'Default' }];
465
- const sorted = [...ids].sort((a, b) => {
466
- const va = a.replace(/claude-/, '').replace(/-\d{8}$/, '');
467
- const vb = b.replace(/claude-/, '').replace(/-\d{8}$/, '');
468
- return vb.localeCompare(va);
469
- });
470
-
471
- const latest = { haiku: null, sonnet: null, opus: null };
472
- for (const id of sorted) {
473
- if (id.startsWith('claude-3-')) continue;
474
- if (id.includes('haiku') && !latest.haiku) latest.haiku = id;
475
- if (id.includes('sonnet') && !latest.sonnet) latest.sonnet = id;
476
- if (id.includes('opus') && !latest.opus) latest.opus = id;
477
- }
478
-
479
- if (latest.opus) models.push({ id: latest.opus, label: 'Opus (Latest)' });
480
- if (latest.sonnet) models.push({ id: latest.sonnet, label: 'Sonnet (Latest)' });
481
- if (latest.haiku) models.push({ id: latest.haiku, label: 'Haiku (Latest)' });
482
-
483
- for (const id of sorted) {
484
- if (id.startsWith('claude-3-')) continue;
485
- models.push({ id, label: modelIdToLabel(id) });
486
- }
487
-
488
- return models;
489
- } catch { return null; }
490
- }
491
-
492
447
  async function fetchClaudeModelsFromAPI() {
493
448
  const apiKey = process.env.ANTHROPIC_API_KEY;
494
449
  if (!apiKey) return null;
@@ -568,152 +523,14 @@ async function getModelsForAgent(agentId) {
568
523
  let models = null;
569
524
 
570
525
  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
- }
526
+ models = await fetchClaudeModelsFromAPI();
583
527
  } else if (agentId === 'gemini') {
584
528
  models = await fetchGeminiModelsFromAPI();
585
529
  }
586
530
 
587
- if (models) {
588
- modelCache.set(agentId, { models, timestamp: Date.now() });
589
- return models;
590
- }
591
-
592
- if (AGENT_MODEL_COMMANDS[agentId]) {
593
- try {
594
- const result = execSync(AGENT_MODEL_COMMANDS[agentId], { encoding: 'utf-8', timeout: 15000 });
595
- const lines = result.split('\n').map(l => l.trim()).filter(Boolean);
596
- if (lines.length > 0) {
597
- models = [{ id: '', label: 'Default' }];
598
- for (const line of lines) {
599
- models.push({ id: line, label: line });
600
- }
601
- modelCache.set(agentId, { models, timestamp: Date.now() });
602
- return models;
603
- }
604
- } catch (_) {}
605
- }
606
-
607
- const { getRegisteredAgents } = await import('./lib/claude-runner.js');
608
- const agents = getRegisteredAgents();
609
- const agent = agents.find(a => a.id === agentId);
610
-
611
- if (agent && agent.command) {
612
- const modelCmd = `${agent.command} models`;
613
- try {
614
- const result = execSync(modelCmd, { encoding: 'utf-8', timeout: 15000 });
615
- const lines = result.split('\n').map(l => l.trim()).filter(Boolean);
616
- if (lines.length > 0) {
617
- models = [{ id: '', label: 'Default' }];
618
- for (const line of lines) {
619
- models.push({ id: line, label: line });
620
- }
621
- modelCache.set(agentId, { models, timestamp: Date.now() });
622
- return models;
623
- }
624
- } catch (_) {}
625
- }
626
-
627
- if (agentId === 'claude-code') {
628
- const cliModels = extractModelsFromClaudeCLI();
629
- if (cliModels) {
630
- modelCache.set(agentId, { models: cliModels, timestamp: Date.now() });
631
- return cliModels;
632
- }
633
- }
634
-
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;
531
+ const result = models || [];
532
+ modelCache.set(agentId, { models: result, timestamp: Date.now() });
533
+ return result;
717
534
  }
718
535
 
719
536
  const GEMINI_SCOPES = [
@@ -1911,8 +1911,8 @@ class AgentGUIClient {
1911
1911
  }
1912
1912
  try {
1913
1913
  const { models } = await window.wsClient.rpc('agent.models', { id: agentId });
1914
- this._modelCache.set(agentId, models || []);
1915
- this._populateModelSelector(models || []);
1914
+ this._modelCache.set(agentId, models);
1915
+ this._populateModelSelector(models);
1916
1916
  } catch (error) {
1917
1917
  console.error('Failed to load models:', error);
1918
1918
  this._populateModelSelector([]);