cascade-ai 0.12.24 → 0.13.2

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
@@ -64,6 +64,14 @@ interface GenerateOptions {
64
64
  * concurrent workers rely on. Ignored when a vision model is required.
65
65
  */
66
66
  model?: ModelInfo;
67
+ /** Name/tag of the current sub-feature (e.g. T2 section title) for cost accounting. */
68
+ featureTag?: string;
69
+ /**
70
+ * Privacy-tier constraint: when set, the call must resolve to a LOCAL model
71
+ * (never a cloud provider). The router errors if no local model is available
72
+ * rather than silently falling back to cloud.
73
+ */
74
+ forceLocal?: boolean;
67
75
  }
68
76
  interface GenerateResult {
69
77
  content: string;
@@ -189,6 +197,7 @@ interface T2ToT3Assignment {
189
197
  constraints: string[];
190
198
  peerT3Ids: string[];
191
199
  parentT2: string;
200
+ sectionTitle?: string;
192
201
  dependsOn?: string[];
193
202
  executionMode?: 'parallel' | 'sequential';
194
203
  }
@@ -218,6 +227,8 @@ interface T3ResultPayload {
218
227
  issues: string[];
219
228
  peerSyncsUsed: string[];
220
229
  correctionAttempts: number;
230
+ /** True when the subtask matched a privacy.paths local-only pattern — its raw output must be withheld from upper tiers. */
231
+ localOnly?: boolean;
221
232
  /** Sibling workers this T3 asked its T2 to spawn (T3→T2 reinforcement request). */
222
233
  reinforcements?: T2ToT3Assignment[];
223
234
  }
@@ -406,6 +417,26 @@ interface CascadeConfig {
406
417
  enabled?: boolean;
407
418
  maxPerSection?: number;
408
419
  };
420
+ /**
421
+ * Per-path privacy tiers. Paths matching a `local-only` pattern force the
422
+ * subtask onto LOCAL models and withhold raw output from the tiers above
423
+ * (T1/T2 see only success/fail). Patterns use .gitignore syntax, like
424
+ * .cascadeignore.
425
+ */
426
+ privacy?: {
427
+ paths?: Array<{
428
+ pattern: string;
429
+ policy: 'local-only';
430
+ }>;
431
+ };
432
+ /**
433
+ * Routing controls. `forceTier` pins the run's root tier — 'T1' (full
434
+ * hierarchy), 'T2' (manager + workers), 'T3' (single worker) — bypassing the
435
+ * complexity classifier. 'auto' (default) uses classification.
436
+ */
437
+ routing?: {
438
+ forceTier?: 'auto' | 'T1' | 'T2' | 'T3';
439
+ };
409
440
  /** Render the TUI in the alternate screen buffer (vim-style). Default: false. */
410
441
  altScreen?: boolean;
411
442
  }
@@ -496,6 +527,7 @@ interface WorkspaceConfig {
496
527
  configPath: string;
497
528
  keystorePath: string;
498
529
  auditLogPath: string;
530
+ debugWorldState?: boolean;
499
531
  }
500
532
  type CascadeThemeName = 'midnight' | 'aurora' | 'ember' | 'tide' | 'bloom' | 'daybreak';
501
533
  type LegacyThemeName = 'cascade' | 'dark' | 'light' | 'dracula' | 'nord' | 'solarized';
@@ -571,6 +603,19 @@ interface PermissionRequest {
571
603
  * auto-approve a later dangerous action.
572
604
  */
573
605
  forceReprompt?: boolean;
606
+ /**
607
+ * Escalation trail — each engaged tier's non-binding recommendation as the
608
+ * request rose toward the user. Dangerous tools never get a terminal
609
+ * decision from a tier; the tier records its advice here instead, so the
610
+ * user sees who asked and what T2/T1 thought.
611
+ */
612
+ trail?: PermissionTrailEntry[];
613
+ }
614
+ /** One tier's advisory verdict recorded while a request escalated upward. */
615
+ interface PermissionTrailEntry {
616
+ tier: 'T2' | 'T1';
617
+ verdict: 'approve' | 'deny' | 'unsure';
618
+ reason?: string;
574
619
  }
