api-key-manager 3.0.0__tar.gz → 3.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/PKG-INFO +14 -32
  2. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/README.md +13 -31
  3. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/api_key_manager.egg-info/PKG-INFO +14 -32
  4. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/detector.py +371 -371
  5. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/__init__.py +2 -1
  6. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/ai302.py +76 -76
  7. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/anthropic.py +109 -109
  8. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/baichuan.py +69 -69
  9. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/cerebras.py +76 -76
  10. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/cohere.py +90 -90
  11. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/cstcloud.py +94 -94
  12. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/dashscope.py +92 -92
  13. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/dashscope_coding.py +94 -94
  14. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/deepseek.py +133 -133
  15. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/dmxapi.py +76 -76
  16. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/doubao.py +76 -76
  17. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/fireworks.py +76 -76
  18. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/grok.py +75 -75
  19. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/groq.py +76 -76
  20. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/huggingface.py +37 -37
  21. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/hyperbolic.py +76 -76
  22. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/infini.py +102 -102
  23. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/infini_coding.py +96 -96
  24. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/kimi.py +93 -93
  25. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/kimi_coding.py +96 -96
  26. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/longcat.py +76 -76
  27. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/mimo.py +76 -76
  28. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/mimo_plan.py +107 -107
  29. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/minimax.py +69 -69
  30. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/minimax_plan.py +94 -94
  31. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/mistral.py +76 -76
  32. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/models_registry.py +2962 -2962
  33. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/modelscope.py +120 -120
  34. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/nvidia.py +76 -76
  35. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/ocoolai.py +76 -76
  36. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/openai.py +101 -101
  37. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/opencode.py +89 -89
  38. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/opencode_zen.py +89 -89
  39. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/openrouter.py +91 -91
  40. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/perplexity.py +75 -75
  41. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/poe.py +76 -76
  42. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/ppio.py +76 -76
  43. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/replicate.py +37 -37
  44. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/siliconflow.py +93 -93
  45. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/stepfun.py +99 -99
  46. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/tencent_hunyuan.py +94 -94
  47. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/together.py +101 -101
  48. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/yi.py +69 -69
  49. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/zai.py +76 -76
  50. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/zhipu.py +99 -99
  51. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/zhipu_coding.py +96 -96
  52. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/web.py +1676 -1676
  53. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/pyproject.toml +1 -1
  54. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/api_key_manager.egg-info/SOURCES.txt +0 -0
  55. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/api_key_manager.egg-info/dependency_links.txt +0 -0
  56. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/api_key_manager.egg-info/entry_points.txt +0 -0
  57. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/api_key_manager.egg-info/requires.txt +0 -0
  58. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/api_key_manager.egg-info/top_level.txt +0 -0
  59. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/__init__.py +0 -0
  60. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/__main__.py +0 -0
  61. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/api_models.py +0 -0
  62. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/checker.py +0 -0
  63. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/cli.py +0 -0
  64. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/config.py +0 -0
  65. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/core.py +0 -0
  66. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/errors.py +0 -0
  67. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/i18n.py +0 -0
  68. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/logger.py +0 -0
  69. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/model_capabilities.py +0 -0
  70. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/parser.py +0 -0
  71. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/base.py +0 -0
  72. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/providers/google.py +0 -0
  73. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/proxy.py +0 -0
  74. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/py.typed +0 -0
  75. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/ssrf.py +0 -0
  76. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/storage.py +0 -0
  77. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/tester.py +0 -0
  78. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/url_override.py +0 -0
  79. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/validator.py +0 -0
  80. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/key_manager/webhook.py +0 -0
  81. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/setup.cfg +0 -0
  82. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_api_endpoints.py +0 -0
  83. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_base_check.py +0 -0
  84. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_bug_fixes.py +0 -0
  85. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_checker.py +0 -0
  86. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_core.py +0 -0
  87. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_detector.py +0 -0
  88. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_e2e.py +0 -0
  89. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_errors.py +0 -0
  90. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_i18n.py +0 -0
  91. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_logger.py +0 -0
  92. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_openapi.py +0 -0
  93. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_parser.py +0 -0
  94. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_parser_supplement.py +0 -0
  95. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_provider_detection.py +0 -0
  96. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_providers.py +0 -0
  97. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_proxy.py +0 -0
  98. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_security.py +0 -0
  99. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_ssrf_supplement.py +0 -0
  100. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_storage.py +0 -0
  101. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_tester.py +0 -0
  102. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_validator.py +0 -0
  103. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_validator_supplement.py +0 -0
  104. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_web_fixes.py +0 -0
  105. {api_key_manager-3.0.0 → api_key_manager-3.0.1}/tests/test_webhook.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: api-key-manager
