cascade-ai 0.12.16 → 0.12.18
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 +52 -11
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +50 -11
- package/dist/cli.js.map +1 -1
- package/dist/desktop-core.cjs +86 -49
- package/dist/index.cjs +52 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +50 -11
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.cjs
CHANGED
|
@@ -4,6 +4,9 @@ var Anthropic = require('@anthropic-ai/sdk');
|
|
|
4
4
|
var OpenAI = require('openai');
|
|
5
5
|
var genai = require('@google/genai');
|
|
6
6
|
var dns = require('dns');
|
|
7
|
+
var http = require('http');
|
|
8
|
+
var https = require('https');
|
|
9
|
+
var stream = require('stream');
|
|
7
10
|
var ink = require('ink');
|
|
8
11
|
var commander = require('commander');
|
|
9
12
|
var React2 = require('react');
|
|
@@ -33,7 +36,6 @@ var worker_threads = require('worker_threads');
|
|
|
33
36
|
var Spinner = require('ink-spinner');
|
|
34
37
|
var ora = require('ora');
|
|
35
38
|
var SelectInput = require('ink-select-input');
|
|
36
|
-
var http = require('http');
|
|
37
39
|
var express = require('express');
|
|
38
40
|
var rateLimit = require('express-rate-limit');
|
|
39
41
|
var bcrypt = require('bcryptjs');
|
|
@@ -65,6 +67,8 @@ function _interopNamespace(e) {
|
|
|
65
67
|
var Anthropic__default = /*#__PURE__*/_interopDefault(Anthropic);
|
|
66
68
|
var OpenAI__default = /*#__PURE__*/_interopDefault(OpenAI);
|
|
67
69
|
var dns__default = /*#__PURE__*/_interopDefault(dns);
|
|
70
|
+
var http__default = /*#__PURE__*/_interopDefault(http);
|
|
71
|
+
var https__default = /*#__PURE__*/_interopDefault(https);
|
|
68
72
|
var React2__default = /*#__PURE__*/_interopDefault(React2);
|
|
69
73
|
var chalk9__default = /*#__PURE__*/_interopDefault(chalk9);
|
|
70
74
|
var dotenv__default = /*#__PURE__*/_interopDefault(dotenv);
|
|
@@ -103,7 +107,7 @@ var __export = (target, all) => {
|
|
|
103
107
|
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;
|
|
104
108
|
var init_constants = __esm({
|
|
105
109
|
"src/constants.ts"() {
|
|
106
|
-
CASCADE_VERSION = "0.12.
|
|
110
|
+
CASCADE_VERSION = "0.12.18";
|
|
107
111
|
CASCADE_CONFIG_FILE = ".cascade/config.json";
|
|
108
112
|
CASCADE_DB_FILE = ".cascade/memory.db";
|
|
109
113
|
CASCADE_DASHBOARD_SECRET_FILE = ".cascade/dashboard-secret";
|
|
@@ -1213,6 +1217,48 @@ function preferIpv4Host(url) {
|
|
|
1213
1217
|
if (!url) return url;
|
|
1214
1218
|
return url.replace(/^(https?:\/\/)localhost(?=[:/]|$)/i, "$1127.0.0.1");
|
|
1215
1219
|
}
|
|
1220
|
+
async function nodeHttpFetch(input, init = {}) {
|
|
1221
|
+
const urlStr = typeof input === "string" ? input : input instanceof URL ? input.href : input.url;
|
|
1222
|
+
const u = new URL(urlStr);
|
|
1223
|
+
const lib = u.protocol === "https:" ? https__default.default : http__default.default;
|
|
1224
|
+
const method = (init.method ?? "GET").toUpperCase();
|
|
1225
|
+
const headers = {};
|
|
1226
|
+
const h = init.headers;
|
|
1227
|
+
if (h instanceof Headers) h.forEach((v, k) => {
|
|
1228
|
+
headers[k] = v;
|
|
1229
|
+
});
|
|
1230
|
+
else if (Array.isArray(h)) for (const [k, v] of h) headers[k] = v;
|
|
1231
|
+
else if (h) Object.assign(headers, h);
|
|
1232
|
+
const body = init.body == null ? void 0 : typeof init.body === "string" ? init.body : Buffer.from(init.body);
|
|
1233
|
+
return new Promise((resolve, reject) => {
|
|
1234
|
+
const req = lib.request(
|
|
1235
|
+
{
|
|
1236
|
+
hostname: u.hostname,
|
|
1237
|
+
port: u.port || (u.protocol === "https:" ? 443 : 80),
|
|
1238
|
+
path: u.pathname + u.search,
|
|
1239
|
+
method,
|
|
1240
|
+
headers
|
|
1241
|
+
},
|
|
1242
|
+
(res) => {
|
|
1243
|
+
const stream$1 = stream.Readable.toWeb(res);
|
|
1244
|
+
const respHeaders = new Headers();
|
|
1245
|
+
for (const [k, v] of Object.entries(res.headers)) {
|
|
1246
|
+
if (Array.isArray(v)) respHeaders.set(k, v.join(", "));
|
|
1247
|
+
else if (typeof v === "string") respHeaders.set(k, v);
|
|
1248
|
+
}
|
|
1249
|
+
resolve(new Response(stream$1, {
|
|
1250
|
+
status: res.statusCode ?? 200,
|
|
1251
|
+
statusText: res.statusMessage ?? "",
|
|
1252
|
+
headers: respHeaders
|
|
1253
|
+
}));
|
|
1254
|
+
}
|
|
1255
|
+
);
|
|
1256
|
+
req.on("error", reject);
|
|
1257
|
+
req.setTimeout(15e3, () => req.destroy(new Error("request timed out")));
|
|
1258
|
+
if (body !== void 0) req.write(body);
|
|
1259
|
+
req.end();
|
|
1260
|
+
});
|
|
1261
|
+
}
|
|
1216
1262
|
var init_net = __esm({
|
|
1217
1263
|
"src/utils/net.ts"() {
|
|
1218
1264
|
try {
|
|
@@ -1456,7 +1502,8 @@ var init_openai_compatible = __esm({
|
|
|
1456
1502
|
super(config, model);
|
|
1457
1503
|
this.client = new OpenAI__default.default({
|
|
1458
1504
|
apiKey: config.apiKey ?? "not-required",
|
|
1459
|
-
baseURL: preferIpv4Host(config.baseUrl)
|
|
1505
|
+
baseURL: preferIpv4Host(config.baseUrl),
|
|
1506
|
+
fetch: nodeHttpFetch
|
|
1460
1507
|
});
|
|
1461
1508
|
}
|
|
1462
1509
|
modelsUrl() {
|
|
@@ -1468,14 +1515,8 @@ var init_openai_compatible = __esm({
|
|
|
1468
1515
|
if (this.config.apiKey) h["Authorization"] = `Bearer ${this.config.apiKey}`;
|
|
1469
1516
|
return h;
|
|
1470
1517
|
}
|
|
1471
|
-
// Discover models with a tolerant direct GET instead of the OpenAI SDK's typed
|
|
1472
|
-
// `models.list()`. Local servers (llama.cpp / LM Studio / vLLM) return
|
|
1473
|
-
// non-standard `/v1/models` payloads — an extra `models` array, filesystem
|
|
1474
|
-
// path ids (`C:\…\model.gguf`) — that can make the SDK's typed pagination
|
|
1475
|
-
// throw, which previously surfaced as a misleading "endpoint unreachable".
|
|
1476
|
-
// A plain fetch + lenient parse is robust and reports the real HTTP error.
|
|
1477
1518
|
async listModels() {
|
|
1478
|
-
const res = await
|
|
1519
|
+
const res = await nodeHttpFetch(this.modelsUrl(), { headers: this.authHeaders() });
|
|
1479
1520
|
if (!res.ok) throw new Error(`models endpoint ${this.modelsUrl()} returned HTTP ${res.status}`);
|
|
1480
1521
|
const body = await res.json();
|
|
1481
1522
|
const raw = Array.isArray(body?.data) ? body.data : Array.isArray(body?.models) ? body.models : [];
|
|
@@ -1503,7 +1544,7 @@ var init_openai_compatible = __esm({
|
|
|
1503
1544
|
}
|
|
1504
1545
|
async isAvailable() {
|
|
1505
1546
|
try {
|
|
1506
|
-
const res = await
|
|
1547
|
+
const res = await nodeHttpFetch(this.modelsUrl(), { headers: this.authHeaders() });
|
|
1507
1548
|
return res.ok;
|
|
1508
1549
|
} catch {
|
|
1509
1550
|
return false;
|