Skip to content

Commit af73768

Browse files
Agent Relayclaude
andcommitted
chore: import model options from agent-relay SDK
- Remove hardcoded model options from SpawnModal.tsx - Import CLAUDE_MODEL_OPTIONS, CURSOR_MODEL_OPTIONS, etc. from agent-relay/broker - Use DefaultModels for fallback values - SettingsPage.tsx also imports from SDK Source of truth is now packages/shared/cli-registry.yaml in relay repo. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 579b005 commit af73768

3 files changed

Lines changed: 26 additions & 61 deletions

File tree

packages/dashboard/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
"clean": "rm -rf out .next dist"
4444
},
4545
"dependencies": {
46+
"agent-relay": "^2.3.14",
4647
"@nangohq/frontend": "^0.69.20",
4748
"@xterm/addon-fit": "^0.11.0",
4849
"@xterm/addon-search": "^0.16.0",

packages/dashboard/src/components/SpawnModal.tsx

Lines changed: 19 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@
88
import React, { useState, useRef, useEffect, useCallback, useMemo } from 'react';
99
import { getAgentColor, getAgentInitials } from '../lib/colors';
1010
import { cloudApi } from '../lib/cloudApi';
11+
import {
12+
CLAUDE_MODEL_OPTIONS,
13+
CURSOR_MODEL_OPTIONS,
14+
CODEX_MODEL_OPTIONS,
15+
GEMINI_MODEL_OPTIONS,
16+
DefaultModels,
17+
} from 'agent-relay/broker';
1118

1219
export type SpeakOnTrigger = 'SESSION_END' | 'CODE_WRITTEN' | 'REVIEW_REQUEST' | 'EXPLICIT_ASK' | 'ALL_MESSAGES';
1320

@@ -56,61 +63,13 @@ export interface SpawnModalProps {
5663
activeRepoId?: string;
5764
}
5865

59-
/** Model options for Claude agents */
60-
export const CLAUDE_MODEL_OPTIONS: { value: string; label: string }[] = [
61-
{ value: 'sonnet', label: 'Sonnet' },
62-
{ value: 'opus', label: 'Opus' },
63-
{ value: 'haiku', label: 'Haiku' },
64-
];
66+
// Model options imported from agent-relay/broker (source: cli-registry.yaml)
67+
// Re-export for backwards compatibility
68+
export { CLAUDE_MODEL_OPTIONS, CURSOR_MODEL_OPTIONS, CODEX_MODEL_OPTIONS, GEMINI_MODEL_OPTIONS };
6569

6670
type ClaudeModel = string;
67-
68-
/** Model options for Cursor agents */
69-
export const CURSOR_MODEL_OPTIONS: { value: string; label: string }[] = [
70-
{ value: 'opus-4.5-thinking', label: 'Claude 4.5 Opus (Thinking)' },
71-
{ value: 'opus-4.5', label: 'Claude 4.5 Opus' },
72-
{ value: 'sonnet-4.5', label: 'Claude 4.5 Sonnet' },
73-
{ value: 'sonnet-4.5-thinking', label: 'Claude 4.5 Sonnet (Thinking)' },
74-
{ value: 'gpt-5.2-codex', label: 'GPT-5.2 Codex' },
75-
{ value: 'gpt-5.2-codex-high', label: 'GPT-5.2 Codex High' },
76-
{ value: 'gpt-5.2-codex-low', label: 'GPT-5.2 Codex Low' },
77-
{ value: 'gpt-5.2-codex-xhigh', label: 'GPT-5.2 Codex Extra High' },
78-
{ value: 'gpt-5.2-codex-fast', label: 'GPT-5.2 Codex Fast' },
79-
{ value: 'gpt-5.2-codex-high-fast', label: 'GPT-5.2 Codex High Fast' },
80-
{ value: 'gpt-5.2-codex-low-fast', label: 'GPT-5.2 Codex Low Fast' },
81-
{ value: 'gpt-5.2-codex-xhigh-fast', label: 'GPT-5.2 Codex Extra High Fast' },
82-
{ value: 'gpt-5.1-codex-max', label: 'GPT-5.1 Codex Max' },
83-
{ value: 'gpt-5.1-codex-max-high', label: 'GPT-5.1 Codex Max High' },
84-
{ value: 'gpt-5.2', label: 'GPT-5.2' },
85-
{ value: 'gpt-5.2-high', label: 'GPT-5.2 High' },
86-
{ value: 'gpt-5.1-high', label: 'GPT-5.1 High' },
87-
{ value: 'gemini-3-pro', label: 'Gemini 3 Pro' },
88-
{ value: 'gemini-3-flash', label: 'Gemini 3 Flash' },
89-
{ value: 'composer-1', label: 'Composer 1' },
90-
{ value: 'grok', label: 'Grok' },
91-
];
92-
9371
type CursorModel = string;
94-
95-
/** Model options for Codex agents */
96-
export const CODEX_MODEL_OPTIONS: { value: string; label: string }[] = [
97-
{ value: 'gpt-5.2-codex', label: 'GPT-5.2 Codex — Frontier agentic coding model' },
98-
{ value: 'gpt-5.3-codex', label: 'GPT-5.3 Codex — Latest frontier agentic coding model' },
99-
{ value: 'gpt-5.1-codex-max', label: 'GPT-5.1 Codex Max — Deep and fast reasoning' },
100-
{ value: 'gpt-5.2', label: 'GPT-5.2 — Frontier model, knowledge & reasoning' },
101-
{ value: 'gpt-5.1-codex-mini', label: 'GPT-5.1 Codex Mini — Cheaper, faster' },
102-
];
103-
10472
type CodexModel = string;
105-
106-
/** Model options for Gemini agents */
107-
export const GEMINI_MODEL_OPTIONS: { value: string; label: string }[] = [
108-
{ value: 'gemini-3-pro-preview', label: 'Gemini 3 Pro Preview' },
109-
{ value: 'gemini-2.5-pro', label: 'Gemini 2.5 Pro' },
110-
{ value: 'gemini-2.5-flash', label: 'Gemini 2.5 Flash' },
111-
{ value: 'gemini-2.5-flash-lite', label: 'Gemini 2.5 Flash Lite' },
112-
];
113-
11473
type GeminiModel = string;
11574

11675
const AGENT_TEMPLATES = [
@@ -194,10 +153,10 @@ export function SpawnModal({
194153
const [selectedTemplate, setSelectedTemplate] = useState(AGENT_TEMPLATES[0]);
195154
const [name, setName] = useState('');
196155
const [customCommand, setCustomCommand] = useState('');
197-
const [selectedModel, setSelectedModel] = useState<ClaudeModel>('sonnet');
198-
const [selectedCursorModel, setSelectedCursorModel] = useState<CursorModel>('opus-4.5-thinking');
199-
const [selectedCodexModel, setSelectedCodexModel] = useState<CodexModel>('gpt-5.2-codex');
200-
const [selectedGeminiModel, setSelectedGeminiModel] = useState<GeminiModel>('gemini-2.5-pro');
156+
const [selectedModel, setSelectedModel] = useState<ClaudeModel>(DefaultModels.claude);
157+
const [selectedCursorModel, setSelectedCursorModel] = useState<CursorModel>(DefaultModels.cursor);
158+
const [selectedCodexModel, setSelectedCodexModel] = useState<CodexModel>(DefaultModels.codex);
159+
const [selectedGeminiModel, setSelectedGeminiModel] = useState<GeminiModel>(DefaultModels.gemini);
201160
const [cwd, setCwd] = useState('');
202161
const [selectedRepoId, setSelectedRepoId] = useState<string | undefined>(activeRepoId);
203162
const [team, setTeam] = useState('');
@@ -325,11 +284,11 @@ export function SpawnModal({
325284
setSelectedTemplate(defaultTemplate);
326285
setName('');
327286
setCustomCommand('');
328-
// Use settings-based model defaults with fallbacks
329-
setSelectedModel(agentDefaults?.defaultModels?.claude ?? 'sonnet');
330-
setSelectedCursorModel(agentDefaults?.defaultModels?.cursor ?? 'opus-4.5-thinking');
331-
setSelectedCodexModel(agentDefaults?.defaultModels?.codex ?? 'gpt-5.2-codex');
332-
setSelectedGeminiModel(agentDefaults?.defaultModels?.gemini ?? 'gemini-2.5-pro');
287+
// Use settings-based model defaults with fallbacks from SDK
288+
setSelectedModel(agentDefaults?.defaultModels?.claude ?? DefaultModels.claude);
289+
setSelectedCursorModel(agentDefaults?.defaultModels?.cursor ?? DefaultModels.cursor);
290+
setSelectedCodexModel(agentDefaults?.defaultModels?.codex ?? DefaultModels.codex);
291+
setSelectedGeminiModel(agentDefaults?.defaultModels?.gemini ?? DefaultModels.gemini);
333292
setCwd('');
334293
setSelectedRepoId(activeRepoId);
335294
setTeam('');

packages/dashboard/src/components/settings/SettingsPage.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,12 @@ import { WorkspaceSettingsPanel } from './WorkspaceSettingsPanel';
1616
import { TeamSettingsPanel } from './TeamSettingsPanel';
1717
import { BillingSettingsPanel } from './BillingSettingsPanel';
1818
import type { Settings, CliType } from './types';
19-
import { CLAUDE_MODEL_OPTIONS, CURSOR_MODEL_OPTIONS, CODEX_MODEL_OPTIONS, GEMINI_MODEL_OPTIONS } from '../SpawnModal';
19+
import {
20+
CLAUDE_MODEL_OPTIONS,
21+
CURSOR_MODEL_OPTIONS,
22+
CODEX_MODEL_OPTIONS,
23+
GEMINI_MODEL_OPTIONS,
24+
} from 'agent-relay/broker';
2025

2126
export interface SettingsPageProps {
2227
/** Current user ID for team membership checks */

0 commit comments

Comments
 (0)