ccpoad / web /index.html
anyalerob's picture
Upload folder using huggingface_hub
2986042 verified
Raw
History Blame Contribute Delete
20.5 kB
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" type="image/x-icon" href="/web/favicon.ico">
<link rel="apple-touch-icon" href="/web/apple-touch-icon.png">
<link rel="manifest" href="/web/manifest.json">
<meta name="theme-color" content="#3b82f6">
<title data-i18n="index.title">Claude Code & Codex Proxy 代理服务</title>
<link rel="stylesheet" href="/web/assets/css/styles.css?v=__VERSION__">
<script>
window.__prefetch_summary = fetch('/public/summary?range=today')
.then(r => r.json())
.catch(() => null);
</script>
<script defer src="/web/assets/locales/zh-CN.js?v=__VERSION__"></script>
<script defer src="/web/assets/locales/en.js?v=__VERSION__"></script>
<script defer src="/web/assets/js/i18n.js?v=__VERSION__"></script>
<script defer src="/web/assets/js/date-range-selector.js?v=__VERSION__"></script>
<script defer src="/web/assets/js/ui.js?v=__VERSION__"></script>
<script defer src="/web/assets/js/index.js?v=__VERSION__"></script>
</head>
<body class="page-index">
<div class="app-container">
<!-- 主内容区域 -->
<main class="main-content index-main-content">
<div class="content-area">
<!-- 页面标题 -->
<header class="mb-6">
<div class="hero-header animate-slide-up">
<div class="hero-icon">
<svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z"/>
</svg>
</div>
<div>
<h1 class="hero-title" data-i18n="index.heroTitle">
Claude Code & Codex API 代理服务
</h1>
<p class="hero-subtitle" data-i18n="index.heroSubtitle">
智能路由 · 故障切换 · 统计分析
</p>
</div>
</div>
</header>
<!-- 时间范围选择器 -->
<section class="mb-4">
<div class="time-range-container">
<div id="index-time-range" class="time-range-selector"></div>
</div>
</section>
<!-- 按渠道类型统计 -->
<section class="mb-6">
<div class="grid grid-cols-2 animate-slide-up animate-delay-1 gap-space-3">
<!-- Claude Code -->
<div class="channel-card" id="type-anthropic-card">
<div class="channel-card-header">
<div class="channel-card-title">
<div class="channel-icon channel-icon--anthropic">
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 2L2 22h20L12 2zm0 4.5L18.5 20h-13L12 6.5z"/>
</svg>
</div>
<span>Claude Code</span>
</div>
<div class="channel-cost">
<span class="cost-label" data-i18n="common.cost">成本</span>
<span class="cost-value" id="type-anthropic-cost">$0.00</span>
</div>
</div>
<!-- 主要指标 -->
<div class="channel-metrics">
<div class="metric-item">
<div class="metric-value metric-total" id="type-anthropic-requests">0</div>
<div class="metric-label" data-i18n="index.metrics.totalRequests">总请求</div>
</div>
<div class="metric-item">
<div class="metric-value metric-success" id="type-anthropic-success">0</div>
<div class="metric-label" data-i18n="index.metrics.success">成功</div>
</div>
<div class="metric-item">
<div class="metric-value metric-error" id="type-anthropic-error">0</div>
<div class="metric-label" data-i18n="index.metrics.failed">失败</div>
</div>
<div class="metric-item">
<div class="metric-value metric-rate" id="type-anthropic-rate">0.0%</div>
<div class="metric-label" data-i18n="index.metrics.successRate">成功率</div>
</div>
</div>
<!-- Token统计 -->
<div class="token-stats">
<div class="token-item">
<span class="token-label" data-i18n="common.input">输入</span>
<span class="token-value" id="type-anthropic-input">0</span>
</div>
<div class="token-item">
<span class="token-label" data-i18n="common.output">输出</span>
<span class="token-value" id="type-anthropic-output">0</span>
</div>
<div class="token-item">
<span class="token-label" data-i18n="common.cacheRead">缓存读</span>
<span class="token-value token-cache" id="type-anthropic-cache-read">0</span>
</div>
<div class="token-item">
<span class="token-label" data-i18n="common.cacheCreate">缓存创</span>
<span class="token-value token-cache" id="type-anthropic-cache-create">0</span>
</div>
</div>
</div>
<!-- Codex -->
<div class="channel-card" id="type-codex-card">
<div class="channel-card-header">
<div class="channel-card-title">
<div class="channel-icon channel-icon--codex">
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
<path d="M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"/>
</svg>
</div>
<span>Codex</span>
</div>
<div class="channel-cost">
<span class="cost-label" data-i18n="common.cost">成本</span>
<span class="cost-value" id="type-codex-cost">$0.00</span>
</div>
</div>
<!-- 主要指标 -->
<div class="channel-metrics">
<div class="metric-item">
<div class="metric-value metric-total" id="type-codex-requests">0</div>
<div class="metric-label" data-i18n="index.metrics.totalRequests">总请求</div>
</div>
<div class="metric-item">
<div class="metric-value metric-success" id="type-codex-success">0</div>
<div class="metric-label" data-i18n="index.metrics.success">成功</div>
</div>
<div class="metric-item">
<div class="metric-value metric-error" id="type-codex-error">0</div>
<div class="metric-label" data-i18n="index.metrics.failed">失败</div>
</div>
<div class="metric-item">
<div class="metric-value metric-rate" id="type-codex-rate">0.0%</div>
<div class="metric-label" data-i18n="index.metrics.successRate">成功率</div>
</div>
</div>
<!-- Token统计 -->
<div class="token-stats">
<div class="token-item">
<span class="token-label" data-i18n="common.input">输入</span>
<span class="token-value" id="type-codex-input">0</span>
</div>
<div class="token-item">
<span class="token-label" data-i18n="common.output">输出</span>
<span class="token-value" id="type-codex-output">0</span>
</div>
<div class="token-item">
<span class="token-label" data-i18n="common.cacheRead">缓存读</span>
<span class="token-value token-cache" id="type-codex-cache-read">0</span>
</div>
<div class="token-item">
<span class="token-label" data-i18n="common.cacheCreate">缓存创</span>
<span class="token-value token-cache" id="type-codex-cache-create">0</span>
</div>
</div>
</div>
<!-- OpenAI -->
<div class="channel-card" id="type-openai-card">
<div class="channel-card-header">
<div class="channel-card-title">
<div class="channel-icon channel-icon--openai">
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
<path d="M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"/>
</svg>
</div>
<span>OpenAI</span>
</div>
<div class="channel-cost">
<span class="cost-label" data-i18n="common.cost">成本</span>
<span class="cost-value" id="type-openai-cost">$0.00</span>
</div>
</div>
<!-- 主要指标 -->
<div class="channel-metrics">
<div class="metric-item">
<div class="metric-value metric-total" id="type-openai-requests">0</div>
<div class="metric-label" data-i18n="index.metrics.totalRequests">总请求</div>
</div>
<div class="metric-item">
<div class="metric-value metric-success" id="type-openai-success">0</div>
<div class="metric-label" data-i18n="index.metrics.success">成功</div>
</div>
<div class="metric-item">
<div class="metric-value metric-error" id="type-openai-error">0</div>
<div class="metric-label" data-i18n="index.metrics.failed">失败</div>
</div>
<div class="metric-item">
<div class="metric-value metric-rate" id="type-openai-rate">0.0%</div>
<div class="metric-label" data-i18n="index.metrics.successRate">成功率</div>
</div>
</div>
<!-- Token统计 -->
<div class="token-stats">
<div class="token-item">
<span class="token-label" data-i18n="common.input">输入</span>
<span class="token-value" id="type-openai-input">0</span>
</div>
<div class="token-item">
<span class="token-label" data-i18n="common.output">输出</span>
<span class="token-value" id="type-openai-output">0</span>
</div>
<div class="token-item">
<span class="token-label" data-i18n="common.cacheRead">缓存读</span>
<span class="token-value token-cache" id="type-openai-cache-read">0</span>
</div>
</div>
</div>
<!-- Gemini -->
<div class="channel-card" id="type-gemini-card">
<div class="channel-card-header">
<div class="channel-card-title">
<div class="channel-icon channel-icon--gemini">
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 2L2 7v10l10 5 10-5V7L12 2zm0 2.18L19.82 8 12 11.82 4.18 8 12 4.18zM4 9.48l7 3.5v7.84l-7-3.5V9.48zm16 0v7.84l-7 3.5v-7.84l7-3.5z"/>
</svg>
</div>
<span>Google Gemini</span>
</div>
<div class="channel-cost">
<span class="cost-label" data-i18n="common.cost">成本</span>
<span class="cost-value" id="type-gemini-cost">$0.00</span>
</div>
</div>
<!-- 主要指标 -->
<div class="channel-metrics">
<div class="metric-item">
<div class="metric-value metric-total" id="type-gemini-requests">0</div>
<div class="metric-label" data-i18n="index.metrics.totalRequests">总请求</div>
</div>
<div class="metric-item">
<div class="metric-value metric-success" id="type-gemini-success">0</div>
<div class="metric-label" data-i18n="index.metrics.success">成功</div>
</div>
<div class="metric-item">
<div class="metric-value metric-error" id="type-gemini-error">0</div>
<div class="metric-label" data-i18n="index.metrics.failed">失败</div>
</div>
<div class="metric-item">
<div class="metric-value metric-rate" id="type-gemini-rate">0.0%</div>
<div class="metric-label" data-i18n="index.metrics.successRate">成功率</div>
</div>
</div>
<!-- Token统计 -->
<div class="token-stats">
<div class="token-item">
<span class="token-label" data-i18n="common.input">输入</span>
<span class="token-value" id="type-gemini-input">0</span>
</div>
<div class="token-item">
<span class="token-label" data-i18n="common.output">输出</span>
<span class="token-value" id="type-gemini-output">0</span>
</div>
<div class="token-item">
<span class="token-label" data-i18n="common.cacheRead">缓存读</span>
<span class="token-value token-cache" id="type-gemini-cache-read">0</span>
</div>
</div>
</div>
</div>
</section>
<!-- 实时状态栏 - 总览 -->
<section class="mb-6">
<div class="flex index-summary-grid animate-slide-up animate-delay-2 gap-space-3 flex-nowrap">
<div class="summary-card summary-card-success">
<div class="summary-icon">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M20 6L9 17l-5-5"/>
</svg>
</div>
<div class="summary-content">
<div class="summary-value"><span class="metric-success" id="success-requests">--</span>/<span class="metric-error" id="error-requests">--</span> <span class="summary-value-note">(<span id="success-rate">--</span>)</span></div>
<div class="summary-label" data-i18n="index.metrics.successFailed">成功/失败 (成功率)</div>
</div>
</div>
<div class="summary-card summary-card-primary" title="每分钟请求数">
<div class="summary-icon">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<circle cx="12" cy="12" r="10"/>
<path d="M12 6v6l4 2"/>
</svg>
</div>
<div class="summary-content">
<div class="summary-value" id="total-rpm">--</div>
<div class="summary-label" data-i18n="index.metrics.rpm">RPM(峰值 平均 最近)</div>
</div>
</div>
</div>
</section>
<!-- API 接口 -->
<section class="mb-8">
<div class="glass-card animate-slide-up animate-delay-3">
<h3 class="text-xl font-semibold mb-6">
<svg class="inline-block w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2-2v16z"/>
</svg>
<span data-i18n="index.apiSection">API 接口</span>
</h3>
<div class="index-api-list">
<div class="index-api-entry">
<div class="index-api-method index-api-method--post">POST</div>
<div class="index-api-path">/v1/messages</div>
<div class="index-api-desc" data-i18n="index.apiClaudeDesc">Claude API 透明代理</div>
</div>
<div class="index-api-entry">
<div class="index-api-method index-api-method--post">POST</div>
<div class="index-api-path">/v1/responses</div>
<div class="index-api-desc" data-i18n="index.apiCodexDesc">Codex API 透明代理</div>
</div>
<div class="index-api-entry">
<div class="index-api-method index-api-method--post">POST</div>
<div class="index-api-path">/v1beta</div>
<div class="index-api-desc" data-i18n="index.apiGeminiDesc">Gemini 透明代理</div>
</div>
<div class="index-api-entry">
<div class="index-api-method index-api-method--get">GET</div>
<div class="index-api-path">/public/summary</div>
<div class="index-api-desc" data-i18n="index.apiSummaryDesc">公开统计数据</div>
</div>
</div>
<div class="index-api-tip">
<div class="index-api-tip-title" data-i18n="common.info">提示</div>
<div class="index-api-tip-body" data-i18n="index.apiTip">
管理功能需要登录访问,代理服务公开使用
</div>
</div>
</div>
</section>
</div>
</main>
</div>
</body>
</html>