Skip to content
| Marketplace
Sign in
Visual Studio Code>AI>WeaveNet for CopilotNew to Visual Studio Code? Get it now.
WeaveNet for Copilot

WeaveNet for Copilot

WeaveNet

|
17 installs
| (0) | Free
Use models from your OpenAI-compatible AI relay directly in the Copilot Chat model picker.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

WeaveNet for Copilot

把你的 OpenAI 兼容 AI Relay 模型接入 GitHub Copilot Chat 的模型选择器,同时保持 Claude 走 Claude 原生协议、其他模型走 OpenAI 协议。

项目结构

src/
  extension.ts       VS Code 激活与命令注册
  constants.ts       扩展常量与 SecretStorage key
  auth/              Relay API Key 管理
  config/            VS Code 配置读取与校验
  copilot/           Copilot provider 与请求转换
  relay/             中转站 HTTP/SSE 客户端、模型与协议类型
  metadata/          OpenRouter 在线模型能力与参考价格

使用方式

  1. 安装本地 VSIX 扩展。
  2. 在你的 Relay 中创建一把可访问所需模型的 API Key。
  3. 首次启动时,扩展会显示一次非阻塞提示;点击 Add Relay Connection,输入连接名称、Relay Base URL 和 API Key。也可继续添加更多连接,所有连接会同时启用。
  4. 运行 WeaveNet: Refresh Models 聚合刷新所有连接,然后在 Copilot Chat 模型选择器里选择 WeaveNet ... 模型。模型详情会显示其来源连接和脱敏 Host。
  5. 需要立即更新 OpenRouter 能力目录时,运行 WeaveNet: Refresh Model Metadata。

Relay 连接管理

可用配置档同时连接工作、中转站或不同模型集,而不必反复改写设置:

  1. 在命令面板运行 WeaveNet: Add Relay Connection,依次填写名称、Relay API 地址和 API Key。
  2. 使用 WeaveNet: Manage Relay Connections 新增、编辑、复制、测试、删除连接,或刷新全部/指定连接。状态栏会汇总所有连接及模型刷新状态。

每个连接可选地设置 requestHeaders、includeModels、excludeModels 和固定 models。每个连接有扩展管理的稳定 UUID 和一把 Relay API Key;UUID 不属于秘密,密钥不会写入 settings.json,而是按 UUID 隔离存储在 VS Code SecretStorage。复制连接会生成新 UUID,且不会复制 API Key。requestHeaders 的值仍属于普通 VS Code 设置,不受 SecretStorage 保护,不得用于保存 API Key、令牌或其他敏感信息。

命令

  • WeaveNet: Add Relay Connection:新建并启用 Relay 连接,收集地址和 API Key。
  • WeaveNet: Manage Relay Connections:打开连接管理菜单。
  • WeaveNet: Edit Relay Connection:编辑连接名称、地址、模型过滤规则和固定模型;现有额外请求头保持不变(需要修改时可直接编辑 settings.json)。改名不影响基于 UUID 存储的 API Key。
  • WeaveNet: Copy Relay Connection:复制不含 API Key 的连接配置。
  • WeaveNet: Test Relay Connection:由用户显式触发 /models 与最小 OpenAI/Claude 流式及非流式请求;结果安全展示脱敏端点、HTTP 状态、响应类型与请求 ID,并解释鉴权、端点、限流、上游和网络错误。最小模型请求可能产生极少量服务费用;扩展不会在后台自动执行这些付费探测。
  • WeaveNet: Delete Relay Connection:删除连接及对应 API Key。
  • WeaveNet: Clear All Relay Connections:永久删除全部连接配置、其 API Key,以及旧版本遗留的 Relay 密钥。
  • WeaveNet: Set Relay API Key:单连接时直接设置;多连接时先选择连接。
  • WeaveNet: Clear Relay API Key:单连接时直接删除;多连接时先选择连接。
  • WeaveNet: Refresh Models:并发刷新所有连接的 /models 目录并聚合模型。openaiApiStrategy 为 auto 时,新发现且未显式指定协议的 OpenAI 兼容模型会各执行一次极小的 Responses API 能力探测(max_output_tokens: 1,无存储),每次刷新每个模型最多一次,结果按连接缓存 metadataRefreshHours 并持久化到 VS Code globalState(重启后无需重新探测);明确被拒绝(HTTP 400/404/426)或探测成功的模型会被缓存,临时失败(超时、限流、5xx、网络)不缓存,下次刷新自动重试。手动执行此命令会先清除对应连接的能力缓存再重新探测;强制 chat 或 responses 时不执行 Responses 探测。
  • WeaveNet: Refresh Model Metadata:立即刷新 OpenRouter 的公开模型能力和参考价格目录。
  • WeaveNet: Open Settings:打开 WeaveNet 设置页。
  • WeaveNet: Show Debug Log:打开 WeaveNet 输出通道,用于查看 Token 用量和脱敏请求元数据。
  • WeaveNet: Open Sensitive Request Dumps Folder:打开仅在 debugMode=verbose 时生成的敏感请求 dump 目录;分享日志前不要分享这些文件。

