@pixelbyte-software/pixcode 1.33.4 → 1.33.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -68,7 +68,10 @@ function normalizeList(list) {
68
68
  seen.add(value);
69
69
  const label = typeof item.label === 'string' && item.label.trim() ? item.label.trim() : value;
70
70
  const source = item.source === 'api' ? 'api' : 'static';
71
- out.push({ value, label, source });
71
+ const entry = { value, label, source };
72
+ if (typeof item.free === 'boolean')
73
+ entry.free = item.free;
74
+ out.push(entry);
72
75
  }
73
76
  return out;
74
77
  }
@@ -106,8 +109,18 @@ async function discoverOpenAiCompat(apiKey, baseUrl, fallbackBase) {
106
109
  const response = await fetch(endpoint, {
107
110
  headers: { Authorization: `Bearer ${apiKey}` },
108
111
  });
109
- if (!response.ok)
112
+ if (!response.ok) {
113
+ // 401 specifically means our key is bad — but for codex/qwen/etc.
114
+ // users often log in via OAuth (`codex login`, `qwen auth`) which
115
+ // doesn't expose an OpenAI-compatible API key. Surface a clean
116
+ // "no live discovery available" rather than a scary 401 trace.
117
+ if (response.status === 401) {
118
+ const err = new Error('OpenAI-compatible /v1/models requires an API key. The static catalog is shown instead — that\'s expected when you signed in via OAuth (e.g. `codex login`).');
119
+ err.code = 'OAUTH_NO_API_KEY';
120
+ throw err;
121
+ }
110
122
  throw new Error(`${endpoint} returned ${response.status}`);
123
+ }
111
124
  const data = await response.json();
112
125
  const rows = Array.isArray(data?.data) ? data.data : [];
113
126
  return rows
@@ -118,6 +131,130 @@ async function discoverOpenAiCompat(apiKey, baseUrl, fallbackBase) {
118
131
  source: 'api',
119
132
  }));
120
133
  }
