diff --git a/README.md b/README.md index 10b0d2a..71316a9 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Alle Werte sind in den Raycast-Einstellungen pro Extension einstellbar. **Verhalten:** - `Standard-Sitzungsmodus` — `Aktive Sitzung wiederverwenden` (Default), `Neue Sitzung pro Anfrage`, `Tagessitzung` - `Ausgabe der Schnellbefehle` — `In die Zwischenablage kopieren` (Default) oder `Am Cursor einfügen` -- `Standard-Modell für AI-Befehle` — Modell-ID, die in den AI-Views vorausgewählt ist (Default `anthropic-claude-sonnet-4-6`, benötigt Raycast Pro). Die vollständige Modellliste leiten die Views dynamisch aus `AI.Model` der Raycast-API ab — sobald ein neues Modell verfügbar ist, taucht es ohne Code-Änderung im View-Dropdown auf. +- `Standard-Modell für AI-Befehle` — Modell-ID, die in den AI-Views vorausgewählt ist (Default `anthropic-claude-sonnet-4-6`, benötigt Raycast Pro). Die View-Dropdowns listen aktuelle Modelle aus `src/ai.ts`; neue Modelle dort eintragen, wenn Raycast sie ausrollt. - `Eigener Name` — Default-Signatur für AI-generierte Email-Antworten, im Antwort-Befehl pro Aufruf überschreibbar - `Maximale Anzahl gespeicherter Sitzungen` — älteste werden geprunt (Default 20) - `Raycast nach Kopieren/Einfügen schließen` — Auto-Close und Pop-To-Root nach AI-Workflow-Abschluss (Default an) diff --git a/src/ai.ts b/src/ai.ts index c42b95f..f821e6a 100644 --- a/src/ai.ts +++ b/src/ai.ts @@ -1,5 +1,3 @@ -import { AI } from "@raycast/api"; - export type Creativity = "none" | "low" | "medium" | "high"; export const CREATIVITY_OPTIONS: Creativity[] = [ @@ -11,20 +9,73 @@ export const CREATIVITY_OPTIONS: Creativity[] = [ export type ModelOption = { value: string; title: string }; -function buildModelOptions(): ModelOption[] { - const seen = new Set(); - const options: ModelOption[] = []; - for (const [key, value] of Object.entries(AI.Model) as Array< - [string, string] - >) { - if (seen.has(value)) continue; - seen.add(value); - options.push({ value, title: key.replace(/_/g, " ") }); - } - return options; -} - -export const MODEL_OPTIONS: ModelOption[] = buildModelOptions(); +export const MODEL_OPTIONS: ModelOption[] = [ + { value: "anthropic-claude-opus-4-7", title: "Claude 4.7 Opus" }, + { value: "anthropic-claude-sonnet-4-6", title: "Claude 4.6 Sonnet" }, + { value: "anthropic-claude-opus-4-6", title: "Claude 4.6 Opus" }, + { value: "anthropic-claude-sonnet-4-5", title: "Claude 4.5 Sonnet" }, + { value: "anthropic-claude-opus-4-5", title: "Claude 4.5 Opus" }, + { value: "anthropic-claude-4-5-haiku", title: "Claude 4.5 Haiku" }, + { value: "anthropic-claude-sonnet-4", title: "Claude 4 Sonnet" }, + { value: "openai-gpt-5.4", title: "OpenAI GPT-5.4" }, + { value: "openai-gpt-5.4-mini", title: "OpenAI GPT-5.4 Mini" }, + { value: "openai-gpt-5.4-nano", title: "OpenAI GPT-5.4 Nano" }, + { value: "openai-gpt-5.3-instant", title: "OpenAI GPT-5.3 Instant" }, + { value: "openai-gpt-5.3-codex", title: "OpenAI GPT-5.3 Codex" }, + { value: "openai-gpt-5.2", title: "OpenAI GPT-5.2" }, + { value: "openai-gpt-5.2-instant", title: "OpenAI GPT-5.2 Instant" }, + { value: "openai-gpt-5.1", title: "OpenAI GPT-5.1" }, + { value: "openai-gpt-5.1-instant", title: "OpenAI GPT-5.1 Instant" }, + { value: "openai-gpt-5.1-codex", title: "OpenAI GPT-5.1 Codex" }, + { value: "openai_o1-gpt-5", title: "OpenAI GPT-5" }, + { value: "openai-gpt-5-mini", title: "OpenAI GPT-5 Mini" }, + { value: "openai-gpt-5-nano", title: "OpenAI GPT-5 Nano" }, + { value: "openai-gpt-4.1", title: "OpenAI GPT-4.1" }, + { value: "openai-gpt-4.1-mini", title: "OpenAI GPT-4.1 Mini" }, + { value: "openai-gpt-4.1-nano", title: "OpenAI GPT-4.1 Nano" }, + { value: "openai-gpt-4o", title: "OpenAI GPT-4o" }, + { value: "openai-gpt-4o-mini", title: "OpenAI GPT-4o mini" }, + { value: "openai_o1-o3", title: "OpenAI o3" }, + { value: "openai_o1-o3-mini", title: "OpenAI o3-mini" }, + { value: "openai_o1-o4-mini", title: "OpenAI o4-mini" }, + { value: "openai_o1-o1", title: "OpenAI o1" }, + { value: "google-gemini-3.1-pro", title: "Google Gemini 3.1 Pro" }, + { value: "google-gemini-3-flash", title: "Google Gemini 3 Flash" }, + { + value: "google-gemini-3.1-flash-lite", + title: "Google Gemini 3.1 Flash Lite", + }, + { value: "google-gemini-2.5-pro", title: "Google Gemini 2.5 Pro" }, + { value: "google-gemini-2.5-flash", title: "Google Gemini 2.5 Flash" }, + { + value: "google-gemini-2.5-flash-lite", + title: "Google Gemini 2.5 Flash Lite", + }, + { value: "xai-grok-4.20", title: "xAI Grok 4.20" }, + { value: "xai-grok-4", title: "xAI Grok 4" }, + { value: "xai-grok-4-fast", title: "xAI Grok 4 Fast" }, + { value: "xai-grok-4-1-fast", title: "xAI Grok 4.1 Fast" }, + { value: "xai-grok-code-fast", title: "xAI Grok Code Fast" }, + { value: "perplexity-sonar-pro", title: "Perplexity Sonar Pro" }, + { value: "perplexity-sonar", title: "Perplexity Sonar" }, + { value: "mistral-mistral-large-latest", title: "Mistral Large" }, + { value: "mistral-mistral-medium-latest", title: "Mistral Medium" }, + { value: "mistral-mistral-small-latest", title: "Mistral Small" }, + { value: "mistral-codestral-latest", title: "Mistral Codestral" }, + { value: "mistral-open-mistral-nemo", title: "Mistral Nemo" }, + { value: "groq-llama-3.3-70b-versatile", title: "Groq Llama 3.3 70B" }, + { + value: "groq-meta-llama/llama-4-scout-17b-16e-instruct", + title: "Groq Llama 4 Scout", + }, + { value: "groq-llama-3.1-8b-instant", title: "Groq Llama 3.1 8B" }, + { value: "groq-qwen/qwen3-32b", title: "Groq Qwen3 32B" }, + { value: "groq-openai/gpt-oss-120b", title: "Groq GPT-OSS 120B" }, + { value: "groq-openai/gpt-oss-20b", title: "Groq GPT-OSS 20B" }, + { value: "together-deepseek-ai/DeepSeek-R1", title: "DeepSeek R1" }, + { value: "together-deepseek-ai/DeepSeek-V3", title: "DeepSeek V3" }, + { value: "together-moonshotai/Kimi-K2.5", title: "Kimi K2.5" }, +]; export const STRICT_PLACEHOLDER_RULE = [ "STRENGE REGEL: Gib jeden Platzhalter zeichengetreu (inklusive spitzer Klammern, Großbuchstaben und Unterstrich + Nummer) zurück.",