fawney19
|
26ede849e2
|
refactor: 拆分大型模块为 mixin/子模块结构
- cli_handler_base.py 拆分为 7 个 mixin (event/monitor/prefetch/request/sse_helpers/stream/sync)
- usage/service.py 拆分为 6 个子模块 (types/active_requests/cache_analysis/lifecycle/pricing/query/recording)
- models/database 拆分为独立模型文件 (auth/misc/model/provider/stats/usage/user)
- DUMMY_THOUGHT_SIGNATURE 常量提升到 core/api_format/conversion/constants 统一管理
- task/service.py 内联导入提升为顶层导入
- 流处理函数签名移除冗余的 http_client 参数
|
2026-02-14 12:55:58 +08:00 |
|
 fawney19andLewisPen
|
f464f32e48
|
feat: 支持系统设置中自定义全站名称和副标题
新增 site_name 和 site_subtitle 两个系统配置项,允许管理员在后台自定义
站点品牌名称(默认 Aether)和副标题(默认 AI Gateway)。
- 后端:DEFAULT_CONFIGS 新增配置项,公开 /api/public/site-info 端点
- 后端:邮件发送 app_name 回退链增加 site_name
- 前端:新增 useSiteInfo composable 全局缓存站点信息
- 前端:首页、后台布局、登录页、指南页面全部改为动态读取
- 前端:系统设置页新增「站点信息」配置区块
- 前端:配置导出文件名跟随站点名称
- 优化:请求失败允许重试,保存后即时生效无需刷新页面
- 优化:document.title 随站点名称动态更新
Closes #176
Co-authored-by: LewisPen <LewisPen@nyadoo.com>
|
2026-02-13 21:50:05 +08:00 |
|
fawney19
|
c171d65d3f
|
Merge pull request #175 from AAEE86/dev
fix: Kiro 导入授权时无法判断重复
|
2026-02-13 21:31:06 +08:00 |
|
fawney19
|
d01caaa4b1
|
refactor(provider-ui): 调整供应商信息布局,网站和描述展示方式互换
- 详情抽屉:移除描述内联编辑,网站地址改为独占整行显示完整 URL
- 列表/卡片视图:网站改为名称旁的 ExternalLink 图标,新增描述文本展示
- 移除不再使用的 formatWebsiteDisplay 工具函数和描述编辑相关代码
|
2026-02-13 21:27:30 +08:00 |
|
fawney19
|
941e599d36
|
feat(provider-ops): 新增 Sub2API 架构支持并优化余额分项显示
- 新增 Sub2ApiArchitecture 和 Sub2ApiBalanceAction,支持 Sub2API 风格中转站
- 前端 provider 列表支持 balance + points 分项显示
- 验证弹窗适配 Sub2API 余额和积分的分开展示
|
2026-02-13 21:03:21 +08:00 |
|
fawney19
|
d6b39babf5
|
refactor(provider-ops): 重构认证配置为 schema-driven 模式
后端架构类通过 get_credentials_schema() 返回带 x-* 扩展字段的 JSON Schema,
前端根据 schema 动态渲染表单、构建请求、验证和格式化显示。
新增架构只需后端一个文件,前端零改动。
主要变更:
- 删除前端手写模板文件(anyrouter.ts, cubence.ts, nekocode.ts, new-api.ts, yescode.ts)
- 新增 schema-utils.ts 实现 schema 到表单的转换、请求构建、验证和格式化
- 新增 field-hooks.ts 支持 schema 声明式字段联动钩子
- 后端 base.py 提供 parse_verify_response 默认实现,减少子类重复代码
- 各架构余额查询逻辑复用 balance.py 中的通用函数
- 删除废弃的 one_api.py 架构,新增架构 hidden 属性
- API 返回 credentials_schema 供前端消费
|
2026-02-13 16:41:30 +08:00 |
|
fawney19
|
7e68882872
|
style: 修正 PR #174 引入的 import 排序问题
|
2026-02-13 14:18:51 +08:00 |
|
fawney19
|
e06f6c1935
|
Merge pull request #174 from hemo94931/dev
fix(conversion): 修复 openai cli tool 调用空 call_id 导致上游失败
|
2026-02-13 14:17:48 +08:00 |
|
 fawney19andLewisPen
|
599a62d722
|
fix: 补充 OpenAI CLI normalizer 图片格式双向转换
- 将 _image_url_to_block 从 OpenAINormalizer 提升到基类 FormatNormalizer
- OpenAI CLI normalizer 新增 ImageBlock 的解析和输出支持
- 修复 Chat -> CLI 跨格式路由时图片内容丢失
Co-Authored-By: LewisPen <LewisPen@nyadoo.com>
|
2026-02-13 13:59:57 +08:00 |
|
fawney19
|
d690dcadc7
|
refactor: 修复候选分页逻辑并拆分配额检查模块
- list_all_candidates 返回 provider_batch_count,区分"无候选"与"无 Provider"
避免分页在有 Provider 但无候选时提前终止
- 将配额检查逻辑从 aware_scheduler.py 拆分到 quota_skipper.py
- 提取 reorder_candidates 方法,支持跨页汇总后全局重排序
- CandidateResolver 分页循环改用 provider_batch_count 判断终止
- candidate extra_data 中新增 mapping_matched_model 字段
- 新增契约测试和分页行为测试
|
2026-02-13 13:28:40 +08:00 |
|
fawney19
|
4c83780b5e
|
chore: 调整 Nginx 代理超时配置并移除废弃的 concurrency_slot_ttl
- proxy_connect_timeout 从 600s 降至 60s
- proxy_send_timeout/proxy_read_timeout 从 600s 升至 3600s 以支持长时间流式响应
- 移除已无引用的 concurrency_slot_ttl 配置项
|
2026-02-12 11:57:42 +08:00 |
|
fawney19
|
be430ebdde
|
perf: 降低 lru_cache 上限并限制流式响应块内存占用
- 缩减 model_permissions / tiktoken / formula_engine 的 lru_cache maxsize
- StreamUsageTracker 响应块增加 4MB 大小限制,超限后只计数不存储
- raw_chunks 改用 deque(maxlen=50) 避免无限增长
- HardwareTooltip 导入路径修正、tooltip 延迟归零、文案中文化
|
2026-02-12 11:41:42 +08:00 |
|
 fawney19andAAEE86