协议路由

插件使用每个 Relay 各自的 API Key 获取模型。每个模型都绑定发现它的连接、配置修订和请求协议,聊天请求始终发送到该来源 Relay:

  • OpenAI 兼容模型:按 openaiApiStrategy、固定模型声明和自动探测结果选择 POST /chat/completions 或 POST /responses,使用 Authorization: Bearer 认证。
  • DeepSeek Chat:官方 api.deepseek.com 会自动识别;自定义 Relay 可在固定模型上设置 openai.dialect: "deepseek"。适配器使用 DeepSeek 的 thinking 开关,保留多轮 reasoning_content,并对标题、分类、设置解析等 Copilot 辅助请求关闭思考。
  • Claude 模型:走 Anthropic-compatible POST /messages,使用 x-api-key 认证。

同一把密钥只因目标协议不同而采用对应的请求头;这样可避免 Claude 模型被错误地转成 OpenAI 协议,减少缓存或原生能力失效的问题。

模型能力与参考价格

模型的图片输入、工具调用、推理和上下文窗口优先读取 sub2api 返回的能力字段,缺失字段由 OpenRouter 补充;公开参考价格来自 OpenRouter。插件不再使用 LiteLLM、内置模型快照或名称猜测。无法确认的图片、工具与推理能力保持关闭,缺失的 token 上限使用插件配置默认值。模型选择器会显示输入、输出和缓存读取的每百万 token 参考价,以及对应的成本档位。

参考价格不是 sub2api 实际扣费价格。实际扣费受你的分组、账号倍率和上游渠道影响,应以 sub2api 的用量日志为准。

支持推理的模型会在聊天输入框旁显示“思考工作量”,可选择 Low、Medium、High、Extra High 或 Max。标准 OpenAI 协议发送 reasoning_effort;DeepSeek Chat 将它映射为二值 thinking 开关;Claude 协议换算为原生 thinking.budget_tokens。有上下文窗口元数据的模型也会显示“上下文大小”。

