cascade-ai 0.51.0 → 0.53.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/dist/cli.cjs +195 -34
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +195 -34
- package/dist/cli.js.map +1 -1
- package/dist/desktop-core.cjs +194 -39
- package/dist/index.cjs +186 -31
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +44 -10
- package/dist/index.d.ts +44 -10
- package/dist/index.js +186 -32
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -202,6 +202,12 @@ interface ToolExecuteOptions {
|
|
|
202
202
|
* paying it out and discarding the result.
|
|
203
203
|
*/
|
|
204
204
|
signal?: AbortSignal;
|
|
205
|
+
/**
|
|
206
|
+
* Progress notes from a long-running tool. Video generation polls for minutes;
|
|
207
|
+
* without a channel back, a working render is indistinguishable from a hang —
|
|
208
|
+
* which is the most likely reason someone kills one.
|
|
209
|
+
*/
|
|
210
|
+
onProgress?: (note: string) => void;
|
|
205
211
|
saveSnapshot?: (filePath: string, content: string) => Promise<void>;
|
|
206
212
|
sendPeerSync?: (to: string, syncType: PeerSyncType, content: string | Record<string, unknown>) => void;
|
|
207
213
|
getPeerMessages?: () => Array<{
|
|
@@ -592,6 +598,12 @@ interface ToolsConfig {
|
|
|
592
598
|
* behavior). An empty array registers no tools at all.
|
|
593
599
|
*/
|
|
594
600
|
enabledTools?: string[];
|
|
601
|
+
/**
|
|
602
|
+
* Tools to remove even when they would otherwise be registered. Reaches
|
|
603
|
+
* tools registered outside `enabledTools` (MCP, media generation), which is
|
|
604
|
+
* the only way to switch those off.
|
|
605
|
+
*/
|
|
606
|
+
disabledTools?: string[];
|
|
595
607
|
}
|
|
596
608
|
interface HooksConfig {
|
|
597
609
|
preToolUse?: HookDefinition[];
|
|
@@ -2182,6 +2194,24 @@ declare class T1Administrator extends BaseTier {
|
|
|
2182
2194
|
private evaluatePermissionAtT1;
|
|
2183
2195
|
}
|
|
2184
2196
|
|
|
2197
|
+
interface GeneratedAsset {
|
|
2198
|
+
/** Raw bytes of the asset. */
|
|
2199
|
+
data: Buffer;
|
|
2200
|
+
mimeType: string;
|
|
2201
|
+
/** Suggested filename, extension included. */
|
|
2202
|
+
filename: string;
|
|
2203
|
+
modelId: string;
|
|
2204
|
+
provider: string;
|
|
2205
|
+
/** Provider-side revision of the prompt, when it reports one (DALL·E does). */
|
|
2206
|
+
revisedPrompt?: string;
|
|
2207
|
+
}
|
|
2208
|
+
|
|
2209
|
+
/**
|
|
2210
|
+
* Where finished bytes go. Returns a short human-readable locator (a path, a
|
|
2211
|
+
* file id, a URL) that the tool reports back to the model.
|
|
2212
|
+
*/
|
|
2213
|
+
type AssetSink = (asset: GeneratedAsset) => Promise<string>;
|
|
2214
|
+
|
|
2185
2215
|
/** One entry in the per-run orchestration decision trail (see /why). */
|
|
2186
2216
|
interface DecisionLogEntry {
|
|
2187
2217
|
at: string;
|
|
@@ -2192,6 +2222,7 @@ declare class Cascade extends EventEmitter {
|
|
|
2192
2222
|
private router;
|
|
2193
2223
|
private toolRegistry;
|
|
2194
2224
|
private multimodal;
|
|
2225
|
+
private mediaSink?;
|
|
2195
2226
|
private mcpClient;
|
|
2196
2227
|
private codeIndex?;
|
|
2197
2228
|
private config;
|
|
@@ -2287,6 +2318,16 @@ declare class Cascade extends EventEmitter {
|
|
|
2287
2318
|
* server stores a file row) constructs the tools itself via buildMediaTools
|
|
2288
2319
|
* with its own sink.
|
|
2289
2320
|
*/
|
|
2321
|
+
/**
|
|
2322
|
+
* Replace where generated media is written.
|
|
2323
|
+
*
|
|
2324
|
+
* The default sink writes into the workspace, which is what a desktop or CLI
|
|
2325
|
+
* run wants. A host with different storage — the cloud server keeps a file
|
|
2326
|
+
* row plus bytes under the tenant's directory — supplies its own here, and
|
|
2327
|
+
* the media tools are rebuilt around it. Re-registering by name replaces the
|
|
2328
|
+
* existing tools rather than duplicating them.
|
|
2329
|
+
*/
|
|
2330
|
+
setMediaSink(sink: AssetSink): void;
|
|
2290
2331
|
private registerMediaTools;
|
|
2291
2332
|
/**
|
|
2292
2333
|
* Supply per-model thumbs-up/down counts so Auto routing can weigh how models
|
|
@@ -3756,15 +3797,8 @@ declare class CascadeToolError extends Error {
|
|
|
3756
3797
|
declare function preferIpv4Host(url: string | undefined): string | undefined;
|
|
3757
3798
|
declare function nodeHttpFetch(input: string | URL | Request, init?: RequestInit, redirectCount?: number): Promise<Response>;
|
|
3758
3799
|
|
|
3759
|
-
/**
|
|
3760
|
-
|
|
3761
|
-
* its (arbitrary) deployment name. Ordered most-specific → least so "gpt-5-mini"
|
|
3762
|
-
* doesn't match the "gpt-5" base. Distinct point releases (gpt-5.5, gpt-5.4,
|
|
3763
|
-
* gpt-5.4-mini) resolve to their OWN base so their real economics + benchmark
|
|
3764
|
-
* scores apply — only unrecognised gpt-5.x fold into the gpt-5 base.
|
|
3765
|
-
* Returns null when the name gives no signal (e.g. "prod-fast") — the caller
|
|
3766
|
-
* then keeps neutral defaults, or the user can set an explicit base model.
|
|
3767
|
-
*/
|
|
3800
|
+
/** Selectable base models, in the order a picker should show them. */
|
|
3801
|
+
declare const AZURE_BASE_MODELS: readonly string[];
|
|
3768
3802
|
declare function inferAzureBaseModel(deploymentName: string): string | null;
|
|
3769
3803
|
/**
|
|
3770
3804
|
* The ModelInfo for one configured Azure deployment. On Azure the deployment IS
|
|
@@ -3963,4 +3997,4 @@ declare function gatherSyncBundle(config: CascadeConfig): SyncBundle;
|
|
|
3963
3997
|
/** Merge a pulled bundle into a config, returning the updated config to persist. */
|
|
3964
3998
|
declare function applySyncBundle(bundle: SyncBundle, config: CascadeConfig): CascadeConfig;
|
|
3965
3999
|
|
|
3966
|
-
export { AZURE_BASE_URL_TEMPLATE, type ApprovalRequest, type ApprovalResponse, type AuditEntry, AuditLogger, type BenchmarksConfig, type BudgetConfig, CASCADE_AUDIT_FILE, CASCADE_CONFIG_DIR, CASCADE_CONFIG_FILE, CASCADE_DASHBOARD_SECRET_FILE, CASCADE_DB_FILE, CASCADE_IGNORE_FILE, CASCADE_KEYSTORE_FILE, CASCADE_MD_FILE, CASCADE_VERSION, CHARS_PER_TOKEN, COMPLEXITY_T2_COUNT, Cascade, CascadeCancelledError, type CascadeConfig, type CascadeEvent, type CascadeEventType, CascadeIgnore, type CascadeMessage, CascadeRouter, type CascadeRunOptions, type CascadeRunResult, type CascadeThemeName, CascadeToolError, type Chunk, type ChunkOptions, CloudClient, type CloudConversation, type CloudMessage, type CloudSession, type CloudSessionStore, type CloudTurnInput, type CloudUser, type CodeChunkOptions, type CodeChunker, CodeSearchTool, type CompleteFn, ConfigManager, type ConversationMessage, DEFAULT_API_PORT, DEFAULT_APPROVAL_REQUIRED, DEFAULT_AUTO_SUMMARIZE_AT, DEFAULT_CLOUD_URL, DEFAULT_CONTEXT_LIMIT, DEFAULT_DASHBOARD_PORT, DEFAULT_MAX_SESSION_MESSAGES, DEFAULT_RETENTION_DAYS, DEFAULT_THEME, type DashboardConfig, DashboardServer, type DeviceStart, type DistilledFact, type Embedder, type EncryptedBlob, type EscalationPayload, type ExtendedContextConfig, type FileManifest, FileMcpOAuthStore, GLOBAL_CONFIG_DIR, GLOBAL_CREDENTIALS_FILE, GLOBAL_DB_FILE, GLOBAL_KEYSTORE_FILE, GLOBAL_RUNTIME_DB_FILE, type GenerateOptions, type GenerateResult, type GraphFactSource, GraphRetriever, type GraphSearchOptions, GraphSearchTool, type HookDefinition, type HooksConfig, HooksRunner, type Identity, type ImageAttachment, Keystore, LLMReranker, LM_STUDIO_BASE_URL, type LegacyThemeName, MODELS, type ManifestDiff, McpClient, McpOAuthProvider, type McpOAuthState, type McpOAuthStore, type McpServerConfig$1 as McpServerConfig, type MemoryConfig, MemoryStore, type Message, type MessageContent, type MessagePayload, type MessageStatus, type MessageType, type ModelInfo, type ModelOverrides, type NativeProvider, OLLAMA_BASE_URL, OpenAICompatibleEmbedder, type OpenAIEmbedderOptions, PROVIDER_DISPLAY_NAMES, type PeerMessage, type PeerMessageEvent, type PeerSyncPayload, type PeerSyncType, type PermissionDecision, type PermissionDecisionPayload, type PermissionRequest, type PermissionTrailEntry, type PlanReviewConfig, type ProviderConfig, type ProviderType, type RankedFact, type RefreshResult, type Reranker, type RetrievalContext, type RetrievalMode, type RetrievalPlan, Retriever, type RetrieverSearchOptions, type RuntimeNode, type RuntimeNodeLog, type RuntimeRefreshPayload, type RuntimeScope, type RuntimeSession, type RuntimeSnapshotPayload, type ScheduledTask, type ScoredChunk, type SearchOptions, type Session, type SessionCheckpoint, type SessionMetadata, type SessionSubscriptionPayload, SqliteVectorStore, type StatusUpdate, type StoredMessage, type StreamChunk, type SyncBundle, T1Administrator, type T1ToT2Assignment, T1_MODEL_PRIORITY, T2Manager, type T2Result, type T2ToT3Assignment, T2_MODEL_PRIORITY, type T3Result, type T3ResultPayload, type T3SubtaskSpec, T3Worker, T3_MODEL_PRIORITY, THEME_NAMES, TOOL_NAMES, type TaskComplexity, TaskScheduler, Telemetry, type TelemetryConfig, type Theme, type ThemeColors, type ThemeName, type TierConfig, type TierLimits, type TierRole, type TierStatus, type TokenUsage, type ToolCall, type ToolDefinition, type ToolExecuteOptions, ToolRegistry, type ToolResult, type ToolsConfig, VISION_MODEL_PRIORITY, type VectorStore, type WebSearchConfig, type WebhookConfig, type WorkspaceConfig, WorkspaceIndex, type WorkspaceIndexOptions, applySyncBundle, azureModelForDeployment, beginMcpOAuth, buildManifest, buildSessionTranscript, cagCharBudget, chatCompleterFromProviders, chunkCode, chunkText, completeMcpOAuth, connectMcpWithLoopbackOAuth, createCascade, decryptJSON as decryptSyncBlob, diffManifest, discoverMcpAuthServer, distillSessionFacts, embedderFromProviders, encryptJSON as encryptSyncBlob, fileOAuthProvider, gatherSyncBundle, hashContent, heuristicCodeChunker, inferAzureBaseModel, nodeHttpFetch, parseRankOrder, planRetrieval, preferIpv4Host, reciprocalRankFusion, refreshMcpToken, runCascade, sessionWorthRemembering, streamCascade };
|
|
4000
|
+
export { AZURE_BASE_MODELS, AZURE_BASE_URL_TEMPLATE, type ApprovalRequest, type ApprovalResponse, type AuditEntry, AuditLogger, type BenchmarksConfig, type BudgetConfig, CASCADE_AUDIT_FILE, CASCADE_CONFIG_DIR, CASCADE_CONFIG_FILE, CASCADE_DASHBOARD_SECRET_FILE, CASCADE_DB_FILE, CASCADE_IGNORE_FILE, CASCADE_KEYSTORE_FILE, CASCADE_MD_FILE, CASCADE_VERSION, CHARS_PER_TOKEN, COMPLEXITY_T2_COUNT, Cascade, CascadeCancelledError, type CascadeConfig, type CascadeEvent, type CascadeEventType, CascadeIgnore, type CascadeMessage, CascadeRouter, type CascadeRunOptions, type CascadeRunResult, type CascadeThemeName, CascadeToolError, type Chunk, type ChunkOptions, CloudClient, type CloudConversation, type CloudMessage, type CloudSession, type CloudSessionStore, type CloudTurnInput, type CloudUser, type CodeChunkOptions, type CodeChunker, CodeSearchTool, type CompleteFn, ConfigManager, type ConversationMessage, DEFAULT_API_PORT, DEFAULT_APPROVAL_REQUIRED, DEFAULT_AUTO_SUMMARIZE_AT, DEFAULT_CLOUD_URL, DEFAULT_CONTEXT_LIMIT, DEFAULT_DASHBOARD_PORT, DEFAULT_MAX_SESSION_MESSAGES, DEFAULT_RETENTION_DAYS, DEFAULT_THEME, type DashboardConfig, DashboardServer, type DeviceStart, type DistilledFact, type Embedder, type EncryptedBlob, type EscalationPayload, type ExtendedContextConfig, type FileManifest, FileMcpOAuthStore, GLOBAL_CONFIG_DIR, GLOBAL_CREDENTIALS_FILE, GLOBAL_DB_FILE, GLOBAL_KEYSTORE_FILE, GLOBAL_RUNTIME_DB_FILE, type GenerateOptions, type GenerateResult, type GraphFactSource, GraphRetriever, type GraphSearchOptions, GraphSearchTool, type HookDefinition, type HooksConfig, HooksRunner, type Identity, type ImageAttachment, Keystore, LLMReranker, LM_STUDIO_BASE_URL, type LegacyThemeName, MODELS, type ManifestDiff, McpClient, McpOAuthProvider, type McpOAuthState, type McpOAuthStore, type McpServerConfig$1 as McpServerConfig, type MemoryConfig, MemoryStore, type Message, type MessageContent, type MessagePayload, type MessageStatus, type MessageType, type ModelInfo, type ModelOverrides, type NativeProvider, OLLAMA_BASE_URL, OpenAICompatibleEmbedder, type OpenAIEmbedderOptions, PROVIDER_DISPLAY_NAMES, type PeerMessage, type PeerMessageEvent, type PeerSyncPayload, type PeerSyncType, type PermissionDecision, type PermissionDecisionPayload, type PermissionRequest, type PermissionTrailEntry, type PlanReviewConfig, type ProviderConfig, type ProviderType, type RankedFact, type RefreshResult, type Reranker, type RetrievalContext, type RetrievalMode, type RetrievalPlan, Retriever, type RetrieverSearchOptions, type RuntimeNode, type RuntimeNodeLog, type RuntimeRefreshPayload, type RuntimeScope, type RuntimeSession, type RuntimeSnapshotPayload, type ScheduledTask, type ScoredChunk, type SearchOptions, type Session, type SessionCheckpoint, type SessionMetadata, type SessionSubscriptionPayload, SqliteVectorStore, type StatusUpdate, type StoredMessage, type StreamChunk, type SyncBundle, T1Administrator, type T1ToT2Assignment, T1_MODEL_PRIORITY, T2Manager, type T2Result, type T2ToT3Assignment, T2_MODEL_PRIORITY, type T3Result, type T3ResultPayload, type T3SubtaskSpec, T3Worker, T3_MODEL_PRIORITY, THEME_NAMES, TOOL_NAMES, type TaskComplexity, TaskScheduler, Telemetry, type TelemetryConfig, type Theme, type ThemeColors, type ThemeName, type TierConfig, type TierLimits, type TierRole, type TierStatus, type TokenUsage, type ToolCall, type ToolDefinition, type ToolExecuteOptions, ToolRegistry, type ToolResult, type ToolsConfig, VISION_MODEL_PRIORITY, type VectorStore, type WebSearchConfig, type WebhookConfig, type WorkspaceConfig, WorkspaceIndex, type WorkspaceIndexOptions, applySyncBundle, azureModelForDeployment, beginMcpOAuth, buildManifest, buildSessionTranscript, cagCharBudget, chatCompleterFromProviders, chunkCode, chunkText, completeMcpOAuth, connectMcpWithLoopbackOAuth, createCascade, decryptJSON as decryptSyncBlob, diffManifest, discoverMcpAuthServer, distillSessionFacts, embedderFromProviders, encryptJSON as encryptSyncBlob, fileOAuthProvider, gatherSyncBundle, hashContent, heuristicCodeChunker, inferAzureBaseModel, nodeHttpFetch, parseRankOrder, planRetrieval, preferIpv4Host, reciprocalRankFusion, refreshMcpToken, runCascade, sessionWorthRemembering, streamCascade };
|
package/dist/index.d.ts
CHANGED
|
@@ -202,6 +202,12 @@ interface ToolExecuteOptions {
|
|
|
202
202
|
* paying it out and discarding the result.
|
|
203
203
|
*/
|
|
204
204
|
signal?: AbortSignal;
|
|
205
|
+
/**
|
|
206
|
+
* Progress notes from a long-running tool. Video generation polls for minutes;
|
|
207
|
+
* without a channel back, a working render is indistinguishable from a hang —
|
|
208
|
+
* which is the most likely reason someone kills one.
|
|
209
|
+
*/
|
|
210
|
+
onProgress?: (note: string) => void;
|
|
205
211
|
saveSnapshot?: (filePath: string, content: string) => Promise<void>;
|
|
206
212
|
sendPeerSync?: (to: string, syncType: PeerSyncType, content: string | Record<string, unknown>) => void;
|
|
207
213
|
getPeerMessages?: () => Array<{
|
|
@@ -592,6 +598,12 @@ interface ToolsConfig {
|
|
|
592
598
|
* behavior). An empty array registers no tools at all.
|
|
593
599
|
*/
|
|
594
600
|
enabledTools?: string[];
|
|
601
|
+
/**
|
|
602
|
+
* Tools to remove even when they would otherwise be registered. Reaches
|
|
603
|
+
* tools registered outside `enabledTools` (MCP, media generation), which is
|
|
604
|
+
* the only way to switch those off.
|
|
605
|
+
*/
|
|
606
|
+
disabledTools?: string[];
|
|
595
607
|
}
|
|
596
608
|
interface HooksConfig {
|
|
597
609
|
preToolUse?: HookDefinition[];
|
|
@@ -2182,6 +2194,24 @@ declare class T1Administrator extends BaseTier {
|
|
|
2182
2194
|
private evaluatePermissionAtT1;
|
|
2183
2195
|
}
|
|
2184
2196
|
|
|
2197
|
+
interface GeneratedAsset {
|
|
2198
|
+
/** Raw bytes of the asset. */
|
|
2199
|
+
data: Buffer;
|
|
2200
|
+
mimeType: string;
|
|
2201
|
+
/** Suggested filename, extension included. */
|
|
2202
|
+
filename: string;
|
|
2203
|
+
modelId: string;
|
|
2204
|
+
provider: string;
|
|
2205
|
+
/** Provider-side revision of the prompt, when it reports one (DALL·E does). */
|
|
2206
|
+
revisedPrompt?: string;
|
|
2207
|
+
}
|
|
2208
|
+
|
|
2209
|
+
/**
|
|
2210
|
+
* Where finished bytes go. Returns a short human-readable locator (a path, a
|
|
2211
|
+
* file id, a URL) that the tool reports back to the model.
|
|
2212
|
+
*/
|
|
2213
|
+
type AssetSink = (asset: GeneratedAsset) => Promise<string>;
|
|
2214
|
+
|
|
2185
2215
|
/** One entry in the per-run orchestration decision trail (see /why). */
|
|
2186
2216
|
interface DecisionLogEntry {
|
|
2187
2217
|
at: string;
|
|
@@ -2192,6 +2222,7 @@ declare class Cascade extends EventEmitter {
|
|
|
2192
2222
|
private router;
|
|
2193
2223
|
private toolRegistry;
|
|
2194
2224
|
private multimodal;
|
|
2225
|
+
private mediaSink?;
|
|
2195
2226
|
private mcpClient;
|
|
2196
2227
|
private codeIndex?;
|
|
2197
2228
|
private config;
|
|
@@ -2287,6 +2318,16 @@ declare class Cascade extends EventEmitter {
|
|
|
2287
2318
|
* server stores a file row) constructs the tools itself via buildMediaTools
|
|
2288
2319
|
* with its own sink.
|
|
2289
2320
|
*/
|
|
2321
|
+
/**
|
|
2322
|
+
* Replace where generated media is written.
|
|
2323
|
+
*
|
|
2324
|
+
* The default sink writes into the workspace, which is what a desktop or CLI
|
|
2325
|
+
* run wants. A host with different storage — the cloud server keeps a file
|
|
2326
|
+
* row plus bytes under the tenant's directory — supplies its own here, and
|
|
2327
|
+
* the media tools are rebuilt around it. Re-registering by name replaces the
|
|
2328
|
+
* existing tools rather than duplicating them.
|
|
2329
|
+
*/
|
|
2330
|
+
setMediaSink(sink: AssetSink): void;
|
|
2290
2331
|
private registerMediaTools;
|
|
2291
2332
|
/**
|
|
2292
2333
|
* Supply per-model thumbs-up/down counts so Auto routing can weigh how models
|
|
@@ -3756,15 +3797,8 @@ declare class CascadeToolError extends Error {
|
|
|
3756
3797
|
declare function preferIpv4Host(url: string | undefined): string | undefined;
|
|
3757
3798
|
declare function nodeHttpFetch(input: string | URL | Request, init?: RequestInit, redirectCount?: number): Promise<Response>;
|
|
3758
3799
|
|
|
3759
|
-
/**
|
|
3760
|
-
|
|
3761
|
-
* its (arbitrary) deployment name. Ordered most-specific → least so "gpt-5-mini"
|
|
3762
|
-
* doesn't match the "gpt-5" base. Distinct point releases (gpt-5.5, gpt-5.4,
|
|
3763
|
-
* gpt-5.4-mini) resolve to their OWN base so their real economics + benchmark
|
|
3764
|
-
* scores apply — only unrecognised gpt-5.x fold into the gpt-5 base.
|
|
3765
|
-
* Returns null when the name gives no signal (e.g. "prod-fast") — the caller
|
|
3766
|
-
* then keeps neutral defaults, or the user can set an explicit base model.
|
|
3767
|
-
*/
|
|
3800
|
+
/** Selectable base models, in the order a picker should show them. */
|
|
3801
|
+
declare const AZURE_BASE_MODELS: readonly string[];
|
|
3768
3802
|
declare function inferAzureBaseModel(deploymentName: string): string | null;
|
|
3769
3803
|
/**
|
|
3770
3804
|
* The ModelInfo for one configured Azure deployment. On Azure the deployment IS
|
|
@@ -3963,4 +3997,4 @@ declare function gatherSyncBundle(config: CascadeConfig): SyncBundle;
|
|
|
3963
3997
|
/** Merge a pulled bundle into a config, returning the updated config to persist. */
|
|
3964
3998
|
declare function applySyncBundle(bundle: SyncBundle, config: CascadeConfig): CascadeConfig;
|
|
3965
3999
|
|
|
3966
|
-
export { AZURE_BASE_URL_TEMPLATE, type ApprovalRequest, type ApprovalResponse, type AuditEntry, AuditLogger, type BenchmarksConfig, type BudgetConfig, CASCADE_AUDIT_FILE, CASCADE_CONFIG_DIR, CASCADE_CONFIG_FILE, CASCADE_DASHBOARD_SECRET_FILE, CASCADE_DB_FILE, CASCADE_IGNORE_FILE, CASCADE_KEYSTORE_FILE, CASCADE_MD_FILE, CASCADE_VERSION, CHARS_PER_TOKEN, COMPLEXITY_T2_COUNT, Cascade, CascadeCancelledError, type CascadeConfig, type CascadeEvent, type CascadeEventType, CascadeIgnore, type CascadeMessage, CascadeRouter, type CascadeRunOptions, type CascadeRunResult, type CascadeThemeName, CascadeToolError, type Chunk, type ChunkOptions, CloudClient, type CloudConversation, type CloudMessage, type CloudSession, type CloudSessionStore, type CloudTurnInput, type CloudUser, type CodeChunkOptions, type CodeChunker, CodeSearchTool, type CompleteFn, ConfigManager, type ConversationMessage, DEFAULT_API_PORT, DEFAULT_APPROVAL_REQUIRED, DEFAULT_AUTO_SUMMARIZE_AT, DEFAULT_CLOUD_URL, DEFAULT_CONTEXT_LIMIT, DEFAULT_DASHBOARD_PORT, DEFAULT_MAX_SESSION_MESSAGES, DEFAULT_RETENTION_DAYS, DEFAULT_THEME, type DashboardConfig, DashboardServer, type DeviceStart, type DistilledFact, type Embedder, type EncryptedBlob, type EscalationPayload, type ExtendedContextConfig, type FileManifest, FileMcpOAuthStore, GLOBAL_CONFIG_DIR, GLOBAL_CREDENTIALS_FILE, GLOBAL_DB_FILE, GLOBAL_KEYSTORE_FILE, GLOBAL_RUNTIME_DB_FILE, type GenerateOptions, type GenerateResult, type GraphFactSource, GraphRetriever, type GraphSearchOptions, GraphSearchTool, type HookDefinition, type HooksConfig, HooksRunner, type Identity, type ImageAttachment, Keystore, LLMReranker, LM_STUDIO_BASE_URL, type LegacyThemeName, MODELS, type ManifestDiff, McpClient, McpOAuthProvider, type McpOAuthState, type McpOAuthStore, type McpServerConfig$1 as McpServerConfig, type MemoryConfig, MemoryStore, type Message, type MessageContent, type MessagePayload, type MessageStatus, type MessageType, type ModelInfo, type ModelOverrides, type NativeProvider, OLLAMA_BASE_URL, OpenAICompatibleEmbedder, type OpenAIEmbedderOptions, PROVIDER_DISPLAY_NAMES, type PeerMessage, type PeerMessageEvent, type PeerSyncPayload, type PeerSyncType, type PermissionDecision, type PermissionDecisionPayload, type PermissionRequest, type PermissionTrailEntry, type PlanReviewConfig, type ProviderConfig, type ProviderType, type RankedFact, type RefreshResult, type Reranker, type RetrievalContext, type RetrievalMode, type RetrievalPlan, Retriever, type RetrieverSearchOptions, type RuntimeNode, type RuntimeNodeLog, type RuntimeRefreshPayload, type RuntimeScope, type RuntimeSession, type RuntimeSnapshotPayload, type ScheduledTask, type ScoredChunk, type SearchOptions, type Session, type SessionCheckpoint, type SessionMetadata, type SessionSubscriptionPayload, SqliteVectorStore, type StatusUpdate, type StoredMessage, type StreamChunk, type SyncBundle, T1Administrator, type T1ToT2Assignment, T1_MODEL_PRIORITY, T2Manager, type T2Result, type T2ToT3Assignment, T2_MODEL_PRIORITY, type T3Result, type T3ResultPayload, type T3SubtaskSpec, T3Worker, T3_MODEL_PRIORITY, THEME_NAMES, TOOL_NAMES, type TaskComplexity, TaskScheduler, Telemetry, type TelemetryConfig, type Theme, type ThemeColors, type ThemeName, type TierConfig, type TierLimits, type TierRole, type TierStatus, type TokenUsage, type ToolCall, type ToolDefinition, type ToolExecuteOptions, ToolRegistry, type ToolResult, type ToolsConfig, VISION_MODEL_PRIORITY, type VectorStore, type WebSearchConfig, type WebhookConfig, type WorkspaceConfig, WorkspaceIndex, type WorkspaceIndexOptions, applySyncBundle, azureModelForDeployment, beginMcpOAuth, buildManifest, buildSessionTranscript, cagCharBudget, chatCompleterFromProviders, chunkCode, chunkText, completeMcpOAuth, connectMcpWithLoopbackOAuth, createCascade, decryptJSON as decryptSyncBlob, diffManifest, discoverMcpAuthServer, distillSessionFacts, embedderFromProviders, encryptJSON as encryptSyncBlob, fileOAuthProvider, gatherSyncBundle, hashContent, heuristicCodeChunker, inferAzureBaseModel, nodeHttpFetch, parseRankOrder, planRetrieval, preferIpv4Host, reciprocalRankFusion, refreshMcpToken, runCascade, sessionWorthRemembering, streamCascade };
|
|
4000
|
+
export { AZURE_BASE_MODELS, AZURE_BASE_URL_TEMPLATE, type ApprovalRequest, type ApprovalResponse, type AuditEntry, AuditLogger, type BenchmarksConfig, type BudgetConfig, CASCADE_AUDIT_FILE, CASCADE_CONFIG_DIR, CASCADE_CONFIG_FILE, CASCADE_DASHBOARD_SECRET_FILE, CASCADE_DB_FILE, CASCADE_IGNORE_FILE, CASCADE_KEYSTORE_FILE, CASCADE_MD_FILE, CASCADE_VERSION, CHARS_PER_TOKEN, COMPLEXITY_T2_COUNT, Cascade, CascadeCancelledError, type CascadeConfig, type CascadeEvent, type CascadeEventType, CascadeIgnore, type CascadeMessage, CascadeRouter, type CascadeRunOptions, type CascadeRunResult, type CascadeThemeName, CascadeToolError, type Chunk, type ChunkOptions, CloudClient, type CloudConversation, type CloudMessage, type CloudSession, type CloudSessionStore, type CloudTurnInput, type CloudUser, type CodeChunkOptions, type CodeChunker, CodeSearchTool, type CompleteFn, ConfigManager, type ConversationMessage, DEFAULT_API_PORT, DEFAULT_APPROVAL_REQUIRED, DEFAULT_AUTO_SUMMARIZE_AT, DEFAULT_CLOUD_URL, DEFAULT_CONTEXT_LIMIT, DEFAULT_DASHBOARD_PORT, DEFAULT_MAX_SESSION_MESSAGES, DEFAULT_RETENTION_DAYS, DEFAULT_THEME, type DashboardConfig, DashboardServer, type DeviceStart, type DistilledFact, type Embedder, type EncryptedBlob, type EscalationPayload, type ExtendedContextConfig, type FileManifest, FileMcpOAuthStore, GLOBAL_CONFIG_DIR, GLOBAL_CREDENTIALS_FILE, GLOBAL_DB_FILE, GLOBAL_KEYSTORE_FILE, GLOBAL_RUNTIME_DB_FILE, type GenerateOptions, type GenerateResult, type GraphFactSource, GraphRetriever, type GraphSearchOptions, GraphSearchTool, type HookDefinition, type HooksConfig, HooksRunner, type Identity, type ImageAttachment, Keystore, LLMReranker, LM_STUDIO_BASE_URL, type LegacyThemeName, MODELS, type ManifestDiff, McpClient, McpOAuthProvider, type McpOAuthState, type McpOAuthStore, type McpServerConfig$1 as McpServerConfig, type MemoryConfig, MemoryStore, type Message, type MessageContent, type MessagePayload, type MessageStatus, type MessageType, type ModelInfo, type ModelOverrides, type NativeProvider, OLLAMA_BASE_URL, OpenAICompatibleEmbedder, type OpenAIEmbedderOptions, PROVIDER_DISPLAY_NAMES, type PeerMessage, type PeerMessageEvent, type PeerSyncPayload, type PeerSyncType, type PermissionDecision, type PermissionDecisionPayload, type PermissionRequest, type PermissionTrailEntry, type PlanReviewConfig, type ProviderConfig, type ProviderType, type RankedFact, type RefreshResult, type Reranker, type RetrievalContext, type RetrievalMode, type RetrievalPlan, Retriever, type RetrieverSearchOptions, type RuntimeNode, type RuntimeNodeLog, type RuntimeRefreshPayload, type RuntimeScope, type RuntimeSession, type RuntimeSnapshotPayload, type ScheduledTask, type ScoredChunk, type SearchOptions, type Session, type SessionCheckpoint, type SessionMetadata, type SessionSubscriptionPayload, SqliteVectorStore, type StatusUpdate, type StoredMessage, type StreamChunk, type SyncBundle, T1Administrator, type T1ToT2Assignment, T1_MODEL_PRIORITY, T2Manager, type T2Result, type T2ToT3Assignment, T2_MODEL_PRIORITY, type T3Result, type T3ResultPayload, type T3SubtaskSpec, T3Worker, T3_MODEL_PRIORITY, THEME_NAMES, TOOL_NAMES, type TaskComplexity, TaskScheduler, Telemetry, type TelemetryConfig, type Theme, type ThemeColors, type ThemeName, type TierConfig, type TierLimits, type TierRole, type TierStatus, type TokenUsage, type ToolCall, type ToolDefinition, type ToolExecuteOptions, ToolRegistry, type ToolResult, type ToolsConfig, VISION_MODEL_PRIORITY, type VectorStore, type WebSearchConfig, type WebhookConfig, type WorkspaceConfig, WorkspaceIndex, type WorkspaceIndexOptions, applySyncBundle, azureModelForDeployment, beginMcpOAuth, buildManifest, buildSessionTranscript, cagCharBudget, chatCompleterFromProviders, chunkCode, chunkText, completeMcpOAuth, connectMcpWithLoopbackOAuth, createCascade, decryptJSON as decryptSyncBlob, diffManifest, discoverMcpAuthServer, distillSessionFacts, embedderFromProviders, encryptJSON as encryptSyncBlob, fileOAuthProvider, gatherSyncBundle, hashContent, heuristicCodeChunker, inferAzureBaseModel, nodeHttpFetch, parseRankOrder, planRetrieval, preferIpv4Host, reciprocalRankFusion, refreshMcpToken, runCascade, sessionWorthRemembering, streamCascade };
|
package/dist/index.js
CHANGED
|
@@ -1845,7 +1845,7 @@ function reconcilePrice(model, live) {
|
|
|
1845
1845
|
}
|
|
1846
1846
|
|
|
1847
1847
|
// src/constants.ts
|
|
1848
|
-
var CASCADE_VERSION = "0.
|
|
1848
|
+
var CASCADE_VERSION = "0.53.0";
|
|
1849
1849
|
var CASCADE_CONFIG_DIR = ".cascade";
|
|
1850
1850
|
var CASCADE_MD_FILE = "CASCADE.md";
|
|
1851
1851
|
var CASCADE_IGNORE_FILE = ".cascadeignore";
|
|
@@ -2810,22 +2810,23 @@ var OpenAIProvider = class extends BaseProvider {
|
|
|
2810
2810
|
|
|
2811
2811
|
// src/providers/azure.ts
|
|
2812
2812
|
var DEFAULT_AZURE_API_VERSION = "2024-12-01-preview";
|
|
2813
|
+
var AZURE_BASE_MODEL_RULES = [
|
|
2814
|
+
[/gpt-?5\.5/, "gpt-5.5"],
|
|
2815
|
+
[/gpt-?5\.4.*mini/, "gpt-5.4-mini"],
|
|
2816
|
+
[/gpt-?5\.4/, "gpt-5.4"],
|
|
2817
|
+
[/gpt-?5.*nano/, "gpt-5-nano"],
|
|
2818
|
+
[/gpt-?5.*mini/, "gpt-5-mini"],
|
|
2819
|
+
[/gpt-?5/, "gpt-5"],
|
|
2820
|
+
[/gpt-?4\.1-nano/, "gpt-4.1-nano"],
|
|
2821
|
+
[/gpt-?4\.1-mini/, "gpt-4.1-mini"],
|
|
2822
|
+
[/gpt-?4\.1/, "gpt-4.1"],
|
|
2823
|
+
[/gpt-?4o-mini/, "gpt-4o-mini"],
|
|
2824
|
+
[/gpt-?4o/, "gpt-4o"]
|
|
2825
|
+
];
|
|
2826
|
+
var AZURE_BASE_MODELS = AZURE_BASE_MODEL_RULES.map(([, id]) => id);
|
|
2813
2827
|
function inferAzureBaseModel(deploymentName) {
|
|
2814
2828
|
const n = deploymentName.toLowerCase();
|
|
2815
|
-
const
|
|
2816
|
-
[/gpt-?5\.5/, "gpt-5.5"],
|
|
2817
|
-
[/gpt-?5\.4.*mini/, "gpt-5.4-mini"],
|
|
2818
|
-
[/gpt-?5\.4/, "gpt-5.4"],
|
|
2819
|
-
[/gpt-?5.*nano/, "gpt-5-nano"],
|
|
2820
|
-
[/gpt-?5.*mini/, "gpt-5-mini"],
|
|
2821
|
-
[/gpt-?5/, "gpt-5"],
|
|
2822
|
-
[/gpt-?4\.1-nano/, "gpt-4.1-nano"],
|
|
2823
|
-
[/gpt-?4\.1-mini/, "gpt-4.1-mini"],
|
|
2824
|
-
[/gpt-?4\.1/, "gpt-4.1"],
|
|
2825
|
-
[/gpt-?4o-mini/, "gpt-4o-mini"],
|
|
2826
|
-
[/gpt-?4o/, "gpt-4o"]
|
|
2827
|
-
];
|
|
2828
|
-
for (const [re, base] of rules) if (re.test(n)) return base;
|
|
2829
|
+
for (const [re, base] of AZURE_BASE_MODEL_RULES) if (re.test(n)) return base;
|
|
2829
2830
|
return null;
|
|
2830
2831
|
}
|
|
2831
2832
|
function azureModelForDeployment(cfg) {
|
|
@@ -8848,17 +8849,13 @@ var CAPABILITIES = [
|
|
|
8848
8849
|
},
|
|
8849
8850
|
// ── Video ──
|
|
8850
8851
|
{
|
|
8851
|
-
//
|
|
8852
|
-
//
|
|
8853
|
-
//
|
|
8854
|
-
// signed URL. That is a different execution shape from every other entry
|
|
8855
|
-
// here and is not wired up — claiming otherwise would produce a tool that
|
|
8856
|
-
// fails at call time instead of an honest "not yet".
|
|
8852
|
+
// Long-running: submit returns an operation name, the video lands minutes
|
|
8853
|
+
// later, and the bytes come from a short-lived signed URL. generate.ts owns
|
|
8854
|
+
// that polling loop; the registry only records the shape via `api`.
|
|
8857
8855
|
modality: "video",
|
|
8858
8856
|
provider: "gemini",
|
|
8859
8857
|
modelId: "veo-3.1-generate-001",
|
|
8860
|
-
api: "gemini-predict"
|
|
8861
|
-
unsupported: "Veo runs as a long-running operation (submit \u2192 poll \u2192 fetch). Not wired up yet."
|
|
8858
|
+
api: "gemini-predict-lro"
|
|
8862
8859
|
}
|
|
8863
8860
|
];
|
|
8864
8861
|
function capabilityCost(cap) {
|
|
@@ -9171,6 +9168,75 @@ async function generateSpeech(cap, cfg, req, signal) {
|
|
|
9171
9168
|
};
|
|
9172
9169
|
}, cap.modelId);
|
|
9173
9170
|
}
|
|
9171
|
+
var VIDEO_POLL_INTERVAL_MS = 1e4;
|
|
9172
|
+
var VIDEO_TIMEOUT_MS = 8 * 6e4;
|
|
9173
|
+
function sleep(ms, signal) {
|
|
9174
|
+
return new Promise((resolve2, reject) => {
|
|
9175
|
+
if (signal?.aborted) return reject(new Error("Cancelled."));
|
|
9176
|
+
const timer = setTimeout(() => {
|
|
9177
|
+
signal?.removeEventListener("abort", onAbort);
|
|
9178
|
+
resolve2();
|
|
9179
|
+
}, ms);
|
|
9180
|
+
function onAbort() {
|
|
9181
|
+
clearTimeout(timer);
|
|
9182
|
+
reject(new Error("Cancelled."));
|
|
9183
|
+
}
|
|
9184
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
9185
|
+
});
|
|
9186
|
+
}
|
|
9187
|
+
async function generateVideo(cap, cfg, req, signal, onProgress) {
|
|
9188
|
+
return callProvider(async () => {
|
|
9189
|
+
if (cap.api !== "gemini-predict-lro") throw new Error(`${cap.modelId} is not a video generator.`);
|
|
9190
|
+
const base = baseUrlFor(cfg, "https://generativelanguage.googleapis.com/v1beta");
|
|
9191
|
+
const key = cfg.apiKey ?? "";
|
|
9192
|
+
const headers = { "x-goog-api-key": key };
|
|
9193
|
+
const submit = await postJson(
|
|
9194
|
+
`${base}/models/${encodeURIComponent(cap.modelId)}:predictLongRunning`,
|
|
9195
|
+
{
|
|
9196
|
+
instances: [{ prompt: req.prompt }],
|
|
9197
|
+
parameters: {
|
|
9198
|
+
aspectRatio: req.aspectRatio ?? "16:9",
|
|
9199
|
+
...req.seconds ? { durationSeconds: req.seconds } : {}
|
|
9200
|
+
}
|
|
9201
|
+
},
|
|
9202
|
+
headers,
|
|
9203
|
+
signal
|
|
9204
|
+
);
|
|
9205
|
+
const started = await submit.json();
|
|
9206
|
+
if (!started.name) throw new Error("Video request was accepted but returned no operation to poll.");
|
|
9207
|
+
onProgress?.(`Video generation started (${cap.modelId}). This usually takes 1-3 minutes.`);
|
|
9208
|
+
const deadline = Date.now() + VIDEO_TIMEOUT_MS;
|
|
9209
|
+
let operation = {};
|
|
9210
|
+
while (Date.now() < deadline) {
|
|
9211
|
+
await sleep(VIDEO_POLL_INTERVAL_MS, signal);
|
|
9212
|
+
const poll = await fetch(`${base}/${started.name}`, { headers, signal });
|
|
9213
|
+
if (!poll.ok) {
|
|
9214
|
+
const text = await poll.text().catch(() => "");
|
|
9215
|
+
throw Object.assign(new Error(text || poll.statusText), { status: poll.status });
|
|
9216
|
+
}
|
|
9217
|
+
operation = await poll.json();
|
|
9218
|
+
if (operation.done) break;
|
|
9219
|
+
onProgress?.("Still rendering\u2026");
|
|
9220
|
+
}
|
|
9221
|
+
if (!operation.done) {
|
|
9222
|
+
throw new Error(
|
|
9223
|
+
`Video was still rendering after ${Math.round(VIDEO_TIMEOUT_MS / 6e4)} minutes. It may still complete on the provider side, but Cascade stopped waiting.`
|
|
9224
|
+
);
|
|
9225
|
+
}
|
|
9226
|
+
if (operation.error?.message) throw new Error(operation.error.message);
|
|
9227
|
+
const uri = operation.response?.generateVideoResponse?.generatedSamples?.[0]?.video?.uri;
|
|
9228
|
+
if (!uri) throw new Error("Video finished but the response contained no video.");
|
|
9229
|
+
const media = await fetch(uri, { headers, signal });
|
|
9230
|
+
if (!media.ok) throw new Error(`Video finished but could not be downloaded (HTTP ${media.status}).`);
|
|
9231
|
+
return {
|
|
9232
|
+
data: Buffer.from(await media.arrayBuffer()),
|
|
9233
|
+
mimeType: "video/mp4",
|
|
9234
|
+
filename: stamp("mp4"),
|
|
9235
|
+
modelId: cap.modelId,
|
|
9236
|
+
provider: cap.provider
|
|
9237
|
+
};
|
|
9238
|
+
}, cap.modelId);
|
|
9239
|
+
}
|
|
9174
9240
|
async function transcribeAudio(cap, cfg, req, signal) {
|
|
9175
9241
|
return callProvider(async () => {
|
|
9176
9242
|
if (cap.api !== "openai-transcriptions") throw new Error(`${cap.modelId} is not a transcription model.`);
|
|
@@ -9295,6 +9361,58 @@ var GenerateSpeechTool = class extends BaseTool {
|
|
|
9295
9361
|
Model: ${asset.modelId} \u2014 ${r.selected.reason}`;
|
|
9296
9362
|
}
|
|
9297
9363
|
};
|
|
9364
|
+
var DEFAULT_VIDEO_SECONDS = 5;
|
|
9365
|
+
var MAX_VIDEO_SECONDS = 8;
|
|
9366
|
+
var GenerateVideoTool = class extends BaseTool {
|
|
9367
|
+
constructor(deps) {
|
|
9368
|
+
super();
|
|
9369
|
+
this.deps = deps;
|
|
9370
|
+
}
|
|
9371
|
+
deps;
|
|
9372
|
+
name = "generate_video";
|
|
9373
|
+
// The price is in the description on purpose. Video is ~1000x the cost of an
|
|
9374
|
+
// image per call, it is billed per SECOND, and the model choosing the
|
|
9375
|
+
// duration is the one deciding the bill — so the number has to be where the
|
|
9376
|
+
// model reads before calling, not only in the result afterwards.
|
|
9377
|
+
description = "Generate a short video clip from a text description. EXPENSIVE and slow: billed per second of output (about $0.40/second, so a 5-second clip costs roughly $2) and takes 1-3 minutes. Only use when the user explicitly asks for a video, and prefer the shortest duration that satisfies the request.";
|
|
9378
|
+
inputSchema = {
|
|
9379
|
+
type: "object",
|
|
9380
|
+
properties: {
|
|
9381
|
+
prompt: { type: "string", description: "What the video should show: subject, action, camera movement, style." },
|
|
9382
|
+
seconds: { type: "number", description: `Clip length, 1-${MAX_VIDEO_SECONDS} seconds (default ${DEFAULT_VIDEO_SECONDS}). Billed per second \u2014 keep it short.` },
|
|
9383
|
+
aspectRatio: { type: "string", description: 'Frame shape: "16:9" (default) or "9:16" for vertical.' },
|
|
9384
|
+
model: { type: "string", description: "Optional: force a specific video model." }
|
|
9385
|
+
},
|
|
9386
|
+
required: ["prompt"]
|
|
9387
|
+
};
|
|
9388
|
+
async execute(input, options) {
|
|
9389
|
+
const prompt = String(input["prompt"] ?? "").trim();
|
|
9390
|
+
if (!prompt) return 'Provide a "prompt" describing the video.';
|
|
9391
|
+
const r = resolve(this.deps, "video", input["model"] ? String(input["model"]) : void 0);
|
|
9392
|
+
if (!r.ok) return r.error;
|
|
9393
|
+
const asked = typeof input["seconds"] === "number" ? input["seconds"] : DEFAULT_VIDEO_SECONDS;
|
|
9394
|
+
const seconds = Math.max(1, Math.min(MAX_VIDEO_SECONDS, Math.round(asked)));
|
|
9395
|
+
const asset = await generateVideo(
|
|
9396
|
+
r.selected.capability,
|
|
9397
|
+
r.cfg,
|
|
9398
|
+
{
|
|
9399
|
+
prompt,
|
|
9400
|
+
seconds,
|
|
9401
|
+
...input["aspectRatio"] ? { aspectRatio: String(input["aspectRatio"]) } : {}
|
|
9402
|
+
},
|
|
9403
|
+
options.signal,
|
|
9404
|
+
// Progress goes to the run log so a two-minute wait doesn't look like a
|
|
9405
|
+
// hang — the single most likely reason someone kills a working render.
|
|
9406
|
+
(note) => options.onProgress?.(note)
|
|
9407
|
+
);
|
|
9408
|
+
const location = await this.deps.sink(asset);
|
|
9409
|
+
const unit = r.selected.cost;
|
|
9410
|
+
const estimate = unit ? ` Estimated cost: $${(unit.amount * seconds).toFixed(2)} (${seconds}s x ${unit.label}).` : "";
|
|
9411
|
+
const clamped = seconds !== Math.round(asked) ? ` Duration was clamped to ${seconds}s (max ${MAX_VIDEO_SECONDS}).` : "";
|
|
9412
|
+
return `Video generated and saved to ${location}.
|
|
9413
|
+
Model: ${asset.modelId}.${estimate}${clamped}`;
|
|
9414
|
+
}
|
|
9415
|
+
};
|
|
9298
9416
|
var TranscribeAudioTool = class extends BaseTool {
|
|
9299
9417
|
constructor(deps, readFile) {
|
|
9300
9418
|
super();
|
|
@@ -9345,6 +9463,7 @@ function buildMediaTools(deps, readFile) {
|
|
|
9345
9463
|
const modalities = new Set(deps.registry.availableModalities());
|
|
9346
9464
|
if (modalities.has("image")) tools.push(new GenerateImageTool(deps));
|
|
9347
9465
|
if (modalities.has("speech")) tools.push(new GenerateSpeechTool(deps));
|
|
9466
|
+
if (modalities.has("video")) tools.push(new GenerateVideoTool(deps));
|
|
9348
9467
|
if (modalities.has("transcription") && readFile) tools.push(new TranscribeAudioTool(deps, readFile));
|
|
9349
9468
|
return tools;
|
|
9350
9469
|
}
|
|
@@ -10829,6 +10948,20 @@ ${text}`;
|
|
|
10829
10948
|
}
|
|
10830
10949
|
};
|
|
10831
10950
|
|
|
10951
|
+
// src/tools/tool-name.ts
|
|
10952
|
+
var MCP_TOOL_PREFIX = "mcp__";
|
|
10953
|
+
function sanitizeToolNameSegment(segment) {
|
|
10954
|
+
const cleaned = segment.replace(/[^a-zA-Z0-9-]+/g, "_");
|
|
10955
|
+
let start = 0;
|
|
10956
|
+
let end = cleaned.length;
|
|
10957
|
+
while (start < end && cleaned[start] === "_") start++;
|
|
10958
|
+
while (end > start && cleaned[end - 1] === "_") end--;
|
|
10959
|
+
return cleaned.slice(start, end) || "_";
|
|
10960
|
+
}
|
|
10961
|
+
function mcpToolName(serverName, toolName) {
|
|
10962
|
+
return `${MCP_TOOL_PREFIX}${sanitizeToolNameSegment(serverName)}__${sanitizeToolNameSegment(toolName)}`;
|
|
10963
|
+
}
|
|
10964
|
+
|
|
10832
10965
|
// src/tools/mcp.ts
|
|
10833
10966
|
var McpToolWrapper = class extends BaseTool {
|
|
10834
10967
|
name;
|
|
@@ -10842,7 +10975,7 @@ var McpToolWrapper = class extends BaseTool {
|
|
|
10842
10975
|
this.mcpClient = mcpClient;
|
|
10843
10976
|
this.serverName = serverName;
|
|
10844
10977
|
this.toolName = toolName;
|
|
10845
|
-
this.name =
|
|
10978
|
+
this.name = mcpToolName(serverName, toolName);
|
|
10846
10979
|
this.description = `[MCP:${serverName}] ${description}`;
|
|
10847
10980
|
this.inputSchema = inputSchema;
|
|
10848
10981
|
}
|
|
@@ -11673,7 +11806,14 @@ var ToolsConfigSchema = z.object({
|
|
|
11673
11806
|
* built-in tool (shell/file/git/…) from existing at all, rather than just
|
|
11674
11807
|
* gating it behind approval. Omitted = full default set (unchanged).
|
|
11675
11808
|
*/
|
|
11676
|
-
enabledTools: z.array(z.string()).optional()
|
|
11809
|
+
enabledTools: z.array(z.string()).optional(),
|
|
11810
|
+
/**
|
|
11811
|
+
* Tools to remove even when they would otherwise be registered. Unlike
|
|
11812
|
+
* `enabledTools` (an allowlist over the built-in set), this also reaches
|
|
11813
|
+
* tools registered outside it — MCP tools and media generation — which is
|
|
11814
|
+
* the only way to turn those off.
|
|
11815
|
+
*/
|
|
11816
|
+
disabledTools: z.array(z.string()).optional()
|
|
11677
11817
|
});
|
|
11678
11818
|
var HookDefinitionSchema = z.object({
|
|
11679
11819
|
name: z.string().optional(),
|
|
@@ -14212,6 +14352,7 @@ var Cascade = class _Cascade extends EventEmitter {
|
|
|
14212
14352
|
router;
|
|
14213
14353
|
toolRegistry;
|
|
14214
14354
|
multimodal;
|
|
14355
|
+
mediaSink;
|
|
14215
14356
|
mcpClient;
|
|
14216
14357
|
codeIndex;
|
|
14217
14358
|
config;
|
|
@@ -14531,14 +14672,27 @@ ${input}` }],
|
|
|
14531
14672
|
* server stores a file row) constructs the tools itself via buildMediaTools
|
|
14532
14673
|
* with its own sink.
|
|
14533
14674
|
*/
|
|
14675
|
+
/**
|
|
14676
|
+
* Replace where generated media is written.
|
|
14677
|
+
*
|
|
14678
|
+
* The default sink writes into the workspace, which is what a desktop or CLI
|
|
14679
|
+
* run wants. A host with different storage — the cloud server keeps a file
|
|
14680
|
+
* row plus bytes under the tenant's directory — supplies its own here, and
|
|
14681
|
+
* the media tools are rebuilt around it. Re-registering by name replaces the
|
|
14682
|
+
* existing tools rather than duplicating them.
|
|
14683
|
+
*/
|
|
14684
|
+
setMediaSink(sink) {
|
|
14685
|
+
this.mediaSink = sink;
|
|
14686
|
+
this.registerMediaTools(this.workspacePath);
|
|
14687
|
+
}
|
|
14534
14688
|
registerMediaTools(workspacePath) {
|
|
14535
|
-
const
|
|
14536
|
-
const permitted = (name) => !
|
|
14689
|
+
const denied = new Set(this.config.tools?.disabledTools ?? []);
|
|
14690
|
+
const permitted = (name) => !denied.has(name);
|
|
14537
14691
|
const tools = buildMediaTools(
|
|
14538
14692
|
{
|
|
14539
14693
|
registry: this.multimodal,
|
|
14540
14694
|
lookupProvider: (provider) => (this.config.providers ?? []).find((p) => p.type === provider),
|
|
14541
|
-
sink: async (asset) => {
|
|
14695
|
+
sink: this.mediaSink ?? (async (asset) => {
|
|
14542
14696
|
const fsp = await import('fs/promises');
|
|
14543
14697
|
const nodePath = await import('path');
|
|
14544
14698
|
const dir = nodePath.join(workspacePath, "generated");
|
|
@@ -14546,7 +14700,7 @@ ${input}` }],
|
|
|
14546
14700
|
const dest = nodePath.join(dir, asset.filename);
|
|
14547
14701
|
await fsp.writeFile(dest, asset.data);
|
|
14548
14702
|
return nodePath.relative(workspacePath, dest);
|
|
14549
|
-
}
|
|
14703
|
+
})
|
|
14550
14704
|
},
|
|
14551
14705
|
async (p) => {
|
|
14552
14706
|
const fsp = await import('fs/promises');
|
|
@@ -18560,7 +18714,7 @@ var CloudClient = class _CloudClient {
|
|
|
18560
18714
|
const deadline = Date.now() + start.expiresIn * 1e3;
|
|
18561
18715
|
while (Date.now() < deadline) {
|
|
18562
18716
|
if (opts.signal?.aborted) throw new Error("Sign-in cancelled.");
|
|
18563
|
-
await
|
|
18717
|
+
await sleep2(interval * 1e3, opts.signal);
|
|
18564
18718
|
const r = await this.pollDevice(start.deviceCode);
|
|
18565
18719
|
if (r === "slow_down") {
|
|
18566
18720
|
interval += 5;
|
|
@@ -18771,7 +18925,7 @@ var CloudClient = class _CloudClient {
|
|
|
18771
18925
|
this.store.clear();
|
|
18772
18926
|
}
|
|
18773
18927
|
};
|
|
18774
|
-
function
|
|
18928
|
+
function sleep2(ms, signal) {
|
|
18775
18929
|
return new Promise((resolve2, reject) => {
|
|
18776
18930
|
const t = setTimeout(resolve2, ms);
|
|
18777
18931
|
signal?.addEventListener("abort", () => {
|
|
@@ -18954,6 +19108,6 @@ function applySyncBundle(bundle, config) {
|
|
|
18954
19108
|
return next;
|
|
18955
19109
|
}
|
|
18956
19110
|
|
|
18957
|
-
export { AZURE_BASE_URL_TEMPLATE, AuditLogger, CASCADE_AUDIT_FILE, CASCADE_CONFIG_DIR, CASCADE_CONFIG_FILE, CASCADE_DASHBOARD_SECRET_FILE, CASCADE_DB_FILE, CASCADE_IGNORE_FILE, CASCADE_KEYSTORE_FILE, CASCADE_MD_FILE, CASCADE_VERSION, CHARS_PER_TOKEN, COMPLEXITY_T2_COUNT, Cascade, CascadeCancelledError, CascadeIgnore, CascadeRouter, CascadeToolError, CloudClient, CodeSearchTool, ConfigManager, DEFAULT_API_PORT, DEFAULT_APPROVAL_REQUIRED, DEFAULT_AUTO_SUMMARIZE_AT, DEFAULT_CLOUD_URL, DEFAULT_CONTEXT_LIMIT, DEFAULT_DASHBOARD_PORT, DEFAULT_MAX_SESSION_MESSAGES, DEFAULT_RETENTION_DAYS, DEFAULT_THEME, DashboardServer, FileMcpOAuthStore, GLOBAL_CONFIG_DIR, GLOBAL_CREDENTIALS_FILE, GLOBAL_DB_FILE, GLOBAL_KEYSTORE_FILE, GLOBAL_RUNTIME_DB_FILE, GraphRetriever, GraphSearchTool, HooksRunner, Keystore, LLMReranker, LM_STUDIO_BASE_URL, MODELS, McpClient, McpOAuthProvider, MemoryStore, OLLAMA_BASE_URL, OpenAICompatibleEmbedder, PROVIDER_DISPLAY_NAMES, Retriever, SqliteVectorStore, T1Administrator, T1_MODEL_PRIORITY, T2Manager, T2_MODEL_PRIORITY, T3Worker, T3_MODEL_PRIORITY, THEME_NAMES, TOOL_NAMES, TaskScheduler, Telemetry, ToolRegistry, VISION_MODEL_PRIORITY, WorkspaceIndex, applySyncBundle, azureModelForDeployment, beginMcpOAuth, buildManifest, buildSessionTranscript, cagCharBudget, chatCompleterFromProviders, chunkCode, chunkText2 as chunkText, completeMcpOAuth, connectMcpWithLoopbackOAuth, createCascade, decryptJSON as decryptSyncBlob, diffManifest, discoverMcpAuthServer, distillSessionFacts, embedderFromProviders, encryptJSON as encryptSyncBlob, fileOAuthProvider, gatherSyncBundle, hashContent, heuristicCodeChunker, inferAzureBaseModel, nodeHttpFetch, parseRankOrder, planRetrieval, preferIpv4Host, reciprocalRankFusion, refreshMcpToken, runCascade, sessionWorthRemembering, streamCascade };
|
|
19111
|
+
export { AZURE_BASE_MODELS, AZURE_BASE_URL_TEMPLATE, AuditLogger, CASCADE_AUDIT_FILE, CASCADE_CONFIG_DIR, CASCADE_CONFIG_FILE, CASCADE_DASHBOARD_SECRET_FILE, CASCADE_DB_FILE, CASCADE_IGNORE_FILE, CASCADE_KEYSTORE_FILE, CASCADE_MD_FILE, CASCADE_VERSION, CHARS_PER_TOKEN, COMPLEXITY_T2_COUNT, Cascade, CascadeCancelledError, CascadeIgnore, CascadeRouter, CascadeToolError, CloudClient, CodeSearchTool, ConfigManager, DEFAULT_API_PORT, DEFAULT_APPROVAL_REQUIRED, DEFAULT_AUTO_SUMMARIZE_AT, DEFAULT_CLOUD_URL, DEFAULT_CONTEXT_LIMIT, DEFAULT_DASHBOARD_PORT, DEFAULT_MAX_SESSION_MESSAGES, DEFAULT_RETENTION_DAYS, DEFAULT_THEME, DashboardServer, FileMcpOAuthStore, GLOBAL_CONFIG_DIR, GLOBAL_CREDENTIALS_FILE, GLOBAL_DB_FILE, GLOBAL_KEYSTORE_FILE, GLOBAL_RUNTIME_DB_FILE, GraphRetriever, GraphSearchTool, HooksRunner, Keystore, LLMReranker, LM_STUDIO_BASE_URL, MODELS, McpClient, McpOAuthProvider, MemoryStore, OLLAMA_BASE_URL, OpenAICompatibleEmbedder, PROVIDER_DISPLAY_NAMES, Retriever, SqliteVectorStore, T1Administrator, T1_MODEL_PRIORITY, T2Manager, T2_MODEL_PRIORITY, T3Worker, T3_MODEL_PRIORITY, THEME_NAMES, TOOL_NAMES, TaskScheduler, Telemetry, ToolRegistry, VISION_MODEL_PRIORITY, WorkspaceIndex, applySyncBundle, azureModelForDeployment, beginMcpOAuth, buildManifest, buildSessionTranscript, cagCharBudget, chatCompleterFromProviders, chunkCode, chunkText2 as chunkText, completeMcpOAuth, connectMcpWithLoopbackOAuth, createCascade, decryptJSON as decryptSyncBlob, diffManifest, discoverMcpAuthServer, distillSessionFacts, embedderFromProviders, encryptJSON as encryptSyncBlob, fileOAuthProvider, gatherSyncBundle, hashContent, heuristicCodeChunker, inferAzureBaseModel, nodeHttpFetch, parseRankOrder, planRetrieval, preferIpv4Host, reciprocalRankFusion, refreshMcpToken, runCascade, sessionWorthRemembering, streamCascade };
|
|
18958
19112
|
//# sourceMappingURL=index.js.map
|
|
18959
19113
|
//# sourceMappingURL=index.js.map
|