Releases: SantiagoRoChi/OpenCode-Copilot-Chat
Release v3.6.1
Changelog
[3.6.1] - 2026-06-22
🐛 Fixed
- Compilation errors in CI pipeline: Fixed several TypeScript errors that broke the build
src/chat/participant.ts: FixedchatContext→_chatContextparameter name,ChatRequestMarkdownPart→ChatResponseMarkdownPart, added requiredtoolModeproperty, replacedstream.toolCall()withstream.markdown()src/extension.ts: Fixed type mismatch betweenGoLimits(withresetsAt) andDashboardState.goBurnRate(expectsspent/limit/percent)src/providers/BaseProvider.ts: Defined localLanguageModelConfigurationSchemainterface to avoid missing VS Code API exportsrc/providers/OpenCodeFreeProvider.ts: Added missingApiModelimportsrc/providers/sdk/anthropicChat.ts&src/providers/sdk/openaiChat.ts: Properly typed AI SDKresult.usageand used null-coalescing for optionalpromptTokens/completionTokens; removed duplicateonUsagecallback call
[3.6.0] - 2026-06-22
🚀 Major Feature: OpenCode Usage Tracking & Agent Windows
Added
-
OpenCode Usage Tracking Integration: Real-time usage data from OpenCode API
- Fetches usage data via OpenCode's _server endpoint with dynamic server ID discovery
- Automatically discovers workspace ID from OpenCode pages
- Uses API key from �uth.json for authentication (no manual cookie required)
- Displays usage metrics: requests, tokens, cost per model
- Go subscription burn-rate tracking (5h rolling, weekly, monthly)
-
Agent Window Support: Register providers for VS Code Agents Window
- Creates duplicate provider instances with -agent suffix vendors
- Enables OpenCode models in Copilot CLI / Agents Window
- Configurable via opencode-zen.enableAgentWindow setting
-
OpenCode Usage Panel: New webview panel for OpenCode login
- Simple Browser integration for OAuth login flow
- Local HTTP server for capturing workspace ID and auth cookie
- Automatic workspace discovery from OpenCode pages
-
OpenCode Auth Service: Centralized authentication management
- Stores workspace ID, auth cookie, and API keys
- Auto-discovers workspace ID from OpenCode pages
- Extracts server ID dynamically from page HTML
-
Enhanced Status Bar: Real-time usage metrics
- Go subscription burn-rate display (5h/weekly/monthly)
- Warning indicators when approaching limits
- Cost tracking per provider
-
Enhanced Tree View: Registration commands in sidebar
- Login with OpenCode button
- Configure Workspace URL button
- Direct access to all configuration options
-
OpenCode Usage Service: Background usage data fetching
- Periodic refresh every 5 minutes
- Dynamic server ID discovery from page HTML
- Automatic workspace ID extraction
Changed
-
UsageTracker enhanced with cost calculation
- Added ModelPricing interface for token pricing
- Added �stimateCost() function for request cost calculation
- Added PeriodUsage for burn-rate tracking
- Added GO_LIMITS constant for subscription limits
-
Status bar improved
- Shows Go burn-rate with warning indicators
- Displays cost per request
- Enhanced tooltip with detailed breakdown
-
Tree view improved
- Added registration commands (Login, Configure Workspace)
- Shows burn-rate data in dashboard
Fixed
-
OpenCode API key handling
- Fixed stale API key caching issue
- Now passes API key directly to SDK on every call
- No more "Missing API key" errors
-
Server ID discovery
- Dynamic discovery from page HTML instead of hardcoded values
- Handles OpenCode deployments that change server IDs
[3.5.0] - 2026-06-17 - 2026-06-17
Fixed
- Tool calling broken on LM Studio and Ollama: Local models emit tool calls as inline
<tool_call>{...}</tool_call>blocks insidedelta.contentinstead of nativedelta.tool_calls. The SSE parser now runs every text chunk through a newToolCallAdapter(src/tools/toolCallAdapter.ts) that detects these XML-style blocks, generates a stablecallId, and emits aLanguageModelToolCallPart. Nativedelta.tool_callsis still honored (OpenCode / Zen / Go unchanged). - Tool-calls and reasoning tags from many model families: The parser recognizes the full range of XML/pipe-bar/bracket/markdown tag variants used by Qwen, DeepSeek, Hermes, Llama 3.x, Mistral (
<antml:function_calls>), Phi-3.5, Granite, Cohere, Yi, and any local model that emits reasoning or tool blocks insidedelta.content. Tool-call tags:<tool_call>,<toolcall>,<tool>,<invoke name="x">,<action>,<function>,<antml:function_calls>,<|tool_call|>(Llama 3),[TOOL_CALL]/[TOOL_CALLS](Cohere/Yi). Reasoning tags:<think>,<thinking>,<reasoning>,<reflection>,<analysis>,<thought>,<solution>,<plan>,<|thinking|>/<|reasoning|>,[THINK], and markdown-style### Reasoning/### Thought/### Planblocks. Body parsing supports the common JSON shapes ({name, arguments|parameters|input|args},{function: {name, arguments}}, Cohere{tool, parameters}) and the Hermes/Granite XML form<invoke name="x">JSON-args</invoke>. - Reasoning blocks missing on LM Studio and Ollama: `` blocks inside
delta.contentare now parsed and emitted as `LanguageModelThinkingPart`, so reasoning models show their thinking as a collapsible block. Native `delta.reasoning_content` is still honored. - LM Studio / Ollama servers invisible in the side panel:
OpenCodeTreeProvideronly received OpenCode servers in its state. The two local providers now exposegetServerList()andrefreshTreeView()aggregates them under the sameDashboardheader with a per-type icon (LM Studio =$(chip), Ollama =$(zap)). - LM Studio / Ollama servers lost on reload: Servers added via the "Add Server" command were kept only in memory. They are now persisted to
SecretStorage(workspace state) under a newLocalServerConfigschema and re-hydrated onactivate().
Added
- Per-device LM Studio model entries: Newer LM Studio versions expose the same model
keyonce per device (GPU0,GPU1,CPU,MPS). The provider now readsloaded_instances[]and emits oneRoutedModelInfoper(model, device)pair, with the device id suffixed in the display name and embedded in the composite id (${serverId}:${key}@${device}). Single-device installations keep the original naming. - Unified "Remove Server" picker:
opencode-zen.removeServernow lists OpenCode, LM Studio and Ollama entries together, dispatching to the right backend (MultiServerManagervsLMStudioProvidervsOllamaProvider) and persisting accordingly. ToolCallAdapterunit tests intest/tool-call-adapter.test.ts: 46 cases covering complete blocks, split chunks, partial opening tags, nested JSON shape, malformed bodies, interleaved reasoning + tool calls, and every supported tag family (Qwen, DeepSeek, Hermes, Llama 3.x, Mistral, Cohere, Yi, markdown headers).
Files
- Added:
src/tools/toolCallAdapter.ts,test/tool-call-adapter.test.ts - Modified:
src/providers/OpenAICompatibleProvider.ts,src/providers/LMStudioProvider.ts,src/providers/OllamaProvider.ts,src/config/secretStorage.ts,src/extension.ts
[3.4.0] - 2026-06-16
Added
-
VS Code Proposed APIs Integration: Activadas 6 APIs propuestas de VS Code para mejorar la experiencia de chat
-
chatProvider(v5): Provider de chat con firma actualizada -
languageModelThinkingPart(v1): Thinking blocks colapsables en el UI -
chatInputNotification: Notificaciones en el área de input del chat -
chatStatusItem: Items de estado en la vista de chat -
languageModelPricing: Información de precios por token -
languageModelSystem(v3): Mensajes de sistema nativos
-
-
Thinking Blocks Colapsables: Emisión de
LanguageModelThinkingPartpara reasoning content- Soporte en streaming SSE OpenAI/LM Studio (
delta.reasoning_content) - Soporte en streaming SSE Anthropic (
thinking_delta) - Los bloques de thinking se renderizan como elementos colapsables en VS Code
- Soporte en streaming SSE OpenAI/LM Studio (
-
Chat Input Notifications: Sistema de notificaciones en el input del chat
-
showMissingConfigNotification(): Aviso cuando un provider no está configurado -
showConnectionErrorNotification(): Aviso de errores de conexión -
showConnectedNotification(): Confirmación de conexión exitosa - Fallback a mensajes estándar de VS Code cuando la API propuesta no está disponible
-
-
Chat Status Items: Manager de estado para providers
-
ChatStatusItemManager: Crea items de estado usando la API propuesta - Fallback a
StatusBarItemcuando la API no está disponible
-
-
Model Pricing: Información de precios integrada en los modelos
- Campo
_pricingenRoutedModelInfoconinputTokenPrice,outputTokenPrice,currency - Precios populados desde
models.devpara providers OpenCode (Free, Go) - Conversión automática de
$/M tokens a $ /token
- Campo
-
System Messages Nativas: Reemplazo del hack numérico por API propuesta
- Eliminado
(msg.role as number) === 2 - Usa
(vscode as any).LanguageModelChatMessageRole.SystemenconvertMessages()yconvertMessagesAnthropic()
- Eliminado
Changed
- Refactor de Providers: Unificación de providers bajo
OpenAICompatibleProvider- Eliminados
BaseLocalProvider.ts,BaseOpenCodeProvider.ts - Nuevo
OpenAICompatibleProvider.tscomo clase base para todos los providers - Soporte unificado para formatos: OpenAI, Anthropic, OpenAI Responses
- Eliminados
- Firma de método actualizada:
provideLanguageModelChatResponseusaLanguageModelChatRequestMessage[]en lugar deLanguageModelChatMessage[] - Eliminados archivos obsoletos:
openCodeApiClient.ts,anthropicAdapter.ts,messageConverter.ts,openaiResponsesAdapter.ts,responseStreamer.ts,toolCallAdapter.ts
[3.3.0] - 2026-06-11
Added
- LM Studio Provider: Nuevo provider para conectar LM Studio local o remot...
Release v3.6.0
Changelog
[3.6.0] - 2026-06-22
🚀 Major Feature: OpenCode Usage Tracking & Agent Windows
Added
-
OpenCode Usage Tracking Integration: Real-time usage data from OpenCode API
- Fetches usage data via OpenCode's _server endpoint with dynamic server ID discovery
- Automatically discovers workspace ID from OpenCode pages
- Uses API key from �uth.json for authentication (no manual cookie required)
- Displays usage metrics: requests, tokens, cost per model
- Go subscription burn-rate tracking (5h rolling, weekly, monthly)
-
Agent Window Support: Register providers for VS Code Agents Window
- Creates duplicate provider instances with -agent suffix vendors
- Enables OpenCode models in Copilot CLI / Agents Window
- Configurable via opencode-zen.enableAgentWindow setting
-
OpenCode Usage Panel: New webview panel for OpenCode login
- Simple Browser integration for OAuth login flow
- Local HTTP server for capturing workspace ID and auth cookie
- Automatic workspace discovery from OpenCode pages
-
OpenCode Auth Service: Centralized authentication management
- Stores workspace ID, auth cookie, and API keys
- Auto-discovers workspace ID from OpenCode pages
- Extracts server ID dynamically from page HTML
-
Enhanced Status Bar: Real-time usage metrics
- Go subscription burn-rate display (5h/weekly/monthly)
- Warning indicators when approaching limits
- Cost tracking per provider
-
Enhanced Tree View: Registration commands in sidebar
- Login with OpenCode button
- Configure Workspace URL button
- Direct access to all configuration options
-
OpenCode Usage Service: Background usage data fetching
- Periodic refresh every 5 minutes
- Dynamic server ID discovery from page HTML
- Automatic workspace ID extraction
Changed
-
UsageTracker enhanced with cost calculation
- Added ModelPricing interface for token pricing
- Added �stimateCost() function for request cost calculation
- Added PeriodUsage for burn-rate tracking
- Added GO_LIMITS constant for subscription limits
-
Status bar improved
- Shows Go burn-rate with warning indicators
- Displays cost per request
- Enhanced tooltip with detailed breakdown
-
Tree view improved
- Added registration commands (Login, Configure Workspace)
- Shows burn-rate data in dashboard
Fixed
-
OpenCode API key handling
- Fixed stale API key caching issue
- Now passes API key directly to SDK on every call
- No more "Missing API key" errors
-
Server ID discovery
- Dynamic discovery from page HTML instead of hardcoded values
- Handles OpenCode deployments that change server IDs
[3.5.0] - 2026-06-17 - 2026-06-17
Fixed
- Tool calling broken on LM Studio and Ollama: Local models emit tool calls as inline
<tool_call>{...}</tool_call>blocks insidedelta.contentinstead of nativedelta.tool_calls. The SSE parser now runs every text chunk through a newToolCallAdapter(src/tools/toolCallAdapter.ts) that detects these XML-style blocks, generates a stablecallId, and emits aLanguageModelToolCallPart. Nativedelta.tool_callsis still honored (OpenCode / Zen / Go unchanged). - Tool-calls and reasoning tags from many model families: The parser recognizes the full range of XML/pipe-bar/bracket/markdown tag variants used by Qwen, DeepSeek, Hermes, Llama 3.x, Mistral (
<antml:function_calls>), Phi-3.5, Granite, Cohere, Yi, and any local model that emits reasoning or tool blocks insidedelta.content. Tool-call tags:<tool_call>,<toolcall>,<tool>,<invoke name="x">,<action>,<function>,<antml:function_calls>,<|tool_call|>(Llama 3),[TOOL_CALL]/[TOOL_CALLS](Cohere/Yi). Reasoning tags:<think>,<thinking>,<reasoning>,<reflection>,<analysis>,<thought>,<solution>,<plan>,<|thinking|>/<|reasoning|>,[THINK], and markdown-style### Reasoning/### Thought/### Planblocks. Body parsing supports the common JSON shapes ({name, arguments|parameters|input|args},{function: {name, arguments}}, Cohere{tool, parameters}) and the Hermes/Granite XML form<invoke name="x">JSON-args</invoke>. - Reasoning blocks missing on LM Studio and Ollama: `` blocks inside
delta.contentare now parsed and emitted as `LanguageModelThinkingPart`, so reasoning models show their thinking as a collapsible block. Native `delta.reasoning_content` is still honored. - LM Studio / Ollama servers invisible in the side panel:
OpenCodeTreeProvideronly received OpenCode servers in its state. The two local providers now exposegetServerList()andrefreshTreeView()aggregates them under the sameDashboardheader with a per-type icon (LM Studio =$(chip), Ollama =$(zap)). - LM Studio / Ollama servers lost on reload: Servers added via the "Add Server" command were kept only in memory. They are now persisted to
SecretStorage(workspace state) under a newLocalServerConfigschema and re-hydrated onactivate().
Added
- Per-device LM Studio model entries: Newer LM Studio versions expose the same model
keyonce per device (GPU0,GPU1,CPU,MPS). The provider now readsloaded_instances[]and emits oneRoutedModelInfoper(model, device)pair, with the device id suffixed in the display name and embedded in the composite id (${serverId}:${key}@${device}). Single-device installations keep the original naming. - Unified "Remove Server" picker:
opencode-zen.removeServernow lists OpenCode, LM Studio and Ollama entries together, dispatching to the right backend (MultiServerManagervsLMStudioProvidervsOllamaProvider) and persisting accordingly. ToolCallAdapterunit tests intest/tool-call-adapter.test.ts: 46 cases covering complete blocks, split chunks, partial opening tags, nested JSON shape, malformed bodies, interleaved reasoning + tool calls, and every supported tag family (Qwen, DeepSeek, Hermes, Llama 3.x, Mistral, Cohere, Yi, markdown headers).
Files
- Added:
src/tools/toolCallAdapter.ts,test/tool-call-adapter.test.ts - Modified:
src/providers/OpenAICompatibleProvider.ts,src/providers/LMStudioProvider.ts,src/providers/OllamaProvider.ts,src/config/secretStorage.ts,src/extension.ts
[3.4.0] - 2026-06-16
Added
-
VS Code Proposed APIs Integration: Activadas 6 APIs propuestas de VS Code para mejorar la experiencia de chat
-
chatProvider(v5): Provider de chat con firma actualizada -
languageModelThinkingPart(v1): Thinking blocks colapsables en el UI -
chatInputNotification: Notificaciones en el área de input del chat -
chatStatusItem: Items de estado en la vista de chat -
languageModelPricing: Información de precios por token -
languageModelSystem(v3): Mensajes de sistema nativos
-
-
Thinking Blocks Colapsables: Emisión de
LanguageModelThinkingPartpara reasoning content- Soporte en streaming SSE OpenAI/LM Studio (
delta.reasoning_content) - Soporte en streaming SSE Anthropic (
thinking_delta) - Los bloques de thinking se renderizan como elementos colapsables en VS Code
- Soporte en streaming SSE OpenAI/LM Studio (
-
Chat Input Notifications: Sistema de notificaciones en el input del chat
-
showMissingConfigNotification(): Aviso cuando un provider no está configurado -
showConnectionErrorNotification(): Aviso de errores de conexión -
showConnectedNotification(): Confirmación de conexión exitosa - Fallback a mensajes estándar de VS Code cuando la API propuesta no está disponible
-
-
Chat Status Items: Manager de estado para providers
-
ChatStatusItemManager: Crea items de estado usando la API propuesta - Fallback a
StatusBarItemcuando la API no está disponible
-
-
Model Pricing: Información de precios integrada en los modelos
- Campo
_pricingenRoutedModelInfoconinputTokenPrice,outputTokenPrice,currency - Precios populados desde
models.devpara providers OpenCode (Free, Go) - Conversión automática de
$/M tokens a $ /token
- Campo
-
System Messages Nativas: Reemplazo del hack numérico por API propuesta
- Eliminado
(msg.role as number) === 2 - Usa
(vscode as any).LanguageModelChatMessageRole.SystemenconvertMessages()yconvertMessagesAnthropic()
- Eliminado
Changed
- Refactor de Providers: Unificación de providers bajo
OpenAICompatibleProvider- Eliminados
BaseLocalProvider.ts,BaseOpenCodeProvider.ts - Nuevo
OpenAICompatibleProvider.tscomo clase base para todos los providers - Soporte unificado para formatos: OpenAI, Anthropic, OpenAI Responses
- Eliminados
- Firma de método actualizada:
provideLanguageModelChatResponseusaLanguageModelChatRequestMessage[]en lugar deLanguageModelChatMessage[] - Eliminados archivos obsoletos:
openCodeApiClient.ts,anthropicAdapter.ts,messageConverter.ts,openaiResponsesAdapter.ts,responseStreamer.ts,toolCallAdapter.ts
[3.3.0] - 2026-06-11
Added
- LM Studio Provider: Nuevo provider para conectar LM Studio local o remoto
- Auto-detección de modelos vía
/v1/models - Detección de capacidades: Reasoning, Vision, Tools
- Streaming SSE real con chunks progresivos
- Soporte para múltiples servidores LM Studio
- Heurísticas de context length basadas en tamaño del modelo
- Auto-detección de modelos vía
- Ollama Provider: Nuevo provider para conectar Ollama local o remoto
- Auto-detección de modelos vía
/api/tags - Detección de capacidades: Reasoning, Vision, Tools
- Streaming NDJSON con chunks progresivos
- Soporte para múltiples servidores Ollama
- Heurísticas de context length basadas en parameter_size
- Auto-detección de modelos vía
- Rebranding: Extensión renombrada a "+ Providers on Copilot Chat"
- Nuevo nombre:
plus-providers-copilot-chat - Nuevas keywords: lmstudio, ollama, local-ai, self-hosted, remote-server
- README actualizado con documentación de todos los providers
- Soporte para conexiones remotas en todos los providers locales
- Nuevo nombre:
Changed
- package.json: Actuali...
Release v3.5.0
Changelog
[3.5.0] - 2026-06-17
Fixed
- Tool calling broken on LM Studio and Ollama: Local models emit tool calls as inline
<tool_call>{...}</tool_call>blocks insidedelta.contentinstead of nativedelta.tool_calls. The SSE parser now runs every text chunk through a newToolCallAdapter(src/tools/toolCallAdapter.ts) that detects these XML-style blocks, generates a stablecallId, and emits aLanguageModelToolCallPart. Nativedelta.tool_callsis still honored (OpenCode / Zen / Go unchanged). - Tool-calls and reasoning tags from many model families: The parser recognizes the full range of XML/pipe-bar/bracket/markdown tag variants used by Qwen, DeepSeek, Hermes, Llama 3.x, Mistral (
<antml:function_calls>), Phi-3.5, Granite, Cohere, Yi, and any local model that emits reasoning or tool blocks insidedelta.content. Tool-call tags:<tool_call>,<toolcall>,<tool>,<invoke name="x">,<action>,<function>,<antml:function_calls>,<|tool_call|>(Llama 3),[TOOL_CALL]/[TOOL_CALLS](Cohere/Yi). Reasoning tags:<think>,<thinking>,<reasoning>,<reflection>,<analysis>,<thought>,<solution>,<plan>,<|thinking|>/<|reasoning|>,[THINK], and markdown-style### Reasoning/### Thought/### Planblocks. Body parsing supports the common JSON shapes ({name, arguments|parameters|input|args},{function: {name, arguments}}, Cohere{tool, parameters}) and the Hermes/Granite XML form<invoke name="x">JSON-args</invoke>. - Reasoning blocks missing on LM Studio and Ollama: `` blocks inside
delta.contentare now parsed and emitted as `LanguageModelThinkingPart`, so reasoning models show their thinking as a collapsible block. Native `delta.reasoning_content` is still honored. - LM Studio / Ollama servers invisible in the side panel:
OpenCodeTreeProvideronly received OpenCode servers in its state. The two local providers now exposegetServerList()andrefreshTreeView()aggregates them under the sameDashboardheader with a per-type icon (LM Studio =$(chip), Ollama =$(zap)). - LM Studio / Ollama servers lost on reload: Servers added via the "Add Server" command were kept only in memory. They are now persisted to
SecretStorage(workspace state) under a newLocalServerConfigschema and re-hydrated onactivate().
Added
- Per-device LM Studio model entries: Newer LM Studio versions expose the same model
keyonce per device (GPU0,GPU1,CPU,MPS). The provider now readsloaded_instances[]and emits oneRoutedModelInfoper(model, device)pair, with the device id suffixed in the display name and embedded in the composite id (${serverId}:${key}@${device}). Single-device installations keep the original naming. - Unified "Remove Server" picker:
opencode-zen.removeServernow lists OpenCode, LM Studio and Ollama entries together, dispatching to the right backend (MultiServerManagervsLMStudioProvidervsOllamaProvider) and persisting accordingly. ToolCallAdapterunit tests intest/tool-call-adapter.test.ts: 46 cases covering complete blocks, split chunks, partial opening tags, nested JSON shape, malformed bodies, interleaved reasoning + tool calls, and every supported tag family (Qwen, DeepSeek, Hermes, Llama 3.x, Mistral, Cohere, Yi, markdown headers).
Files
- Added:
src/tools/toolCallAdapter.ts,test/tool-call-adapter.test.ts - Modified:
src/providers/OpenAICompatibleProvider.ts,src/providers/LMStudioProvider.ts,src/providers/OllamaProvider.ts,src/config/secretStorage.ts,src/extension.ts
[3.4.0] - 2026-06-16
Added
-
VS Code Proposed APIs Integration: Activadas 6 APIs propuestas de VS Code para mejorar la experiencia de chat
-
chatProvider(v5): Provider de chat con firma actualizada -
languageModelThinkingPart(v1): Thinking blocks colapsables en el UI -
chatInputNotification: Notificaciones en el área de input del chat -
chatStatusItem: Items de estado en la vista de chat -
languageModelPricing: Información de precios por token -
languageModelSystem(v3): Mensajes de sistema nativos
-
-
Thinking Blocks Colapsables: Emisión de
LanguageModelThinkingPartpara reasoning content- Soporte en streaming SSE OpenAI/LM Studio (
delta.reasoning_content) - Soporte en streaming SSE Anthropic (
thinking_delta) - Los bloques de thinking se renderizan como elementos colapsables en VS Code
- Soporte en streaming SSE OpenAI/LM Studio (
-
Chat Input Notifications: Sistema de notificaciones en el input del chat
-
showMissingConfigNotification(): Aviso cuando un provider no está configurado -
showConnectionErrorNotification(): Aviso de errores de conexión -
showConnectedNotification(): Confirmación de conexión exitosa - Fallback a mensajes estándar de VS Code cuando la API propuesta no está disponible
-
-
Chat Status Items: Manager de estado para providers
-
ChatStatusItemManager: Crea items de estado usando la API propuesta - Fallback a
StatusBarItemcuando la API no está disponible
-
-
Model Pricing: Información de precios integrada en los modelos
- Campo
_pricingenRoutedModelInfoconinputTokenPrice,outputTokenPrice,currency - Precios populados desde
models.devpara providers OpenCode (Free, Go) - Conversión automática de
$/M tokens a $ /token
- Campo
-
System Messages Nativas: Reemplazo del hack numérico por API propuesta
- Eliminado
(msg.role as number) === 2 - Usa
(vscode as any).LanguageModelChatMessageRole.SystemenconvertMessages()yconvertMessagesAnthropic()
- Eliminado
Changed
- Refactor de Providers: Unificación de providers bajo
OpenAICompatibleProvider- Eliminados
BaseLocalProvider.ts,BaseOpenCodeProvider.ts - Nuevo
OpenAICompatibleProvider.tscomo clase base para todos los providers - Soporte unificado para formatos: OpenAI, Anthropic, OpenAI Responses
- Eliminados
- Firma de método actualizada:
provideLanguageModelChatResponseusaLanguageModelChatRequestMessage[]en lugar deLanguageModelChatMessage[] - Eliminados archivos obsoletos:
openCodeApiClient.ts,anthropicAdapter.ts,messageConverter.ts,openaiResponsesAdapter.ts,responseStreamer.ts,toolCallAdapter.ts
[3.3.0] - 2026-06-11
Added
- LM Studio Provider: Nuevo provider para conectar LM Studio local o remoto
- Auto-detección de modelos vía
/v1/models - Detección de capacidades: Reasoning, Vision, Tools
- Streaming SSE real con chunks progresivos
- Soporte para múltiples servidores LM Studio
- Heurísticas de context length basadas en tamaño del modelo
- Auto-detección de modelos vía
- Ollama Provider: Nuevo provider para conectar Ollama local o remoto
- Auto-detección de modelos vía
/api/tags - Detección de capacidades: Reasoning, Vision, Tools
- Streaming NDJSON con chunks progresivos
- Soporte para múltiples servidores Ollama
- Heurísticas de context length basadas en parameter_size
- Auto-detección de modelos vía
- Rebranding: Extensión renombrada a "+ Providers on Copilot Chat"
- Nuevo nombre:
plus-providers-copilot-chat - Nuevas keywords: lmstudio, ollama, local-ai, self-hosted, remote-server
- README actualizado con documentación de todos los providers
- Soporte para conexiones remotas en todos los providers locales
- Nuevo nombre:
Changed
- package.json: Actualizado displayName, description, keywords
- README.md: Documentación completa de LM Studio, Ollama, OpenCode Servers, y OpenCode Cloud
[3.2.5] - 2026-06-11
Added
- Tests reales con datos del servidor: 30 tests pasando validados contra respuestas reales.
test/OpenCodeServerProvider.test.ts— 15 tests: extracción de texto/reasoning/tokens departs[], manejo de errores, respuestas vacías, tool calls, validación de estructura JSON, simulación de orden de eventos streamingtest/OpenCodeServerProvider.streaming.test.ts— 9 tests: orden reasoning→texto, concatenación de múltiples text parts, cancelación de token, manejo de tool calls, respuesta vacíatest/opencode-server.integration.test.ts— 6 tests de integración REAL con servidor opencode + LMStudio:- Verifica health del servidor, crea sesión, envía mensajes
- Tarea pesada: genera 900+ chars con 28K tokens en 22s
- Verifica reasoning en respuesta compleja (matemáticas)
- Valida estructura JSON: step-start → reasoning → text → step-finish
- Usa provider
lm-studiolocalconfigurado en opencode → http://localhost:1234/v1
test/provider-behavior.test.ts— 4 tests HONESTOS del comportamiento REAL:- Documenta que el servidor opencode devuelve JSON completo (NO SSE/streaming)
- El provider acumula parts[] y emite al final con yield al event loop
- 100 parts se procesan en ~165ms (si fuera streaming real tardaría 10-20s)
- Valida estructura JSON real del servidor: step-start → reasoning → text → step-finish
- Documenta la diferencia: opencode (JSON completo) vs LMStudio (SSE real)
- Framework:
node:test+tsx(sin jest/mocha)
Fixed
- Chat se queda "working" infinitamente: Simplificado
OpenCodeServerProviderpara procesar la respuesta JSON del servidor de forma directa y limpia. Ahora:fetch()→await response.json()→ acumularparts[]→ emitirprogress.report()conyieldal event loop entre cada chunk para que VS Code actualice el UI. - Eliminada simulación por delays: Removido todo el código de parsing multi-formato con delays artificiales de 50ms (
readAllStreamData,processAnyFormatResponse,parseSSE,parseNDJSON,processParsedEvents,inferEventType,safeParseJson). - Eliminada dependencia
@opencode-ai/sdk: El intento de usar el SDK para SSE streaming no funcionó porque el servidor no emite eventos de contenido en tiempo real vía/global/event. El SDK fue removido del bundle (tree-shaking). Bundle bajó de 177KB a 105KB. - Manejo de respuesta limpio: Acumula reasoning, tool calls y texto por separado, luego los emite en orden (reasoning → tools → text) con `await new...
Release v3.4.0
Changelog
[3.4.0] - 2026-06-16
Added
-
VS Code Proposed APIs Integration: Activadas 6 APIs propuestas de VS Code para mejorar la experiencia de chat
-
chatProvider(v5): Provider de chat con firma actualizada -
languageModelThinkingPart(v1): Thinking blocks colapsables en el UI -
chatInputNotification: Notificaciones en el área de input del chat -
chatStatusItem: Items de estado en la vista de chat -
languageModelPricing: Información de precios por token -
languageModelSystem(v3): Mensajes de sistema nativos
-
-
Thinking Blocks Colapsables: Emisión de
LanguageModelThinkingPartpara reasoning content- Soporte en streaming SSE OpenAI/LM Studio (
delta.reasoning_content) - Soporte en streaming SSE Anthropic (
thinking_delta) - Los bloques de thinking se renderizan como elementos colapsables en VS Code
- Soporte en streaming SSE OpenAI/LM Studio (
-
Chat Input Notifications: Sistema de notificaciones en el input del chat
-
showMissingConfigNotification(): Aviso cuando un provider no está configurado -
showConnectionErrorNotification(): Aviso de errores de conexión -
showConnectedNotification(): Confirmación de conexión exitosa - Fallback a mensajes estándar de VS Code cuando la API propuesta no está disponible
-
-
Chat Status Items: Manager de estado para providers
-
ChatStatusItemManager: Crea items de estado usando la API propuesta - Fallback a
StatusBarItemcuando la API no está disponible
-
-
Model Pricing: Información de precios integrada en los modelos
- Campo
_pricingenRoutedModelInfoconinputTokenPrice,outputTokenPrice,currency - Precios populados desde
models.devpara providers OpenCode (Free, Go) - Conversión automática de
$/M tokens a $ /token
- Campo
-
System Messages Nativas: Reemplazo del hack numérico por API propuesta
- Eliminado
(msg.role as number) === 2 - Usa
(vscode as any).LanguageModelChatMessageRole.SystemenconvertMessages()yconvertMessagesAnthropic()
- Eliminado
Changed
- Refactor de Providers: Unificación de providers bajo
OpenAICompatibleProvider- Eliminados
BaseLocalProvider.ts,BaseOpenCodeProvider.ts - Nuevo
OpenAICompatibleProvider.tscomo clase base para todos los providers - Soporte unificado para formatos: OpenAI, Anthropic, OpenAI Responses
- Eliminados
- Firma de método actualizada:
provideLanguageModelChatResponseusaLanguageModelChatRequestMessage[]en lugar deLanguageModelChatMessage[] - Eliminados archivos obsoletos:
openCodeApiClient.ts,anthropicAdapter.ts,messageConverter.ts,openaiResponsesAdapter.ts,responseStreamer.ts,toolCallAdapter.ts
[3.3.0] - 2026-06-11
Added
- LM Studio Provider: Nuevo provider para conectar LM Studio local o remoto
- Auto-detección de modelos vía
/v1/models - Detección de capacidades: Reasoning, Vision, Tools
- Streaming SSE real con chunks progresivos
- Soporte para múltiples servidores LM Studio
- Heurísticas de context length basadas en tamaño del modelo
- Auto-detección de modelos vía
- Ollama Provider: Nuevo provider para conectar Ollama local o remoto
- Auto-detección de modelos vía
/api/tags - Detección de capacidades: Reasoning, Vision, Tools
- Streaming NDJSON con chunks progresivos
- Soporte para múltiples servidores Ollama
- Heurísticas de context length basadas en parameter_size
- Auto-detección de modelos vía
- Rebranding: Extensión renombrada a "+ Providers on Copilot Chat"
- Nuevo nombre:
plus-providers-copilot-chat - Nuevas keywords: lmstudio, ollama, local-ai, self-hosted, remote-server
- README actualizado con documentación de todos los providers
- Soporte para conexiones remotas en todos los providers locales
- Nuevo nombre:
Changed
- package.json: Actualizado displayName, description, keywords
- README.md: Documentación completa de LM Studio, Ollama, OpenCode Servers, y OpenCode Cloud
[3.2.5] - 2026-06-11
Added
- Tests reales con datos del servidor: 30 tests pasando validados contra respuestas reales.
test/OpenCodeServerProvider.test.ts— 15 tests: extracción de texto/reasoning/tokens departs[], manejo de errores, respuestas vacías, tool calls, validación de estructura JSON, simulación de orden de eventos streamingtest/OpenCodeServerProvider.streaming.test.ts— 9 tests: orden reasoning→texto, concatenación de múltiples text parts, cancelación de token, manejo de tool calls, respuesta vacíatest/opencode-server.integration.test.ts— 6 tests de integración REAL con servidor opencode + LMStudio:- Verifica health del servidor, crea sesión, envía mensajes
- Tarea pesada: genera 900+ chars con 28K tokens en 22s
- Verifica reasoning en respuesta compleja (matemáticas)
- Valida estructura JSON: step-start → reasoning → text → step-finish
- Usa provider
lm-studiolocalconfigurado en opencode → http://localhost:1234/v1
test/provider-behavior.test.ts— 4 tests HONESTOS del comportamiento REAL:- Documenta que el servidor opencode devuelve JSON completo (NO SSE/streaming)
- El provider acumula parts[] y emite al final con yield al event loop
- 100 parts se procesan en ~165ms (si fuera streaming real tardaría 10-20s)
- Valida estructura JSON real del servidor: step-start → reasoning → text → step-finish
- Documenta la diferencia: opencode (JSON completo) vs LMStudio (SSE real)
- Framework:
node:test+tsx(sin jest/mocha)
Fixed
- Chat se queda "working" infinitamente: Simplificado
OpenCodeServerProviderpara procesar la respuesta JSON del servidor de forma directa y limpia. Ahora:fetch()→await response.json()→ acumularparts[]→ emitirprogress.report()conyieldal event loop entre cada chunk para que VS Code actualice el UI. - Eliminada simulación por delays: Removido todo el código de parsing multi-formato con delays artificiales de 50ms (
readAllStreamData,processAnyFormatResponse,parseSSE,parseNDJSON,processParsedEvents,inferEventType,safeParseJson). - Eliminada dependencia
@opencode-ai/sdk: El intento de usar el SDK para SSE streaming no funcionó porque el servidor no emite eventos de contenido en tiempo real vía/global/event. El SDK fue removido del bundle (tree-shaking). Bundle bajó de 177KB a 105KB. - Manejo de respuesta limpio: Acumula reasoning, tool calls y texto por separado, luego los emite en orden (reasoning → tools → text) con
await new Promise(r => setTimeout(r, 0))entre cada uno para ceder al event loop. - Manejo de errores: Verificación de
messageData.errora nivel top-level antes de procesarparts[].
[3.2.4] - 2026-06-11
Changed
- Intento de integración con SDK
@opencode-ai/sdkpara SSE streaming. Descartado — el servidor no emite eventos de contenido en tiempo real. Solución final en v3.2.5.
[3.2.3] - 2026-06-11
Fixed
- Parsing multi-formato de respuestas del servidor (SSE, NDJSON, JSON parts[], OpenAI delta). Obsoleto en v3.2.5 — reemplazado por SDK nativo. Ver v3.2.4 para contexto.
[3.2.2] - 2026-06-11
Fixed
- 11 TypeScript compilation errors que rompían
tsc --noEmiten CI. Ver release v3.2.2 para el listado completo de archivos corregidos.
[3.2.1] - 2026-06-11
Changed
- Server launch: Reemplazado
exec()conspawn()para lanzar servidores locales como proceso background sin ventanacmd.exeemergente - Launch UX: El usuario puede elegir entre lanzar servidor en terminal VS Code o como proceso background invisible
- Activation: Ya no se auto-lanzan servidores locales al activar la extensión
Added
- SSE streaming inicial: Server provider lee respuestas como
text/event-streamcon progreso incremental - Server launch command: Interfaz interactiva con
showQuickPickpara elegir modo de lanzamiento
[3.2.0] - 2026-06-02
Added
- Subagent tool (
opencode_subagent): Registered viavscode.lm.registerTool(), delegates to first available OpenCode provider - Thinking blocks: Server provider and BaseOpenCodeProvider now use
LanguageModelThinkingPartfor collapsible reasoning content
Fixed
- Tool registration in
package.json— requiresmodelDescription,displayName, andinputSchemafields
[3.1.0] - 2026-06-02
Fixed
- Server provider session API: Correct request format for OpenCode server (
modelcomo{ providerID, modelID }, solomodelypartsen el body)
[3.0.0] - 2026-06-02
BREAKING CHANGES
- models.dev API integration: Model capabilities fetched live from
https://models.dev/api.json - Server provider rewrite: Usa session-based API (
POST /session+POST /session/:id/message) - Single server provider: All connected servers register under one
opencode-servervendor
Added
- Live model registry: 40+ Zen models + 16 Go models con context sizes, pricing, y capabilities reales
-
Pricing in tooltips: hover muestra
In: $X/M · Out: $Y/M · Cache: $Z/M -
ThinkingEffort configuration: Reasoning models show
configurationSchemapara low/medium/high
Fixed
- Image detection, tool schema validation, server auth, model registration
Removed
- Anthropic Messages adapter, OpenAI Responses adapter,
@vscode-elements/elementsdependency
[2.4.0] - 2026-06-02
Added
- SDD task specs for multi-provider architecture (8 tasks)
.specs/directory with task definitions y dependency graph
[2.3.3] - 2026-06-02
Fixed
/usageendpoint returns 404 — Global tree ahora muestra model families como fallback
[2.3.2] - 2026-06-02
Changed
- Debug logging en
getUsageystreamResponse
Fixed
- Config tree command IDs, Global tree state,
fetchApiUsagetimeout de 8s
[2.3.0] - 2026-06-02
Added
- 3-tree sidebar layout: Session, Global, Config
- Global tree: fetches real account data from
/usageendpoint con progress bars - Config tree: one-click buttons para Configure Zen Key, Configure Go Key, Refresh All Models, Clear Usage Stats
...
Release v3.2.5
Changelog
[3.2.5] - 2026-06-11
Changed
- Streaming REAL vía SDK opencode: Consumo genuino de SSE en tiempo real usando
@opencode-ai/sdk. El provider se conecta al endpoint/global/eventvíaclient.global.event()(AsyncGenerator) y reporta cadadeltainmediatamente a VS Code comoLanguageModelTextPart— sin buffering, sin simulación. Ver v3.2.4 para la evolución técnica completa. - Flujo asíncrono:
session.promptAsync()inicia el procesamiento y retorna inmediatamente; el consumidor SSE corre en paralelo streameando cada chunk al chat de VS Code en tiempo real - Eventos soportados en streaming:
message.part.updated(text, reasoning, tool, step-start, step-finish),message.updated(errores, finish),session.error,session.idle - Eliminada simulación: Removido todo el código de parsing multi-formato (
readAllStreamData,processAnyFormatResponse,parseSSE,parseNDJSON,processParsedEvents,inferEventType,safeParseJson) — el SDK maneja el protocolo SSE nativamente - Bundle: esbuild incluye el SDK completo (181KB) con
createOpencodeClient,createSseClient,promptAsync, y el parser SSE interno
[3.2.4] - 2026-06-11
Changed
- Transición al SDK opencode para SSE streaming. Implementación final y estable en v3.2.5.
[3.2.3] - 2026-06-11
Fixed
- Parsing multi-formato de respuestas del servidor (SSE, NDJSON, JSON parts[], OpenAI delta). Obsoleto en v3.2.5 — reemplazado por SDK nativo. Ver v3.2.4 para contexto.
[3.2.2] - 2026-06-11
Fixed
- 11 TypeScript compilation errors que rompían
tsc --noEmiten CI. Ver release v3.2.2 para el listado completo de archivos corregidos.
[3.2.1] - 2026-06-11
Changed
- Server launch: Reemplazado
exec()conspawn()para lanzar servidores locales como proceso background sin ventanacmd.exeemergente - Launch UX: El usuario puede elegir entre lanzar servidor en terminal VS Code o como proceso background invisible
- Activation: Ya no se auto-lanzan servidores locales al activar la extensión
Added
- SSE streaming inicial: Server provider lee respuestas como
text/event-streamcon progreso incremental - Server launch command: Interfaz interactiva con
showQuickPickpara elegir modo de lanzamiento
[3.2.0] - 2026-06-02
Added
- Subagent tool (
opencode_subagent): Registered viavscode.lm.registerTool(), delegates to first available OpenCode provider - Thinking blocks: Server provider and BaseOpenCodeProvider now use
LanguageModelThinkingPartfor collapsible reasoning content
Fixed
- Tool registration in
package.json— requiresmodelDescription,displayName, andinputSchemafields
[3.1.0] - 2026-06-02
Fixed
- Server provider session API: Correct request format for OpenCode server (
modelcomo{ providerID, modelID }, solomodelypartsen el body)
[3.0.0] - 2026-06-02
BREAKING CHANGES
- models.dev API integration: Model capabilities fetched live from
https://models.dev/api.json - Server provider rewrite: Usa session-based API (
POST /session+POST /session/:id/message) - Single server provider: All connected servers register under one
opencode-servervendor
Added
- Live model registry: 40+ Zen models + 16 Go models con context sizes, pricing, y capabilities reales
- Pricing in tooltips: hover muestra
In: $X/M · Out: $Y/M · Cache: $Z/M - ThinkingEffort configuration: Reasoning models show
configurationSchemapara low/medium/high
Fixed
- Image detection, tool schema validation, server auth, model registration
Removed
- Anthropic Messages adapter, OpenAI Responses adapter,
@vscode-elements/elementsdependency
[2.4.0] - 2026-06-02
Added
- SDD task specs for multi-provider architecture (8 tasks)
.specs/directory with task definitions y dependency graph
[2.3.3] - 2026-06-02
Fixed
/usageendpoint returns 404 — Global tree ahora muestra model families como fallback
[2.3.2] - 2026-06-02
Changed
- Debug logging en
getUsageystreamResponse
Fixed
- Config tree command IDs, Global tree state,
fetchApiUsagetimeout de 8s
[2.3.0] - 2026-06-02
Added
- 3-tree sidebar layout: Session, Global, Config
- Global tree: fetches real account data from
/usageendpoint con progress bars - Config tree: one-click buttons para Configure Zen Key, Configure Go Key, Refresh All Models, Clear Usage Stats
[2.2.0] - 2026-06-02
Changed
- Replaced WebviewView with native TreeView: usa VS Code's native
TreeDataProviderAPI
[2.1.1] - 2026-06-02
Fixed
- Usage stats blank (Map → Record), thinking rendering interleaved, webview sessions
[2.1.0] - 2026-06-02
Changed
- Sessions and request tracking: unique
requestIdysessionId, tokens reemplazados en lugar de acumulados - Reasoner steps: streaming tracks
reasoner_stepevents - Usage tracker keyed by requestId:
recordRequest(requestId, ...)finds existing records by requestId and replaces them instead of appending duplicates
Fixed
- Thinking content no longer renders as HTML —
reportThinkingsendsLanguageModelTextPartdirectly to progress (no more literal tags) - Tokens no longer summed incorrectly across requests — each request's total is reported once and replaced if the same requestId fires again
[2.0.1] - 2026-06-01
Fixed
- Strip
<think>tags from streaming content so they no longer render as literal HTML - Auto-refresh models when API key is configured (set, changed, or cleared)
- Status bar button now opens the usage sidebar (not the output channel)
- Models endpoint queried even without API key (fails gracefully if auth required)
Changed
- Webview redesigned with collapsible tree structure and VSCode-style aesthetics
- Each model entry expands to show requests, prompt, completion breakdown
- Each recent request expands to show full details
- Usage stats bars with percentages
- New command
OpenCode Zen: Show Output Logfor terminal-style stats view
[2.0.0] - 2026-06-01
BREAKING CHANGES
- 3 Independent Providers: Now registers
opencode-free,opencode-go, andopencode-zenas separate vendors - No More Hardcoded Models: All models fetched dynamically from OpenCode APIs
- Separate API Keys:
zenKeyandgoKeystored independently in SecretStorage - Removed Files:
modelMetadata.ts,registry.ts,modelsDevClient.ts,zenClient.ts,provider.tsdeleted
Added
BaseOpenCodeProviderabstract class for shared logicOpenCodeFreeProvider- free models only (uses Zen key)OpenCodeGoProvider- Go models with/go/v1/endpointOpenCodeZenProvider- paid Zen models onlyOpenCodeClient- generic HTTP client with endpoint parameterFileSystemWatcheron localauth.jsonfor new key detection- New
usageWebviewwith API keys status, balance, and detailed stats - Commands:
configureZen,configureGo,refreshAll - Auto-detection of local OpenCode installation at activation
Changed
- SecretStorage now manages 2 keys:
zenKeyandgoKey - Model caching with 5-minute TTL
- API usage caching with 1-minute TTL
- Models endpoint:
GET /v1/modelsfor Zen/Free,GET /go/v1/modelsfor Go - No SDK dependency (direct fetch to HTTP APIs)
[1.0.2] - 2026-06-01
Added
- New project logo combining OpenCode and Copilot branding
Fixed
- PNG icon instead of SVG (VSCode requirement)
- readonly sessionStats TypeScript error
[1.0.1] - 2026-06-01
Fixed
- PNG icon instead of SVG (VSCode requirement)
- readonly sessionStats TypeScript error
[1.0.0] - 2026-06-01
Added
- Initial release
- 45+ OpenCode Zen models registered as Copilot Language Model Provider
- 4 free models enabled by default
- Auto-detection of OpenCode installation and API key
- Tool calling support with automatic JSON repair
- SSE streaming with reasoning content display
- Vision/image input for multimodal models
- Status bar indicator with connection state
- Settings: timeout, tool calling, image input, temperature, verbose logging
- Model catalog from builtin metadata, models.dev, and Zen API
Release v3.2.3
Changelog
[3.2.3] - 2026-06-11
Fixed
- Streaming en OpenCodeServerProvider: Reescribito el sistema de parsing de respuestas del servidor para soportar múltiples formatos (JSON con
parts[], NDJSON, SSE estándar, OpenAI delta). El servidor opencode devuelve JSON plano con arrayparts[], no SSE — el parser anterior solo aceptaba SSE condata:y nunca procesaba la respuesta, dejando el chat en "working" infinitamente. - Parsing multi-formato: Añadidos 5 detectores de formato que se prueban en cascada: SSE (
event:/data:), NDJSON (JSON por línea), JSON plano conparts[], evento JSON único, y fallback a texto plano - Soporte de eventos completo:
text,reasoning/thinking,tool_call/function_call,tool_result,usage/step-finishcon tracking de tokens,error,step-start/reasoning_start,ping/heartbeat, y OpenAI delta conchoices[].delta - Inferencia de tipo: Cuando el evento no tiene campo
type, se infiere automáticamente por los campos presentes (text,choices[].delta,tool_calls, etc.) - NDJSON strict: Ahora no se queda con el primer evento NDJSON si no se puede procesar — cae al siguiente formato
[3.2.2] - 2026-06-11
Fixed
- Build errors (CI): 11 TypeScript compilation errors that broke
tsc --noEmitmodelRegistry.ts: Añadida propiedadnpmPackagefaltante enRegistryEntry; corregidofmt.endpoint→fmt.chatEndpointmultiServerManager.ts: Reemplazado tipoHeadersInitporRecord<string, string>(no disponible en Node.js); corregido tipoPromise<any[] | undefined>con variable intermedia; actualizadoconfig.password→config.hasPasswordsecretStorage.ts: Cambiadopassword?: string→hasPassword?: booleanenServerConfig(se usaba como flag booleano)extension.ts: Añadido import deDashboardStatefaltante; corregido tipobooleanasignado apassword(string)BaseOpenCodeProvider.ts:LanguageModelImagePartno existe en esta API, se usa(vscode as any);reporterno definida en scope dereportThinkingBlockOpenCodeServerProvider.ts: Eliminada propiedadvendory cambiadodescription→detailen objetoLanguageModelChatInformationsubagentTool.ts: AñadidotoolMode: vscode.LanguageModelChatToolMode.Autorequerido en opciones
[3.2.1] - 2026-06-11
Changed
- Server launch: Reemplazado
exec()conspawn()para lanzar servidores locales como proceso background sin ventanacmd.exeemergente - Launch UX: El usuario puede elegir entre lanzar servidor en terminal VS Code o como proceso background invisible
- Activation: Ya no se auto-lanzan servidores locales al activar la extensión — se muestra log en consola indicando que use el comando manual
Added
- SSE streaming: Server provider ahora lee respuestas como
text/event-streamcon progreso incremental en lugar de esperar la respuesta completa - Server launch command: Interfaz interactiva con
showQuickPickpara elegir modo de lanzamiento
[3.2.0] - 2026-06-02
Added
- Subagent tool (
opencode_subagent): Registered viavscode.lm.registerTool(), delegates to first available OpenCode provider. Acceptsqueryanddescriptionparameters. Runs with temperature 0, no additional tools. - Thinking blocks: Server provider and BaseOpenCodeProvider now use
LanguageModelThinkingPartfor collapsible reasoning content. Falls back to text markers if API unavailable.
Fixed
- Tool registration in
package.json— requiresmodelDescription,displayName, andinputSchemafields
[3.1.0] - 2026-06-02
Fixed
- Server provider session API: Correct request format for OpenCode server
modelmust be{ providerID, modelID }object (not string)providerIDcomes from server's actual provider data (e.g.,"opencode")- Session API only accepts
modelandparts— no tools, temperature, etc. - Filter user/assistant messages only (ignore system/tool messages)
[3.0.0] - 2026-06-02
BREAKING CHANGES
- models.dev API integration: Model capabilities (context size, pricing, vision, reasoning) now fetched live from
https://models.dev/api.jsoninstead of hardcoded metadata - Server provider rewrite: OpenCode Server now uses session-based API (
POST /session+POST /session/:id/message) instead of non-existent/chat/completionsendpoint - Single server provider: All connected servers register under one
opencode-servervendor instead of one per server
Added
- Live model registry:
modelRegistry.tsfetches from models.dev on activation with 30-minute cache - 40+ Zen models + 16 Go models with real context sizes, pricing, and capabilities
- Pricing in tooltips: hover over any model shows
In: $X/M · Out: $Y/M · Cache: $Z/M - Server provider models: Local servers now appear in Language Models view with correct capabilities
- ThinkingEffort configuration: Reasoning models show
configurationSchemafor low/medium/high - Partial model ID matching: Handles prefixed IDs (e.g.,
opencode/deepseek-v4-flash) - Debug logging: Detailed SSE parsing logs in Output panel for troubleshooting
Fixed
- Image detection too aggressive: Was matching ANY message part with
mimeTypeas image, causing "Image input not supported" for all models. Now only detects actualLanguageModelImagePartandLanguageModelDataPartwith image/* mime types - Tool schema validation: Filters out tools with empty/undefined schemas that cause 400 errors from strict providers (MiniMax, etc.)
- Server provider auth:
buildHeaders()made public, auth headers properly sent - Server provider streamResponse: Fixed ReadableStream vs ReadableStreamDefaultController mismatch
- Server provider model registration: Models now appear in Language Models view after registration
- models.dev data loading: Now blocking (
await) before provider registration so data is available when VS Code queries models
Removed
- Anthropic Messages adapter (
anthropicAdapter.ts) — all models use/chat/completionsvia OpenCode routing - OpenAI Responses adapter (
openaiResponsesAdapter.ts) — all models use/chat/completionsvia OpenCode routing @vscode-elements/elementsdependency — not usable in webviews
[2.4.0] - 2026-06-02
Added
- SDD task specs for multi-provider architecture (8 tasks)
.specs/directory with task definitions and dependency graph
Changed
- TreeView sidebar with Dashboard + Config sections
- Model registry with fallback static data
[2.3.3] - 2026-06-02
Fixed
/usageendpoint returns 404 — confirmed locally:GET /zen/v1/usage→ 404,/zen/go/v1/usage→ 404. Global tree now gracefully handles missing endpoint and falls back to showing model families instead of hanging- Global tree now shows model families: when usage API is unavailable, the Global tree still displays available models grouped by family (minimax, kimi, glm, deepseek, qwen, mimo, hy3) with model counts — making the view useful even without billing data
getModelFamilies()added toBaseOpenCodeProviderto expose model group inforefreshGlobalcommand now refreshes models + re-fetches global data instead of a separate refresh method
[2.3.2] - 2026-06-02
Changed
- Added debug logging to
getUsage: logs URL, HTTP status, response body (or empty/JSON parse error) so we can see exactly what the API returns - Added debug logging to
streamResponse: logs first chunk id/model, reasoning start/done, usage tokens
Fixed
- Config tree now uses correct command IDs (was using
opencodeConfigureZeninstead ofopencode-zen.configureZen) - Global tree shows pending/error/ok state per provider instead of hanging
fetchApiUsagehas 8s timeout to prevent tree from hanging forever
[2.3.0] - 2026-06-02
Added
- 3-tree sidebar layout: Session (local session stats), Global (API account data from server), Config (quick actions)
- Global tree: fetches real account data from
/usageendpoint — balance, used, remaining, quota limits per time period (hour/day/week/month). Shows progress bars with percentages and reset timestamps - Config tree: one-click buttons for Configure Zen Key, Configure Go Key, Refresh All Models, Clear Usage Stats — each as a native tree item with command binding
- ApiQuota interface:
id,name,unit,limit,used,remaining,reset_at,periodfor granular rate limit display - Context menus: right-click items in Config/Global trees for relevant actions
Changed
- Session tree renamed from
UsageTreeProvider→SessionTreeProviderwith cleaner helper methods
[2.2.0] - 2026-06-02
Changed
- Replaced WebviewView with native TreeView: usage sidebar now uses VS Code's native
TreeDataProviderAPI (like Explorer/Timeline/Outline). No custom HTML/CSS — all rendering uses VS Code's native tree components with proper labels, icons, and collapse states - Sidebar sections: API Keys, Balance, Session Summary (expandable), By Provider, By Model, Sessions (grouped by sessionId with nested requests), Recent Requests
[2.1.1] - 2026-06-02
Fixed
- Usage stats blank:
byModelandbyProviderchanged fromMapto plainRecord<string, ...>so they serialize properly over webview postMessage (Maps were invisible to JSON.stringify) - Thinking rendering: thinking content is now buffered and emitted as a single block with
[reasoning]...[/reasoning]markers when reasoning ends, preventing interleaved text output - Webview sessions: new "Sessions" section groups requests by sessionId with nested request details
[2.1.0] - 2026-06-02
Changed
- Sessions and request tracking: every request now has a unique
requestIdand belongs to asessionId. Tokens reported for the same requestId are replaced (not accumulated), fixing the token overcount bug where the API reports total tokens pe...
Release v3.2.2
Changelog
[3.2.2] - 2026-06-11
Fixed
- Build errors (CI): 11 TypeScript compilation errors that broke
tsc --noEmitmodelRegistry.ts: Añadida propiedadnpmPackagefaltante enRegistryEntry; corregidofmt.endpoint→fmt.chatEndpointmultiServerManager.ts: Reemplazado tipoHeadersInitporRecord<string, string>(no disponible en Node.js); corregido tipoPromise<any[] | undefined>con variable intermedia; actualizadoconfig.password→config.hasPasswordsecretStorage.ts: Cambiadopassword?: string→hasPassword?: booleanenServerConfig(se usaba como flag booleano)extension.ts: Añadido import deDashboardStatefaltante; corregido tipobooleanasignado apassword(string)BaseOpenCodeProvider.ts:LanguageModelImagePartno existe en esta API, se usa(vscode as any);reporterno definida en scope dereportThinkingBlockOpenCodeServerProvider.ts: Eliminada propiedadvendory cambiadodescription→detailen objetoLanguageModelChatInformationsubagentTool.ts: AñadidotoolMode: vscode.LanguageModelChatToolMode.Autorequerido en opciones
[3.2.1] - 2026-06-11
Changed
- Server launch: Reemplazado
exec()conspawn()para lanzar servidores locales como proceso background sin ventanacmd.exeemergente - Launch UX: El usuario puede elegir entre lanzar servidor en terminal VS Code o como proceso background invisible
- Activation: Ya no se auto-lanzan servidores locales al activar la extensión — se muestra log en consola indicando que use el comando manual
Added
- SSE streaming: Server provider ahora lee respuestas como
text/event-streamcon progreso incremental en lugar de esperar la respuesta completa - Server launch command: Interfaz interactiva con
showQuickPickpara elegir modo de lanzamiento
[3.2.0] - 2026-06-02
Added
- Subagent tool (
opencode_subagent): Registered viavscode.lm.registerTool(), delegates to first available OpenCode provider. Acceptsqueryanddescriptionparameters. Runs with temperature 0, no additional tools. - Thinking blocks: Server provider and BaseOpenCodeProvider now use
LanguageModelThinkingPartfor collapsible reasoning content. Falls back to text markers if API unavailable.
Fixed
- Tool registration in
package.json— requiresmodelDescription,displayName, andinputSchemafields
[3.1.0] - 2026-06-02
Fixed
- Server provider session API: Correct request format for OpenCode server
modelmust be{ providerID, modelID }object (not string)providerIDcomes from server's actual provider data (e.g.,"opencode")- Session API only accepts
modelandparts— no tools, temperature, etc. - Filter user/assistant messages only (ignore system/tool messages)
[3.0.0] - 2026-06-02
BREAKING CHANGES
- models.dev API integration: Model capabilities (context size, pricing, vision, reasoning) now fetched live from
https://models.dev/api.jsoninstead of hardcoded metadata - Server provider rewrite: OpenCode Server now uses session-based API (
POST /session+POST /session/:id/message) instead of non-existent/chat/completionsendpoint - Single server provider: All connected servers register under one
opencode-servervendor instead of one per server
Added
- Live model registry:
modelRegistry.tsfetches from models.dev on activation with 30-minute cache - 40+ Zen models + 16 Go models with real context sizes, pricing, and capabilities
- Pricing in tooltips: hover over any model shows
In: $X/M · Out: $Y/M · Cache: $Z/M - Server provider models: Local servers now appear in Language Models view with correct capabilities
- ThinkingEffort configuration: Reasoning models show
configurationSchemafor low/medium/high - Partial model ID matching: Handles prefixed IDs (e.g.,
opencode/deepseek-v4-flash) - Debug logging: Detailed SSE parsing logs in Output panel for troubleshooting
Fixed
- Image detection too aggressive: Was matching ANY message part with
mimeTypeas image, causing "Image input not supported" for all models. Now only detects actualLanguageModelImagePartandLanguageModelDataPartwith image/* mime types - Tool schema validation: Filters out tools with empty/undefined schemas that cause 400 errors from strict providers (MiniMax, etc.)
- Server provider auth:
buildHeaders()made public, auth headers properly sent - Server provider streamResponse: Fixed ReadableStream vs ReadableStreamDefaultController mismatch
- Server provider model registration: Models now appear in Language Models view after registration
- models.dev data loading: Now blocking (
await) before provider registration so data is available when VS Code queries models
Removed
- Anthropic Messages adapter (
anthropicAdapter.ts) — all models use/chat/completionsvia OpenCode routing - OpenAI Responses adapter (
openaiResponsesAdapter.ts) — all models use/chat/completionsvia OpenCode routing @vscode-elements/elementsdependency — not usable in webviews
[2.4.0] - 2026-06-02
Added
- SDD task specs for multi-provider architecture (8 tasks)
.specs/directory with task definitions and dependency graph
Changed
- TreeView sidebar with Dashboard + Config sections
- Model registry with fallback static data
[2.3.3] - 2026-06-02
Fixed
/usageendpoint returns 404 — confirmed locally:GET /zen/v1/usage→ 404,/zen/go/v1/usage→ 404. Global tree now gracefully handles missing endpoint and falls back to showing model families instead of hanging- Global tree now shows model families: when usage API is unavailable, the Global tree still displays available models grouped by family (minimax, kimi, glm, deepseek, qwen, mimo, hy3) with model counts — making the view useful even without billing data
getModelFamilies()added toBaseOpenCodeProviderto expose model group inforefreshGlobalcommand now refreshes models + re-fetches global data instead of a separate refresh method
[2.3.2] - 2026-06-02
Changed
- Added debug logging to
getUsage: logs URL, HTTP status, response body (or empty/JSON parse error) so we can see exactly what the API returns - Added debug logging to
streamResponse: logs first chunk id/model, reasoning start/done, usage tokens
Fixed
- Config tree now uses correct command IDs (was using
opencodeConfigureZeninstead ofopencode-zen.configureZen) - Global tree shows pending/error/ok state per provider instead of hanging
fetchApiUsagehas 8s timeout to prevent tree from hanging forever
[2.3.0] - 2026-06-02
Added
- 3-tree sidebar layout: Session (local session stats), Global (API account data from server), Config (quick actions)
- Global tree: fetches real account data from
/usageendpoint — balance, used, remaining, quota limits per time period (hour/day/week/month). Shows progress bars with percentages and reset timestamps - Config tree: one-click buttons for Configure Zen Key, Configure Go Key, Refresh All Models, Clear Usage Stats — each as a native tree item with command binding
- ApiQuota interface:
id,name,unit,limit,used,remaining,reset_at,periodfor granular rate limit display - Context menus: right-click items in Config/Global trees for relevant actions
Changed
- Session tree renamed from
UsageTreeProvider→SessionTreeProviderwith cleaner helper methods
[2.2.0] - 2026-06-02
Changed
- Replaced WebviewView with native TreeView: usage sidebar now uses VS Code's native
TreeDataProviderAPI (like Explorer/Timeline/Outline). No custom HTML/CSS — all rendering uses VS Code's native tree components with proper labels, icons, and collapse states - Sidebar sections: API Keys, Balance, Session Summary (expandable), By Provider, By Model, Sessions (grouped by sessionId with nested requests), Recent Requests
[2.1.1] - 2026-06-02
Fixed
- Usage stats blank:
byModelandbyProviderchanged fromMapto plainRecord<string, ...>so they serialize properly over webview postMessage (Maps were invisible to JSON.stringify) - Thinking rendering: thinking content is now buffered and emitted as a single block with
[reasoning]...[/reasoning]markers when reasoning ends, preventing interleaved text output - Webview sessions: new "Sessions" section groups requests by sessionId with nested request details
[2.1.0] - 2026-06-02
Changed
- Sessions and request tracking: every request now has a unique
requestIdand belongs to asessionId. Tokens reported for the same requestId are replaced (not accumulated), fixing the token overcount bug where the API reports total tokens per session, not per message - Reasoner steps: streaming now tracks
reasoner_stepevents so the provider collects reasoning steps (label, id, timestamps) per request - Usage tracker keyed by requestId:
recordRequest(requestId, ...)finds existing records by requestId and replaces them instead of appending duplicates
Fixed
- Thinking content no longer renders as HTML —
reportThinkingsendsLanguageModelTextPartdirectly to progress (no more literal tags) - Tokens no longer summed incorrectly across requests — each request's total is reported once and replaced if the same requestId fires again
[2.0.1] - 2026-06-01
Fixed
- Strip
<think>tags from streaming content so they no longer render as literal HTML - Auto-refresh models when API key is configured (set, changed, or cleared)
- Status bar button now opens the usage sidebar (not the output channel)
- Models endpoint queried even without API key (fails gracefully if auth required)
Changed
- Webview redesigned with collapsible tree structure and VSCode-style aesthetics
- Each model entry expands to show requests, prompt, completion breakdown
- Each recent request exp...
Release v3.2.1
Changelog
[3.2.0] - 2026-06-02
Added
- Subagent tool (
opencode_subagent): Registered viavscode.lm.registerTool(), delegates to first available OpenCode provider. Acceptsqueryanddescriptionparameters. Runs with temperature 0, no additional tools. - Thinking blocks: Server provider and BaseOpenCodeProvider now use
LanguageModelThinkingPartfor collapsible reasoning content. Falls back to text markers if API unavailable.
Fixed
- Tool registration in
package.json— requiresmodelDescription,displayName, andinputSchemafields
[3.1.0] - 2026-06-02
Fixed
- Server provider session API: Correct request format for OpenCode server
modelmust be{ providerID, modelID }object (not string)providerIDcomes from server's actual provider data (e.g.,"opencode")- Session API only accepts
modelandparts— no tools, temperature, etc. - Filter user/assistant messages only (ignore system/tool messages)
[3.0.0] - 2026-06-02
BREAKING CHANGES
- models.dev API integration: Model capabilities (context size, pricing, vision, reasoning) now fetched live from
https://models.dev/api.jsoninstead of hardcoded metadata - Server provider rewrite: OpenCode Server now uses session-based API (
POST /session+POST /session/:id/message) instead of non-existent/chat/completionsendpoint - Single server provider: All connected servers register under one
opencode-servervendor instead of one per server
Added
- Live model registry:
modelRegistry.tsfetches from models.dev on activation with 30-minute cache - 40+ Zen models + 16 Go models with real context sizes, pricing, and capabilities
- Pricing in tooltips: hover over any model shows
In: $X/M · Out: $Y/M · Cache: $Z/M - Server provider models: Local servers now appear in Language Models view with correct capabilities
- ThinkingEffort configuration: Reasoning models show
configurationSchemafor low/medium/high - Partial model ID matching: Handles prefixed IDs (e.g.,
opencode/deepseek-v4-flash) - Debug logging: Detailed SSE parsing logs in Output panel for troubleshooting
Fixed
- Image detection too aggressive: Was matching ANY message part with
mimeTypeas image, causing "Image input not supported" for all models. Now only detects actualLanguageModelImagePartandLanguageModelDataPartwith image/* mime types - Tool schema validation: Filters out tools with empty/undefined schemas that cause 400 errors from strict providers (MiniMax, etc.)
- Server provider auth:
buildHeaders()made public, auth headers properly sent - Server provider streamResponse: Fixed ReadableStream vs ReadableStreamDefaultController mismatch
- Server provider model registration: Models now appear in Language Models view after registration
- models.dev data loading: Now blocking (
await) before provider registration so data is available when VS Code queries models
Removed
- Anthropic Messages adapter (
anthropicAdapter.ts) — all models use/chat/completionsvia OpenCode routing - OpenAI Responses adapter (
openaiResponsesAdapter.ts) — all models use/chat/completionsvia OpenCode routing @vscode-elements/elementsdependency — not usable in webviews
[2.4.0] - 2026-06-02
Added
- SDD task specs for multi-provider architecture (8 tasks)
.specs/directory with task definitions and dependency graph
Changed
- TreeView sidebar with Dashboard + Config sections
- Model registry with fallback static data
[2.3.3] - 2026-06-02
Fixed
/usageendpoint returns 404 — confirmed locally:GET /zen/v1/usage→ 404,/zen/go/v1/usage→ 404. Global tree now gracefully handles missing endpoint and falls back to showing model families instead of hanging- Global tree now shows model families: when usage API is unavailable, the Global tree still displays available models grouped by family (minimax, kimi, glm, deepseek, qwen, mimo, hy3) with model counts — making the view useful even without billing data
getModelFamilies()added toBaseOpenCodeProviderto expose model group inforefreshGlobalcommand now refreshes models + re-fetches global data instead of a separate refresh method
[2.3.2] - 2026-06-02
Changed
- Added debug logging to
getUsage: logs URL, HTTP status, response body (or empty/JSON parse error) so we can see exactly what the API returns - Added debug logging to
streamResponse: logs first chunk id/model, reasoning start/done, usage tokens
Fixed
- Config tree now uses correct command IDs (was using
opencodeConfigureZeninstead ofopencode-zen.configureZen) - Global tree shows pending/error/ok state per provider instead of hanging
fetchApiUsagehas 8s timeout to prevent tree from hanging forever
[2.3.0] - 2026-06-02
Added
- 3-tree sidebar layout: Session (local session stats), Global (API account data from server), Config (quick actions)
- Global tree: fetches real account data from
/usageendpoint — balance, used, remaining, quota limits per time period (hour/day/week/month). Shows progress bars with percentages and reset timestamps - Config tree: one-click buttons for Configure Zen Key, Configure Go Key, Refresh All Models, Clear Usage Stats — each as a native tree item with command binding
- ApiQuota interface:
id,name,unit,limit,used,remaining,reset_at,periodfor granular rate limit display - Context menus: right-click items in Config/Global trees for relevant actions
Changed
- Session tree renamed from
UsageTreeProvider→SessionTreeProviderwith cleaner helper methods
[2.2.0] - 2026-06-02
Changed
- Replaced WebviewView with native TreeView: usage sidebar now uses VS Code's native
TreeDataProviderAPI (like Explorer/Timeline/Outline). No custom HTML/CSS — all rendering uses VS Code's native tree components with proper labels, icons, and collapse states - Sidebar sections: API Keys, Balance, Session Summary (expandable), By Provider, By Model, Sessions (grouped by sessionId with nested requests), Recent Requests
[2.1.1] - 2026-06-02
Fixed
- Usage stats blank:
byModelandbyProviderchanged fromMapto plainRecord<string, ...>so they serialize properly over webview postMessage (Maps were invisible to JSON.stringify) - Thinking rendering: thinking content is now buffered and emitted as a single block with
[reasoning]...[/reasoning]markers when reasoning ends, preventing interleaved text output - Webview sessions: new "Sessions" section groups requests by sessionId with nested request details
[2.1.0] - 2026-06-02
Changed
- Sessions and request tracking: every request now has a unique
requestIdand belongs to asessionId. Tokens reported for the same requestId are replaced (not accumulated), fixing the token overcount bug where the API reports total tokens per session, not per message - Reasoner steps: streaming now tracks
reasoner_stepevents so the provider collects reasoning steps (label, id, timestamps) per request - Usage tracker keyed by requestId:
recordRequest(requestId, ...)finds existing records by requestId and replaces them instead of appending duplicates
Fixed
- Thinking content no longer renders as HTML —
reportThinkingsendsLanguageModelTextPartdirectly to progress (no more literal tags) - Tokens no longer summed incorrectly across requests — each request's total is reported once and replaced if the same requestId fires again
[2.0.1] - 2026-06-01
Fixed
- Strip
<think>tags from streaming content so they no longer render as literal HTML - Auto-refresh models when API key is configured (set, changed, or cleared)
- Status bar button now opens the usage sidebar (not the output channel)
- Models endpoint queried even without API key (fails gracefully if auth required)
Changed
- Webview redesigned with collapsible tree structure and VSCode-style aesthetics
- Each model entry expands to show requests, prompt, completion breakdown
- Each recent request expands to show full details
- Usage stats bars with percentages
- New command
OpenCode Zen: Show Output Logfor terminal-style stats view
[2.0.0] - 2026-06-01
BREAKING CHANGES
- 3 Independent Providers: Now registers
opencode-free,opencode-go, andopencode-zenas separate vendors - No More Hardcoded Models: All models fetched dynamically from OpenCode APIs
- Separate API Keys:
zenKeyandgoKeystored independently in SecretStorage - Removed Files:
modelMetadata.ts,registry.ts,modelsDevClient.ts,zenClient.ts,provider.tsdeleted
Added
BaseOpenCodeProviderabstract class for shared logicOpenCodeFreeProvider- free models only (uses Zen key)OpenCodeGoProvider- Go models with/go/v1/endpointOpenCodeZenProvider- paid Zen models onlyOpenCodeClient- generic HTTP client with endpoint parameterFileSystemWatcheron localauth.jsonfor new key detection- New
usageWebviewwith API keys status, balance, and detailed stats - Commands:
configureZen,configureGo,refreshAll - Auto-detection of local OpenCode installation at activation
Changed
- SecretStorage now manages 2 keys:
zenKeyandgoKey - Model caching with 5-minute TTL
- API usage caching with 1-minute TTL
- Models endpoint:
GET /v1/modelsfor Zen/Free,GET /go/v1/modelsfor Go - No SDK dependency (direct fetch to HTTP APIs)
[1.0.2] - 2026-06-01
Added
- New project logo combining OpenCode and Copilot branding
Fixed
- PNG icon instead of SVG (VSCode requirement)
- readonly sessionStats TypeScript error
[1.0.1] - 2026-06-01
Fixed
- PNG icon instead of SVG (VSCode requirement)
- readonly sessionStats TypeScript error
[1.0.0] - 2026-06-01
Added
- Initial release
- 45+ OpenCode Zen models registered as Copilot Language Model Provider
- 4 ...
Release v3.2.0
Changelog
[3.2.0] - 2026-06-02
Added
- Subagent tool (
opencode_subagent): Registered viavscode.lm.registerTool(), delegates to first available OpenCode provider. Acceptsqueryanddescriptionparameters. Runs with temperature 0, no additional tools. - Thinking blocks: Server provider and BaseOpenCodeProvider now use
LanguageModelThinkingPartfor collapsible reasoning content. Falls back to text markers if API unavailable.
Fixed
- Tool registration in
package.json— requiresmodelDescription,displayName, andinputSchemafields
[3.1.0] - 2026-06-02
Fixed
- Server provider session API: Correct request format for OpenCode server
modelmust be{ providerID, modelID }object (not string)providerIDcomes from server's actual provider data (e.g.,"opencode")- Session API only accepts
modelandparts— no tools, temperature, etc. - Filter user/assistant messages only (ignore system/tool messages)
[3.0.0] - 2026-06-02
BREAKING CHANGES
- models.dev API integration: Model capabilities (context size, pricing, vision, reasoning) now fetched live from
https://models.dev/api.jsoninstead of hardcoded metadata - Server provider rewrite: OpenCode Server now uses session-based API (
POST /session+POST /session/:id/message) instead of non-existent/chat/completionsendpoint - Single server provider: All connected servers register under one
opencode-servervendor instead of one per server
Added
- Live model registry:
modelRegistry.tsfetches from models.dev on activation with 30-minute cache - 40+ Zen models + 16 Go models with real context sizes, pricing, and capabilities
- Pricing in tooltips: hover over any model shows
In: $X/M · Out: $Y/M · Cache: $Z/M - Server provider models: Local servers now appear in Language Models view with correct capabilities
- ThinkingEffort configuration: Reasoning models show
configurationSchemafor low/medium/high - Partial model ID matching: Handles prefixed IDs (e.g.,
opencode/deepseek-v4-flash) - Debug logging: Detailed SSE parsing logs in Output panel for troubleshooting
Fixed
- Image detection too aggressive: Was matching ANY message part with
mimeTypeas image, causing "Image input not supported" for all models. Now only detects actualLanguageModelImagePartandLanguageModelDataPartwith image/* mime types - Tool schema validation: Filters out tools with empty/undefined schemas that cause 400 errors from strict providers (MiniMax, etc.)
- Server provider auth:
buildHeaders()made public, auth headers properly sent - Server provider streamResponse: Fixed ReadableStream vs ReadableStreamDefaultController mismatch
- Server provider model registration: Models now appear in Language Models view after registration
- models.dev data loading: Now blocking (
await) before provider registration so data is available when VS Code queries models
Removed
- Anthropic Messages adapter (
anthropicAdapter.ts) — all models use/chat/completionsvia OpenCode routing - OpenAI Responses adapter (
openaiResponsesAdapter.ts) — all models use/chat/completionsvia OpenCode routing @vscode-elements/elementsdependency — not usable in webviews
[2.4.0] - 2026-06-02
Added
- SDD task specs for multi-provider architecture (8 tasks)
.specs/directory with task definitions and dependency graph
Changed
- TreeView sidebar with Dashboard + Config sections
- Model registry with fallback static data
[2.3.3] - 2026-06-02
Fixed
/usageendpoint returns 404 — confirmed locally:GET /zen/v1/usage→ 404,/zen/go/v1/usage→ 404. Global tree now gracefully handles missing endpoint and falls back to showing model families instead of hanging- Global tree now shows model families: when usage API is unavailable, the Global tree still displays available models grouped by family (minimax, kimi, glm, deepseek, qwen, mimo, hy3) with model counts — making the view useful even without billing data
getModelFamilies()added toBaseOpenCodeProviderto expose model group inforefreshGlobalcommand now refreshes models + re-fetches global data instead of a separate refresh method
[2.3.2] - 2026-06-02
Changed
- Added debug logging to
getUsage: logs URL, HTTP status, response body (or empty/JSON parse error) so we can see exactly what the API returns - Added debug logging to
streamResponse: logs first chunk id/model, reasoning start/done, usage tokens
Fixed
- Config tree now uses correct command IDs (was using
opencodeConfigureZeninstead ofopencode-zen.configureZen) - Global tree shows pending/error/ok state per provider instead of hanging
fetchApiUsagehas 8s timeout to prevent tree from hanging forever
[2.3.0] - 2026-06-02
Added
- 3-tree sidebar layout: Session (local session stats), Global (API account data from server), Config (quick actions)
- Global tree: fetches real account data from
/usageendpoint — balance, used, remaining, quota limits per time period (hour/day/week/month). Shows progress bars with percentages and reset timestamps - Config tree: one-click buttons for Configure Zen Key, Configure Go Key, Refresh All Models, Clear Usage Stats — each as a native tree item with command binding
- ApiQuota interface:
id,name,unit,limit,used,remaining,reset_at,periodfor granular rate limit display - Context menus: right-click items in Config/Global trees for relevant actions
Changed
- Session tree renamed from
UsageTreeProvider→SessionTreeProviderwith cleaner helper methods
[2.2.0] - 2026-06-02
Changed
- Replaced WebviewView with native TreeView: usage sidebar now uses VS Code's native
TreeDataProviderAPI (like Explorer/Timeline/Outline). No custom HTML/CSS — all rendering uses VS Code's native tree components with proper labels, icons, and collapse states - Sidebar sections: API Keys, Balance, Session Summary (expandable), By Provider, By Model, Sessions (grouped by sessionId with nested requests), Recent Requests
[2.1.1] - 2026-06-02
Fixed
- Usage stats blank:
byModelandbyProviderchanged fromMapto plainRecord<string, ...>so they serialize properly over webview postMessage (Maps were invisible to JSON.stringify) - Thinking rendering: thinking content is now buffered and emitted as a single block with
[reasoning]...[/reasoning]markers when reasoning ends, preventing interleaved text output - Webview sessions: new "Sessions" section groups requests by sessionId with nested request details
[2.1.0] - 2026-06-02
Changed
- Sessions and request tracking: every request now has a unique
requestIdand belongs to asessionId. Tokens reported for the same requestId are replaced (not accumulated), fixing the token overcount bug where the API reports total tokens per session, not per message - Reasoner steps: streaming now tracks
reasoner_stepevents so the provider collects reasoning steps (label, id, timestamps) per request - Usage tracker keyed by requestId:
recordRequest(requestId, ...)finds existing records by requestId and replaces them instead of appending duplicates
Fixed
- Thinking content no longer renders as HTML —
reportThinkingsendsLanguageModelTextPartdirectly to progress (no more literal tags) - Tokens no longer summed incorrectly across requests — each request's total is reported once and replaced if the same requestId fires again
[2.0.1] - 2026-06-01
Fixed
- Strip
<think>tags from streaming content so they no longer render as literal HTML - Auto-refresh models when API key is configured (set, changed, or cleared)
- Status bar button now opens the usage sidebar (not the output channel)
- Models endpoint queried even without API key (fails gracefully if auth required)
Changed
- Webview redesigned with collapsible tree structure and VSCode-style aesthetics
- Each model entry expands to show requests, prompt, completion breakdown
- Each recent request expands to show full details
- Usage stats bars with percentages
- New command
OpenCode Zen: Show Output Logfor terminal-style stats view
[2.0.0] - 2026-06-01
BREAKING CHANGES
- 3 Independent Providers: Now registers
opencode-free,opencode-go, andopencode-zenas separate vendors - No More Hardcoded Models: All models fetched dynamically from OpenCode APIs
- Separate API Keys:
zenKeyandgoKeystored independently in SecretStorage - Removed Files:
modelMetadata.ts,registry.ts,modelsDevClient.ts,zenClient.ts,provider.tsdeleted
Added
BaseOpenCodeProviderabstract class for shared logicOpenCodeFreeProvider- free models only (uses Zen key)OpenCodeGoProvider- Go models with/go/v1/endpointOpenCodeZenProvider- paid Zen models onlyOpenCodeClient- generic HTTP client with endpoint parameterFileSystemWatcheron localauth.jsonfor new key detection- New
usageWebviewwith API keys status, balance, and detailed stats - Commands:
configureZen,configureGo,refreshAll - Auto-detection of local OpenCode installation at activation
Changed
- SecretStorage now manages 2 keys:
zenKeyandgoKey - Model caching with 5-minute TTL
- API usage caching with 1-minute TTL
- Models endpoint:
GET /v1/modelsfor Zen/Free,GET /go/v1/modelsfor Go - No SDK dependency (direct fetch to HTTP APIs)
[1.0.2] - 2026-06-01
Added
- New project logo combining OpenCode and Copilot branding
Fixed
- PNG icon instead of SVG (VSCode requirement)
- readonly sessionStats TypeScript error
[1.0.1] - 2026-06-01
Fixed
- PNG icon instead of SVG (VSCode requirement)
- readonly sessionStats TypeScript error
[1.0.0] - 2026-06-01
Added
- Initial release
- 45+ OpenCode Zen models registered as Copilot Language Model Provider
- 4 ...
Release v3.1.0
Changelog
[3.1.0] - 2026-06-02
Fixed
- Server provider session API: Correct request format for OpenCode server
modelmust be{ providerID, modelID }object (not string)providerIDcomes from server's actual provider data (e.g.,"opencode")- Session API only accepts
modelandparts— no tools, temperature, etc. - Filter user/assistant messages only (ignore system/tool messages)
[3.0.0] - 2026-06-02
BREAKING CHANGES
- models.dev API integration: Model capabilities (context size, pricing, vision, reasoning) now fetched live from
https://models.dev/api.jsoninstead of hardcoded metadata - Server provider rewrite: OpenCode Server now uses session-based API (
POST /session+POST /session/:id/message) instead of non-existent/chat/completionsendpoint - Single server provider: All connected servers register under one
opencode-servervendor instead of one per server
Added
- Live model registry:
modelRegistry.tsfetches from models.dev on activation with 30-minute cache - 40+ Zen models + 16 Go models with real context sizes, pricing, and capabilities
- Pricing in tooltips: hover over any model shows
In: $X/M · Out: $Y/M · Cache: $Z/M - Server provider models: Local servers now appear in Language Models view with correct capabilities
- ThinkingEffort configuration: Reasoning models show
configurationSchemafor low/medium/high - Partial model ID matching: Handles prefixed IDs (e.g.,
opencode/deepseek-v4-flash) - Debug logging: Detailed SSE parsing logs in Output panel for troubleshooting
Fixed
- Image detection too aggressive: Was matching ANY message part with
mimeTypeas image, causing "Image input not supported" for all models. Now only detects actualLanguageModelImagePartandLanguageModelDataPartwith image/* mime types - Tool schema validation: Filters out tools with empty/undefined schemas that cause 400 errors from strict providers (MiniMax, etc.)
- Server provider auth:
buildHeaders()made public, auth headers properly sent - Server provider streamResponse: Fixed ReadableStream vs ReadableStreamDefaultController mismatch
- Server provider model registration: Models now appear in Language Models view after registration
- models.dev data loading: Now blocking (
await) before provider registration so data is available when VS Code queries models
Removed
- Anthropic Messages adapter (
anthropicAdapter.ts) — all models use/chat/completionsvia OpenCode routing - OpenAI Responses adapter (
openaiResponsesAdapter.ts) — all models use/chat/completionsvia OpenCode routing @vscode-elements/elementsdependency — not usable in webviews
[2.4.0] - 2026-06-02
Added
- SDD task specs for multi-provider architecture (8 tasks)
.specs/directory with task definitions and dependency graph
Changed
- TreeView sidebar with Dashboard + Config sections
- Model registry with fallback static data
[2.3.3] - 2026-06-02
Fixed
/usageendpoint returns 404 — confirmed locally:GET /zen/v1/usage→ 404,/zen/go/v1/usage→ 404. Global tree now gracefully handles missing endpoint and falls back to showing model families instead of hanging- Global tree now shows model families: when usage API is unavailable, the Global tree still displays available models grouped by family (minimax, kimi, glm, deepseek, qwen, mimo, hy3) with model counts — making the view useful even without billing data
getModelFamilies()added toBaseOpenCodeProviderto expose model group inforefreshGlobalcommand now refreshes models + re-fetches global data instead of a separate refresh method
[2.3.2] - 2026-06-02
Changed
- Added debug logging to
getUsage: logs URL, HTTP status, response body (or empty/JSON parse error) so we can see exactly what the API returns - Added debug logging to
streamResponse: logs first chunk id/model, reasoning start/done, usage tokens
Fixed
- Config tree now uses correct command IDs (was using
opencodeConfigureZeninstead ofopencode-zen.configureZen) - Global tree shows pending/error/ok state per provider instead of hanging
fetchApiUsagehas 8s timeout to prevent tree from hanging forever
[2.3.0] - 2026-06-02
Added
- 3-tree sidebar layout: Session (local session stats), Global (API account data from server), Config (quick actions)
- Global tree: fetches real account data from
/usageendpoint — balance, used, remaining, quota limits per time period (hour/day/week/month). Shows progress bars with percentages and reset timestamps - Config tree: one-click buttons for Configure Zen Key, Configure Go Key, Refresh All Models, Clear Usage Stats — each as a native tree item with command binding
- ApiQuota interface:
id,name,unit,limit,used,remaining,reset_at,periodfor granular rate limit display - Context menus: right-click items in Config/Global trees for relevant actions
Changed
- Session tree renamed from
UsageTreeProvider→SessionTreeProviderwith cleaner helper methods
[2.2.0] - 2026-06-02
Changed
- Replaced WebviewView with native TreeView: usage sidebar now uses VS Code's native
TreeDataProviderAPI (like Explorer/Timeline/Outline). No custom HTML/CSS — all rendering uses VS Code's native tree components with proper labels, icons, and collapse states - Sidebar sections: API Keys, Balance, Session Summary (expandable), By Provider, By Model, Sessions (grouped by sessionId with nested requests), Recent Requests
[2.1.1] - 2026-06-02
Fixed
- Usage stats blank:
byModelandbyProviderchanged fromMapto plainRecord<string, ...>so they serialize properly over webview postMessage (Maps were invisible to JSON.stringify) - Thinking rendering: thinking content is now buffered and emitted as a single block with
[reasoning]...[/reasoning]markers when reasoning ends, preventing interleaved text output - Webview sessions: new "Sessions" section groups requests by sessionId with nested request details
[2.1.0] - 2026-06-02
Changed
- Sessions and request tracking: every request now has a unique
requestIdand belongs to asessionId. Tokens reported for the same requestId are replaced (not accumulated), fixing the token overcount bug where the API reports total tokens per session, not per message - Reasoner steps: streaming now tracks
reasoner_stepevents so the provider collects reasoning steps (label, id, timestamps) per request - Usage tracker keyed by requestId:
recordRequest(requestId, ...)finds existing records by requestId and replaces them instead of appending duplicates
Fixed
- Thinking content no longer renders as HTML —
reportThinkingsendsLanguageModelTextPartdirectly to progress (no more literal tags) - Tokens no longer summed incorrectly across requests — each request's total is reported once and replaced if the same requestId fires again
[2.0.1] - 2026-06-01
Fixed
- Strip
<think>tags from streaming content so they no longer render as literal HTML - Auto-refresh models when API key is configured (set, changed, or cleared)
- Status bar button now opens the usage sidebar (not the output channel)
- Models endpoint queried even without API key (fails gracefully if auth required)
Changed
- Webview redesigned with collapsible tree structure and VSCode-style aesthetics
- Each model entry expands to show requests, prompt, completion breakdown
- Each recent request expands to show full details
- Usage stats bars with percentages
- New command
OpenCode Zen: Show Output Logfor terminal-style stats view
[2.0.0] - 2026-06-01
BREAKING CHANGES
- 3 Independent Providers: Now registers
opencode-free,opencode-go, andopencode-zenas separate vendors - No More Hardcoded Models: All models fetched dynamically from OpenCode APIs
- Separate API Keys:
zenKeyandgoKeystored independently in SecretStorage - Removed Files:
modelMetadata.ts,registry.ts,modelsDevClient.ts,zenClient.ts,provider.tsdeleted
Added
BaseOpenCodeProviderabstract class for shared logicOpenCodeFreeProvider- free models only (uses Zen key)OpenCodeGoProvider- Go models with/go/v1/endpointOpenCodeZenProvider- paid Zen models onlyOpenCodeClient- generic HTTP client with endpoint parameterFileSystemWatcheron localauth.jsonfor new key detection- New
usageWebviewwith API keys status, balance, and detailed stats - Commands:
configureZen,configureGo,refreshAll - Auto-detection of local OpenCode installation at activation
Changed
- SecretStorage now manages 2 keys:
zenKeyandgoKey - Model caching with 5-minute TTL
- API usage caching with 1-minute TTL
- Models endpoint:
GET /v1/modelsfor Zen/Free,GET /go/v1/modelsfor Go - No SDK dependency (direct fetch to HTTP APIs)
[1.0.2] - 2026-06-01
Added
- New project logo combining OpenCode and Copilot branding
Fixed
- PNG icon instead of SVG (VSCode requirement)
- readonly sessionStats TypeScript error
[1.0.1] - 2026-06-01
Fixed
- PNG icon instead of SVG (VSCode requirement)
- readonly sessionStats TypeScript error
[1.0.0] - 2026-06-01
Added
- Initial release
- 45+ OpenCode Zen models registered as Copilot Language Model Provider
- 4 free models enabled by default
- Auto-detection of OpenCode installation and API key
- Tool calling support with automatic JSON repair
- SSE streaming with reasoning content display
- Vision/image input for multimodal models
- Status bar indicator with connection state
- Settings: timeout, tool calling, image input, temperature, verbose logging
- Model catalog from builtin metadata, models.dev, and Zen API