134
+ /**
135
+ * Detect whether the user is authenticated via the provider's OAuth flow
136
+ * (codex login / qwen auth) so we can skip live model discovery silently
137
+ * — those flows don't surface a usable OpenAI-compatible API key, and the
138
+ * SDK calls the upstream APIs through its own internal auth path.
139
+ */
140
+ async function hasProviderOauthAuth(provider) {
141
+ if (provider === 'codex') {
142
+ try {
143
+ await fs.access(path.join(os.homedir(), '.codex', 'auth.json'));
144
+ return true;
145
+ }
146
+ catch {
147
+ return false;
148
+ }
149
+ }
150
+ if (provider === 'qwen') {
151
+ try {
152
+ await fs.access(path.join(os.homedir(), '.qwen', 'oauth_creds.json'));
153
+ return true;
154
+ }
155
+ catch {
156
+ return false;
157
+ }
158
+ }
159
+ return false;
160
+ }
161
+ /**
162
+ * OpenCode is multi-provider — its "model" picker isn't a single API list,
163
+ * it's the union of every provider it can route to (Anthropic, OpenAI,
164
+ * Google, xAI, OpenRouter, OpenCode Zen, Ollama, etc.). The canonical
165
+ * catalog lives at https://models.dev/api.json (no auth, ~1.8 MB JSON, 115
166
+ * providers as of 2026-04). We pull that, filter to providers the user
167
+ * has authenticated with (read `~/.local/share/opencode/auth.json`) plus
168
+ * always include the OpenCode Zen tier (works without explicit auth on
169
+ * the free models), drop deprecated entries, and tag free models.
170
+ */
171
+ async function discoverOpencode() {
172
+ const url = process.env.OPENCODE_MODELS_URL || 'https://models.dev/api.json';
173
+ const response = await fetch(url, {
174
+ // OpenCode itself caches this for hours; we cache for 6h via the
175
+ // outer wrapper so a single 7s fetch on cold start is acceptable.
176
+ signal: AbortSignal.timeout(15000),
177
+ });
178
+ if (!response.ok)
179
+ throw new Error(`models.dev/api.json returned ${response.status}`);
180
+ const data = await response.json();
181
+ if (!data || typeof data !== 'object')
182
+ throw new Error('models.dev returned a non-object payload');
183
+ // Read OpenCode's auth.json to know which providers the user can
184
+ // actually call. Missing file → only show always-free Zen.
185
+ const authedProviders = new Set(['opencode']);
186
+ try {
187
+ const authPath = path.join(os.homedir(), '.local', 'share', 'opencode', 'auth.json');
188
+ const raw = await fs.readFile(authPath, 'utf8');
189
+ const auth = JSON.parse(raw);
190
+ if (auth && typeof auth === 'object') {
191
+ for (const k of Object.keys(auth))
192
+ authedProviders.add(k);
193
+ }
194
+ }
195
+ catch { /* no auth.json → only Zen free models surface */ }
196
+ // Common env-var providers OpenCode picks up automatically. If the user
197
+ // exported one in their shell, surface those models too even without
198
+ // auth.json. Mirrors the env list in opencode-auth.provider.ts.
199
+ const envProviderHints = {
200
+ anthropic: ['ANTHROPIC_API_KEY'],
201
+ openai: ['OPENAI_API_KEY'],
202
+ google: ['GOOGLE_GENERATIVE_AI_API_KEY', 'GEMINI_API_KEY'],
203
+ 'google-vertex': ['GOOGLE_APPLICATION_CREDENTIALS'],
204
+ xai: ['XAI_API_KEY'],
205
+ groq: ['GROQ_API_KEY'],
206
+ cerebras: ['CEREBRAS_API_KEY'],
207
+ openrouter: ['OPENROUTER_API_KEY'],
208
+ };
209
+ for (const [providerId, envVars] of Object.entries(envProviderHints)) {
210
+ if (envVars.some((v) => process.env[v]?.trim()))
211
+ authedProviders.add(providerId);
212
+ }
213
+ const out = [];
214
+ for (const [providerId, providerCfg] of Object.entries(data)) {
215
+ if (!authedProviders.has(providerId))
216
+ continue;
217
+ if (!providerCfg || typeof providerCfg !== 'object')
218
+ continue;
219
+ const models = providerCfg.models;
220
+ if (!models || typeof models !== 'object')
221
+ continue;
222
+ const providerName = typeof providerCfg.name === 'string' && providerCfg.name.trim()
223
+ ? providerCfg.name
224
+ : providerId;
225
+ for (const [modelId, modelCfg] of Object.entries(models)) {
226
+ if (!modelCfg || typeof modelCfg !== 'object')
227
+ continue;
228
+ // Skip deprecated entries from the default list — users can
229
+ // still hand-type them if they really need to.
230
+ if (modelCfg.status === 'deprecated')
231
+ continue;
232
+ const cost = modelCfg.cost && typeof modelCfg.cost === 'object' ? modelCfg.cost : null;
233
+ const free = !cost || (Number(cost.input) === 0 && Number(cost.output) === 0);
234
+ const ctx = modelCfg.limit?.context;
235
+ const ctxLabel = typeof ctx === 'number' && ctx > 0
236
+ ? ` · ${ctx >= 1_000_000 ? `${(ctx / 1_000_000).toFixed(1)}M` : `${Math.round(ctx / 1000)}K`}`
237
+ : '';
238
+ const freeLabel = free ? ' · Free' : '';
239
+ const modelName = typeof modelCfg.name === 'string' && modelCfg.name.trim()
240
+ ? modelCfg.name
241
+ : modelId;
242
+ out.push({
243
+ value: `${providerId}/${modelId}`,
244
+ label: `${providerName} · ${modelName}${ctxLabel}${freeLabel}`,
245
+ source: 'api',
246
+ free,
247
+ });
248
+ }
249
+ }
250
+ // Sort: free first (handy when the user is unauthed), then by label.
251
+ out.sort((a, b) => {
252
+ if (a.free !== b.free)
253
+ return a.free ? -1 : 1;
254
+ return a.label.localeCompare(b.label);
255
+ });
256
+ return out;
257
+ }
121
258
  async function discoverGoogle(apiKey) {
122
259
  // Google Generative Language API — public models list, API key as query.
123
260
  const endpoint = `https://generativelanguage.googleapis.com/v1beta/models?key=${encodeURIComponent(apiKey)}`;
@@ -157,6 +294,22 @@ export async function getProviderModels(provider, opts = {}) {
157
294
  fromCache: true,
158
295
  };
159
296
  }
