@duckcodeailabs/dql-agent 1.9.4 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/dist/agent-run-engine.d.ts +13 -0
  2. package/dist/agent-run-engine.d.ts.map +1 -1
  3. package/dist/agent-run-engine.js +59 -1
  4. package/dist/agent-run-engine.js.map +1 -1
  5. package/dist/answer-loop.d.ts +34 -1
  6. package/dist/answer-loop.d.ts.map +1 -1
  7. package/dist/answer-loop.js +490 -57
  8. package/dist/answer-loop.js.map +1 -1
  9. package/dist/embeddings/provider.d.ts +1 -1
  10. package/dist/embeddings/provider.d.ts.map +1 -1
  11. package/dist/embeddings/provider.js.map +1 -1
  12. package/dist/governed-relational-compiler.d.ts +138 -0
  13. package/dist/governed-relational-compiler.d.ts.map +1 -0
  14. package/dist/governed-relational-compiler.js +315 -0
  15. package/dist/governed-relational-compiler.js.map +1 -0
  16. package/dist/index.d.ts +13 -5
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +8 -4
  19. package/dist/index.js.map +1 -1
  20. package/dist/intent-controller.d.ts +5 -0
  21. package/dist/intent-controller.d.ts.map +1 -1
  22. package/dist/intent-controller.js.map +1 -1
  23. package/dist/kg/build.d.ts.map +1 -1
  24. package/dist/kg/build.js +81 -1
  25. package/dist/kg/build.js.map +1 -1
  26. package/dist/meaning-resolution.d.ts +4 -0
  27. package/dist/meaning-resolution.d.ts.map +1 -1
  28. package/dist/meaning-resolution.js +14 -4
  29. package/dist/meaning-resolution.js.map +1 -1
  30. package/dist/metadata/analysis-planner.d.ts.map +1 -1
  31. package/dist/metadata/analysis-planner.js +34 -6
  32. package/dist/metadata/analysis-planner.js.map +1 -1
  33. package/dist/metadata/catalog.d.ts +83 -2
  34. package/dist/metadata/catalog.d.ts.map +1 -1
  35. package/dist/metadata/catalog.js +381 -28
  36. package/dist/metadata/catalog.js.map +1 -1
  37. package/dist/metadata/meaning-evidence.d.ts +10 -1
  38. package/dist/metadata/meaning-evidence.d.ts.map +1 -1
  39. package/dist/metadata/meaning-evidence.js +78 -1
  40. package/dist/metadata/meaning-evidence.js.map +1 -1
  41. package/dist/plan-execution-adapter.d.ts +60 -0
  42. package/dist/plan-execution-adapter.d.ts.map +1 -0
  43. package/dist/plan-execution-adapter.js +239 -0
  44. package/dist/plan-execution-adapter.js.map +1 -0
  45. package/dist/research-governance.d.ts +56 -0
  46. package/dist/research-governance.d.ts.map +1 -0
  47. package/dist/research-governance.js +68 -0
  48. package/dist/research-governance.js.map +1 -0
  49. package/dist/research-loop.d.ts +14 -0
  50. package/dist/research-loop.d.ts.map +1 -1
  51. package/dist/research-loop.js +77 -23
  52. package/dist/research-loop.js.map +1 -1
  53. package/dist/resolved-analytical-plan.d.ts +112 -0
  54. package/dist/resolved-analytical-plan.d.ts.map +1 -0
  55. package/dist/resolved-analytical-plan.js +346 -0
  56. package/dist/resolved-analytical-plan.js.map +1 -0
  57. package/dist/router.d.ts +3 -0
  58. package/dist/router.d.ts.map +1 -1
  59. package/dist/router.js +34 -10
  60. package/dist/router.js.map +1 -1
  61. package/dist/semantic-bridge/member-select.d.ts +6 -0
  62. package/dist/semantic-bridge/member-select.d.ts.map +1 -1
  63. package/dist/semantic-bridge/member-select.js +4 -0
  64. package/dist/semantic-bridge/member-select.js.map +1 -1
  65. package/dist/semantic-bridge/query-shape.d.ts +26 -0
  66. package/dist/semantic-bridge/query-shape.d.ts.map +1 -0
  67. package/dist/semantic-bridge/query-shape.js +48 -0
  68. package/dist/semantic-bridge/query-shape.js.map +1 -0
  69. package/package.json +4 -4