575
620
  /**
576
621
  * A decision made at any tier (T2, T1, or USER) about a PermissionRequest.
@@ -653,6 +698,8 @@ interface CascadeRunResult {
653
698
  costByTier?: Record<string, number>;
654
699
  /** Per-tier total token counts. Available when the router tracked stats. */
655
700
  tokensByTier?: Record<string, number>;
701
+ /** Per-feature (T2 section) cost breakdown (USD) — "what did this feature cost?". */
702
+ costByFeature?: Record<string, number>;
656
703
  /** Per-tier cost as a percentage of total spend (0–100). */
657
704
  costPercentByTier?: Record<string, number>;
658
705
  }
@@ -700,14 +747,20 @@ interface ModelStat {
700
747
  totalCostUsd: number;
701
748
  sampleCount: number;
702
749
  }
750
+ interface FeatureStat {
751
+ totalCostUsd: number;
752
+ runCount: number;
753
+ }
703
754
  declare class ModelPerformanceTracker {
704
755
  private stats;
756
+ private featureStats;
705
757
  private readonly statsFile;
706
758
  private loaded;
707
759
  constructor(statsFile?: string);
708
760
  load(): Promise<void>;
709
761
  save(): Promise<void>;
710
762
  record(modelId: string, taskType: TaskType, outcome: 'success' | 'failure', retries?: number, costUsd?: number): void;
763
+ recordFeatureCost(featureTag: string, costUsd: number): void;
711
764
  /**
712
765
  * Record an explicit user rating (good/bad). Counts as 3 automatic samples
713
766
  * so user feedback carries significantly more weight than auto-detected outcomes.
@@ -715,6 +768,7 @@ declare class ModelPerformanceTracker {
715
768
  recordExplicit(modelId: string, taskType: TaskType, rating: 'good' | 'bad', costUsd?: number): void;
716
769
  /** Returns all stats keyed by "modelId:taskType" — used by `cascade stats`. */
717
770
  getAll(): Map<string, ModelStat>;
771
+ getAllFeatures(): Map<string, FeatureStat>;
718
772
  /**
719
773
  * Returns 0.05–1.0; defaults to 0.5 (neutral prior) when no history exists.
720
774
  * High retry counts penalise the score.
@@ -916,6 +970,65 @@ declare class LiveDataProvider {
916
970
  hasLivePricing(): boolean;
917
971
  }
918
972
 
973
+ interface WorldStateEntry {
974
+ id: string;
975
+ timestamp: string;
976
+ summary: string;
977
+ workerId: string;
978
+ }
979
+ declare class WorldStateDB {
980
+ private workspacePath;
981
+ private debugMode;
982
+ private db;
983
+ private keyPath;
984
+ private dbPath;
985
+ private encryptionKey;
986
+ constructor(workspacePath: string, debugMode?: boolean);
987
+ private initEncryptionKey;
988
+ private encrypt;
989
+ private decrypt;
990
+ addEntry(workerId: string, summary: string): string;
991
+ getAllEntries(): WorldStateEntry[];
992
+ getFormattedState(): string;
993
+ private dumpDebugIfNeeded;
994
+ close(): void;
995
+ }
996
+
997
+ interface PrivacyPathPolicy {
998
+ pattern: string;
999
+ policy: 'local-only';
1000
+ }
1001
+ declare class PrivacyPaths {
1002
+ private localOnly;
1003
+ private hasRules;
1004
+ constructor(policies?: PrivacyPathPolicy[]);
1005
+ /** True when any privacy rules are configured at all (cheap short-circuit). */
1006
+ hasPolicies(): boolean;
1007
+ /** True when the given workspace-relative path falls under a local-only policy. */
1008
+ isLocalOnly(relativePath: string): boolean;
1009
+ /** True when ANY of the given paths falls under a local-only policy. */
1010
+ anyLocalOnly(relativePaths: string[]): boolean;
1011
+ }
1012
+
1013
+ interface GuidanceEntry {
1014
+ text: string;
1015
+ /** Target a specific tier node (exact id or id prefix). Omitted = every worker. */
1016
+ nodeId?: string;
1017
+ timestamp: string;
1018
+ }
1019
+ declare class GuidanceQueue {
1020
+ private entries;
1021
+ /** Per-consumer read cursor so a broadcast entry reaches each worker once. */
1022
+ private cursors;
1023
+ push(text: string, nodeId?: string): GuidanceEntry;
1024
+ /**
1025
+ * New entries for this consumer since its last drain, filtered to entries
1026
+ * that target it (or target everyone). Advances the consumer's cursor.
1027
+ */
1028
+ drain(consumerId: string): GuidanceEntry[];
1029
+ get size(): number;
1030
+ }
1031
+
919
1032
  interface RouterStats {
920
1033
  totalTokens: number;
921
1034
  totalCostUsd: number;
@@ -928,6 +1041,8 @@ interface RouterStats {
928
1041
  /** Input and output token counts per tier for granular cost analysis. */
929
1042
  inputTokensByTier: Record<string, number>;
930
1043
  outputTokensByTier: Record<string, number>;
1044
+ /** Accumulated cost (USD) broken down by feature tag (e.g. T2 section names). */
1045
+ costByFeature: Record<string, number>;
931
1046
  }
932
1047
  declare class CascadeRouter extends EventEmitter {
933
1048
  private selector;
@@ -952,6 +1067,9 @@ declare class CascadeRouter extends EventEmitter {
952
1067
  private tpmLimiter;
953
1068
  private localQueue;
954
1069
  private taskAnalyzer?;
1070
+ private worldStateDB?;
1071
+ private privacyPaths?;
1072
+ private guidanceQueue?;
955
1073
  private liveData?;
956
1074
  /** Snapshot of configured/default tier models, taken before Cascade Auto overrides them. */
957
1075
  private originalTierModels?;
@@ -1032,6 +1150,19 @@ declare class CascadeRouter extends EventEmitter {
1032
1150
  getSelector(): ModelSelector;
1033
1151
  /** Wire the Cascade Auto task analyzer used for per-subtask model routing. */
1034
1152
  setTaskAnalyzer(analyzer: TaskAnalyzer): void;
1153
+ setWorldStateDB(db: WorldStateDB | undefined): void;
1154
+ getWorldStateDB(): WorldStateDB | undefined;
1155
+ setPrivacyPaths(paths: PrivacyPaths | undefined): void;
1156
+ getPrivacyPaths(): PrivacyPaths | undefined;
1157
+ setGuidanceQueue(queue: GuidanceQueue | undefined): void;
1158
+ getGuidanceQueue(): GuidanceQueue | undefined;
1159
+ /**
1160
+ * "Private" = inference never leaves the user's machine/network: Ollama
1161
+ * models (isLocal), or an OpenAI-compatible endpoint (e.g. llama.cpp, vLLM,
1162
+ * LM Studio) whose configured host is loopback or a private range. A cloud
1163
+ * OpenAI-compatible endpoint (public host) does NOT qualify.
1164
+ */
1165
+ private isPrivateModel;
1035
1166
  /**
1036
1167
  * Cascade Auto per-subtask routing: pick the benchmark-best model for a
1037
1168
  * specific subtask's text, scoped to the tier's eligible candidates. Returns
@@ -1264,7 +1395,16 @@ declare abstract class BaseTier extends EventEmitter {
1264
1395
  protected hierarchyContext: string;
1265
1396
  /** Propagated AbortSignal — set by the tier's `execute()` before work begins. */
1266
1397
  protected signal?: AbortSignal;
1398
+ /**
1399
+ * True for the run's ROOT tier (T3 for Simple, T2 for Moderate, T1 for
1400
+ * Complex). Its own synthesis stream is the user-facing answer and is
1401
+ * tagged `primary` so the desktop renders it live — background workers,
1402
+ * which would interleave, are not tagged.
1403
+ */
1404
+ protected isPresenter: boolean;
1267
1405
  constructor(role: TierRole, id?: string, parentId?: string);
1406
+ /** Mark this tier as the run's presenter (root tier). */
1407
+ setPresenter(on?: boolean): void;
1268
1408
  getStatus(): TierStatus;
1269
1409
  protected setStatus(status: TierStatus, output?: string): void;
1270
1410
  protected setLabel(label: string): void;
@@ -1491,8 +1631,17 @@ declare class Cascade extends EventEmitter {
1491
1631
  private taskAnalyzer?;
1492
1632
  private perfTracker?;
1493
1633
  private toolCreator?;
1634
+ private worldStateDB?;
1635
+ private encryptedAuditLogger?;
1636
+ private guidanceQueue;
1494
1637
  private workspacePath;
1495
1638
  constructor(config: CascadeConfig, workspacePath: string, store?: MemoryStore);
1639
+ /**
1640
+ * Live intervention: inject a user correction into the running hierarchy.
1641
+ * Every active T3 worker (or only the one matching `nodeId`) picks it up at
1642
+ * the top of its next agent-loop iteration as a USER INTERVENTION message.
1643
+ */
1644
+ injectGuidance(text: string, nodeId?: string): void;
1496
1645
  private initOptionalFeatures;
1497
1646
  setStore(store: MemoryStore): void;
1498
1647
  /**
@@ -1551,6 +1700,8 @@ declare class Cascade extends EventEmitter {
1551
1700
  resumeRun(opts?: {
1552
1701
  maxTokens?: number;
1553
1702
  }): Promise<CascadeRunResult | null>;
1703
+ getWorkspacePath(): string;
1704
+ getWorldStateDB(): WorldStateDB | undefined;
1554
1705
  /**
1555
1706
  * Record an explicit user rating for the last completed run.
1556
1707
  * Explicit ratings carry 3× the weight of auto-detected outcomes so user
@@ -1577,6 +1728,14 @@ declare class Cascade extends EventEmitter {
1577
1728
  * do?" requests from being mis-routed into a multi-agent, multi-thousand-token run.
1578
1729
  */
1579
1730
  private looksLikeReadOnlyInquiry;
1731
+ /**
1732
+ * Strong, explicit signals that a task needs the full hierarchy (planning +
1733
+ * multiple sections/workers). Deliberately conservative: requires a
1734
+ * build/implementation verb AND either an app/system-scale noun or an
1735
+ * explicit multi-part structure, so ordinary single-file asks (handled as
1736
+ * Simple/Moderate) don't get over-escalated.
1737
+ */
1738
+ private looksClearlyComplex;
1580
1739
  private static globCache;
1581
1740
  private countWorkspaceFiles;
1582
1741
  private determineComplexity;
@@ -1787,6 +1946,8 @@ declare class T3Worker extends BaseTier {
1787
1946
  private toolRegistry;
1788
1947
  private context;
1789
1948
  private assignment?;
1949
+ /** True when this subtask matched a privacy.paths local-only pattern. */
1950
+ private localOnlyMatch;
1790
1951
  private peerSyncBuffer;
1791
1952
  private store?;
1792
1953
  private audit?;
@@ -2026,6 +2187,8 @@ declare class DashboardSocket {
2026
2187
  onApprovalResponse(callback: (data: PermissionDecisionPayload) => void): void;
2027
2188
  private setupHandlers;
2028
2189
  onSessionRate(callback: (sessionId: string, rating: 'good' | 'bad') => void): void;
2190
+ onSessionHalt(callback: (sessionId: string) => void): void;
2191
+ onSessionSteer(callback: (message: string, sessionId?: string, nodeId?: string) => void): void;
2029
2192
  onConfigUpdate(callback: (data: {
2030
2193
  keys?: Record<string, string>;
2031
2194
  models?: Record<string, string>;
@@ -2036,7 +2199,7 @@ declare class DashboardSocket {
2036
2199
  }) => void): void;
2037
2200
  emitToSocket(socketId: string, event: string, data: unknown): void;
2038
2201
  onConfigGet(callback: (socketId: string) => void): void;
2039
- onCascadeRun(callback: (prompt: string, model: string, socketId: string, sessionId?: string) => void): void;
2202
+ onCascadeRun(callback: (prompt: string, model: string, socketId: string, sessionId?: string, forceTier?: string) => void): void;
2040
2203
  close(): void;
2041
2204
  }
2042
2205
 
@@ -2050,6 +2213,20 @@ declare class DashboardServer {
2050
2213
  private globalStore;
2051
2214
  private broadcastTimer;
2052
2215
  private activeSessions;
2216
+ private activeControllers;
2217
+ /**
2218
+ * Run taskIds per chat session — file snapshots are keyed by the run's
2219
+ * taskId (see t3-worker saveSnapshot), so session rollback needs the list
2220
+ * of runs the session performed in this server's lifetime.
2221
+ */
2222
+ private sessionTaskIds;
2223
+ /**
2224
+ * Tool-approval requests awaiting a user decision from a connected client,
2225
+ * keyed by the request's uuid. The desktop shows a modal on
2226
+ * `permission:user-required` and answers with `permission:decision`; this
2227
+ * map is how that answer reaches the run that's blocked on it.
2228
+ */
2229
+ private pendingApprovals;
2053
2230
  private port;
2054
2231
  private host;
2055
2232
  private workspacePath;
@@ -2082,6 +2259,25 @@ declare class DashboardServer {
2082
2259
  private persistRunStart;
2083
2260
  /** Record run end: the assistant reply (when there is one) and the runtime row's final status. */
2084
2261
  private persistRunEnd;
2262
+ /**
2263
+ * Route steering text into running Cascade instances. Targets the given
2264
+ * session, or every active session when none is specified (the desktop
2265
+ * usually has exactly one run in flight). Returns how many were reached.
2266
+ */
2267
+ private steerSessions;
2268
+ private recordSessionTask;
2269
+ /**
2270
+ * Approval bridge: cascade calls this when a dangerous tool escalates to the
2271
+ * user. The request itself was already pushed to the client via the
2272
+ * `permission:user-required` forward; here we just park a resolver keyed by
2273
+ * the request id and wait for the client's `permission:decision` (handled in
2274
+ * onApprovalResponse). Never auto-approves — an unanswered request stays
2275
+ * pending until the client answers, the run ends, or the escalator's own
2276
+ * timeout denies it.
2277
+ */
2278
+ private makeApprovalCallback;
2279
+ /** Deny + clear any approvals still pending for a session (run end / abort). */
2280
+ private denyPendingApprovals;
2085
2281
  private persistRuntimeRow;
2086
2282
  /**
2087
2283
  * Continuing an existing session: the Cascade orchestrator is per-run and
@@ -2323,4 +2519,4 @@ declare class CascadeToolError extends Error {
2323
2519
  declare function preferIpv4Host(url: string | undefined): string | undefined;
2324
2520
  declare function nodeHttpFetch(input: string | URL | Request, init?: RequestInit, redirectCount?: number): Promise<Response>;
2325
2521
 
2326
- 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, COMPLEXITY_T2_COUNT, Cascade, CascadeCancelledError, type CascadeConfig, type CascadeEvent, type CascadeEventType, CascadeIgnore, type CascadeMessage, CascadeRouter, type CascadeRunOptions, type CascadeRunResult, type CascadeThemeName, CascadeToolError, ConfigManager, type ConversationMessage, DEFAULT_API_PORT, DEFAULT_APPROVAL_REQUIRED, DEFAULT_AUTO_SUMMARIZE_AT, DEFAULT_CONTEXT_LIMIT, DEFAULT_DASHBOARD_PORT, DEFAULT_MAX_SESSION_MESSAGES, DEFAULT_RETENTION_DAYS, DEFAULT_THEME, type DashboardConfig, DashboardServer, type EscalationPayload, GLOBAL_CONFIG_DIR, GLOBAL_DB_FILE, GLOBAL_KEYSTORE_FILE, GLOBAL_RUNTIME_DB_FILE, type GenerateOptions, type GenerateResult, type HookDefinition, type HooksConfig, HooksRunner, type Identity, type ImageAttachment, Keystore, LM_STUDIO_BASE_URL, type LegacyThemeName, MODELS, McpClient, type McpServerConfig$1 as McpServerConfig, type MemoryConfig, MemoryStore, type Message, type MessageContent, type MessagePayload, type MessageStatus, type MessageType, type ModelInfo, type ModelOverrides, OLLAMA_BASE_URL, PROVIDER_DISPLAY_NAMES, type PeerMessage, type PeerMessageEvent, type PeerSyncPayload, type PeerSyncType, type PermissionDecision, type PermissionDecisionPayload, type PermissionRequest, type PlanReviewConfig, type ProviderConfig, type ProviderType, type RuntimeNode, type RuntimeNodeLog, type RuntimeRefreshPayload, type RuntimeScope, type RuntimeSession, type RuntimeSnapshotPayload, type ScheduledTask, type Session, type SessionCheckpoint, type SessionMetadata, type SessionSubscriptionPayload, type StatusUpdate, type StoredMessage, type StreamChunk, 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 WebSearchConfig, type WebhookConfig, type WorkspaceConfig, createCascade, nodeHttpFetch, preferIpv4Host, runCascade, streamCascade };
2522
+ 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, COMPLEXITY_T2_COUNT, Cascade, CascadeCancelledError, type CascadeConfig, type CascadeEvent, type CascadeEventType, CascadeIgnore, type CascadeMessage, CascadeRouter, type CascadeRunOptions, type CascadeRunResult, type CascadeThemeName, CascadeToolError, ConfigManager, type ConversationMessage, DEFAULT_API_PORT, DEFAULT_APPROVAL_REQUIRED, DEFAULT_AUTO_SUMMARIZE_AT, DEFAULT_CONTEXT_LIMIT, DEFAULT_DASHBOARD_PORT, DEFAULT_MAX_SESSION_MESSAGES, DEFAULT_RETENTION_DAYS, DEFAULT_THEME, type DashboardConfig, DashboardServer, type EscalationPayload, GLOBAL_CONFIG_DIR, GLOBAL_DB_FILE, GLOBAL_KEYSTORE_FILE, GLOBAL_RUNTIME_DB_FILE, type GenerateOptions, type GenerateResult, type HookDefinition, type HooksConfig, HooksRunner, type Identity, type ImageAttachment, Keystore, LM_STUDIO_BASE_URL, type LegacyThemeName, MODELS, McpClient, type McpServerConfig$1 as McpServerConfig, type MemoryConfig, MemoryStore, type Message, type MessageContent, type MessagePayload, type MessageStatus, type MessageType, type ModelInfo, type ModelOverrides, OLLAMA_BASE_URL, 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 RuntimeNode, type RuntimeNodeLog, type RuntimeRefreshPayload, type RuntimeScope, type RuntimeSession, type RuntimeSnapshotPayload, type ScheduledTask, type Session, type SessionCheckpoint, type SessionMetadata, type SessionSubscriptionPayload, type StatusUpdate, type StoredMessage, type StreamChunk, 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 WebSearchConfig, type WebhookConfig, type WorkspaceConfig, createCascade, nodeHttpFetch, preferIpv4Host, runCascade, streamCascade };