@memberjunction/db-auto-doc 6.2.0-edge.5 → 6.2.0-edge.7

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 (117) hide show
  1. package/README.md +10 -0
  2. package/dist/api/DBAutoDocAPI.d.ts +2 -0
  3. package/dist/api/DBAutoDocAPI.d.ts.map +1 -1
  4. package/dist/api/DBAutoDocAPI.js +2 -1
  5. package/dist/api/DBAutoDocAPI.js.map +1 -1
  6. package/dist/core/AnalysisEngine.d.ts +24 -0
  7. package/dist/core/AnalysisEngine.d.ts.map +1 -1
  8. package/dist/core/AnalysisEngine.js +104 -11
  9. package/dist/core/AnalysisEngine.js.map +1 -1
  10. package/dist/core/AnalysisOrchestrator.d.ts.map +1 -1
  11. package/dist/core/AnalysisOrchestrator.js +17 -5
  12. package/dist/core/AnalysisOrchestrator.js.map +1 -1
  13. package/dist/discovery/ColumnNormalizer.d.ts +31 -0
  14. package/dist/discovery/ColumnNormalizer.d.ts.map +1 -1
  15. package/dist/discovery/ColumnNormalizer.js +68 -2
  16. package/dist/discovery/ColumnNormalizer.js.map +1 -1
  17. package/dist/discovery/Composer.d.ts +33 -2
  18. package/dist/discovery/Composer.d.ts.map +1 -1
  19. package/dist/discovery/Composer.js +126 -5
  20. package/dist/discovery/Composer.js.map +1 -1
  21. package/dist/discovery/DiscoveryEngine.d.ts +3 -0
  22. package/dist/discovery/DiscoveryEngine.d.ts.map +1 -1
  23. package/dist/discovery/DiscoveryEngine.js +1 -1
  24. package/dist/discovery/DiscoveryEngine.js.map +1 -1
  25. package/dist/discovery/EmbeddingProvider.d.ts +6 -1
  26. package/dist/discovery/EmbeddingProvider.d.ts.map +1 -1
  27. package/dist/discovery/EmbeddingProvider.js +11 -1
  28. package/dist/discovery/EmbeddingProvider.js.map +1 -1
  29. package/dist/discovery/IndexKeyEvidence.d.ts +36 -0
  30. package/dist/discovery/IndexKeyEvidence.d.ts.map +1 -0
  31. package/dist/discovery/IndexKeyEvidence.js +42 -0
  32. package/dist/discovery/IndexKeyEvidence.js.map +1 -0
  33. package/dist/discovery/JoinProbe.d.ts +148 -0
  34. package/dist/discovery/JoinProbe.d.ts.map +1 -0
  35. package/dist/discovery/JoinProbe.js +233 -0
  36. package/dist/discovery/JoinProbe.js.map +1 -0
  37. package/dist/discovery/LLMDiscoveryValidator.d.ts +8 -1
  38. package/dist/discovery/LLMDiscoveryValidator.d.ts.map +1 -1
  39. package/dist/discovery/LLMDiscoveryValidator.js +24 -3
  40. package/dist/discovery/LLMDiscoveryValidator.js.map +1 -1
  41. package/dist/discovery/LLMSanityChecker.d.ts.map +1 -1
  42. package/dist/discovery/LLMSanityChecker.js +10 -1
  43. package/dist/discovery/LLMSanityChecker.js.map +1 -1
  44. package/dist/discovery/OrganicKeyDetector.d.ts +29 -1
  45. package/dist/discovery/OrganicKeyDetector.d.ts.map +1 -1
  46. package/dist/discovery/OrganicKeyDetector.js +26 -3
  47. package/dist/discovery/OrganicKeyDetector.js.map +1 -1
  48. package/dist/discovery/OrganicKeyTranslator.d.ts +24 -5
  49. package/dist/discovery/OrganicKeyTranslator.d.ts.map +1 -1
  50. package/dist/discovery/OrganicKeyTranslator.js +32 -14
  51. package/dist/discovery/OrganicKeyTranslator.js.map +1 -1
  52. package/dist/discovery/PKDetector.d.ts +9 -0
  53. package/dist/discovery/PKDetector.d.ts.map +1 -1
  54. package/dist/discovery/PKDetector.js +86 -8
  55. package/dist/discovery/PKDetector.js.map +1 -1
  56. package/dist/discovery/SemanticPhase.d.ts +25 -0
  57. package/dist/discovery/SemanticPhase.d.ts.map +1 -1
  58. package/dist/discovery/SemanticPhase.js +55 -11
  59. package/dist/discovery/SemanticPhase.js.map +1 -1
  60. package/dist/discovery/embedding-provider-default.d.ts +25 -0
  61. package/dist/discovery/embedding-provider-default.d.ts.map +1 -0
  62. package/dist/discovery/embedding-provider-default.js +47 -0
  63. package/dist/discovery/embedding-provider-default.js.map +1 -0
  64. package/dist/drivers/BaseAutoDocDriver.d.ts +63 -0
  65. package/dist/drivers/BaseAutoDocDriver.d.ts.map +1 -1
  66. package/dist/drivers/BaseAutoDocDriver.js.map +1 -1
  67. package/dist/drivers/MySQLDriver.d.ts +21 -1
  68. package/dist/drivers/MySQLDriver.d.ts.map +1 -1
  69. package/dist/drivers/MySQLDriver.js +64 -0
  70. package/dist/drivers/MySQLDriver.js.map +1 -1
  71. package/dist/drivers/PostgreSQLDriver.d.ts +34 -1
  72. package/dist/drivers/PostgreSQLDriver.d.ts.map +1 -1
  73. package/dist/drivers/PostgreSQLDriver.js +91 -0
  74. package/dist/drivers/PostgreSQLDriver.js.map +1 -1
  75. package/dist/drivers/SQLServerDriver.d.ts +28 -1
  76. package/dist/drivers/SQLServerDriver.d.ts.map +1 -1
  77. package/dist/drivers/SQLServerDriver.js +106 -0
  78. package/dist/drivers/SQLServerDriver.js.map +1 -1
  79. package/dist/drivers/probeErrors.d.ts +30 -0
  80. package/dist/drivers/probeErrors.d.ts.map +1 -0
  81. package/dist/drivers/probeErrors.js +94 -0
  82. package/dist/drivers/probeErrors.js.map +1 -0
  83. package/dist/generators/AdditionalSchemaInfoGenerator.d.ts +0 -18
  84. package/dist/generators/AdditionalSchemaInfoGenerator.d.ts.map +1 -1
  85. package/dist/generators/AdditionalSchemaInfoGenerator.js +45 -4
  86. package/dist/generators/AdditionalSchemaInfoGenerator.js.map +1 -1
  87. package/dist/prompts/PromptEngine.d.ts.map +1 -1
  88. package/dist/prompts/PromptEngine.js +10 -1
  89. package/dist/prompts/PromptEngine.js.map +1 -1
  90. package/dist/types/config.d.ts +82 -4
  91. package/dist/types/config.d.ts.map +1 -1
  92. package/dist/types/config.js.map +1 -1
  93. package/dist/types/discovery.d.ts +39 -0
  94. package/dist/types/discovery.d.ts.map +1 -1
  95. package/dist/types/state.d.ts +2 -0
  96. package/dist/types/state.d.ts.map +1 -1
  97. package/dist/utils/call-deadline.d.ts +43 -0
  98. package/dist/utils/call-deadline.d.ts.map +1 -0
  99. package/dist/utils/call-deadline.js +81 -0
  100. package/dist/utils/call-deadline.js.map +1 -0
  101. package/dist/utils/index-hints.d.ts +8 -1
  102. package/dist/utils/index-hints.d.ts.map +1 -1
  103. package/dist/utils/index-hints.js +15 -0
  104. package/dist/utils/index-hints.js.map +1 -1
  105. package/dist/utils/index.d.ts +1 -0
  106. package/dist/utils/index.d.ts.map +1 -1
  107. package/dist/utils/index.js +1 -0
  108. package/dist/utils/index.js.map +1 -1
  109. package/dist/utils/seed-context.d.ts +23 -0
  110. package/dist/utils/seed-context.d.ts.map +1 -0
  111. package/dist/utils/seed-context.js +38 -0
  112. package/dist/utils/seed-context.js.map +1 -0
  113. package/package.json +5 -5
  114. package/prompts/fk-pruning-holistic.md +7 -0
  115. package/prompts/fk-pruning-table.md +7 -0
  116. package/prompts/pk-pruning-holistic.md +7 -0
  117. package/prompts/pk-pruning-table.md +7 -0