@@ -0,0 +1,68 @@
1
+ /** Bounded, receipt-backed research built from typed deltas over one root plan. */
2
+ import { deriveResolvedAnalyticalPlan, } from './resolved-analytical-plan.js';
3
+ import { RESEARCH_BUDGET } from './research-loop.js';
4
+ export class ResearchBudgetExceededError extends Error {
5
+ counter;
6
+ code = 'RESEARCH_BUDGET_EXCEEDED';
7
+ constructor(counter) {
8
+ super(`Research budget exceeded: ${counter}.`);
9
+ this.counter = counter;
10
+ this.name = 'ResearchBudgetExceededError';
11
+ }
12
+ }
13
+ export class ResearchBudgetController {
14
+ budget;
15
+ now;
16
+ used = { plannerCalls: 0, sqlExecutions: 0, repairs: 0, narratorCalls: 0 };
17
+ startedAt;
18
+ constructor(budget = RESEARCH_BUDGET, now = Date.now) {
19
+ this.budget = budget;
20
+ this.now = now;
21
+ this.startedAt = now();
22
+ }
23
+ consume(counter) {
24
+ this.assertWithinDeadline();
25
+ const next = this.used[counter] + 1;
26
+ if (next > this.budget[counter])
27
+ throw new ResearchBudgetExceededError(counter);
28
+ this.used[counter] = next;
29
+ }
30
+ assertWithinDeadline() {
31
+ if (this.now() - this.startedAt > this.budget.wallClockMs) {
32
+ throw new ResearchBudgetExceededError('wallClockMs');
33
+ }
34
+ }
35
+ snapshot() {
36
+ return Object.freeze({ ...this.used, elapsedMs: Math.max(0, this.now() - this.startedAt) });
37
+ }
38
+ }
39
+ export function buildTypedResearchBranches(root, inputs) {
40
+ return inputs.slice(0, RESEARCH_BUDGET.sqlExecutions).map((input) => ({
41
+ id: input.id,
42
+ label: input.label,
43
+ plan: deriveResolvedAnalyticalPlan(root, input.delta),
44
+ evidenceIds: [...new Set(input.evidenceIds)].sort(),
45
+ }));
46
+ }
47
+ /** Every numeric claim needs a successful execution and a result fingerprint. */
48
+ export function gateResearchConclusion(observations) {
49
+ const supported = [];
50
+ const unsupported = [];
51
+ for (const observation of observations) {
52
+ const hasReceipt = observation.status === 'executed'
53
+ && Boolean(observation.executionReceipt?.resultFingerprint
54
+ ?? observation.executionReceipt?.result?.resultFingerprint);
55
+ for (const claim of observation.numericClaims)
56
+ (hasReceipt ? supported : unsupported).push(claim);
57
+ }
58
+ const status = unsupported.length === 0 ? 'complete' : 'partial';
59
+ return {
60
+ status,
61
+ supportedClaimIds: [...new Set(supported)].sort(),
62
+ unsupportedClaimIds: [...new Set(unsupported)].sort(),
63
+ message: status === 'complete'
64
+ ? 'Every numeric research claim is backed by a successful execution receipt.'
65
+ : 'Research evidence is partial; unsupported numeric claims cannot be presented as a completed causal conclusion.',
66
+ };
67
+ }
68
+ //# sourceMappingURL=research-governance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research-governance.js","sourceRoot":"","sources":["../src/research-governance.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ import { type AgentAction } from './intent-controller.js';
14
14
  import type { MetadataAgentIntent } from './metadata/catalog.js';
