From 31bafaab8dbff03c984df3b2d0b0d743d71b012b Mon Sep 17 00:00:00 2001 From: kaitranntt Date: Mon, 22 Dec 2025 15:34:27 -0500 Subject: [PATCH] feat(api): add Azure Foundry preset Add Microsoft Azure AI Foundry as a provider preset for `ccs api create`. Usage: `ccs api create --preset foundry` This is a cleaner implementation than the postinstall-based approach, leveraging the existing preset system. Co-authored-by: MinhOmega <49482201+MinhOmega@users.noreply.github.com> --- README.md | 3 +++ src/api/services/provider-presets.ts | 11 +++++++++++ src/commands/api-command.ts | 3 ++- ui/src/lib/provider-presets.ts | 13 +++++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 22653876..bcc539aa 100644 --- a/README.md +++ b/README.md @@ -95,9 +95,12 @@ The dashboard provides visual management for all account types: | **OpenRouter** | API Key | `ccs openrouter` | 300+ models, unified API | | **GLM** | API Key | `ccs glm` | Cost-optimized execution | | **Kimi** | API Key | `ccs kimi` | Long-context, thinking mode | +| **Azure Foundry** | API Key | `ccs foundry` | Claude via Microsoft Azure | **OpenRouter Integration** (v7.0.0): CCS v7.0.0 adds OpenRouter with interactive model picker, dynamic discovery, and tier mapping (opus/sonnet/haiku). Create via `ccs api create --preset openrouter` or dashboard. +**Azure Foundry**: Use `ccs api create --preset foundry` to set up Claude via Microsoft Azure AI Foundry. Requires Azure resource and API key from [ai.azure.com](https://ai.azure.com). + ![OpenRouter API Profiles](assets/screenshots/api-profiles-openrouter.webp) > **OAuth providers** authenticate via browser on first run. Tokens are cached in `~/.ccs/cliproxy/auth/`. diff --git a/src/api/services/provider-presets.ts b/src/api/services/provider-presets.ts index 8688cf12..6b28edf9 100644 --- a/src/api/services/provider-presets.ts +++ b/src/api/services/provider-presets.ts @@ -87,6 +87,17 @@ export const PROVIDER_PRESETS: ProviderPreset[] = [ category: 'alternative', alwaysThinkingEnabled: true, }, + { + id: 'foundry', + name: 'Azure Foundry', + description: 'Claude via Microsoft Azure AI Foundry', + baseUrl: 'https://.services.ai.azure.com/api/anthropic', + defaultProfileName: 'foundry', + defaultModel: 'claude-sonnet-4-5', + apiKeyPlaceholder: 'YOUR_AZURE_API_KEY', + apiKeyHint: 'Create resource at ai.azure.com, get API key from Keys tab', + category: 'alternative', + }, ]; /** Get preset by ID */ diff --git a/src/commands/api-command.ts b/src/commands/api-command.ts index 52f423a2..0c8238de 100644 --- a/src/commands/api-command.ts +++ b/src/commands/api-command.ts @@ -426,7 +426,7 @@ async function showHelp(): Promise { console.log(''); console.log(subheader('Options')); console.log( - ` ${color('--preset ', 'command')} Use provider preset (openrouter, glm, glmt, kimi)` + ` ${color('--preset ', 'command')} Use provider preset (openrouter, glm, glmt, kimi, foundry)` ); console.log(` ${color('--base-url ', 'command')} API base URL (create)`); console.log(` ${color('--api-key ', 'command')} API key (create)`); @@ -441,6 +441,7 @@ async function showHelp(): Promise { console.log(` ${color('glm', 'command')} GLM - Claude via Z.AI (GitHub Copilot)`); console.log(` ${color('glmt', 'command')} GLMT - GLM with Thinking mode`); console.log(` ${color('kimi', 'command')} Kimi - Moonshot AI reasoning model`); + console.log(` ${color('foundry', 'command')} Azure Foundry - Claude via Microsoft Azure`); console.log(''); console.log(subheader('Examples')); console.log(` ${dim('# Interactive wizard')}`); diff --git a/ui/src/lib/provider-presets.ts b/ui/src/lib/provider-presets.ts index c91a0ffd..99bc65e1 100644 --- a/ui/src/lib/provider-presets.ts +++ b/ui/src/lib/provider-presets.ts @@ -80,6 +80,19 @@ export const PROVIDER_PRESETS: ProviderPreset[] = [ apiKeyHint: 'Get your API key from Moonshot AI', category: 'alternative', }, + { + id: 'foundry', + name: 'Azure Foundry', + description: 'Claude via Microsoft Azure AI Foundry', + baseUrl: 'https://.services.ai.azure.com/api/anthropic', + defaultProfileName: 'foundry', + badge: 'Azure', + defaultModel: 'claude-sonnet-4-5', + requiresApiKey: true, + apiKeyPlaceholder: 'YOUR_AZURE_API_KEY', + apiKeyHint: 'Create resource at ai.azure.com, get API key from Keys tab', + category: 'alternative', + }, ]; /** Get presets by category */