cascade-ai 0.12.20 → 0.12.22

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/cli.cjs CHANGED
@@ -109,7 +109,7 @@ var __export = (target, all) => {
109
109
  var CASCADE_VERSION, CASCADE_CONFIG_FILE, CASCADE_DB_FILE, CASCADE_DASHBOARD_SECRET_FILE, GLOBAL_CONFIG_DIR, GLOBAL_DB_FILE, GLOBAL_KEYSTORE_FILE, GLOBAL_RUNTIME_DB_FILE, DEFAULT_DASHBOARD_PORT, DEFAULT_CONTEXT_LIMIT, DEFAULT_AUTO_SUMMARIZE_AT, MODELS, T1_MODEL_PRIORITY, T2_MODEL_PRIORITY, T3_MODEL_PRIORITY, VISION_MODEL_PRIORITY, COMPLEXITY_T2_COUNT, THEME_NAMES, DEFAULT_THEME, OLLAMA_BASE_URL, LM_STUDIO_BASE_URL, AZURE_BASE_URL_TEMPLATE, TOOL_NAMES, DEFAULT_APPROVAL_REQUIRED;
110
110
  var init_constants = __esm({
111
111
  "src/constants.ts"() {
112
- CASCADE_VERSION = "0.12.20";
112
+ CASCADE_VERSION = "0.12.22";
113
113
  CASCADE_CONFIG_FILE = ".cascade/config.json";
114
114
  CASCADE_DB_FILE = ".cascade/memory.db";
115
115
  CASCADE_DASHBOARD_SECRET_FILE = ".cascade/dashboard-secret";
@@ -1521,7 +1521,7 @@ var init_openai_compatible = __esm({
1521
1521
  init_net();
1522
1522
  OpenAICompatibleProvider = class extends OpenAIProvider {
1523
1523
  constructor(config, model) {
1524
- super(config, model);
1524
+ super({ ...config, apiKey: config.apiKey ?? "not-required" }, model);
1525
1525
  this.client = new OpenAI__default.default({
1526
1526
  apiKey: config.apiKey ?? "not-required",
1527
1527
  baseURL: preferIpv4Host(config.baseUrl),
@@ -4165,10 +4165,10 @@ var CascadeRouter = class _CascadeRouter extends EventEmitter__default.default {
4165
4165
  if (availableProviders.has("ollama")) {
4166
4166
  await this.discoverOllamaModels(ollamaCfg);
4167
4167
  }
4168
- if (availableProviders.has("openai-compatible")) {
4169
- await Promise.all(
4170
- config.providers.filter((p) => p.type === "openai-compatible").map((cfg) => this.discoverOpenAICompatibleModels(cfg))
4171
- );
4168
+ const ocConfigs = config.providers.filter((p) => p.type === "openai-compatible" && p.baseUrl);
4169
+ if (ocConfigs.length > 0) {
4170
+ const results = await Promise.all(ocConfigs.map((cfg) => this.discoverOpenAICompatibleModels(cfg)));
4171
+ if (results.some(Boolean)) this.selector.markProviderAvailable("openai-compatible");
4172
4172
  }
4173
4173
  for (const tier of ["T1", "T2", "T3"]) {
4174
4174
  const override = tier === "T1" ? config.models.t1 : tier === "T2" ? config.models.t2 : config.models.t3;
@@ -4639,6 +4639,7 @@ var CascadeRouter = class _CascadeRouter extends EventEmitter__default.default {
4639
4639
  } catch {
4640
4640
  }
4641
4641
  }
4642
+ /** Returns true when at least one real model was discovered from the endpoint. */
4642
4643
  async discoverOpenAICompatibleModels(cfg) {
4643
4644
  try {
4644
4645
  const seed = {
@@ -4658,8 +4659,10 @@ var CascadeRouter = class _CascadeRouter extends EventEmitter__default.default {
4658
4659
  for (const m of models) {
4659
4660
  this.selector.addDynamicModel(m);
4660
4661
  }
4662
+ return models.length > 0;
4661
4663
  } catch (err) {
4662
4664
  console.warn("[router] OpenAI-compatible model discovery failed:", err instanceof Error ? err.message : err);
4665
+ return false;
4663
4666
  }
4664
4667
  }
4665
4668
  ensureProvider(model, configs) {
@@ -14916,11 +14919,9 @@ var DashboardServer = class {
14916
14919
  this.activeSessions.set(sessionId, cascade);
14917
14920
  cascade.on("stream:token", (e) => {
14918
14921
  this.socket.emitToSocket(socketId, "stream:token", { sessionId, tierId: e.tierId, text: e.text });
14919
- this.socket.broadcast("stream:token", { sessionId, tierId: e.tierId, text: e.text });
14920
14922
  });
14921
14923
  cascade.on("tier:status", (e) => {
14922
14924
  this.socket.emitToSocket(socketId, "tier:status", { sessionId, ...e });
14923
- this.socket.broadcast("tier:status", { sessionId, ...e });
14924
14925
  });
14925
14926
  cascade.on("permission:user-required", (e) => {
14926
14927
  this.socket.emitToSocket(socketId, "permission:user-required", { sessionId, ...e });
@@ -15415,11 +15416,9 @@ var DashboardServer = class {
15415
15416
  const cascade = new Cascade(this.config, this.workspacePath, this.store);
15416
15417
  this.activeSessions.set(sessionId, cascade);
15417
15418
  cascade.on("stream:token", (e) => {
15418
- this.socket.broadcast("stream:token", { sessionId, tierId: e.tierId, text: e.text });
15419
15419
  this.socket.broadcastToRoom(`session:${sessionId}`, "stream:token", { sessionId, tierId: e.tierId, text: e.text });
15420
15420
  });
15421
15421
  cascade.on("tier:status", (e) => {
15422
- this.socket.broadcast("tier:status", { sessionId, ...e });
15423
15422
  this.socket.broadcastToRoom(`session:${sessionId}`, "tier:status", { sessionId, ...e });
15424
15423
  });
15425
15424
  cascade.on("permission:user-required", (e) => {