workbuddy2api 2.0.0__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.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Mayer
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,634 @@
1
+ Metadata-Version: 2.4
2
+ Name: workbuddy2api
3
+ Version: 2.0.0
4
+ Summary: Local OpenAI/Responses/Anthropic compatible proxy for CodeBuddy
5
+ Requires-Python: >=3.10
6
+ Description-Content-Type: text/markdown
7
+ License-File: LICENSE
8
+ Requires-Dist: fastapi>=0.104.0
9
+ Requires-Dist: uvicorn>=0.24.0
10
+ Requires-Dist: httpx[socks]>=0.25.0
11
+ Requires-Dist: requests>=2.31.0
12
+ Provides-Extra: dev
13
+ Requires-Dist: pytest>=7.4.0; extra == "dev"
14
+ Dynamic: license-file
15
+
16
+ # CodeBuddy API 代理
17
+
18
+ > 一个轻量级的 API 代理服务,将 CodeBuddy 底层接口转换为标准的 OpenAI、Anthropic 和 Responses 协议格式。
19
+
20
+ ## ✨ 核心特性
21
+
22
+ - **协议转换** - 支持 OpenAI Chat Completions、Anthropic Messages API 和 Responses 三种标准格式
23
+ - **脱敏处理** - 内置智能脱敏模块,自动过滤敏感信息(账号、密码、密钥、品牌词、路径等),有效缓解审核误拦
24
+ - **消息压缩** - 智能压缩历史消息,大幅降低 token 使用量(适用于 Codex CLI 等长上下文场景)
25
+ - **工具调用支持** - 完整支持 function calling 和 tool use 特性,自动过滤无效工具定义
26
+ - **DSML 解析** - 自动识别和转换 DeepSeek 标记语言(DSML)格式的工具调用
27
+ - **流式响应** - 支持 SSE 流式输出,实时返回生成内容,内置 60 秒超时保护
28
+ - **多账号管理** - 支持多个登录态隔离,方便工作/个人账号切换
29
+ ---
30
+
31
+ ## 安装
32
+
33
+ 推荐使用 [uv](https://docs.astral.sh/uv/):
34
+
35
+ ```bash
36
+ # 安装 uv
37
+ curl -LsSf https://astral.sh/uv/install.sh | sh
38
+
39
+ # 直接运行(uv 会自动安装依赖)
40
+ uv run codebuddy_proxy.py
41
+ ```
42
+
43
+ 或传统方式:
44
+
45
+ ```bash
46
+ pip install -r requirements.txt
47
+ python codebuddy_proxy.py
48
+ ```
49
+
50
+ ## 快速开始
51
+
52
+ ### 1. 启动 proxy
53
+
54
+ ```bash
55
+ # 使用 uv(推荐)
56
+ uv run codebuddy_proxy.py --desensitize
57
+
58
+ # 或传统方式
59
+ python codebuddy_proxy.py --desensitize
60
+ ```
61
+
62
+ 默认监听 `http://127.0.0.1:8787`
63
+
64
+ ### 2. 验证
65
+
66
+ ```bash
67
+ curl http://127.0.0.1:8787/health
68
+ curl http://127.0.0.1:8787/v1/models
69
+ ```
70
+
71
+ ### 3. 接入客户端
72
+
73
+ #### Codex CLI
74
+
75
+ 编辑 `~/.codex/config.toml`:
76
+
77
+ ```toml
78
+ [model_providers.codebuddy]
79
+ name = "CodeBuddy (via local proxy)"
80
+ base_url = "http://127.0.0.1:8787/v1"
81
+ wire_api = "responses"
82
+
83
+ [profiles.codebuddy]
84
+ model = "glm-5.2"
85
+ model_provider = "codebuddy"
86
+ ```
87
+
88
+ 使用:
89
+
90
+ ```bash
91
+ codex --profile codebuddy "你的任务"
92
+ ```
93
+
94
+ #### Claude Code + CC Switch
95
+
96
+ 在 CC Switch 配置中添加:
97
+
98
+ ```json
99
+ {
100
+ "DeepSeek-V4": {
101
+ "base_url": "http://127.0.0.1:8787/v1/messages",
102
+ "api_key": "",
103
+ "model": "deepseek-v4-pro"
104
+ }
105
+ }
106
+ ```
107
+
108
+ #### 其他 OpenAI 兼容客户端
109
+
110
+ - Base URL: `http://127.0.0.1:8787/v1`
111
+ - API Key: 留空(或填你启动时用 `--api-key` 设置的值)
112
+ - 模型名: `glm-5.2` / `deepseek-v4-pro` / `kimi-k2.7` / `auto` 等
113
+
114
+ ## 命令行参数
115
+
116
+ ```bash
117
+ --host HOST 监听地址(默认 127.0.0.1)
118
+ --port PORT 监听端口(默认 8787)
119
+ --endpoint ENDPOINT CodeBuddy 后端地址
120
+ --session-file PATH 会话文件路径(默认 ~/.codebuddy-session.json)
121
+ --log-file PATH JSONL 日志文件(默认 logs/codebuddy-proxy.jsonl)
122
+ --desensitize 启用脱敏处理(推荐)
123
+ --optimize-context 启用消息压缩优化(Codex CLI 推荐)
124
+ --login 启动时执行浏览器登录
125
+ --no-browser 登录时不打开浏览器
126
+ --verbose-llm log full LLM request/response content
127
+ (default: summary only, saves 98% space)
128
+ --mock-dir DIR 使用 mock 数据(测试用)
129
+ ```
130
+
131
+ ### 环境变量
132
+
133
+ ```bash
134
+ CODEBUDDY_PROXY_HOST # 等同 --host
135
+ CODEBUDDY_PROXY_PORT # 等同 --port
136
+ CODEBUDDY_ENDPOINT # 等同 --endpoint
137
+ CODEBUDDY_PROXY_LOG_FILE # 等同 --log-file
138
+ ```
139
+
140
+ ## 常见场景
141
+
142
+ ### 首次使用(需要登录)
143
+
144
+ ```bash
145
+ uv run codebuddy_proxy.py --login
146
+ ```
147
+
148
+ 浏览器打开后登录,成功后 proxy 自动启动。
149
+
150
+ ### 日常使用(自动读取登录态)
151
+
152
+ ```bash
153
+ uv run codebuddy_proxy.py --desensitize
154
+ ```
155
+
156
+ ### Codex CLI 场景(启用压缩优化)
157
+
158
+ ```bash
159
+ uv run codebuddy_proxy.py --desensitize --optimize-context
160
+ ```
161
+
162
+ ### 多账号切换
163
+
164
+ ```bash
165
+ # 账号 1
166
+ uv run codebuddy_proxy.py --session-file ~/.codebuddy-work.json --login
167
+
168
+ # 账号 2
169
+ uv run codebuddy_proxy.py --session-file ~/.codebuddy-personal.json --login
170
+ ```
171
+
172
+ ### 监听所有网卡(局域网共享)
173
+
174
+ ```bash
175
+ uv run codebuddy_proxy.py --host 0.0.0.0 --desensitize
176
+ ```
177
+
178
+ ## API 接口
179
+
180
+ 所有接口默认不需要在请求中额外携带 token,代理会使用本地 session 完成认证。
181
+
182
+ | 方法 | 路径 | 用途 |
183
+ | --- | --- | --- |
184
+ | GET | `/health` | 查询本地服务和认证状态 |
185
+ | GET | `/v1/models` | 查询 CodeBuddy 模型列表 |
186
+ | POST | `/v1/chat/completions` | OpenAI Chat Completions,支持 tools 和流式响应 |
187
+ | POST | `/v1/responses` | Responses API,兼容 Codex CLI |
188
+ | POST | `/v1/messages` | Anthropic Messages API,兼容 Claude Code / CC Switch |
189
+
190
+ ### `/health` - 健康检查
191
+
192
+ ```bash
193
+ curl http://127.0.0.1:8787/health
194
+ ```
195
+
196
+ 返回示例:
197
+
198
+ ```json
199
+ {
200
+ "status": "ok",
201
+ "uptime_seconds": 123.45,
202
+ "authenticated": true,
203
+ "token_valid": true
204
+ }
205
+ ```
206
+
207
+ ### `/v1/models` - 模型列表
208
+
209
+ ```bash
210
+ curl http://127.0.0.1:8787/v1/models
211
+ ```
212
+
213
+ 返回 OpenAI 格式的模型列表,`data[].id` 就是后续请求中的 `model` 值(如 `deepseek-v4-flash`、`glm-5.2`)。
214
+
215
+ ### `/v1/chat/completions` - OpenAI Chat
216
+
217
+ **非流式请求:**
218
+
219
+ ```bash
220
+ curl http://127.0.0.1:8787/v1/chat/completions \
221
+ -H 'Content-Type: application/json' \
222
+ -d '{
223
+ "model": "deepseek-v4-flash",
224
+ "messages": [{"role": "user", "content": "写一个快排"}]
225
+ }'
226
+ ```
227
+
228
+ **流式请求:**
229
+
230
+ ```bash
231
+ curl -N http://127.0.0.1:8787/v1/chat/completions \
232
+ -H 'Content-Type: application/json' \
233
+ -d '{
234
+ "model": "glm-5.2",
235
+ "stream": true,
236
+ "messages": [{"role": "user", "content": "hi"}]
237
+ }'
238
+ ```
239
+
240
+ 支持 `tools`、`tool_choice`、`stream_options` 等完整 OpenAI 特性。
241
+
242
+ ### `/v1/responses` - Responses API
243
+
244
+ 用于兼容 Codex CLI:
245
+
246
+ ```bash
247
+ curl http://127.0.0.1:8787/v1/responses \
248
+ -H 'Content-Type: application/json' \
249
+ -d '{
250
+ "model": "default",
251
+ "input": "写一个快排"
252
+ }'
253
+ ```
254
+
255
+ 支持 `instructions` (system prompt)、消息形式的 `input`、`tools`、`tool_choice` 和 `stream`。
256
+
257
+ **💡 提示:** 使用 `--optimize-context` 可大幅减少 Codex CLI 的 token 使用。
258
+
259
+ ### `/v1/messages` - Anthropic Messages
260
+
261
+ 用于兼容 Claude Code / CC Switch:
262
+
263
+ ```bash
264
+ curl http://127.0.0.1:8787/v1/messages \
265
+ -H 'Content-Type: application/json' \
266
+ -d '{
267
+ "model": "deepseek-v4-pro",
268
+ "max_tokens": 4096,
269
+ "messages": [{"role": "user", "content": "hi"}]
270
+ }'
271
+ ```
272
+
273
+ 设置 `"stream": true` 时返回 Anthropic SSE 事件流。
274
+
275
+ ## 高级功能
276
+
277
+ ### 脱敏处理 (`--desensitize`)
278
+
279
+ 对 system 消息中的敏感词插入零宽空格(U+200B),打断后端关键词匹配,缓解合规模板被审核误拦。
280
+
281
+ #### 何时需要使用
282
+
283
+ **强烈推荐启用的场景:**
284
+
285
+ 1. **对接 Claude Code / CC Switch**
286
+ - Claude Code 的 system prompt 包含大量 Anthropic 品牌词和安全合规声明
287
+ - 腾讯后端可能将竞争品牌词("Claude"、"Anthropic")视为敏感内容
288
+ - 不启用脱敏时,几乎每次请求都会被审核拦截
289
+
290
+ 2. **对接 Codex CLI / Oh My Posh 等 agentic 工具**
291
+ - 这些工具的 system prompt 含有大量安全术语(DoS、exploit、credential testing 等)
292
+ - 即使是合规的"拒绝有害请求"声明,也可能被关键词匹配误拦
293
+
294
+ 3. **使用包含安全术语的自定义 system prompt**
295
+ - 安全研究、渗透测试相关的合规对话
296
+ - 需要讨论漏洞、攻击防御的技术文档生成
297
+
298
+ **典型错误信息:**
299
+ ```json
300
+ {
301
+ "error": {
302
+ "message": "内容违规",
303
+ "type": "content_policy_violation"
304
+ }
305
+ }
306
+ ```
307
+ 或后端返回空响应、连接中断。
308
+
309
+ **不需要启用的场景:**
310
+ - ✅ 普通对话(无安全术语)
311
+ - ✅ 使用官方 CodeBuddy 客户端(已内置处理)
312
+ - ✅ 纯粹的代码生成(无品牌词/安全声明)
313
+
314
+ #### 典型使用案例
315
+
316
+
317
+ ## 🔧 技术细节
318
+
319
+ ### 工具调用兼容性
320
+
321
+ 代理自动过滤不兼容的工具定义,确保上游 API 接受:
322
+
323
+ **过滤规则**:
324
+ - ❌ 非 `type: "function"` 的工具(如 `web_search`)
325
+ - ❌ `parameters` 为空对象 `{}` 的工具
326
+ - ❌ `parameters` 缺少 `type` 字段的工具
327
+ - ✅ 清理 `additionalProperties` 和 `strict` 字段(CodeBuddy 后端不支持)
328
+
329
+ **日志事件**:`tools_filtered` 记录过滤详情
330
+
331
+ ### 流式响应保护
332
+
333
+ **超时配置**:
334
+ - **连接超时**:30 秒
335
+ - **读取超时**:300 秒(两次数据接收间隔)
336
+ - **总时长限制**:60 秒(防止流无限期运行)
337
+
338
+ **为什么需要总时长限制**:
339
+ - httpx 的 `read timeout` 只限制两次数据间隔,不限制总时长
340
+ - 上游持续发送数据时,流可能无限期运行(观察到 6+ 分钟,2000+ chunks 的异常流)
341
+ - 60 秒适合交互式对话,可根据场景调整(代码中修改 `MAX_STREAM_DURATION`)
342
+
343
+ **日志事件**:`stream_duration_exceeded` 记录超时截断
344
+
345
+ ### DSML 解析
346
+
347
+ 自动识别三种工具调用标记格式:
348
+
349
+ 1. **DeepSeek DSML**:`<||DSML||tool_calls>` / `<||DSML||invoke name="...">`
350
+ 2. **Claude 风格**:`<tool_call><invoke name="exec_command"><cmd>...</cmd></invoke></tool_call>`
351
+ 3. **简化格式**:`<tool_call><toolName>bash</toolName>...</tool_call>`
352
+
353
+ 解析后转换为标准 OpenAI `tool_calls` 格式,并从响应内容中清理标记。
354
+
355
+ ### 协议适配
356
+
357
+ | 源协议 | 目标协议 | 转换器 | 说明 |
358
+ |--------|----------|--------|------|
359
+ | CodeBuddy Chat | OpenAI Chat | 直接透传 | 添加 DSML 解析 |
360
+ | CodeBuddy Chat | Responses API | `ResponsesStreamConverter` | 事件序列转换 |
361
+ | CodeBuddy Chat | Anthropic Messages | `AnthropicStreamConverter` | 流式事件映射 |
362
+
363
+ **流式事件映射**(Responses API):
364
+ ```
365
+ upstream chunk → response.output_text.delta
366
+ 工具调用 → response.output_item.added (function_call)
367
+ 完成 → response.completed
368
+ ```
369
+
370
+ **案例 1: 对接 Claude Code**
371
+
372
+ ```bash
373
+ # 必须启用 --desensitize,否则几乎每次都被拦截
374
+ uv run codebuddy_proxy.py --desensitize
375
+
376
+ # 在 Claude Code / CC Switch 中配置
377
+ # Base URL: http://127.0.0.1:8787/v1/messages
378
+ ```
379
+
380
+ **案例 2: 对接 Codex CLI**
381
+
382
+ ```bash
383
+ # 同时启用脱敏和消息压缩(最佳配置)
384
+ uv run codebuddy_proxy.py --desensitize --optimize-context
385
+
386
+ # 在 Codex CLI 配置文件中
387
+ # base_url: http://127.0.0.1:8787/v1/responses
388
+ ```
389
+
390
+ **案例 3: 安全研究对话**
391
+
392
+ ```bash
393
+ # 启用脱敏以避免合规术语被误拦
394
+ uv run codebuddy_proxy.py --desensitize
395
+
396
+ # 示例请求
397
+ curl http://127.0.0.1:8787/v1/chat/completions \
398
+ -H 'Content-Type: application/json' \
399
+ -d '{
400
+ "model": "deepseek-v4-pro",
401
+ "messages": [
402
+ {
403
+ "role": "system",
404
+ "content": "You are a security expert. Refuse requests for exploit development."
405
+ },
406
+ {
407
+ "role": "user",
408
+ "content": "解释 SQL injection 的防御措施"
409
+ }
410
+ ]
411
+ }'
412
+ ```
413
+
414
+ #### 工作原理
415
+
416
+ ```python
417
+ # 原文
418
+ "Refuse requests for DoS attacks and exploit development."
419
+
420
+ # 脱敏后(插入零宽空格 U+200B)
421
+ "Refuse requests for Do​S a​ttacks and e​xploit development."
422
+ # 人眼/模型:看起来完全一样
423
+ # 后端审核:关键词匹配失效
424
+ ```
425
+
426
+ #### 处理范围
427
+
428
+ - ✅ system 角色消息(默认)
429
+ - ✅ developer 角色消息
430
+ - ✅ Codex CLI / Claude Code 注入的 harness user 消息
431
+ - ✅ tools 的 description 字段
432
+ - ❌ user/assistant 消息(保持原样,不影响正常对话)
433
+
434
+ #### 敏感词表
435
+
436
+ 约 80 个安全/合规术语:
437
+ - 攻击类型:DoS, DDoS, exploit, SQL injection, XSS, malware...
438
+ - 安全术语:vulnerability, penetration testing, privilege escalation...
439
+ - 品牌词:Claude Code, Anthropic(避免竞争品牌触发审核)
440
+
441
+ 完整列表见 `desensitize.py` 中的 `SENSITIVE_TERMS`。
442
+
443
+ #### 注意事项
444
+
445
+ - ✅ 只处理合规声明,不绕过对有害输入的审核
446
+ - ✅ 只改 system 消息,真实用户输入保持原样
447
+ - ⚠️ 零宽空格对人眼/模型透明,但会影响精确字符串匹配
448
+ - ⚠️ 性能开销:<1ms(正则替换)
449
+
450
+ ---
451
+
452
+ ### 消息压缩优化 (`--optimize-context`)
453
+
454
+ 仅对 `/v1/responses` 端点生效,将长历史、大 schema、超长工具输出压缩成"最小语义闭包",大幅减少 token 使用(可能减少 60-90%)。
455
+
456
+ #### 适用场景
457
+
458
+ - ✅ 使用 Codex CLI / Claude Code 等 agentic 工具(长历史)
459
+ - ✅ Token 使用量很大(>100k/天)
460
+ - ✅ 经常触发 "context " 错误
461
+ - ✅ 每次请求都发送完整历史记录
462
+ - ❌ 不用于短对话/简单请求
463
+
464
+ #### 使用方法
465
+
466
+ ```bash
467
+ # 启用消息压缩
468
+ uv run codebuddy_proxy.py --optimize-context
469
+
470
+ # 同时启用两个功能(推荐用于 Codex CLI)
471
+ uv run codebuddy_proxy.py --desensitize --optimize-context
472
+ ```
473
+
474
+ #### 工作原理
475
+
476
+ ##### Conservative 模式(非 agentic 请求)
477
+
478
+ 只做长度裁剪:
479
+ - System → 截断至 1200 字符
480
+ - User → 3200 字符
481
+ - Assistant → 首尾保留摘要(1800)
482
+ - Tool 输出 → 压缩至 1600 字符
483
+
484
+ ##### Aggressive 模式(agentic CLI 请求)
485
+
486
+ 自动检测 agentic 请求(tools 包含 `exec_command`、`apply_patch` 等,或消息含 harness 标记),重构成最小语义闭包:
487
+
488
+ 1. **丢弃 harness 消息** — 删除所有 Codex/Claude Code 注入的 system/user 消息
489
+ 2. **保留最近上下文** — 从后往前保留 ≤8 条消息 / ≤7000 字符
490
+ 3. **历史摘要化** — 更早的历史压缩为规则摘要(每条一行)
491
+ 4. **Schema 收敛** — 只保留结构字段,删除 description(最占空间)
492
+ 5. **Tool 输出/参数压缩** — 保留关键部分,其余省略
493
+
494
+ #### 效果示例
495
+
496
+ ```
497
+ 原始请求:
498
+ - Messages: 50 条,120,000 字符
499
+ - Tools: 15 个,45,000 字符
500
+ - 总计:~165,000 字符(~40k tokens)
501
+
502
+ 压缩后:
503
+ - Messages: 12 条,18,000 字符
504
+ - Tools: 15 个,8,000 字符
505
+ - 总计:~26,000 字符(~6k tokens)
506
+
507
+ 节省:~85% token
508
+ ```
509
+
510
+ #### 日志验证
511
+
512
+ 启用功能后,日志会记录压缩统计:
513
+
514
+ ```bash
515
+ grep projection_applied logs/codebuddy-proxy.jsonl | jq .
516
+ ```
517
+
518
+ 示例输出:
519
+
520
+ ```json
521
+ {
522
+ "event": "projection_applied",
523
+ "protocol": "responses",
524
+ "mode""aggressive",
525
+ "original_messages": 50,
526
+ "projected_messages": 12,
527
+ "original_message_chars": 120000,
528
+ "projected_message_chars": 18000,
529
+ "dropped_harness_messages": 8
530
+ }
531
+ ```
532
+
533
+ #### 注意事项
534
+
535
+ - ✅ 只用于 `/v1/responses`,不影响 chat/messages 端点
536
+ - ✅ 保留语义闭包,模型仍可推理
537
+ - ⚠️ 历史被摘要化,精确细节需重新运行工具获取
538
+ - ⚠️ Schema 被裁剪,description 等辅助信息丢失
539
+ - ⚠️ 性能开销:<10ms(遍历+压缩)
540
+
541
+ ---
542
+
543
+ ### 日志
544
+
545
+ 日志包含:
546
+ - 文本日志:`logs/proxy.log`(按天滚动,保留 30 天)
547
+ - 结构化日志:`logs/codebuddy-proxy.jsonl`(完整请求/响应,包含流式细节)
548
+
549
+ 查看日志:
550
+
551
+ ```bash
552
+ # 实时查看
553
+ tail -f logs/codebuddy-proxy.jsonl
554
+
555
+ # 查看流式事件
556
+ tail -100 logs/codebuddy-proxy.jsonl | jq 'select(.event | startswith("stream"))'
557
+
558
+ # 统计超时
559
+ jq 'select(.event=="stream_timeout")' logs/codebuddy-proxy.jsonl | wc -l
560
+
561
+ # 验证脱敏
562
+ grep desensitize_applied logs/codebuddy-proxy.jsonl
563
+
564
+ # 验证压缩(查看统计数据)
565
+ grep projection_applied logs/codebuddy-proxy.jsonl | jq .
566
+ ```
567
+
568
+ ### 找不到 session 文件
569
+
570
+ 首次使用需要登录:
571
+
572
+ ```bash
573
+ uv run codebuddy_proxy.py --login
574
+ ```
575
+
576
+ ### 401 认证失败
577
+
578
+ Token 过期,重新登录:
579
+
580
+ ```bash
581
+ uv run codebuddy_proxy.py --login
582
+ ```
583
+
584
+ ### 审核拦截
585
+
586
+ 启用脱敏:
587
+
588
+ ```bash
589
+ uv run codebuddy_proxy.py --desensitize
590
+ ```
591
+
592
+ 如果仍然被拦截,尝试压缩优化(仅 `/v1/responses`):
593
+
594
+ ```bash
595
+ uv run codebuddy_proxy.py --desensitize --optimize-context
596
+ ```
597
+
598
+ ### 端口被占用
599
+
600
+ ```bash
601
+ lsof -i :8787
602
+ uv run codebuddy_proxy.py --port 8788
603
+ ```
604
+
605
+ ### SOCKS proxy 错误
606
+
607
+ 依赖已自动安装 `httpx[socks]`。如果仍有问题,检查环境变量:
608
+
609
+ ```bash
610
+ env | grep -i proxy
611
+ ```
612
+
613
+ 临时禁用代理:
614
+
615
+ ```bash
616
+ unset http_proxy https_proxy all_proxy
617
+ uv run codebuddy_proxy.py
618
+ ```
619
+
620
+ ## 技术细节
621
+
622
+ - **架构**: FastAPI + httpx(异步)
623
+ - **并发**: 支持 1000+ 并发请求
624
+ - **超时**: 连接 10 秒,读取 30 秒
625
+ - **流式**: 完整的流式日志(started / progress / completed / timeout)
626
+
627
+ ## 免责声明
628
+
629
+ **本项目仅供学习和研究使用。请遵守 CodeBuddy 的服务条款。**
630
+
631
+ - 本项目不提供任何形式的担保
632
+ - 使用本项目产生的任何后果由使用者自行承担
633
+ - 请勿将本项目用于任何违反 CodeBuddy 服务条款的用途
634
+ - 请勿将本项目用于商业用途