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/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
- * Best-effort guess of the canonical base model an Azure deployment backs, from
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
- * Best-effort guess of the canonical base model an Azure deployment backs, from
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.51.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 rules = [
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
- // Listed so `describe()` can tell the truth about what exists, and so the
8852
- // planner is told video is out of reach rather than left to invent a tool.
8853
- // Veo is a long-running operation: submit, poll, then fetch bytes from a
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 = `mcp::${serverName}::${toolName}`;
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 allowlist = this.config.tools?.enabledTools;
14536
- const permitted = (name) => !allowlist || allowlist.includes(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 sleep(interval * 1e3, opts.signal);
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 sleep(ms, signal) {
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