扩展开发
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 扩展:
- 语言支持扩展:LSP 语言服务、语法高亮、代码片段
- 主题扩展:颜色主题、图标主题、产品图标
- 调试扩展:调试适配器、启动配置
- 工具链扩展:Lint、格式化、构建工具
- Git 扩展:GitLens 等 Git 增强工具
安装方式与 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
工具开发规范
开发自定义工具时需遵循:
- 工具名:使用
snake_case,清晰描述功能 - 描述:简洁但完整,帮助 AI 正确选择工具
- 参数 Schema:使用 JSON Schema 定义,包含描述
- 返回格式:统一使用 JSON 字符串返回
- 错误处理:返回结构化错误信息
- 超时控制:长时间操作需设置超时
工具测试
# 测试 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 # 查看技能详情
技能开发最佳实践
- 精确描述:
description不超过 60 字符 - 明确触发:清晰定义"何时使用"和"何时不使用"
- 工具引用:引用 wescode 标准工具名(如
read_file、search_files) - 分步指引:将复杂流程分解为清晰步骤
- 示例驱动:提供具体的输入输出示例
主题定制
颜色主题
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.assistantBubble | AI 回复背景 |
wescode.chat.codeBlock | 代码块背景 |
wescode.chat.toolResult | 工具结果区域 |
wescode.chat.thinking | 思考过程区域 |
wescode.chat.plan | Plan 面板配色 |
图标定制
自定义状态栏和 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/ 目录下的工具配置仅影响当前工作区;放在全局配置中的影响所有工作区。