297
+ // OpenCode is the odd one out: its catalog is models.dev, not a per-key
298
+ // API endpoint. Skip the credential plumbing and dispatch straight.
299
+ let liveModels = [];
300
+ let error;
301
+ if (provider === 'opencode') {
302
+ try {
303
+ liveModels = await discoverOpencode();
304
+ }
305
+ catch (err) {
306
+ error = err?.message || String(err);
307
+ }
308
+ const merged = mergeCatalogs(normalizeList(liveModels), staticCatalog);
309
+ const entry = { models: merged, error };
310
+ await saveCacheEntry(provider, entry).catch(() => { });
311
+ return { models: merged, fetchedAt: new Date().toISOString(), error, fromCache: false };
312
+ }
160
313
  // Pick up credentials from Pixcode's UI store first, then fall back to
161
314
  // the native env vars so a user who already exported ANTHROPIC_API_KEY
162
315
  // (or authenticated Claude Code via OAuth — the SDK writes the key into
@@ -176,12 +329,17 @@ export async function getProviderModels(provider, opts = {}) {
176
329
  }[provider];
177
330
  const apiKey = creds?.apiKey || envKey;
178
331
  const baseUrl = creds?.baseUrl || envBase || undefined;
179
- let liveModels = [];
180
- let error;
181
332
  if (!apiKey) {
182
- // Be explicit so the UI can surface a useful hint rather than just
183
- // showing the static baseline with no reason given.
184
- error = `No ${provider} API key configured. Save one in Settings > Agents > API Key to enable live discovery.`;
333
+ // Codex and Qwen support OAuth (`codex login`, `qwen auth`) which
334
+ // DOESN'T expose a usable API key the SDK auths against the
335
+ // upstream API directly. Skip the discovery step silently in that
336
+ // case; the static catalog is the right answer.
337
+ const oauthOnly = await hasProviderOauthAuth(provider);
338
+ if (!oauthOnly) {
339
+ // Be explicit so the UI can surface a useful hint rather than just
340
+ // showing the static baseline with no reason given.
341
+ error = `No ${provider} API key configured. Save one in Settings > Agents > API Key, or sign in via the CLI (e.g. \`codex login\`).`;
342
+ }
185
343
  }
186
344
  else {
187
345
  try {
@@ -199,7 +357,13 @@ export async function getProviderModels(provider, opts = {}) {
199
357
  }
200
358
  }
201
359
  catch (err) {
202
- error = err?.message || String(err);
360
+ // OAuth users get a clean message instead of a raw 401 stack.
361
+ if (err?.code === 'OAUTH_NO_API_KEY') {
362
+ error = err.message;
363
+ }
364
+ else {
365
+ error = err?.message || String(err);
366
+ }
203
367
  }
204
368
  }
205
369
  const merged = mergeCatalogs(normalizeList(liveModels), staticCatalog);
