扩展开发

wescode 基于 VSCode Open Source Fork 构建,完全兼容 VSCode 扩展生态。同时提供了 wescode 特有的扩展机制,包括自定义工具、技能开发和主题定制。

扩展架构

整体架构

wescode 的扩展系统分为三层:

┌──────────────────────────────────────────────┐
│  VSCode 原生扩展 (.vsix)                     │
│  完全兼容 VSCode Marketplace 扩展             │
├──────────────────────────────────────────────┤
│  wescode 技能 (.wesskill)                    │
│  AI Agent 的 Prompt 增强 + 工具编排           │
├──────────────────────────────────────────────┤
│  wescode 工具 (Go 闭包 / MCP Server)         │
│  Agent 可调用的结构化工具                     │
└──────────────────────────────────────────────┘

VSCode 扩展兼容

wescode 完全兼容 VSCode 扩展:

安装方式与 VSCode 完全相同:

# 从命令面板安装
Ctrl+Shift+P → Extensions: Install Extensions

# 从 VSIX 文件安装
code --install-extension my-extension.vsix

wescode 扩展点

wescode 在 VSCode 基础上新增了以下扩展点:

扩展点说明使用场景
AI 工具注册 Agent 可调用的工具业务自定义能力
技能包AI 行为增强的提示工程领域知识、工作流
CKG 解析器自定义语言的代码知识图谱扩展语言支持
Context 注入向 AI 上下文注入信息IDE 状态同步
审查规则自定义代码审查规则团队规范

自定义工具

工具注册方式

wescode 支持两种工具注册方式:

1. MCP Server(推荐)

通过 MCP 协议注册外部工具服务:

# .wescode/mcp.yaml
servers:
  - name: "my-company-tools"
    transport: "stdio"
    command: ["node", "tools/mcp-server.js"]
    description: "公司内部工具集"

MCP Server 实现示例(Node.js):

import { Server } from "@modelcontextprotocol/sdk/server/index.js";

const server = new Server({
  name: "my-company-tools",
  version: "1.0.0",
});

// 注册工具
server.setRequestHandler("tools/list", async () => ({
  tools: [
    {
      name: "query_internal_api",
      description: "查询公司内部 API",
      inputSchema: {
        type: "object",
        properties: {
          endpoint: { type: "string", description: "API 端点路径" },
          method: { type: "string", enum: ["GET", "POST"] },
        },
        required: ["endpoint"],
      },
    },
  ],
}));

// 处理工具调用
server.setRequestHandler("tools/call", async (request) => {
  if (request.params.name === "query_internal_api") {
    const { endpoint, method } = request.params.arguments;
    // 实现逻辑
    return { content: [{ type: "text", text: "结果..." }] };
  }
});

2. 内置工具(通过 CellSpec)

在项目配置中注册简单工具:

# .wescode/tools.yaml
tools:
  - name: "lint_check"
    description: "运行项目 Lint 检查"
    command: "golangci-lint run ./..."
    type: "exec"
    readonly: true

工具开发规范

开发自定义工具时需遵循:

  1. 工具名:使用 snake_case,清晰描述功能
  2. 描述:简洁但完整,帮助 AI 正确选择工具
  3. 参数 Schema:使用 JSON Schema 定义,包含描述
  4. 返回格式:统一使用 JSON 字符串返回
  5. 错误处理:返回结构化错误信息
  6. 超时控制:长时间操作需设置超时

工具测试

# 测试 MCP Server 连接
wescode mcp test my-company-tools

# 列出所有已注册工具
wescode tools list

# 手动调用工具测试
wescode tools call query_internal_api --args '{"endpoint": "/health"}'

技能开发

技能结构

wescode 技能是 AI Agent 的行为增强包,每个技能包含:

skills/my-skill/
├── SKILL.md        # 技能定义(必需)
├── scripts/        # 辅助脚本
├── templates/      # 模板文件
├── references/     # 参考资料
└── manifest.json   # 清单(可选)

SKILL.md 编写

SKILL.md 是技能的核心文件,定义了 AI 的行为指引:

---
name: code-review-expert
description: 企业级代码审查专家。
version: 1.0.0
author: Your Name
---

# 代码审查专家技能

## 何时使用

当用户要求进行代码审查,或提交 PR 前需要质量检查时使用此技能。

