@duckcodeailabs/dql-agent 1.11.10 → 1.12.1

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 (76) hide show
  1. package/dist/agent-run-engine.d.ts.map +1 -1
  2. package/dist/agent-run-engine.js +7 -3
  3. package/dist/agent-run-engine.js.map +1 -1
  4. package/dist/answer-loop.d.ts +25 -1
  5. package/dist/answer-loop.d.ts.map +1 -1
  6. package/dist/answer-loop.js +141 -17
  7. package/dist/answer-loop.js.map +1 -1
  8. package/dist/conversation/rolling-summary.d.ts +23 -0
  9. package/dist/conversation/rolling-summary.d.ts.map +1 -1
  10. package/dist/conversation/rolling-summary.js +64 -0
  11. package/dist/conversation/rolling-summary.js.map +1 -1
  12. package/dist/conversation/session-store.d.ts +18 -2
  13. package/dist/conversation/session-store.d.ts.map +1 -1
  14. package/dist/conversation/session-store.js +65 -8
  15. package/dist/conversation/session-store.js.map +1 -1
  16. package/dist/conversation/snapshot.d.ts +37 -4
  17. package/dist/conversation/snapshot.d.ts.map +1 -1
  18. package/dist/conversation/snapshot.js +115 -6
  19. package/dist/conversation/snapshot.js.map +1 -1
  20. package/dist/hints/correction-eval.d.ts.map +1 -1
  21. package/dist/hints/correction-eval.js +4 -6
  22. package/dist/hints/correction-eval.js.map +1 -1
  23. package/dist/hints/dependencies.d.ts +63 -0
  24. package/dist/hints/dependencies.d.ts.map +1 -0
  25. package/dist/hints/dependencies.js +196 -0
  26. package/dist/hints/dependencies.js.map +1 -0
  27. package/dist/hints/git-store.d.ts +55 -2
  28. package/dist/hints/git-store.d.ts.map +1 -1
  29. package/dist/hints/git-store.js +246 -11
  30. package/dist/hints/git-store.js.map +1 -1
  31. package/dist/hints/graph.d.ts +17 -0
  32. package/dist/hints/graph.d.ts.map +1 -0
  33. package/dist/hints/graph.js +222 -0
  34. package/dist/hints/graph.js.map +1 -0
  35. package/dist/hints/lifecycle.d.ts +107 -0
  36. package/dist/hints/lifecycle.d.ts.map +1 -0
  37. package/dist/hints/lifecycle.js +415 -0
  38. package/dist/hints/lifecycle.js.map +1 -0
  39. package/dist/hints/retrieval.d.ts +13 -1
  40. package/dist/hints/retrieval.d.ts.map +1 -1
  41. package/dist/hints/retrieval.js +74 -11
  42. package/dist/hints/retrieval.js.map +1 -1
  43. package/dist/hints/store.d.ts +9 -2
  44. package/dist/hints/store.d.ts.map +1 -1
  45. package/dist/hints/store.js +155 -15
  46. package/dist/hints/store.js.map +1 -1
  47. package/dist/hints/types.d.ts +63 -3
  48. package/dist/hints/types.d.ts.map +1 -1
  49. package/dist/hints/types.js +1 -1
  50. package/dist/hints/types.js.map +1 -1
  51. package/dist/index.d.ts +17 -11
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +9 -6
  54. package/dist/index.js.map +1 -1
  55. package/dist/intent-controller.d.ts.map +1 -1
  56. package/dist/intent-controller.js +24 -3
  57. package/dist/intent-controller.js.map +1 -1
  58. package/dist/metadata/catalog.d.ts +32 -0
  59. package/dist/metadata/catalog.d.ts.map +1 -1
  60. package/dist/metadata/catalog.js +86 -4
  61. package/dist/metadata/catalog.js.map +1 -1
  62. package/dist/metadata/sql-context-validation.d.ts.map +1 -1
  63. package/dist/metadata/sql-context-validation.js +16 -0
  64. package/dist/metadata/sql-context-validation.js.map +1 -1
  65. package/dist/metadata/sql-grounding.d.ts +7 -0
  66. package/dist/metadata/sql-grounding.d.ts.map +1 -1
  67. package/dist/metadata/sql-grounding.js +26 -1
  68. package/dist/metadata/sql-grounding.js.map +1 -1
  69. package/dist/router.d.ts.map +1 -1
  70. package/dist/router.js +32 -9
  71. package/dist/router.js.map +1 -1
  72. package/dist/skills/loader.js +1 -1
  73. package/dist/skills/loader.js.map +1 -1
  74. package/dist/tools/registry.js +5 -5
  75. package/dist/tools/registry.js.map +1 -1
  76. package/package.json +4 -4
@@ -4,9 +4,9 @@
4
4
  * a few verbatim recent turns + how the new question relates to the topic.
5
5
  */
6
6
  import { parseWorkingState, reduceWorkingState, } from './working-state.js';
7
- import { updateRollingSummary } from './rolling-summary.js';
7
+ import { renderStructuredConversationSummary, updateRollingSummary, updateStructuredConversationSummary, } from './rolling-summary.js';
8
8
  import { buildAnalysisQuestionPlan } from '../metadata/analysis-planner.js';
