@duckcodeailabs/dql-agent 1.6.30 → 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.
- package/dist/agent-run-engine.d.ts +52 -6
- package/dist/agent-run-engine.d.ts.map +1 -1
- package/dist/agent-run-engine.js +159 -79
- package/dist/agent-run-engine.js.map +1 -1
- package/dist/agent-run-gates.d.ts.map +1 -1
- package/dist/agent-run-gates.js +72 -5
- package/dist/agent-run-gates.js.map +1 -1
- package/dist/agent-run-planner.d.ts.map +1 -1
- package/dist/agent-run-planner.js +13 -0
- package/dist/agent-run-planner.js.map +1 -1
- package/dist/answer-loop.d.ts +117 -8
- package/dist/answer-loop.d.ts.map +1 -1
- package/dist/answer-loop.js +1690 -1302
- package/dist/answer-loop.js.map +1 -1
- package/dist/answer-shape.d.ts +16 -0
- package/dist/answer-shape.d.ts.map +1 -0
- package/dist/answer-shape.js +85 -0
- package/dist/answer-shape.js.map +1 -0
- package/dist/cascade/budgets.d.ts +101 -0
- package/dist/cascade/budgets.d.ts.map +1 -0
- package/dist/cascade/budgets.js +184 -0
- package/dist/cascade/budgets.js.map +1 -0
- package/dist/cascade/cascade.d.ts +86 -0
- package/dist/cascade/cascade.d.ts.map +1 -0
- package/dist/cascade/cascade.js +115 -0
- package/dist/cascade/cascade.js.map +1 -0
- package/dist/cascade/route-policy.d.ts +14 -0
- package/dist/cascade/route-policy.d.ts.map +1 -0
- package/dist/cascade/route-policy.js +48 -0
- package/dist/cascade/route-policy.js.map +1 -0
- package/dist/cascade/triage.d.ts +20 -0
- package/dist/cascade/triage.d.ts.map +1 -0
- package/dist/cascade/triage.js +25 -0
- package/dist/cascade/triage.js.map +1 -0
- package/dist/conversation/rolling-summary.d.ts +13 -0
- package/dist/conversation/rolling-summary.d.ts.map +1 -0
- package/dist/conversation/rolling-summary.js +43 -0
- package/dist/conversation/rolling-summary.js.map +1 -0
- package/dist/conversation/session-store.d.ts +110 -0
- package/dist/conversation/session-store.d.ts.map +1 -0
- package/dist/conversation/session-store.js +387 -0
- package/dist/conversation/session-store.js.map +1 -0
- package/dist/conversation/snapshot.d.ts +59 -0
- package/dist/conversation/snapshot.d.ts.map +1 -0
- package/dist/conversation/snapshot.js +153 -0
- package/dist/conversation/snapshot.js.map +1 -0
- package/dist/conversation/working-state.d.ts +49 -0
- package/dist/conversation/working-state.d.ts.map +1 -0
- package/dist/conversation/working-state.js +249 -0
- package/dist/conversation/working-state.js.map +1 -0
- package/dist/embeddings/provider.d.ts +62 -0
- package/dist/embeddings/provider.d.ts.map +1 -1
- package/dist/embeddings/provider.js +98 -0
- package/dist/embeddings/provider.js.map +1 -1
- package/dist/grounding/context-ledger.d.ts +30 -0
- package/dist/grounding/context-ledger.d.ts.map +1 -0
- package/dist/grounding/context-ledger.js +54 -0
- package/dist/grounding/context-ledger.js.map +1 -0
- package/dist/grounding/regrounding.d.ts +24 -0
- package/dist/grounding/regrounding.d.ts.map +1 -0
- package/dist/grounding/regrounding.js +219 -0
- package/dist/grounding/regrounding.js.map +1 -0
- package/dist/grounding/value-index.d.ts +32 -0
- package/dist/grounding/value-index.d.ts.map +1 -0
- package/dist/grounding/value-index.js +67 -0
- package/dist/grounding/value-index.js.map +1 -0
- package/dist/index.d.ts +47 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +104 -13
- package/dist/index.js.map +1 -1
- package/dist/intent-controller.d.ts +7 -0
- package/dist/intent-controller.d.ts.map +1 -1
- package/dist/intent-controller.js +22 -1
- package/dist/intent-controller.js.map +1 -1
- package/dist/kg/build.d.ts.map +1 -1
- package/dist/kg/build.js +44 -17
- package/dist/kg/build.js.map +1 -1
- package/dist/kg/sqlite-fts.d.ts +3 -1
- package/dist/kg/sqlite-fts.d.ts.map +1 -1
- package/dist/kg/sqlite-fts.js +16 -2
- package/dist/kg/sqlite-fts.js.map +1 -1
- package/dist/kg/types.d.ts +23 -1
- package/dist/kg/types.d.ts.map +1 -1
- package/dist/memory/fts-query.d.ts +7 -0
- package/dist/memory/fts-query.d.ts.map +1 -0
- package/dist/memory/fts-query.js +36 -0
- package/dist/memory/fts-query.js.map +1 -0
- package/dist/memory/sqlite-memory.d.ts.map +1 -1
- package/dist/memory/sqlite-memory.js +1 -30
- package/dist/memory/sqlite-memory.js.map +1 -1
- package/dist/metadata/analysis-planner.d.ts +23 -0
- package/dist/metadata/analysis-planner.d.ts.map +1 -1
- package/dist/metadata/analysis-planner.js +432 -2
- package/dist/metadata/analysis-planner.js.map +1 -1
- package/dist/metadata/block-fit.d.ts +24 -0
- package/dist/metadata/block-fit.d.ts.map +1 -0
- package/dist/metadata/block-fit.js +373 -0
- package/dist/metadata/block-fit.js.map +1 -0
- package/dist/metadata/catalog.d.ts +72 -3
- package/dist/metadata/catalog.d.ts.map +1 -1
- package/dist/metadata/catalog.js +1452 -72
- package/dist/metadata/catalog.js.map +1 -1
- package/dist/metadata/drafts.d.ts +25 -0
- package/dist/metadata/drafts.d.ts.map +1 -1
- package/dist/metadata/drafts.js +112 -2
- package/dist/metadata/drafts.js.map +1 -1
- package/dist/metadata/metric-match.d.ts +55 -6
- package/dist/metadata/metric-match.d.ts.map +1 -1
- package/dist/metadata/metric-match.js +158 -13
- package/dist/metadata/metric-match.js.map +1 -1
- package/dist/metadata/sql-context-validation.d.ts +13 -1
- package/dist/metadata/sql-context-validation.d.ts.map +1 -1
- package/dist/metadata/sql-context-validation.js +172 -19
- package/dist/metadata/sql-context-validation.js.map +1 -1
- package/dist/metadata/sql-retrieval.d.ts +3 -2
- package/dist/metadata/sql-retrieval.d.ts.map +1 -1
- package/dist/metadata/sql-retrieval.js +6 -4
- package/dist/metadata/sql-retrieval.js.map +1 -1
- package/dist/providers/claude.d.ts +2 -1
- package/dist/providers/claude.d.ts.map +1 -1
- package/dist/providers/claude.js +151 -28
- package/dist/providers/claude.js.map +1 -1
- package/dist/providers/gemini.d.ts.map +1 -1
- package/dist/providers/gemini.js +20 -0
- package/dist/providers/gemini.js.map +1 -1
- package/dist/providers/index.d.ts +3 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai.d.ts +2 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +156 -0
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/reasoning-effort.d.ts +46 -0
- package/dist/providers/reasoning-effort.d.ts.map +1 -0
- package/dist/providers/reasoning-effort.js +81 -0
- package/dist/providers/reasoning-effort.js.map +1 -0
- package/dist/providers/tool-output.d.ts +2 -0
- package/dist/providers/tool-output.d.ts.map +1 -0
- package/dist/providers/tool-output.js +22 -0
- package/dist/providers/tool-output.js.map +1 -0
- package/dist/providers/types.d.ts +29 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/semantic-bridge/compose.d.ts +89 -0
- package/dist/semantic-bridge/compose.d.ts.map +1 -0
- package/dist/semantic-bridge/compose.js +528 -0
- package/dist/semantic-bridge/compose.js.map +1 -0
- package/dist/semantic-bridge/member-select.d.ts +23 -0
- package/dist/semantic-bridge/member-select.d.ts.map +1 -0
- package/dist/semantic-bridge/member-select.js +106 -0
- package/dist/semantic-bridge/member-select.js.map +1 -0
- package/dist/skills/defaults.d.ts.map +1 -1
- package/dist/skills/defaults.js +5 -0
- package/dist/skills/defaults.js.map +1 -1
- package/dist/synthesize.d.ts +26 -0
- package/dist/synthesize.d.ts.map +1 -1
- package/dist/synthesize.js +72 -3
- package/dist/synthesize.js.map +1 -1
- package/dist/tools/registry.d.ts +15 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +692 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/trust/stamp.d.ts +26 -0
- package/dist/trust/stamp.d.ts.map +1 -0
- package/dist/trust/stamp.js +33 -0
- package/dist/trust/stamp.js.map +1 -0
- 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":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAExE,MAAM,MAAM,qBAAqB,GAAG,UAAU,GAAG,WAAW,CAAC;AAC7D,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,CAAC;AACpD,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,cAAc,GAAG,eAAe,CAAC;AAClF,MAAM,MAAM,0BAA0B,GAAG,UAAU,GAAG,aAAa,CAAC;AAEpE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,wBAAwB,EAAE,MAAM,CAAC;IACjC,yBAAyB,EAAE,MAAM,CAAC;IAClC,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,kBAAkB,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,uBAAuB,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,oBAAoB,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,2BAA2B,EAAE,MAAM,CAAC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,oBAAoB,CAAC;IACpC,UAAU,EAAE,0BAA0B,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,4BAA4B,EAAE,kBAO1C,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,mBAiBzC,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,mBAiBxC,CAAC;AAEF,wBAAgB,wBAAwB,CACtC,SAAS,GAAE,yBAA8B,GACxC,kBAAkB,CASpB;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACxC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,SAAS,GAAE,yBAA8B,GAAG,kBAAkB,CASrG;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAEhG;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,qBAAqB,GAAG,kBAAkB,CAO3G;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAEzE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,kBAAkB,CAGpF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,kBAAkB,CAMhF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,kBAAkB,CAShF;AAED,wBAAgB,4BAA4B,CAC1C,YAAY,SAAI,EAChB,KAAK,GAAE,yBAA8B,GACpC,oBAAoB,CAUtB;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,oBAAoB,EAC1B,eAAe,CAAC,EAAE,eAAe,EACjC,cAAc,CAAC,EAAE,oBAAoB,GACpC,oBAAoB,CAYtB;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE;IACpD,YAAY,EAAE,oBAAoB,CAAC;IACnC,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,mBAAmB,CAItB;AAED,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IACvD,YAAY,EAAE,oBAAoB,CAAC;IACnC,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,GAAG,sBAAsB,CAKzB;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,oBAAoB,EAC1B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,yBAA8B,GACtC,kBAAkB,CA0CpB"}
|
|
@@ -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":"AAAA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;AAExF,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE9E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,WAAW,WAAW,EAAE,CAAC;IAC/B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,iBAAiB,GACzB,iBAAiB,GACjB,iBAAiB,GACjB,eAAe,GACf,kBAAkB,GAClB,WAAW,CAAC;AAEhB,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,eAAe,GAAG,gBAAgB,CAAC;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AAEjE,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,mBAAmB,CAAC;IAClC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAED,MAAM,MAAM,kBAAkB,GAC1B,uBAAuB,GACvB,sBAAsB,GACtB,uBAAuB,GACvB,qBAAqB,CAAC;AAE1B,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,iBAAiB,GAAG,kBAAkB,CAAC;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,UAAU,GAAG,QAAQ,GAAG,eAAe,GAAG,gBAAgB,CAAC;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,eAAe,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,UAAU,GAAG,QAAQ,GAAG,eAAe,GAAG,gBAAgB,CAAC;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,WAAW,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAoBD,wBAAgB,kBAAkB,CAAC,KAAK,GAAE,iBAAsB,GAAG,gBAAgB,EAAE,CAuBpF;AAED,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,wBAAwB,EAAE,CAOtG;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,wBAAwB,GAAG,mBAAmB,CAW9F;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,iBAAiB,GAAG,mBAAmB,CAY1F"}
|
|
@@ -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":"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"}
|
|
@@ -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
|