Skip to content

Commit 79d8b55

Browse files
committed
docs: update README - remove Claude Code ref, add DeepSeek, remove Infini, use English commands
1 parent 367866c commit 79d8b55

7 files changed

Lines changed: 105 additions & 31 deletions

File tree

CHANGELOG.md

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,16 @@
22

33
All notable changes to this project will be documented in this file.
44

5+
## [0.7.18] - 2026-05-06
6+
- docs: add dashboard preview screenshot
7+
- feat(provider): 支持在模型返回空响应时自动切换至 Responses API
8+
- feat(pages): 抓取失败的 provider 不再显示套餐卡片
9+
- chore(metrics): 更新 OpenRouter 提供商指标数据
10+
- chore(assets): 更新 OpenRouter 提供商指标与定价数据
11+
- chore: 统一 API 密钥变量名并优化工作流推送逻辑
12+
- feat(provider): 更新服务商指标与定价并增强抓取校验
13+
- feat(provider): 更新模型服务商运行指标与定价数据
14+
515
## [0.7.17] - 2026-05-06
616
- feat(pages): 抓取失败的 provider 不再显示套餐卡片
717
- chore(metrics): 更新 OpenRouter 提供商指标数据
@@ -42,7 +52,4 @@ All notable changes to this project will be documented in this file.
4252
- fix(config): 模型写回时不再默认落 apiStyle/maxInputTokens/maxOutputTokens,仅保留用户显式配置的字段
4353

4454
## [0.6.26] - 2026-03-31
45-
- feat(config): 更新供应商配置并优化模型管理
46-
47-
## [0.6.25] - 2026-03-30
48-
- feat(套餐使用): 新增套餐使用状态栏与轮询功能
55+
- feat(config): 更新供应商配置并优化模型管理

README.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
**一键切换多厂商 AI 模型,打破 Copilot 套餐限制。**
44

5-
支持智谱、Kimi、讯飞、火山云、Minimax、百度千帆、腾讯云、京东云、快手 KAT、X-AIO、Compshare、阿里云、Infini、七牛等国产大厂,以及**任何**兼容 OpenAI Chat、OpenAI Responses 或 Anthropic 接口风格的供应商。无需改变使用习惯,直接在 VS Code Copilot Chat 中无缝调用。
5+
支持智谱、Kimi、讯飞、火山引擎、MiniMax、百度千帆、腾讯云、京东云、快手 KAT、X-AIO、Compshare、阿里云、七牛、DeepSeek 等国产大厂,以及**任何**兼容 OpenAI Chat、OpenAI Responses 或 Anthropic 接口风格的供应商。无需改变使用习惯,直接在 VS Code Copilot Chat 中无缝调用。
66

77
---
88

99
## 核心特性
1010

1111
- **多协议统一接入**:支持 OpenAI Chat(`/chat/completions`)、OpenAI Responses(`/responses`)、Anthropic(`/messages`)三种协议风格,适配任意兼容供应商。
12-
- **Claude Code 优先端点**:内置供应商默认使用 Anthropic 兼容端点,同时兼容 Claude Code 与 Copilot Chat
12+
- **Anthropic 兼容优先**:内置供应商默认使用 Anthropic 兼容端点`/messages`),无缝接入各类模型
1313
- **零学习成本**:完全集成到 VS Code Copilot Chat,不改变任何操作习惯。
1414
- **灵活模型管理**:支持动态拉取 `/models` 端点,也可自定义模型列表。
1515
- **智能 Commit 生成**:基于 Git 变更自动生成符合 Conventional Commits 规范的提交消息。
@@ -48,10 +48,10 @@ code --install-extension techfetch-dev.coding-plans-for-copilot
4848
4949
### 配置
5050

51-
1.`Ctrl+Shift+P`,输入 `编码套餐: 管理编码套餐配置`
52-
2. 选择「选择供应商」,选择你已注册的平台(如智谱、Kimi、火山引擎等)
53-
3. 选择「设置 API Key」,粘贴你的 API Key
54-
4. 打开 Copilot Chat(`Ctrl+L`),切换到「编码套餐」提供商
51+
1.`Ctrl+Shift+P`,输入 `Coding Plans: Manage Vendor Configuration`
52+
2. 选择「Select Vendor」,选择你已注册的平台(如智谱、Kimi、火山引擎等)
53+
3. 选择「Set API Key」,粘贴你的 API Key
54+
4. 打开 Copilot Chat(`Ctrl+L`),切换到「Coding Plans」提供商
5555