9
- import { hybridRank } from '../embeddings/provider.js';
9
+ import { envEmbeddingProvider, hybridRank } from '../embeddings/provider.js';
10
10
  const RECENT_TURNS = 4;
11
11
  /**
12
12
  * Build the snapshot for a new question. When the question starts a genuinely
@@ -26,12 +26,22 @@ export function buildConversationSnapshot(store, threadId, options = {}) {
26
26
  workingState = { ...workingState, filters: [] };
27
27
  }
28
28
  }
29
+ const latest = recent[recent.length - 1];
29
30
  return {
31
+ version: 1,
30
32
  threadId,
33
+ surface: thread.surface,
31
34
  rollingSummary: thread.rollingSummary,
35
+ structuredSummary: thread.structuredSummary,
32
36
  workingState: hasWorkingState(workingState) ? workingState : undefined,
33
37
  recentTurns: recent.map(snapshotTurn),
34
38
  topicRelation,
39
+ pendingClarification: latest && (latest.route === 'clarify' || latest.runStatus === 'needs_clarification')
40
+ ? {
41
+ sourceTurnId: latest.id,
42
+ question: latest.answerSummary ?? latest.answerText ?? latest.question,
43
+ }
44
+ : undefined,
35
45
  };
36
46
  }
37
47
  /**
@@ -53,9 +63,16 @@ export function advanceThreadState(store, threadId, turn) {
53
63
  const rollingSummary = compactable.length > 0
54
64
  ? updateRollingSummary({ previousSummary: thread.rollingSummary, compactedTurns: compactable })
55
65
  : thread.rollingSummary;
66
+ const structuredSummary = compactable.length > 0
67
+ ? updateStructuredConversationSummary({
68
+ previousSummary: thread.structuredSummary,
69
+ compactedTurns: compactable,
70
+ })
71
+ : thread.structuredSummary;
56
72
  store.updateThreadState(threadId, {
57
73
  workingState: state,
58
74
  rollingSummary,
75
+ ...(structuredSummary ? { structuredSummary } : {}),
59
76
  summaryTurnSeq: compactable.length > 0
60
77
  ? compactable[compactable.length - 1].seq
61
78
  : thread.summaryTurnSeq,
@@ -67,9 +84,10 @@ export function advanceThreadState(store, threadId, turn) {
67
84
  }
68
85
  /**
69
86
  * Semantic recall over the thread's OLDER turns ("what did we discuss about X?").
70
- * FTS candidates re-ranked with the deterministic hash-embedding blend
71
- * (alpha 0.4 FTS still dominates). Turns already in the recent verbatim
72
- * window are excluded; returns at most `limit` hits. Never throws.
87
+ * FTS candidates are re-ranked with the configured project embedding provider
88
+ * (and the deterministic local fallback when no provider is configured).
89
+ * Turns already in the recent verbatim window are excluded; returns at most
90
+ * `limit` hits. Never throws.
73
91
  */
74
92
  export async function recallRelevantTurns(store, threadId, question, options = {}) {
75
93
  try {
@@ -83,13 +101,86 @@ export async function recallRelevantTurns(store, threadId, question, options = {
83
101
  // FTS returns rank-ordered rows; convert position to a [0,1] score.
84
102
  ftsScore: 1 - index / candidates.length,
85
103
  text: `${turn.question} ${turn.answerSummary ?? ''}`,
86
- })), { alpha: 0.4 });
104
+ })), { alpha: 0.4, provider: envEmbeddingProvider() });
87
105
  return ranked.slice(0, options.limit ?? 3).map((entry) => snapshotTurn(entry.item));
88
106
  }
89
107
  catch {
90
108
  return [];
91
109
  }
92
110
  }
