VS Code 1.109 更新解读(五):API 与工程改进

💡 更多技术分享,欢迎访问我的博客:叁木の小屋
系列索引总览 | (一)| (二) | (三) | (四) | (五)


本篇概要

最后一篇涵盖扩展 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(正式确定)

可在 QuickPickInputBox 上指定按钮位置:

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.enabledonModifierKeyPressed 时悬停未立即触发 已修复
文件描述符泄漏到终端进程 已修复

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 向统一多智能体开发平台的演进。

五大核心方向

  1. 聊天体验------更快、更清晰、更流畅
  2. 会话管理------本地/后台/云端统一
  3. 智能体定制------可定制的 AI 行为
  4. 扩展性------Claude Agent、MCP Apps
  5. 平台改进------终端、编辑器、工作台、API

感谢阅读本系列!

相关链接

相关推荐
玹外之音12 小时前
VSCode + Codex · 32ai 零魔法集成
visual studio code
执风挽^14 小时前
Python_func_principle
开发语言·python·算法·visual studio code
golang学习记21 小时前
VSCode 1.109 在正式发布:Chat UX 大升级:和 AI 聊天终于很丝滑了!
前端·人工智能·visual studio code
一只叁木Meow2 天前
VS Code 1.109 更新解读(四):终端、编辑器与工作台
visual studio code
一只叁木Meow2 天前
Visual Studio Code 1.109 版本更新总结(总览)
visual studio code
secondyoung2 天前
Git使用:常用操作对应指令
开发语言·经验分享·git·vscode·github·visual studio code·visual studio
执风挽^3 天前
Python_func_supplement
开发语言·python·算法·visual studio code
执风挽^5 天前
Python基础编程题2
开发语言·python·算法·visual studio code
Wei&Yan6 天前
数据结构——顺序表(静/动态代码实现)
数据结构·c++·算法·visual studio code