15
15
  import type { KGNode } from './kg/types.js';
16
16
  import type { PlanBlock } from './app-planner.js';
17
+ import type { ResolvedAnalyticalPlan } from './resolved-analytical-plan.js';
17
18
  /** One ReAct step: a thought, the asset-bound action, and what observing it tells us. */
18
19
  export interface ResearchStep {
19
20
  thought: string;
@@ -42,7 +43,18 @@ export interface ResearchPlan {
42
43
  sources: string[];
43
44
  /** True when the question is answerable directly (single step, no research needed). */
44
45
  done: boolean;
46
+ /** Root analytical contract reused by every research branch. */
47
+ rootPlanId?: string;
48
+ budget: ResearchBudget;
45
49
  }
50
+ export interface ResearchBudget {
51
+ plannerCalls: 1;
52
+ sqlExecutions: 6;
53
+ repairs: 1;
54
+ narratorCalls: 1;
55
+ wallClockMs: 120_000;
56
+ }
57
+ export declare const RESEARCH_BUDGET: ResearchBudget;
46
58
  /**
47
59
  * Plan how to handle a research / follow-up question. Returns the decision plus a
48
60
  * grounded plan: a direct answer, a multi-step research trace, or a follow-up with
@@ -60,5 +72,7 @@ export declare function planResearch(input: {
60
72
  }>;
61
73
  /** The user explicitly asked to research/dig deeper — don't collapse to a single-step answer. */
62
74
  forceInvestigate?: boolean;
75
+ /** Authoritative root plan. When present, research never re-matches meaning. */
76
+ rootPlan?: ResolvedAnalyticalPlan;
63
77
  }): Promise<ResearchPlan>;
64
78
  //# sourceMappingURL=research-loop.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"research-loop.d.ts","sourceRoot":"","sources":["../src/research-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,yFAAyF;AACzF,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE;QACN,IAAI,EAAE,eAAe,GAAG,cAAc,GAAG,WAAW,GAAG,cAAc,GAAG,eAAe,GAAG,aAAa,CAAC;QACxG,uEAAuE;QACvE,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,+EAA+E;AAC/E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,kDAAkD;IAClD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,uFAAuF;IACvF,IAAI,EAAE,OAAO,CAAC;CACf;AA8CD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,iGAAiG;IACjG,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,GAAG,OAAO,CAAC,YAAY,CAAC,CA+IxB"}