|
483d536e2c
|
perf: cherry-pick PR #172 性能优化(不含 orjson)
- tiktoken 编码器改为 @lru_cache 全局缓存,避免多实例重复初始化
- 前缀匹配按长度排序,避免短前缀抢先匹配
- AuthService 更新 last_used_at 时临时关闭 expire_on_commit,减少额外 SELECT
- UsageService.record_usage_batch 改用 bulk_insert_mappings 批量插入
- 已有记录查询增加 selectinload 预加载,避免 N+1
- Gemini normalizer 长行格式化
Co-Authored-By: AAEE86 <33052466+AAEE86@users.noreply.github.com>
|
2026-02-12 10:58:14 +08:00 |
|
fawney19
|
f80deea110
|
chore: bump aether-proxy version to 0.1.5
|
2026-02-11 23:35:23 +08:00 |
|
fawney19
|
6956536830
|
refactor: 将配置导入导出常量移至文件顶部
|
2026-02-11 23:27:48 +08:00 |
|
fawney19
|
01c725a2ee
|
Merge pull request #170 from RWDai/fix-config-version
fix: 配置导入导出版本号统一常量管理,移除前端硬编码版本校验
|
2026-02-11 23:26:33 +08:00 |
|
fawney19
|
1c2a8119c0
|
feat: delegate 客户端替换为 hyper 原生实现,新增代理管理功能
aether-proxy:
- 用 hyper-util Client + 自定义 InstrumentedConnector 替换 reqwest delegate 客户端
- 支持 HTTP/HTTPS 自动 TLS,ALPN h2 协商,connect/tls 分阶段计时
- ConnectTiming 通过 hyper extensions 传递,上游响应细分 connect_ms/tls_ms/ttfb_ms
- upgrade 命令在非 root 下跳过 systemd restart 并提示手动操作
后端:
- 新增 /admin/proxy-nodes/test-url 接口,支持直接测试代理 URL 连通性
- 新增 /admin/proxy-nodes/hmac-key 接口,获取 HMAC Key 供部署使用
- 提取 _test_proxy_connectivity 公共函数,消除 test_node 中的重复代码
- candidate_resolver 在 extra_data 中输出 needs_conversion/provider_api_format
- stats_aggregator 小时聚合增加 IntegrityError 冲突重试
前端:
- 请求时间线组件展示代理 timing 细分(DNS/连接/TLS/TTFB/上游处理)
- 请求时间线增加格式转换分界标记和 conversion badge
- ProxyNodes 页面新增代理 URL 测试和 HMAC Key 复制功能
- HardwareTooltip 从 Popover 改为 Tooltip 组件
|
2026-02-11 23:24:59 +08:00 |
|
fawney19
|
943ca79951
|
chore(aether-proxy): bump version to 0.1.4
|
2026-02-11 17:29:37 +08:00 |
|
fawney19
|
62c05093a0
|
fix(docker): 统一 max-requests 默认值为 4000
PR #171 中 max-requests 的 fallback 默认值 (2000) 与 jitter 计算的默认值 (4000) 不一致,统一为 4000
|
2026-02-11 17:26:22 +08:00 |
|
fawney19
|
d71d4e24be
|
Merge pull request #171 from AAEE86/dev
refactor(docker): 优化 Gunicorn 配置并提升代码可读性
|
2026-02-11 17:21:19 +08:00 |
|
fawney19
|
37e0785775
|
fix(frontend): HardwareTooltip 组件健壮性重构
- hardware_info 支持 string/object/null 类型的安全解析
- 用 computed 统一提取展示行,无硬件信息时显示提示文案
- 增加 button 的 title/aria-label 属性
|
2026-02-11 17:17:53 +08:00 |
|
fawney19
|
0ddeccf698
|
feat(aether-proxy): delegate gzip body 流式透传替代读取解压
- gzip 压缩请求体直接流式转发给上游,避免全量读取和解压
- 非 gzip 请求保持原有读取逻辑
- 移除 body_read_ms/decompress_ms 指标,新增 passthrough 标记
- 前端 timing 展示兼容旧版字段
- 同步更新 Cargo.lock
|
2026-02-11 17:17:45 +08:00 |
|
fawney19
|
257077a59b
|
chore: bump aether-proxy version to 0.1.3
|
2026-02-11 16:39:07 +08:00 |
|
fawney19
|
9647d95759
|
feat: delegate 协议改为 header 元数据 + gzip 压缩 body 直传
- delegate wire format 从 JSON body 改为 HTTP headers 传递元数据
(X-Delegate-Method/Url/Headers),上游请求体 gzip 压缩后直传,
减少跨国代理传输耗时
- Rust 侧新增 gzip 解压(含 decompression bomb 防护 50MB 上限)
- 升级模块从 GitHub API asset 下载改为公开 release URL 直链,
GITHUB_TOKEN 变为可选
- 前端适配新 timing 字段,展示压缩率与 wire_size/body_size
- CI release notes 改用 generate_release_notes 自动生成
|
2026-02-11 16:34:18 +08:00 |
|
fawney19
|
2436ce45a2
|
chore: bump aether-proxy version to 0.1.2
|
2026-02-11 15:35:28 +08:00 |
|
fawney19
|
2a2a4b817e
|
feat: 代理 timing 细分指标与前端展示优化
- aether-proxy 新增 auth_ms/body_read_ms/body_parse_ms/body_size 计时字段
- 链路追踪面板代理耗时改为分阶段展示,密钥和代理信息改为堆叠布局
- 硬件信息从 Tooltip 改为 Popover,新增 FD Limit 展示
- 新增区域代码格式化工具函数,统一显示区域中文名称
|
2026-02-11 15:33:01 +08:00 |
|
fawney19
|
d51234f202
|
fix(frontend): 链路追踪打开时自动选中进行中的尝试而非最后一个未执行的
|
2026-02-11 13:35:02 +08:00 |
|
fawney19
|
7abe7f1a87
|
chore: 更新 README 链接与清理 generate_keys 冗余输出
- 修正 aether-proxy README 中 Releases 为完整 URL,优化描述文案
- 移除 generate_keys.py 中不再需要的 hmac_key 配置提示
|
2026-02-11 13:24:28 +08:00 |
|
fawney19
|
2849a9bce5
|
fix(frontend): 密钥列表分页控件固定在底部
|
2026-02-11 12:57:52 +08:00 |
|
fawney19
|
2aee8b8c2c
|
Merge pull request #169 from AAEE86/master
feat: 调度器根据上游配额自动跳过已耗尽的 Key (Kiro/Codex/Antigravity)
|
2026-02-11 12:55:52 +08:00 |
|
fawney19
|
ed3f208dda
|
feat(aether-proxy): 网络层全面优化与代理耗时追踪
aether-proxy:
- 新增 20+ 可配置参数:Aether API/delegate/CONNECT 各阶段超时、连接池、TCP keepalive/nodelay
- AetherClient 支持指数退避重试(可配置次数/延迟)和 HTTP/2
- 新增 DNS 缓存(TTL + 容量限制)避免重复解析
- 新增并发连接数限制(Semaphore,默认基于硬件估算)
- CONNECT 隧道增加建连超时和升级超时
- TLS 增加握手超时、会话缓存(session ticket + memory cache)、ALPN 协商
- 新增 ProxyMetrics 收集请求计数和延迟,通过心跳上报
- delegate 响应注入 X-Proxy-Timing 头(dns_ms/upstream_ms/total_ms)
后端:
- StreamContext 和 handler 提取 X-Proxy-Timing 写入 proxy_info 追踪数据
前端:
- 请求时间线展示代理分阶段耗时(DNS/上游)
- Endpoint 添加按钮改为文字按钮样式
|
2026-02-11 11:30:29 +08:00 |
|
fawney19
|
68f5e7e502
|
fix(frontend): 链路追踪打开时自动选中有效状态的节点
修复 Provider 组状态提升逻辑,之前仅在 success 时更新组状态,
导致组内有 streaming/failed 等状态的 key 时组仍显示为 available,
自动选择逻辑无法识别有效节点。引入状态优先级机制正确提升组状态,
并扩大 fallback 有效状态范围,避免默认选中未执行的节点。
|
2026-02-11 10:06:59 +08:00 |
|
fawney19
|
11b0026995
|
feat: OAuth 重复账号失效时允许覆盖更新,优化前端分页与刷新体验
- OAuth 去重逻辑改为:已失效的重复账号自动覆盖更新而非拒绝,
适用于单个导入、批量导入、Kiro 导入等所有入口
- 新增 _update_existing_oauth_key 函数统一处理覆盖更新逻辑
- useSmartPagination 新增 fixedHeight 属性防止翻页时容器高度跳动
- ProviderDetailDrawer OAuth 刷新后仅重载 keys 数据避免整表刷新
|
2026-02-11 10:01:28 +08:00 |
|
fawney19
|
5cfae4f8f0
|
Merge pull request #168 from AAEE86/master
refactor(frontend): 优化模型/提供商组件的数据刷新逻辑
|
2026-02-11 09:20:35 +08:00 |
|
fawney19
|
bda03d187e
|
refactor: 统一代理配置优先级链(key>provider>系统默认)并复用 HTTP 连接池
- 引入 resolve_proxy_param / build_proxy_client_kwargs 工具函数,统一
httpx 客户端的代理+SSL+超时配置,替换各模块中零散的 get_ssl_context() 调用
- 所有涉及上游请求的模块(provider_query, usage replay, endpoint check,
model fetch, OAuth, Vertex Auth, Gemini Files/Video 等)改用
resolve_effective_proxy 按 key > provider > 系统默认优先级解析代理
- 流式请求改用 HTTPClientPool.get_upstream_client 复用连接池,移除各处
http_client.aclose() 避免关闭共享客户端
- StreamProcessor._cleanup 不再关闭池中客户端,仅清理响应上下文
- 前端 EndpointFormDialog 增加 body_rules 帮助说明 Popover
- Mock handler 补充 OAuth 字段、endpoint extras 及新增 mock 路由
|
2026-02-11 03:16:53 +08:00 |
|
fawney19
|
cd0acf1e6b
|
fix: OAuth 账号去重改用 user_id 替代 account_id,避免同 team 成员误判重复
|
2026-02-11 01:13:01 +08:00 |
|
fawney19
|
9e183a2033
|
Merge pull request #167 from AAEE86/dev
feat: Codex/Kiro 配额自动刷新增加 5 分钟过期检查
|
2026-02-11 01:10:19 +08:00 |
|
fawney19
|
3d6d4a48a5
|
feat: body_rules 支持 condition 条件触发
为每条 body_rule 新增可选 condition 字段,支持 eq/neq/gt/lt/gte/lte/
starts_with/ends_with/contains/matches/exists/not_exists/in/type_is
共 14 种操作符,规则仅在条件满足时执行。
后端: 新增 _evaluate_condition 条件评估器与 _validate_condition 校验逻辑
前端: EndpointFormDialog 增加条件编辑行(IF 面板)与 Filter 按钮切换
测试: 新增 TestConditionalBodyRules 覆盖全部操作符及链式触发场景
|
2026-02-11 00:50:08 +08:00 |
|
fawney19
|
262bc6e1f7
|
feat: body_rules set 操作支持 {{$original}} 占位符引用原值
后端 request_builder 新增递归检测与解析逻辑,完全匹配时保留原始类型,
部分匹配时转为字符串拼接。前端 EndpointFormDialog 增加 sentinel 替换
机制,使含占位符的值能通过 JSON 校验,并在提交时还原为 {{$original}}。
|
2026-02-10 21:01:45 +08:00 |
|
fawney19
|
e06152b58b
|
Merge pull request #166 from AAEE86/dev
fix: Claude SSE 流式输出补充 event 类型行
|
2026-02-10 18:56:21 +08:00 |
|
fawney19
|
5456596b29
|
style: 优先级管理弹窗间距与样式微调
|
2026-02-10 18:32:51 +08:00 |
|
 fawney19andAAEE86
|
8949ad6d9e
|
feat: 动态 block 索引分配、OAuth 自动启停联动与 Antigravity 签名注入增强
- Gemini/OpenAI normalizer 改为按实际出现顺序延迟分配 thinking/text block 索引
- OAuth 失效标记时自动停用 Key,清除/刷新成功时自动启用
- Antigravity thought signature 注入支持 tool-specific 签名优先,再回退 session 级签名
- Claude normalizer 对非字符串 thinking block 降级为 UnknownBlock
- Gemini normalizer 反序列化时为 Antigravity 目标补充 signature
- signature_cache _prune 增加超限驱逐
- model/provider 包 __init__ 改为惰性导入避免循环依赖
- build_antigravity_url 复制 query_params 防止修改调用方原始字典
- upstream_fetcher build_all_format_configs 兼容非 EndpointFetchConfig 对象
- Antigravity HTTP 状态判定扩展与 Gemini endpoint check 支持 v1internal
- 新增 thought signature 注入与 signature cache 驱逐测试
Closes #165
Co-authored-by: AAEE86 <ppk0227@hotmail.com>
|
2026-02-10 17:53:04 +08:00 |
|
fawney19
|
0bb17a1502
|
chore: Docker 基础镜像从 Python 3.14 降级到 3.13
|
2026-02-10 17:41:36 +08:00 |
|
fawney19
|
0c52341dec
|
feat: TTFB 追踪记录与前端展示 + 缓存调度器代码整理
- CLI handler 记录上游请求 TTFB 并注入 proxy_info
- 前端请求时间线展示 TTFB 耗时
- 调度器提升局部 import 到模块顶部,提取 _affinity_hash/_merge_restriction_sets 辅助方法
- 修复缓存亲和性写入的缩进层级
- Python 版本回退至 3.13
|
2026-02-10 17:37:53 +08:00 |
|
fawney19
|
4276e7835c
|
refactor: 自适应 RPM 从边界记忆改为多次观察确认 + 置信度衰减
将自适应 RPM 限制算法从"单次 429 即设限"重构为基于置信度的学习机制:
- 收到 429 时仅记录观察(本地 RPM + 上游 header 限制值),不立即设限
- 有 header 的观察需 2 次一致确认,无 header 需 3 次一致确认
- confidence 随时间自然衰减,确保限制永远不会固化
- confidence 低于阈值时停止本地 RPM 限制,429 直接透传客户端
- 统一 get_effective_limit 入口,消除多处重复的限制获取逻辑
- Admin API 增加置信度、观察数量等诊断字段
|
2026-02-10 14:58:15 +08:00 |
|
fawney19
|
fc1ad44346
|
feat: Antigravity 上游模型按 tier 排序逐个获取与前端单 Key 查询
- 后端 Antigravity Provider 获取上游模型改为按 tier/可用性排序后逐个尝试,成功即停止
- 新增 Provider 级别缓存避免重复请求
- 前端编辑 Key 允许模型时改为传入当前 Key ID 查询对应可用模型
|
2026-02-10 11:24:22 +08:00 |
|
fawney19
|
91cf93d133
|
fix: Antigravity function_call/function_response 驼峰转换与 thinking budget 非正值过滤
Close #161
|
2026-02-10 10:34:28 +08:00 |
|
fawney19
|
457de0919a
|
Merge pull request #163 from AAEE86/master
fix: Antigravity 跨格式转换链 tool call ID 完整传递
|
2026-02-10 10:27:43 +08:00 |
|
fawney19
|
f9adf5938e
|
feat: 请求记录 cURL 导出与回放功能
- 后端新增 /{usage_id}/curl 接口,重建完整 cURL 命令(含明文 API Key)
- 后端新增 /{usage_id}/replay 接口,支持向原始或指定提供商回放请求
- 回放支持 OAuth/Vertex AI/API Key 多种认证方式和跨格式请求体转换
- 前端新增 ReplayDialog 组件,支持选择目标提供商/Key 并查看响应
- RequestDetailDrawer 添加回放按钮和 cURL 复制按钮
- 调整 Tab 内容区布局,表头栏与内容区融为一体
|
2026-02-10 03:07:49 +08:00 |
|
fawney19
|
9f5dd6f658
|
feat: 跨格式 thinking/reasoning 透传与 Antigravity 适配器增强
- 内部表示层新增 ThinkingBlock,统一 Claude thinking / Gemini thought / OpenAI reasoning_content
- Claude/Gemini/OpenAI/OpenAI CLI normalizer 全面支持 thinking 内容的解析、流式处理和跨格式转换
- schema_utils 重写为完整的 JSON Schema 清洗逻辑($ref 展开、allOf 合并、anyOf 折叠、白名单过滤)
- Antigravity envelope 新增模型别名映射、Google Search 注入、thoughtSignature 注入、图像生成配置解析
Close #161
|
2026-02-10 02:05:35 +08:00 |
|
fawney19
|
de40bd4705
|
fix: Claude API 模型列表查询兼容 Bearer Token 认证
第三方代理可能使用 Bearer Token 而非 x-api-key 认证,
在请求头中同时发送两种认证方式以提高兼容性。
|
2026-02-10 01:01:05 +08:00 |
|
fawney19
|
1d625916ff
|
refactor: 模块管理支持内置工具展示
将邮件配置、IP 安全、审计日志等系统功能从固定菜单移至模块管理页面,以内置工具形式统一展示
|
2026-02-09 22:52:46 +08:00 |
|
fawney19
|
80d65ad2e4
|
fix: Claude CLI 模型列表使用正确的 Bearer 认证方式
|
2026-02-09 22:45:21 +08:00 |
|
fawney19
|
b11e9de6a7
|
feat: 全局模型新增活跃 Provider 数量统计
- 后端优化查询,使用条件聚合同时获取总 Provider 数和活跃数
- 前端展示格式改为「活跃数/总数」,便于了解可用 Provider 情况
|
2026-02-09 22:26:30 +08:00 |
|
fawney19
|
853c489471
|
refactor: 优化智能分页检测和密钥复制交互
- 智能分页统一使用防抖检测避免与 ResizeObserver 双重触发
- 密钥名称仅在非空时启用复制功能
- 移除 API Key 不必要的危险字符校验
|
2026-02-09 19:05:29 +08:00 |
|
fawney19
|
c6cd7d5ae6
|
Merge pull request #159 from AAEE86/master
refactor: 优化智能分页 DOM 检测机制并添加密钥名称复制功能
|
2026-02-09 19:04:19 +08:00 |
|
fawney19
|
46ff120ab2
|
fix: 优化 Alembic 迁移脚本的列存在性检查
修复端点数据迁移到 provider 时的 SQL 执行逻辑,动态检查列是否存在后再构建 UPDATE 语句,避免在列不存在时引用导致迁移失败。
|
2026-02-09 18:40:08 +08:00 |
|
fawney19
|
7f7f569148
|
refactor: 优化优先级管理和路由展示功能
- 支持按 API 格式设置不同的全局优先级,替换单一 global_priority 字段为 global_priority_by_format
- 路由标签根据调度模式动态显示(缓存亲和/负载均衡/固定顺序)
- 优先级管理对话框 UI 优化:紧凑布局、活跃/停用状态分组排序、快捷启用/禁用开关
- 优先级管理对话框包含所有 Key(含停用的),支持快速切换状态
- 优化配置更新流程:先保存优先级数据,再切换调度模式,避免瞬态不一致
- 调度相关配置缓存 TTL 从 60 秒降至 5 秒,确保多 Worker 快速收敛
- 配置更新时立即同步当前 Worker 的 Scheduler 状态
|
2026-02-09 18:21:34 +08:00 |
|
 fawney19andAAEE86