常用设置

  • weavenet-copilot.activeProfile:仅为从 0.3.x 升级保留的废弃字段;首次迁移排序后自动清空,不再控制路由。
  • weavenet-copilot.profiles:全局保存且同时启用的 Relay 连接池。每项包含扩展管理的 id、name、baseUrl,还可单独设置 requestHeaders、模型白名单/黑名单与固定模型;远程 Relay 必须使用 HTTPS,只有 localhost、127.0.0.0/8 与 ::1 允许 HTTP;schema 不允许在此写入 API Key 或其他未声明字段。requestHeaders 是普通配置,不应包含任何秘密。
  • weavenet-copilot.openaiApiStrategy:应用级 OpenAI 请求协议策略,默认 chat。chat 强制全部 OpenAI 兼容模型使用 Chat Completions,兼容性最好,也避免切换协议带来的 Prompt 缓存冷启动;responses 强制未被固定模型显式 chat 否决的模型使用 Responses;auto 遵循固定模型声明,并只对未声明模型执行能力探测。优先级为:任一处显式 chat > 任一处显式 responses > 自动探测。修改设置会自动清除旧目录快照并刷新模型;协议切换后建议新开对话,避免不同协议的工具调用或 reasoning 历史不兼容。
  • weavenet-copilot.anthropicVersion:Claude /messages 请求使用的 anthropic-version。
  • weavenet-copilot.openaiPromptCaching:是否为 gpt-* 模型发送稳定的 prompt_cache_key,默认开启。
  • weavenet-copilot.openaiPromptCacheKey:可选的 OpenAI 缓存 key。留空时按当前工作区生成稳定值;同一工作区内应保持不变。
  • weavenet-copilot.claudePromptCaching:Claude 缓存模式,默认 automatic。插件会为 system、最后一个工具定义和最近两条用户消息设置显式缓存断点,适合持续增长的多轮 Copilot 对话。设为 disabled 可关闭缓存。
  • weavenet-copilot.debugMode:诊断级别,默认 minimal。minimal 只记录 Token 用量;metadata 额外记录脱敏请求元数据;verbose 还会把完整请求写入本机扩展全局存储,可能包含提示词、代码、工具参数和图片数据,但不包含 API Key 或自定义请求头。dump 单文件最多 2 MiB、最多 20 个且总计最多 20 MiB,可通过 WeaveNet: Open Sensitive Request Dumps Folder 查看并手工删除。
    • 旧 weavenet-copilot.debug 已废弃;值为 true 时兼容映射到 metadata。
    • cacheRead / cacheWrite 为数字时是上游实际返回的 token 用量;显示 n/a 表示上游的流式响应未返回该字段,不能据此判断是否命中。
  • weavenet-copilot.experimental.stabilizeToolList:默认关闭,仅对 DeepSeek Chat 生效。开启后先执行 Copilot 暴露的 activate_* 辅助工具,再向模型发送稳定后的工具集合;控制消息不会进入上游历史,最多尝试三轮。仅在确认动态工具列表会影响 DeepSeek Agent 稳定性时开启。
  • weavenet-copilot.includeModels / excludeModels:仅供从 0.3.x 升级迁移使用的废弃顶层模型过滤设置;新配置应写入 profiles 中。
  • weavenet-copilot.maxInputTokens:向 Copilot 声明的输入 token 硬上限,默认 128000。即使模型元数据声明了更大的上下文,也不会超过这个值;OAuth 上游的实际窗口较小时应相应调低。
  • weavenet-copilot.supportsToolCalling:是否向 Copilot 声明工具调用能力。
  • weavenet-copilot.supportsImageInput:是否为所有模型向 Copilot 声明图片输入能力,默认关闭。
  • weavenet-copilot.imageInputModels:可选的模型 ID 正则表达式;命中后强制向 Copilot 声明图片输入能力。正常情况下无需配置,插件会优先根据 sub2api 和 OpenRouter 的模型元数据自动识别。
  • weavenet-copilot.disabledImageInputModels:即使公开元数据声称支持图片,也强制关闭对应模型的图片输入能力。默认为空;只有确认某个具体路由不支持图片时,才建议在这里添加模型 ID 正则表达式。
  • weavenet-copilot.visionProxyEnabled:为不支持图片输入的 WeaveNet 模型启用视觉代理,默认关闭。开启前需确认将图片交给另一模型处理符合你的隐私、安全和费用要求;原生视觉模型仍直接接收图片,不经过代理。
  • weavenet-copilot.visionProxyModel:视觉代理使用的已安装 VS Code 语言模型,必须精确填写 vendor/id,例如 copilot/gpt-4o。可以是任何扩展注册的原生视觉模型,也可以是自己通过 WeaveNet 加载的具备原生图片输入的模型(例如 weavenet/gpt-4o),但只靠视觉代理声明图片能力的模型不能作为代理,以避免递归。扩展不自动挑选其他模型,也不在失败时 fallback。不知道要填什么 ID 时,运行命令 WeaveNet: Pick Vision Proxy Model(或点击设置项说明中的链接)从已安装且具备视觉能力的模型列表中选择,会自动写入正确的 vendor/id。
  • weavenet-copilot.visionProxyPrompt:发送给视觉模型的指令;留空使用内置的忠实描述指令。每条当前含图用户消息中的图片会带编号统一识别,并同时发送该消息的有界布局;布局可能包含图片周边用户文本和工具结果文本,以保留必要语境。
  • OpenAI 图片请求会自动采用与 VS Code 内置 Custom Endpoint 相同的兼容形态,不发送 prompt_cache_key、context_window、reasoning_effort 或 max_tokens 等可选扩展字段;纯文本请求仍保留对应设置。
  • weavenet-copilot.metadataRefreshHours:OpenRouter 模型能力目录的后台刷新间隔,默认 6 小时。
  • weavenet-copilot.models:仅供从 0.3.x 升级迁移使用的废弃顶层固定模型列表;新配置应写入 profiles 中。
  • 自动发现会并发刷新每个连接的 /models 目录;返回的 claude-* 模型使用 Claude 原生路由,其余模型使用 OpenAI 路由。各连接的固定模型会与其发现结果合并。某个连接发现失败时只保留该连接上一次成功的发现快照;如果没有快照但配置了固定模型,则以降级状态仅展示其固定模型。
  • weavenet-copilot.requestTimeoutSeconds:等待响应头的秒数。模型发现 GET 最多安全重试一次,聊天 POST 不做网络盲重试。
  • weavenet-copilot.streamIdleTimeoutSeconds:流式响应数据块之间允许的空闲秒数。
  • weavenet-copilot.temperature / weavenet-copilot.topP:可选采样参数。OpenAI 同时配置两者时只发送 temperature;Claude 保持已有转发行为。
  • weavenet-copilot.claudePromptCachingTTL:Claude 缓存断点 TTL,支持 5m 和 1h。自动模式会覆盖 system、tools 和最近两条用户消息。

