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 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
[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