cascade-ai 0.19.0 → 0.20.0
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 +2 -1
- package/bin/cascade.js +0 -0
- package/dist/cli.cjs +52 -26
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +52 -26
- package/dist/cli.js.map +1 -1
- package/dist/desktop-core.cjs +52 -26
- package/dist/index.cjs +52 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +52 -26
- package/dist/index.js.map +1 -1
- package/package.json +6 -2
package/README.md
CHANGED
|
@@ -778,12 +778,13 @@ web/
|
|
|
778
778
|
| ✓ | Session rollback button (desktop) + `/rollback` (CLI) |
|
|
779
779
|
| ✓ | Cost-per-feature attribution (`costByFeature` in results, CLI cost panel, desktop chat) |
|
|
780
780
|
| ✓ | Project world state (encrypted local log feeding T1 planning) |
|
|
781
|
+
| ✓ | Cascade Cloud (hosted chat — GitHub/Google login, bring-your-own-key, `app.cascadeai.in`) |
|
|
781
782
|
| 🔜 | VSCode extension (`cascade-vscode`) — see [docs/ROADMAP.md](docs/ROADMAP.md) |
|
|
782
783
|
| 🔜 | JetBrains extension (`cascade-jetbrains`) — see [docs/ROADMAP.md](docs/ROADMAP.md) |
|
|
783
784
|
| 🔜 | WASM/isolate sandboxing for tool execution — see [docs/ROADMAP.md](docs/ROADMAP.md) |
|
|
784
785
|
| 🔜 | Project knowledge graph (world-state v2) — see [docs/ROADMAP.md](docs/ROADMAP.md) |
|
|
785
786
|
| 🔜 | Multi-plan branching (T1 proposes N plans) — see [docs/ROADMAP.md](docs/ROADMAP.md) |
|
|
786
|
-
| 🔜 | Cascade Cloud (
|
|
787
|
+
| 🔜 | Cascade Cloud billing (Razorpay Subscriptions) |
|
|
787
788
|
| 🔜 | Plugin marketplace |
|
|
788
789
|
| 🔜 | Voice input (STT) |
|
|
789
790
|
| 🔜 | Multi-workspace support |
|
package/bin/cascade.js
CHANGED
|
File without changes
|
package/dist/cli.cjs
CHANGED
|
@@ -111,7 +111,7 @@ var __export = (target, all) => {
|
|
|
111
111
|
var CASCADE_VERSION, CASCADE_CONFIG_FILE, CASCADE_DB_FILE, CASCADE_DASHBOARD_SECRET_FILE, GLOBAL_CONFIG_DIR, GLOBAL_DB_FILE, GLOBAL_KEYSTORE_FILE, GLOBAL_CREDENTIALS_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;
|
|
112
112
|
var init_constants = __esm({
|
|
113
113
|
"src/constants.ts"() {
|
|
114
|
-
CASCADE_VERSION = "0.
|
|
114
|
+
CASCADE_VERSION = "0.20.0";
|
|
115
115
|
CASCADE_CONFIG_FILE = ".cascade/config.json";
|
|
116
116
|
CASCADE_DB_FILE = ".cascade/memory.db";
|
|
117
117
|
CASCADE_DASHBOARD_SECRET_FILE = ".cascade/dashboard-secret";
|
|
@@ -986,14 +986,27 @@ var init_azure = __esm({
|
|
|
986
986
|
return [fromDeployment ?? this.model];
|
|
987
987
|
}
|
|
988
988
|
async isAvailable() {
|
|
989
|
+
const params = {
|
|
990
|
+
model: this.model.id,
|
|
991
|
+
messages: [{ role: "user", content: "ping" }],
|
|
992
|
+
max_tokens: 1
|
|
993
|
+
};
|
|
989
994
|
try {
|
|
990
|
-
await this.client.chat.completions.create(
|
|
991
|
-
model: this.model.id,
|
|
992
|
-
messages: [{ role: "user", content: "ping" }],
|
|
993
|
-
max_tokens: 1
|
|
994
|
-
});
|
|
995
|
+
await this.client.chat.completions.create(params);
|
|
995
996
|
return true;
|
|
996
|
-
} catch {
|
|
997
|
+
} catch (err) {
|
|
998
|
+
if (err?.message && String(err.message).includes("max_completion_tokens")) {
|
|
999
|
+
try {
|
|
1000
|
+
await this.client.chat.completions.create({
|
|
1001
|
+
model: this.model.id,
|
|
1002
|
+
messages: [{ role: "user", content: "ping" }],
|
|
1003
|
+
max_completion_tokens: 1
|
|
1004
|
+
});
|
|
1005
|
+
return true;
|
|
1006
|
+
} catch {
|
|
1007
|
+
return false;
|
|
1008
|
+
}
|
|
1009
|
+
}
|
|
997
1010
|
return false;
|
|
998
1011
|
}
|
|
999
1012
|
}
|
|
@@ -2987,7 +3000,13 @@ var ToolsConfigSchema = zod.z.object({
|
|
|
2987
3000
|
* - 'worker': node:worker_threads (resource/kill limits, but not capability-confined).
|
|
2988
3001
|
* - 'auto' (default): use the isolate when `isolated-vm` loads, else fall back to worker.
|
|
2989
3002
|
*/
|
|
2990
|
-
dynamicToolSandbox: zod.z.enum(["isolate", "worker", "auto"]).default("auto")
|
|
3003
|
+
dynamicToolSandbox: zod.z.enum(["isolate", "worker", "auto"]).default("auto"),
|
|
3004
|
+
/**
|
|
3005
|
+
* When set, ONLY these tool names are registered — the sole way to omit a
|
|
3006
|
+
* built-in tool (shell/file/git/…) from existing at all, rather than just
|
|
3007
|
+
* gating it behind approval. Omitted = full default set (unchanged).
|
|
3008
|
+
*/
|
|
3009
|
+
enabledTools: zod.z.array(zod.z.string()).optional()
|
|
2991
3010
|
});
|
|
2992
3011
|
var HookDefinitionSchema = zod.z.object({
|
|
2993
3012
|
name: zod.z.string().optional(),
|
|
@@ -3874,6 +3893,10 @@ var ModelSelector = class {
|
|
|
3874
3893
|
actualId = parts.slice(1).join(":");
|
|
3875
3894
|
}
|
|
3876
3895
|
}
|
|
3896
|
+
const registered = this.availableModels.get(actualId);
|
|
3897
|
+
if (registered && (!providerStr || registered.provider === providerStr)) {
|
|
3898
|
+
return registered;
|
|
3899
|
+
}
|
|
3877
3900
|
if (!providerStr) {
|
|
3878
3901
|
const lower = actualId.toLowerCase();
|
|
3879
3902
|
if (lower.includes("claude")) providerStr = "anthropic";
|
|
@@ -10124,29 +10147,32 @@ var ToolRegistry = class extends EventEmitter__default.default {
|
|
|
10124
10147
|
return tool.execute(input, options);
|
|
10125
10148
|
}
|
|
10126
10149
|
registerDefaults() {
|
|
10127
|
-
const
|
|
10128
|
-
|
|
10129
|
-
|
|
10130
|
-
new
|
|
10131
|
-
new
|
|
10132
|
-
new
|
|
10133
|
-
new
|
|
10134
|
-
new
|
|
10135
|
-
new
|
|
10136
|
-
new
|
|
10137
|
-
new
|
|
10138
|
-
new
|
|
10139
|
-
new
|
|
10140
|
-
new
|
|
10141
|
-
new
|
|
10142
|
-
new
|
|
10143
|
-
new
|
|
10150
|
+
const allowlist = this.config.enabledTools;
|
|
10151
|
+
const enabled = (name) => !allowlist || allowlist.includes(name);
|
|
10152
|
+
const candidates2 = [
|
|
10153
|
+
enabled("shell") && new ShellTool(this.config.shellAllowlist, this.config.shellBlocklist),
|
|
10154
|
+
enabled("file_read") && new FileReadTool(),
|
|
10155
|
+
enabled("file_write") && new FileWriteTool(),
|
|
10156
|
+
enabled("file_edit") && new FileEditTool(),
|
|
10157
|
+
enabled("file_delete") && new FileDeleteTool(),
|
|
10158
|
+
enabled("file_list") && new FileListTool(),
|
|
10159
|
+
enabled("git") && new GitTool(),
|
|
10160
|
+
enabled("github") && new GitHubTool(),
|
|
10161
|
+
enabled("image_analyze") && new ImageAnalyzeTool(),
|
|
10162
|
+
enabled("pdf_create") && new PDFCreateTool(),
|
|
10163
|
+
enabled("run_code") && new CodeInterpreterTool(),
|
|
10164
|
+
enabled("peer_message") && new PeerCommunicationTool(),
|
|
10165
|
+
enabled("web_search") && new WebSearchTool(this.config.webSearch),
|
|
10166
|
+
enabled("glob") && new GlobTool(),
|
|
10167
|
+
enabled("grep") && new GrepTool(),
|
|
10168
|
+
enabled("web_fetch") && new WebFetchTool()
|
|
10144
10169
|
];
|
|
10170
|
+
const tools = candidates2.filter((t) => t !== false);
|
|
10145
10171
|
for (const tool of tools) {
|
|
10146
10172
|
tool.setWorkspaceRoot(this.workspaceRoot);
|
|
10147
10173
|
this.register(tool);
|
|
10148
10174
|
}
|
|
10149
|
-
if (this.config.browserEnabled) {
|
|
10175
|
+
if (this.config.browserEnabled && enabled("browser")) {
|
|
10150
10176
|
const browser = new BrowserTool();
|
|
10151
10177
|
browser.setWorkspaceRoot(this.workspaceRoot);
|
|
10152
10178
|
this.register(browser);
|