1
+ {"version":3,"file":"research-loop.d.ts","sourceRoot":"","sources":["../src/research-loop.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAE5E,yFAAyF;AACzF,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE;QACN,IAAI,EAAE,eAAe,GAAG,cAAc,GAAG,WAAW,GAAG,cAAc,GAAG,eAAe,GAAG,aAAa,CAAC;QACxG,uEAAuE;QACvE,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,+EAA+E;AAC/E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,kDAAkD;IAClD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,uFAAuF;IACvF,IAAI,EAAE,OAAO,CAAC;IACd,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,CAAC,CAAC;IAChB,aAAa,EAAE,CAAC,CAAC;IACjB,OAAO,EAAE,CAAC,CAAC;IACX,aAAa,EAAE,CAAC,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,eAAe,EAAE,cAM7B,CAAC;AA8CF;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,iGAAiG;IACjG,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,EAAE,sBAAsB,CAAC;CACnC,GAAG,OAAO,CAAC,YAAY,CAAC,CAiLxB"}
@@ -12,6 +12,13 @@
12
12
  */
13
13
  import { decideAgentAction } from './intent-controller.js';
14
14
  import { matchSemanticMetric } from './metadata/metric-match.js';
15
+ export const RESEARCH_BUDGET = {
16
+ plannerCalls: 1,
17
+ sqlExecutions: 6,
18
+ repairs: 1,
19
+ narratorCalls: 1,
20
+ wallClockMs: 120_000,
21
+ };
15
22
  const TIME_DIM_RE = /(_at$|_date$|_time$|_ts$|^date$|^month$|^week$|^day$|ordered_at|created)/i;
16
23
  function humanize(name) {
17
24
  return name.replace(/[_.]+/g, ' ').replace(/\s+/g, ' ').trim();
@@ -67,23 +74,40 @@ export async function planResearch(input) {
67
74
  .filter((ref) => Boolean(ref))
68
75
  .flatMap((ref) => [ref, ref.split('.').pop() ?? ref]));
69
76
  const backedMetrics = input.metrics.filter((m) => backedNames.has(m.name.toLowerCase()) || backedNames.has(m.name.toLowerCase().split('.').pop() ?? ''));
70
- const match = (backedMetrics.length > 0 ? await matchSemanticMetric(input.question, backedMetrics).catch(() => null) : null) ??
71
- (await matchSemanticMetric(input.question, input.metrics).catch(() => null));
72
- const metricName = match?.metric.name;
77
+ const rootMetric = input.rootPlan?.executionId
78
+ ? input.metrics.find((metric) => nodeIdentities(metric).includes(input.rootPlan.executionId))
79
+ : undefined;
80
+ const match = input.rootPlan
81
+ ? null
82
+ : (backedMetrics.length > 0 ? await matchSemanticMetric(input.question, backedMetrics).catch(() => null) : null) ??
83
+ (await matchSemanticMetric(input.question, input.metrics).catch(() => null));
84
+ const metricName = rootMetric?.name ?? match?.metric.name;
73
85
  const metricBlocks = blocksForMetric(input.blocks, metricName);
74
- const decision = decideAgentAction({
75
- question: input.question,
76
- intent: input.intent ?? 'definition_lookup',
77
- signals: {
78
- metricScore: match?.score,
79
- // Derive from the actual match, not a flat 0.85 that asserts certainty just
80
- // because a block exists (that silently downgraded forced research to a single answer).
81
- certifiedScore: metricBlocks.length > 0 ? (match?.score ?? undefined) : undefined,
82
- hasRetrieval: input.metrics.length > 0 || input.blocks.length > 0,
83
- },
84
- isFollowUp: input.isFollowUp,
85
- history: input.history,
86
- });
86
+ const decision = input.rootPlan
87
+ ? {
88
+ action: input.rootPlan.capability === 'blocked'
89
+ ? 'clarify'
90
+ : (input.forceInvestigate || input.rootPlan.questionType === 'diagnosis' || input.rootPlan.questionType === 'research')
91
+ ? 'investigate'
92
+ : 'answer',
93
+ confidence: input.rootPlan.confidence === 'high' ? 0.9 : input.rootPlan.confidence === 'medium' ? 0.72 : 0.45,
94
+ reason: `Research reuses resolved plan ${input.rootPlan.planId}.`,
95
+ followsUp: Boolean(input.isFollowUp),
96
+ ...(input.rootPlan.clarification ? { clarifyingQuestion: input.rootPlan.clarification } : {}),
97
+ }
98
+ : decideAgentAction({
99
+ question: input.question,
100
+ intent: input.intent ?? 'definition_lookup',
101
+ signals: {
102
+ metricScore: match?.score,
103
+ // Derive from the actual match, not a flat 0.85 that asserts certainty just
104
+ // because a block exists (that silently downgraded forced research to a single answer).
105
+ certifiedScore: metricBlocks.length > 0 ? (match?.score ?? undefined) : undefined,
106
+ hasRetrieval: input.metrics.length > 0 || input.blocks.length > 0,
107
+ },
108
+ isFollowUp: input.isFollowUp,
109
+ history: input.history,
110
+ });
87
111
  // When the user explicitly forced research, don't collapse to the single-step "answer"
88
112
  // path — investigate. A SOFT "nothing matched cleanly" clarify also becomes an
89
113
  // investigation here: the user deliberately asked to research, so we dig rather than
@@ -95,7 +119,13 @@ export async function planResearch(input) {
95
119
  ? 'investigate'
96
120
  : decision.action;
97
121
  const sources = new Set();
98
- if (metricName)
122
+ if (input.rootPlan) {
123
+ for (const id of input.rootPlan.selectedConceptIds)
124
+ sources.add(id);
125
+ if (input.rootPlan.executionId)
126
+ sources.add(input.rootPlan.executionId);
127
+ }
128
+ else if (metricName)
99
129
  sources.add(metricName);
100
130
  for (const b of metricBlocks)
101
131
  sources.add(b.name);
@@ -112,6 +142,8 @@ export async function planResearch(input) {
112
142
  }],
113
143
  sources: Array.from(sources),
114
144
  done: false,
145
+ rootPlanId: input.rootPlan?.rootPlanId ?? input.rootPlan?.planId,
146
+ budget: RESEARCH_BUDGET,
115
147
  };
116
148
  }