111
+ /** Read the canonical server envelope while accepting the original key during upgrades. */
112
+ export function conversationEnvelopeFromContext(context) {
113
+ if (!context)
114
+ return undefined;
115
+ const raw = context.conversationEnvelope ?? context.serverSnapshot;
116
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw))
117
+ return undefined;
118
+ const envelope = raw;
119
+ if (typeof envelope.threadId !== 'string' || !Array.isArray(envelope.recentTurns))
120
+ return undefined;
121
+ return {
122
+ ...envelope,
123
+ version: 1,
124
+ surface: typeof envelope.surface === 'string' ? envelope.surface : 'agent',
125
+ threadId: envelope.threadId,
126
+ recentTurns: envelope.recentTurns,
127
+ };
128
+ }
129
+ /**
130
+ * One bounded history projection for routing, meaning resolution, planning and
131
+ * execution fallbacks. Review/blocked state is explicit so prose cannot silently
132
+ * become trusted analytical context.
133
+ */
134
+ export function conversationHistoryFromContext(context, limit = 6) {
135
+ const envelope = conversationEnvelopeFromContext(context);
136
+ if (!envelope)
137
+ return [];
138
+ return envelope.recentTurns.slice(-Math.max(1, limit)).flatMap((turn) => {
139
+ const answer = turn.answerSummary?.trim();
140
+ return [
141
+ { role: 'user', text: turn.question },
142
+ ...(answer
143
+ ? [{
144
+ role: 'assistant',
145
+ text: `[${conversationTurnContextState(turn)}] ${answer}`,
146
+ }]
147
+ : []),
148
+ ];
149
+ });
150
+ }
151
+ /** Compact non-prose context shared by every orchestration stage. */
152
+ export function renderConversationEnvelopeForPrompt(context) {
153
+ const envelope = conversationEnvelopeFromContext(context);
154
+ if (!envelope)
155
+ return undefined;
156
+ const state = envelope.workingState
157
+ ? parseWorkingState(envelope.workingState)
158
+ : undefined;
159
+ const summary = renderStructuredConversationSummary(envelope.structuredSummary)
160
+ ?? envelope.rollingSummary;
161
+ const stateLines = state
162
+ ? [
163
+ state.topicKey ? `active topic: ${state.topicKey}` : '',
164
+ state.entities.length ? `entities: ${state.entities.join(', ')}` : '',
165
+ state.measures.length ? `measures: ${state.measures.join(', ')}` : '',
166
+ state.dimensions.length ? `dimensions: ${state.dimensions.join(', ')}` : '',
167
+ state.filters.length ? `filters: ${state.filters.map((filter) => filter.value).join(', ')}` : '',
168
+ state.timeframe ? `timeframe: ${state.timeframe}` : '',
169
+ state.limit !== undefined ? `limit: ${state.limit}` : '',
170
+ ].filter(Boolean)
171
+ : [];
172
+ const lines = [
173
+ `thread: ${envelope.threadId}`,
174
+ `surface: ${envelope.surface}`,
175
+ envelope.topicRelation ? `new-turn relation: ${envelope.topicRelation}` : '',
176
+ ...stateLines,
177
+ envelope.pendingClarification
178
+ ? `pending clarification: ${envelope.pendingClarification.question}`
179
+ : '',
180
+ summary ? `older trusted-state summary:\n${summary}` : '',
181
+ ].filter(Boolean);
182
+ return lines.length > 0 ? lines.join('\n') : undefined;
183
+ }
93
184
  /** Classify the NEW question against the current topic key (same Jaccard rule as the reducer). */
