@mrciphersmith/keryx 0.2.22 → 0.2.23

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.
Files changed (2) hide show
  1. package/dist/cli.js +21 -4
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -8045,6 +8045,23 @@ function isProviderPlatformSupported(provider, platform = process.platform) {
8045
8045
  }
8046
8046
  return provider.platforms.includes(platform);
8047
8047
  }
8048
+ function providerBaseUrlEnvKey(providerName) {
8049
+ return `KERYX_${providerName.replace(/[^a-zA-Z0-9]+/g, "_").toUpperCase()}_BASE_URL`;
8050
+ }
8051
+ function resolveProviderBaseUrl(provider, env = process.env) {
8052
+ const override = env[providerBaseUrlEnvKey(provider.name)]?.trim();
8053
+ if (override === undefined || override.length === 0)
8054
+ return provider.baseUrl;
8055
+ try {
8056
+ const url = new URL(override);
8057
+ if (url.protocol !== "http:" && url.protocol !== "https:" || url.username.length > 0 || url.password.length > 0) {
8058
+ return provider.baseUrl;
8059
+ }
8060
+ return override.replace(/\/+$/, "");
8061
+ } catch {
8062
+ return provider.baseUrl;
8063
+ }
8064
+ }
8048
8065
  function providerByName(name) {
8049
8066
  return OPENAI_COMPAT_PROVIDERS.find((p) => p.name === name);
8050
8067
  }
@@ -8091,7 +8108,7 @@ async function resolveModelsForPicker(fetchFn, provider, env = process.env, opts
8091
8108
  const envKey = provider.envKey ?? compat.envKey;
8092
8109
  const raw = envKey === undefined ? undefined : env[envKey];
8093
8110
  const apiKey = typeof raw === "string" && raw.length > 0 ? raw : undefined;
8094
- return fetchOpenAiCompatModelsDetailed(fetchFn, compat, apiKey, opts);
8111
+ return fetchOpenAiCompatModelsDetailed(fetchFn, { ...compat, ...provider.baseUrl !== undefined ? { baseUrl: provider.baseUrl } : {} }, apiKey, opts);
8095
8112
  }
8096
8113
  var DEFAULT_MODELS_PATH = "/v1/models", OPENAI_COMPAT_PROVIDERS, MODELS_FETCH_TIMEOUT_MS = 1e4;
8097
8114
  var init_providers = __esm(() => {
@@ -9867,7 +9884,7 @@ function makeProvider(name, _model, opts) {
9867
9884
  }
9868
9885
  const grant = {
9869
9886
  network: true,
9870
- baseUrl: opts.baseUrl ?? compat.baseUrl,
9887
+ baseUrl: opts.baseUrl ?? resolveProviderBaseUrl(compat, env),
9871
9888
  ...compat.allowLoopback === true ? { allowLoopback: true } : {},
9872
9889
  ...compat.chatPath !== undefined ? { chatPath: compat.chatPath } : {},
9873
9890
  ...apiKey !== undefined ? { apiKey } : {}
@@ -45178,7 +45195,7 @@ init_shell_config();
45178
45195
  // package.json
45179
45196
  var package_default = {
45180
45197
  name: "@mrciphersmith/keryx",
45181
- version: "0.2.22",
45198
+ version: "0.2.23",
45182
45199
  description: "Version-controlled project context for AI coding agents: code graph, architecture wiki, project memory, relevant tests, quality signals, and task flows.",
45183
45200
  private: false,
45184
45201
  publishConfig: {
@@ -45318,7 +45335,7 @@ async function detectProviders(deps) {
45318
45335
  detected.push({
45319
45336
  name: p.name,
45320
45337
  models: [...p.models],
45321
- baseUrl: p.baseUrl,
45338
+ baseUrl: resolveProviderBaseUrl(p, deps.env),
45322
45339
  label: p.label,
45323
45340
  ...p.chatPath !== undefined ? { chatPath: p.chatPath } : {},
45324
45341
  ...p.modelsPath !== undefined ? { modelsPath: p.modelsPath } : {},
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrciphersmith/keryx",
3
- "version": "0.2.22",
3
+ "version": "0.2.23",
4
4
  "description": "Version-controlled project context for AI coding agents: code graph, architecture wiki, project memory, relevant tests, quality signals, and task flows.",
5
5
  "private": false,
6
6
  "publishConfig": {