@duckcodeailabs/dql-agent 1.6.31 → 1.6.32

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.
Files changed (160) hide show
  1. package/dist/agent-run-engine.d.ts +42 -6
  2. package/dist/agent-run-engine.d.ts.map +1 -1
  3. package/dist/agent-run-engine.js +133 -79
  4. package/dist/agent-run-engine.js.map +1 -1
  5. package/dist/agent-run-gates.d.ts.map +1 -1
  6. package/dist/agent-run-gates.js +72 -5
  7. package/dist/agent-run-gates.js.map +1 -1
  8. package/dist/agent-run-planner.d.ts.map +1 -1
  9. package/dist/agent-run-planner.js +13 -0
  10. package/dist/agent-run-planner.js.map +1 -1
  11. package/dist/answer-loop.d.ts +110 -8
  12. package/dist/answer-loop.d.ts.map +1 -1
  13. package/dist/answer-loop.js +1679 -1299
  14. package/dist/answer-loop.js.map +1 -1
  15. package/dist/answer-shape.d.ts +16 -0
  16. package/dist/answer-shape.d.ts.map +1 -0
  17. package/dist/answer-shape.js +85 -0
  18. package/dist/answer-shape.js.map +1 -0
  19. package/dist/cascade/budgets.d.ts +101 -0
  20. package/dist/cascade/budgets.d.ts.map +1 -0
  21. package/dist/cascade/budgets.js +184 -0
  22. package/dist/cascade/budgets.js.map +1 -0
  23. package/dist/cascade/cascade.d.ts +86 -0
  24. package/dist/cascade/cascade.d.ts.map +1 -0
  25. package/dist/cascade/cascade.js +115 -0
  26. package/dist/cascade/cascade.js.map +1 -0
  27. package/dist/cascade/route-policy.d.ts +14 -0
  28. package/dist/cascade/route-policy.d.ts.map +1 -0
  29. package/dist/cascade/route-policy.js +48 -0
  30. package/dist/cascade/route-policy.js.map +1 -0
  31. package/dist/cascade/triage.d.ts +20 -0
  32. package/dist/cascade/triage.d.ts.map +1 -0
  33. package/dist/cascade/triage.js +25 -0
  34. package/dist/cascade/triage.js.map +1 -0
  35. package/dist/conversation/rolling-summary.d.ts +13 -0
  36. package/dist/conversation/rolling-summary.d.ts.map +1 -0
  37. package/dist/conversation/rolling-summary.js +43 -0
  38. package/dist/conversation/rolling-summary.js.map +1 -0
  39. package/dist/conversation/session-store.d.ts +110 -0
  40. package/dist/conversation/session-store.d.ts.map +1 -0
  41. package/dist/conversation/session-store.js +387 -0
  42. package/dist/conversation/session-store.js.map +1 -0
  43. package/dist/conversation/snapshot.d.ts +59 -0
  44. package/dist/conversation/snapshot.d.ts.map +1 -0
  45. package/dist/conversation/snapshot.js +153 -0
  46. package/dist/conversation/snapshot.js.map +1 -0
  47. package/dist/conversation/working-state.d.ts +49 -0
  48. package/dist/conversation/working-state.d.ts.map +1 -0
  49. package/dist/conversation/working-state.js +249 -0
  50. package/dist/conversation/working-state.js.map +1 -0
  51. package/dist/embeddings/provider.d.ts +62 -0
  52. package/dist/embeddings/provider.d.ts.map +1 -1
  53. package/dist/embeddings/provider.js +98 -0
  54. package/dist/embeddings/provider.js.map +1 -1
  55. package/dist/grounding/context-ledger.d.ts +30 -0
  56. package/dist/grounding/context-ledger.d.ts.map +1 -0
  57. package/dist/grounding/context-ledger.js +54 -0
  58. package/dist/grounding/context-ledger.js.map +1 -0
  59. package/dist/grounding/regrounding.d.ts +24 -0
  60. package/dist/grounding/regrounding.d.ts.map +1 -0
  61. package/dist/grounding/regrounding.js +219 -0
  62. package/dist/grounding/regrounding.js.map +1 -0
  63. package/dist/grounding/value-index.d.ts +32 -0
  64. package/dist/grounding/value-index.d.ts.map +1 -0
  65. package/dist/grounding/value-index.js +67 -0
  66. package/dist/grounding/value-index.js.map +1 -0
  67. package/dist/index.d.ts +45 -14
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +102 -11
  70. package/dist/index.js.map +1 -1
  71. package/dist/intent-controller.d.ts +7 -0
  72. package/dist/intent-controller.d.ts.map +1 -1
  73. package/dist/intent-controller.js +22 -1
  74. package/dist/intent-controller.js.map +1 -1
  75. package/dist/kg/build.d.ts.map +1 -1
  76. package/dist/kg/build.js +44 -17
  77. package/dist/kg/build.js.map +1 -1
  78. package/dist/kg/sqlite-fts.d.ts +3 -1
  79. package/dist/kg/sqlite-fts.d.ts.map +1 -1
  80. package/dist/kg/sqlite-fts.js +16 -2
  81. package/dist/kg/sqlite-fts.js.map +1 -1
  82. package/dist/kg/types.d.ts +23 -1
  83. package/dist/kg/types.d.ts.map +1 -1
  84. package/dist/memory/fts-query.d.ts +7 -0
  85. package/dist/memory/fts-query.d.ts.map +1 -0
  86. package/dist/memory/fts-query.js +36 -0
  87. package/dist/memory/fts-query.js.map +1 -0
  88. package/dist/memory/sqlite-memory.d.ts.map +1 -1
  89. package/dist/memory/sqlite-memory.js +1 -30
  90. package/dist/memory/sqlite-memory.js.map +1 -1
  91. package/dist/metadata/analysis-planner.d.ts +23 -0
  92. package/dist/metadata/analysis-planner.d.ts.map +1 -1
  93. package/dist/metadata/analysis-planner.js +432 -2
  94. package/dist/metadata/analysis-planner.js.map +1 -1
  95. package/dist/metadata/block-fit.d.ts +24 -0
  96. package/dist/metadata/block-fit.d.ts.map +1 -0
  97. package/dist/metadata/block-fit.js +373 -0
  98. package/dist/metadata/block-fit.js.map +1 -0
  99. package/dist/metadata/catalog.d.ts +72 -3
  100. package/dist/metadata/catalog.d.ts.map +1 -1
  101. package/dist/metadata/catalog.js +1452 -72
  102. package/dist/metadata/catalog.js.map +1 -1
  103. package/dist/metadata/drafts.d.ts +25 -0
  104. package/dist/metadata/drafts.d.ts.map +1 -1
  105. package/dist/metadata/drafts.js +112 -2
  106. package/dist/metadata/drafts.js.map +1 -1
  107. package/dist/metadata/metric-match.d.ts +55 -6
  108. package/dist/metadata/metric-match.d.ts.map +1 -1
  109. package/dist/metadata/metric-match.js +158 -13
  110. package/dist/metadata/metric-match.js.map +1 -1
  111. package/dist/metadata/sql-context-validation.d.ts +13 -1
  112. package/dist/metadata/sql-context-validation.d.ts.map +1 -1
  113. package/dist/metadata/sql-context-validation.js +172 -19
  114. package/dist/metadata/sql-context-validation.js.map +1 -1
  115. package/dist/metadata/sql-retrieval.d.ts +3 -2
  116. package/dist/metadata/sql-retrieval.d.ts.map +1 -1
  117. package/dist/metadata/sql-retrieval.js +6 -4
  118. package/dist/metadata/sql-retrieval.js.map +1 -1
  119. package/dist/providers/claude.d.ts +2 -1
  120. package/dist/providers/claude.d.ts.map +1 -1
  121. package/dist/providers/claude.js +95 -0
  122. package/dist/providers/claude.js.map +1 -1
  123. package/dist/providers/index.d.ts +1 -1
  124. package/dist/providers/index.d.ts.map +1 -1
  125. package/dist/providers/index.js.map +1 -1
  126. package/dist/providers/openai.d.ts +2 -1
  127. package/dist/providers/openai.d.ts.map +1 -1
  128. package/dist/providers/openai.js +143 -0
  129. package/dist/providers/openai.js.map +1 -1
  130. package/dist/providers/tool-output.d.ts +2 -0
  131. package/dist/providers/tool-output.d.ts.map +1 -0
  132. package/dist/providers/tool-output.js +22 -0
  133. package/dist/providers/tool-output.js.map +1 -0
  134. package/dist/providers/types.d.ts +23 -0
  135. package/dist/providers/types.d.ts.map +1 -1
  136. package/dist/providers/types.js.map +1 -1
  137. package/dist/semantic-bridge/compose.d.ts +89 -0
  138. package/dist/semantic-bridge/compose.d.ts.map +1 -0
  139. package/dist/semantic-bridge/compose.js +528 -0
  140. package/dist/semantic-bridge/compose.js.map +1 -0
  141. package/dist/semantic-bridge/member-select.d.ts +23 -0
  142. package/dist/semantic-bridge/member-select.d.ts.map +1 -0
  143. package/dist/semantic-bridge/member-select.js +106 -0
  144. package/dist/semantic-bridge/member-select.js.map +1 -0
  145. package/dist/skills/defaults.d.ts.map +1 -1
  146. package/dist/skills/defaults.js +5 -0
  147. package/dist/skills/defaults.js.map +1 -1
  148. package/dist/synthesize.d.ts +26 -0
  149. package/dist/synthesize.d.ts.map +1 -1
  150. package/dist/synthesize.js +72 -3
  151. package/dist/synthesize.js.map +1 -1
  152. package/dist/tools/registry.d.ts +15 -0
  153. package/dist/tools/registry.d.ts.map +1 -0
  154. package/dist/tools/registry.js +692 -0
  155. package/dist/tools/registry.js.map +1 -0
  156. package/dist/trust/stamp.d.ts +26 -0
  157. package/dist/trust/stamp.d.ts.map +1 -0
  158. package/dist/trust/stamp.js +33 -0
  159. package/dist/trust/stamp.js.map +1 -0
  160. package/package.json +4 -4