94
185
  function classifyQuestionRelation(state, question) {
95
186
  const plan = buildAnalysisQuestionPlan(question);
@@ -130,6 +221,9 @@ function snapshotTurn(turn) {
130
221
  question: turn.question,
131
222
  answerSummary: turn.answerSummary,
132
223
  route: turn.route,
224
+ trustLabel: turn.trustLabel,
225
+ runStatus: turn.runStatus,
226
+ stopReason: turn.stopReason,
133
227
  sourceCertifiedBlock: turn.sourceCertifiedBlock,
134
228
  contextPackId: turn.contextPackId,
135
229
  knowledgeLens: turn.knowledgeLens,
@@ -141,6 +235,21 @@ function snapshotTurn(turn) {
141
235
  cascade: turn.cascade,
142
236
  };
143
237
  }
238
+ export function conversationTurnContextState(turn) {
239
+ if (turn.runStatus === 'blocked' || turn.trustLabel === 'blocked' || turn.route === 'blocked') {
240
+ return 'blocked';
241
+ }
242
+ if (turn.runStatus === 'needs_clarification' || turn.route === 'clarify') {
243
+ return 'unresolved';
244
+ }
245
+ if (turn.runStatus === 'needs_review' || turn.trustLabel === 'review_required') {
246
+ return 'provisional';
247
+ }
248
+ if (turn.trustLabel === 'certified' || turn.trustLabel === 'governed' || turn.trustLabel === 'grounded') {
249
+ return 'confirmed';
250
+ }
251
+ return 'context';
252
+ }
144
253
  function hasWorkingState(state) {
145
254
  return state.entities.length > 0
146
255
  || state.measures.length > 0
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/conversation/snapshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/conversation/snapshot.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GAGnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mCAAmC,EACnC,oBAAoB,EACpB,mCAAmC,GAEpC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE7E,MAAM,YAAY,GAAG,CAAC,CAAC;AAgDvB;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,KAAwB,EACxB,QAAgB,EAChB,UAAkD,EAAE;IAEpD,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,IAAI,YAAY,CAAC,CAAC;IAC3E,IAAI,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC1D,IAAI,aAAwC,CAAC;IAC7C,IAAI,OAAO,CAAC,QAAQ,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC9C,aAAa,GAAG,wBAAwB,CAAC,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzE,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC;YAC9B,YAAY,GAAG,EAAE,GAAG,YAAY,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzC,OAAO;QACL,OAAO,EAAE,CAAC;QACV,QAAQ;QACR,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,YAAY,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QACtE,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC;QACrC,aAAa;QACb,oBAAoB,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,KAAK,qBAAqB,CAAC;YACxG,CAAC,CAAC;gBACE,YAAY,EAAE,MAAM,CAAC,EAAE;gBACvB,QAAQ,EAAE,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ;aACvE;YACH,CAAC,CAAC,SAAS;KACd,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAwB,EAAE,QAAgB,EAAE,IAAsB;IACnG,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;QACnF,4DAA4D;QAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,GAAG,aAAa,GAAG,CAAC;YAC3D,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,cAAc,EAAE,aAAa,CAAC;YAC1E,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC;YAC3C,CAAC,CAAC,oBAAoB,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;YAC/F,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;QAC1B,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC;YAC9C,CAAC,CAAC,mCAAmC,CAAC;gBAClC,eAAe,EAAE,MAAM,CAAC,iBAAiB;gBACzC,cAAc,EAAE,WAAW;aAC5B,CAAC;YACJ,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAC7B,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE;YAChC,YAAY,EAAE,KAA2C;YACzD,cAAc;YACd,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,cAAc,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC;gBACpC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG;gBACzC,CAAC,CAAC,MAAM,CAAC,cAAc;SAC1B,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,oDAAoD;IACtD,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAAwB,EACxB,QAAgB,EAChB,QAAgB,EAChB,UAAyD,EAAE;IAE3D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;aAC3E,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,QAAQ,EACR,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC/B,IAAI,EAAE,IAAI;YACV,oEAAoE;YACpE,QAAQ,EAAE,CAAC,GAAG,KAAK,GAAG,UAAU,CAAC,MAAM;YACvC,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,IAAI,EAAE,EAAE;SACrD,CAAC,CAAC,EACH,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,oBAAoB,EAAE,EAAE,CACjD,CAAC;QACF,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACtF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,+BAA+B,CAC7C,OAA4C;IAE5C,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,IAAI,OAAO,CAAC,cAAc,CAAC;IACnE,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5E,MAAM,QAAQ,GAAG,GAAsC,CAAC;IACxD,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,SAAS,CAAC;IACpG,OAAO;QACL,GAAG,QAAQ;QACX,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;QAC1E,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,WAAW,EAAE,QAAQ,CAAC,WAAW;KACR,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAC5C,OAA4C,EAC5C,KAAK,GAAG,CAAC;IAET,MAAM,QAAQ,GAAG,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAC1D,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,OAAO,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACtE,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;QAC1C,OAAO;YACL,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;YAC9C,GAAG,CAAC,MAAM;gBACR,CAAC,CAAC,CAAC;wBACC,IAAI,EAAE,WAAoB;wBAC1B,IAAI,EAAE,IAAI,4BAA4B,CAAC,IAAI,CAAC,KAAK,MAAM,EAAE;qBAC1D,CAAC;gBACJ,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,mCAAmC,CACjD,OAA4C;IAE5C,MAAM,QAAQ,GAAG,+BAA+B,CAAC,OAAO,CAAC,CAAC;IAC1D,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY;QACjC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAkD,CAAC;QAChF,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,OAAO,GAAG,mCAAmC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;WAC1E,QAAQ,CAAC,cAAc,CAAC;IAC7B,MAAM,UAAU,GAAG,KAAK;QACtB,CAAC,CAAC;YACE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;YACvD,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YACrE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YACrE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YAC3E,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YAChG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE;YACtD,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;SACzD,CAAC,MAAM,CAAC,OAAO,CAAC;QACnB,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,KAAK,GAAG;QACZ,WAAW,QAAQ,CAAC,QAAQ,EAAE;QAC9B,YAAY,QAAQ,CAAC,OAAO,EAAE;QAC9B,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,sBAAsB,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE;QAC5E,GAAG,UAAU;QACb,QAAQ,CAAC,oBAAoB;YAC3B,CAAC,CAAC,0BAA0B,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,EAAE;YACpE,CAAC,CAAC,EAAE;QACN,OAAO,CAAC,CAAC,CAAC,iCAAiC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;KAC1D,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC;AAED,kGAAkG;AAClG,SAAS,wBAAwB,CAAC,KAA+B,EAAE,QAAgB;IACjF,MAAM,IAAI,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC;QACpB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5D,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC;KACvC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACnB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9E,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,cAAc,CAAC;IAC5C,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,cAAc,CAAC;IACjD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;IACjE,IAAI,OAAO,IAAI,GAAG;QAAE,OAAO,cAAc,CAAC;IAC1C,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,YAAY,CAAC;IACrC,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QACxD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACtE,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,GAAG,IAAI,CAAC,CAAC;QAC7D,OAAO,UAAU,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC;IAClF,CAAC,CAAC,CAAC;IACH,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;IACvH,OAAO,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;AACjD,CAAC;AAED,SAAS,YAAY,CAAC,IAAsB;IAC1C,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;QAC/C,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO;QACnC,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ;QACrC,qBAAqB,EAAE,IAAI,CAAC,MAAM,EAAE,eAAe;QACnD,SAAS,EAAE,IAAI,CAAC,GAAG;QACnB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,IAA8B;IACzE,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9F,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,IAAI,CAAC,SAAS,KAAK,qBAAqB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACzE,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IAAI,IAAI,CAAC,SAAS,KAAK,cAAc,IAAI,IAAI,CAAC,UAAU,KAAK,iBAAiB,EAAE,CAAC;QAC/E,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QACxG,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,KAA+B;IACtD,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;WAC3B,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;WACzB,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;WAC3B,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;WACxB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACnF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"correction-eval.d.ts","sourceRoot":"","sources":["../../src/hints/correction-eval.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACtC;AAED,eAAO,MAAM,8BAA8B,4CAA4C,CAAC;AAExF;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,kBAAkB,CAU5H;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAoBlG;AAED,yDAAyD;AACzD,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAEpI"}
1
+ {"version":3,"file":"correction-eval.d.ts","sourceRoot":"","sources":["../../src/hints/correction-eval.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACtC;AAED,eAAO,MAAM,8BAA8B,4CAA4C,CAAC;AAExF;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,kBAAkB,CAU5H;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAoBlG;AAED,yDAAyD;AACzD,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAEpI"}
@@ -1,12 +1,10 @@
1
1
  /**
2
2
  * Corrections become regression eval cases (W4.3).
3
3
  *
4
- * When an analyst corrects an answer, we already capture a scoped hint. This also
5
- * distills the correction into an agent-eval case so the wrong answer can never
6
- * silently return: the case asserts a future answer to the same question references
7
- * the same relations the human's corrected SQL used. Cases accumulate in the
8
- * project's `agent-evals/corrections.agent-evals.yml`, which `dql agent eval` reads.
9
- * This is the Anthropic pattern — a stakeholder correction turns into a durable test.
4
+ * Explicit utility for turning a reviewed correction into an agent-eval case.
5
+ * Correction capture does not call this automatically: writing a regression
6
+ * source is a separate authoring action. The generated assertion only checks
7
+ * referenced relations and is not semantic proof for hint approval.
10
8
  */
11
9
  import { analyzeSqlReferences } from '@duckcodeailabs/dql-core';
12
10
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
@@ -1 +1 @@
1
- {"version":3,"file":"correction-eval.js","sourceRoot":"","sources":["../../src/hints/correction-eval.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"correction-eval.js","sourceRoot":"","sources":["../../src/hints/correction-eval.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,IAAI,MAAM,SAAS,CAAC;AAQ3B,MAAM,CAAC,MAAM,8BAA8B,GAAG,yCAAyC,CAAC;AAExF;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAgE;IACtG,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;SAC7F,MAAM,CAAC,OAAO,CAAC;SACf,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACf,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,eAAe,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;QAChE,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE;KACjE,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,WAAmB,EAAE,QAA4B;IACxF,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,8BAA8B,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAyB,EAAE,CAAC;IACvC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAiD,CAAC;YACrG,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACzE,CAAC;QAAC,MAAM,CAAC;YACP,4DAA4D;QAC9D,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,CAAC;IAClG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,yEAAyE;UACpF,qFAAqF;UACrF,2EAA2E,CAAC;IAChF,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAChF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,sBAAsB,CAAC,WAAmB,EAAE,KAAgE;IAC1H,OAAO,wBAAwB,CAAC,WAAW,EAAE,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/E,CAAC"}
@@ -0,0 +1,63 @@
1
+ import type { HintDependency, HintScope } from './types.js';
2
+ export interface HintDependencyObject {
3
+ objectKey: string;
4
+ objectType: string;
5
+ name: string;
6
+ fullName?: string;
7
+ domain?: string;
8
+ sourcePath?: string;
9
+ status?: string;
10
+ description?: string;
11
+ payload?: Record<string, unknown>;
12
+ }
13
+ export interface HintDependencyRelation {
14
+ relation: string;
15
+ name: string;
16
+ objectKey?: string;
17
+ source: string;
18
+ columns: Array<{
19
+ name: string;
20
+ type?: string;
21
+ description?: string;
22
+ }>;
23
+ columnCompleteness?: 'complete' | 'partial';
24
+ }
25
+ export interface CollectedHintDependencies {
26
+ dependencies: HintDependency[];
27
+ referencedRelations: string[];
28
+ unknownRelations: string[];
29
+ }
30
+ export interface HintFreshnessAssessment {
31
+ snapshotCurrent: boolean;
32
+ dependenciesCurrent: boolean;
33
+ staleDependencies: HintDependency[];
34
+ /**
35
+ * Dependency-bearing hints are scoped: an unrelated project snapshot change
36
+ * does not invalidate them when every recorded dependency still matches.
37
+ * Legacy hints without dependency evidence fall back to the project snapshot.
38
+ */
39
+ current: boolean;
40
+ }
41
+ /** Content-address the governed relation/object inputs used by a hint. */
42
+ export declare function collectHintDependencies(input: {
43
+ sql?: string;
44
+ scope: HintScope;
45
+ objects: HintDependencyObject[];
46
+ relations: HintDependencyRelation[];
47
+ /** Conservative fingerprint when a scoped object is not in the bounded pack. */
48
+ fallbackFingerprint?: string;
49
+ }): CollectedHintDependencies;
50
+ /** Build the current dependency lookup used by retrieval-time drift gates. */
51
+ export declare function currentHintDependencyFingerprints(input: {
52
+ objects: HintDependencyObject[];
53
+ relations: HintDependencyRelation[];
54
+ }): Map<string, string>;
55
+ export declare function staleHintDependencies(dependencies: HintDependency[] | undefined, current: ReadonlyMap<string, string> | undefined): HintDependency[];
56
+ /** Apply the same fail-closed freshness rule at review, inspection, and retrieval. */
57
+ export declare function assessHintFreshness(input: {
58
+ dependencies?: HintDependency[];
59
+ snapshotId?: string;
60
+ currentDependencies?: ReadonlyMap<string, string>;
61
+ currentSnapshotId?: string | null;
62
+ }): HintFreshnessAssessment;
63
+ //# sourceMappingURL=dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../src/hints/dependencies.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAsB,SAAS,EAAE,MAAM,YAAY,CAAC;AAEhF,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,kBAAkB,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;CAC7C;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,OAAO,CAAC;IACzB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,EAAE,cAAc,EAAE,CAAC;IACpC;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,0EAA0E;AAC1E,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,SAAS,EAAE,sBAAsB,EAAE,CAAC;IACpC,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,GAAG,yBAAyB,CAiD5B;AAED,8EAA8E;AAC9E,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IACvD,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,SAAS,EAAE,sBAAsB,EAAE,CAAC;CACrC,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBtB;AAED,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,cAAc,EAAE,GAAG,SAAS,EAC1C,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAC/C,cAAc,EAAE,CAGlB;AAED,sFAAsF;AACtF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,YAAY,CAAC,EAAE,cAAc,EAAE,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC,GAAG,uBAAuB,CAmB1B"}
@@ -0,0 +1,196 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { analyzeSqlReferences } from '@duckcodeailabs/dql-core';
3
+ /** Content-address the governed relation/object inputs used by a hint. */
4
+ export function collectHintDependencies(input) {
5
+ const dependencies = new Map();
6
+ const analysis = input.sql?.trim() ? analyzeSqlReferences(input.sql) : null;
7
+ const referencedRelations = analysis?.tables ?? [];
8
+ const unknownRelations = [];
9
+ for (const referenced of referencedRelations) {
10
+ const relation = findRelation(input.relations, referenced);
11
+ if (!relation) {
12
+ unknownRelations.push(referenced);
13
+ continue;
14
+ }
15
+ const dependency = relationDependency(relation);
16
+ dependencies.set(dependency.id, dependency);
17
+ if (relation.objectKey) {
18
+ const object = input.objects.find((candidate) => candidate.objectKey === relation.objectKey);
19
+ if (object) {
20
+ const objectDep = objectDependency(object);
21
+ dependencies.set(objectDep.id, objectDep);
22
+ }
23
+ }
24
+ }
25
+ for (const [scopeField, kind, objectTypes] of SCOPE_OBJECTS) {
26
+ const name = input.scope[scopeField];
27
+ if (!name)
28
+ continue;
29
+ const object = input.objects.find((candidate) => objectTypes.includes(candidate.objectType.toLowerCase())
30
+ && objectNames(candidate).some((candidateName) => eq(candidateName, name)));
31
+ const dependency = object
32
+ ? objectDependency(object, kind)
33
+ : input.fallbackFingerprint
34
+ ? {
35
+ id: `scope:${kind}:${normalizeScopeName(name)}`,
36
+ kind,
37
+ name,
38
+ fingerprint: input.fallbackFingerprint,
39
+ }
40
+ : undefined;
41
+ if (!dependency)
42
+ continue;
43
+ dependencies.set(dependency.id, dependency);
44
+ }
45
+ return {
46
+ dependencies: [...dependencies.values()].sort((left, right) => left.id.localeCompare(right.id)),
47
+ referencedRelations,
48
+ unknownRelations,
49
+ };
50
+ }
51
+ /** Build the current dependency lookup used by retrieval-time drift gates. */
52
+ export function currentHintDependencyFingerprints(input) {
53
+ const current = new Map();
54
+ for (const relation of input.relations) {
55
+ const dependency = relationDependency(relation);
56
+ current.set(dependency.id, dependency.fingerprint);
57
+ }
58
+ for (const object of input.objects) {
59
+ const dependency = objectDependency(object);
60
+ current.set(dependency.id, dependency.fingerprint);
61
+ const inferredKind = hintKindForObjectType(object.objectType);
62
+ if (inferredKind) {
63
+ const scoped = objectDependency(object, inferredKind);
64
+ current.set(scoped.id, scoped.fingerprint);
65
+ }
66
+ }
67
+ return current;
68
+ }
69
+ export function staleHintDependencies(dependencies, current) {
70
+ if (!dependencies?.length || !current)
71
+ return [];
72
+ return dependencies.filter((dependency) => current.get(dependency.id) !== dependency.fingerprint);
73
+ }
74
+ /** Apply the same fail-closed freshness rule at review, inspection, and retrieval. */
75
+ export function assessHintFreshness(input) {
76
+ const dependencies = input.dependencies ?? [];
77
+ const staleDependencies = dependencies.length > 0
78
+ ? staleHintDependencies(dependencies, input.currentDependencies ?? new Map())
79
+ : [];
80
+ const snapshotCurrent = Boolean(input.snapshotId)
81
+ && Boolean(input.currentSnapshotId)
82
+ && input.snapshotId === input.currentSnapshotId
83
+ && !input.currentSnapshotId.startsWith('unverified:');
84
+ const dependenciesCurrent = dependencies.length > 0 && staleDependencies.length === 0;
85
+ // v1/v2 approved hints predate snapshot/dependency provenance. Preserve their
86
+ // historical retrieval behavior; v3 lifecycle approval cannot create these.
87
+ const legacyUnversioned = dependencies.length === 0 && !input.snapshotId;
88
+ return {
89
+ snapshotCurrent,
90
+ dependenciesCurrent,
91
+ staleDependencies,
92
+ current: dependencies.length > 0 ? dependenciesCurrent : snapshotCurrent || legacyUnversioned,
93
+ };
94
+ }
95
+ function relationDependency(relation) {
96
+ const name = normalizeRelation(relation.relation);
97
+ return {
98
+ id: `relation:${name}`,
99
+ kind: 'relation',
100
+ name: relation.relation,
101
+ fingerprint: fingerprint({
102
+ relation: name,
103
+ objectKey: relation.objectKey,
104
+ source: relation.source,
105
+ columnCompleteness: relation.columnCompleteness,
106
+ columns: relation.columns
107
+ .map((column) => ({
108
+ name: column.name.toLowerCase(),
109
+ type: column.type?.toLowerCase(),
110
+ description: column.description,
111
+ }))
112
+ .sort((left, right) => left.name.localeCompare(right.name)),
113
+ }),
114
+ };
115
+ }
116
+ function objectDependency(object, kind = hintKindForObjectType(object.objectType) ?? 'semantic') {
117
+ return {
118
+ id: `${kind}:${object.objectKey}`,
119
+ kind,
120
+ name: object.fullName ?? object.name,
121
+ fingerprint: fingerprint({
122
+ objectKey: object.objectKey,
123
+ objectType: object.objectType,
124
+ name: object.name,
125
+ fullName: object.fullName,
126
+ domain: object.domain,
127
+ status: object.status,
128
+ description: object.description,
129
+ sourcePath: object.sourcePath,
130
+ payload: object.payload,
131
+ }),
132
+ sourcePath: object.sourcePath,
133
+ };
134
+ }
135
+ function findRelation(relations, referenced) {
136
+ const keys = relationKeys(referenced);
137
+ return relations.find((relation) => [...relationKeys(relation.relation)].some((key) => keys.has(key))
138
+ || [...relationKeys(relation.name)].some((key) => keys.has(key)));
139
+ }
140
+ function relationKeys(value) {
141
+ const normalized = normalizeRelation(value);
142
+ const parts = normalized.split('.');
143
+ return new Set([normalized, parts.at(-1) ?? normalized]);
144
+ }
145
+ function normalizeRelation(value) {
146
+ return value.replace(/["`\[\]]/g, '').trim().toLowerCase();
147
+ }
148
+ function objectNames(object) {
149
+ return [object.name, object.fullName, object.objectKey]
150
+ .filter((value) => Boolean(value));
151
+ }
152
+ function eq(left, right) {
153
+ return normalizeScopeName(left) === normalizeScopeName(right);
154
+ }
155
+ function normalizeScopeName(value) {
156
+ return value.trim().toLowerCase().replace(/^(block|metric|term|dbt_model|dbt_source|domain):/, '');
157
+ }
158
+ function hintKindForObjectType(objectType) {
159
+ const normalized = objectType.toLowerCase();
160
+ if (normalized === 'dbt_model' || normalized === 'dbt_source')
161
+ return 'dbt_model';
162
+ if (normalized.includes('metric'))
163
+ return 'metric';
164
+ if (normalized === 'domain' || normalized === 'domain_capsule')
165
+ return 'domain';
166
+ if (normalized === 'term' || normalized === 'dql_term')
167
+ return 'term';
168
+ if (normalized === 'block' || normalized === 'dql_block')
169
+ return 'block';
170
+ if (normalized.includes('semantic') || normalized === 'business_view')
171
+ return 'semantic';
172
+ return undefined;
173
+ }
174
+ const SCOPE_OBJECTS = [
175
+ ['metric', 'metric', ['metric', 'semantic_metric']],
176
+ ['dbtModel', 'dbt_model', ['dbt_model', 'dbt_source']],
177
+ ['domain', 'domain', ['domain', 'domain_capsule']],
178
+ ['term', 'term', ['term', 'dql_term']],
179
+ ['block', 'block', ['block', 'dql_block']],
180
+ ];
181
+ function fingerprint(value) {
182
+ return createHash('sha256').update(stableStringify(value)).digest('hex');
183
+ }
184
+ function stableStringify(value) {
185
+ if (Array.isArray(value))
186
+ return `[${value.map(stableStringify).join(',')}]`;
187
+ if (value && typeof value === 'object') {
188
+ return `{${Object.entries(value)
189
+ .filter(([, item]) => item !== undefined)
190
+ .sort(([left], [right]) => left.localeCompare(right))
191
+ .map(([key, item]) => `${JSON.stringify(key)}:${stableStringify(item)}`)
192
+ .join(',')}}`;
193
+ }
194
+ return JSON.stringify(value);
195
+ }
196
+ //# sourceMappingURL=dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/hints/dependencies.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Files (the source of truth, consistent with DQL):
5
5
  * - `.dql/traces/<id>.trace.json` — correction traces
6
- * - `.dql/hints/<id>.hint.yaml` — candidate / approved / rejected hints
6
+ * - `.dql/hints/<id>.hint.yaml` — candidate / approved / rejected / retired hints
7
7
  * - `.dql/evaluations/<id>.hint-evaluation.yaml` — required evaluation results
8
8
  * - `.dql/reviews/<id>.review.yaml` — human review decisions
9
9
  *
@@ -16,7 +16,7 @@
16
16
  * flips status, writes the review, and reindexes SQLite
17
17
  * Approved-only is enforced at retrieval; nothing here auto-applies a hint.
18
18
  */
19
- import type { CorrectionTrace, Hint, HintEvaluation, HintEvaluationCheck, HintReview, HintScope } from './types.js';
19
+ import type { CorrectionTrace, Hint, HintEvaluation, HintEvaluationCheck, HintDependency, HintLifecycleFailure, HintReview, HintScope } from './types.js';
20
20
  export declare function tracesDir(projectRoot: string): string;
21
21
  export declare function hintsDir(projectRoot: string): string;
22
22
  export declare function evaluationsDir(projectRoot: string): string;
@@ -38,6 +38,10 @@ export interface RecordCorrectionTraceInput {
38
38
  snapshotId?: string;
39
39
  /** Stable evaluation name that must pass before approval. Required by v3. */
40
40
  requiredEvaluation?: string;
41
+ /** Exact governed inputs used to validate the correction. */
42
+ dependencies?: HintDependency[];
43
+ /** Fail-closed validation problems retained with the candidate. */
44
+ lifecycleErrors?: HintLifecycleFailure[];
41
45
  /** Override the derived candidate hint's title. */
42
46
  hintTitle?: string;
43
47
  /** Override the derived candidate hint's guidance (defaults to the correction). */
@@ -49,6 +53,8 @@ export interface RecordCorrectionTraceResult {
49
53
  trace: CorrectionTrace;
50
54
  hint: Hint;
51
55
  }
56
+ export declare function correctionTraceFilePath(projectRoot: string, traceId: string): string;
57
+ export declare function getCorrectionTraceFromGit(projectRoot: string, traceId: string): CorrectionTrace | null;
52
58
  /**
53
59
  * Record a Tier-2 correction as a Git trace + a derived **candidate** hint.
54
60
  * The hint is NOT usable until reviewed/approved.
@@ -94,12 +100,59 @@ export interface ReviewHintResult {
94
100
  hint: Hint;
95
101
  review: HintReview;
96
102
  }
103
+ export interface UpdateHintCandidateInput {
104
+ hintId: string;
105
+ title?: string;
106
+ guidance?: string;
107
+ correctedSql?: string;
108
+ scope?: HintScope;
109
+ snapshotId: string;
110
+ dependencies: HintDependency[];
111
+ lifecycleErrors: HintLifecycleFailure[];
112
+ }
113
+ export declare function updateHintCandidate(projectRoot: string, input: UpdateHintCandidateInput): Hint;
97
114
  /**
98
115
  * Approve or reject a candidate hint. Writes the review record, flips the hint
99
116
  * file's status, and reindexes SQLite. Approval is the ONLY path that makes a
100
117
  * hint usable in normal retrieval.
101
118
  */
102
119
  export declare function reviewHint(projectRoot: string, input: ReviewHintInput): ReviewHintResult | null;
120
+ export declare function retireHint(projectRoot: string, input: {
121
+ hintId: string;
122
+ reviewer: string;
123
+ note?: string;
124
+ }): ReviewHintResult;
125
+ export declare function reopenHint(projectRoot: string, input: {
126
+ hintId: string;
127
+ reviewer: string;
128
+ note?: string;
129
+ snapshotId: string;
130
+ dependencies: HintDependency[];
131
+ lifecycleErrors: HintLifecycleFailure[];
132
+ }): ReviewHintResult;
133
+ export declare function supersedeHint(projectRoot: string, input: {
134
+ hintId: string;
135
+ targetHintId: string;
136
+ reviewer: string;
137
+ note?: string;
138
+ }): ReviewHintResult;
139
+ export interface EnsureHintIndexFreshResult {
140
+ hintCount: number;
141
+ fingerprint: string;
142
+ rebuilt: boolean;
143
+ }
144
+ /**
145
+ * Content-address the Git-authoritative hint files together with the SQLite
146
+ * projection version. File names and bytes are stable across clones; absolute
147
+ * paths and filesystem timestamps are intentionally excluded.
148
+ */
149
+ export declare function hintIndexProjectionFingerprint(projectRoot: string): string;
103
150
  /** Rebuild the SQLite hint index from the Git-authoritative files. */
104
151
  export declare function reindexHints(projectRoot: string, indexPath?: string): number;
152
+ /**
153
+ * Bootstrap or refresh the local hint projection only when Git data or the
154
+ * projection schema changed. Safe to call whenever an OSS project is opened.
155
+ */
156
+ export declare function ensureHintIndexFresh(projectRoot: string, indexPath?: string): EnsureHintIndexFreshResult;
157
+ export declare function requiresEvaluatedApproval(projectRoot: string): boolean;
105
158
  //# sourceMappingURL=git-store.d.ts.map