5656
也可以直接编辑 `settings.json`,插件会打开设置页并定位到 `coding-plans.vendors`
5757

@@ -71,8 +71,8 @@ code --install-extension techfetch-dev.coding-plans-for-copilot
7171
| Kimi Overseas | `https://api.moonshot.ai/anthropic` | `https://api.moonshot.ai/v1` |
7272
| 阿里云(Aliyun) | `https://coding.dashscope.aliyuncs.com/apps/anthropic` | `https://coding.dashscope.aliyuncs.com/v1` |
7373
| 腾讯云 | `https://api.lkeap.cloud.tencent.com/coding/anthropic` ||
74-
| Infini(无问芯穹) | `https://cloud.infini-ai.com` ||
7574
| 七牛(Qiniu) | `https://api.qnaigc.com` ||
75+
| DeepSeek | `https://api.deepseek.com/anthropic` | `https://api.deepseek.com/v1` |
7676
| OpenRouter | `https://openrouter.ai/api` | `https://openrouter.ai/api/v1` |
7777

7878
如需切换到 OpenAI 兼容端点,修改供应商的 `baseUrl``defaultApiStyle` 即可。
@@ -193,7 +193,7 @@ code --install-extension techfetch-dev.coding-plans-for-copilot
193193

194194
### 智能 Commit 消息生成
195195

196-
1.`Ctrl+Shift+P`,输入 `编码套餐: 生成 Commit 消息`
196+
1.`Ctrl+Shift+P`,输入 `Coding Plans: Generate Commit Message`
197197
2. 插件会分析当前 Git 变更,自动生成符合规范的提交消息
198198
3. 可选择使用的模型(默认使用当前配置的供应商)
199199

README_en.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
**Switch between multiple AI model vendors with one click, breaking Copilot plan limitations.**
44

5-
Supports domestic major vendors like Zhipu, Kimi, iFlytek, Volcano Cloud, Minimax, Baidu Qianfan, Tencent Cloud, JD Cloud, Kuaishou KAT, X-AIO, Compshare, Alibaba Cloud, Infini, Qiniu, as well as **any** vendor compatible with OpenAI Chat, OpenAI Responses, or Anthropic API styles. No need to change usage habits; seamlessly call directly in VS Code Copilot Chat.
5+
Supports domestic major vendors like Zhipu, Kimi, iFlytek, Volcengine, MiniMax, Baidu Qianfan, Tencent Cloud, JD Cloud, Kuaishou KAT, X-AIO, Compshare, Alibaba Cloud, Qiniu, DeepSeek, as well as **any** vendor compatible with OpenAI Chat, OpenAI Responses, or Anthropic API styles. No need to change usage habits; seamlessly call directly in VS Code Copilot Chat.
66

77
---
88

99
## Core Features
1010

1111
- **Multi-Protocol Unified Access**: Supports OpenAI Chat (`/chat/completions`), OpenAI Responses (`/responses`), and Anthropic (`/messages`) three protocol styles, adapting to any compatible vendor.
12-
- **Claude Code Priority Endpoint**: Built-in vendors default to Anthropic-compatible endpoints, compatible with both Claude Code and Copilot Chat.
12+
- **Anthropic-Compatible Priority**: Built-in vendors default to Anthropic-compatible endpoints (`/messages`), seamlessly connecting to various models.
1313
- **Zero Learning Curve**: Fully integrated into VS Code Copilot Chat without changing any operational habits.
1414
- **Flexible Model Management**: Supports dynamic fetching from `/models` endpoint, or custom model lists.
1515
- **Intelligent Commit Generation**: Automatically generates Conventional Commits-compliant commit messages based on Git changes.
@@ -28,9 +28,9 @@ Supports domestic major vendors like Zhipu, Kimi, iFlytek, Volcano Cloud, Minima
2828

2929
1. Open VS Code
3030
2. Press `Ctrl+Shift+X` to open the Extensions panel
31-
3. Type `Coding Plans for Copilot` or `编码套餐` in the search box
31+
3. Type `Coding Plans for Copilot` in the search box
3232
4. Click **Install** to install
33-
5. After installation, press `Ctrl+Shift+P` and type `编码套餐` to see related commands
33+
5. After installation, press `Ctrl+Shift+P` and type `Coding Plans` to see related commands
3434