@@ -27,6 +27,7 @@
27
27
  */
28
28
  import { CreateLLMInstance } from '../utils/llm-factory.js';
29
29
  import { CleanAndParseJSON } from '../utils/json.js';
30
+ import { ResolveCallTimeoutMs, WithCallDeadline } from '../utils/call-deadline.js';
30
31
  export class TableNormalizer {
31
32
  constructor(aiConfig) {
32
33
  this.aiConfig = aiConfig;
@@ -50,17 +51,24 @@ export class TableNormalizer {
50
51
  };
51
52
  let lastError = '';
52
53
  let cumTokens = { total: 0, input: 0, output: 0 };
54
+ const what = `normalizer for ${input.schema}.${input.table}`;
53
55
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
54
56
  let result;
55
57
  try {
56
- result = await this.llm.ChatCompletion(params);
58
+ // Bounded, like every other live call site. A provider that accepts the socket and
59
+ // then stops sending never settles the promise, and this loop only runs once one
60
+ // settles — so without the deadline a single stalled table parks a worker for the
61
+ // rest of the run, and with concurrency N, N stalls park the whole pass.
62
+ result = await WithCallDeadline(ResolveCallTimeoutMs(this.aiConfig.callTimeoutMs), what, (signal) => this.llm.ChatCompletion({ ...params, cancellationToken: signal }));
57
63
  }
58
64
  catch (err) {
59
65
  lastError = `LLM call threw: ${err.message}`;
66
+ await this.waitBeforeRetry(attempt, maxRetries);
60
67
  continue;
61
68
  }
62
69
  if (!result.success) {
63
70
  lastError = `LLM call failed: ${result.errorMessage ?? 'unknown'}`;
71
+ await this.waitBeforeRetry(attempt, maxRetries);
64
72
  continue;
65
73
  }
66
74
  const content = result.data?.choices?.[0]?.message?.content ?? '';
@@ -110,6 +118,35 @@ export class TableNormalizer {
110
118
  }
111
119
  return { normalized: [], tokens: cumTokens, errorMessage: lastError || 'unknown failure after retries' };
112
120
  }
121
+ /**
122
+ * Wait before retrying a TRANSPORT failure — a thrown call or an unsuccessful result.
123
+ *
124
+ * The retry loop had no delay at all: a rate-limited or failing provider was hit again
125
+ * immediately, three times per table, across every worker at once. That is the shape that
126
+ * turns one 429 into a burst of them.
127
+ *
128
+ * Parse and shape failures deliberately do NOT come here. Nothing upstream is recovering from
129
+ * a malformed JSON body, so waiting only makes the run longer.
130
+ *
131
+ * The knobs are `ai.retry`, shared with `PromptEngine` so one configuration governs both. Its
132
+ * defaults are tuned for a 5-retry documentation call, so when nothing is configured this uses
133
+ * its own smaller ones: a per-table normalizer with concurrency 8 and 2 retries should not sit
134
+ * out 30 seconds on the first failure.
135
+ */
136
+ async waitBeforeRetry(attempt, maxRetries) {
137
+ if (attempt >= maxRetries) {
138
+ return; // the loop is about to end; a delay here only postpones the error
139
+ }
140
+ const retry = this.aiConfig.retry;
141
+ const initialDelayMs = retry?.initialDelayMs ?? 1_000;
142
+ const maxDelayMs = retry?.maxDelayMs ?? 30_000;
143
+ const multiplier = retry?.backoffMultiplier ?? 2;
144
+ const base = Math.min(initialDelayMs * Math.pow(multiplier, attempt), maxDelayMs);
145
+ // ±20% jitter, as in PromptEngine: concurrent workers that back off in lockstep re-converge
146
+ // on the provider together and reproduce the burst the backoff exists to break up.
147
+ const delay = Math.round(base + Math.random() * 0.2 * base);
148
+ await new Promise((resolve) => setTimeout(resolve, delay));
149
+ }
113
150
  /** @deprecated Use {@link NormalizeTable}. */
114
151
  async normalizeTable(input, maxRetries = 2) {
115
152
  return this.NormalizeTable(input, maxRetries);
@@ -118,6 +155,13 @@ export class TableNormalizer {
118
155
  async NormalizeAll(tables, opts = {}) {
119
156
  const concurrency = Math.max(1, opts.Concurrency ?? 8);
120
157
  const maxRetries = Math.max(0, opts.MaxRetries ?? 2);
158
+ // One place decides what "has a budget" means, and it is the `> 0` test at the check below:
159
+ // absent, 0, negative and NaN all fail it, so every one of them means unlimited — which is
160
+ // exactly what this pass did before. Normalising here as well would be a second rule that
161
+ // could disagree with that one.
162
+ const tokenBudget = opts.TokenBudget ?? 0;
163
+ let budgetExhausted = false;
164
+ let tablesSkippedForBudget = 0;
121
165
  const allNormalized = [];
122
166
  let rejected = 0;
123
167
  let errors = 0;
@@ -131,6 +175,16 @@ export class TableNormalizer {
131
175
  const idx = cursor++;
132
176
  if (idx >= tables.length)
133
177
  return;
178
+ // Checked here, before the call, so the budget can only be overshot by requests
179
+ // already in flight. `total` is read across workers without a lock: a single-
180
+ // threaded event loop makes this read-then-act safe, and the only cost of a stale
181
+ // read would be one more table, which is inside the overshoot this already allows.
182
+ if (tokenBudget > 0 && total >= tokenBudget) {
183
+ budgetExhausted = true;
184
+ tablesSkippedForBudget += tables.length - idx;
185
+ cursor = tables.length; // stop the other workers too, rather than each finding out
186
+ return;
187
+ }
134
188
  const r = await this.NormalizeTable(tables[idx], maxRetries);
135
189
  total += r.tokens.total;
136
190
  input += r.tokens.input;
@@ -151,7 +205,19 @@ export class TableNormalizer {
151
205
  }
152
206
  });
153
207
  await Promise.all(runners);
154
- return { Normalized: allNormalized, rejected, errors, tokens: { total, input, output } };
208
+ if (budgetExhausted) {
209
+ console.warn(`[TableNormalizer] token budget of ${tokenBudget} reached after ${completed} of ` +
210
+ `${tables.length} tables (${total} tokens used). ${tablesSkippedForBudget} table(s) were ` +
211
+ `not normalized — organic-key results from this run are PARTIAL.`);
212
+ }
213
+ return {
214
+ Normalized: allNormalized,
215
+ rejected,
216
+ errors,
217
+ tokens: { total, input, output },
218
+ BudgetExhausted: budgetExhausted,
219
+ TablesSkippedForBudget: tablesSkippedForBudget,
220
+ };
155
221
  }
156
222
  /** @deprecated Use {@link NormalizeAll}. */
157
223
  async normalizeAll(tables, opts = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnNormalizer.js","sourceRoot":"","sources":["../../src/discovery/ColumnNormalizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ColumnNormalizer.js","sourceRoot":"","sources":["../../src/discovery/ColumnNormalizer.ts"],"names":[],"mappings":"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"}
@@ -15,15 +15,24 @@
15
15
  import { OrganicKeyCluster, OrganicKeyClusterMember } from '../types/organic-keys.js';
16
16
  import { DetectedOrganicKeysOutput } from './OrganicKeyTranslator.js';
17
17
  import { TransitiveBridgeFinding } from './TransitiveBridgeDetector.js';
18
+ import { JoinProbeResult, KeyVerifier } from './JoinProbe.js';
18
19
  /** Output of the compose step: the PR #2193 JSON, the FK-redundancy-annotated clusters, and emit counts. */
19
20
  export interface ComposerResult {
20
21
  output: DetectedOrganicKeysOutput;
22
+ /** Per-cluster record of what the value-overlap probe concluded, for reporting. */
23
+ Verification: ClusterVerification[];
21
24
  /** Clusters with isFKRedundant filled in — callers that persist the cluster list
22
25
  * (e.g. detector → state.json → dashboard) should use THIS, not the pre-compose
23
26
  * input, otherwise the flag is silently lost. */
24
27
  AnnotatedClusters: OrganicKeyCluster[];
25
28
  Emitted: number;
26
29
  FlaggedFKRedundant: number;
30
+ /** Clusters dropped because the probe refuted the shared value space. */
31
+ DroppedUnverified: number;
32
+ /** Individual members dropped for not sharing the anchor's value space. */
33
+ DroppedMembers: number;
34
+ /** Concepts not emitted because no member is its table's primary key (every pair would be a co-reference). */
35
+ SkippedUnanchored: number;
27
36
  Summary: {
28
37
  outputSchemas: number;
29
38
  outputTables: number;
@@ -31,6 +40,23 @@ export interface ComposerResult {
31
40
  outputSpokes: number;
32
41
  };
33
42
  }
43
+ /** What the probe concluded about one cluster. */
44
+ export interface ClusterVerification {
45
+ ClusterId: string;
46
+ Concept: string;
47
+ /** `schema.table.column` of the member every other member was probed against. */
48
+ Anchor: string;
49
+ MembersIn: number;
50
+ MembersKept: number;
51
+ /** One entry per probed member. */
52
+ Results: Array<{
53
+ member: string;
54
+ status: JoinProbeResult['Status'];
55
+ reason: string;
56
+ }>;
57
+ /** True when the cluster was not emitted at all. */
58
+ Dropped: boolean;
59
+ }
34
60
  /**
35
61
  * Compose detected clusters + transitive bridges into the PR #2193 emit JSON.
36
62
  *
@@ -38,9 +64,14 @@ export interface ComposerResult {
38
64
  * declared foreign key — kept but flagged, not dropped). Matching transitive bridges are
39
65
  * attached as spokes. Returns the JSON plus the annotated clusters and emit counts.
40
66
  */
41
- export declare function Compose(clusters: OrganicKeyCluster[], bridges: TransitiveBridgeFinding[]): ComposerResult;
67
+ export declare function Compose(clusters: OrganicKeyCluster[], bridges: TransitiveBridgeFinding[], verifier?: KeyVerifier | null, options?: ComposeOptions): Promise<ComposerResult>;
68
+ /** Emit-time options threaded through to the translator. */
69
+ export interface ComposeOptions {
70
+ /** See {@link import('./OrganicKeyTranslator.js').TranslateOptions}. Default false. */
71
+ AutoCreateRelatedViewOnForm?: boolean;
72
+ }
42
73
  /** @deprecated Use {@link Compose}. */
43
- export declare function compose(clusters: OrganicKeyCluster[], bridges: TransitiveBridgeFinding[]): ComposerResult;
74
+ export declare function compose(clusters: OrganicKeyCluster[], bridges: TransitiveBridgeFinding[], verifier?: KeyVerifier | null, options?: ComposeOptions): Promise<ComposerResult>;
44
75
  /**
45
76
  * A cluster is FK-redundant when ALL non-PK members are declared FKs pointing
46
77
  * at the same target column (typically the PK member of the cluster). PR #2193
@@ -1 +1 @@
1
- {"version":3,"file":"Composer.d.ts","sourceRoot":"","sources":["../../src/discovery/Composer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,EACH,yBAAyB,EAI5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,4GAA4G;AAC5G,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,yBAAyB,CAAC;IAClC;;sDAEkD;IAClD,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CACtG;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CACnB,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,OAAO,EAAE,uBAAuB,EAAE,GACnC,cAAc,CA0ChB;AAED,uCAAuC;AACvC,wBAAgB,OAAO,CACnB,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,OAAO,EAAE,uBAAuB,EAAE,GACnC,cAAc,CAEhB;AAED;;;;;;;;;;GAUG;AACH,iBAAS,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAiB1D;AAED,2CAA2C;AAC3C,eAAO,MAAM,SAAS;;CAAoB,CAAC;AAE3C,yCAAyC;AACzC,eAAO,MAAM,MAAM;;CAAY,CAAC;AAEhC,yCAAyC;AACzC,eAAO,MAAM,QAAQ;;CAAY,CAAC;AAClC,YAAY,EAAE,uBAAuB,EAAE,CAAC"}
1
+ {"version":3,"file":"Composer.d.ts","sourceRoot":"","sources":["../../src/discovery/Composer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAkD,MAAM,0BAA0B,CAAC;AACtI,OAAO,EACH,yBAAyB,EAI5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE9D,4GAA4G;AAC5G,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,yBAAyB,CAAC;IAClC,mFAAmF;IACnF,YAAY,EAAE,mBAAmB,EAAE,CAAC;IACpC;;sDAEkD;IAClD,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,yEAAyE;IACzE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,2EAA2E;IAC3E,cAAc,EAAE,MAAM,CAAC;IACvB,8GAA8G;IAC9G,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CACtG;AAED,kDAAkD;AAClD,MAAM,WAAW,mBAAmB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,OAAO,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtF,oDAAoD;IACpD,OAAO,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,OAAO,CACzB,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,OAAO,EAAE,uBAAuB,EAAE,EAClC,QAAQ,GAAE,WAAW,GAAG,IAAW,EACnC,OAAO,GAAE,cAAmB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAsEzB;AAED,4DAA4D;AAC5D,MAAM,WAAW,cAAc;IAC3B,uFAAuF;IACvF,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACzC;AA4GD,uCAAuC;AACvC,wBAAgB,OAAO,CACnB,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,OAAO,EAAE,uBAAuB,EAAE,EAClC,QAAQ,GAAE,WAAW,GAAG,IAAW,EACnC,OAAO,GAAE,cAAmB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAEzB;AAED;;;;;;;;;;GAUG;AACH,iBAAS,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAiB1D;AAED,2CAA2C;AAC3C,eAAO,MAAM,SAAS;;CAAoB,CAAC;AAE3C,yCAAyC;AACzC,eAAO,MAAM,MAAM;;CAAY,CAAC;AAEhC,yCAAyC;AACzC,eAAO,MAAM,QAAQ;;CAAY,CAAC;AAClC,YAAY,EAAE,uBAAuB,EAAE,CAAC"}
@@ -12,6 +12,7 @@
12
12
  * The dashboard surfaces a "hide FK-redundant" filter so users get the lookup-
13
13
  * table-PK noise out of view without losing the underlying candidates.
14
14
  */
15
+ import { memberColumns } from '../types/organic-keys.js';
15
16
  import { TranslateClusters, CountOutputEntries, } from './OrganicKeyTranslator.js';
16
17
  /**
17
18
  * Compose detected clusters + transitive bridges into the PR #2193 emit JSON.
@@ -20,14 +21,32 @@ import { TranslateClusters, CountOutputEntries, } from './OrganicKeyTranslator.j
20
21
  * declared foreign key — kept but flagged, not dropped). Matching transitive bridges are
21
22
  * attached as spokes. Returns the JSON plus the annotated clusters and emit counts.
22
23
  */
23
- export function Compose(clusters, bridges) {
24
+ export async function Compose(clusters, bridges, verifier = null, options = {}) {
24
25
  let flaggedCount = 0;
25
- const annotated = clusters.map((c) => {
26
+ const preVerify = clusters.map((c) => {
26
27
  const redundant = isFKRedundant(c);
27
28
  if (redundant)
28
29
  flaggedCount += 1;
29
30
  return { ...c, isFKRedundant: redundant };
30
31
  });
32
+ // ── Value-overlap gate ───────────────────────────────────────────────────────
33
+ //
34
+ // A cluster asserts that its member columns share a value space: that two rows
35
+ // holding the same value refer to the same real-world entity. Nothing checked
36
+ // that. Membership was decided by LLM concept naming and embedding distance, so
37
+ // columns that merely SOUND alike were emitted as a key — and the emitted key
38
+ // becomes a related-record view that value-joins them, producing "related" rows
39
+ // that are not related.
40
+ //
41
+ // Each member is probed against ONE anchor rather than against every other
42
+ // member: N-1 probes per cluster instead of N², and it tests the cluster's actual
43
+ // claim, since sharing a value space is transitive through the anchor. Both sides
44
+ // are normalized as the emitted key will normalize them, so an email key matched
45
+ // with LowerCaseTrim is not refuted for differing in case. The anchor
46
+ // is a PK member when the cluster has one (a PK is the canonical, unique value
47
+ // space), otherwise the first member.
48
+ const { clusters: annotated, verification, droppedMembers } = await verifyClusters(preVerify, verifier);
49
+ const droppedUnverified = preVerify.length - annotated.length;
31
50
  const hubKeys = new Set();
32
51
  for (const c of annotated) {
33
52
  for (const m of c.members)
@@ -47,13 +66,21 @@ export function Compose(clusters, bridges) {
47
66
  relatedEntityJoinFieldName: b.View.SpokeJoinField,
48
67
  hubConcept: b.HubConcept,
49
68
  }));
50
- const output = TranslateClusters(annotated, spokes);
69
+ let skippedUnanchored = 0;
70
+ const output = TranslateClusters(annotated, spokes, {
71
+ AutoCreateRelatedViewOnForm: options.AutoCreateRelatedViewOnForm,
72
+ OnUnanchored: () => { skippedUnanchored++; },
73
+ });
51
74
  const counts = CountOutputEntries(output);
52
75
  return {
53
76
  output,
54
77
  AnnotatedClusters: annotated,
78
+ Verification: verification,
55
79
  Emitted: annotated.length,
56
80
  FlaggedFKRedundant: flaggedCount,
81
+ DroppedUnverified: droppedUnverified,
82
+ DroppedMembers: droppedMembers,
83
+ SkippedUnanchored: skippedUnanchored,
57
84
  Summary: {
58
85
  outputSchemas: counts.schemas,
59
86
  outputTables: counts.tables,
@@ -62,9 +89,103 @@ export function Compose(clusters, bridges) {
62
89
  },
63
90
  };
64
91
  }
92
+ /** `schema.table.col[,col]` for a cluster member. */
93
+ function memberLabel(m) {
94
+ return `${m.schema}.${m.table}.${memberColumns(m).join(',')}`;
95
+ }
96
+ /**
97
+ * Pick the member every other member is probed against.
98
+ *
99
+ * A PK member is preferred: its value space is canonical and unique, so containment
100
+ * into it is a meaningful measure. Failing that, the first member — arbitrary but
101
+ * stable, and the probe is symmetric enough that the choice does not change which
102
+ * clusters survive, only which member is reported as the reference.
103
+ */
104
+ function pickAnchorMember(members) {
105
+ return members.find((m) => m.isPrimaryKey) ?? members[0];
106
+ }
107
+ /**
108
+ * The strategy a member's values are compared with at match time: its own, else the
109
+ * cluster's. The same fallback the translator writes into the emitted key.
110
+ */
111
+ function matchNormalization(m, cluster) {
112
+ return m.normalizationStrategy ?? cluster.normalization;
113
+ }
114
+ /**
115
+ * Drop cluster members whose values do not overlap the anchor's, and drop any cluster
116
+ * left with fewer than two members or spanning fewer than two tables.
117
+ *
118
+ * `Unprobed` members are KEPT. Refusing to emit whenever a probe cannot run would turn
119
+ * a permissions or budget problem into silent total key loss; the member stays and the
120
+ * per-cluster record says it was never checked. Only a measured refutation removes
121
+ * anything.
122
+ */
123
+ async function verifyClusters(clusters, verifier) {
124
+ const out = [];
125
+ const verification = [];
126
+ let droppedMembers = 0;
127
+ for (const cluster of clusters) {
128
+ if (!verifier || cluster.members.length < 2) {
129
+ // Nothing to probe against, or no probe available: emit unchanged and say so.
130
+ verification.push({
131
+ ClusterId: cluster.id,
132
+ Concept: cluster.concept,
133
+ Anchor: cluster.members.length > 0 ? memberLabel(pickAnchorMember(cluster.members)) : '',
134
+ MembersIn: cluster.members.length,
135
+ MembersKept: cluster.members.length,
136
+ Results: [],
137
+ Dropped: false,
138
+ });
139
+ out.push(cluster);
140
+ continue;
141
+ }
142
+ const anchorMember = pickAnchorMember(cluster.members);
143
+ const kept = [];
144
+ const results = [];
145
+ for (const member of cluster.members) {
146
+ if (member === anchorMember) {
147
+ kept.push(member);
148
+ continue;
149
+ }
150
+ const probe = await verifier.Verify({
151
+ Child: { Schema: member.schema, Table: member.table, Column: member.column },
152
+ Parent: { Schema: anchorMember.schema, Table: anchorMember.table, Column: anchorMember.column },
153
+ Normalization: {
154
+ Child: matchNormalization(member, cluster),
155
+ Parent: matchNormalization(anchorMember, cluster),
156
+ },
157
+ });
158
+ results.push({ member: memberLabel(member), status: probe.Status, reason: probe.Reason });
159
+ if (probe.Status === 'Refuted') {
160
+ droppedMembers += 1;
161
+ continue;
162
+ }
163
+ kept.push(member);
164
+ }
165
+ const distinctTables = new Set(kept.map((m) => `${m.schema}.${m.table}`));
166
+ const dropped = kept.length < 2 || distinctTables.size < 2;
167
+ verification.push({
168
+ ClusterId: cluster.id,
169
+ Concept: cluster.concept,
170
+ Anchor: memberLabel(anchorMember),
171
+ MembersIn: cluster.members.length,
172
+ MembersKept: dropped ? 0 : kept.length,
173
+ Results: results,
174
+ Dropped: dropped,
175
+ });
176
+ if (dropped) {
177
+ // Everything but the anchor was refuted, or what survives no longer spans
178
+ // two tables — there is no cross-table organic key left to emit.
179
+ droppedMembers += kept.length;
180
+ continue;
181
+ }
182
+ out.push({ ...cluster, members: kept });
183
+ }
184
+ return { clusters: out, verification, droppedMembers };
185
+ }
65
186
  /** @deprecated Use {@link Compose}. */
66
- export function compose(clusters, bridges) {
67
- return Compose(clusters, bridges);
187
+ export function compose(clusters, bridges, verifier = null, options = {}) {
188
+ return Compose(clusters, bridges, verifier, options);
68
189
  }
69
190
  /**
70
191
  * A cluster is FK-redundant when ALL non-PK members are declared FKs pointing
@@ -1 +1 @@
1
- {"version":3,"file":"Composer.js","sourceRoot":"","sources":["../../src/discovery/Composer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Composer.js","sourceRoot":"","sources":["../../src/discovery/Composer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAA+E,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACtI,OAAO,EAGH,iBAAiB,EACjB,kBAAkB,GACrB,MAAM,2BAA2B,CAAC;AAsCnC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CACzB,QAA6B,EAC7B,OAAkC,EAClC,WAA+B,IAAI,EACnC,UAA0B,EAAE;IAE5B,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,SAAS,GAAwB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACtD,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,SAAS;YAAE,YAAY,IAAI,CAAC,CAAC;QACjC,OAAO,EAAE,GAAG,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,gFAAgF;IAChF,EAAE;IACF,+EAA+E;IAC/E,8EAA8E;IAC9E,gFAAgF;IAChF,8EAA8E;IAC9E,gFAAgF;IAChF,wBAAwB;IACxB,EAAE;IACF,2EAA2E;IAC3E,kFAAkF;IAClF,kFAAkF;IAClF,iFAAiF;IACjF,sEAAsE;IACtE,+EAA+E;IAC/E,sCAAsC;IACtC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,GACvD,MAAM,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9C,MAAM,iBAAiB,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAE9D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QACxB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,MAAM,GAA2B,OAAO;SACzC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAC/E,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACT,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;QACzF,yBAAyB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QAC/C,yBAAyB,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB;QAClD,0BAA0B,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc;QACjD,UAAU,EAAE,CAAC,CAAC,UAAU;KAC3B,CAAC,CAAC,CAAC;IAER,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE;QAChD,2BAA2B,EAAE,OAAO,CAAC,2BAA2B;QAChE,YAAY,EAAE,GAAG,EAAE,GAAG,iBAAiB,EAAE,CAAC,CAAC,CAAC;KAC/C,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE1C,OAAO;QACH,MAAM;QACN,iBAAiB,EAAE,SAAS;QAC5B,YAAY,EAAE,YAAY;QAC1B,OAAO,EAAE,SAAS,CAAC,MAAM;QACzB,kBAAkB,EAAE,YAAY;QAChC,iBAAiB,EAAE,iBAAiB;QACpC,cAAc,EAAE,cAAc;QAC9B,iBAAiB,EAAE,iBAAiB;QACpC,OAAO,EAAE;YACL,aAAa,EAAE,MAAM,CAAC,OAAO;YAC7B,YAAY,EAAE,MAAM,CAAC,MAAM;YAC3B,UAAU,EAAE,MAAM,CAAC,IAAI;YACvB,YAAY,EAAE,MAAM,CAAC,MAAM;SAC9B;KACJ,CAAC;AACN,CAAC;AAQD,qDAAqD;AACrD,SAAS,WAAW,CAAC,CAA0B;IAC3C,OAAO,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAClE,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,gBAAgB,CAAC,OAAkC;IACxD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CAAC,CAA0B,EAAE,OAA0B;IAC9E,OAAO,CAAC,CAAC,qBAAqB,IAAI,OAAO,CAAC,aAAa,CAAC;AAC5D,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,cAAc,CACzB,QAA6B,EAC7B,QAA4B;IAE5B,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,MAAM,YAAY,GAA0B,EAAE,CAAC;IAC/C,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1C,8EAA8E;YAC9E,YAAY,CAAC,IAAI,CAAC;gBACd,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBACxF,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;gBACjC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;gBACnC,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,KAAK;aACjB,CAAC,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClB,SAAS;QACb,CAAC;QAED,MAAM,YAAY,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,IAAI,GAA8B,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAmC,EAAE,CAAC;QAEnD,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACnC,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClB,SAAS;YACb,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAChC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;gBAC5E,MAAM,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE;gBAC/F,aAAa,EAAE;oBACX,KAAK,EAAE,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC;oBAC1C,MAAM,EAAE,kBAAkB,CAAC,YAAY,EAAE,OAAO,CAAC;iBACpD;aACJ,CAAC,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1F,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC7B,cAAc,IAAI,CAAC,CAAC;gBACpB,SAAS;YACb,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,IAAI,GAAG,CAAC,CAAC;QAC3D,YAAY,CAAC,IAAI,CAAC;YACd,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC;YACjC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;YACjC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM;YACtC,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,OAAO;SACnB,CAAC,CAAC;QACH,IAAI,OAAO,EAAE,CAAC;YACV,0EAA0E;YAC1E,iEAAiE;YACjE,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC;YAC9B,SAAS;QACb,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC;AAC3D,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,OAAO,CACnB,QAA6B,EAC7B,OAAkC,EAClC,WAA+B,IAAI,EACnC,UAA0B,EAAE;IAE5B,OAAO,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,aAAa,CAAC,OAA0B;IAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAC7D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE/D,uEAAuE;IACvE,MAAM,SAAS,GAAG,IAAI,GAAG,CACrB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,CAC3E,CAAC;IAEF,wEAAwE;IACxE,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QACrD,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1F,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,2CAA2C;AAC3C,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,aAAa,EAAE,CAAC;AAE3C,yCAAyC;AACzC,MAAM,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC;AAEhC,yCAAyC;AACzC,MAAM,CAAC,MAAM,QAAQ,GAAG,SAAS,CAAC"}
@@ -7,6 +7,7 @@ import { ColumnStatsCache } from './ColumnStatsCache.js';
7
7
  import { SchemaDefinition, DatabaseDocumentation } from '../types/state.js';
8
8
  import { RelationshipDiscoveryPhase, DiscoveryTriggerAnalysis } from '../types/discovery.js';
9
9
  import { RelationshipDiscoveryConfig, AIConfig } from '../types/config.js';
10
+ import { SeedContextText } from '../utils/seed-context.js';
10
11
  export interface DiscoveryEngineOptions {
11
12
  Driver: BaseAutoDocDriver;
12
13
  Config: RelationshipDiscoveryConfig;
@@ -14,6 +15,8 @@ export interface DiscoveryEngineOptions {
14
15
  schemas: SchemaDefinition[];
15
16
  OnProgress?: (message: string, data?: any) => void;
16
17
  OnCheckpoint?: (phase: RelationshipDiscoveryPhase) => Promise<void>;
18
+ /** The operator's seed context, passed to the LLM validator. */
19
+ SeedContext?: SeedContextText;
17
20
  }
18
21
  export interface DiscoveryResult {
19
22
  Phase: RelationshipDiscoveryPhase;
@@ -1 +1 @@
1
- {"version":3,"file":"DiscoveryEngine.d.ts","sourceRoot":"","sources":["../../src/discovery/DiscoveryEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DiscoveryEngine.d.ts","sourceRoot":"","sources":["../../src/discovery/DiscoveryEngine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAKpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAmB,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EACL,0BAA0B,EAI1B,wBAAwB,EACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,2BAA2B,CAAC;IACpC,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IACnD,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,gEAAgE;IAChE,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,0BAA0B,CAAC;IAClC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,gBAAgB,CAAC;CAC9B;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,UAAU,CAAwC;IAC1D,OAAO,CAAC,YAAY,CAAuD;IAC3E,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,YAAY,CAAC,CAAwB;IAC7C,OAAO,CAAC,aAAa,CAAC,CAAmB;gBAE7B,OAAO,EAAE,sBAAsB;IA6B3C;;OAEG;IACI,aAAa,IAAI,gBAAgB;IAIxC,6CAA6C;IACtC,aAAa,IAAI,gBAAgB;IAIxC;;OAEG;IACI,cAAc,IAAI,wBAAwB;IA6DjD,8CAA8C;IACvC,cAAc,IAAI,wBAAwB;IAIjD;;OAEG;IACU,QAAQ,CACnB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,wBAAwB,EACzC,aAAa,CAAC,EAAE,0BAA0B,GACzC,OAAO,CAAC,eAAe,CAAC;IAqF3B,wCAAwC;IAC3B,QAAQ,CACnB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,wBAAwB,EACzC,aAAa,CAAC,EAAE,0BAA0B,GACzC,OAAO,CAAC,eAAe,CAAC;IAI3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAmDvB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;OAEG;YACW,gBAAgB;IAqL9B;;OAEG;YACW,iBAAiB;IAyE/B;;OAEG;YACW,iBAAiB;IAsF/B;;OAEG;YACW,oBAAoB;IA8KlC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuB7B;;OAEG;YACW,sBAAsB;IA4DpC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkCxB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA6B/B;;OAEG;IACH,OAAO,CAAC,eAAe;IAiCvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgDxB;;OAEG;IACI,uBAAuB,CAC5B,KAAK,EAAE,qBAAqB,EAC5B,KAAK,EAAE,0BAA0B,GAChC,IAAI;IAoDP,uDAAuD;IAChD,uBAAuB,CAC5B,KAAK,EAAE,qBAAqB,EAC5B,KAAK,EAAE,0BAA0B,GAChC,IAAI;IAIP;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAsD3B"}
@@ -23,7 +23,7 @@ export class DiscoveryEngine {
23
23
  this.sanityChecker = new LLMSanityChecker(this.aiConfig, this.statsCache);
24
24
  // Create LLM validator if enabled (runs per-table validation)
25
25
  if (this.config.llmValidation?.enabled) {
26
- this.llmValidator = new LLMDiscoveryValidator(this.driver, this.config, this.aiConfig, this.statsCache, this.schemas);
26
+ this.llmValidator = new LLMDiscoveryValidator(this.driver, this.config, this.aiConfig, this.statsCache, this.schemas, options.SeedContext);
27
27
  }
28
28
  }
29
29
  /**