|
b14fb31933
|
feat: 新增 Antigravity/Kiro 账户禁用封禁状态监控与展示
- 前端:为 Antigravity 和 Kiro 上游元数据添加禁用/封禁状态字段
- 前端:在密钥详情抽屉中展示账户禁用/封禁警告信息,合并重复的时间格式化函数
- 后端:优化 Antigravity 和 Kiro 适配器的状态检测与上报逻辑
Co-authored-by: AAEE86 <ppk0227@hotmail.com>
Closes #158
|
2026-02-09 17:24:48 +08:00 |
|
fawney19
|
65658e58d5
|
refactor: 移除 API Key 最小长度限制并放宽最大长度至 10000 字符
|
2026-02-09 17:00:48 +08:00 |
|
fawney19
|
c5d1d2c21e
|
fix: Nginx 白名单路由补充 v1beta 和 upload 路径前缀
|
2026-02-09 16:45:56 +08:00 |
|
fawney19
|
f22d2efb9d
|
refactor: 优化 CI 缓存隔离与镜像标签策略,重构 Nginx 为白名单路由模式
- CI: 按 scope 隔离 base/app 构建缓存,app 层使用 no-cache-filters 确保前端每次重建
- CI: 镜像标签改为 semver 优先,支持 pre/fix 预发布标签,启用 latest=auto
- Nginx: 从 try_files + @backend 回退模式改为白名单路由(api/v1/health → 后端,其余 → SPA)
|
2026-02-09 16:04:54 +08:00 |
|
fawney19
|
d0b9dc7a24
|
feat: 非 custom 提供商新建密钥时默认开启自动获取上游模型
- 前端 KeyFormDialog 根据提供商类型自动设置 auto_fetch_models 默认值
- OAuth 创建密钥时传入 auto_fetch_models=True
- OAuth 完成、refresh token 导入、批量导入后自动触发模型获取
|
2026-02-09 13:50:27 +08:00 |
|
fawney19
|
0da34f729e
|
refactor: 优化提供商管理界面交互与术语,增强 OAuth 编辑体验
- 模型映射对话框统一术语为"客户端模型/提供商模型",修复编辑时已有映射不可见的问题
- 密钥表单包含/排除规则改为双列布局
- OAuth 密钥编辑对话框增加 dirty 状态跟踪,关闭时提示未保存更改
- 调整密钥操作按钮顺序,代理节点配置移至编辑按钮前
- preset_models.py 添加 ModelsFetcherFunc 类型别名
|
2026-02-09 13:24:42 +08:00 |
|
fawney19
|
57f3ed71a1
|
Merge pull request #157 from AAEE86/master
feat: 新增 OAuth 密钥专用编辑对话框 & 统一预设模型管理
|
2026-02-09 13:02:13 +08:00 |
|
fawney19
|
34cdc26e6f
|
fix: 修复候选调度中 priority 为 0 时被错误回退为默认值的问题
使用显式 is not None 判断替代 or 运算符,避免优先级为 0 时被当作 falsy 值处理
|
2026-02-09 12:58:27 +08:00 |
|
fawney19
|
8684548072
|
refactor: 用 EndpointFetchConfig 纯数据类替代 ORM 对象传递,统一上游模型缓存管理
- 引入 EndpointFetchConfig dataclass 替代直接传递 ProviderEndpoint ORM 对象,
避免 DB session 关闭后 DetachedInstanceError
- 新增 build_format_to_config() 统一构建 api_format -> EndpointFetchConfig 映射
- KeyAllowedModelsDialog 改用 useUpstreamModelsCache composable 管理上游模型获取
- useUpstreamModelsCache 增加 error 字段透传部分格式获取失败的 warning
- 删除废弃的 queryProviderUpstreamModels API 函数
- ProviderCandidate 添加 __lt__ 方法支持排序比较
|
2026-02-09 12:47:47 +08:00 |
|
fawney19
|
8702786fa2
|
feat: 模型获取支持 CLI 端点回退,同族优先 chat 后降级 cli
|
2026-02-09 11:37:41 +08:00 |
|
fawney19
|
8673ed1459
|
refactor: 优化 kiro token 刷新逻辑和 build_all_format_configs
- kiro auth: 拆分无缓存 token 和占位符 key 的判断逻辑,避免不必要的解密操作
- kiro auth: 简化 effective_token 获取逻辑
- build_all_format_configs: 只对实际配置了端点的格式构建请求配置,
不再用某个端点的 base_url 尝试其他未配置的格式
- get_adapter_for_format: 简化为单行表达式
- 修复 f-string 日志为 loguru 风格占位符
- 新增 build_all_format_configs 单元测试
|
2026-02-09 10:11:38 +08:00 |
|
fawney19
|
1b8e73bb5c
|
Merge pull request #156 from AAEE86/master
fix(kiro): 修复请求时 403 bearer token invalid 错误
|
2026-02-09 09:39:42 +08:00 |
|
fawney19
|
a1c5aa4e04
|
Merge pull request #155 from AAEE86/master
feat: 删除 getKeyDisplayName 前端统一使用 key.name 显示
|
2026-02-09 03:06:26 +08:00 |
|
fawney19
|
3e1a046140
|
fix(kiro): 导入时将获取到的 email 写回 auth_config 以确保持久化
|
2026-02-09 03:01:13 +08:00 |
|
fawney19
|
35b57542d1
|
Merge pull request #154 from AAEE86/master
fix(kiro): 统一 Kiro 导入时的 name 字段为邮箱格式
|
2026-02-09 02:58:11 +08:00 |
|
fawney19
|
cfa768eebd
|
feat: 请求体规则扩展(append/insert/regex_replace)、OAuth 代理节点支持与列表分页
- 请求体规则新增 append、insert、regex_replace 三种操作,路径语法支持数组索引
- OAuth 授权/导入/批量导入支持指定代理节点(proxy_node_id),Key 级代理避免 IP 污染
- 密钥列表、模型映射、模型列表添加智能分页(useSmartPagination)
- AdvancedGuide 新增请求体规则使用指南与示例
- 简化 Codex enrich_codex 实现,README 添加 QQ 群二维码
|
2026-02-09 02:56:21 +08:00 |
|
 fawney19andAAEE86