3535
#### Method 2: Command Line Installation
3636

@@ -48,8 +48,8 @@ Click the **Install** button on the marketplace page, which will automatically o
4848
4949
### Configuration
5050

51-
1. Press `Ctrl+Shift+P`, type `编码套餐: 管理编码套餐配置`
52-
2. Select "Select Vendor", choose the platform you've registered with (e.g., Zhipu, Kimi, Volcano Engine, etc.)
51+
1. Press `Ctrl+Shift+P`, type `Coding Plans: Manage Vendor Configuration`
52+
2. Select "Select Vendor", choose the platform you've registered with (e.g., Zhipu, Kimi, Volcengine, etc.)
5353
3. Select "Set API Key", paste your API Key
5454
4. Open Copilot Chat (`Ctrl+L`), switch to "Coding Plans" provider
5555

@@ -71,8 +71,8 @@ The following vendors come with built-in default configurations and are ready to
7171
| Kimi Overseas | `https://api.moonshot.ai/anthropic` | `https://api.moonshot.ai/v1` |
7272
| Alibaba Cloud (Aliyun) | `https://coding.dashscope.aliyuncs.com/apps/anthropic` | `https://coding.dashscope.aliyuncs.com/v1` |
7373
| Tencent Cloud | `https://api.lkeap.cloud.tencent.com/coding/anthropic` ||
74-
| Infini (无问芯穹) | `https://cloud.infini-ai.com` ||
7574
| Qiniu (七牛) | `https://api.qnaigc.com` ||
75+
| DeepSeek | `https://api.deepseek.com/anthropic` | `https://api.deepseek.com/v1` |
7676
| OpenRouter | `https://openrouter.ai/api` | `https://openrouter.ai/api/v1` |
7777

7878
To switch to OpenAI-compatible endpoints, modify the vendor's `baseUrl` and `defaultApiStyle`.
@@ -193,7 +193,7 @@ Limited by VS Code's public API, this extension additionally implements context
193193

194194
### Intelligent Commit Message Generation
195195