117
149
  // ── clarify: ask before researching, with concrete options. ──────────────────
@@ -125,20 +157,25 @@ export async function planResearch(input) {
125
157
  followUp,
126
158
  sources: Array.from(sources),
127
159
  done: false,
160
+ rootPlanId: input.rootPlan?.rootPlanId ?? input.rootPlan?.planId,
161
+ budget: RESEARCH_BUDGET,
128
162
  };
129
163
  }
130
164
  // ── investigate: a grounded, multi-step ReAct research trace. ────────────────
131
165
  if (action === 'investigate') {
132
166
  const steps = [];
133
167
  const label = metricName ? humanize(metricName) : humanize(input.question);
168
+ const metricTarget = input.rootPlan?.executionId ?? metricName;
134
169
  if (metricName) {
135
170
  steps.push({
136
171
  thought: `Establish the baseline for ${label}.`,
137
- action: { kind: 'lookup_metric', target: metricName },
172
+ action: { kind: 'lookup_metric', target: metricTarget },
138
173
  expectation: `The current ${label} value to reason from.`,
139
174
  });
140
175
  }
141
- const timeDim = timeDimensionOf(metricBlocks);
176
+ const timeDim = input.rootPlan?.query.dimensions.find((binding) => /date|time|month|week|year/i.test(binding.requested))?.qualifiedId
177
+ ?? (input.rootPlan?.query.timeGrain || input.rootPlan?.query.timeRange ? 'resolved-plan-time' : undefined)
178
+ ?? timeDimensionOf(metricBlocks);
142
179
  if (timeDim) {
143
180
  steps.push({
144
181
  thought: `See how ${label} moved over time to locate the change.`,
@@ -146,8 +183,12 @@ export async function planResearch(input) {
146
183
  expectation: `When ${label} shifted, and by how much.`,
147
184
  });
148
185
  }
149
- const dims = (requestedDimensions(input.question).filter((d) => !TIME_DIM_RE.test(d))
150
- .filter((d) => categoricalDimensionsOf(metricBlocks).includes(d)));
186
+ const dims = input.rootPlan
187
+ ? input.rootPlan.query.dimensions
188
+ .filter((binding) => !TIME_DIM_RE.test(binding.requested))
189
+ .map((binding) => binding.qualifiedId ?? binding.requested)
190
+ : requestedDimensions(input.question).filter((d) => !TIME_DIM_RE.test(d))
191
+ .filter((d) => categoricalDimensionsOf(metricBlocks).includes(d));
151
192
  const breakdownDim = dims[0] ?? categoricalDimensionsOf(metricBlocks)[0];
152
193
  if (breakdownDim) {
153
194
  steps.push({
@@ -159,7 +200,7 @@ export async function planResearch(input) {
159
200
  else if (metricName) {
160
201
  steps.push({
161
202
  thought: `No breakdown dimension is certified yet — check lineage for drivers.`,
162
- action: { kind: 'check_lineage', target: metricName },
203
+ action: { kind: 'check_lineage', target: metricTarget },
163
204
  expectation: `Upstream models/metrics that feed ${label}.`,
164
205
  });
165
206
  }
@@ -170,6 +211,8 @@ export async function planResearch(input) {
170
211
  steps,
171
212
  sources: Array.from(sources),
172
213
  done: false,
214
+ rootPlanId: input.rootPlan?.rootPlanId ?? input.rootPlan?.planId,
215
+ budget: RESEARCH_BUDGET,
173
216
  };
174
217
  }
175
218
  // ── answer: a single grounded step. ──────────────────────────────────────────
@@ -181,7 +224,7 @@ export async function planResearch(input) {
181
224
  }
182
225
  : {
183
226
  thought: metricName ? `The governed metric answers this directly.` : `Answer from the catalog.`,
184
- action: { kind: 'lookup_metric', target: metricName ?? humanize(input.question) },
227
+ action: { kind: 'lookup_metric', target: input.rootPlan?.executionId ?? metricName ?? humanize(input.question) },
185
228
  expectation: metricName ? `The governed ${humanize(metricName)} value.` : `A grounded answer.`,
186
229
  };
187
230
  return {
@@ -191,8 +234,19 @@ export async function planResearch(input) {
191
234
  steps: [answerStep],
192
235
  sources: Array.from(sources),
193
236
  done: true,
237
+ rootPlanId: input.rootPlan?.rootPlanId ?? input.rootPlan?.planId,
238
+ budget: RESEARCH_BUDGET,
194
239
  };
195
240
  }
241
+ function nodeIdentities(node) {
242
+ const payload = node.payload ?? {};
243
+ return [
244
+ node.nodeId,
245
+ typeof payload.qualifiedId === 'string' ? payload.qualifiedId : undefined,
246
+ typeof payload.sourceNativeId === 'string' ? payload.sourceNativeId : undefined,
247
+ ...(Array.isArray(payload.aliases) ? payload.aliases.filter((value) => typeof value === 'string') : []),
248
+ ].filter((value) => Boolean(value));
249
+ }
196
250
  /**
197
251
  * Build a follow-up that offers REAL options: nearby metrics to disambiguate, or the
198
252
  * certified breakdown dimensions to pick from — never an open-ended "tell me more".
@@ -1 +1 @@
1
- {"version":3,"file":"research-loop.js","sourceRoot":"","sources":["../src/research-loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"research-loop.js","sourceRoot":"","sources":["../src/research-loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Immutable, snapshot-bound analytical plan shared by every downstream route.
3
+ * The router emits it authoritatively by default. Shadow mode remains the
4
+ * bounded route-level rollback switch while integration verification closes.
5
+ *
6
+ * Acceptance: AGT-013, API-006.
7
+ */
8
+ import type { KnowledgeLens } from './domain-context.js';
9
+ import type { AgentEvidenceCandidate, AgentRetrievalEvidence, MeaningExecutionRoute, MeaningQuestionType, MeaningResolution } from './meaning-resolution.js';
10
+ export type ResolvedPlanCapability = 'certified_execution' | 'semantic_execution' | 'governed_relational' | 'bounded_exploration' | 'blocked';
11
+ export interface ResolvedPlanMemberBinding {
12
+ requested: string;
13
+ qualifiedId?: string;
14
+ aggregation?: string;
15
+ status: 'resolved' | 'ambiguous' | 'unresolved';
16
+ candidateIds: string[];
17
+ }
18
+ export interface ResolvedPlanCompatibilityProof {
19
+ candidateId: string;
20
+ compatibility: AgentEvidenceCandidate['compatibility'];
21
+ facts: string[];
22
+ }
23
+ export interface ResolvedAnalyticalPlan {
24
+ schemaVersion: 1;
25
+ mode: 'shadow' | 'authoritative';
26
+ planId: string;
27
+ fingerprint: string;
28
+ parentPlanId?: string;
29
+ rootPlanId?: string;
30
+ revision: number;
31
+ snapshotId: string;
32
+ sourceFingerprint?: string;
33
+ question: string;
34
+ interpretedQuestion: string;
35
+ questionType: MeaningQuestionType;
36
+ confidence: MeaningResolution['confidence'];
37
+ selectedConceptIds: string[];
38
+ executionId?: string;
39
+ recommendedRoute: MeaningExecutionRoute;
40
+ capability: ResolvedPlanCapability;
41
+ query: {
42
+ measures: ResolvedPlanMemberBinding[];
43
+ dimensions: ResolvedPlanMemberBinding[];
44
+ filters: Array<{
45
+ field: string;
46
+ value: string;
47
+ binding: ResolvedPlanMemberBinding;
48
+ }>;
49
+ timeRange?: string;
50
+ timeBounds?: {
51
+ expression: string;
52
+ startInclusive: string;
53
+ endExclusive: string;
54
+ timeZone: 'UTC';
55
+ };
56
+ timeGrain?: string;
57
+ order?: 'asc' | 'desc';
58
+ limit?: number;
59
+ };
60
+ entityGrain?: string;
61
+ sourceRelationIds: string[];
62
+ relationshipPathIds: string[];
63
+ compatibilityProof: ResolvedPlanCompatibilityProof[];
64
+ outputContract: {
65
+ measures: string[];
66
+ dimensions: string[];
67
+ timeGrain?: string;
68
+ };
69
+ evidenceIds: string[];
70
+ rejectedCandidates: Array<{
71
+ id: string;
72
+ reason: string;
73
+ }>;
74
+ missingInformation: string[];
75
+ clarification?: string;
76
+ knowledgeLens?: KnowledgeLens;
77
+ }
78
+ export interface BuildResolvedAnalyticalPlanInput {
79
+ question: string;
80
+ resolution: MeaningResolution;
81
+ evidence: AgentRetrievalEvidence;
82
+ candidates: AgentEvidenceCandidate[];
83
+ mode?: ResolvedAnalyticalPlan['mode'];
84
+ /** Clock captured once by the router; used only to resolve relative time. */
85
+ referenceTime?: Date;
86
+ }
87
+ export interface ResolvedAnalyticalPlanDelta {
88
+ question: string;
89
+ measures?: ResolvedPlanMemberBinding[];
90
+ dimensions?: ResolvedPlanMemberBinding[];
91
+ filters?: ResolvedAnalyticalPlan['query']['filters'];
92
+ selectedResultFilter?: {
93
+ binding: ResolvedPlanMemberBinding;
94
+ value: string;
95
+ sourceTurnId: string;
96
+ };
97
+ timeRange?: string;
98
+ timeGrain?: string;
99
+ order?: 'asc' | 'desc';
100
+ limit?: number;
101
+ referenceTime?: Date;
102
+ }
103
+ export declare function buildResolvedAnalyticalPlan(input: BuildResolvedAnalyticalPlanInput): ResolvedAnalyticalPlan;
104
+ /**
105
+ * Apply an explicitly typed follow-up delta. No prose, prior SQL, or answer text
106
+ * is inspected; every carried member remains a qualified binding from the root.
107
+ * Acceptance: CTX-003, AGT-013, AGT-016.
108
+ */
109
+ export declare function deriveResolvedAnalyticalPlan(parent: ResolvedAnalyticalPlan, delta: ResolvedAnalyticalPlanDelta): ResolvedAnalyticalPlan;
110
+ /** Resolve common analytical ranges once so no executor reinterprets "last month". */
111
+ export declare function resolvePlanTimeRange(expression: string, referenceTime: Date): ResolvedAnalyticalPlan['query']['timeBounds'] | undefined;
112
+ //# sourceMappingURL=resolved-analytical-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolved-analytical-plan.d.ts","sourceRoot":"","sources":["../src/resolved-analytical-plan.ts"],"names":[],"mappings":"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"}