@@ -1 +1 @@
1
- {"version":3,"file":"provider-models.js","sourceRoot":"","sources":["../../../server/services/provider-models.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-models.js","sourceRoot":"","sources":["../../../server/services/provider-models.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,sBAAsB,CAAC,CAAC;AAC/E,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,UAAU;AAEnD,KAAK,UAAU,SAAS;IACpB,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAI;IAC1B,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACnF,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,eAAe,CAAC,QAAQ;IACnC,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;IAChC,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,QAAQ,EAAE,KAAK;IACzC,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;IAChC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;IACpE,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,aAAa,CAAC,IAAI;IACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE,SAAS;QAChD,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS;QACxC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9F,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;QACxD,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACvC,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3D,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,OAAO,EAAE,SAAS;IACrC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;IACvB,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,OAAO,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,gEAAgE;AAEhE,KAAK,UAAU,iBAAiB,CAAC,MAAM,EAAE,OAAO;IAC5C,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,2BAA2B,CAAC,GAAG,YAAY,CAAC;IAC9F,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;QACnC,OAAO,EAAE;YACL,WAAW,EAAE,MAAM;YACnB,mBAAmB,EAAE,YAAY;SACpC;KACJ,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,OAAO,IAAI;SACN,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,QAAQ,CAAC;SACxC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACT,KAAK,EAAE,CAAC,CAAC,EAAE;QACX,KAAK,EAAE,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QAC1F,MAAM,EAAE,KAAK;KAChB,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY;IAC7D,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,GAAG,SAAS,CAAC;IAC5E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;QACnC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE;KACjD,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,kEAAkE;QAClE,kEAAkE;QAClE,+DAA+D;QAC/D,+DAA+D;QAC/D,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,6JAA6J,CAAC,CAAC;YACrL,GAAG,CAAC,IAAI,GAAG,kBAAkB,CAAC;YAC9B,MAAM,GAAG,CAAC;QACd,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,aAAa,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,OAAO,IAAI;SACN,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,QAAQ,CAAC;SACxC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACT,KAAK,EAAE,CAAC,CAAC,EAAE;QACX,KAAK,EAAE,CAAC,CAAC,EAAE;QACX,MAAM,EAAE,KAAK;KAChB,CAAC,CAAC,CAAC;AACZ,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,oBAAoB,CAAC,QAAQ;IACxC,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC;YACD,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;IAC7B,CAAC;IACD,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACtB,IAAI,CAAC;YACD,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;YACtE,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,gBAAgB;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,6BAA6B,CAAC;IAC7E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC9B,iEAAiE;QACjE,kEAAkE;QAClE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;KACrC,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACrF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAEnG,iEAAiE;IACjE,2DAA2D;IAC3D,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QACrF,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC;IACL,CAAC;IAAC,MAAM,CAAC,CAAC,iDAAiD,CAAC,CAAC;IAE7D,wEAAwE;IACxE,qEAAqE;IACrE,gEAAgE;IAChE,MAAM,gBAAgB,GAAG;QACrB,SAAS,EAAE,CAAC,mBAAmB,CAAC;QAChC,MAAM,EAAE,CAAC,gBAAgB,CAAC;QAC1B,MAAM,EAAE,CAAC,8BAA8B,EAAE,gBAAgB,CAAC;QAC1D,eAAe,EAAE,CAAC,gCAAgC,CAAC;QACnD,GAAG,EAAE,CAAC,aAAa,CAAC;QACpB,IAAI,EAAE,CAAC,cAAc,CAAC;QACtB,QAAQ,EAAE,CAAC,kBAAkB,CAAC;QAC9B,UAAU,EAAE,CAAC,oBAAoB,CAAC;KACrC,CAAC;IACF,KAAK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACnE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;YAAE,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,KAAK,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC;YAAE,SAAS;QAC/C,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ;YAAE,SAAS;QAC9D,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,SAAS;QAEpD,MAAM,YAAY,GAAG,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE;YAChF,CAAC,CAAC,WAAW,CAAC,IAAI;YAClB,CAAC,CAAC,UAAU,CAAC;QAEjB,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;gBAAE,SAAS;YACxD,4DAA4D;YAC5D,+CAA+C;YAC/C,IAAI,QAAQ,CAAC,MAAM,KAAK,YAAY;gBAAE,SAAS;YAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YACvF,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9E,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;YACpC,MAAM,QAAQ,GAAG,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,GAAG,CAAC;gBAC/C,CAAC,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;gBAC9F,CAAC,CAAC,EAAE,CAAC;YACT,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;gBACvE,CAAC,CAAC,QAAQ,CAAC,IAAI;gBACf,CAAC,CAAC,OAAO,CAAC;YAEd,GAAG,CAAC,IAAI,CAAC;gBACL,KAAK,EAAE,GAAG,UAAU,IAAI,OAAO,EAAE;gBACjC,KAAK,EAAE,GAAG,YAAY,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS,EAAE;gBAC9D,MAAM,EAAE,KAAK;gBACb,IAAI;aACP,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,qEAAqE;IACrE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACd,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACf,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,MAAM;IAChC,yEAAyE;IACzE,MAAM,QAAQ,GAAG,+DAA+D,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7G,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACvF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,OAAO,IAAI;SACN,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SACxE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACP,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC3C,OAAO;YACH,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;YACrF,MAAM,EAAE,KAAK;SAChB,CAAC;IACN,CAAC,CAAC,CAAC;AACX,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE;IACvD,MAAM,EAAE,YAAY,GAAG,KAAK,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;IACvD,MAAM,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;IAEzF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,MAAM,EAAE,SAAS;QAChC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,YAAY;QAC1D,CAAC,CAAC,KAAK,CAAC;IAEZ,IAAI,CAAC,YAAY,IAAI,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QAC/D,OAAO;YACH,MAAM,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;YAClE,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,IAAI;SAClB,CAAC;IACN,CAAC;IAED,wEAAwE;IACxE,oEAAoE;IACpE,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,KAAK,CAAC;IACV,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC1B,IAAI,CAAC;YACD,UAAU,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,KAAK,GAAG,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,MAAM,GAAG,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,CAAC;QACvE,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACxC,MAAM,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAmB,CAAC,CAAC,CAAC;QACvE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC5F,CAAC;IAED,uEAAuE;IACvE,uEAAuE;IACvE,wEAAwE;IACxE,sEAAsE;IACtE,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG;QACX,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QACrC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;QACjC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAC5D,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;KACrC,CAAC,QAAQ,CAAC,CAAC;IACZ,MAAM,OAAO,GAAG;QACZ,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;QACtC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;QAClC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;QACjC,MAAM,EAAE,SAAS;KACpB,CAAC,QAAQ,CAAC,CAAC;IACZ,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,MAAM,CAAC;IACvC,MAAM,OAAO,GAAG,KAAK,EAAE,OAAO,IAAI,OAAO,IAAI,SAAS,CAAC;IAEvD,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,kEAAkE;QAClE,8DAA8D;QAC9D,kEAAkE;QAClE,gDAAgD;QAChD,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,mEAAmE;YACnE,oDAAoD;YACpD,KAAK,GAAG,MAAM,QAAQ,8GAA8G,CAAC;QACzI,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC;YACD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACxB,UAAU,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC1D,CAAC;iBAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAC9B,UAAU,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,2BAA2B,CAAC,CAAC;YAC1F,CAAC;iBAAM,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;gBAC7B,UAAU,GAAG,MAAM,oBAAoB,CACnC,MAAM,EACN,OAAO,EACP,wDAAwD,CAC3D,CAAC;YACN,CAAC;iBAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC/B,UAAU,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;YAC9C,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,8DAA8D;YAC9D,IAAI,GAAG,EAAE,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACnC,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACJ,KAAK,GAAG,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;YACxC,CAAC;QACL,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACxC,MAAM,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAmB,CAAC,CAAC,CAAC;IACvE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC5F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,QAAQ;IAClD,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;IAChC,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC;;QAChC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC"}
@@ -86,24 +86,43 @@ export const QWEN_MODELS = {
86
86
  DEFAULT: "qwen3-coder-plus",
87
87
  };
88
88
  /**
89
- * OpenCode Models
89
+ * OpenCode Models — STATIC FALLBACK ONLY.
90
90
  *
91
- * OpenCode is multi-provider, so the picker is really "which upstream
92
- * model does opencode talk to?". The defaults here point at OpenCode Zen
93
- * (their curated routing tier) plus a few direct picks the docs call
94
- * out as well-supported. Advanced users override via opencode.json's
95
- * `provider` / `model` block, which bypasses this list.
91
+ * OpenCode is multi-provider and the live model catalog rotates often
92
+ * (Zen free models come and go; new Anthropic/OpenAI/Google models ship
93
+ * every few weeks). The runtime fetches the live catalog from
94
+ * `https://models.dev/api.json` via server/services/provider-models.js
95
+ * and merges it on top of this list — these entries only show when the
96
+ * fetch fails (offline install, firewalled host).
97
+ *
98
+ * Curated current free Zen tier + canonical paid picks. Update when the
99
+ * fallback feels stale, but the live fetch is the source of truth.
96
100
  */
97
101
  export const OPENCODE_MODELS = {
98
102
  OPTIONS: [
99
- { value: "opencode/zen-best", label: "OpenCode Zen (Best)" },
100
- { value: "opencode/zen-fast", label: "OpenCode Zen (Fast)" },
103
+ // OpenCode Zen free tier (no charge, may rate-limit). The "limited
104
+ // time" Zen freebies rotate, so this is the safest small set.
105
+ { value: "opencode/big-pickle", label: "OpenCode Zen · Big Pickle (Free)", free: true },
106
+ { value: "opencode/minimax-m2.5-free", label: "OpenCode Zen · MiniMax M2.5 (Free)", free: true },
107
+ { value: "opencode/hy3-preview-free", label: "OpenCode Zen · Hy3 Preview (Free)", free: true },
108
+ { value: "opencode/ling-2.6-flash-free", label: "OpenCode Zen · Ling 2.6 Flash (Free)", free: true },
109
+ { value: "opencode/nemotron-3-super-free", label: "OpenCode Zen · Nemotron 3 Super (Free)", free: true },
110
+ { value: "opencode/gpt-5-nano", label: "OpenCode Zen · GPT-5 Nano (Free)", free: true },
111
+ // Anthropic — current flagship + cheap.
112
+ { value: "anthropic/claude-opus-4-7", label: "Claude Opus 4.7 (Anthropic)" },
101
113
  { value: "anthropic/claude-sonnet-4-6", label: "Claude Sonnet 4.6 (Anthropic)" },
102
- { value: "anthropic/claude-opus-4-6", label: "Claude Opus 4.6 (Anthropic)" },
114
+ { value: "anthropic/claude-haiku-4-5", label: "Claude Haiku 4.5 (Anthropic)" },
115
+ // OpenAI — current GPT-5 family.
103
116
  { value: "openai/gpt-5.4", label: "GPT-5.4 (OpenAI)" },
104
- { value: "google/gemini-3-pro-preview", label: "Gemini 3 Pro (Google)" },
117
+ { value: "openai/gpt-5.1-codex", label: "GPT-5.1 Codex (OpenAI)" },
118
+ // Google — current Gemini 3 family.
119
+ { value: "google/gemini-3.1-pro-preview", label: "Gemini 3.1 Pro (Google)" },
120
+ { value: "google/gemini-3-flash-preview", label: "Gemini 3 Flash (Google)" },
121
+ // xAI — fast & cheap coding model.
122
+ { value: "xai/grok-code-fast-1", label: "Grok Code Fast 1 (xAI)" },
105
123
  ],
106
- DEFAULT: "opencode/zen-best",
124
+ // Free Zen freebie that historically works for unauthed installs.
125
+ DEFAULT: "opencode/big-pickle",
107
126
  };
108
127
  /**
109
128
  * Gemini Models
@@ -1 +1 @@
1
- {"version":3,"file":"modelConstants.js","sourceRoot":"","sources":["../../shared/modelConstants.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"modelConstants.js","sourceRoot":"","sources":["../../shared/modelConstants.js"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pixelbyte-software/pixcode",
3
- "version": "1.33.4",
3
+ "version": "1.33.6",
4
4
  "description": "Pixcode — a desktop and mobile web UI for Claude Code, Cursor CLI, Codex, Gemini CLI, Qwen Code, and OpenCode.",
5
5
  "type": "module",
6
6
  "main": "dist-server/server/index.js",
@@ -87,15 +87,44 @@ export class OpencodeSessionsProvider implements IProviderSessions {
87
87
  }
88
88
 
89
89
  if (raw.type === 'error') {
90
+ // OpenCode `--format json` emits errors as
91
+ // { type:"error", error:{ name, data:{ message, statusCode?, isRetryable? } } }
92
+ // — `error` is always an object wrapper, never a plain string. Older
93
+ // builds put the message at `error.message`; current builds nest it
94
+ // under `error.data.message`. Map known error class names to friendly
95
+ // copy so the user gets actionable text instead of a class identifier.
90
96
  const rawErr = raw.error ?? raw.message;
91
- const content = typeof rawErr === 'string'
92
- ? rawErr
93
- : rawErr && typeof rawErr === 'object'
94
- ? (() => {
95
- try { return JSON.stringify(rawErr); }
96
- catch { return 'Unknown OpenCode streaming error'; }
97
- })()
98
- : 'Unknown OpenCode streaming error';
97
+ const errObj = rawErr && typeof rawErr === 'object' ? rawErr as Record<string, unknown> : null;
98
+ const data = errObj && typeof errObj.data === 'object' && errObj.data
99
+ ? errObj.data as Record<string, unknown>
100
+ : null;
101
+ const dataMessage = data && typeof data.message === 'string' ? data.message : null;
102
+ const errMessage = errObj && typeof errObj.message === 'string' ? errObj.message : null;
103
+ const errName = errObj && typeof errObj.name === 'string' ? errObj.name : null;
104
+ const statusCode = data && typeof data.statusCode === 'number' ? data.statusCode : null;
105
+
106
+ let content: string;
107
+ if (typeof rawErr === 'string') {
108
+ content = rawErr;
109
+ } else if (dataMessage) {
110
+ content = dataMessage;
111
+ } else if (errMessage) {
112
+ content = errMessage;
113
+ } else if (errName) {
114
+ const friendly: Record<string, string> = {
115
+ ProviderModelNotFoundError: 'Model not found. Open Settings → Agents → OpenCode and pick a model from the live catalog (or run `opencode models --refresh`).',
116
+ ProviderInitError: 'OpenCode provider config is invalid. Try `opencode auth login` or remove `~/.local/share/opencode/auth.json` and re-authenticate.',
117
+ MessageOutputLengthError: 'OpenCode response was truncated by the model output cap. Try shortening the prompt or pick a model with a larger output limit.',
118
+ AI_APICallError: 'OpenCode upstream API call failed. Clearing `~/.cache/opencode` and retrying usually fixes this.',
119
+ APIError: statusCode === 429
120
+ ? 'OpenCode hit a rate limit (429). Wait a few seconds and try again, or switch to a different model.'
121
+ : 'OpenCode upstream API error.',
122
+ };
123
+ content = friendly[errName] ?? errName;
124
+ } else {
125
+ try { content = JSON.stringify(rawErr); }
126
+ catch { content = 'Unknown OpenCode streaming error'; }
127
+ }
99
128
  return [createNormalizedMessage({
100
129
  id: baseId,
101
130
  sessionId,
@@ -275,17 +275,31 @@ async function spawnOpencode(command, options = {}, ws) {
275
275
  });
276
276
 
277
277
  opencodeProcess.stderr.on('data', (data) => {
278
- const errorMsg = data.toString();
278
+ const rawMsg = data.toString();
279
279
  // Suppress known cosmetic noise.
280
- if (errorMsg.includes('[DEP0040]') ||
281
- errorMsg.includes('DeprecationWarning') ||
282
- errorMsg.includes('--trace-deprecation') ||
283
- errorMsg.includes('punycode')) {
280
+ if (rawMsg.includes('[DEP0040]') ||
281
+ rawMsg.includes('DeprecationWarning') ||
282
+ rawMsg.includes('--trace-deprecation') ||
283
+ rawMsg.includes('punycode')) {
284
284
  return;
285
285
  }
286
286
 
287
+ // Pre-stream validation errors land on stderr as plain text BEFORE
288
+ // the JSON event stream opens (e.g. "Model must be in the format
289
+ // provider/model"). Map the common ones to actionable copy.
290
+ let friendly = rawMsg.trim();
291
+ if (/Model must be in the format/i.test(friendly)) {
292
+ friendly = 'Model id must use the `provider/model` format (e.g. `opencode/big-pickle` or `anthropic/claude-sonnet-4-5`). Pick one from Settings → Agents → OpenCode → Model.';
293
+ } else if (/ProviderModelNotFoundError/.test(friendly)) {
294
+ friendly = 'OpenCode does not recognize the selected model. Run `opencode models --refresh` or pick a different model from the picker.';
295
+ } else if (/ProviderInitError/.test(friendly)) {
296
+ friendly = 'OpenCode provider config is invalid. Try `opencode auth login`, or clear `~/.local/share/opencode/auth.json` and re-authenticate.';
297
+ } else if (/AI_APICallError/.test(friendly)) {
298
+ friendly = 'OpenCode upstream call failed. Clearing `~/.cache/opencode` and retrying usually resolves this.';
299
+ }
300
+
287
301
  const socketSessionId = typeof ws.getSessionId === 'function' ? ws.getSessionId() : (capturedSessionId || sessionId);
288
- ws.send(createNormalizedMessage({ kind: 'error', content: errorMsg, sessionId: socketSessionId, provider: 'opencode' }));
302
+ ws.send(createNormalizedMessage({ kind: 'error', content: friendly, sessionId: socketSessionId, provider: 'opencode' }));
289
303
  });
290
304
 
291
305
  opencodeProcess.on('close', async (code) => {
@@ -346,10 +360,13 @@ async function spawnOpencode(command, options = {}, ws) {
346
360
  const installed = await providerAuthService.isProviderInstalled('opencode');
347
361
  const errorContent = !installed
348
362
  ? 'OpenCode CLI is not installed. Install it from the Settings → Agents → OpenCode tab, or run: npm install -g opencode-ai'
349
- : error.message;
363
+ : (error?.message || String(error));
350
364
 
351
365
  const errorSessionId = typeof ws.getSessionId === 'function' ? ws.getSessionId() : finalSessionId;
352
366
  ws.send(createNormalizedMessage({ kind: 'error', content: errorContent, sessionId: errorSessionId, provider: 'opencode' }));
367
+ // Always emit `complete` so the UI's "Processing..." state clears
368
+ // even when spawn fails (ENOENT, EACCES) and `close` never fires.
369
+ ws.send(createNormalizedMessage({ kind: 'complete', exitCode: 1, isNewSession: !sessionId && !!command, sessionId: errorSessionId, provider: 'opencode' }));
353
370
  notifyTerminalState({ error });
354
371
 
355
372
  reject(error);
@@ -45,25 +45,33 @@ class OpencodeResponseHandler {
45
45
  return;
46
46
  }
47
47
 
48
- // OpenCode emits both `message` events and `part` events that compose
49
- // a single assistant turn. We handle whichever shape lands.
50
- if (event.type === 'message' && event.role === 'assistant') {
48
+ // OpenCode emits assistant text as either a top-level `text` event
49
+ // (current `--format json` shape: `{ type: "text", part: { text } }`)
50
+ // or as `message`/`part` legacy shapes from earlier builds. Cover all
51
+ // three so we don't drop tokens on a CLI version we haven't matched.
52
+ if (event.type === 'text' && event.part && typeof event.part.text === 'string') {
53
+ if (this.onContentFragment && event.part.text) this.onContentFragment(event.part.text);
54
+ } else if (event.type === 'message' && event.role === 'assistant') {
51
55
  const content = event.content || event.text || '';
52
56
  if (this.onContentFragment && content) this.onContentFragment(content);
53
57
  } else if (event.type === 'part' && event.part_type === 'text') {
54
58
  const content = event.text || event.content || '';
55
59
  if (this.onContentFragment && content) this.onContentFragment(content);
56
60
  } else if (event.type === 'tool_use' || event.type === 'tool-use' || event.type === 'tool.start') {
61
+ // Tool-use shape on `--format json`: `{ type:"tool_use", part:{ callID, tool, state:{ input } } }`
62
+ const part = event.part || event;
57
63
  if (this.onToolUse) this.onToolUse({
58
- tool_id: event.tool_id || event.id,
59
- tool_name: event.tool_name || event.name,
60
- parameters: event.parameters || event.input || {},
64
+ tool_id: part.callID || part.id || event.tool_id,
65
+ tool_name: part.tool || part.name || event.tool_name,
66
+ parameters: part.state?.input || part.input || event.parameters || {},
61
67
  });
62
68
  } else if (event.type === 'tool_result' || event.type === 'tool-result' || event.type === 'tool.end') {
69
+ const part = event.part || event;
70
+ const state = part.state || {};
63
71
  if (this.onToolResult) this.onToolResult({
64
- tool_id: event.tool_id || event.id,
65
- output: event.output ?? event.result ?? '',
66
- status: event.status || (event.isError ? 'error' : 'ok'),
72
+ tool_id: part.callID || part.id || event.tool_id,
73
+ output: state.output ?? part.output ?? event.output ?? event.result ?? '',
74
+ status: state.status || event.status || (event.isError ? 'error' : 'ok'),
67
75
  });
68
76
  }
69
77