196-
1. Press `Ctrl+Shift+P`, type `编码套餐: 生成 Commit 消息`
196+
1. Press `Ctrl+Shift+P`, type `Coding Plans: Generate Commit Message`
197197
2. The extension analyzes current Git changes and automatically generates a Conventional Commits-compliant commit message
198198
3. You can select the model to use (defaults to the currently configured vendor)
199199

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -434,15 +434,15 @@
434434
"defaultApiStyle": "anthropic"
435435
},
436436
{
437-
"name": "Infini",
438-
"baseUrl": "https://cloud.infini-ai.com",
437+
"name": "Qiniu",
438+
"baseUrl": "https://api.qnaigc.com",
439439
"models": [],
440440
"useModelsEndpoint": true,
441441
"defaultApiStyle": "anthropic"
442442
},
443443
{
444-
"name": "Qiniu",
445-
"baseUrl": "https://api.qnaigc.com",
444+
"name": "DeepSeek",
445+
"baseUrl": "https://api.deepseek.com/anthropic",
446446
"models": [],
447447
"useModelsEndpoint": true,
448448
"defaultApiStyle": "anthropic"

src/config/configStore.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,11 @@ export class ConfigStore implements vscode.Disposable {
433433
normalized.push(this.buildStoredModelEntry({
434434
...inputModel,
435435
temperature: undefined,
436-
topP: undefined
436+
topP: undefined,
437+
capabilities: {
438+
...inputModel.capabilities,
439+
vision: defaultVision
440+
}
437441
}, canonical, defaultVision, defaultApiStyle));
438442
continue;
439443
}

src/providers/genericProviderDiscovery.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,6 @@ export function mergeConfiguredModelOverrides(
6767
return discoveredModels.map(discovered => {
6868
const configured = configuredByName.get(discovered.name.trim().toLowerCase());
6969
if (!configured) {
70-
const discoveredVision = discovered.capabilities?.vision;
71-
if (typeof discoveredVision === 'boolean') {
72-
return discovered;
73-
}
7470
return {
7571
...discovered,
7672
capabilities: {

src/test/runTest.ts

Lines changed: 69 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,7 @@ const testCases: TestCase[] = [
426426
}
427427
},
428428
{
429-
name: '新增模型写回时保留必要发现字段但不落 token 上限',
429+
name: '新增模型写回时使用供应商 defaultVision 且不落 token 上限',
430430
initialVendors: [createVendorWithSpacedModelName()],
431431
discoveredModels: [
432432
{ name: 'gpt-4o' },
@@ -448,7 +448,7 @@ const testCases: TestCase[] = [
448448
assert.equal(newModel?.description, 'Fresh from /models');
449449
assert.equal(newModel?.temperature, undefined);
450450
assert.equal(newModel?.topP, undefined);
451-
assert.deepEqual(newModel?.capabilities, { tools: true, vision: true });
451+
assert.deepEqual(newModel?.capabilities, { tools: true, vision: false });
452452
assert.equal(newModel?.maxInputTokens, undefined);
453453
assert.equal(newModel?.maxOutputTokens, undefined);
454454
}
@@ -1121,6 +1121,72 @@ function runGenericProviderContextSizeTests(
11211121
}
11221122
}
11231123

1124+
async function runGenericProviderDiscoveryDefaultVisionTests(
1125+
configStoreCtor: ConfigStoreCtor,
1126+
genericProviderModule: GenericProviderModule
1127+
): Promise<void> {
1128+
const { GenericAIProvider } = genericProviderModule;
1129+
const originalFetch = globalThis.fetch;
1130+
1131+
activeState = createState([{
1132+
name: 'Vendor',
1133+
baseUrl: 'https://example.test/v1',
1134+
defaultApiStyle: 'openai-chat',
1135+
defaultVision: false,
1136+
useModelsEndpoint: true,
1137+
models: []
1138+
}]);
1139+
1140+
const configStore = new configStoreCtor(createExtensionContext() as never);
1141+
const provider = new GenericAIProvider(createExtensionContext() as never, configStore) as unknown as {
1142+
models: Array<{
1143+
id: string;
1144+
capabilities?: {
1145+
imageInput?: boolean;
1146+
toolCalling?: boolean | number;
1147+
};
1148+
}>;
1149+
refreshModels(): Promise<void>;
1150+
dispose(): void;
1151+
};
1152+
1153+
globalThis.fetch = (async (_url: string | URL | Request): Promise<Response> => {
1154+
return new Response(JSON.stringify({
1155+
data: [{
1156+
id: 'fresh-vision-model',
1157+
context_length: 64000,
1158+
capabilities: {
1159+
tool_calling: true,
1160+
image_input: true
1161+
}
1162+
}]
1163+
}), {
1164+
status: 200,
1165+
headers: {
1166+
'content-type': 'application/json'
1167+
}
1168+
});
1169+
}) as typeof globalThis.fetch;
1170+
1171+
try {
1172+
(configStore as unknown as { getApiKey(vendorName: string): Promise<string> }).getApiKey = async (vendorName: string) => (
1173+
vendorName === 'Vendor' ? 'configured' : ''
1174+
);
1175+
1176+
await provider.refreshModels();
1177+
1178+
const updatedVendor = getUpdatedVendor(activeState);
1179+
const refreshedModel = updatedVendor.models.find(model => model.name === 'fresh-vision-model');
1180+
assert.deepEqual(refreshedModel?.capabilities, { tools: true, vision: false });
1181+
assert.equal(provider.models[0]?.capabilities?.imageInput, false);
1182+
console.log('PASS /models 刷新新增模型时 defaultVision=false 会覆盖发现到的 vision=true');
1183+
} finally {
1184+
globalThis.fetch = originalFetch;
1185+
provider.dispose();
1186+
configStore.dispose();
1187+
}
1188+
}
1189+
11241190
async function runGenericProviderEmptyResponseTests(
11251191
configStoreCtor: ConfigStoreCtor,
11261192
genericProviderModule: GenericProviderModule
@@ -3207,6 +3273,7 @@ async function main(): Promise<void> {
32073273
await runConfigNormalizationTests(ConfigStore);
32083274
runTokenWindowResolutionTests(baseProviderModule);
32093275
runGenericProviderContextSizeTests(ConfigStore, genericProviderModule);
3276+
await runGenericProviderDiscoveryDefaultVisionTests(ConfigStore, genericProviderModule);
32103277
await runGenericProviderEmptyResponseTests(ConfigStore, genericProviderModule);
32113278
await runGenericProviderOutputLimitToggleTests(ConfigStore, genericProviderModule, tokenUsageModule);
32123279
await runGenericProviderAnthropicSamplingCompatibilityTests(ConfigStore, genericProviderModule);

0 commit comments

Comments
 (0)