Skip to content

Commit 047dad5

Browse files
committed
merge: release v0.7.2
2 parents 9d6accc + 1a36f38 commit 047dad5

File tree

8 files changed

+75
-31
lines changed

8 files changed

+75
-31
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# Variables
44
APP_NAME := mask-ctl
55
SERVICE_BINARY := coding-plan-mask
6-
VERSION := 0.7.1
6+
VERSION := 0.7.2
77
BUILD_DIR := build
88
BIN_DIR := $(BUILD_DIR)/bin
99
CMD_DIR := cmd/coding-plan-mask

README.md

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
[![Go Version](https://img.shields.io/badge/Go-1.21+-00ADD8?style=flat&logo=go)](https://golang.org/)
88
[![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
9-
[![Version](https://img.shields.io/badge/version-0.7.1-green.svg)](https://github.com/systemime/coding-plan-mask)
9+
[![Version](https://img.shields.io/badge/version-0.7.2-green.svg)](https://github.com/systemime/coding-plan-mask)
1010

1111
*Use your Coding Plan subscription with ANY OpenAI-compatible coding tool*
1212

@@ -67,22 +67,22 @@ Download the binary for your platform from [GitHub Releases](https://github.com/
6767

6868
```bash
6969
# Linux amd64
70-
wget https://github.com/systemime/coding-plan-mask/releases/download/v0.7.1/mask-ctl-linux-amd64
70+
wget https://github.com/systemime/coding-plan-mask/releases/download/v0.7.2/mask-ctl-linux-amd64
7171
chmod +x mask-ctl-linux-amd64
7272
sudo mv mask-ctl-linux-amd64 /usr/local/bin/mask-ctl
7373

7474
# Linux arm64
75-
wget https://github.com/systemime/coding-plan-mask/releases/download/v0.7.1/mask-ctl-linux-arm64
75+
wget https://github.com/systemime/coding-plan-mask/releases/download/v0.7.2/mask-ctl-linux-arm64
7676
chmod +x mask-ctl-linux-arm64
7777
sudo mv mask-ctl-linux-arm64 /usr/local/bin/mask-ctl
7878

7979
# macOS (Darwin amd64)
80-
wget https://github.com/systemime/coding-plan-mask/releases/download/v0.7.1/mask-ctl-darwin-amd64
80+
wget https://github.com/systemime/coding-plan-mask/releases/download/v0.7.2/mask-ctl-darwin-amd64
8181
chmod +x mask-ctl-darwin-amd64
8282
sudo mv mask-ctl-darwin-amd64 /usr/local/bin/mask-ctl
8383

8484
# macOS (Darwin arm64)
85-
wget https://github.com/systemime/coding-plan-mask/releases/download/v0.7.1/mask-ctl-darwin-arm64
85+
wget https://github.com/systemime/coding-plan-mask/releases/download/v0.7.2/mask-ctl-darwin-arm64
8686
chmod +x mask-ctl-darwin-arm64
8787
sudo mv mask-ctl-darwin-arm64 /usr/local/bin/mask-ctl
8888

@@ -190,6 +190,8 @@ In non-debug mode, startup keeps the banner output and proxy activity is shown i
190190
disguise_tool = "claudecode" # Claude Code-style CLI traffic
191191
# claude_code_user_agent = "claude-cli/2.1.76 (external, cli)"
192192
# disguise_tool = "kimicode" # Kimi Code API subscription auth format
193+
# disguise_tool = "opencode" # Legacy OpenCode disguise id
194+
# opencode_user_agent = "opencode/1.2.27 ai-sdk/provider-utils/3.0.20 runtime/bun/1.3.10"
193195
# disguise_tool = "openclaw" # OpenClaw
194196
# openclaw_user_agent = "OpenClaw-Gateway/1.0"
195197
# disguise_tool = "custom" # Use custom User-Agent
@@ -200,10 +202,12 @@ disguise_tool = "claudecode" # Claude Code-style CLI traffic
200202
|------|------------|------------|-------------|
201203
| **Claude Code** | `claudecode` | `claude-cli/2.1.76 (external, cli)` | Current default Claude CLI-style UA, configurable via `claude_code_user_agent` |
202204
| **Kimi Code** | `kimicode` | `claude-code/0.1.0` | Kimi Code API subscription auth format |
205+
| **OpenCode** | `opencode` | `opencode/1.2.27 ai-sdk/provider-utils/3.0.20 runtime/bun/1.3.10` | Legacy disguise id with default UA updated from local capture report |
203206
| **OpenClaw** | `openclaw` | `OpenClaw-Gateway/1.0` | Compatibility default, configurable via `openclaw_user_agent` |
204207
| **Custom** | `custom` | (custom) | Use `custom_user_agent` config |
205208

206209
> **Note**: `claudecode` mode also injects `x-app: cli` if the incoming request does not already provide it.
210+
> **Note**: `opencode` mode keeps the legacy disguise id but now defaults to the locally captured OpenCode 1.2.27 UA. Override it with `opencode_user_agent` if needed.
207211
> **Note**: `openclaw` mode keeps `OpenClaw-Gateway/1.0` as a compatibility default, but this does not imply every current OpenClaw request path uses the same UA.
208212
209213
### 📡 API Endpoints
@@ -250,6 +254,7 @@ You can also configure via environment variables:
250254
| `API_CODING_URL` | Custom coding endpoint URL |
251255
| `DISGUISE_TOOL` | Override disguise tool |
252256
| `CLAUDE_CODE_USER_AGENT` | Override the default UA used by `claudecode` mode |
257+
| `OPENCODE_USER_AGENT` | Override the default UA used by `opencode` mode |
253258
| `OPENCLAW_USER_AGENT` | Override the compatibility UA used by `openclaw` mode |
254259
| `CUSTOM_USER_AGENT` | Override User-Agent directly |
255260

@@ -313,22 +318,22 @@ This project is provided for **educational and research purposes only**.
313318

314319
```bash
315320
# Linux amd64
316-
wget https://github.com/systemime/coding-plan-mask/releases/download/v0.7.1/mask-ctl-linux-amd64
321+
wget https://github.com/systemime/coding-plan-mask/releases/download/v0.7.2/mask-ctl-linux-amd64
317322
chmod +x mask-ctl-linux-amd64
318323
sudo mv mask-ctl-linux-amd64 /usr/local/bin/mask-ctl
319324

320325
# Linux arm64
321-
wget https://github.com/systemime/coding-plan-mask/releases/download/v0.7.1/mask-ctl-linux-arm64
326+
wget https://github.com/systemime/coding-plan-mask/releases/download/v0.7.2/mask-ctl-linux-arm64
322327
chmod +x mask-ctl-linux-arm64
323328
sudo mv mask-ctl-linux-arm64 /usr/local/bin/mask-ctl
324329

325330
# macOS amd64
326-
wget https://github.com/systemime/coding-plan-mask/releases/download/v0.7.1/mask-ctl-darwin-amd64
331+
wget https://github.com/systemime/coding-plan-mask/releases/download/v0.7.2/mask-ctl-darwin-amd64
327332
chmod +x mask-ctl-darwin-amd64
328333
sudo mv mask-ctl-darwin-amd64 /usr/local/bin/mask-ctl
329334

330335
# macOS arm64
331-
wget https://github.com/systemime/coding-plan-mask/releases/download/v0.7.1/mask-ctl-darwin-arm64
336+
wget https://github.com/systemime/coding-plan-mask/releases/download/v0.7.2/mask-ctl-darwin-arm64
332337
chmod +x mask-ctl-darwin-arm64
333338
sudo mv mask-ctl-darwin-arm64 /usr/local/bin/mask-ctl
334339
```
@@ -428,10 +433,12 @@ sudo systemctl start coding-plan-mask
428433
|------|--------|------------|------|
429434
| **Claude Code** | `claudecode` | `claude-cli/2.1.76 (external, cli)` | 当前默认 Claude CLI 风格 UA,可通过 `claude_code_user_agent` 覆盖 |
430435
| **Kimi Code** | `kimicode` | `claude-code/0.1.0` | Kimi Code API 订阅认证格式 |
436+
| **OpenCode** | `opencode` | `opencode/1.2.27 ai-sdk/provider-utils/3.0.20 runtime/bun/1.3.10` | 保留旧 disguise id,默认 UA 已按本地抓包报告更新 |
431437
| **OpenClaw** | `openclaw` | `OpenClaw-Gateway/1.0` | 兼容默认值,可通过 `openclaw_user_agent` 覆盖 |
432438
| **自定义** | `custom` | (自定义) | 使用 `custom_user_agent` 配置 |
433439

434440
> **说明**`claudecode` 模式在传入请求未提供时还会补充 `x-app: cli`
441+
> **说明**`opencode` 模式保留旧标识,但默认 UA 已更新为本地抓包得到的 OpenCode 1.2.27 请求格式,可通过 `opencode_user_agent` 覆盖。
435442
> **说明**`openclaw` 模式保留 `OpenClaw-Gateway/1.0` 作为兼容默认值,但这不代表当前 OpenClaw 所有请求路径都统一使用该 UA。
436443
437444
### 📡 API 端点
@@ -476,6 +483,7 @@ curl http://127.0.0.1:8787/stats
476483
| `API_CODING_URL` | 自定义 Coding API URL |
477484
| `DISGUISE_TOOL` | 覆盖伪装工具 |
478485
| `CLAUDE_CODE_USER_AGENT` | 覆盖 `claudecode` 模式默认 User-Agent |
486+
| `OPENCODE_USER_AGENT` | 覆盖 `opencode` 模式默认 User-Agent |
479487
| `OPENCLAW_USER_AGENT` | 覆盖 `openclaw` 模式兼容默认 User-Agent |
480488
| `CUSTOM_USER_AGENT` | 直接覆盖 User-Agent |
481489

TEST_PLAN.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
**关键发现**
1616
- Claude Code CLI 的 User-Agent 格式存在模式差异,当前更接近 `claude-cli/<version> (external, cli)`
17-
- OpenCode 使用`opencode/0.3.0 (linux)` (项目已归档,更名为 Crush)
17+
- OpenCode 抓包值`opencode/1.2.27 ai-sdk/provider-utils/3.0.20 runtime/bun/1.3.10`
1818
- OpenClaw 在部分请求路径中使用:`OpenClaw-Gateway/1.0`
1919

2020
### 1.2 当前项目实现分析
@@ -65,22 +65,22 @@ x-app: cli
6565
```
6666

6767
#### OpenCode 实现特征
68-
根据 [GitHub 源码](https://github.com/opencode-ai/opencode)
69-
- 使用 Go 的 `net/http` 标准库
70-
- User-Agent: `opencode/0.3.0 (linux)`
68+
根据本地抓包报告
69+
- 运行时为 Bun
70+
- User-Agent: `opencode/1.2.27 ai-sdk/provider-utils/3.0.20 runtime/bun/1.3.10`
7171
- 无额外特殊认证头
7272

7373
#### 当前项目实现
74-
- User-Agent: 可配置(opencode/openclaw/custom)
75-
- 额外添加 `X-Client-Type: coding-tool`
74+
- User-Agent: 可配置(claudecode/kimicode/opencode/openclaw/custom)
75+
- `opencode` 模式当前无额外专属头
7676

7777
**差异点**:
7878
| 项目 | User-Agent | 额外 Header |
7979
|------|------------|-------------|
8080
| Claude Code | `claude-cli/2.1.76 (external, cli)` | `x-app: cli` |
81-
| OpenCode | `opencode/0.3.0 (linux)` ||
81+
| OpenCode | `opencode/1.2.27 ai-sdk/provider-utils/3.0.20 runtime/bun/1.3.10` ||
8282
| OpenClaw | `OpenClaw-Gateway/1.0`(部分路径) ||
83-
| **当前项目** | `claude-cli/2.1.76 (external, cli)` / `OpenClaw-Gateway/1.0` | `x-app: cli`(仅 `claudecode` 模式) |
83+
| **当前项目** | `claude-cli/2.1.76 (external, cli)` / `opencode/1.2.27 ai-sdk/provider-utils/3.0.20 runtime/bun/1.3.10` / `OpenClaw-Gateway/1.0` | `x-app: cli`(仅 `claudecode` 模式) |
8484

8585
**风险点**: Claude Code 的真实请求特征可能继续演进,默认 UA 需要随版本校准。
8686

@@ -224,7 +224,7 @@ curl http://127.0.0.1:8787/v1/chat/completions ...
224224
```
225225

226226
**关注点**:
227-
1. User-Agent 值是否正确设置为 `opencode/0.3.0 (linux)`
227+
1. User-Agent 值是否正确设置为抓包报告中的 OpenCode UA
228228
2. 是否存在其他可能暴露身份的 Header
229229
3. 请求体格式是否与官方工具一致
230230

cmd/coding-plan-mask/main.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import (
1919
)
2020

2121
var (
22-
version = "0.7.1"
22+
version = "0.7.2"
2323
commit = "unknown"
2424
date = "unknown"
2525
)
@@ -266,13 +266,16 @@ func printHelp() {
266266
disguise_tool = "claudecode" 伪装为 Claude Code 风格请求
267267
claude_code_user_agent = "claude-cli/2.1.76 (external, cli)"
268268
disguise_tool = "kimicode" Kimi Code API 订阅认证格式
269+
disguise_tool = "opencode" 兼容旧版 OpenCode 标识
270+
opencode_user_agent = "opencode/1.2.27 ai-sdk/provider-utils/3.0.20 runtime/bun/1.3.10"
269271
disguise_tool = "openclaw" 伪装为 OpenClaw
270272
openclaw_user_agent = "OpenClaw-Gateway/1.0"
271273
disguise_tool = "custom" 使用自定义 User-Agent
272274
273275
User-Agent 来源说明:
274276
claudecode: claude-cli/<version> (external, cli) - 可通过 claude_code_user_agent 覆盖
275277
kimicode: claude-code/0.1.0 - Kimi Code API 订阅认证要求
278+
opencode: opencode/<version> ai-sdk/... runtime/bun/... - 可通过 opencode_user_agent 覆盖
276279
openclaw: OpenClaw-Gateway/1.0 - OpenClaw 兼容默认值,可通过 openclaw_user_agent 覆盖
277280
278281
示例:

config.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ claude_code_user_agent = "claude-cli/2.1.76 (external, cli)"
4545
# OpenClaw 模式的兼容默认 User-Agent
4646
# 该值用于兼容部分 OpenClaw 请求路径,可按需覆盖
4747
openclaw_user_agent = "OpenClaw-Gateway/1.0"
48+
# OpenCode 模式的默认 User-Agent
49+
# 默认值基于本地抓包报告中的 OpenCode 1.2.27 请求格式
50+
opencode_user_agent = "opencode/1.2.27 ai-sdk/provider-utils/3.0.20 runtime/bun/1.3.10"
4851
# 自定义 User-Agent (留空使用默认,仅当 disguise_tool = "custom" 时生效)
4952
custom_user_agent = ""
5053

deploy/config.example.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ claude_code_user_agent = "claude-cli/2.1.76 (external, cli)"
4545
# OpenClaw 模式的兼容默认 User-Agent
4646
# 该值用于兼容部分 OpenClaw 请求路径,可按需覆盖
4747
openclaw_user_agent = "OpenClaw-Gateway/1.0"
48+
# OpenCode 模式的默认 User-Agent
49+
# 默认值基于本地抓包报告中的 OpenCode 1.2.27 请求格式
50+
opencode_user_agent = "opencode/1.2.27 ai-sdk/provider-utils/3.0.20 runtime/bun/1.3.10"
4851
# 自定义 User-Agent (留空使用默认,仅当 disguise_tool = "custom" 时生效)
4952
custom_user_agent = ""
5053

internal/config/config.go

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ type EndpointConfig struct {
5454
CustomUserAgent string `toml:"custom_user_agent"`
5555
ClaudeCodeUserAgent string `toml:"claude_code_user_agent"`
5656
OpenClawUserAgent string `toml:"openclaw_user_agent"`
57+
OpenCodeUserAgent string `toml:"opencode_user_agent"`
5758
// 伪装工具类型: claudecode, kimicode, openclaw, custom
5859
// 兼容旧值: opencode
5960
DisguiseTool string `toml:"disguise_tool"`
@@ -84,6 +85,7 @@ type Config struct {
8485
CustomUserAgent string
8586
ClaudeCodeUserAgent string
8687
OpenClawUserAgent string
88+
OpenCodeUserAgent string
8789
DisguiseTool string // 伪装工具: claudecode, kimicode, openclaw, custom
8890
Debug bool
8991
RateLimitRequests int
@@ -109,13 +111,15 @@ type DisguiseToolConfig struct {
109111
const (
110112
DefaultClaudeCodeUserAgent = "claude-cli/2.1.76 (external, cli)"
111113
DefaultOpenClawUserAgent = "OpenClaw-Gateway/1.0"
114+
DefaultOpenCodeUserAgent = "opencode/1.2.27 ai-sdk/provider-utils/3.0.20 runtime/bun/1.3.10"
112115
ClaudeCodeAppHeaderValue = "cli"
113116
)
114117

115118
// PredefinedDisguiseTools 预定义的伪装工具
116119
// User-Agent 来源说明:
117120
// - claudecode: 当前 Claude Code CLI 请求格式,默认值可通过配置覆盖
118121
// - openclaw: OpenClaw 部分请求路径会发送 OpenClaw-Gateway/1.0,本项目保留该兼容默认值并允许覆盖
122+
// - opencode: 基于本地实际抓包报告的 OpenCode 1.2.27 请求格式,保留 legacy disguise_tool 标识
119123
// - kimicode: Kimi Code API 订阅认证要求 claude-code/0.1.0
120124
// 参考: 本地 Claude Code 请求抓包与已安装 CLI 代码检查
121125
// 参考: https://github.com/openclaw/openclaw/issues/30099
@@ -137,8 +141,8 @@ var PredefinedDisguiseTools = map[string]DisguiseToolConfig{
137141
},
138142
"opencode": {
139143
Name: "OpenCode (Legacy)",
140-
UserAgent: "opencode/0.3.0 (linux)",
141-
ExtraInfo: "旧版兼容选项",
144+
UserAgent: DefaultOpenCodeUserAgent,
145+
ExtraInfo: "Legacy disguise_tool 标识,默认 UA 已按本地抓包报告更新",
142146
},
143147
"custom": {
144148
Name: "自定义",
@@ -277,6 +281,7 @@ func LoadConfig(path string) (*Config, error) {
277281
cfg.CustomUserAgent = cfgFile.Endpoint.CustomUserAgent
278282
cfg.ClaudeCodeUserAgent = strings.TrimSpace(cfgFile.Endpoint.ClaudeCodeUserAgent)
279283
cfg.OpenClawUserAgent = strings.TrimSpace(cfgFile.Endpoint.OpenClawUserAgent)
284+
cfg.OpenCodeUserAgent = strings.TrimSpace(cfgFile.Endpoint.OpenCodeUserAgent)
280285
cfg.DisguiseTool = normalizeDisguiseTool(cfgFile.Endpoint.DisguiseTool)
281286

282287
// 自定义 API 配置
@@ -326,6 +331,9 @@ func (c *Config) loadFromEnv() {
326331
if v := os.Getenv("OPENCLAW_USER_AGENT"); v != "" {
327332
c.OpenClawUserAgent = strings.TrimSpace(v)
328333
}
334+
if v := os.Getenv("OPENCODE_USER_AGENT"); v != "" {
335+
c.OpenCodeUserAgent = strings.TrimSpace(v)
336+
}
329337
}
330338

331339
// Set 设置配置项
@@ -358,6 +366,8 @@ func (c *Config) Set(key string, value string) error {
358366
c.ClaudeCodeUserAgent = strings.TrimSpace(value)
359367
case "openclaw_user_agent":
360368
c.OpenClawUserAgent = strings.TrimSpace(value)
369+
case "opencode_user_agent":
370+
c.OpenCodeUserAgent = strings.TrimSpace(value)
361371
case "disguise_tool":
362372
c.DisguiseTool = normalizeDisguiseTool(value)
363373
case "api_base_url", "base_url":
@@ -424,6 +434,9 @@ func (c *Config) GetEffectiveUserAgent() string {
424434
if normalizeDisguiseTool(c.DisguiseTool) == "openclaw" && c.OpenClawUserAgent != "" {
425435
return c.OpenClawUserAgent
426436
}
437+
if normalizeDisguiseTool(c.DisguiseTool) == "opencode" && c.OpenCodeUserAgent != "" {
438+
return c.OpenCodeUserAgent
439+
}
427440

428441
// 根据伪装工具选择
429442
if tool, ok := PredefinedDisguiseTools[normalizeDisguiseTool(c.DisguiseTool)]; ok && tool.UserAgent != "" {
@@ -474,6 +487,7 @@ func (c *Config) GetSafe() map[string]interface{} {
474487
"custom_user_agent": c.CustomUserAgent,
475488
"claude_code_user_agent": c.ClaudeCodeUserAgent,
476489
"openclaw_user_agent": c.OpenClawUserAgent,
490+
"opencode_user_agent": c.OpenCodeUserAgent,
477491
"debug": c.Debug,
478492
"rate_limit_requests": c.RateLimitRequests,
479493
"timeout": c.Timeout,
@@ -562,6 +576,9 @@ claude_code_user_agent = "claude-cli/2.1.76 (external, cli)"
562576
# OpenClaw 模式的兼容默认 User-Agent
563577
# 该值用于兼容部分 OpenClaw 请求路径,可按需覆盖
564578
openclaw_user_agent = "OpenClaw-Gateway/1.0"
579+
# OpenCode 模式的默认 User-Agent
580+
# 默认值基于本地抓包报告中的 OpenCode 1.2.27 请求格式
581+
opencode_user_agent = "opencode/1.2.27 ai-sdk/provider-utils/3.0.20 runtime/bun/1.3.10"
565582
# 自定义 User-Agent (留空使用默认,仅当 disguise_tool = "custom" 时生效)
566583
custom_user_agent = ""
567584
@@ -590,7 +607,7 @@ var Providers = map[string]ProviderConfig{
590607
GeneralBaseURL: "https://open.bigmodel.cn/api/paas/v4",
591608
AuthHeader: "Authorization",
592609
AuthPrefix: "Bearer ",
593-
UserAgent: "opencode/0.3.0 (linux)",
610+
UserAgent: DefaultOpenCodeUserAgent,
594611
ExtraHeaders: map[string]string{},
595612
Models: []string{"glm-4-flash", "glm-4-plus", "glm-4-air", "glm-4-long", "glm-4"},
596613
},
@@ -600,7 +617,7 @@ var Providers = map[string]ProviderConfig{
600617
GeneralBaseURL: "https://api.z.ai/api/paas/v4",
601618
AuthHeader: "Authorization",
602619
AuthPrefix: "Bearer ",
603-
UserAgent: "opencode/0.3.0 (linux)",
620+
UserAgent: DefaultOpenCodeUserAgent,
604621
ExtraHeaders: map[string]string{},
605622
Models: []string{"glm-4-flash", "glm-4-plus", "glm-4-air", "glm-4-long", "glm-4", "glm-4.7", "glm-5"},
606623
},
@@ -610,7 +627,7 @@ var Providers = map[string]ProviderConfig{
610627
GeneralBaseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1",
611628
AuthHeader: "Authorization",
612629
AuthPrefix: "Bearer ",
613-
UserAgent: "opencode/0.3.0 (linux)",
630+
UserAgent: DefaultOpenCodeUserAgent,
614631
ExtraHeaders: map[string]string{"X-DashScope-SSE": "enable"},
615632
Models: []string{"qwen-turbo", "qwen-plus", "qwen-max", "qwen2.5-coder-32b-instruct"},
616633
},
@@ -620,7 +637,7 @@ var Providers = map[string]ProviderConfig{
620637
GeneralBaseURL: "https://api.minimax.chat/v1",
621638
AuthHeader: "Authorization",
622639
AuthPrefix: "Bearer ",
623-
UserAgent: "opencode/0.3.0 (linux)",
640+
UserAgent: DefaultOpenCodeUserAgent,
624641
ExtraHeaders: map[string]string{},
625642
Models: []string{"abab6.5s-chat", "abab6.5g-chat", "abab6.5-chat"},
626643
},
@@ -630,7 +647,7 @@ var Providers = map[string]ProviderConfig{
630647
GeneralBaseURL: "https://api.deepseek.com/v1",
631648
AuthHeader: "Authorization",
632649
AuthPrefix: "Bearer ",
633-
UserAgent: "opencode/0.3.0 (linux)",
650+
UserAgent: DefaultOpenCodeUserAgent,
634651
ExtraHeaders: map[string]string{},
635652
Models: []string{"deepseek-chat", "deepseek-coder"},
636653
},
@@ -640,7 +657,7 @@ var Providers = map[string]ProviderConfig{
640657
GeneralBaseURL: "https://api.moonshot.cn/v1",
641658
AuthHeader: "Authorization",
642659
AuthPrefix: "Bearer ",
643-
UserAgent: "opencode/0.3.0 (linux)",
660+
UserAgent: DefaultOpenCodeUserAgent,
644661
ExtraHeaders: map[string]string{},
645662
Models: []string{"moonshot-v1-8k", "moonshot-v1-32k", "moonshot-v1-128k"},
646663
},
@@ -650,7 +667,7 @@ var Providers = map[string]ProviderConfig{
650667
GeneralBaseURL: "",
651668
AuthHeader: "Authorization",
652669
AuthPrefix: "Bearer ",
653-
UserAgent: "opencode/0.3.0 (linux)",
670+
UserAgent: DefaultOpenCodeUserAgent,
654671
ExtraHeaders: map[string]string{},
655672
Models: []string{},
656673
},

0 commit comments

Comments
 (0)