## 审查流程

1. 首先使用 `read_file` 读取变更文件
2. 使用 `search_files` 查找相关的上下文代码
3. 检查以下维度:
   - 代码逻辑正确性
   - 错误处理完整性
   - 性能影响
   - 安全风险
   - 代码风格一致性

## 审查标准

- 所有外部调用必须有错误处理
- 公共函数必须有文档注释
- 不允许硬编码配置值
...

技能安装

# 安装本地技能包
wescode skills install ./my-skill/

# 从目录安装
wescode skills install /path/to/skills/

# 卸载技能
wescode skills uninstall my-skill

技能管理

# 在 Chat 面板中
/skills list        # 列出已安装技能
/skills enable xxx   # 启用技能
/skills disable xxx  # 禁用技能
/skills info xxx     # 查看技能详情

技能开发最佳实践

  1. 精确描述:description 不超过 60 字符
  2. 明确触发:清晰定义"何时使用"和"何时不使用"
  3. 工具引用:引用 wescode 标准工具名(如 read_file、search_files)
  4. 分步指引:将复杂流程分解为清晰步骤
  5. 示例驱动:提供具体的输入输出示例

主题定制

颜色主题

wescode 支持标准 VSCode 颜色主题,同时扩展了 AI 相关的主题 Token:

// my-theme.json
{
  "name": "My wescode Theme",
  "type": "dark",
  "colors": {
    // 标准 VSCode Token
    "editor.background": "#1e1e2e",
    "editor.foreground": "#cdd6f4",

    // wescode AI 扩展 Token
    "wescode.chat.userBubble": "#313244",
    "wescode.chat.assistantBubble": "#1e1e2e",
    "wescode.chat.codeBlock": "#181825",
    "wescode.inline.suggestion": "#45475a40",
    "wescode.ckg.highlight": "#f9e2af30"
  }
}

Chat 面板主题

Chat 面板支持额外的主题定制:

Token说明
wescode.chat.userBubble用户消息背景
wescode.chat.assistantBubbleAI 回复背景
wescode.chat.codeBlock代码块背景
wescode.chat.toolResult工具结果区域
wescode.chat.thinking思考过程区域
wescode.chat.planPlan 面板配色

图标定制

自定义状态栏和 Activity Bar 图标:

{
  "wescode.icons": {
    "ai-status-ready": "$(sparkle)",
    "ai-status-thinking": "$(loading~spin)",
    "ckg-indexing": "$(graph)",
    "chat-panel": "$(comment-discussion)"
  }
}

发布流程

打包扩展

# 安装 vsce 打包工具
npm install -g @vscode/vsce

# 打包为 .vsix
vsce package

# 打包技能
tar -czf my-skill.wesskill -C skills/my-skill/ .

发布到 Marketplace

wescode 扩展可以发布到 VSCode Marketplace(兼容扩展)或 wescode 私有仓库:

# 发布到 VSCode Marketplace
vsce publish

# 发布到团队私有仓库
wescode extensions publish --repo https://extensions.mycompany.com

版本管理

遵循语义化版本控制:

{
  "version": "1.2.3",
  "engines": {
    "vscode": "^1.80.0",
    "wescode": "^1.0.0"
  }
}

测试扩展

# 在开发模式下测试
wescode --extensionDevelopmentPath=./my-extension

# 运行扩展测试
npm run test

# 集成测试(在 wescode 环境中)
wescode --extensionTestsPath=./out/test

常见问题

Q: VSCode 扩展都能在 wescode 中使用吗?

A: 绝大多数 VSCode 扩展可以直接使用。极少数依赖 VSCode 私有 API 的扩展可能需要适配。

Q: 技能和扩展有什么区别?

A: 技能是 AI 行为层面的增强,通过 Prompt 工程引导 AI 行为;扩展是 IDE 功能层面的增强,通过代码实现新功能。两者互补。

Q: 如何调试 MCP Server?

A: 在 .wescode/mcp.yaml 中设置 debug: true,wescode 会记录所有 MCP 通信日志。也可以使用 MCP Inspector 工具独立调试。

Q: 自定义工具会影响所有工作区吗?

A: 取决于配置位置。放在 .wescode/ 目录下的工具配置仅影响当前工作区;放在全局配置中的影响所有工作区。