@mrciphersmith/keryx 0.2.22 → 0.2.24

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 +26 -6
  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 } : {}
@@ -40343,7 +40360,10 @@ var AGENT_SLASH_COMMANDS = [
40343
40360
  {
40344
40361
  name: "/provider",
40345
40362
  description: "Switch provider \u2014 /provider <name>, or no arg to re-select",
40346
- modes: CHAT_ONLY
40363
+ modes: BOTH,
40364
+ modeDescriptions: {
40365
+ agent: "Switch provider / API key (interactive picker)"
40366
+ }
40347
40367
  },
40348
40368
  { name: "/think", description: "Expand the last reasoning block", modes: AGENT_ONLY },
40349
40369
  { name: "/expand", description: "Expand the last tool output block", modes: AGENT_ONLY },
@@ -44657,7 +44677,7 @@ Staying in the current session.
44657
44677
  `);
44658
44678
  return;
44659
44679
  }
44660
- if (command.name === "/connect") {
44680
+ if (command.name === "/connect" || command.name === "/provider") {
44661
44681
  (async () => {
44662
44682
  const detected = opts.redetect !== undefined ? await opts.redetect() : opts.detected;
44663
44683
  const ns = await chrome.withOverlay(() => selectProviderModelInTui(otui, r, detected));
@@ -45178,7 +45198,7 @@ init_shell_config();
45178
45198
  // package.json
45179
45199
  var package_default = {
45180
45200
  name: "@mrciphersmith/keryx",
45181
- version: "0.2.22",
45201
+ version: "0.2.24",
45182
45202
  description: "Version-controlled project context for AI coding agents: code graph, architecture wiki, project memory, relevant tests, quality signals, and task flows.",
45183
45203
  private: false,
45184
45204
  publishConfig: {
@@ -45318,7 +45338,7 @@ async function detectProviders(deps) {
45318
45338
  detected.push({
45319
45339
  name: p.name,
45320
45340
  models: [...p.models],
45321
- baseUrl: p.baseUrl,
45341
+ baseUrl: resolveProviderBaseUrl(p, deps.env),
45322
45342
  label: p.label,
45323
45343
  ...p.chatPath !== undefined ? { chatPath: p.chatPath } : {},
45324
45344
  ...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.24",
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": {