协议兼容层同时支持标准 SSE、无空格 data:、CRLF、完整 JSON 响应、reasoning、usage 和增量工具调用。只有在没有任何上游处理证据时,流式请求才允许安全降级为非流式请求。

OpenAI-compatible Relay 可在固定模型中通过 openai 对象显式声明实际支持的请求能力。未声明时维持旧版请求负载,不假定第三方 Relay 支持 OpenAI 的全部新字段。例如:

{
  "id": "gpt-modern",
  "route": "openai",
  "openaiApi": "responses",
  "toolCalling": true,
  "thinking": true,
  "contextWindows": [32768, 128000],
  "openai": {
    "tokenLimitField": "max_completion_tokens",
    "contextWindow": true,
    "promptCacheKey": true,
    "store": true,
    "strictTools": true,
    "parallelToolCalls": true,
    "developerRole": true,
    "clientRequestId": true,
    "replayReasoningContent": false,
    "assistantPhase": false,
    "encryptedReasoning": false,
    "reasoningSummary": false,
    "reasoningEfforts": ["minimal", "low", "medium", "high"],
    "defaultReasoningEffort": "medium"
  }
}

直连 DeepSeek 的固定模型建议显式使用 Chat 协议和 DeepSeek 方言:

{
  "id": "deepseek-chat",
  "route": "openai",
  "openaiApi": "chat",
  "toolCalling": true,
  "thinking": true,
  "openai": { "dialect": "deepseek" }
}

官方 https://api.deepseek.com 地址可自动识别,经过自定义域名或网关时应显式声明。该适配只作用于 Chat Completions:请求发送 thinking.enabled/disabled 而不是 OpenAI 的 reasoning_effort,并把流式思考内容以隐藏会话元数据带回下一轮的 reasoning_content,避免工具调用后的多轮推理链被 DeepSeek 拒绝。超过 4 MiB 的思考回放会安全丢弃,不会无限增长。

openaiApi 可显式声明固定模型使用 responses(Responses API)或 chat(Chat Completions)。模型级和全局策略采用安全否决优先级:任一处显式 chat 都强制 Chat;没有 chat 时,任一处显式 responses 都强制 Responses;两处均未指定时才自动探测。openaiApi 为 responses 时,请确认 Relay 上游确实实现了 /responses。

固定模型与自动发现的同名模型(同一 route + 模型 id)会合并,固定模型只覆盖它真正写出来的字段:省略 toolCalling、maxInputTokens 等字段时,发现阶段拿到的值会保留,不会被清空。openai 能力对象同样按字段合并,因此只想补一条 encryptedReasoning 时无需重复声明其余能力。

context_window 是 Relay 私有扩展,只在显式启用并提供 contextWindows 时发送。store: false、并行工具、developer role、X-Client-Request-Id、严格工具 schema 和现代令牌字段也都需要显式能力。严格 schema 无法无损转换时会自动回退到普通工具定义。GPT 模型保留原有 Prompt Cache Key 行为,能力值 false 可覆盖该回退;Prompt Cache Key 在 Chat Completions 与 Responses 两条路径上以相同规则发送。诊断可记录 finish reason、拒绝事件、usage、请求 ID、限流余量和时延,但不记录 Prompt 或工具参数正文。auto 策略下,Responses API 采用自动能力探测:免费 GET /responses 可用性检查后,新发现且未显式指定协议的 OpenAI 兼容模型各执行一次最小探测 POST,探测结果按连接缓存;手动刷新可重新探测。强制策略和模型级显式声明会跳过对应探测,演进约束见 OPENAI_RESPONSES_PLAN.md。

