mirror of
https://github.com/tiennm99/ccs.git
synced 2026-07-17 12:16:59 +00:00
feat: deprecate GitHub Copilot compatibility surfaces (#1196)
This commit is contained in:
@@ -26,7 +26,8 @@ CCS gives you one stable command surface while letting you switch between:
|
||||
|
||||
- multiple runtimes such as Claude Code, Factory Droid, and Codex CLI
|
||||
- multiple Claude subscriptions and isolated account contexts
|
||||
- OAuth providers like Codex, Copilot, Kiro, Claude, Qwen, Kimi, and more
|
||||
- OAuth providers like Codex, Kiro, Claude, Qwen, Kimi, and more, with legacy
|
||||
Copilot compatibility for existing setups
|
||||
- API and local-model profiles like GLM, Kimi, OpenRouter, Ollama, llama.cpp,
|
||||
Novita, and Alibaba Coding Plan
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# CCS Product Development Requirements (PDR)
|
||||
|
||||
Last Updated: 2026-04-08
|
||||
Last Updated: 2026-05-07
|
||||
|
||||
## Product Overview
|
||||
|
||||
@@ -31,7 +31,7 @@ Developers using Claude Code face these challenges:
|
||||
CCS provides:
|
||||
|
||||
1. **Multi-Account Claude**: Isolated instances via `CLAUDE_CONFIG_DIR`
|
||||
2. **OAuth Providers**: Zero-config Gemini, Codex, Antigravity, Copilot, Kiro (ghcp) integration
|
||||
2. **OAuth Providers**: Zero-config Gemini, Codex, Antigravity, Kiro, and other active OAuth integrations, with deprecated Copilot compatibility for existing setups
|
||||
3. **AI Providers**: Dedicated CLIProxy dashboard for Gemini, Codex, Claude, Vertex, and OpenAI-compatible API-key families
|
||||
4. **API Profiles**: GLM, Kimi, OpenRouter, any Anthropic-compatible API
|
||||
5. **Visual Dashboard**: React SPA for configuration management
|
||||
@@ -68,8 +68,8 @@ CCS provides:
|
||||
- Share commands, skills, agents across accounts
|
||||
|
||||
### FR-003: OAuth Provider Integration
|
||||
- Support Gemini, Codex, Antigravity, Copilot, Kiro (ghcp) OAuth flows
|
||||
- Browser-based authentication (Authorization Code flow for most, Device Code for ghcp)
|
||||
- Support Gemini, Codex, Antigravity, Kiro, and deprecated Copilot compatibility OAuth flows
|
||||
- Browser-based authentication (Authorization Code flow for most, Device Code for ghcp compatibility)
|
||||
- Token caching and refresh
|
||||
|
||||
### FR-004: API Profile Management
|
||||
@@ -273,7 +273,7 @@ CCS provides:
|
||||
|
||||
### v7.2 Release (Complete)
|
||||
- [x] Kiro (AWS) OAuth provider support via CLIProxyAPIPlus
|
||||
- [x] GitHub Copilot (ghcp) OAuth provider via Device Code flow
|
||||
- [x] GitHub Copilot (ghcp) OAuth provider via Device Code flow (deprecated compatibility)
|
||||
- [x] Authorization Code flow for Kiro (port 9876)
|
||||
- [x] Device Code flow for ghcp (no local port needed)
|
||||
|
||||
@@ -334,8 +334,8 @@ CCS provides:
|
||||
### External Services
|
||||
- Anthropic Claude API
|
||||
- Google Gemini API
|
||||
- GitHub Codex/Copilot API
|
||||
- GitHub Copilot (ghcp - Device Code OAuth)
|
||||
- GitHub Codex API
|
||||
- GitHub Copilot (ghcp - deprecated Device Code OAuth compatibility)
|
||||
- AWS Kiro (Authorization Code OAuth)
|
||||
- Z.AI GLM API
|
||||
- OpenRouter API
|
||||
|
||||
@@ -22,7 +22,7 @@ All major modularization work is complete. The codebase evolved from monolithic
|
||||
| 8 | Auth Monitor | `monitoring/auth-monitor/` (465->8 files) |
|
||||
| 9 | Test Infrastructure | 1407 tests, 90% coverage |
|
||||
| 10 | Remote CLIProxy | `proxy-config-resolver.ts`, `remote-proxy-client.ts` |
|
||||
| 11 | Kiro + ghcp Providers | OAuth support via CLIProxyAPIPlus (v7.2) |
|
||||
| 11 | Kiro + legacy ghcp Providers | OAuth support via CLIProxyAPIPlus (v7.2) |
|
||||
| 12 | Hybrid Quota Management | `quota-manager.ts`, `quota-fetcher.ts` (v7.14) |
|
||||
| 13 | Docker Support | `docker/` directory with Dockerfile, Compose, entrypoint |
|
||||
| 14 | Image Analysis Hook | Vision proxying via CLIProxy transformers (v7.34) |
|
||||
@@ -41,6 +41,7 @@ All major modularization work is complete. The codebase evolved from monolithic
|
||||
|
||||
### Recent Fixes
|
||||
|
||||
- **2026-05-07**: **#1103** GitHub Copilot is now treated as a deprecated compatibility bridge. The dashboard moves Copilot out of the active Identity & Access section and into Deprecated, quick setup no longer offers `ghcp` for new onboarding, CLI/help/config copy marks Copilot as deprecated, and existing `ccs copilot` / `ghcp` compatibility paths remain available for current setups.
|
||||
- **2026-05-07**: **#1189** Headless settings-profile delegation now preserves native Claude passthrough args without a Claude flag allowlist. Explicit `--channels` values reach Claude Code, future native flags can carry multiple adjacent values, malformed CCS-owned flags no longer swallow the next native flag, and `--prompt=<text>` routes through headless delegation consistently with `--prompt <text>`.
|
||||
- **2026-05-03**: **#1172** Local CLIProxy config generation now keeps the CPAMC management dashboard aligned with backend selection. `backend: original` points to the upstream dashboard, `backend: plus` points to the CCS-maintained CPAMC fork, `cliproxy.management_panel_repository` lets advanced users override the panel repository, and stale generated configs are regenerated when the expected panel source changes.
|
||||
- **2026-04-30**: **#1153** Native Claude launches now accept session-scoped `--effort low|medium|high|xhigh|max` overrides through CCS without mutating global Claude settings. CCS validates invalid or missing effort values before spawning Claude, normalizes accepted values, keeps default headless `-p/--prompt` launches on native Claude instead of delegation parsing, and preserves CLIProxy/Codex/Droid effort aliases.
|
||||
@@ -214,7 +215,7 @@ worktrees:
|
||||
|
||||
- **#158**: Fix AGY OAuth flow
|
||||
- **#157**: ~~Add Kiro auth support from CLIProxyAPIPlus~~ **COMPLETE** (v7.2)
|
||||
- GitHub Copilot (ghcp) Device Code flow **COMPLETE** (v7.2)
|
||||
- GitHub Copilot (ghcp) Device Code flow **COMPLETE** (v7.2, now deprecated compatibility)
|
||||
- Hybrid quota management **COMPLETE** (v7.14)
|
||||
|
||||
---
|
||||
@@ -225,7 +226,7 @@ worktrees:
|
||||
|-----------|--------|--------|
|
||||
| Modularization (Phases 1-9) | COMPLETE | - |
|
||||
| Remote CLIProxy Support (#142) | COMPLETE | v7.1 |
|
||||
| Kiro + GitHub Copilot OAuth (#157) | COMPLETE | v7.2 |
|
||||
| Kiro + GitHub Copilot OAuth (#157) | COMPLETE, Copilot now deprecated compatibility | v7.2 |
|
||||
| Hybrid Quota Management | COMPLETE | v7.14 |
|
||||
| Docker Support (PR #345) | COMPLETE | v7.23 |
|
||||
| Image Analysis Hook | COMPLETE | v7.34 |
|
||||
|
||||
@@ -14,7 +14,7 @@ CLIProxyAPI is a local OAuth proxy binary that enables seamless integration with
|
||||
|
||||
### Local Backend Choice
|
||||
|
||||
CCS defaults to the original `router-for-me/CLIProxyAPI` backend because it is the stable MIT upstream. The `plus` backend is an explicit opt-in path that downloads the community-maintained `kaitranntt/CLIProxyAPIPlus` fork for providers that still require Plus-only support, such as Kiro, GitHub Copilot, Cursor, GitLab, CodeBuddy, and Kilo. CCS does not silently downgrade `backend: plus` to `original`; users choose that backend deliberately when they need those providers.
|
||||
CCS defaults to the original `router-for-me/CLIProxyAPI` backend because it is the stable MIT upstream. The `plus` backend is an explicit opt-in path that downloads the community-maintained `kaitranntt/CLIProxyAPIPlus` fork for providers that still require Plus-only support, such as Kiro, Cursor, GitLab, CodeBuddy, Kilo, and deprecated GitHub Copilot compatibility. CCS does not silently downgrade `backend: plus` to `original`; users choose that backend deliberately when they need those providers.
|
||||
|
||||
Generated local CLIProxy configs also keep the management dashboard aligned with the selected backend. `backend: original` uses upstream CPAMC (`router-for-me/Cli-Proxy-API-Management-Center`), while `backend: plus` uses the CCS-maintained dashboard fork (`kaitranntt/Cli-Proxy-API-Management-Center`). Advanced users can override the generated `remote-management.panel-github-repository` value by setting `cliproxy.management_panel_repository` in `~/.ccs/config.yaml`; CCS will regenerate stale local CLIProxy configs when the expected dashboard repository changes.
|
||||
|
||||
@@ -40,7 +40,7 @@ Generated local CLIProxy configs also keep the management dashboard aligned with
|
||||
| | - Callback to localhost:PORT
|
||||
| |
|
||||
| +---> Device Code Flow (no port needed)
|
||||
| - GitHub Copilot (ghcp)
|
||||
| - GitHub Copilot (ghcp, deprecated compatibility)
|
||||
| - User enters code at github.com/login/device
|
||||
| - Polls for token completion
|
||||
| |
|
||||
@@ -73,7 +73,7 @@ Generated local CLIProxy configs also keep the management dashboard aligned with
|
||||
+---> GitHub (Codex)
|
||||
+---> Antigravity (AGY)
|
||||
+---> AWS Kiro (Claude-powered)
|
||||
+---> GitHub Copilot (ghcp)
|
||||
+---> GitHub Copilot (ghcp, deprecated compatibility)
|
||||
+---> OpenAI-compatible endpoints
|
||||
```
|
||||
|
||||
@@ -85,7 +85,7 @@ Generated local CLIProxy configs also keep the management dashboard aligned with
|
||||
| Codex | `codex` | Authorization Code | 9876 | CLIProxyAPI |
|
||||
| Antigravity | `agy` | Authorization Code | 9876 | CLIProxyAPI |
|
||||
| Kiro (AWS) | `kiro` | Method-aware (default: Device Code) | 9876 | CLIProxyAPIPlus fork |
|
||||
| GitHub Copilot | `ghcp` | Device Code | none | CLIProxyAPIPlus fork |
|
||||
| GitHub Copilot (deprecated) | `ghcp` | Device Code | none | CLIProxyAPIPlus fork |
|
||||
| Cursor | `cursor` | Browser URL polling | none | CLIProxyAPIPlus fork |
|
||||
|
||||
### Codex Duplicate-Email Account Identity
|
||||
@@ -299,7 +299,7 @@ When CCS detects exhaustion and a healthy fallback exists, it temporarily pauses
|
||||
| | - Claude: policy limits endpoint
|
||||
| | - Codex: ChatGPT usage windows
|
||||
| | - Gemini CLI: Code Assist quota buckets
|
||||
| | - GitHub Copilot: copilot_internal/user snapshots
|
||||
| | - GitHub Copilot: copilot_internal/user snapshots (deprecated compatibility)
|
||||
| |
|
||||
| +---> Detect tier (free/paid/unknown)
|
||||
| |
|
||||
@@ -391,7 +391,7 @@ function selectBestAccount(accounts: AccountInfo[]): AccountInfo | null {
|
||||
|
||||
### OAuth Providers - Device Code Flow
|
||||
|
||||
**Providers**: GitHub Copilot (ghcp)
|
||||
**Providers**: GitHub Copilot (ghcp, deprecated compatibility)
|
||||
|
||||
Provider identity note:
|
||||
- Providers that do not expose a reliable email no longer require a manual nickname during first auth.
|
||||
@@ -591,7 +591,7 @@ Image Analysis Hook enables vision model proxying through CLIProxy with automati
|
||||
| Codex | ✓ | Via CCS ImageAnalysis provider route |
|
||||
| Antigravity | ✓ | Via CCS ImageAnalysis provider route |
|
||||
| Kiro | ✓ | Via mapped CCS provider route when configured |
|
||||
| Copilot | ✓ | Via mapped ghcp provider route |
|
||||
| Copilot | ✓ | Deprecated compatibility route via mapped ghcp provider |
|
||||
| GLM/Kimi | ✓ | Via explicit or fallback backend mapping |
|
||||
|
||||
---
|
||||
|
||||
@@ -100,7 +100,7 @@ export const PROVIDER_CAPABILITIES: Record<CLIProxyProvider, ProviderCapabilitie
|
||||
},
|
||||
ghcp: {
|
||||
displayName: 'GitHub Copilot (OAuth)',
|
||||
description: 'GitHub Copilot via OAuth',
|
||||
description: 'Deprecated GitHub Copilot compatibility via OAuth',
|
||||
oauthFlow: 'device_code',
|
||||
callbackPort: null,
|
||||
callbackProviderName: 'copilot',
|
||||
|
||||
@@ -129,7 +129,7 @@ export const ROOT_COMMAND_CATALOG: readonly RootCommandEntry[] = [
|
||||
},
|
||||
{
|
||||
name: 'copilot',
|
||||
summary: 'Run or manage the GitHub Copilot bridge',
|
||||
summary: 'Run or manage the deprecated GitHub Copilot bridge',
|
||||
group: 'runtime',
|
||||
visibility: 'public',
|
||||
},
|
||||
@@ -198,7 +198,7 @@ export const BUILTIN_PROVIDER_SHORTCUTS: readonly ShortcutEntry[] = CLIPROXY_PRO
|
||||
qwen: 'Qwen Code via CLIProxy OAuth',
|
||||
iflow: 'iFlow via CLIProxy OAuth',
|
||||
kiro: 'Kiro via CLIProxy OAuth',
|
||||
ghcp: 'GitHub Copilot via CLIProxy OAuth',
|
||||
ghcp: 'Deprecated GitHub Copilot via CLIProxy OAuth',
|
||||
claude: 'Claude via CLIProxy OAuth',
|
||||
kimi: 'Kimi via CLIProxy OAuth',
|
||||
cursor: 'Cursor via CLIProxy OAuth',
|
||||
|
||||
@@ -73,7 +73,13 @@ function printCopilotWarnings(messages: string[]): void {
|
||||
* Show help for copilot commands.
|
||||
*/
|
||||
function handleHelp(): number {
|
||||
console.log('GitHub Copilot Integration');
|
||||
console.log('GitHub Copilot Integration (deprecated)');
|
||||
console.log('');
|
||||
console.log(
|
||||
warn(
|
||||
'Deprecated: GitHub usage-based Copilot billing begins June 1, 2026. Existing local setups remain available for compatibility; prefer Codex or another active provider for new work.'
|
||||
)
|
||||
);
|
||||
console.log('');
|
||||
console.log('Usage: ccs copilot <subcommand>');
|
||||
console.log('');
|
||||
|
||||
@@ -290,7 +290,7 @@ export async function handleHelpCommand(writeLine: HelpWriter = console.log): Pr
|
||||
{ name: 'ccs proxy --help', summary: 'Deep help for the OpenAI-compatible local proxy' },
|
||||
{ name: 'ccs docker --help', summary: 'Deep help for Docker deployment commands' },
|
||||
{ name: 'ccs cursor --help', summary: 'Deep help for Cursor runtime/admin commands' },
|
||||
{ name: 'ccs copilot --help', summary: 'Deep help for GitHub Copilot commands' },
|
||||
{ name: 'ccs copilot --help', summary: 'Deep help for deprecated GitHub Copilot commands' },
|
||||
],
|
||||
writeLine
|
||||
);
|
||||
|
||||
@@ -162,11 +162,14 @@ export function generateYamlWithComments(config: UnifiedConfig): string {
|
||||
lines.push('');
|
||||
}
|
||||
|
||||
// Copilot section (GitHub Copilot proxy)
|
||||
// Copilot section (deprecated GitHub Copilot compatibility bridge)
|
||||
if (config.copilot) {
|
||||
lines.push('# ----------------------------------------------------------------------------');
|
||||
lines.push('# Copilot: GitHub Copilot API proxy (via copilot-api)');
|
||||
lines.push('# Uses your existing GitHub Copilot subscription with Claude Code.');
|
||||
lines.push('# Copilot: Deprecated GitHub Copilot compatibility bridge (via copilot-api)');
|
||||
lines.push(
|
||||
'# Existing local setups remain available, but prefer Codex or another active provider.'
|
||||
);
|
||||
lines.push('# GitHub usage-based Copilot billing begins June 1, 2026.');
|
||||
lines.push('#');
|
||||
lines.push('# !! DISCLAIMER - USE AT YOUR OWN RISK !!');
|
||||
lines.push('# This uses an UNOFFICIAL reverse-engineered API.');
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Copilot and Cursor IDE integration configuration types and defaults.
|
||||
*
|
||||
* Covers:
|
||||
* - CopilotConfig: GitHub Copilot proxy integration (strictly opt-in)
|
||||
* - CopilotConfig: deprecated GitHub Copilot proxy compatibility (strictly opt-in)
|
||||
* - CursorConfig: Cursor IDE proxy daemon
|
||||
*/
|
||||
|
||||
@@ -13,7 +13,7 @@ export type CopilotAccountType = 'individual' | 'business' | 'enterprise';
|
||||
|
||||
/**
|
||||
* Copilot API configuration.
|
||||
* Enables GitHub Copilot subscription usage via copilot-api proxy.
|
||||
* Enables deprecated GitHub Copilot compatibility via copilot-api proxy.
|
||||
* Strictly opt-in - disabled by default.
|
||||
*
|
||||
* !! DISCLAIMER - USE AT YOUR OWN RISK !!
|
||||
|
||||
@@ -68,7 +68,7 @@ export interface UnifiedConfig {
|
||||
global_env?: GlobalEnvConfig;
|
||||
/** Cross-profile continuity inheritance mapping */
|
||||
continuity?: ContinuityConfig;
|
||||
/** Copilot API configuration (GitHub Copilot proxy) */
|
||||
/** Copilot API configuration (deprecated GitHub Copilot compatibility bridge) */
|
||||
copilot?: CopilotConfig;
|
||||
/** Cursor IDE configuration (Cursor proxy daemon) */
|
||||
cursor?: CursorConfig;
|
||||
|
||||
@@ -102,7 +102,6 @@ function buildNavGroups(t: (key: string) => string): SidebarGroupDef[] {
|
||||
{ path: '/cliproxy/control-panel', icon: Gauge, label: t('nav.controlPanel') },
|
||||
],
|
||||
},
|
||||
{ path: '/copilot', icon: Github, label: t('nav.githubCopilot') },
|
||||
{
|
||||
path: '/accounts',
|
||||
icon: Users,
|
||||
@@ -126,6 +125,11 @@ function buildNavGroups(t: (key: string) => string): SidebarGroupDef[] {
|
||||
{
|
||||
title: t('nav.deprecated'),
|
||||
items: [
|
||||
{
|
||||
path: '/copilot',
|
||||
icon: Github,
|
||||
label: `${t('nav.githubCopilot')} (${t('nav.deprecated')})`,
|
||||
},
|
||||
{
|
||||
path: '/legacy/cursor',
|
||||
iconSrc: '/assets/sidebar/cursor.svg',
|
||||
|
||||
@@ -25,7 +25,6 @@ const WIZARD_PROVIDER_ORDER: CLIProxyProvider[] = [
|
||||
'iflow',
|
||||
'kilo',
|
||||
'kiro',
|
||||
'ghcp',
|
||||
];
|
||||
|
||||
export const PROVIDERS: ProviderOption[] = WIZARD_PROVIDER_ORDER.map((id) => ({
|
||||
|
||||
+24
-4
@@ -1278,7 +1278,12 @@ const resources = {
|
||||
},
|
||||
copilotPage: {
|
||||
title: 'Copilot',
|
||||
subtitle: 'GitHub Copilot proxy',
|
||||
subtitle: 'Deprecated GitHub Copilot compatibility bridge',
|
||||
deprecatedBadge: 'Deprecated',
|
||||
deprecationTitle: 'Deprecated compatibility bridge',
|
||||
deprecationItem1: 'GitHub usage-based Copilot billing begins June 1, 2026',
|
||||
deprecationItem2: 'Existing local setups remain available for compatibility',
|
||||
deprecationItem3: 'Prefer Codex or another active provider for new work',
|
||||
setup: 'Setup',
|
||||
auth: 'Auth',
|
||||
daemon: 'Daemon',
|
||||
@@ -3813,7 +3818,12 @@ const resources = {
|
||||
},
|
||||
copilotPage: {
|
||||
title: 'Copilot',
|
||||
subtitle: 'GitHub Copilot 代理',
|
||||
subtitle: '已弃用的 GitHub Copilot 兼容桥接',
|
||||
deprecatedBadge: '已弃用',
|
||||
deprecationTitle: '已弃用的兼容桥接',
|
||||
deprecationItem1: 'GitHub Copilot 用量计费将于 2026 年 6 月 1 日开始',
|
||||
deprecationItem2: '现有本地配置仍可作为兼容路径继续使用',
|
||||
deprecationItem3: '新的配置请优先使用 Codex 或其他活跃提供商',
|
||||
setup: '安装',
|
||||
auth: '认证',
|
||||
daemon: '守护进程',
|
||||
@@ -6396,7 +6406,12 @@ const resources = {
|
||||
},
|
||||
copilotPage: {
|
||||
title: 'Copilot',
|
||||
subtitle: 'Proxy GitHub Copilot',
|
||||
subtitle: 'Cầu nối tương thích GitHub Copilot đã ngừng ưu tiên',
|
||||
deprecatedBadge: 'Đã ngừng ưu tiên',
|
||||
deprecationTitle: 'Cầu nối tương thích đã ngừng ưu tiên',
|
||||
deprecationItem1: 'GitHub Copilot bắt đầu tính phí theo mức dùng từ 2026-06-01',
|
||||
deprecationItem2: 'Thiết lập cục bộ hiện có vẫn được giữ cho tương thích',
|
||||
deprecationItem3: 'Thiết lập mới nên dùng Codex hoặc nhà cung cấp còn hoạt động',
|
||||
setup: 'Cài đặt',
|
||||
auth: 'Xác thực',
|
||||
daemon: 'Daemon',
|
||||
@@ -9004,7 +9019,12 @@ const resources = {
|
||||
},
|
||||
copilotPage: {
|
||||
title: 'Copilot',
|
||||
subtitle: 'GitHub Copilot プロキシ',
|
||||
subtitle: '非推奨の GitHub Copilot 互換ブリッジ',
|
||||
deprecatedBadge: '非推奨',
|
||||
deprecationTitle: '非推奨の互換ブリッジ',
|
||||
deprecationItem1: 'GitHub Copilot の従量課金は 2026-06-01 に開始されます',
|
||||
deprecationItem2: '既存のローカル設定は互換用として引き続き利用できます',
|
||||
deprecationItem3: '新規設定では Codex または他の有効なプロバイダーを優先してください',
|
||||
setup: 'セットアップ',
|
||||
auth: '認証',
|
||||
daemon: 'デーモン',
|
||||
|
||||
@@ -125,6 +125,9 @@ export function CopilotPage() {
|
||||
<div className="flex items-center gap-2">
|
||||
<Github className="w-5 h-5 text-primary" />
|
||||
<h1 className="font-semibold">{t('copilotPage.title')}</h1>
|
||||
<span className="rounded border border-amber-300 bg-amber-100 px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-amber-800 dark:border-amber-900/60 dark:bg-amber-950/40 dark:text-amber-200">
|
||||
{t('copilotPage.deprecatedBadge')}
|
||||
</span>
|
||||
</div>
|
||||
<Button
|
||||
variant="ghost"
|
||||
@@ -145,6 +148,21 @@ export function CopilotPage() {
|
||||
<LoadingSidebar />
|
||||
) : (
|
||||
<div className="p-3 space-y-4">
|
||||
{/* Deprecation Banner */}
|
||||
<div className="rounded-md border border-amber-500/50 bg-amber-500/15 p-3 space-y-1.5">
|
||||
<div className="flex items-center gap-2">
|
||||
<AlertTriangle className="h-4 w-4 text-amber-600 dark:text-amber-400 shrink-0" />
|
||||
<span className="text-xs font-semibold text-amber-800 dark:text-amber-200">
|
||||
{t('copilotPage.deprecationTitle')}
|
||||
</span>
|
||||
</div>
|
||||
<ul className="text-[11px] text-amber-700 dark:text-amber-300 space-y-0.5 pl-6 list-disc">
|
||||
<li>{t('copilotPage.deprecationItem1')}</li>
|
||||
<li>{t('copilotPage.deprecationItem2')}</li>
|
||||
<li>{t('copilotPage.deprecationItem3')}</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
{/* Warning Banner - Disclaimer */}
|
||||
<div className="rounded-md border border-yellow-500/50 bg-yellow-500/15 p-3 space-y-1.5">
|
||||
<div className="flex items-center gap-2">
|
||||
|
||||
Reference in New Issue
Block a user