|
2f8af7c96b
|
fix(codex): 移除未使用的 user_id 字段,修复请求上下文未清理的问题
Co-Authored-By: AAEE86 <ppk0227@hotmail.com>
|
2026-02-09 01:11:24 +08:00 |
|
 fawney19andAAEE86
|
b34dd12863
|
feat: 新增 Kiro 适配器、OAuth 改进与多项功能增强
- 新增 Kiro provider 适配器(EventStream 协议解析、令牌管理、用量追踪)
- 重构 OAuth 账户管理与统一配额机制
- 重构 Handler 基类(CLI adapter/handler、请求构建器、流处理器)
- 增强缓存监控后端 API 与前端可视化
- 改进 Gemini 格式标准化器与请求头处理
- Antigravity/Codex 适配器更新,移除旧 metadata_collector
- 新增数据库迁移:proxy provider API keys
- 前端 UI 多项优化
Co-Authored-By: AAEE86 <ppk0227@hotmail.com>
|
2026-02-09 01:05:48 +08:00 |
|
fawney19
|
e324ffdcd6
|
fix(proxy): 修复连通性测试调用 build_hmac_proxy_url 参数不匹配
- 移除 _build_test_proxy_url 中多余的 node.id 位置参数,与函数签名保持一致
|
2026-02-08 17:14:56 +08:00 |
|
fawney19
|
183e7c60e1
|
refactor(proxy): 简化 HMAC 认证、移除明文 HTTP 代理并优化 setup 流程
- HMAC 签名移除 node_id,仅使用 timestamp,消除重注册时的认证竞态问题
- 删除 plain HTTP forward proxy(plain.rs),仅保留 CONNECT 隧道和 delegate,非支持方法返回 405
- 提取共享 BoxBody 类型和 empty_box_body() 到 proxy/mod.rs
- CLI 解析重构为 clap 原生 subcommand,启用 subcommand_negates_reqs
- setup 向导返回 SetupOutcome 枚举,支持保存后自动启动 proxy
- setup TUI 增加未保存变更的退出确认(pending_quit)
- validate_target 改为 async,使用 tokio::net::lookup_host 避免阻塞 DNS
- 显式初始化 rustls ring CryptoProvider
- ConfigFile 新增 inject_env_override() 用于 setup 后重载配置
- Python 端 HMAC 签名同步移除 node_id,缓存时间桶从 120s 调整为 240s
|
2026-02-08 16:10:13 +08:00 |
|
fawney19
|
f07cae540e
|
feat: aether-proxy 自升级功能
新增 `aether-proxy upgrade [version]` 命令,支持从 GitHub Releases
下载指定或最新版本的二进制,校验 SHA256 后原子替换当前二进制,
并在 systemd 服务运行时自动重启。
|
2026-02-08 14:54:10 +08:00 |
|
fawney19
|
abd85f777f
|
fix: aether-proxy 作为 systemd 服务启动时跳过自身活跃检测,避免无限重启
|
2026-02-08 14:19:48 +08:00 |
|
fawney19
|
519ad67eb1
|
refactor: 代理节点架构重构与功能增强
aether-proxy:
- 重构 main.rs,拆分为 app/state/hardware/net 模块
- setup.rs 拆分为 setup/tui.rs + setup/service.rs,支持 systemd 服务管理子命令
- 新增 delegate 端点,支持后端通过代理节点转发请求而非传统 CONNECT 代理
- 注册时上报硬件信息(CPU/内存/fd_limit)和估算最大并发数
- 心跳上报活跃连接数,支持远程下发 node_name 配置
- HTTP 转发时剥离 X-Forwarded-* 等敏感头部
- 切换到 rustls-tls,降低日志级别减少噪音
后端:
- 从 http_client.py 提取代理相关逻辑至 proxy_node/resolver.py
- 从 routes.py 提取业务逻辑至 proxy_node/service.py
- handler 支持 delegate 模式(通过代理节点 HTTP 端点转发而非 CONNECT 隧道)
- ProxyNode 模型新增 hardware_info 和 estimated_max_concurrency 字段
前端:
- 新增 HardwareTooltip 组件展示节点硬件信息
- 远程配置支持下发 node_name
|
2026-02-08 13:33:08 +08:00 |
|
fawney19
|
254d30d32d
|
feat: 请求候选记录中追踪代理节点信息并在前端 timeline 展示
|
2026-02-08 01:18:00 +08:00 |
|
fawney19
|
4a1029961a
|
feat: 请求日志和 usage 记录中追踪代理节点信息
- 新增 resolve_proxy_info/get_proxy_label 提取脱敏的代理摘要
- StreamContext 增加 proxy_info 字段,流式/非流式全路径写入 metadata
- ProxyNode 缓存补充 name 字段,日志输出代理节点标识
- aether-proxy 连接和转发日志从 debug 提升为 info 级别
- TaskService 代理不可用日志补充 node_id 细节
|
2026-02-08 00:49:43 +08:00 |
|
fawney19
|
5384ffd403
|
feat: aether-proxy TLS 双栈支持与自签名证书自动生成
- aether-proxy 新增 TLS 模块:自签名证书生成、TLS acceptor 构建、证书 SHA-256 指纹计算
- 代理服务器支持 HTTP+TLS 双栈模式,通过 peek 首字节区分 TLS ClientHello 与普通 HTTP
- 注册与心跳上报 tls_enabled 和 tls_cert_fingerprint 字段
- Python 侧 httpx 代理适配:TLS 代理使用 httpx.Proxy + CERT_NONE ssl_context
- ProxyNode 模型新增 tls_enabled/tls_cert_fingerprint 字段及对应迁移
|
2026-02-07 23:18:58 +08:00 |
|
fawney19
|
10bd14c223
|
fix: generate_keys 补充 PROXY_HMAC_KEY 生成,CLI handler 增加 ReadError 容错
- generate_keys.py 新增 PROXY_HMAC_KEY 生成并输出 aether-proxy.toml 配置示例
- .env.example 完善 PROXY_HMAC_KEY 注释说明
- cli_handler_base.py 两处流式处理增加 httpx.ReadError 异常捕获,
代理连接中断时与 RemoteProtocolError 保持一致的降级处理
|
2026-02-07 20:35:25 +08:00 |
|
fawney19
|
31bc452374
|
feat: aether-proxy 远程配置下发、连通性测试与 setup TUI
- 后端新增远程配置管理 API (PUT /config) 和连通性测试 API (POST /test)
- 前端新增远程配置编辑对话框和节点连通性测试按钮
- aether-proxy 支持通过心跳接收并热加载远程配置 (端口白名单、日志级别、心跳间隔、时间戳容差)
- aether-proxy 新增 TOML 配置文件支持和交互式 setup TUI
- aether-proxy 心跳 404 时自动重注册节点
- plain proxy 响应改为流式传输,减少内存缓冲
- 新增 remote_config 和 config_version 数据库字段及迁移
|
2026-02-07 19:20:09 +08:00 |
|
fawney19
|
3b8398b2e5
|
fix: deploy.sh 容器未运行时自动启动,避免无变更时跳过启动
|
2026-02-07 14:53:46 +08:00 |
|
fawney19
|
02906dad0e
|
fix: 增强代理密码脱敏策略并补充异常日志
- 密码脱敏阈值从 4 提升至 8,短密码全部遮蔽
- 为系统代理获取、proxy_node 解析、代理 URL 构建添加 warning 日志
|
2026-02-07 14:37:44 +08:00 |
|
fawney19
|
db96c9a46e
|
feat: 手动代理节点支持、系统默认代理与跨格式流式 usage 提取
代理节点:
- 支持手动添加代理节点(HTTP/HTTPS/SOCKS5),含地址、认证信息和区域标签
- 新增手动节点的 CRUD API 和前端管理界面
- 提供商代理配置从 URL 字符串迁移至代理节点选择器(proxy_node_id)
- 新增系统默认代理节点设置,未单独配置代理的提供商自动回退使用
- 删除节点时自动清除系统默认代理引用并失效缓存
- 健康检查跳过手动节点(无心跳,始终在线)
流式处理:
- CLI handler 跨格式转换时委托基类解析 Provider 原始事件的 usage
- StreamProcessor 新增 _extract_usage_from_converted_event 从转换后事件补充提取 usage
- 支持 Claude/OpenAI/OpenAI Responses/Gemini 多种 usage 格式
|
2026-02-07 14:30:46 +08:00 |
|
fawney19
|
86dbbe83c2
|
fix(ci): vendored OpenSSL for cross-compilation
cross 的 Docker 镜像缺少 libssl-dev,改用 native-tls-vendored 静态链接 OpenSSL
|
2026-02-07 12:52:25 +08:00 |
|
fawney19
|
6d95822e19
|
fix(ci): macOS amd64 改用 macos-latest 交叉编译
macos-13 (Intel) runner 已被 GitHub 下线
|
2026-02-07 12:52:25 +08:00 |
|
fawney19
|
01653efa84
|
ci: 添加 aether-proxy 多平台自动编译与 README 文档
- 新增 GitHub Actions workflow,推送 proxy-v* tag 自动编译 5 个平台
(linux-amd64, linux-arm64, macos-amd64, macos-arm64, windows-amd64)
- 编译产物自动发布到 GitHub Releases 并生成 SHA256 校验文件
- 新增 aether-proxy README,包含部署、配置、后台运行等完整说明
|
2026-02-07 12:52:25 +08:00 |
|
fawney19
|
1180634269
|
feat: ProxyNode 代理节点管理系统与 OpenAI Responses API 解析增强
ProxyNode 系统:新增 aether-proxy(Rust)海外 VPS 代理组件,后端实现节点注册/心跳/
HMAC 认证/健康检测调度器/模块化集成,前端新增代理节点管理页面。ProxyConfig 支持
node_id 模式,http_client 支持 HMAC 签名代理 URL 构建与 TTL 缓存。
OpenAI CLI 解析器:适配 Responses API 格式,支持 input_tokens/output_tokens 提取、
output[].content[].text 文本解析、response.completed 流式事件 usage 嵌套结构。
|
2026-02-07 12:52:25 +08:00 |
|
fawney19
|
62f852b851
|
feat: Antigravity 端点签名迁移至 gemini:chat,流式 usage 提取重构与请求详情自动刷新
- Antigravity 端点签名从 gemini:cli 统一为 gemini:chat,保留向后兼容,含 DB 迁移
- 流式处理中 usage/completion/text 提取抽离为 _update_ctx_from_provider_event,
支持 envelope 解包后提取,避免格式转换流程中重复计数
- 新增 has_format_conversion 属性,区分真正的格式转换与 envelope rewrite,
修正 usage 展示层的格式转换标记
- 请求详情抽屉对未完成请求支持自动轮询刷新,关闭时自动停止
- 按次计费样式调整;实际成本仅在倍率非 1.0 时显示;缓存日志降级为 trace
|
2026-02-07 02:59:02 +08:00 |
|
fawney19
|
ea22f07046
|
test: 添加 OpenAI chat completions 测试脚本
|
2026-02-06 23:07:23 +08:00 |
|
fawney19
|
18d0af3dbf
|
feat: 格式转换支持三层开关控制(全局/Provider/端点)
- _get_convertible_formats 始终返回所有可转换格式,由下游精确过滤
- get_compatible_provider_formats 增加 Provider 级别 enable_format_conversion 判断
- Provider 设置更新后自动失效相关缓存(模型列表、解析缓存、Provider 缓存)
- 前端 toggleFormatConversion 使用接口返回的完整对象更新本地状态
|
2026-02-06 23:01:56 +08:00 |
|
fawney19
|
a1ea060cd9
|
fix: 流式响应上游连接异常时优雅降级,避免丢失 usage 和 telemetry
上游 httpx.StreamClosed/HTTPError 发生时,若已向客户端输出数据则
best-effort flush 残留 SSE 并标记 502 结束流,保证 StreamingResponse
背景任务正常执行;若尚未输出则 re-raise 以触发 failover。
|
2026-02-06 21:57:05 +08:00 |
|
fawney19
|
8b6a5d3824
|
feat: OAuth 导入导出、提供商筛选、Gemini 图像生成支持与流式处理增强
- OAuth: 支持通过 Refresh Token 导入账号(文件拖拽/粘贴),OAuth Key 可导出为 JSON
- OAuth: 所有 OAuth 端点添加 require_admin 鉴权
- 提供商管理: 新增状态/API格式/模型三级筛选,后端返回 global_model_ids
- Gemini: 新增图像生成模型适配(finalize_provider_request 钩子 + envelope 跳过不兼容字段)
- 流式处理: buffer 残留数据 flush 与 token 兜底估算
- 上游元数据: 提取 merge_upstream_metadata,配额耗尽模型保留与深度合并
- Antigravity 配额: 无 quotaInfo 时视为耗尽,移除 Other 兜底分组
- README: 新增升级备份与回滚指南
|
2026-02-06 21:52:22 +08:00 |
|
fawney19
|
62dae22a2c
|
fix: 流式响应健壮性增强与候选排序稳定性修复
- test-model 接口优先使用流式请求,失败自动回退非流式
- CLI 流式处理在 StreamClosed/RemoteProtocolError 时 flush 残余 SSE 数据,捕获尾部 usage
- 流未正常完成时兜底估算 tokens,避免 usage 记录为 0
- ProviderCandidate 添加 __lt__ 解决 tuple 排序 TypeError
- sorted() 添加显式 key 参数避免隐式比较候选对象
- 异常日志改用 logger.opt(exception=e) 替代手动 traceback
|
2026-02-06 18:06:38 +08:00 |
|
fawney19
|
b88fb6273b
|
refactor: Antigravity/Codex 服务重构为插件化适配器架构
- 将 Antigravity 和 Codex 从独立模块迁移至 src/services/provider/adapters/ 插件体系
- 新增 provider_types 和 oauth_token 模块,移除 maintenance_scheduler 中的 OAuth 定时刷新
- 增强 admin API:扩展 keys 和 provider_query 端点,新增 dashboard 路由
- 大幅增强 ProviderDetailDrawer 组件,新增 AntigravityQuotaDialog
- 改进 handler 基类(chat/cli)和错误分类器
- 优化 fetch_scheduler 和 upstream_fetcher
- 前端 UI 组件清理和优化
- 更新测试以匹配新模块结构
|
2026-02-06 16:37:06 +08:00 |
|