@pixelbyte-software/pixcode 1.33.5 → 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.
- package/dist/assets/{index-B2vlFsqI.js → index-D6ErCuvV.js} +49 -49
- package/dist/index.html +1 -1
- package/dist-server/server/opencode-cli.js +4 -1
- package/dist-server/server/opencode-cli.js.map +1 -1
- package/dist-server/server/projects.js +111 -1
- package/dist-server/server/projects.js.map +1 -1
- package/dist-server/server/qwen-code-cli.js +4 -1
- package/dist-server/server/qwen-code-cli.js.map +1 -1
- package/dist-server/server/services/provider-models.js +55 -5
- package/dist-server/server/services/provider-models.js.map +1 -1
- package/package.json +1 -1
- package/server/opencode-cli.js +4 -1
- package/server/projects.js +112 -0
- package/server/qwen-code-cli.js +4 -1
- package/server/services/provider-models.js +50 -5
|
@@ -109,8 +109,18 @@ async function discoverOpenAiCompat(apiKey, baseUrl, fallbackBase) {
|
|
|
109
109
|
const response = await fetch(endpoint, {
|
|
110
110
|
headers: { Authorization: `Bearer ${apiKey}` },
|
|
111
111
|
});
|
|
112
|
-
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
|
+
}
|
|
113
122
|
throw new Error(`${endpoint} returned ${response.status}`);
|
|
123
|
+
}
|
|
114
124
|
const data = await response.json();
|
|
115
125
|
const rows = Array.isArray(data?.data) ? data.data : [];
|
|
116
126
|
return rows
|
|
@@ -121,6 +131,33 @@ async function discoverOpenAiCompat(apiKey, baseUrl, fallbackBase) {
|
|
|
121
131
|
source: 'api',
|
|
122
132
|
}));
|
|
123
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
|
+
}
|
|
124
161
|
/**
|
|
125
162
|
* OpenCode is multi-provider — its "model" picker isn't a single API list,
|
|
126
163
|
* it's the union of every provider it can route to (Anthropic, OpenAI,
|
|
@@ -293,9 +330,16 @@ export async function getProviderModels(provider, opts = {}) {
|
|
|
293
330
|
const apiKey = creds?.apiKey || envKey;
|
|
294
331
|
const baseUrl = creds?.baseUrl || envBase || undefined;
|
|
295
332
|
if (!apiKey) {
|
|
296
|
-
//
|
|
297
|
-
//
|
|
298
|
-
|
|
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
|
+
}
|
|
299
343
|
}
|
|
300
344
|
else {
|
|
301
345
|
try {
|
|
@@ -313,7 +357,13 @@ export async function getProviderModels(provider, opts = {}) {
|
|
|
313
357
|
}
|
|
314
358
|
}
|
|
315
359
|
catch (err) {
|
|
316
|
-
|
|
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
|
+
}
|
|
317
367
|
}
|
|
318
368
|
}
|
|
319
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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pixelbyte-software/pixcode",
|
|
3
|
-
"version": "1.33.
|
|
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",
|
package/server/opencode-cli.js
CHANGED
|
@@ -360,10 +360,13 @@ async function spawnOpencode(command, options = {}, ws) {
|
|
|
360
360
|
const installed = await providerAuthService.isProviderInstalled('opencode');
|
|
361
361
|
const errorContent = !installed
|
|
362
362
|
? 'OpenCode CLI is not installed. Install it from the Settings → Agents → OpenCode tab, or run: npm install -g opencode-ai'
|
|
363
|
-
: error
|
|
363
|
+
: (error?.message || String(error));
|
|
364
364
|
|
|
365
365
|
const errorSessionId = typeof ws.getSessionId === 'function' ? ws.getSessionId() : finalSessionId;
|
|
366
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' }));
|
|
367
370
|
notifyTerminalState({ error });
|
|
368
371
|
|
|
369
372
|
reject(error);
|
package/server/projects.js
CHANGED
|
@@ -699,6 +699,7 @@ async function getProjects(progressCallback = null) {
|
|
|
699
699
|
sessions: [],
|
|
700
700
|
geminiSessions: [],
|
|
701
701
|
qwenSessions: [],
|
|
702
|
+
opencodeSessions: [],
|
|
702
703
|
sessionMeta: {
|
|
703
704
|
hasMore: false,
|
|
704
705
|
total: 0
|
|
@@ -768,6 +769,14 @@ async function getProjects(progressCallback = null) {
|
|
|
768
769
|
}
|
|
769
770
|
applyCustomSessionNames(project.qwenSessions, 'qwen');
|
|
770
771
|
|
|
772
|
+
try {
|
|
773
|
+
project.opencodeSessions = await getOpencodeCliSessions(actualProjectDir);
|
|
774
|
+
} catch (e) {
|
|
775
|
+
console.warn(`Could not load OpenCode sessions for project ${entry.name}:`, e.message);
|
|
776
|
+
project.opencodeSessions = [];
|
|
777
|
+
}
|
|
778
|
+
applyCustomSessionNames(project.opencodeSessions, 'opencode');
|
|
779
|
+
|
|
771
780
|
try {
|
|
772
781
|
const taskMasterResult = await detectTaskMasterFolder(actualProjectDir);
|
|
773
782
|
project.taskmaster = {
|
|
@@ -831,6 +840,7 @@ async function getProjects(progressCallback = null) {
|
|
|
831
840
|
sessions: [],
|
|
832
841
|
geminiSessions: [],
|
|
833
842
|
qwenSessions: [],
|
|
843
|
+
opencodeSessions: [],
|
|
834
844
|
sessionMeta: {
|
|
835
845
|
hasMore: false,
|
|
836
846
|
total: 0
|
|
@@ -876,6 +886,13 @@ async function getProjects(progressCallback = null) {
|
|
|
876
886
|
}
|
|
877
887
|
applyCustomSessionNames(project.geminiSessions, 'gemini');
|
|
878
888
|
|
|
889
|
+
try {
|
|
890
|
+
project.opencodeSessions = await getOpencodeCliSessions(actualProjectDir);
|
|
891
|
+
} catch (e) {
|
|
892
|
+
console.warn(`Could not load OpenCode sessions for tracked project ${projectName}:`, e.message);
|
|
893
|
+
}
|
|
894
|
+
applyCustomSessionNames(project.opencodeSessions, 'opencode');
|
|
895
|
+
|
|
879
896
|
try {
|
|
880
897
|
const taskMasterResult = await detectTaskMasterFolder(actualProjectDir);
|
|
881
898
|
|
|
@@ -2798,6 +2815,100 @@ async function getQwenCliSessions(projectPath, options = {}) {
|
|
|
2798
2815
|
);
|
|
2799
2816
|
}
|
|
2800
2817
|
|
|
2818
|
+
/**
|
|
2819
|
+
* OpenCode session enumerator. Walks `~/.local/share/opencode/project/*` (the
|
|
2820
|
+
* XDG data dir OpenCode uses on every platform — yes, including Windows under
|
|
2821
|
+
* the user profile) and surfaces every session whose `directory` field matches
|
|
2822
|
+
* the project root we're listing. `<projectID>` segments are git-root commit
|
|
2823
|
+
* hashes for git repos and the literal "global" for non-git dirs, so we
|
|
2824
|
+
* don't try to be clever about the slug — we just walk every project bucket
|
|
2825
|
+
* and filter by the stored `directory`.
|
|
2826
|
+
*
|
|
2827
|
+
* This is best-effort: when OpenCode hasn't written anything yet (brand-new
|
|
2828
|
+
* project, no chats sent) the data dir is missing and we return [] without
|
|
2829
|
+
* surfacing an error to the caller.
|
|
2830
|
+
*/
|
|
2831
|
+
async function getOpencodeCliSessions(projectPath) {
|
|
2832
|
+
const normalizedProjectPath = normalizeComparablePath(projectPath);
|
|
2833
|
+
if (!normalizedProjectPath) return [];
|
|
2834
|
+
|
|
2835
|
+
const sessions = [];
|
|
2836
|
+
const opencodeDataDir = path.join(os.homedir(), '.local', 'share', 'opencode', 'project');
|
|
2837
|
+
|
|
2838
|
+
let projectBuckets;
|
|
2839
|
+
try {
|
|
2840
|
+
projectBuckets = await fs.readdir(opencodeDataDir);
|
|
2841
|
+
} catch {
|
|
2842
|
+
return [];
|
|
2843
|
+
}
|
|
2844
|
+
|
|
2845
|
+
for (const bucket of projectBuckets) {
|
|
2846
|
+
const sessionRoot = path.join(opencodeDataDir, bucket, 'storage', 'session');
|
|
2847
|
+
let projectIdDirs;
|
|
2848
|
+
try {
|
|
2849
|
+
projectIdDirs = await fs.readdir(sessionRoot);
|
|
2850
|
+
} catch {
|
|
2851
|
+
continue;
|
|
2852
|
+
}
|
|
2853
|
+
|
|
2854
|
+
for (const pidDir of projectIdDirs) {
|
|
2855
|
+
const dir = path.join(sessionRoot, pidDir);
|
|
2856
|
+
let sessionFiles;
|
|
2857
|
+
try {
|
|
2858
|
+
sessionFiles = await fs.readdir(dir);
|
|
2859
|
+
} catch {
|
|
2860
|
+
continue;
|
|
2861
|
+
}
|
|
2862
|
+
|
|
2863
|
+
for (const file of sessionFiles) {
|
|
2864
|
+
if (!file.startsWith('ses_') || !file.endsWith('.json')) continue;
|
|
2865
|
+
try {
|
|
2866
|
+
const data = await fs.readFile(path.join(dir, file), 'utf8');
|
|
2867
|
+
const sess = JSON.parse(data);
|
|
2868
|
+
const sessDir = typeof sess?.directory === 'string'
|
|
2869
|
+
? normalizeComparablePath(sess.directory)
|
|
2870
|
+
: null;
|
|
2871
|
+
if (!sessDir || sessDir !== normalizedProjectPath) continue;
|
|
2872
|
+
|
|
2873
|
+
const id = typeof sess?.id === 'string' ? sess.id : file.replace(/\.json$/, '');
|
|
2874
|
+
sessions.push({
|
|
2875
|
+
id,
|
|
2876
|
+
summary: sess?.title || 'OpenCode Session',
|
|
2877
|
+
messageCount: typeof sess?.messageCount === 'number' ? sess.messageCount : 0,
|
|
2878
|
+
lastActivity: sess?.time?.updated || sess?.time?.created || null,
|
|
2879
|
+
provider: 'opencode',
|
|
2880
|
+
});
|
|
2881
|
+
} catch {
|
|
2882
|
+
// Skip unreadable session files silently — one corrupt file
|
|
2883
|
+
// shouldn't blank the whole list.
|
|
2884
|
+
continue;
|
|
2885
|
+
}
|
|
2886
|
+
}
|
|
2887
|
+
}
|
|
2888
|
+
}
|
|
2889
|
+
|
|
2890
|
+
// Merge in live sessions held by the in-memory sessionManager so a fresh
|
|
2891
|
+
// chat that hasn't been flushed to disk yet still shows in the sidebar.
|
|
2892
|
+
try {
|
|
2893
|
+
const liveSessions = sessionManager.getProjectSessions(projectPath) || [];
|
|
2894
|
+
for (const s of liveSessions) {
|
|
2895
|
+
if (!s.id || !s.id.startsWith('opencode_')) continue;
|
|
2896
|
+
if (sessions.some((existing) => existing.id === s.id)) continue;
|
|
2897
|
+
sessions.push({
|
|
2898
|
+
id: s.id,
|
|
2899
|
+
summary: s.summary || s.title || 'OpenCode Session',
|
|
2900
|
+
messageCount: s.messageCount || 0,
|
|
2901
|
+
lastActivity: s.lastActivity || s.createdAt || null,
|
|
2902
|
+
provider: 'opencode',
|
|
2903
|
+
});
|
|
2904
|
+
}
|
|
2905
|
+
} catch { /* sessionManager not initialised yet — ignore */ }
|
|
2906
|
+
|
|
2907
|
+
return sessions.sort((a, b) =>
|
|
2908
|
+
new Date(b.lastActivity || 0) - new Date(a.lastActivity || 0)
|
|
2909
|
+
);
|
|
2910
|
+
}
|
|
2911
|
+
|
|
2801
2912
|
async function getQwenCliSessionMessages(sessionId) {
|
|
2802
2913
|
const qwenTmpDir = path.join(os.homedir(), '.qwen', 'tmp');
|
|
2803
2914
|
let projectDirs;
|
|
@@ -2989,5 +3100,6 @@ export {
|
|
|
2989
3100
|
getGeminiCliSessionMessages,
|
|
2990
3101
|
getQwenCliSessions,
|
|
2991
3102
|
getQwenCliSessionMessages,
|
|
3103
|
+
getOpencodeCliSessions,
|
|
2992
3104
|
searchConversations
|
|
2993
3105
|
};
|
package/server/qwen-code-cli.js
CHANGED
|
@@ -335,10 +335,13 @@ async function spawnQwen(command, options = {}, ws) {
|
|
|
335
335
|
const installed = await providerAuthService.isProviderInstalled('qwen');
|
|
336
336
|
const errorContent = !installed
|
|
337
337
|
? 'Qwen Code CLI is not installed. Install it first: npm install -g @qwen-code/qwen-code'
|
|
338
|
-
: error
|
|
338
|
+
: (error?.message || String(error));
|
|
339
339
|
|
|
340
340
|
const errorSessionId = typeof ws.getSessionId === 'function' ? ws.getSessionId() : finalSessionId;
|
|
341
341
|
ws.send(createNormalizedMessage({ kind: 'error', content: errorContent, sessionId: errorSessionId, provider: 'qwen' }));
|
|
342
|
+
// Always emit `complete` so the UI's "Processing..." state clears
|
|
343
|
+
// even when spawn fails (ENOENT, EACCES) and `close` never fires.
|
|
344
|
+
ws.send(createNormalizedMessage({ kind: 'complete', exitCode: 1, isNewSession: !sessionId && !!command, sessionId: errorSessionId, provider: 'qwen' }));
|
|
342
345
|
notifyTerminalState({ error });
|
|
343
346
|
|
|
344
347
|
reject(error);
|
|
@@ -113,7 +113,18 @@ async function discoverOpenAiCompat(apiKey, baseUrl, fallbackBase) {
|
|
|
113
113
|
const response = await fetch(endpoint, {
|
|
114
114
|
headers: { Authorization: `Bearer ${apiKey}` },
|
|
115
115
|
});
|
|
116
|
-
if (!response.ok)
|
|
116
|
+
if (!response.ok) {
|
|
117
|
+
// 401 specifically means our key is bad — but for codex/qwen/etc.
|
|
118
|
+
// users often log in via OAuth (`codex login`, `qwen auth`) which
|
|
119
|
+
// doesn't expose an OpenAI-compatible API key. Surface a clean
|
|
120
|
+
// "no live discovery available" rather than a scary 401 trace.
|
|
121
|
+
if (response.status === 401) {
|
|
122
|
+
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`).');
|
|
123
|
+
err.code = 'OAUTH_NO_API_KEY';
|
|
124
|
+
throw err;
|
|
125
|
+
}
|
|
126
|
+
throw new Error(`${endpoint} returned ${response.status}`);
|
|
127
|
+
}
|
|
117
128
|
const data = await response.json();
|
|
118
129
|
const rows = Array.isArray(data?.data) ? data.data : [];
|
|
119
130
|
return rows
|
|
@@ -125,6 +136,28 @@ async function discoverOpenAiCompat(apiKey, baseUrl, fallbackBase) {
|
|
|
125
136
|
}));
|
|
126
137
|
}
|
|
127
138
|
|
|
139
|
+
/**
|
|
140
|
+
* Detect whether the user is authenticated via the provider's OAuth flow
|
|
141
|
+
* (codex login / qwen auth) so we can skip live model discovery silently
|
|
142
|
+
* — those flows don't surface a usable OpenAI-compatible API key, and the
|
|
143
|
+
* SDK calls the upstream APIs through its own internal auth path.
|
|
144
|
+
*/
|
|
145
|
+
async function hasProviderOauthAuth(provider) {
|
|
146
|
+
if (provider === 'codex') {
|
|
147
|
+
try {
|
|
148
|
+
await fs.access(path.join(os.homedir(), '.codex', 'auth.json'));
|
|
149
|
+
return true;
|
|
150
|
+
} catch { return false; }
|
|
151
|
+
}
|
|
152
|
+
if (provider === 'qwen') {
|
|
153
|
+
try {
|
|
154
|
+
await fs.access(path.join(os.homedir(), '.qwen', 'oauth_creds.json'));
|
|
155
|
+
return true;
|
|
156
|
+
} catch { return false; }
|
|
157
|
+
}
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
|
|
128
161
|
/**
|
|
129
162
|
* OpenCode is multi-provider — its "model" picker isn't a single API list,
|
|
130
163
|
* it's the union of every provider it can route to (Anthropic, OpenAI,
|
|
@@ -299,9 +332,16 @@ export async function getProviderModels(provider, opts = {}) {
|
|
|
299
332
|
const baseUrl = creds?.baseUrl || envBase || undefined;
|
|
300
333
|
|
|
301
334
|
if (!apiKey) {
|
|
302
|
-
//
|
|
303
|
-
//
|
|
304
|
-
|
|
335
|
+
// Codex and Qwen support OAuth (`codex login`, `qwen auth`) which
|
|
336
|
+
// DOESN'T expose a usable API key — the SDK auths against the
|
|
337
|
+
// upstream API directly. Skip the discovery step silently in that
|
|
338
|
+
// case; the static catalog is the right answer.
|
|
339
|
+
const oauthOnly = await hasProviderOauthAuth(provider);
|
|
340
|
+
if (!oauthOnly) {
|
|
341
|
+
// Be explicit so the UI can surface a useful hint rather than just
|
|
342
|
+
// showing the static baseline with no reason given.
|
|
343
|
+
error = `No ${provider} API key configured. Save one in Settings > Agents > API Key, or sign in via the CLI (e.g. \`codex login\`).`;
|
|
344
|
+
}
|
|
305
345
|
} else {
|
|
306
346
|
try {
|
|
307
347
|
if (provider === 'claude') {
|
|
@@ -318,7 +358,12 @@ export async function getProviderModels(provider, opts = {}) {
|
|
|
318
358
|
liveModels = await discoverGoogle(apiKey);
|
|
319
359
|
}
|
|
320
360
|
} catch (err) {
|
|
321
|
-
|
|
361
|
+
// OAuth users get a clean message instead of a raw 401 stack.
|
|
362
|
+
if (err?.code === 'OAUTH_NO_API_KEY') {
|
|
363
|
+
error = err.message;
|
|
364
|
+
} else {
|
|
365
|
+
error = err?.message || String(err);
|
|
366
|
+
}
|
|
322
367
|
}
|
|
323
368
|
}
|
|
324
369
|
|