💡 更多技术分享,欢迎访问我的博客:叁木の小屋
系列索引 :总览 | (一)| (二) | (三) | (四) | (五)
本篇概要
最后一篇涵盖扩展 API 的更新和工程改进,为扩展作者和平台稳定性带来增强:
- Quick Input 按钮 API 正式确定
- Chat Model Provider 配置架构
- macOS DMG 镜像
- Windows 安装重设计
一、扩展与 API
1.1 GitHub Pull Requests 扩展
GitHub Pull Requests 扩展更新至 0.128.0 版本。
详见:市场页面更新日志
1.2 Quick Input 按钮位置 API(正式确定)
可在 QuickPick 或 InputBox 上指定按钮位置:
typescript
const quickPick = vscode.window.createQuickPick();
quickPick.buttons = [
{
iconPath: vscode.Uri.file('path/to/icon.svg'),
tooltip: 'Click me',
location: vscode.QuickInputButtonLocation.Title // 或 Inline, Input
}
];
| 位置 | 说明 |
|---|---|
Title |
顶部标题区域(默认) |
Inline |
输入框右侧 |
Input |
输入框内右侧 |
1.3 Quick Input 按钮切换 API(正式确定)
创建具有开/关状态的切换按钮:
typescript
const toggleButton: vscode.QuickInputButton = {
iconPath: vscode.Uri.file('path/to/toggle-icon.svg'),
tooltip: 'Toggle feature',
toggle: { checked: false }
};
// 读取状态
console.log(toggleButton.checked); // false
// 更新状态
toggleButton.toggle = { checked: true };
1.4 Chat Model Provider 配置(提议)
扩展可通过 languageModelChatProviders 贡献点声明配置要求:
简单配置(仅需 API Key)
json
{
"contributes": {
"languageModelChatProviders": [
{
"vendor": "my-provider",
"displayName": "My Provider",
"configuration": {
"properties": {
"apiKey": {
"type": "string",
"secret": true,
"description": "API key for My Provider",
"title": "API Key"
}
},
"required": ["apiKey"]
}
}
]
}
}
高级配置(自定义模型)
json
{
"contributes": {
"languageModelChatProviders": [
{
"vendor": "my-provider",
"displayName": "My Provider",
"configuration": {
"properties": {
"apiKey": { "type": "string", "secret": true },
"models": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": { "type": "string" },
"name": { "type": "string" },
"url": { "type": "string" },
"maxInputTokens": { "type": "number" },
"maxOutputTokens": { "type": "number" },
"toolCalling": { "type": "boolean" },
"vision": { "type": "boolean" }
},
"required": ["id", "name", "url", "maxInputTokens", "maxOutputTokens"]
}
}
},
"required": ["apiKey"]
}
}
]
}
}
使用配置
typescript
vscode.lm.registerLanguageModelChatProvider('my-provider', {
provideLanguageModelResponse: (
messages,
options,
extensionToken,
configuration, // 用户配置
token
) => {
const apiKey = configuration.apiKey;
const models = configuration.models;
// 使用配置进行 API 调用...
}
});
1.5 Chat Prompt Files API(提议)
扩展可以动态贡献聊天资源:
typescript
// 注册技能提供程序
vscode.chat.registerSkillProvider({
onDidChangeSkills: onDidChangeEvent,
provideSkills(context, token): vscode.ChatResource[] {
return [{
uri: vscode.Uri.parse('my-extension:/skills/debugging/SKILL.md')
}];
}
});
// 其他资源类型
// registerCustomAgentProvider() // .agent.md
// registerInstructionsProvider() // .instructions.md
// registerPromptFileProvider() // .prompt.md
1.6 Chat Item Controller API(提议)
新的基于控制器的 API:
typescript
const controller = vscode.chat.createChatSessionItemController(
'myExtension.chatSessions',
async (token: vscode.CancellationToken) => {
const sessions = await fetchSessionsFromBackend();
const items = sessions.map(session =>
controller.createChatSessionItem(
vscode.Uri.parse(`my-scheme://session/${session.id}`),
session.title
)
);
controller.items.replace(items);
// 实时更新
setTimeout(() => {
for (const item of controller.items) {
item.label = `${item.label} - ${new Date().toLocaleTimeString()}`;
}
}, 10000);
}
);
controller.onDidChangeChatSessionItemState(item => {
console.log(`Session ${item.label} archived: ${item.archived}`);
});
1.7 Chat Output Renderer API 更新
渲染器现在作为 ChatOutputWebview 传递:
typescript
class MyRenderer implements vscode.ChatOutputWebview {
onDidDispose: Event<void>;
dispose(): void {
// 清理资源
}
}
1.8 Portable Mode 检测(提议)
检测 VS Code 是否在便携模式下运行:
typescript
if (vscode.env.isAppPortable) {
// 在便携模式下运行 - 调整行为
}
二、工程改进
2.1 macOS DMG 镜像
VS Code 现在为 macOS 提供 DMG 镜像:
- 原生拖放安装体验
- 支持所有架构
- 从 VS Code 官网下载
2.2 Windows 安装重设计
重新设计安装布局,解决更新可靠性问题:
| 之前 | 现在 |
|---|---|
| 原子文件替换 | 版本化包路径 |
| 更新可能中断 | 更新更可靠 |
| 受系统关闭影响 | 受影响更小 |
灵感来自 Chromium 更新客户端。
2.3 macOS 避免连续更新
css
更新 A 准备中 → 更新 B 可用
↓
使更新 A 无效,直接应用更新 B
用户无需重启两次应用。
2.4 Copilot 扩展已弃用
GitHub Copilot 扩展已被弃用:
- 所有 AI 功能由 GitHub Copilot Chat 扩展提供
- 更新 VS Code 时自动卸载旧扩展
- Copilot Chat 扩展保持安装
2.5 从 npm 包使用 codicons
Codicons 现在通过 @vscode/codicons npm 包消费:
css
之前:直接捆绑在 VS Code 仓库
现在:通过 @vscode/codicons npm 包,作为构建过程的一部分
三、值得注意的修复
| 问题 | 修复 |
|---|---|
editor.hover.enabled 为 onModifierKeyPressed 时悬停未立即触发 |
已修复 |
| 文件描述符泄漏到终端进程 | 已修复 |
API 快速参考
Quick Input 按钮
typescript
// 位置 API
location: vscode.QuickInputButtonLocation.Title | Inline | Input
// 切换 API
toggle: { checked: boolean }
Chat Provider
typescript
// 注册
vscode.lm.registerLanguageModelChatProvider(vendor, provider)
// 配置
languageModelChatProviders: [{ vendor, displayName, configuration }]
Chat Resources
typescript
// 技能
vscode.chat.registerSkillProvider({ onDidChangeSkills, provideSkills })
// 自定义智能体
vscode.chat.registerCustomAgentProvider({ onDidChangeAgents, provideAgents })
// 说明
vscode.chat.registerInstructionsProvider({ onDidChangeInstructions, provideInstructions })
// 提示文件
vscode.chat.registerPromptFileProvider({ onDidChangePromptFiles, providePromptFiles })
环境检测
typescript
// 便携模式
vscode.env.isAppPortable: boolean
系列总结
VS Code 1.109 是一个里程碑版本,标志着 VS Code 向统一多智能体开发平台的演进。
五大核心方向:
- 聊天体验------更快、更清晰、更流畅
- 会话管理------本地/后台/云端统一
- 智能体定制------可定制的 AI 行为
- 扩展性------Claude Agent、MCP Apps
- 平台改进------终端、编辑器、工作台、API
感谢阅读本系列!
相关链接: