SenseNova VSCode Copilot

English
SenseNova 6.7 Flash-Lite / DeepSeek V4 Flash 模型接入 GitHub Copilot Chat,通过 vscode.LanguageModelChatProvider 提供聊天补全和工具调用能力。
架构
┌─ VS Code Extension (TypeScript) ──────────────────────┐
│ │
│ src/extension.ts 入口 │
│ src/runtime/ 生命周期 / 命令注册 │
│ ├── lifecycle.ts 激活 / 停用 │
│ ├── commands.ts 命令处理 │
│ ├── provider.ts LM provider 注册 │
│ ├── endpoint.ts 端点自动选择 │
│ └── welcome.ts 首次引导 │
│ │
│ src/provider/ 聊天 Provider 层 │
│ ├── index.ts SenseNovaChatProvider │
│ ├── request.ts 请求体构建 │
│ ├── convert.ts 消息格式转换 │
│ ├── stream.ts SSE 流消费 + thinking 块 │
│ ├── models.ts 模型定义 / 定价 │
│ ├── tools/ 工具流预处理 │
│ └── debug/ 请求分类 / 诊断 │
│ │
│ src/client/ API 客户端 │
│ ├── core.ts SenseNovaClient │
│ └── error.ts 错误标准化 │
│ │
│ src/dashboard/ 用量面板 │
│ ├── panel.ts Webview 面板生命周期 │
│ ├── aggregator.ts 数据聚合 + PlanCache │
│ ├── api.ts 平台配额查询 │
│ ├── claudeCodeIngest.ts JSONL 日志轮询 │
│ └── planStatusBar.ts 状态栏配额显示 │
│ │
│ src/auth.ts 密钥管理 │
│ src/config.ts 配置读取 │
│ src/usage.ts 用量追踪 │
│ src/loadBalancer/ 负载均衡 │
│ src/i18n.ts 国际化 │
│ │
└──────────┬─────────────────────────────────────────────┘
│ @anthropic-ai/sdk
│ POST /v1/messages
┌──────────▼─────────────────────────────────────────────┐
│ SenseNova API │
│ https://token.sensenova.cn │
│ Anthropic-compatible endpoint │
└─────────────────────────────────────────────────────────┘
技术栈
| 层 |
技术 |
| 运行时 |
Node.js 20+, VS Code API 1.90.0+ |
| 语言 |
TypeScript 5.3 |
| 构建 |
tsc + esbuild (打包压缩) |
| 测试 |
Node --test (内置 runner, 无第三方框架) |
| SDK |
@anthropic-ai/sdk (唯一运行时依赖) |
| API 协议 |
Anthropic Messages API (POST /v1/messages) |
| 跨窗口同步 |
VS Code SecretStorage + Memento |
| 代码规范 |
Prettier + lint-staged + husky |
功能
聊天模型
| 模型 |
上下文 |
原生输入 |
能力 |
| sensenova-6.7-flash-lite |
256K |
图片 |
多模态, 工具调用, reasoning |
| deepseek-v4-flash |
1M / 512K (有效) |
— |
思考模式, 工具调用 |
512K 以上输入层需销售授权。通过 SenseNova: 切换 1M 上下文 命令开启(开启前弹出警告)。
Token Plan 免费说明: SenseNova 的 Token Plan 目前对所有模型免费,唯一上游配额是每模型每 5 小时的调用次数限制(见下表)。扩展不主动限流,只在 picker tooltip + dashboard 展示使用情况。
调用次数限制
| 模型 |
ID |
上下文 |
调用次数 / 5h |
说明 |
| SenseNova 6.7 Flash-Lite |
sensenova-6.7-flash-lite |
256K |
1500 次 |
轻量多模态智能体;文本+图片输入,工具调用,思考模式 |
| SenseNova U1 Fast |
sensenova-u1-fast |
32K |
1500 次 |
信息图生成模型(U1 加速版),从 chat 文本输入、图片输出 |
| DeepSeek V4 Flash |
deepseek-v4-flash |
1M(默认512K,可切1M) |
500 次 |
高性能推理;思考模式,工具调用 |
定价说明: AI 模型调用本身免费,仅按调用次数限制(每 5 小时窗口)。不需要付费订阅,只需一个 SenseNova Token Plan API Key 即可使用。
用量面板
Webview 面板,三组数据源:
- Copilot 用量: 按模型 / 按日累计 token (输入/输出/缓存)
- Token Plan 配额: 平台 5 小时 / 周配额实时快照
- Claude Code 用量: JSONL 日志轮询 (默认 ~/.claude/projects/)
30 天柱状图 + 按模型拆分 + 环形图。
负载均衡
多 API Key 间分发聊天请求:
| 配置 |
默认值 |
说明 |
| enabled |
false |
总开关 |
| strategy |
round-robin |
round-robin / least-latency / weighted-random / failover |
| healthCheck.enabled |
true |
周期性探测端点健康 |
| coolDownMs |
30000 |
失败后冷却时间 |
| maxRetries |
2 |
失败切换次数 |
工具调用
- Agent 模式下自动注册 SenseNova Web Search MCP (uvx sensenova-coding-plan-mcp)
- 实验性工具列表稳定化 (stabilizeToolList)
- 单次最多 128 个 function
调试诊断
| 模式 |
说明 |
| minimal |
仅错误日志 |
| metadata |
请求分类 + 缓存命中统计 |
| verbose |
全量请求写入磁盘 (globalStorage/request-dumps/) |
快速开始
环境要求
- VS Code 1.90.0+
- GitHub Copilot Chat 已安装并登录
- SenseNova Token Plan 订阅 + API Key
- VS Code Insiders (渲染思考折叠块)
安装
# 从 Marketplace 安装
# 或从源码构建
npm ci
npm run build
npm run package:dev # → dist/*.vsix
配置 API Key
- 命令面板运行 SenseNova: 添加 API Key
- 输入名称 + Token Plan Key(扩展自动识别端点
https://token.sensenova.cn)
- 打开 Copilot Chat,选择 sensenova-6.7-flash-lite 或 deepseek-v4-flash
- (VS Code 1.128+) 运行 SenseNova: 设置 Copilot 工具模型 启用 Agent 模式
端点
扩展使用 https://token.sensenova.cn 作为唯一 API 端点,首次激活时自动配置。该端点已内置,无需手动设置。
设置项 (sensenova.*)
| 设置 |
默认值 |
说明 |
| apiBaseUrl |
auto-picked |
Anthropic 兼容端点 |
| visibleModels |
全部 |
Picker 可见模型列表 |
| maxOutputTokens |
0 |
输出上限 (0=模型决定) |
| sampling |
{} |
按模型 temperature/topP/topK/frequencyPenalty |
| debugMode |
minimal |
诊断详细度 |
| modelIdOverrides |
{} |
Picker ID 到 API ID 映射 |
| dashboard.includeClaudeCode |
true |
Claude Code 用量面板开关 |
| claudeCode.logPath |
~/.claude/projects |
JSONL 日志目录 |
| claudeCode.pollIntervalMs |
30000 |
轮询间隔 (ms) |
| experimental.stabilizeToolList |
false |
工具列表稳定化 |
| experimental.modelDefPresets |
{} |
请求体逃生口 |
| loadBalancing.* |
见上节 |
负载均衡配置 |
命令
| 命令 |
用途 |
| SenseNova: 添加 API Key |
新增命名 API Key |
| SenseNova: 删除 API Key |
删除指定 Key |
| SenseNova: 管理 API Key |
添加/切换/重命名/删除 |
| SenseNova: 切换 API Key |
切换当前 Key |
| SenseNova: 重命名 API Key |
修改 Key 显示名 |
| SenseNova: 重新识别 API Key 区域 |
重新探测端点 |
| SenseNova: 设置 Copilot 工具模型 |
配置 Agent 模式 utility model |
| SenseNova: 切换 1M 上下文 |
开启/关闭 1M 上下文 |
| SenseNova: 显示日志 |
打开输出通道 |
| SenseNova: 打开用量面板 |
打开 Webview 面板 |
| SenseNova: 打开请求 Dump 目录 |
打开调试日志目录 |
| SenseNova: 重新扫描 Claude Code 日志 |
强制重读 JSONL |
| SenseNova: 打开 Claude Code 日志目录 |
打开日志目录 |
| SenseNova: 刷新 SenseNova Web Search MCP |
刷新 MCP provider |
项目结构
sensenova-vsc/
├── src/
│ ├── extension.ts 入口
│ ├── runtime/ 生命周期 / 命令
│ ├── provider/ Chat provider 实现
│ ├── client/ API 客户端
│ ├── dashboard/ 用量面板
│ ├── loadBalancer/ 负载均衡
│ ├── auth.ts 密钥管理
│ ├── config.ts 配置读取
│ ├── consts.ts 常量
│ ├── i18n.ts 国际化
│ ├── usage.ts 用量追踪
│ └── json.ts JSON 安全序列化
├── test/ 单元测试
├── .vscodeignore VSIX 打包过滤
├── esbuild.mjs esbuild 配置
├── esbuild.tests.mjs 测试构建配置
└── package.json
故障排查
- Picker 无模型: 运行 SenseNova: 打开用量面板 检查 API Key 与可见模型
- HTTP 404: 确认
apiBaseUrl 为 https://token.sensenova.cn 而非第三方代理
- 密钥丢失警告: SecretStorage 条目丢失,重新添加 API Key
- API Key 未配置: 运行 SenseNova: 添加 API Key (密钥存在 SecretStorage 而非 settings.json)
- Agent 模式 utility model 错误: 运行 SenseNova: 设置 Copilot 工具模型
- Commit 按钮不走 SenseNova: 运行以上命令设置
chat.utilitySmallModel
- 1M 开关后 picker 仍显示 512K: 切一次模型刷新缓存
本地化
许可证
MIT
| |