76 lines
2.3 KiB
Markdown
76 lines
2.3 KiB
Markdown
---
|
|
id: DIS-153
|
|
status: in-progress
|
|
phase: 1.5
|
|
priority: p2
|
|
labels: [phase:1.5, type:feat, priority:p2]
|
|
branch: refinement/model-selection
|
|
assignee: developer-agent
|
|
started: 2026-04-13
|
|
pr: null
|
|
merged: null
|
|
---
|
|
|
|
# DIS-153: Model-Auswahl pro Agent
|
|
|
|
## Ziel
|
|
Beim Erstellen eines Agents kann das Claude-Modell ausgewählt werden.
|
|
`/new-agent` zeigt ein Discord-Select-Menü mit verfügbaren Modellen.
|
|
Der Agent verwendet ausschließlich das konfigurierte Modell.
|
|
|
|
## Kontext
|
|
Verschiedene Agents haben unterschiedliche Anforderungen: ein einfacher
|
|
Research-Agent kommt mit Haiku aus, ein Code-Agent braucht Sonnet oder Opus.
|
|
|
|
## Scope
|
|
|
|
### Verfügbare Modelle (hardcodierte Allowlist)
|
|
```typescript
|
|
export const ALLOWED_MODELS = [
|
|
{ id: "claude-opus-4-6", label: "Claude Opus 4.6 (leistungsstark, langsamer)" },
|
|
{ id: "claude-sonnet-4-6", label: "Claude Sonnet 4.6 (Standard, empfohlen)" },
|
|
{ id: "claude-haiku-4-5-20251001", label: "Claude Haiku 4.5 (schnell, günstig)" },
|
|
] as const;
|
|
|
|
export type AllowedModel = typeof ALLOWED_MODELS[number]["id"];
|
|
```
|
|
|
|
### `agent.yaml` Erweiterung
|
|
```yaml
|
|
name: my-agent
|
|
channel_id: "123456789"
|
|
role: Developer
|
|
model: claude-sonnet-4-6 # neu, default: claude-sonnet-4-6
|
|
```
|
|
|
|
### `/new-agent`-Command (`src/commands/new-agent.ts`)
|
|
- Discord `StringSelectMenuBuilder` mit den 3 Modellen als Optionen
|
|
- Nach Auswahl: `model` in `agent.yaml` speichern
|
|
- Kein Freitext-Feld — nur Auswahl aus der Allowlist
|
|
|
|
### `src/agent/runner.ts`
|
|
- `agent.yaml` lesen und `model`-Feld auslesen
|
|
- `--model <id>` zu den Claude-CLI-Args hinzufügen
|
|
- Fallback: wenn kein Model in `agent.yaml` → `claude-sonnet-4-6`
|
|
|
|
### Zod-Schema (`src/agent/schema.ts`)
|
|
- `model: z.enum([...ALLOWED_MODELS.map(m => m.id)]).default("claude-sonnet-4-6")`
|
|
|
|
## Definition of Done
|
|
- [ ] `agent.yaml` hat `model`-Feld (Zod-validiert, Allowlist)
|
|
- [ ] `/new-agent` zeigt Select-Menü (kein Freitext)
|
|
- [ ] Runner übergibt `--model <id>` an Claude CLI
|
|
- [ ] Ungültiges Modell in `agent.yaml` → klare Fehlermeldung beim Start
|
|
- [ ] Unit-Test: Runner-Args enthalten `--model`
|
|
- [ ] `npm run build && npm test` grün
|
|
|
|
## Dateien (erwartet)
|
|
- `src/agent/schema.ts`
|
|
- `src/agent/identity.ts`
|
|
- `src/commands/new-agent.ts`
|
|
- `src/agent/runner.ts`
|
|
- `src/config/models.ts` (Allowlist)
|
|
- `tests/unit/runner-model.test.ts`
|
|
|
|
## Abhängigkeiten
|
|
Keine harten. Kann parallel zu DIS-151 laufen.
|