replayReasoningContent 与 assistantPhase 只作用于 Responses 协议,且默认关闭。前者在每组连续 function_call 前回传一个合成的 reasoning item,仅供 DeepSeek 等要求回传思考内容的 Relay 使用——规范中的 reasoning item 需携带上游返回的 id,合成项无法提供,因此默认不发送。后者为 assistant 历史消息标注 phase(最后一次工具调用之前的文本记为 commentary,其后记为 final_answer),可改善 Codex 系模型的表现,但旧网关可能拒绝该字段。重放历史始终按原始交错顺序产出 item(思考、文本、工具调用各就各位),不再按类型分组。

encryptedReasoning(仅 Responses 协议,默认关闭)是 replayReasoningContent 的规范替代方案:启用后请求带 include: ["reasoning.encrypted_content"],扩展把服务端返回的 reasoning item(真实 id + 加密载荷)原样寄存在会话历史的思考块上,下一轮按原位逐字回传,从而在不依赖服务端存储的前提下还原真实推理——请求仍为 store: false,也从不发送 previous_response_id。加密载荷对扩展完全不透明,只做透传。官方 Responses API 在 store: false 的无状态模式下支持返回该载荷,但兼容网关的实现可能不同:有些网关只在 store: true 或服务端持久化路径下返回 encrypted_content,即使请求包含 include 也可能省略它。要求 Relay 上游接受 include 字段;不认识该字段的网关可能返回 400,关闭该能力即可。若宿主未把加密载荷带回下一轮,则退化为不发送任何 reasoning item——绝不会发送缺少加密载荷的 reasoning item。验证时,首个请求的 replayedReasoningItems=0 是预期的;如果连续多轮仍为 0,应优先检查 Relay 是否在 store: false 下返回了 encrypted_content,而不是假设扩展能够自行生成或解密该载荷。

reasoningSummary(仅 Responses 协议)默认开启:Responses 请求自动带 reasoning.summary: "auto",模型在最终答案之前流式输出一段可读的思考摘要,显著缩短"看起来在等"的空窗期。它不改变实际推理量,也不影响首字节时延,只让思考过程可见。不支持该字段的网关可能返回 400,部分官方账号还需完成组织验证才会返回摘要,遇到问题可在固定模型上显式声明 openai.reasoningSummary: false 关闭。调试日志的 reasoningSummary= 字段可确认请求是否携带该参数。

当上游明确返回上下文窗口超限时,插件会提示新开会话或减少附件。Cloudflare、Nginx 等网关返回 HTML 错误页时,插件只显示简短的 HTTP 错误和排查提示,不会把整页 HTML 注入聊天窗口。调试模式会额外记录请求体字节数,但不会记录请求正文。

纯文本模型的视觉代理

启用视觉代理后,扩展先把当前用户消息中的图片、配置的视觉指令以及该消息的有界布局发送给指定的已安装视觉模型。布局最多 16 KiB,可能递归包含图片周边用户文本和工具结果文本(例如文件内容或测试输出),因此这些数据也会交给视觉模型提供方。视觉模型返回的文字描述会作为长度前缀 JSON 不可信数据替换图片,再发送给目标 WeaveNet 纯文本模型;目标模型不会收到原始图片。每条当前、未命中缓存的含图用户消息会产生一次独立视觉调用,调用由所选模型的提供方处理,可能独立计费,并受该提供方自己的数据处理和保留政策约束。

单个目标请求最多处理 8 张待代理图片;单张图片最多 10 MiB,待代理图片合计最多 20 MiB,视觉指令最多 32 KiB,插入目标请求的单条描述(含安全 framing)最多 48 KiB。视觉模型返回流最多接受 4,096 个 chunk;连续 90 秒没有新 chunk 或整次视觉调用超过 120 秒时,扩展会取消本地模型请求并失败,不会把部分描述发送给目标 Relay。超过可预检限制时请求会在选择或调用视觉模型前失败。限制只统计当前轮次可能外发的图片;历史图片不会自动重新外发。

