import { BaseExecutor } from "./base.js"; import { PROVIDERS } from "../config/providers.js"; import { injectReasoningContent } from "../utils/reasoningContentInjector.js"; // Models that use /zen/v1/messages (claude format) const MESSAGES_MODELS = new Set(); export class OpenCodeExecutor extends BaseExecutor { constructor() { super("opencode", PROVIDERS.opencode); } transformRequest(model, body) { return injectReasoningContent({ provider: this.provider, model, body }); } buildUrl(model) { const base = this.config.baseUrl; return MESSAGES_MODELS.has(model) ? `${base}/zen/v1/messages` : `${base}/zen/v1/chat/completions`; } buildHeaders() { return { "Content-Type": "application/json", "Authorization": "Bearer public", "x-opencode-client": "desktop", "Accept": "text/event-stream" }; } }