3
- Version: 3.0.0
3
+ Version: 3.0.1
4
4
  Summary: Batch manage API keys for 45+ AI providers with CLI and Web interfaces
5
5
  Author: Townrain
6
6
  License: MIT
@@ -45,7 +45,7 @@ Requires-Dist: ruff>=0.4.0; extra == "dev"
45
45
  - **Web 界面** - 赛博朋克风格的管理界面
46
46
  - **代理支持** - 支持 HTTP/SOCKS 代理
47
47
  - **加密存储** - AES-256-GCM 加密存储 API 密钥,随机盐值
48
- - **安全防护** - 路径遍历防护、SSRF 防护(含 IPv6)、时序安全认证、强制认证、CORS 配置
48
+ - **安全防护** - 路径遍历防护、SSRF 防护、时序安全认证
49
49
  - **API 文档** - Swagger UI 和 Redoc 自动文档
50
50
  - **国际化** - 支持中英文错误信息
51
51
  - **SDK 支持** - Python 和 TypeScript 客户端库
@@ -85,7 +85,8 @@ Requires-Dist: ruff>=0.4.0; extra == "dev"
85
85
 
86
86
  | 服务商 | 前缀 | 显示名 |
87
87
  |--------|------|--------|
88
- | DashScope | `sk-sp-` | 阿里百炼 |
88
+ | 阿里百炼 | `sk-ws-` / `sk-` |
89
+ | 阿里百炼编程 | `sk-sp-` |
89
90
  | ModelScope | `ms-` | 魔搭 |
90
91
  | Zhipu GLM | `sk-` | 智谱 |
91
92
  | Kimi | `sk-` | 月之暗面 |
@@ -197,13 +198,11 @@ python web.py
197
198
  ### 安全防护
198
199
 
199
200
  - **路径遍历防护** - 导入端点验证路径在允许目录内
200
- - **SSRF 防护** - `custom_base_url` 验证域名白名单,阻止私有 IP(含 IPv6),DNS 重绑定防护
201
+ - **SSRF 防护** - `custom_base_url` 验证域名白名单,阻止私有 IP,已接入 `check/single` 和 `balance` 端点
201
202
  - **时序安全认证** - 使用 `hmac.compare_digest()` 防止时序攻击
202
- - **强制认证** - 未配置 API Key 时自动生成随机密钥,拒绝未认证请求
203
+ - **认证警告** - 未配置 API Key 时启动警告
203
204
  - **密钥掩码** - API 响应中只返回 `key_masked`,不暴露完整密钥
204
- - **CORS 配置** - 跨域资源共享安全配置
205
- - **Webhook 安全** - 使用 `secrets.token_hex` 生成不可预测的 webhook ID
206
- - **存储安全** - 密钥文件权限加固 (0o600),AES-256-GCM 加密,PBKDF2 600,000 次迭代
205
+ - **Webhook 安全** - Webhook 端点使用正确的 API 方法,防止运行时错误
207
206
 
208
207
  ### API 认证
209
208
 
@@ -343,7 +342,7 @@ if best_score >= 200:
343
342
  ### 检测优先级
344
343
 
345
344
  | 优先级 | 方法 | 说明 |
346
- ||------||------|
345
+ |--------|------|------|
347
346
  | 1 | 模式匹配 | 唯一前缀,如 `sk-proj-` → OpenAI |
348
347
  | 2 | 格式匹配 | 特殊格式,如 `{id}.{secret}` → 智谱 |
349
348
  | 3 | 全并发探测 | 第一个返回200的服务商胜出 |
@@ -371,9 +370,6 @@ if best_score >= 200:
371
370
  - 基于关键词的模式匹配(authentication、expired、rate limit 等)
372
371
  - 长错误信息截断(超过100字符时截断并添加省略号)
373
372
 
374
- ## 项目结构
375
-
376
-
377
373
  ## 模型检测
378
374
 
379
375
  ### 模型列表来源
