openai-ws-opencode 0.1.3 → 0.1.5
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/README.md +1 -1
- package/bin/setup.js +143 -6
- package/dist/auth/oauth.d.ts.map +1 -1
- package/dist/auth/oauth.js +12 -18
- package/dist/auth/oauth.js.map +1 -1
- package/dist/constants.d.ts +0 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +0 -1
- package/dist/constants.js.map +1 -1
- package/dist/models/resolve.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -101,7 +101,7 @@ Then point OpenCode at the packed tarball through the plugin array:
|
|
|
101
101
|
|
|
102
102
|
```jsonc
|
|
103
103
|
{
|
|
104
|
-
"plugin": ["openai-ws-opencode@file:/absolute/path/openai-ws-opencode-0.1.
|
|
104
|
+
"plugin": ["openai-ws-opencode@file:/absolute/path/openai-ws-opencode-0.1.5.tgz"]
|
|
105
105
|
}
|
|
106
106
|
```
|
|
107
107
|
|
package/bin/setup.js
CHANGED
|
@@ -166,20 +166,28 @@ function applyJsonPatch(text, jsonPath, value) {
|
|
|
166
166
|
}));
|
|
167
167
|
}
|
|
168
168
|
function pluginPackageName(specifier) {
|
|
169
|
-
if (specifier.startsWith("file
|
|
170
|
-
|
|
169
|
+
if (specifier.startsWith("file:")) {
|
|
170
|
+
const filePath = specifier.startsWith("file://") ? new URL(specifier).pathname : specifier.slice("file:".length);
|
|
171
|
+
const base = path.basename(filePath);
|
|
172
|
+
if (base === PACKAGE_NAME || base.startsWith(`${PACKAGE_NAME}-`) || base.startsWith(`${PACKAGE_NAME}@`))
|
|
173
|
+
return PACKAGE_NAME;
|
|
174
|
+
return base.replace(/(?:\.tgz|\.[cm]?[jt]s)$/, "");
|
|
175
|
+
}
|
|
171
176
|
const lastAt = specifier.lastIndexOf("@");
|
|
172
177
|
return lastAt > 0 ? specifier.slice(0, lastAt) : specifier;
|
|
173
178
|
}
|
|
174
|
-
function patchConfigText(input, pluginSpec = DEFAULT_PLUGIN_SPEC) {
|
|
179
|
+
function patchConfigText(input, pluginSpec = DEFAULT_PLUGIN_SPEC, replacePluginSpec = false) {
|
|
175
180
|
let text = input.trim() ? input : "{}";
|
|
176
181
|
const config = parse(text) ?? {};
|
|
177
182
|
if (!config.$schema)
|
|
178
183
|
text = applyJsonPatch(text, ["$schema"], SCHEMA);
|
|
179
184
|
const current = (parse(text) ?? {}).plugin;
|
|
180
185
|
const plugins = Array.isArray(current) ? [...current] : [];
|
|
181
|
-
|
|
186
|
+
const existingPluginIndex = plugins.findIndex((plugin) => typeof plugin === "string" && pluginPackageName(plugin) === PACKAGE_NAME);
|
|
187
|
+
if (existingPluginIndex === -1) {
|
|
182
188
|
plugins.push(pluginSpec);
|
|
189
|
+
} else if (replacePluginSpec) {
|
|
190
|
+
plugins[existingPluginIndex] = pluginSpec;
|
|
183
191
|
}
|
|
184
192
|
text = applyJsonPatch(text, ["plugin"], plugins);
|
|
185
193
|
const next = parse(text) ?? {};
|
|
@@ -192,6 +200,123 @@ function patchConfigText(input, pluginSpec = DEFAULT_PLUGIN_SPEC) {
|
|
|
192
200
|
`
|
|
193
201
|
}));
|
|
194
202
|
}
|
|
203
|
+
function isNotFound(error) {
|
|
204
|
+
return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
|
|
205
|
+
}
|
|
206
|
+
function cacheHomePath(cacheHome = process.env.XDG_CACHE_HOME ?? path.join(os.homedir(), ".cache")) {
|
|
207
|
+
return cacheHome;
|
|
208
|
+
}
|
|
209
|
+
function openCodeLatestCachePath(cacheHome) {
|
|
210
|
+
return path.join(cacheHomePath(cacheHome), "opencode", "packages", `${PACKAGE_NAME}@latest`);
|
|
211
|
+
}
|
|
212
|
+
async function pathExists(file) {
|
|
213
|
+
try {
|
|
214
|
+
await fs.access(file);
|
|
215
|
+
return true;
|
|
216
|
+
} catch (error) {
|
|
217
|
+
if (isNotFound(error))
|
|
218
|
+
return false;
|
|
219
|
+
throw error;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
async function readPackageVersion(packageJsonPath) {
|
|
223
|
+
try {
|
|
224
|
+
const text = await fs.readFile(packageJsonPath, "utf8");
|
|
225
|
+
const parsed = JSON.parse(text);
|
|
226
|
+
return typeof parsed.version === "string" ? parsed.version : undefined;
|
|
227
|
+
} catch (error) {
|
|
228
|
+
if (isNotFound(error))
|
|
229
|
+
return;
|
|
230
|
+
throw error;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
async function setupPackageVersion() {
|
|
234
|
+
const packageJsonPath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "package.json");
|
|
235
|
+
const version = await readPackageVersion(packageJsonPath);
|
|
236
|
+
if (!version)
|
|
237
|
+
throw new Error(`Unable to read setup package version from ${packageJsonPath}`);
|
|
238
|
+
return version;
|
|
239
|
+
}
|
|
240
|
+
function semverParts(version) {
|
|
241
|
+
const match = /^(\d+)\.(\d+)\.(\d+)/.exec(version);
|
|
242
|
+
if (!match)
|
|
243
|
+
return;
|
|
244
|
+
return [Number(match[1]), Number(match[2]), Number(match[3])];
|
|
245
|
+
}
|
|
246
|
+
function compareSemver(left, right) {
|
|
247
|
+
const leftParts = semverParts(left);
|
|
248
|
+
const rightParts = semverParts(right);
|
|
249
|
+
if (!leftParts || !rightParts)
|
|
250
|
+
return 0;
|
|
251
|
+
for (let index = 0;index < leftParts.length; index++) {
|
|
252
|
+
if (leftParts[index] !== rightParts[index])
|
|
253
|
+
return leftParts[index] < rightParts[index] ? -1 : 1;
|
|
254
|
+
}
|
|
255
|
+
return 0;
|
|
256
|
+
}
|
|
257
|
+
var SOURCE_EXTENSIONS = new Set([".cjs", ".js", ".mjs", ".ts"]);
|
|
258
|
+
var BAD_OAUTH_PORT = /\bOAUTH_PORT\b\s*[:=]\s*1456\b/;
|
|
259
|
+
var BAD_CODEX_ORIGINATOR = /\bCODEX_ORIGINATOR\b\s*[:=]\s*["']codex_cli_rs["']/;
|
|
260
|
+
async function hasKnownBadConstants(packageRoot) {
|
|
261
|
+
const directories = [packageRoot];
|
|
262
|
+
let checkedFiles = 0;
|
|
263
|
+
while (directories.length > 0 && checkedFiles < 500) {
|
|
264
|
+
const current = directories.pop();
|
|
265
|
+
let entries;
|
|
266
|
+
try {
|
|
267
|
+
entries = await fs.readdir(current, { withFileTypes: true });
|
|
268
|
+
} catch (error) {
|
|
269
|
+
if (isNotFound(error))
|
|
270
|
+
continue;
|
|
271
|
+
throw error;
|
|
272
|
+
}
|
|
273
|
+
for (const entry of entries) {
|
|
274
|
+
const entryPath = path.join(current, entry.name);
|
|
275
|
+
if (entry.isDirectory()) {
|
|
276
|
+
if (entry.name !== "node_modules" && entry.name !== ".git")
|
|
277
|
+
directories.push(entryPath);
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
if (!entry.isFile() || !SOURCE_EXTENSIONS.has(path.extname(entry.name)))
|
|
281
|
+
continue;
|
|
282
|
+
checkedFiles += 1;
|
|
283
|
+
const source = await fs.readFile(entryPath, "utf8");
|
|
284
|
+
if (BAD_OAUTH_PORT.test(source) || BAD_CODEX_ORIGINATOR.test(source))
|
|
285
|
+
return true;
|
|
286
|
+
if (checkedFiles >= 500)
|
|
287
|
+
break;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return false;
|
|
291
|
+
}
|
|
292
|
+
function timestampForPath(date) {
|
|
293
|
+
return date.toISOString().replace(/[:.]/g, "-");
|
|
294
|
+
}
|
|
295
|
+
async function staleDestination(cachePath, now) {
|
|
296
|
+
const base = `${cachePath}.stale-${timestampForPath(now)}`;
|
|
297
|
+
let candidate = base;
|
|
298
|
+
let suffix = 1;
|
|
299
|
+
while (await pathExists(candidate)) {
|
|
300
|
+
candidate = `${base}-${suffix}`;
|
|
301
|
+
suffix += 1;
|
|
302
|
+
}
|
|
303
|
+
return candidate;
|
|
304
|
+
}
|
|
305
|
+
async function repairStaleOpenCodeLatestCache(options = {}) {
|
|
306
|
+
const cachePath = openCodeLatestCachePath(options.cacheHome);
|
|
307
|
+
if (!await pathExists(cachePath))
|
|
308
|
+
return { cachePath, repaired: false };
|
|
309
|
+
const packageRoot = path.join(cachePath, "node_modules", PACKAGE_NAME);
|
|
310
|
+
const cachedVersion = await readPackageVersion(path.join(packageRoot, "package.json"));
|
|
311
|
+
const currentVersion = options.packageVersion ?? await setupPackageVersion();
|
|
312
|
+
const staleVersion = cachedVersion ? compareSemver(cachedVersion, currentVersion) < 0 : false;
|
|
313
|
+
const staleConstants = await hasKnownBadConstants(packageRoot);
|
|
314
|
+
if (!staleVersion && !staleConstants)
|
|
315
|
+
return { cachePath, repaired: false };
|
|
316
|
+
const movedTo = await staleDestination(cachePath, options.now?.() ?? new Date);
|
|
317
|
+
await fs.rename(cachePath, movedTo);
|
|
318
|
+
return { cachePath, movedTo, repaired: true };
|
|
319
|
+
}
|
|
195
320
|
async function setupOpenCodeConfig(options = {}) {
|
|
196
321
|
const file = targetPath(options);
|
|
197
322
|
let existing = "";
|
|
@@ -201,11 +326,19 @@ async function setupOpenCodeConfig(options = {}) {
|
|
|
201
326
|
if (error?.code !== "ENOENT")
|
|
202
327
|
throw error;
|
|
203
328
|
}
|
|
204
|
-
const updated = patchConfigText(existing, options.pluginSpec ?? DEFAULT_PLUGIN_SPEC);
|
|
329
|
+
const updated = patchConfigText(existing, options.pluginSpec ?? DEFAULT_PLUGIN_SPEC, Boolean(options.pluginSpec));
|
|
205
330
|
await fs.mkdir(path.dirname(file), { recursive: true });
|
|
206
331
|
await fs.writeFile(file, updated.endsWith(`
|
|
207
332
|
`) ? updated : `${updated}
|
|
208
333
|
`, "utf8");
|
|
334
|
+
if (options.cacheRepair !== false) {
|
|
335
|
+
try {
|
|
336
|
+
await repairStaleOpenCodeLatestCache();
|
|
337
|
+
} catch (error) {
|
|
338
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
339
|
+
console.warn(`Warning: could not repair OpenCode cache at ${openCodeLatestCachePath()}. Remove it manually if OpenCode keeps loading stale plugin code. ${message}`);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
209
342
|
return file;
|
|
210
343
|
}
|
|
211
344
|
function parseArgs(argv) {
|
|
@@ -220,8 +353,10 @@ function parseArgs(argv) {
|
|
|
220
353
|
options.configPath = argv[++index];
|
|
221
354
|
else if (arg === "--plugin")
|
|
222
355
|
options.pluginSpec = argv[++index];
|
|
356
|
+
else if (arg === "--no-cache-repair")
|
|
357
|
+
options.cacheRepair = false;
|
|
223
358
|
else if (arg === "--help" || arg === "-h") {
|
|
224
|
-
console.log("Usage: openai-ws-opencode setup [--global|--project] [--path <opencode.json>] [--plugin <specifier>]");
|
|
359
|
+
console.log("Usage: openai-ws-opencode setup [--global|--project] [--path <opencode.json>] [--plugin <specifier>] [--no-cache-repair]");
|
|
225
360
|
process.exit(0);
|
|
226
361
|
}
|
|
227
362
|
}
|
|
@@ -247,6 +382,8 @@ if (isDirectExecution()) {
|
|
|
247
382
|
}
|
|
248
383
|
export {
|
|
249
384
|
setupOpenCodeConfig,
|
|
385
|
+
repairStaleOpenCodeLatestCache,
|
|
250
386
|
patchConfigText,
|
|
387
|
+
parseArgs,
|
|
251
388
|
isDirectExecution
|
|
252
389
|
};
|
package/dist/auth/oauth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"AAAA,OAAa,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAA;AAmE3E,iBAAe,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,iBAwCtE;
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"AAAA,OAAa,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAA;AAmE3E,iBAAe,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,iBAwCtE;AA2CD,wBAAgB,eAAe,SAS9B;AAED,wBAAsB,0BAA0B;;;;;;;;;;;;;;;;;GAmC/C;AAED,wBAAsB,yBAAyB;;;;;;;;;;;;;;;;;GA+C9C;AAED,eAAO,MAAM,YAAY;;;;;;;;IAexB,CAAA;AAED,eAAO,MAAM,YAAY;;;;CAIxB,CAAA"}
|
package/dist/auth/oauth.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import http from "node:http";
|
|
2
2
|
import crypto from "node:crypto";
|
|
3
|
-
import { CLIENT_ID, CODEX_OAUTH_SCOPE, CODEX_ORIGINATOR, ISSUER,
|
|
3
|
+
import { CLIENT_ID, CODEX_OAUTH_SCOPE, CODEX_ORIGINATOR, ISSUER, OAUTH_PORT } from "../constants.js";
|
|
4
4
|
import { exchangeCodeForTokens, extractAccountId, tokenExpiry } from "./tokens.js";
|
|
5
5
|
let oauthServer;
|
|
6
6
|
let oauthRedirectUri;
|
|
@@ -86,24 +86,18 @@ async function startOAuthServer() {
|
|
|
86
86
|
void handleCallback(req, res);
|
|
87
87
|
});
|
|
88
88
|
oauthServer = server;
|
|
89
|
-
let port;
|
|
90
89
|
try {
|
|
91
|
-
|
|
90
|
+
await listen(server, OAUTH_PORT);
|
|
92
91
|
}
|
|
93
92
|
catch (error) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
catch (fallbackError) {
|
|
102
|
-
oauthServer = undefined;
|
|
103
|
-
throw fallbackError;
|
|
104
|
-
}
|
|
93
|
+
oauthServer = undefined;
|
|
94
|
+
oauthRedirectUri = undefined;
|
|
95
|
+
server.close();
|
|
96
|
+
if (isAddressInUse(error))
|
|
97
|
+
throw new Error(`OpenAI WebSocket OAuth requires localhost:${OAUTH_PORT}; stop the process using that port and retry.`);
|
|
98
|
+
throw error;
|
|
105
99
|
}
|
|
106
|
-
oauthRedirectUri = `http://localhost:${
|
|
100
|
+
oauthRedirectUri = `http://localhost:${OAUTH_PORT}/auth/callback`;
|
|
107
101
|
return oauthRedirectUri;
|
|
108
102
|
}
|
|
109
103
|
function listen(server, port) {
|
|
@@ -114,7 +108,7 @@ function listen(server, port) {
|
|
|
114
108
|
};
|
|
115
109
|
const onListening = () => {
|
|
116
110
|
server.off("error", onError);
|
|
117
|
-
resolve(
|
|
111
|
+
resolve();
|
|
118
112
|
};
|
|
119
113
|
server.once("error", onError);
|
|
120
114
|
server.once("listening", onListening);
|
|
@@ -175,7 +169,7 @@ export async function createBrowserAuthorization() {
|
|
|
175
169
|
export async function createDeviceAuthorization() {
|
|
176
170
|
const deviceResponse = await fetch(`${ISSUER}/api/accounts/deviceauth/usercode`, {
|
|
177
171
|
method: "POST",
|
|
178
|
-
headers: { "Content-Type": "application/json", "User-Agent": "openai-ws-opencode/0.1.
|
|
172
|
+
headers: { "Content-Type": "application/json", "User-Agent": "openai-ws-opencode/0.1.4" },
|
|
179
173
|
body: JSON.stringify({ client_id: CLIENT_ID }),
|
|
180
174
|
});
|
|
181
175
|
if (!deviceResponse.ok)
|
|
@@ -190,7 +184,7 @@ export async function createDeviceAuthorization() {
|
|
|
190
184
|
for (;;) {
|
|
191
185
|
const response = await fetch(`${ISSUER}/api/accounts/deviceauth/token`, {
|
|
192
186
|
method: "POST",
|
|
193
|
-
headers: { "Content-Type": "application/json", "User-Agent": "openai-ws-opencode/0.1.
|
|
187
|
+
headers: { "Content-Type": "application/json", "User-Agent": "openai-ws-opencode/0.1.4" },
|
|
194
188
|
body: JSON.stringify({
|
|
195
189
|
device_auth_id: deviceData.device_auth_id,
|
|
196
190
|
user_code: deviceData.user_code,
|
package/dist/auth/oauth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"AAAA,OAAO,IAAmD,MAAM,WAAW,CAAA;AAC3E,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../src/auth/oauth.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -10,7 +10,6 @@ export declare const OPENAI_WS_BETA = "responses_websockets=2026-02-06";
|
|
|
10
10
|
export declare const CODEX_ORIGINATOR = "opencode";
|
|
11
11
|
export declare const CODEX_OAUTH_SCOPE = "openid profile email offline_access";
|
|
12
12
|
export declare const OAUTH_PORT = 1455;
|
|
13
|
-
export declare const OAUTH_FALLBACK_PORT = 1457;
|
|
14
13
|
export declare const DEFAULT_INSTRUCTIONS = "You are a helpful assistant.";
|
|
15
14
|
export declare const INTERNAL_SESSION_HEADER = "x-openai-ws-opencode-session-id";
|
|
16
15
|
export declare const INTERNAL_AGENT_HEADER = "x-openai-ws-opencode-agent";
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,cAAc,CAAA;AAEtC,eAAO,MAAM,SAAS,iCAAiC,CAAA;AACvD,eAAO,MAAM,MAAM,4BAA4B,CAAA;AAC/C,eAAO,MAAM,eAAe,8BAA8B,CAAA;AAC1D,eAAO,MAAM,cAAc,0CAA0C,CAAA;AACrE,eAAO,MAAM,kBAAkB,oDAAgC,CAAA;AAC/D,eAAO,MAAM,aAAa,sCAAsC,CAAA;AAChE,eAAO,MAAM,YAAY,kDAAkD,CAAA;AAC3E,eAAO,MAAM,cAAc,oCAAoC,CAAA;AAC/D,eAAO,MAAM,gBAAgB,aAAa,CAAA;AAC1C,eAAO,MAAM,iBAAiB,wCAAwC,CAAA;AACtE,eAAO,MAAM,UAAU,OAAO,CAAA;AAC9B,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,cAAc,CAAA;AAEtC,eAAO,MAAM,SAAS,iCAAiC,CAAA;AACvD,eAAO,MAAM,MAAM,4BAA4B,CAAA;AAC/C,eAAO,MAAM,eAAe,8BAA8B,CAAA;AAC1D,eAAO,MAAM,cAAc,0CAA0C,CAAA;AACrE,eAAO,MAAM,kBAAkB,oDAAgC,CAAA;AAC/D,eAAO,MAAM,aAAa,sCAAsC,CAAA;AAChE,eAAO,MAAM,YAAY,kDAAkD,CAAA;AAC3E,eAAO,MAAM,cAAc,oCAAoC,CAAA;AAC/D,eAAO,MAAM,gBAAgB,aAAa,CAAA;AAC1C,eAAO,MAAM,iBAAiB,wCAAwC,CAAA;AACtE,eAAO,MAAM,UAAU,OAAO,CAAA;AAC9B,eAAO,MAAM,oBAAoB,iCAAiC,CAAA;AAElE,eAAO,MAAM,uBAAuB,oCAAoC,CAAA;AACxE,eAAO,MAAM,qBAAqB,+BAA+B,CAAA;AACjE,eAAO,MAAM,qBAAqB,kCAAkC,CAAA;AACpE,eAAO,MAAM,2BAA2B,qCAAqC,CAAA"}
|
package/dist/constants.js
CHANGED
|
@@ -10,7 +10,6 @@ export const OPENAI_WS_BETA = "responses_websockets=2026-02-06";
|
|
|
10
10
|
export const CODEX_ORIGINATOR = "opencode";
|
|
11
11
|
export const CODEX_OAUTH_SCOPE = "openid profile email offline_access";
|
|
12
12
|
export const OAUTH_PORT = 1455;
|
|
13
|
-
export const OAUTH_FALLBACK_PORT = 1457;
|
|
14
13
|
export const DEFAULT_INSTRUCTIONS = "You are a helpful assistant.";
|
|
15
14
|
export const INTERNAL_SESSION_HEADER = "x-openai-ws-opencode-session-id";
|
|
16
15
|
export const INTERNAL_AGENT_HEADER = "x-openai-ws-opencode-agent";
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAA;AAEtC,MAAM,CAAC,MAAM,SAAS,GAAG,8BAA8B,CAAA;AACvD,MAAM,CAAC,MAAM,MAAM,GAAG,yBAAyB,CAAA;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,2BAA2B,CAAA;AAC1D,MAAM,CAAC,MAAM,cAAc,GAAG,uCAAuC,CAAA;AACrE,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,cAAc,YAAY,CAAA;AAC/D,MAAM,CAAC,MAAM,aAAa,GAAG,mCAAmC,CAAA;AAChE,MAAM,CAAC,MAAM,YAAY,GAAG,+CAA+C,CAAA;AAC3E,MAAM,CAAC,MAAM,cAAc,GAAG,iCAAiC,CAAA;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAA;AAC1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,qCAAqC,CAAA;AACtE,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAA;AAC9B,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAA;AAEtC,MAAM,CAAC,MAAM,SAAS,GAAG,8BAA8B,CAAA;AACvD,MAAM,CAAC,MAAM,MAAM,GAAG,yBAAyB,CAAA;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,2BAA2B,CAAA;AAC1D,MAAM,CAAC,MAAM,cAAc,GAAG,uCAAuC,CAAA;AACrE,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,cAAc,YAAY,CAAA;AAC/D,MAAM,CAAC,MAAM,aAAa,GAAG,mCAAmC,CAAA;AAChE,MAAM,CAAC,MAAM,YAAY,GAAG,+CAA+C,CAAA;AAC3E,MAAM,CAAC,MAAM,cAAc,GAAG,iCAAiC,CAAA;AAC/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAA;AAC1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,qCAAqC,CAAA;AACtE,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAA;AAC9B,MAAM,CAAC,MAAM,oBAAoB,GAAG,8BAA8B,CAAA;AAElE,MAAM,CAAC,MAAM,uBAAuB,GAAG,iCAAiC,CAAA;AACxE,MAAM,CAAC,MAAM,qBAAqB,GAAG,4BAA4B,CAAA;AACjE,MAAM,CAAC,MAAM,qBAAqB,GAAG,+BAA+B,CAAA;AACpE,MAAM,CAAC,MAAM,2BAA2B,GAAG,kCAAkC,CAAA"}
|
package/dist/models/resolve.js
CHANGED
|
@@ -103,7 +103,7 @@ export async function resolveModelsBestEffort(overrides = {}, options = {}) {
|
|
|
103
103
|
try {
|
|
104
104
|
const response = await fetchImpl("https://models.dev/api.json", {
|
|
105
105
|
signal: AbortSignal.timeout(timeoutMs),
|
|
106
|
-
headers: { "User-Agent": "openai-ws-opencode/0.1.
|
|
106
|
+
headers: { "User-Agent": "openai-ws-opencode/0.1.4" },
|
|
107
107
|
});
|
|
108
108
|
if (!response.ok)
|
|
109
109
|
return resolveModels(overrides);
|