@@ -0,0 +1,16 @@
1
+ import type { AnalysisQuestionPlan } from './metadata/analysis-planner.js';
2
+ export interface AnswerShapeResultLike {
3
+ columns?: unknown;
4
+ rows?: unknown;
5
+ rowCount?: unknown;
6
+ }
7
+ export interface AnswerShapeValidation {
8
+ warnings: string[];
9
+ missingOutputs: string[];
10
+ columns: string[];
11
+ rowCount?: number;
12
+ topN?: number;
13
+ topNReturned?: number;
14
+ }
15
+ export declare function validateAnswerResultShape(plan: AnalysisQuestionPlan, result: AnswerShapeResultLike): AnswerShapeValidation;
16
+ //# sourceMappingURL=answer-shape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answer-shape.d.ts","sourceRoot":"","sources":["../src/answer-shape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,oBAAoB,EAC1B,MAAM,EAAE,qBAAqB,GAC5B,qBAAqB,CAyBvB"}
@@ -0,0 +1,85 @@
1
+ export function validateAnswerResultShape(plan, result) {
2
+ const columns = resultColumnsForShape(result);
3
+ const rowCount = resultRowCount(result);
4
+ const missingOutputs = plan.requestedShape.requiredOutputs.filter((output) => !columns.some((column) => columnCoversRequestedOutput(column, output)));
5
+ const warnings = [];
6
+ if (missingOutputs.length > 0) {
7
+ warnings.push(`The answer is missing requested output column(s): ${missingOutputs.join(', ')}.`);
8
+ }
9
+ const topN = plan.requestedShape.topN;
10
+ const topNReturned = topN && topN.scope !== 'per_group' && rowCount !== undefined && rowCount > topN.n
11
+ ? rowCount
12
+ : undefined;
13
+ if (topN && topNReturned !== undefined) {
14
+ warnings.push(`The user asked for top ${topN.n}, but the answer returned ${topNReturned} rows.`);
15
+ }
16
+ return {
17
+ warnings,
18
+ missingOutputs,
19
+ columns,
20
+ ...(rowCount !== undefined ? { rowCount } : {}),
21
+ ...(topN ? { topN: topN.n } : {}),
22
+ ...(topNReturned !== undefined ? { topNReturned } : {}),
23
+ };
24
+ }
25
+ function resultColumnsForShape(result) {
26
+ const columns = Array.isArray(result.columns) ? result.columns : [];
27
+ return columns.map((column) => {
28
+ if (typeof column === 'string')
29
+ return canonicalResultColumn(column);
30
+ if (column && typeof column === 'object') {
31
+ const record = column;
32
+ const name = [record.name, record.field, record.key].find((value) => typeof value === 'string' && value.trim().length > 0);
33
+ return name ? canonicalResultColumn(name) : '';
34
+ }
35
+ return '';
36
+ }).filter(Boolean);
37
+ }
38
+ function resultRowCount(result) {
39
+ if (typeof result.rowCount === 'number')
40
+ return result.rowCount;
41
+ return Array.isArray(result.rows) ? result.rows.length : undefined;
42
+ }
43
+ function columnCoversRequestedOutput(column, requiredOutput) {
44
+ const required = canonicalResultColumn(requiredOutput);
45
+ if (!required)
46
+ return true;
47
+ if (column === required)
48
+ return true;
49
+ const requiredTokens = required.split('_').filter(Boolean);
50
+ const columnTokens = column.split('_').filter(Boolean);
51
+ if (required === 'count') {
52
+ return columnTokens.some((token) => ['count', 'total', 'number', 'num'].includes(token));
53
+ }
54
+ const NAME_TOKENS = ['name', 'title', 'label', 'nm', 'description', 'desc'];
55
+ if (required.endsWith('_name')) {
56
+ const entity = requiredTokens[0];
57
+ const hasNameToken = columnTokens.some((token) => NAME_TOKENS.includes(token));
58
+ // Entity match tolerates common abbreviations (product↔prod, customer↔cust)
59
+ // via a shared 4-char stem, so aliases like prod_name / cust_name / p_name
60
+ // don't false-miss.
61
+ const stem = (token) => token.slice(0, 4);
62
+ const hasEntityToken = Boolean(entity && columnTokens.some((token) => token === entity || token.startsWith(stem(entity)) || entity.startsWith(stem(token))));
63
+ // A bare `name`/`label` column (single token) covers any *_name requirement.
64
+ const bareNameColumn = columnTokens.length === 1 && hasNameToken;
65
+ return (hasEntityToken && hasNameToken) || column === entity || bareNameColumn;
66
+ }
67
+ return requiredTokens.every((token) => columnTokens.includes(token));
68
+ }
69
+ function canonicalResultColumn(value) {
70
+ return value
71
+ .toLowerCase()
72
+ .replace(/[_\-./]+/g, ' ')
73
+ .replace(/[^a-z0-9 ]+/g, ' ')
74
+ .split(/\s+/)
75
+ .filter((token) => token.length > 1)
76
+ .map((token) => {
77
+ if (token.endsWith('ies') && token.length > 4)
78
+ return `${token.slice(0, -3)}y`;
79
+ if (token.endsWith('s') && token.length > 3)
80
+ return token.slice(0, -1);
81
+ return token;
82
+ })
83
+ .join('_');
84
+ }
85
+ //# sourceMappingURL=answer-shape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answer-shape.js","sourceRoot":"","sources":["../src/answer-shape.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import type { AnalysisQuestionPlan } from '../metadata/analysis-planner.js';
2
+ import type { ReasoningEffort } from '../providers/reasoning-effort.js';
3
+ export type CascadeLaneRepairKind = 'reground' | 'execution';
4
+ export type CascadeAnalysisDepth = 'quick' | 'deep';
5
+ export type ProposalToolBudgetClass = 'lookup' | 'multi_entity' | 'deep_research';
6
+ export type ContextRetrievalStrictness = 'balanced' | 'exploratory';
7
+ export interface CascadeLaneBudgetLimits {
8
+ reground: number;
9
+ execution: number;
10
+ }
11
+ export interface CascadeBudgetModel {
12
+ lane: CascadeLaneBudgetLimits;
13
+ engineEscalations: number;
14
+ /**
15
+ * MCP tier-2 has no persistent run state yet, so it advertises a bounded
16
+ * re-ground policy that callers can apply before retrying query_via_metadata.
17
+ */
18
+ mcpTier2Reground: number;
19
+ }
20
+ export interface CascadeBudgetUsage {
21
+ laneRegroundAttemptsUsed: number;
22
+ laneExecutionAttemptsUsed: number;
23
+ engineEscalationsUsed: number;
24
+ }
25
+ export interface CascadeBudgetTrace {
26
+ limits: CascadeBudgetModel;
27
+ usage: CascadeBudgetUsage;
28
+ }
29
+ export interface CascadeBudgetState {
30
+ readonly limits: CascadeBudgetModel;
31
+ readonly usage: CascadeBudgetUsage;
32
+ }
33
+ export interface McpTier2RepairBudget {
34
+ kind: 'reground';
35
+ attemptsUsed: number;
36
+ maxAttempts: number;
37
+ attemptsRemaining: number;
38
+ nextTool: 'expand_context';
39
+ }
40
+ export interface ProposalToolBudget {
41
+ maxToolCalls: number;
42
+ effortClass: ProposalToolBudgetClass;
43
+ reason: string;
44
+ }
45
+ export interface ProposalToolBudgetOptions {
46
+ analysisDepth?: CascadeAnalysisDepth;
47
+ reasoningEffort?: ReasoningEffort;
48
+ }
49
+ export interface PromptContextBudget {
50
+ label: CascadeAnalysisDepth;
51
+ schemaTableLimit: number;
52
+ schemaColumnLimit: number;
53
+ contextObjectLimit: number;
54
+ warningLimit: number;
55
+ relationCardLimit: number;
56
+ relationColumnLimit: number;
57
+ selectedRelationReasonLimit: number;
58
+ joinPathLimit: number;
59
+ lineageEdgeLimit: number;
60
+ otherRelationStart: number;
61
+ otherRelationEnd: number;
62
+ otherRelationLimit: number;
63
+ sourceSqlLimit: number;
64
+ sourceSqlColumnLimit: number;
65
+ edgeLimit: number;
66
+ }
67
+ export interface ContextRetrievalBudget {
68
+ analysisDepth: CascadeAnalysisDepth;
69
+ strictness: ContextRetrievalStrictness;
70
+ limit: number;
71
+ }
72
+ export declare const DEFAULT_CASCADE_BUDGET_MODEL: CascadeBudgetModel;
73
+ export declare const QUICK_PROMPT_CONTEXT_BUDGET: PromptContextBudget;
74
+ export declare const DEEP_PROMPT_CONTEXT_BUDGET: PromptContextBudget;
75
+ export declare function createCascadeBudgetState(overrides?: PartialCascadeBudgetModel): CascadeBudgetState;
76
+ export type PartialCascadeBudgetModel = {
77
+ lane?: Partial<CascadeLaneBudgetLimits>;
78
+ engineEscalations?: number;
79
+ mcpTier2Reground?: number;
80
+ };
81
+ export declare function mergeCascadeBudgetModel(overrides?: PartialCascadeBudgetModel): CascadeBudgetModel;
82
+ export declare function canUseLaneRepair(state: CascadeBudgetState, kind: CascadeLaneRepairKind): boolean;
83
+ export declare function recordLaneRepair(state: CascadeBudgetState, kind: CascadeLaneRepairKind): CascadeBudgetUsage;
84
+ export declare function canUseEngineEscalation(state: CascadeBudgetState): boolean;
85
+ export declare function recordEngineEscalation(state: CascadeBudgetState): CascadeBudgetUsage;
86
+ export declare function cascadeBudgetUsage(state: CascadeBudgetState): CascadeBudgetUsage;
87
+ export declare function cascadeBudgetTrace(state: CascadeBudgetState): CascadeBudgetTrace;
88
+ export declare function mcpTier2RegroundRepairBudget(attemptsUsed?: number, model?: PartialCascadeBudgetModel): McpTier2RepairBudget;
89
+ export declare function analysisDepthForQuestion(plan: AnalysisQuestionPlan, reasoningEffort?: ReasoningEffort, requestedDepth?: CascadeAnalysisDepth): CascadeAnalysisDepth;
90
+ export declare function promptContextBudgetForQuestion(input: {
91
+ questionPlan: AnalysisQuestionPlan;
92
+ requestedDepth?: CascadeAnalysisDepth;
93
+ reasoningEffort?: ReasoningEffort;
94
+ }): PromptContextBudget;
95
+ export declare function contextRetrievalBudgetForQuestion(input: {
96
+ questionPlan: AnalysisQuestionPlan;
97
+ requestedDepth?: CascadeAnalysisDepth;
98
+ reasoningEffort?: ReasoningEffort;
99
+ }): ContextRetrievalBudget;
100
+ export declare function proposalToolBudgetForQuestion(plan: AnalysisQuestionPlan, intent: string, options?: ProposalToolBudgetOptions): ProposalToolBudget;
101
+ //# sourceMappingURL=budgets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budgets.d.ts","sourceRoot":"","sources":["../../src/cascade/budgets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,184 @@
1
+ export const DEFAULT_CASCADE_BUDGET_MODEL = {
2
+ lane: {
3
+ reground: 2,
4
+ execution: 2,
5
+ },
6
+ engineEscalations: 2,
7
+ mcpTier2Reground: 1,
8
+ };
9
+ export const QUICK_PROMPT_CONTEXT_BUDGET = {
10
+ label: 'quick',
11
+ schemaTableLimit: 12,
12
+ schemaColumnLimit: 50,
13
+ contextObjectLimit: 18,
14
+ warningLimit: 8,
15
+ relationCardLimit: 12,
16
+ relationColumnLimit: 32,
17
+ selectedRelationReasonLimit: 8,
18
+ joinPathLimit: 8,
19
+ lineageEdgeLimit: 12,
20
+ otherRelationStart: 12,
21
+ otherRelationEnd: 40,
22
+ otherRelationLimit: 24,
23
+ sourceSqlLimit: 5,
24
+ sourceSqlColumnLimit: 24,
25
+ edgeLimit: 0,
26
+ };
27
+ export const DEEP_PROMPT_CONTEXT_BUDGET = {
28
+ label: 'deep',
29
+ schemaTableLimit: 40,
30
+ schemaColumnLimit: 120,
31
+ contextObjectLimit: 80,
32
+ warningLimit: 24,
33
+ relationCardLimit: 40,
34
+ relationColumnLimit: 120,
35
+ selectedRelationReasonLimit: 24,
36
+ joinPathLimit: 24,
37
+ lineageEdgeLimit: 40,
38
+ otherRelationStart: 40,
39
+ otherRelationEnd: 120,
40
+ otherRelationLimit: 80,
41
+ sourceSqlLimit: 12,
42
+ sourceSqlColumnLimit: 48,
43
+ edgeLimit: 80,
44
+ };
45
+ export function createCascadeBudgetState(overrides = {}) {
46
+ return {
47
+ limits: mergeCascadeBudgetModel(overrides),
48
+ usage: {
49
+ laneRegroundAttemptsUsed: 0,
50
+ laneExecutionAttemptsUsed: 0,
51
+ engineEscalationsUsed: 0,
52
+ },
53
+ };
54
+ }
55
+ export function mergeCascadeBudgetModel(overrides = {}) {
56
+ return {
57
+ lane: {
58
+ reground: normalizeBudgetLimit(overrides.lane?.reground, DEFAULT_CASCADE_BUDGET_MODEL.lane.reground),
59
+ execution: normalizeBudgetLimit(overrides.lane?.execution, DEFAULT_CASCADE_BUDGET_MODEL.lane.execution),
60
+ },
61
+ engineEscalations: normalizeBudgetLimit(overrides.engineEscalations, DEFAULT_CASCADE_BUDGET_MODEL.engineEscalations),
62
+ mcpTier2Reground: normalizeBudgetLimit(overrides.mcpTier2Reground, DEFAULT_CASCADE_BUDGET_MODEL.mcpTier2Reground),
63
+ };
64
+ }
65
+ export function canUseLaneRepair(state, kind) {
66
+ return laneRepairAttemptsUsed(state, kind) < state.limits.lane[kind];
67
+ }
68
+ export function recordLaneRepair(state, kind) {
69
+ if (kind === 'reground') {
70
+ state.usage.laneRegroundAttemptsUsed += 1;
71
+ }
72
+ else {
73
+ state.usage.laneExecutionAttemptsUsed += 1;
74
+ }
75
+ return cascadeBudgetUsage(state);
76
+ }
77
+ export function canUseEngineEscalation(state) {
78
+ return state.usage.engineEscalationsUsed < state.limits.engineEscalations;
79
+ }
80
+ export function recordEngineEscalation(state) {
81
+ state.usage.engineEscalationsUsed += 1;
82
+ return cascadeBudgetUsage(state);
83
+ }
84
+ export function cascadeBudgetUsage(state) {
85
+ return {
86
+ laneRegroundAttemptsUsed: state.usage.laneRegroundAttemptsUsed,
87
+ laneExecutionAttemptsUsed: state.usage.laneExecutionAttemptsUsed,
88
+ engineEscalationsUsed: state.usage.engineEscalationsUsed,
89
+ };
90
+ }
91
+ export function cascadeBudgetTrace(state) {
92
+ return {
93
+ limits: {
94
+ lane: { ...state.limits.lane },
95
+ engineEscalations: state.limits.engineEscalations,
96
+ mcpTier2Reground: state.limits.mcpTier2Reground,
97
+ },
98
+ usage: cascadeBudgetUsage(state),
99
+ };
100
+ }
101
+ export function mcpTier2RegroundRepairBudget(attemptsUsed = 0, model = {}) {
102
+ const maxAttempts = mergeCascadeBudgetModel(model).mcpTier2Reground;
103
+ const used = normalizeBudgetLimit(attemptsUsed, 0);
104
+ return {
105
+ kind: 'reground',
106
+ attemptsUsed: used,
107
+ maxAttempts,
108
+ attemptsRemaining: Math.max(0, maxAttempts - used),
109
+ nextTool: 'expand_context',
110
+ };
111
+ }
112
+ export function analysisDepthForQuestion(plan, reasoningEffort, requestedDepth) {
113
+ if (requestedDepth)
114
+ return requestedDepth;
115
+ if (reasoningEffort === 'high'
116
+ || plan.needsResearchWorkspace
117
+ || plan.mode === 'diagnose_change'
118
+ || plan.mode === 'driver_breakdown'
119
+ || plan.mode === 'anomaly') {
120
+ return 'deep';
121
+ }
122
+ return 'quick';
123
+ }
124
+ export function promptContextBudgetForQuestion(input) {
125
+ return analysisDepthForQuestion(input.questionPlan, input.reasoningEffort, input.requestedDepth) === 'deep'
126
+ ? DEEP_PROMPT_CONTEXT_BUDGET
127
+ : QUICK_PROMPT_CONTEXT_BUDGET;
128
+ }
129
+ export function contextRetrievalBudgetForQuestion(input) {
130
+ const analysisDepth = analysisDepthForQuestion(input.questionPlan, input.reasoningEffort, input.requestedDepth);
131
+ return analysisDepth === 'deep'
132
+ ? { analysisDepth, strictness: 'exploratory', limit: 160 }
133
+ : { analysisDepth, strictness: 'balanced', limit: 100 };
134
+ }
135
+ export function proposalToolBudgetForQuestion(plan, intent, options = {}) {
136
+ if (options.analysisDepth === 'deep'
137
+ || options.reasoningEffort === 'high'
138
+ || plan.needsResearchWorkspace
139
+ || plan.mode === 'diagnose_change'
140
+ || plan.mode === 'driver_breakdown'
141
+ || plan.mode === 'anomaly'
142
+ || intent === 'diagnose_change'
143
+ || intent === 'driver_breakdown'
144
+ || intent === 'anomaly_investigation'
145
+ || intent === 'trust_gap_review') {
146
+ return {
147
+ maxToolCalls: 15,
148
+ effortClass: 'deep_research',
149
+ reason: 'deep analysis, diagnosis, anomaly, trust review, or research workspace request',
150
+ };
151
+ }
152
+ const shape = plan.requestedShape;
153
+ const entityOrJoinShape = plan.entities.length > 0
154
+ || shape.dimensions.length > 1
155
+ || shape.requiredOutputs.length > 2
156
+ || (shape.filters.length > 0 && shape.dimensions.length > 0)
157
+ || Boolean(shape.topN)
158
+ || plan.mode === 'comparison'
159
+ || plan.mode === 'entity_profile'
160
+ || plan.mode === 'entity_drilldown';
161
+ if (entityOrJoinShape) {
162
+ return {
163
+ maxToolCalls: 8,
164
+ effortClass: 'multi_entity',
165
+ reason: 'multi-entity, ranked, filtered, comparison, profile, or drilldown shape',
166
+ };
167
+ }
168
+ return {
169
+ maxToolCalls: 3,
170
+ effortClass: 'lookup',
171
+ reason: 'single metric or simple generated lookup',
172
+ };
173
+ }
174
+ function laneRepairAttemptsUsed(state, kind) {
175
+ return kind === 'reground'
176
+ ? state.usage.laneRegroundAttemptsUsed
177
+ : state.usage.laneExecutionAttemptsUsed;
178
+ }
179
+ function normalizeBudgetLimit(value, fallback) {
180
+ if (typeof value !== 'number' || !Number.isFinite(value))
181
+ return fallback;
182
+ return Math.max(0, Math.floor(value));
183
+ }
184
+ //# sourceMappingURL=budgets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budgets.js","sourceRoot":"","sources":["../../src/cascade/budgets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ export type CascadeLane = 'triage' | 'certified' | 'semantic' | 'generated' | 'refusal';
2
+ export type CascadeLaneStatus = 'selected' | 'checked' | 'skipped' | 'failed';
3
+ export interface CascadeLaneTrace {
4
+ lane: CascadeLane;
5
+ status: CascadeLaneStatus;
6
+ label: string;
7
+ detail?: string;
8
+ terminal?: boolean;
9
+ }
10
+ export interface CascadeLaneTraceInput {
11
+ status?: CascadeLaneStatus;
12
+ label?: string;
13
+ detail?: string;
14
+ }
15
+ export interface CascadeTraceInput {
16
+ terminalLane?: CascadeLane;
17
+ lanes?: Partial<Record<CascadeLane, CascadeLaneTraceInput>>;
18
+ }
19
+ export interface CascadeEvidenceRouteStep {
20
+ tool: `cascade_${CascadeLane}`;
21
+ status: CascadeLaneStatus;
22
+ label: string;
23
+ detail?: string;
24
+ }
25
+ export type CascadeAnswerTier = 'certified_block' | 'semantic_metric' | 'generated_sql' | 'business_context' | 'no_answer';
26
+ export interface CascadeAnswerResultInput {
27
+ routeTier: CascadeAnswerTier;
28
+ label: string;
29
+ ref?: string;
30
+ artifactKind?: string;
31
+ refusalCode?: string;
32
+ reason?: string;
33
+ rowCount?: number;
34
+ executionStatus?: 'executed' | 'failed' | 'not_requested' | 'not_applicable';
35
+ draftBlockId?: string;
36
+ metrics?: string[];
37
+ dimensions?: string[];
38
+ hasSqlPreview?: boolean;
39
+ }
40
+ export type CascadeTerminalLane = Exclude<CascadeLane, 'triage'>;
41
+ export interface CascadeAnswerResult {
42
+ terminalLane: CascadeTerminalLane;
43
+ routeTier: CascadeAnswerTier;
44
+ label: string;
45
+ ref?: string;
46
+ artifactKind?: string;
47
+ refusalCode?: string;
48
+ outcome: CascadeLaneOutcome;
49
+ }
50
+ export type CascadeLaneOutcome = CascadeCertifiedOutcome | CascadeSemanticOutcome | CascadeGeneratedOutcome | CascadeRefusalOutcome;
51
+ export interface CascadeCertifiedOutcome {
52
+ lane: 'certified';
53
+ routeTier: 'certified_block' | 'business_context';
54
+ ref?: string;
55
+ executionStatus: 'executed' | 'failed' | 'not_requested' | 'not_applicable';
56
+ rowCount?: number;
57
+ }
58
+ export interface CascadeSemanticOutcome {
59
+ lane: 'semantic';
60
+ routeTier: 'semantic_metric';
61
+ ref?: string;
62
+ artifactKind?: string;
63
+ metrics?: string[];
64
+ dimensions?: string[];
65
+ rowCount?: number;
66
+ }
67
+ export interface CascadeGeneratedOutcome {
68
+ lane: 'generated';
69
+ routeTier: 'generated_sql';
70
+ artifactKind?: string;
71
+ draftBlockId?: string;
72
+ hasSqlPreview: boolean;
73
+ executionStatus: 'executed' | 'failed' | 'not_requested' | 'not_applicable';
74
+ rowCount?: number;
75
+ }
76
+ export interface CascadeRefusalOutcome {
77
+ lane: 'refusal';
78
+ routeTier: 'no_answer';
79
+ refusalCode?: string;
80
+ reason: string;
81
+ }
82
+ export declare function createCascadeTrace(input?: CascadeTraceInput): CascadeLaneTrace[];
83
+ export declare function cascadeTraceToEvidenceRouteSteps(trace: CascadeLaneTrace[]): CascadeEvidenceRouteStep[];
84
+ export declare function createCascadeAnswerResult(input: CascadeAnswerResultInput): CascadeAnswerResult;
85
+ export declare function terminalLaneForRouteTier(routeTier: CascadeAnswerTier): CascadeTerminalLane;
86
+ //# sourceMappingURL=cascade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cascade.d.ts","sourceRoot":"","sources":["../../src/cascade/cascade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ const CASCADE_LANE_ORDER = ['triage', 'certified', 'semantic', 'generated', 'refusal'];
2
+ const DEFAULT_LANE_LABELS = {
3
+ triage: 'Lane 0 triage checked request intent and ambiguity',
4
+ certified: 'Lane 1 checked certified DQL blocks and business context',
5
+ semantic: 'Lane 2 checked semantic metrics and dimensions',
6
+ generated: 'Lane 3 checked generated DQL artifact with SQL preview',
7
+ refusal: 'Lane 4 checked honest refusal and redirect',
8
+ };
9
+ const TERMINAL_LANE_LABELS = {
10
+ triage: 'Lane 0 triage was terminal',
11
+ certified: 'Lane 1 certified answer was terminal',
12
+ semantic: 'Lane 2 semantic DQL artifact was terminal',
13
+ generated: 'Lane 3 generated DQL artifact was terminal',
14
+ refusal: 'Lane 4 refusal was terminal',
15
+ };
16
+ export function createCascadeTrace(input = {}) {
17
+ const terminalIndex = input.terminalLane ? CASCADE_LANE_ORDER.indexOf(input.terminalLane) : -1;
18
+ return CASCADE_LANE_ORDER.map((lane, index) => {
19
+ const override = input.lanes?.[lane];
20
+ const isTerminal = terminalIndex === index;
21
+ const afterTerminal = terminalIndex >= 0 && index > terminalIndex;
22
+ if (afterTerminal) {
23
+ return {
24
+ lane,
25
+ status: 'skipped',
26
+ label: override?.label ?? skippedByTerminalLaneLabel(lane, input.terminalLane),
27
+ ...(override?.detail ? { detail: override.detail } : {}),
28
+ };
29
+ }
30
+ const status = override?.status ?? (isTerminal ? 'selected' : terminalIndex >= 0 ? 'checked' : 'skipped');
31
+ return {
32
+ lane,
33
+ status,
34
+ label: override?.label ?? (isTerminal ? TERMINAL_LANE_LABELS[lane] : DEFAULT_LANE_LABELS[lane]),
35
+ ...(override?.detail ? { detail: override.detail } : {}),
36
+ ...(isTerminal ? { terminal: true } : {}),
37
+ };
38
+ });
39
+ }
40
+ export function cascadeTraceToEvidenceRouteSteps(trace) {
41
+ return trace.map((step) => ({
42
+ tool: `cascade_${step.lane}`,
43
+ status: step.status,
44
+ label: step.label,
45
+ ...(step.detail ? { detail: step.detail } : {}),
46
+ }));
47
+ }
48
+ export function createCascadeAnswerResult(input) {
49
+ const terminalLane = terminalLaneForRouteTier(input.routeTier);
50
+ return {
51
+ terminalLane,
52
+ routeTier: input.routeTier,
53
+ label: input.label,
54
+ ...(input.ref ? { ref: input.ref } : {}),
55
+ ...(input.artifactKind ? { artifactKind: input.artifactKind } : {}),
56
+ ...(input.refusalCode ? { refusalCode: input.refusalCode } : {}),
57
+ outcome: createCascadeLaneOutcome({ ...input, terminalLane }),
58
+ };
59
+ }
60
+ export function terminalLaneForRouteTier(routeTier) {
61
+ switch (routeTier) {
62
+ case 'certified_block':
63
+ case 'business_context':
64
+ return 'certified';
65
+ case 'semantic_metric':
66
+ return 'semantic';
67
+ case 'generated_sql':
68
+ return 'generated';
69
+ case 'no_answer':
70
+ return 'refusal';
71
+ }
72
+ }
73
+ function createCascadeLaneOutcome(input) {
74
+ switch (input.terminalLane) {
75
+ case 'certified':
76
+ return {
77
+ lane: 'certified',
78
+ routeTier: input.routeTier === 'business_context' ? 'business_context' : 'certified_block',
79
+ ...(input.ref ? { ref: input.ref } : {}),
80
+ executionStatus: input.executionStatus ?? 'not_requested',
81
+ ...(input.rowCount === undefined ? {} : { rowCount: input.rowCount }),
82
+ };
83
+ case 'semantic':
84
+ return {
85
+ lane: 'semantic',
86
+ routeTier: 'semantic_metric',
87
+ ...(input.ref ? { ref: input.ref } : {}),
88
+ ...(input.artifactKind ? { artifactKind: input.artifactKind } : {}),
89
+ ...(input.metrics?.length ? { metrics: input.metrics } : {}),
90
+ ...(input.dimensions?.length ? { dimensions: input.dimensions } : {}),
91
+ ...(input.rowCount === undefined ? {} : { rowCount: input.rowCount }),
92
+ };
93
+ case 'generated':
94
+ return {
95
+ lane: 'generated',
96
+ routeTier: 'generated_sql',
97
+ ...(input.artifactKind ? { artifactKind: input.artifactKind } : {}),
98
+ ...(input.draftBlockId ? { draftBlockId: input.draftBlockId } : {}),
99
+ hasSqlPreview: input.hasSqlPreview ?? false,
100
+ executionStatus: input.executionStatus ?? 'not_requested',
101
+ ...(input.rowCount === undefined ? {} : { rowCount: input.rowCount }),
102
+ };
103
+ case 'refusal':
104
+ return {
105
+ lane: 'refusal',
106
+ routeTier: 'no_answer',
107
+ ...(input.refusalCode ? { refusalCode: input.refusalCode } : {}),
108
+ reason: input.reason ?? input.label,
109
+ };
110
+ }
111
+ }
112
+ function skippedByTerminalLaneLabel(lane, terminalLane) {
113
+ return `${DEFAULT_LANE_LABELS[lane]} skipped because ${terminalLane} lane already produced a terminal outcome`;
114
+ }
115
+ //# sourceMappingURL=cascade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cascade.js","sourceRoot":"","sources":["../../src/cascade/cascade.ts"],"names":[],"mappings":"AAyGA,MAAM,kBAAkB,GAAkB,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AAEtG,MAAM,mBAAmB,GAAgC;IACvD,MAAM,EAAE,oDAAoD;IAC5D,SAAS,EAAE,0DAA0D;IACrE,QAAQ,EAAE,gDAAgD;IAC1D,SAAS,EAAE,wDAAwD;IACnE,OAAO,EAAE,4CAA4C;CACtD,CAAC;AAEF,MAAM,oBAAoB,GAAgC;IACxD,MAAM,EAAE,4BAA4B;IACpC,SAAS,EAAE,sCAAsC;IACjD,QAAQ,EAAE,2CAA2C;IACrD,SAAS,EAAE,4CAA4C;IACvD,OAAO,EAAE,6BAA6B;CACvC,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,QAA2B,EAAE;IAC9D,MAAM,aAAa,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5C,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG,aAAa,KAAK,KAAK,CAAC;QAC3C,MAAM,aAAa,GAAG,aAAa,IAAI,CAAC,IAAI,KAAK,GAAG,aAAa,CAAC;QAClE,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO;gBACL,IAAI;gBACJ,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,YAAa,CAAC;gBAC/E,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACzD,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC1G,OAAO;YACL,IAAI;YACJ,MAAM;YACN,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC/F,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,KAAyB;IACxE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1B,IAAI,EAAE,WAAW,IAAI,CAAC,IAAI,EAAE;QAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChD,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAA+B;IACvE,MAAM,YAAY,GAAG,wBAAwB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/D,OAAO;QACL,YAAY;QACZ,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO,EAAE,wBAAwB,CAAC,EAAE,GAAG,KAAK,EAAE,YAAY,EAAE,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,SAA4B;IACnE,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,iBAAiB,CAAC;QACvB,KAAK,kBAAkB;YACrB,OAAO,WAAW,CAAC;QACrB,KAAK,iBAAiB;YACpB,OAAO,UAAU,CAAC;QACpB,KAAK,eAAe;YAClB,OAAO,WAAW,CAAC;QACrB,KAAK,WAAW;YACd,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAAuE;IAEvE,QAAQ,KAAK,CAAC,YAAY,EAAE,CAAC;QAC3B,KAAK,WAAW;YACd,OAAO;gBACL,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE,KAAK,CAAC,SAAS,KAAK,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB;gBAC1F,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxC,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,eAAe;gBACzD,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;aACtE,CAAC;QACJ,KAAK,UAAU;YACb,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,SAAS,EAAE,iBAAiB;gBAC5B,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5D,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrE,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;aACtE,CAAC;QACJ,KAAK,WAAW;YACd,OAAO;gBACL,IAAI,EAAE,WAAW;gBACjB,SAAS,EAAE,eAAe;gBAC1B,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,KAAK;gBAC3C,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,eAAe;gBACzD,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;aACtE,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,WAAW;gBACtB,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK;aACpC,CAAC;IACN,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAiB,EAAE,YAAyB;IAC9E,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,oBAAoB,YAAY,2CAA2C,CAAC;AACjH,CAAC"}
@@ -0,0 +1,14 @@
1
+ export type CascadeRequestedMode = 'auto' | 'ask' | 'research' | 'sql' | 'block' | 'app';
2
+ export type CascadeRunRoute = 'conversation' | 'certified_answer' | 'generated_answer' | 'research' | 'sql_cell' | 'dql_block_draft' | 'app_build' | 'clarify' | 'blocked';
3
+ export type CascadeAction = 'answer' | 'clarify' | 'investigate' | 'compose_app' | 'converse';
4
+ export type CascadeAnswerRouteTier = 'certified_block' | 'semantic_metric' | 'generated_sql' | 'business_context' | 'no_answer';
5
+ export interface CascadeRouteRequest {
6
+ question: string;
7
+ requestedMode?: CascadeRequestedMode;
8
+ }
9
+ export interface CascadeRouteDecision {
10
+ action: CascadeAction;
11
+ }
12
+ export declare function selectCascadeRunRoute(request: CascadeRouteRequest, decision: CascadeRouteDecision): CascadeRunRoute;
13
+ export declare function routeForCascadeAnswerTier(tier: CascadeAnswerRouteTier | undefined): CascadeRunRoute | undefined;
14
+ //# sourceMappingURL=route-policy.d.ts.map