@@ -723,25 +719,12 @@ const result = await client.checkSingleKey({ key: 'sk-xxx', provider: 'openai' }
723
719
 
724
720
  ### v3.0.0 (2026-06-15)
725
721
 
726
- - **安全修复**: 移除 API 响应中的明文密钥,只返回 key_masked
727
- - **安全修复**: 强制认证,无配置时自动生成随机 API Key
728
- - **安全修复**: 使用 hmac.compare_digest 防止时序攻击
729
- - **安全修复**: 添加 CORS 中间件配置
730
- - **性能优化**: PBKDF2 密钥缓存,迭代次数提升至 600,000 (OWASP 推荐)
731
- - **性能优化**: 速率限制器添加 TTL 驱逐,防止内存泄漏
732
- - **可靠性**: 修复 checker.py 合并逻辑错误
733
- - **可靠性**: 替换所有裸 except 为 except Exception
734
- - **可靠性**: 添加配置验证和错误处理
735
- - **可靠性**: 添加 /healthz 健康检查端点
736
- - **可靠性**: 修复 datetime.utcnow() 废弃警告
737
- - **SSRF 防护**: 添加 IPv6 私有范围和 DNS 重绑定防护
738
- - **Webhook 安全**: 使用 secrets.token_hex 替代 MD5 生成 webhook ID
739
- - **存储安全**: 密钥文件权限加固 (0o600)
740
- - **前端**: 模型检测列表添加自定义滚轮条样式
741
- - **前端**: 修复模型类型下拉窗口被弹窗裁剪的问题
742
- - **精确匹配修复**: 能力检测从子串匹配改为 ^$ 锚定精确匹配
743
- - **API Bug 修复**: 修复 /api/stats/chart 运行时崩溃
744
- - **测试补充**: 新增 8 个端点的测试,覆盖率 91.47%
722
+ - **精确匹配修复**: 能力检测从子串匹配改为 ^$ 锚定精确匹配,修复 o1 误匹配 o1-mini 等问题
723
+ - **API Bug 修复**: 修复 /api/stats/chart 运行时崩溃、/api/keys 和 /api/keys/export 丢失 key 字段
724
+ - **测试补充**: 新增 8 个端点的测试(test/token, test/concurrency, models/capabilities, models/check, progress/stream 等)
725
+ - **前端缓存优化**: 模型类型切换使用本地缓存过滤,不再重复请求 API
726
+ - **Cherry Studio 同步工作流修复**: 修复 GitHub Actions 路径错误和验证脚本
727
+ - **Autofill 样式修复**: 修复浏览器 autofill 导致输入框底色变白
745
728
 
746
729
  ### v2.2.2 (2026-06-14)
747
730
 
@@ -767,7 +750,6 @@ const result = await client.checkSingleKey({ key: 'sk-xxx', provider: 'openai' }
767
750
  - **超时控制**: 所有网络请求 5 秒超时
768
751
  - **模型同步**: 从 Cherry Studio 同步模型数据,支持 ownedBy 映射
769
752
  - **新增服务商**: OpenCode Go、OpenCode Zen
770
- - **新增服务商**: OpenCode Go、OpenCode Zen
771
753
 
772
754
  ### v2.1.2 (2026-06-11)
773
755
 
@@ -12,7 +12,7 @@
12
12
  - **Web 界面** - 赛博朋克风格的管理界面
13
13
  - **代理支持** - 支持 HTTP/SOCKS 代理
14
14
  - **加密存储** - AES-256-GCM 加密存储 API 密钥,随机盐值
15
- - **安全防护** - 路径遍历防护、SSRF 防护(含 IPv6)、时序安全认证、强制认证、CORS 配置
15
+ - **安全防护** - 路径遍历防护、SSRF 防护、时序安全认证
16
16
  - **API 文档** - Swagger UI 和 Redoc 自动文档
17
17
  - **国际化** - 支持中英文错误信息
18
18
  - **SDK 支持** - Python 和 TypeScript 客户端库
@@ -52,7 +52,8 @@
52
52
 
53
53
  | 服务商 | 前缀 | 显示名 |
54
54
  |--------|------|--------|
55
- | DashScope | `sk-sp-` | 阿里百炼 |
55
+ | 阿里百炼 | `sk-ws-` / `sk-` |
56
+ | 阿里百炼编程 | `sk-sp-` |
56
57
  | ModelScope | `ms-` | 魔搭 |
57
58
  | Zhipu GLM | `sk-` | 智谱 |
58
59
  | Kimi | `sk-` | 月之暗面 |
@@ -164,13 +165,11 @@ python web.py
164
165
  ### 安全防护
165
166
 
166
167
  - **路径遍历防护** - 导入端点验证路径在允许目录内
167
- - **SSRF 防护** - `custom_base_url` 验证域名白名单,阻止私有 IP(含 IPv6),DNS 重绑定防护
168
+ - **SSRF 防护** - `custom_base_url` 验证域名白名单,阻止私有 IP,已接入 `check/single` 和 `balance` 端点
168
169
  - **时序安全认证** - 使用 `hmac.compare_digest()` 防止时序攻击
169
- - **强制认证** - 未配置 API Key 时自动生成随机密钥,拒绝未认证请求
170
+ - **认证警告** - 未配置 API Key 时启动警告
170
171
  - **密钥掩码** - API 响应中只返回 `key_masked`,不暴露完整密钥
171
- - **CORS 配置** - 跨域资源共享安全配置
172
- - **Webhook 安全** - 使用 `secrets.token_hex` 生成不可预测的 webhook ID
173
- - **存储安全** - 密钥文件权限加固 (0o600),AES-256-GCM 加密,PBKDF2 600,000 次迭代
172
+ - **Webhook 安全** - Webhook 端点使用正确的 API 方法,防止运行时错误
174
173
 
175
174
  ### API 认证
176
175
 
@@ -310,7 +309,7 @@ if best_score >= 200:
310
309
  ### 检测优先级
311
310
 
312
311
  | 优先级 | 方法 | 说明 |
313
- ||------||------|
312
+ |--------|------|------|
314
313
  | 1 | 模式匹配 | 唯一前缀,如 `sk-proj-` → OpenAI |
315
314
  | 2 | 格式匹配 | 特殊格式,如 `{id}.{secret}` → 智谱 |
316
315
  | 3 | 全并发探测 | 第一个返回200的服务商胜出 |
@@ -338,9 +337,6 @@ if best_score >= 200:
338
337
  - 基于关键词的模式匹配(authentication、expired、rate limit 等)
339
338
  - 长错误信息截断(超过100字符时截断并添加省略号)
340
339
 
341
- ## 项目结构
342
-
343
-
344
340
  ## 模型检测
345
341
 
346
342
  ### 模型列表来源
@@ -690,25 +686,12 @@ const result = await client.checkSingleKey({ key: 'sk-xxx', provider: 'openai' }
690
686
 
691
687
  ### v3.0.0 (2026-06-15)
692
688
 
693
- - **安全修复**: 移除 API 响应中的明文密钥,只返回 key_masked
694
- - **安全修复**: 强制认证,无配置时自动生成随机 API Key
695
- - **安全修复**: 使用 hmac.compare_digest 防止时序攻击
696
- - **安全修复**: 添加 CORS 中间件配置
697
- - **性能优化**: PBKDF2 密钥缓存,迭代次数提升至 600,000 (OWASP 推荐)
698
- - **性能优化**: 速率限制器添加 TTL 驱逐,防止内存泄漏
699
- - **可靠性**: 修复 checker.py 合并逻辑错误
700
- - **可靠性**: 替换所有裸 except 为 except Exception
701
- - **可靠性**: 添加配置验证和错误处理
702
- - **可靠性**: 添加 /healthz 健康检查端点
703
- - **可靠性**: 修复 datetime.utcnow() 废弃警告
704
- - **SSRF 防护**: 添加 IPv6 私有范围和 DNS 重绑定防护
705
- - **Webhook 安全**: 使用 secrets.token_hex 替代 MD5 生成 webhook ID
706
- - **存储安全**: 密钥文件权限加固 (0o600)
707
- - **前端**: 模型检测列表添加自定义滚轮条样式
708
- - **前端**: 修复模型类型下拉窗口被弹窗裁剪的问题
709
- - **精确匹配修复**: 能力检测从子串匹配改为 ^$ 锚定精确匹配
710
- - **API Bug 修复**: 修复 /api/stats/chart 运行时崩溃
711
- - **测试补充**: 新增 8 个端点的测试,覆盖率 91.47%
689
+ - **精确匹配修复**: 能力检测从子串匹配改为 ^$ 锚定精确匹配,修复 o1 误匹配 o1-mini 等问题
690
+ - **API Bug 修复**: 修复 /api/stats/chart 运行时崩溃、/api/keys 和 /api/keys/export 丢失 key 字段
691
+ - **测试补充**: 新增 8 个端点的测试(test/token, test/concurrency, models/capabilities, models/check, progress/stream 等)
692
+ - **前端缓存优化**: 模型类型切换使用本地缓存过滤,不再重复请求 API
693
+ - **Cherry Studio 同步工作流修复**: 修复 GitHub Actions 路径错误和验证脚本
694
+ - **Autofill 样式修复**: 修复浏览器 autofill 导致输入框底色变白
712
695
 
713
696
  ### v2.2.2 (2026-06-14)
714
697
 
@@ -734,7 +717,6 @@ const result = await client.checkSingleKey({ key: 'sk-xxx', provider: 'openai' }
734
717
  - **超时控制**: 所有网络请求 5 秒超时
735
718
  - **模型同步**: 从 Cherry Studio 同步模型数据,支持 ownedBy 映射
736
719
  - **新增服务商**: OpenCode Go、OpenCode Zen
737
- - **新增服务商**: OpenCode Go、OpenCode Zen
738
720
 
739
721
  ### v2.1.2 (2026-06-11)
740
722
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: api-key-manager
3
- Version: 3.0.0
3
+ Version: 3.0.1
4
4
  Summary: Batch manage API keys for 45+ AI providers with CLI and Web interfaces
5
5
  Author: Townrain
6
6
  License: MIT
@@ -45,7 +45,7 @@ Requires-Dist: ruff>=0.4.0; extra == "dev"
45
45
  - **Web 界面** - 赛博朋克风格的管理界面
46
46
  - **代理支持** - 支持 HTTP/SOCKS 代理
47
47
  - **加密存储** - AES-256-GCM 加密存储 API 密钥,随机盐值
48
- - **安全防护** - 路径遍历防护、SSRF 防护(含 IPv6)、时序安全认证、强制认证、CORS 配置
48
+ - **安全防护** - 路径遍历防护、SSRF 防护、时序安全认证
49
49
  - **API 文档** - Swagger UI 和 Redoc 自动文档
50
50
  - **国际化** - 支持中英文错误信息
51
51
  - **SDK 支持** - Python 和 TypeScript 客户端库
@@ -85,7 +85,8 @@ Requires-Dist: ruff>=0.4.0; extra == "dev"
85
85
 
86
86
  | 服务商 | 前缀 | 显示名 |
87
87
  |--------|------|--------|
88
- | DashScope | `sk-sp-` | 阿里百炼 |
88
+ | 阿里百炼 | `sk-ws-` / `sk-` |
89
+ | 阿里百炼编程 | `sk-sp-` |
89
90
  | ModelScope | `ms-` | 魔搭 |
90
91
  | Zhipu GLM | `sk-` | 智谱 |
91
92
  | Kimi | `sk-` | 月之暗面 |
@@ -197,13 +198,11 @@ python web.py
197
198
  ### 安全防护
198
199
 
199
200
  - **路径遍历防护** - 导入端点验证路径在允许目录内
200
- - **SSRF 防护** - `custom_base_url` 验证域名白名单,阻止私有 IP(含 IPv6),DNS 重绑定防护
201
+ - **SSRF 防护** - `custom_base_url` 验证域名白名单,阻止私有 IP,已接入 `check/single` 和 `balance` 端点
201
202
  - **时序安全认证** - 使用 `hmac.compare_digest()` 防止时序攻击
202
- - **强制认证** - 未配置 API Key 时自动生成随机密钥,拒绝未认证请求
203
+ - **认证警告** - 未配置 API Key 时启动警告
203
204
  - **密钥掩码** - API 响应中只返回 `key_masked`,不暴露完整密钥
204
- - **CORS 配置** - 跨域资源共享安全配置
205
- - **Webhook 安全** - 使用 `secrets.token_hex` 生成不可预测的 webhook ID
206
- - **存储安全** - 密钥文件权限加固 (0o600),AES-256-GCM 加密,PBKDF2 600,000 次迭代
205
+ - **Webhook 安全** - Webhook 端点使用正确的 API 方法,防止运行时错误
207
206
 
208
207
  ### API 认证
209
208
 
@@ -343,7 +342,7 @@ if best_score >= 200:
343
342
  ### 检测优先级
344
343
 
345
344
  | 优先级 | 方法 | 说明 |
346
- ||------||------|
345
+ |--------|------|------|
347
346
  | 1 | 模式匹配 | 唯一前缀,如 `sk-proj-` → OpenAI |
348
347
  | 2 | 格式匹配 | 特殊格式,如 `{id}.{secret}` → 智谱 |
349
348
  | 3 | 全并发探测 | 第一个返回200的服务商胜出 |
@@ -371,9 +370,6 @@ if best_score >= 200:
371
370
  - 基于关键词的模式匹配(authentication、expired、rate limit 等)
372
371
  - 长错误信息截断(超过100字符时截断并添加省略号)
373
372
 
374
- ## 项目结构
375
-
376
-
377
373
  ## 模型检测
378
374
 
379
375
  ### 模型列表来源
@@ -723,25 +719,12 @@ const result = await client.checkSingleKey({ key: 'sk-xxx', provider: 'openai' }
723
719
 
724
720
  ### v3.0.0 (2026-06-15)
725
721
 
726
- - **安全修复**: 移除 API 响应中的明文密钥,只返回 key_masked
727
- - **安全修复**: 强制认证,无配置时自动生成随机 API Key
728
- - **安全修复**: 使用 hmac.compare_digest 防止时序攻击
729
- - **安全修复**: 添加 CORS 中间件配置
730
- - **性能优化**: PBKDF2 密钥缓存,迭代次数提升至 600,000 (OWASP 推荐)
731
- - **性能优化**: 速率限制器添加 TTL 驱逐,防止内存泄漏
732
- - **可靠性**: 修复 checker.py 合并逻辑错误
733
- - **可靠性**: 替换所有裸 except 为 except Exception
734
- - **可靠性**: 添加配置验证和错误处理
735
- - **可靠性**: 添加 /healthz 健康检查端点
736
- - **可靠性**: 修复 datetime.utcnow() 废弃警告
737
- - **SSRF 防护**: 添加 IPv6 私有范围和 DNS 重绑定防护
738
- - **Webhook 安全**: 使用 secrets.token_hex 替代 MD5 生成 webhook ID
739
- - **存储安全**: 密钥文件权限加固 (0o600)
740
- - **前端**: 模型检测列表添加自定义滚轮条样式
741
- - **前端**: 修复模型类型下拉窗口被弹窗裁剪的问题
742
- - **精确匹配修复**: 能力检测从子串匹配改为 ^$ 锚定精确匹配
743
- - **API Bug 修复**: 修复 /api/stats/chart 运行时崩溃
744
- - **测试补充**: 新增 8 个端点的测试,覆盖率 91.47%
722
+ - **精确匹配修复**: 能力检测从子串匹配改为 ^$ 锚定精确匹配,修复 o1 误匹配 o1-mini 等问题
723
+ - **API Bug 修复**: 修复 /api/stats/chart 运行时崩溃、/api/keys 和 /api/keys/export 丢失 key 字段
724
+ - **测试补充**: 新增 8 个端点的测试(test/token, test/concurrency, models/capabilities, models/check, progress/stream 等)
725
+ - **前端缓存优化**: 模型类型切换使用本地缓存过滤,不再重复请求 API
726
+ - **Cherry Studio 同步工作流修复**: 修复 GitHub Actions 路径错误和验证脚本
727
+ - **Autofill 样式修复**: 修复浏览器 autofill 导致输入框底色变白
745
728
 
746
729
  ### v2.2.2 (2026-06-14)
747
730
 
@@ -767,7 +750,6 @@ const result = await client.checkSingleKey({ key: 'sk-xxx', provider: 'openai' }
767
750
  - **超时控制**: 所有网络请求 5 秒超时
768
751
  - **模型同步**: 从 Cherry Studio 同步模型数据,支持 ownedBy 映射
769
752
  - **新增服务商**: OpenCode Go、OpenCode Zen
770
- - **新增服务商**: OpenCode Go、OpenCode Zen
771
753
 
772
754
  ### v2.1.2 (2026-06-11)
773
755