为了避免 Agent 工具轮次重复识别同一批图片,描述只保存在扩展进程内的有界短期缓存中:最多 64 条、描述正文合计最多 512 KiB、30 分钟过期,并按最近最少使用规则淘汰。缓存不写入设置、文件、SecretStorage、globalState 或日志,扩展进程结束后即消失;只有目标请求成功后才写入缓存。缓存键由视觉模型、完整视觉指令和消息布局、图片 MIME 类型与字节摘要计算,日志不会记录该键、摘要、图片、指令或描述正文。若较早轮次的图片描述已不在缓存中,扩展不会在后续 Agent 轮次中自动再次外发图片,而会明确标记描述不可用。

API Key 会存储在 VS Code SecretStorage 中。

请使用 Delete Relay Connection 或 Clear All Relay Connections 删除连接;命令会同时清除对应 API Key,避免产生无法归属的 Secret。直接手动编辑设置删除 Profile 不会回收 SecretStorage 中已有的 API Key。

连接测试结果会按稳定连接 UUID 与配置 SHA-256 指纹保存在 VS Code globalState 中,用于重启后继续展示状态。指纹不包含 API Key,持久化结果不包含自定义 Header 原文、响应正文、Prompt 或工具参数;API Key 变化时只会使对应连接诊断失效。当前诊断仅用于记录和展示,不会自动改变聊天请求路由。每个连接最近一次成功的模型目录也会按连接 UUID 持久化到 globalState:扩展重启后若 Relay 暂时不可用,模型选择器仍会恢复上次成功加载的模型(状态显示为降级),配置修订或 API Key 移除时该快照会被清除。

从 0.3.x 升级时,扩展会为连接自动生成稳定 UUID,将旧默认连接排到首位,并只把旧顶层模型规则、固定模型和请求头物化到该旧默认连接。名称型 Secret 会在验证新 UUID Secret 写入成功后再删除;迁移可重复运行且不会覆盖已有 UUID Secret。

从旧版单一 Relay 配置首次升级到连接配置档版本时,扩展会执行一次性清理:删除旧版顶层 Base URL 与旧版 API Key,并要求重新创建 Relay 连接。完成标记保存在 VS Code 全局状态中,后续升级不会重复执行,也不会删除新版连接配置或连接专属 API Key。

隐私与安全

  • API Key 只保存在 VS Code SecretStorage 中,不会写入工作区文件或调试日志。
  • 自定义 requestHeaders 值由 VS Code 配置系统保存,不受 SecretStorage 保护;不得在其中放置 API Key、令牌或其他敏感信息。
  • 对话、代码和工具调用内容会发送到你配置的 sub2api 中转站及其上游模型服务;原生视觉请求也会发送图片。视觉代理启用时,原始图片、视觉指令和所在用户消息的有界布局(可能包含工具结果文本)会先发送给你明确选择的已安装视觉模型,目标纯文本 Relay 只接收生成的图片描述。
  • 视觉代理默认关闭,不自动选择模型或 fallback。视觉调用可能由不同提供商独立计费,并受其隐私与数据保留政策约束。
  • 插件不会收集遥测数据。minimal/metadata 日志不记录 API Key 或提示词正文;用户显式选择 verbose 时,本机会生成可能含提示词、代码、工具参数和图片数据的有界敏感请求 dump,排障后应删除且不得直接上传。
  • 使用公开或第三方中转站前,请确认其隐私政策、日志保留和数据处理方式符合你的要求。

完整说明见 PRIVACY.md,问题反馈见 SUPPORT.md。

发布流程

合并符合 Conventional Commits 的变更到 main 后,Release Please 会创建或更新发布 PR,统一维护 package.json、package-lock.json、CHANGELOG.md 和版本标签。合并该发布 PR 后会自动创建 GitHub Release,并调用同一条可复用发布流水线:

git commit -m "fix: describe the user-visible correction"
git push origin main
# 审核并合并 Release Please 创建的 release PR

发布流水线会校验标签与 package.json 版本一致,再执行高危依赖审计、lint、源码与测试类型检查、编译、覆盖率门槛、真实 VS Code 扩展宿主冒烟测试和包内容检查;同一份 VSIX 随后上传为 Actions artifact、附加到 GitHub Release,并发布到 Visual Studio Marketplace。配置可选的 OVSX_PAT 后也会发布到 Open VSX;VSCE_PAT 为必需 Secret。重复版本会安全跳过,不会覆盖已发布版本。

旧的 annotated v*.*.* 标签入口仍可调用同一流水线;若 Marketplace 或 Open VSX 临时失败,可从 Actions 手动运行 Rescue publish,输入已经存在且与包版本一致的标签重试,不需要重新打标签或改版本。

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft