@memberjunction/db-auto-doc 5.37.0 → 5.38.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 (66) hide show
  1. package/README.md +31 -0
  2. package/dist/core/AnalysisOrchestrator.d.ts.map +1 -1
  3. package/dist/core/AnalysisOrchestrator.js +32 -2
  4. package/dist/core/AnalysisOrchestrator.js.map +1 -1
  5. package/dist/discovery/BridgeViewSQLGenerator.d.ts +67 -0
  6. package/dist/discovery/BridgeViewSQLGenerator.d.ts.map +1 -0
  7. package/dist/discovery/BridgeViewSQLGenerator.js +99 -0
  8. package/dist/discovery/BridgeViewSQLGenerator.js.map +1 -0
  9. package/dist/discovery/ColumnClusterer.d.ts +63 -0
  10. package/dist/discovery/ColumnClusterer.d.ts.map +1 -0
  11. package/dist/discovery/ColumnClusterer.js +205 -0
  12. package/dist/discovery/ColumnClusterer.js.map +1 -0
  13. package/dist/discovery/ColumnNormalizer.d.ts +106 -0
  14. package/dist/discovery/ColumnNormalizer.d.ts.map +1 -0
  15. package/dist/discovery/ColumnNormalizer.js +376 -0
  16. package/dist/discovery/ColumnNormalizer.js.map +1 -0
  17. package/dist/discovery/Composer.d.ts +59 -0
  18. package/dist/discovery/Composer.d.ts.map +1 -0
  19. package/dist/discovery/Composer.js +95 -0
  20. package/dist/discovery/Composer.js.map +1 -0
  21. package/dist/discovery/EmbeddingProvider.d.ts +27 -0
  22. package/dist/discovery/EmbeddingProvider.d.ts.map +1 -0
  23. package/dist/discovery/EmbeddingProvider.js +87 -0
  24. package/dist/discovery/EmbeddingProvider.js.map +1 -0
  25. package/dist/discovery/FKGraphWalker.d.ts +108 -0
  26. package/dist/discovery/FKGraphWalker.d.ts.map +1 -0
  27. package/dist/discovery/FKGraphWalker.js +169 -0
  28. package/dist/discovery/FKGraphWalker.js.map +1 -0
  29. package/dist/discovery/OrganicKeyDetector.d.ts +51 -0
  30. package/dist/discovery/OrganicKeyDetector.d.ts.map +1 -0
  31. package/dist/discovery/OrganicKeyDetector.js +78 -0
  32. package/dist/discovery/OrganicKeyDetector.js.map +1 -0
  33. package/dist/discovery/OrganicKeyTranslator.d.ts +78 -0
  34. package/dist/discovery/OrganicKeyTranslator.d.ts.map +1 -0
  35. package/dist/discovery/OrganicKeyTranslator.js +166 -0
  36. package/dist/discovery/OrganicKeyTranslator.js.map +1 -0
  37. package/dist/discovery/SemanticPhase.d.ts +70 -0
  38. package/dist/discovery/SemanticPhase.d.ts.map +1 -0
  39. package/dist/discovery/SemanticPhase.js +423 -0
  40. package/dist/discovery/SemanticPhase.js.map +1 -0
  41. package/dist/discovery/StructuralPhase.d.ts +24 -0
  42. package/dist/discovery/StructuralPhase.d.ts.map +1 -0
  43. package/dist/discovery/StructuralPhase.js +23 -0
  44. package/dist/discovery/StructuralPhase.js.map +1 -0
  45. package/dist/discovery/TransitiveBridgeDetector.d.ts +65 -0
  46. package/dist/discovery/TransitiveBridgeDetector.d.ts.map +1 -0
  47. package/dist/discovery/TransitiveBridgeDetector.js +244 -0
  48. package/dist/discovery/TransitiveBridgeDetector.js.map +1 -0
  49. package/dist/generators/AdditionalSchemaInfoGenerator.d.ts +12 -0
  50. package/dist/generators/AdditionalSchemaInfoGenerator.d.ts.map +1 -1
  51. package/dist/generators/AdditionalSchemaInfoGenerator.js +31 -0
  52. package/dist/generators/AdditionalSchemaInfoGenerator.js.map +1 -1
  53. package/dist/types/config.d.ts +71 -0
  54. package/dist/types/config.d.ts.map +1 -1
  55. package/dist/types/config.js.map +1 -1
  56. package/dist/types/organic-keys.d.ts +141 -0
  57. package/dist/types/organic-keys.d.ts.map +1 -0
  58. package/dist/types/organic-keys.js +27 -0
  59. package/dist/types/organic-keys.js.map +1 -0
  60. package/dist/types/state.d.ts +7 -0
  61. package/dist/types/state.d.ts.map +1 -1
  62. package/dist/utils/json.d.ts +40 -0
  63. package/dist/utils/json.d.ts.map +1 -0
  64. package/dist/utils/json.js +141 -0
  65. package/dist/utils/json.js.map +1 -0
  66. package/package.json +5 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SemanticPhase.js","sourceRoot":"","sources":["../../src/discovery/SemanticPhase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Phase B — STRUCTURAL.
3
+ *
4
+ * Single responsibility: walk the FK graph from each cluster's hubs to find
5
+ * tables reachable via 2-3 FK hops, and emit bridge view SQL for each.
6
+ *
7
+ * PR #2193's transitive-match pattern: when a value-bearing column lives on
8
+ * table H and another table T doesn't carry the value directly but is
9
+ * reachable via FK navigation, a bridge view exposes the value on T's join
10
+ * path so the form can navigate.
11
+ *
12
+ * No scoring, no thresholds — just deterministic graph traversal.
13
+ */
14
+ import { DatabaseDocumentation } from '../types/state.js';
15
+ import { OrganicKeyCluster } from '../types/organic-keys.js';
16
+ import { TransitiveBridgeFinding } from './TransitiveBridgeDetector.js';
17
+ export interface StructuralPhaseResult {
18
+ bridges: TransitiveBridgeFinding[];
19
+ summary: {
20
+ transitiveBridgesFound: number;
21
+ };
22
+ }
23
+ export declare function runStructuralPhase(state: DatabaseDocumentation, clusters: OrganicKeyCluster[]): StructuralPhaseResult;
24
+ //# sourceMappingURL=StructuralPhase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StructuralPhase.d.ts","sourceRoot":"","sources":["../../src/discovery/StructuralPhase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAGH,uBAAuB,EAC1B,MAAM,+BAA+B,CAAC;AAEvC,MAAM,WAAW,qBAAqB;IAClC,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,OAAO,EAAE;QAAE,sBAAsB,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,wBAAgB,kBAAkB,CAC9B,KAAK,EAAE,qBAAqB,EAC5B,QAAQ,EAAE,iBAAiB,EAAE,GAC9B,qBAAqB,CAOvB"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Phase B — STRUCTURAL.
3
+ *
4
+ * Single responsibility: walk the FK graph from each cluster's hubs to find
5
+ * tables reachable via 2-3 FK hops, and emit bridge view SQL for each.
6
+ *
7
+ * PR #2193's transitive-match pattern: when a value-bearing column lives on
8
+ * table H and another table T doesn't carry the value directly but is
9
+ * reachable via FK navigation, a bridge view exposes the value on T's join
10
+ * path so the form can navigate.
11
+ *
12
+ * No scoring, no thresholds — just deterministic graph traversal.
13
+ */
14
+ import { detectTransitiveBridges, collectFKEdgesFromState, } from './TransitiveBridgeDetector.js';
15
+ export function runStructuralPhase(state, clusters) {
16
+ if (clusters.length === 0) {
17
+ return { bridges: [], summary: { transitiveBridgesFound: 0 } };
18
+ }
19
+ const edges = collectFKEdgesFromState(state);
20
+ const bridges = detectTransitiveBridges(clusters, edges, state);
21
+ return { bridges, summary: { transitiveBridgesFound: bridges.length } };
22
+ }
23
+ //# sourceMappingURL=StructuralPhase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StructuralPhase.js","sourceRoot":"","sources":["../../src/discovery/StructuralPhase.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EACH,uBAAuB,EACvB,uBAAuB,GAE1B,MAAM,+BAA+B,CAAC;AAOvC,MAAM,UAAU,kBAAkB,CAC9B,KAA4B,EAC5B,QAA6B;IAE7B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,sBAAsB,EAAE,CAAC,EAAE,EAAE,CAAC;IACnE,CAAC;IACD,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,uBAAuB,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAChE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,sBAAsB,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * TransitiveBridgeDetector — Pattern 3 orchestrator.
3
+ *
4
+ * Reads the existing Pattern 1/2 organic-key clusters (the "hubs") + the FK
5
+ * relationships of the database (hard + soft) and finds tables that can reach
6
+ * each hub via 2-3 FK hops without carrying the key directly. For each such
7
+ * spoke, it generates the CREATE VIEW SQL the bridge needs, packaged in PR
8
+ * #2193's `TransitiveView` config block.
9
+ *
10
+ * Outputs `TransitiveBridgeFinding[]` — one per (hub, spoke, path) triple. The
11
+ * caller (OrganicKeyDetector) merges these into the OrganicKeyTranslator's
12
+ * spokes list so that PR #2193's CodeGen can pick them up.
13
+ *
14
+ * Notes:
15
+ * - Direct-FK paths (length 1) are SKIPPED — those tables are already
16
+ * reachable via the existing relationship system; no bridge needed.
17
+ * - When multiple paths exist from the same spoke to the same hub, only the
18
+ * SHORTEST one is kept (paths of length 2 beat paths of length 3); ties
19
+ * broken by highest confidence.
20
+ * - Spoke PK is resolved from state.json. Tables without a single-column PK
21
+ * are skipped (composite-PK bridge join is future work).
22
+ */
23
+ import { FKEdge } from './FKGraphWalker.js';
24
+ import { GeneratedBridgeView } from './BridgeViewSQLGenerator.js';
25
+ import { OrganicKeyCluster } from '../types/organic-keys.js';
26
+ import { DatabaseDocumentation } from '../types/state.js';
27
+ /** One transitive bridge finding ready for spoke emission. */
28
+ export interface TransitiveBridgeFinding {
29
+ hubSchema: string;
30
+ hubTable: string;
31
+ hubKeyFields: string[];
32
+ spokeSchema: string;
33
+ spokeTable: string;
34
+ spokeJoinField: string;
35
+ view: GeneratedBridgeView;
36
+ pathLength: number;
37
+ pathConfidence: number;
38
+ /** Concept name from the underlying organic key (e.g. "email_address"). Used for the spoke's DisplayName. */
39
+ hubConcept: string;
40
+ }
41
+ export interface TransitiveBridgeDetectorOptions {
42
+ maxHops?: number;
43
+ minSoftFKConfidence?: number;
44
+ /** Drop bridges whose path confidence falls below this. Default 0.7. */
45
+ minPathConfidence?: number;
46
+ /** Limit bridges per (hub, spoke) pair — keeps only the best path. Default true. */
47
+ keepShortestOnly?: boolean;
48
+ }
49
+ /**
50
+ * Detect transitive bridges for every hub × spoke pair whose graph distance
51
+ * falls in [2, maxHops].
52
+ *
53
+ * @param organicKeyClusters - Pattern 1 + 2 output. Hubs are derived as the
54
+ * unique (schema, table) of every cluster member.
55
+ * @param edges - FK edges (hard + soft) to walk.
56
+ * @param state - DatabaseDocumentation, used to look up spoke PKs.
57
+ */
58
+ export declare function detectTransitiveBridges(organicKeyClusters: OrganicKeyCluster[], edges: FKEdge[], state: DatabaseDocumentation, opts?: TransitiveBridgeDetectorOptions): TransitiveBridgeFinding[];
59
+ /**
60
+ * Pull FK edges out of state.json's keyDetection.discovered.foreignKeys block
61
+ * AND from any schema-declared hard FKs in the dependencies array. Returns the
62
+ * combined set ready for the walker.
63
+ */
64
+ export declare function collectFKEdgesFromState(state: DatabaseDocumentation): FKEdge[];
65
+ //# sourceMappingURL=TransitiveBridgeDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransitiveBridgeDetector.d.ts","sourceRoot":"","sources":["../../src/discovery/TransitiveBridgeDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAmB,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAsB,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAiB,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAuB,MAAM,mBAAmB,CAAC;AAE/E,8DAA8D;AAC9D,MAAM,WAAW,uBAAuB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,6GAA6G;IAC7G,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,+BAA+B;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AASD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACnC,kBAAkB,EAAE,iBAAiB,EAAE,EACvC,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,qBAAqB,EAC5B,IAAI,GAAE,+BAAoC,GAC3C,uBAAuB,EAAE,CAmG3B;AAeD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,EAAE,CAqF9E"}
@@ -0,0 +1,244 @@
1
+ /**
2
+ * TransitiveBridgeDetector — Pattern 3 orchestrator.
3
+ *
4
+ * Reads the existing Pattern 1/2 organic-key clusters (the "hubs") + the FK
5
+ * relationships of the database (hard + soft) and finds tables that can reach
6
+ * each hub via 2-3 FK hops without carrying the key directly. For each such
7
+ * spoke, it generates the CREATE VIEW SQL the bridge needs, packaged in PR
8
+ * #2193's `TransitiveView` config block.
9
+ *
10
+ * Outputs `TransitiveBridgeFinding[]` — one per (hub, spoke, path) triple. The
11
+ * caller (OrganicKeyDetector) merges these into the OrganicKeyTranslator's
12
+ * spokes list so that PR #2193's CodeGen can pick them up.
13
+ *
14
+ * Notes:
15
+ * - Direct-FK paths (length 1) are SKIPPED — those tables are already
16
+ * reachable via the existing relationship system; no bridge needed.
17
+ * - When multiple paths exist from the same spoke to the same hub, only the
18
+ * SHORTEST one is kept (paths of length 2 beat paths of length 3); ties
19
+ * broken by highest confidence.
20
+ * - Spoke PK is resolved from state.json. Tables without a single-column PK
21
+ * are skipped (composite-PK bridge join is future work).
22
+ */
23
+ import { findBridgePaths } from './FKGraphWalker.js';
24
+ import { generateBridgeView } from './BridgeViewSQLGenerator.js';
25
+ import { memberColumns } from '../types/organic-keys.js';
26
+ const DEFAULTS = {
27
+ maxHops: 3,
28
+ minSoftFKConfidence: 0.6,
29
+ minPathConfidence: 0.7,
30
+ keepShortestOnly: true,
31
+ };
32
+ /**
33
+ * Detect transitive bridges for every hub × spoke pair whose graph distance
34
+ * falls in [2, maxHops].
35
+ *
36
+ * @param organicKeyClusters - Pattern 1 + 2 output. Hubs are derived as the
37
+ * unique (schema, table) of every cluster member.
38
+ * @param edges - FK edges (hard + soft) to walk.
39
+ * @param state - DatabaseDocumentation, used to look up spoke PKs.
40
+ */
41
+ export function detectTransitiveBridges(organicKeyClusters, edges, state, opts = {}) {
42
+ const o = { ...DEFAULTS, ...opts };
43
+ const hubsByKey = new Map();
44
+ for (const cluster of organicKeyClusters) {
45
+ for (const member of cluster.members) {
46
+ const cols = memberColumns(member);
47
+ const k = `${member.schema}.${member.table}.${cols.join(',')}`;
48
+ if (hubsByKey.has(k))
49
+ continue;
50
+ hubsByKey.set(k, {
51
+ schema: member.schema,
52
+ table: member.table,
53
+ keyFields: cols,
54
+ concept: cluster.concept,
55
+ });
56
+ }
57
+ }
58
+ // ─── 2. Build the spoke candidate set (every table in the DB) ──────────
59
+ const allTables = [];
60
+ const spokePKByKey = new Map();
61
+ for (const s of state.schemas) {
62
+ for (const t of s.tables) {
63
+ allTables.push({ schema: s.name, table: t.name });
64
+ const pk = pickSinglePK(t.columns);
65
+ if (pk)
66
+ spokePKByKey.set(`${s.name}.${t.name}`, pk);
67
+ }
68
+ }
69
+ // ─── 3. Run BFS per hub × spoke pair ────────────────────────────────────
70
+ const hubsForWalker = [];
71
+ for (const h of hubsByKey.values()) {
72
+ hubsForWalker.push({ schema: h.schema, table: h.table, keyField: h.keyFields[0] });
73
+ }
74
+ const allPaths = findBridgePaths(edges, hubsForWalker, allTables, {
75
+ maxHops: o.maxHops,
76
+ minSoftFKConfidence: o.minSoftFKConfidence,
77
+ pruneCycles: true,
78
+ });
79
+ // ─── 4. For each path, materialize the bridge view ─────────────────────
80
+ const findings = [];
81
+ for (const path of allPaths) {
82
+ if (path.pathConfidence < o.minPathConfidence)
83
+ continue;
84
+ const spokeKey = `${path.spokeSchema}.${path.spokeTable}`;
85
+ const spokePK = spokePKByKey.get(spokeKey);
86
+ if (!spokePK)
87
+ continue; // skip composite-PK spokes for now
88
+ // Resolve the originating hub entry to recover the full keyFields tuple + concept.
89
+ const hubMatch = Array.from(hubsByKey.values()).find((h) => h.schema === path.hubSchema && h.table === path.hubTable && h.keyFields[0] === path.hubKeyField);
90
+ if (!hubMatch)
91
+ continue;
92
+ const view = generateBridgeView(path, spokePK);
93
+ findings.push({
94
+ hubSchema: hubMatch.schema,
95
+ hubTable: hubMatch.table,
96
+ hubKeyFields: hubMatch.keyFields,
97
+ spokeSchema: path.spokeSchema,
98
+ spokeTable: path.spokeTable,
99
+ spokeJoinField: spokePK,
100
+ view,
101
+ pathLength: path.pathLength,
102
+ pathConfidence: path.pathConfidence,
103
+ hubConcept: hubMatch.concept,
104
+ });
105
+ }
106
+ // ─── 5. Dedupe per (hub, spoke) — keep shortest, then highest-confidence ─
107
+ if (o.keepShortestOnly) {
108
+ const byPair = new Map();
109
+ for (const f of findings) {
110
+ const k = `${f.hubSchema}.${f.hubTable}::${f.spokeSchema}.${f.spokeTable}::${f.hubKeyFields[0]}`;
111
+ const existing = byPair.get(k);
112
+ if (!existing) {
113
+ byPair.set(k, f);
114
+ continue;
115
+ }
116
+ if (f.pathLength < existing.pathLength)
117
+ byPair.set(k, f);
118
+ else if (f.pathLength === existing.pathLength && f.pathConfidence > existing.pathConfidence) {
119
+ byPair.set(k, f);
120
+ }
121
+ }
122
+ return Array.from(byPair.values());
123
+ }
124
+ return findings;
125
+ }
126
+ // ─── Helpers ────────────────────────────────────────────────────────────────
127
+ /**
128
+ * Pick the single-column PK from a table's column list. Returns null when no PK
129
+ * is declared OR when the table has a composite PK (we skip those for now —
130
+ * compound-PK bridge joins are Pattern 4 territory).
131
+ */
132
+ function pickSinglePK(columns) {
133
+ const pks = columns.filter((c) => c.isPrimaryKey);
134
+ if (pks.length !== 1)
135
+ return null;
136
+ return pks[0].name;
137
+ }
138
+ /**
139
+ * Pull FK edges out of state.json's keyDetection.discovered.foreignKeys block
140
+ * AND from any schema-declared hard FKs in the dependencies array. Returns the
141
+ * combined set ready for the walker.
142
+ */
143
+ export function collectFKEdgesFromState(state) {
144
+ const out = [];
145
+ // Hard FKs from the FK-SOURCE side via `dependsOn`. Each entry on table
146
+ // T's `dependsOn` array describes an FK that T holds pointing at another
147
+ // table.
148
+ //
149
+ // We deliberately use `dependsOn` rather than the reverse `dependents`
150
+ // array because in observed state.json files `dependents` sometimes contains
151
+ // inverted/duplicate entries (e.g. on Campaign.dependents you may see both
152
+ // `column: ID, referencedColumn: CampaignID` AND
153
+ // `column: CampaignID, referencedColumn: ID` — only one is real). The
154
+ // `dependsOn` side is canonical: it's authored from the table that actually
155
+ // owns the FK column.
156
+ for (const schema of state.schemas) {
157
+ for (const table of schema.tables) {
158
+ const deps = table.dependsOn ?? [];
159
+ for (const d of deps) {
160
+ out.push({
161
+ sourceSchema: schema.name,
162
+ sourceTable: table.name,
163
+ sourceColumn: d.column,
164
+ targetSchema: d.schema,
165
+ targetTable: d.table,
166
+ targetColumn: d.referencedColumn,
167
+ kind: 'hard',
168
+ confidence: 1,
169
+ });
170
+ }
171
+ }
172
+ }
173
+ // Dedup hard FKs (a single FK can sometimes appear twice in state.json).
174
+ const dedupHard = dedupEdges(out.splice(0));
175
+ out.push(...dedupHard);
176
+ // Soft FKs from the keyDetection phase.
177
+ const softFKs = state
178
+ .phases?.keyDetection?.discovered?.foreignKeys ?? [];
179
+ for (const f of softFKs) {
180
+ if (typeof f.schemaName === 'string' &&
181
+ typeof f.sourceTable === 'string' &&
182
+ typeof f.sourceColumn === 'string' &&
183
+ typeof f.targetSchema === 'string' &&
184
+ typeof f.targetTable === 'string' &&
185
+ typeof f.targetColumn === 'string' &&
186
+ typeof f.confidence === 'number') {
187
+ out.push({
188
+ sourceSchema: f.schemaName,
189
+ sourceTable: f.sourceTable,
190
+ sourceColumn: f.sourceColumn,
191
+ targetSchema: f.targetSchema,
192
+ targetTable: f.targetTable,
193
+ targetColumn: f.targetColumn,
194
+ kind: 'soft',
195
+ confidence: f.confidence / 100, // state stores 0-100
196
+ });
197
+ }
198
+ }
199
+ // Final dedup — if a soft FK redundantly describes a hard FK, keep one.
200
+ // We keep the HARD one (confidence=1) when both exist.
201
+ const deduped = dedupEdges(out);
202
+ // Guard: drop any edge whose source OR target column doesn't actually exist
203
+ // in the schema. Soft-FK detection can name a target column by heuristic that
204
+ // isn't real (e.g. `Subscriber.Email` when the real column is `EmailAddress`);
205
+ // building a bridge view on such an edge yields uncreatable SQL ("Invalid
206
+ // column name"). Keeping only edges whose endpoints exist guarantees every
207
+ // generated bridge view compiles.
208
+ const validColumns = new Set();
209
+ for (const schema of state.schemas) {
210
+ for (const table of schema.tables) {
211
+ for (const col of table.columns) {
212
+ validColumns.add(`${schema.name}.${table.name}.${col.name}`.toLowerCase());
213
+ }
214
+ }
215
+ }
216
+ const exists = (s, t, c) => validColumns.has(`${s}.${t}.${c}`.toLowerCase());
217
+ return deduped.filter((e) => exists(e.sourceSchema, e.sourceTable, e.sourceColumn) && exists(e.targetSchema, e.targetTable, e.targetColumn));
218
+ }
219
+ /**
220
+ * Dedupe FK edges by (source, target) column pair. When duplicates exist,
221
+ * prefer the entry with kind='hard' (highest confidence); for two soft
222
+ * entries with the same pair, keep the higher-confidence one.
223
+ */
224
+ function dedupEdges(edges) {
225
+ const byKey = new Map();
226
+ for (const e of edges) {
227
+ const k = `${e.sourceSchema}.${e.sourceTable}.${e.sourceColumn}->${e.targetSchema}.${e.targetTable}.${e.targetColumn}`;
228
+ const existing = byKey.get(k);
229
+ if (!existing) {
230
+ byKey.set(k, e);
231
+ continue;
232
+ }
233
+ if (existing.kind === 'hard')
234
+ continue;
235
+ if (e.kind === 'hard') {
236
+ byKey.set(k, e);
237
+ continue;
238
+ }
239
+ if (e.confidence > existing.confidence)
240
+ byKey.set(k, e);
241
+ }
242
+ return Array.from(byKey.values());
243
+ }
244
+ //# sourceMappingURL=TransitiveBridgeDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransitiveBridgeDetector.js","sourceRoot":"","sources":["../../src/discovery/TransitiveBridgeDetector.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@
17
17
  * }
18
18
  */
19
19
  import { DatabaseDocumentation } from '../types/state.js';
20
+ import { DetectedOrganicKeysOutput } from '../discovery/OrganicKeyTranslator.js';
20
21
  export interface AdditionalSchemaInfoOptions {
21
22
  /** Only include AI-discovered keys, not keys already present in the database schema */
22
23
  discoveredOnly?: boolean;
@@ -30,6 +31,12 @@ export interface AdditionalSchemaInfoOptions {
30
31
  valueListConfidenceThreshold?: number;
31
32
  /** If true, skip emitting Fields[] entirely. Default false. */
32
33
  excludeValueLists?: boolean;
34
+ /**
35
+ * Organic-key detection output (per-schema/per-table OrganicKeys). When present,
36
+ * merged into each table's OrganicKeys[] so CodeGen's processOrganicKeyConfig
37
+ * writes EntityOrganicKey / EntityOrganicKeyRelatedEntity metadata.
38
+ */
39
+ organicKeys?: DetectedOrganicKeysOutput;
33
40
  }
34
41
  /** Per-column value-list entry emitted in Fields[] when enum detection is active */
35
42
  export interface FieldValueListEntry {
@@ -57,6 +64,11 @@ export declare class AdditionalSchemaInfoGenerator {
57
64
  * CodeGen already handles the hard constraints from the database.
58
65
  */
59
66
  generate(state: DatabaseDocumentation, options?: AdditionalSchemaInfoOptions): string;
67
+ /**
68
+ * Look up the organic keys detected for a specific schema.table from the
69
+ * detector's per-schema/per-table output. Returns [] when none.
70
+ */
71
+ private getOrganicKeysForTable;
60
72
  /**
61
73
  * Generates schema-level entity name prefix recommendations.
62
74
  * For multi-schema databases, each schema gets a prefix to prevent
@@ -1 +1 @@
1
- {"version":3,"file":"AdditionalSchemaInfoGenerator.d.ts","sourceRoot":"","sources":["../../src/generators/AdditionalSchemaInfoGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,qBAAqB,EAAuD,MAAM,mBAAmB,CAAC;AAG/G,MAAM,WAAW,2BAA2B;IAC1C,uFAAuF;IACvF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oEAAoE;IACpE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gFAAgF;IAChF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,4EAA4E;IAC5E,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAeD,oFAAoF;AACpF,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,iBAAiB,CAAC;IAC1C,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAuBD,qBAAa,6BAA6B;IACxC;;;;;;;;;;;;;OAaG;IACI,QAAQ,CACb,KAAK,EAAE,qBAAqB,EAC5B,OAAO,GAAE,2BAAgC,GACxC,MAAM;IA0CT;;;;;;;;;;OAUG;IACH,OAAO,CAAC,sBAAsB;IAmB9B;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IA8B5B;;;OAGG;IACH,OAAO,CAAC,cAAc;IA8CtB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IA4B9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAa9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwC9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAyB5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA2B5B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAoBzB"}
1
+ {"version":3,"file":"AdditionalSchemaInfoGenerator.d.ts","sourceRoot":"","sources":["../../src/generators/AdditionalSchemaInfoGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,qBAAqB,EAAuD,MAAM,mBAAmB,CAAC;AAE/G,OAAO,EAAE,yBAAyB,EAAoB,MAAM,sCAAsC,CAAC;AAEnG,MAAM,WAAW,2BAA2B;IAC1C,uFAAuF;IACvF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oEAAoE;IACpE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gFAAgF;IAChF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,4EAA4E;IAC5E,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;OAIG;IACH,WAAW,CAAC,EAAE,yBAAyB,CAAC;CACzC;AAeD,oFAAoF;AACpF,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,iBAAiB,CAAC;IAC1C,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAyBD,qBAAa,6BAA6B;IACxC;;;;;;;;;;;;;OAaG;IACI,QAAQ,CACb,KAAK,EAAE,qBAAqB,EAC5B,OAAO,GAAE,2BAAgC,GACxC,MAAM;IA4DT;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,sBAAsB;IAmB9B;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IA8B5B;;;OAGG;IACH,OAAO,CAAC,cAAc;IA8CtB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IA4B9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAa9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwC9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAyB5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA2B5B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAoBzB"}
@@ -47,15 +47,46 @@ export class AdditionalSchemaInfoGenerator {
47
47
  }
48
48
  const tableInfo = this.buildTableInfo(schema, table, discoveredPKs, discoveredFKs, options.discoveredOnly ?? false, options.valueListConfidenceThreshold ?? 85, options.excludeValueLists ?? false, options.confirmedOnly ?? false);
49
49
  if (tableInfo) {
50
+ // Attach organic keys for this table when detection output is present.
51
+ const orgKeys = this.getOrganicKeysForTable(options.organicKeys, schema.name, table.name);
52
+ if (orgKeys.length > 0) {
53
+ tableInfo.OrganicKeys = orgKeys;
54
+ }
50
55
  tables.push(tableInfo);
51
56
  }
52
57
  }
58
+ // A table may have organic keys even if buildTableInfo returned null (no
59
+ // soft PK/FK and no value lists). Emit a minimal entry so they aren't lost.
60
+ if (options.organicKeys) {
61
+ const emittedTables = new Set(tables.map((t) => t.TableName));
62
+ for (const table of schema.tables) {
63
+ if (emittedTables.has(table.name))
64
+ continue;
65
+ const orgKeys = this.getOrganicKeysForTable(options.organicKeys, schema.name, table.name);
66
+ if (orgKeys.length > 0) {
67
+ tables.push({ TableName: table.name, OrganicKeys: orgKeys });
68
+ }
69
+ }
70
+ }
53
71
  if (tables.length > 0) {
54
72
  result[schema.name] = tables;
55
73
  }
56
74
  }
57
75
  return JSON.stringify(result, null, 4);
58
76
  }
77
+ /**
78
+ * Look up the organic keys detected for a specific schema.table from the
79
+ * detector's per-schema/per-table output. Returns [] when none.
80
+ */
81
+ getOrganicKeysForTable(organicKeys, schemaName, tableName) {
82
+ if (!organicKeys)
83
+ return [];
84
+ const tablesForSchema = organicKeys[schemaName];
85
+ if (!tablesForSchema)
86
+ return [];
87
+ const entry = tablesForSchema.find((t) => t.TableName === tableName);
88
+ return entry?.OrganicKeys ?? [];
89
+ }
59
90
  /**
60
91
  * Generates schema-level entity name prefix recommendations.
61
92
  * For multi-schema databases, each schema gets a prefix to prevent
@@ -1 +1 @@
1
- {"version":3,"file":"AdditionalSchemaInfoGenerator.js","sourceRoot":"","sources":["../../src/generators/AdditionalSchemaInfoGenerator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AdditionalSchemaInfoGenerator.js","sourceRoot":"","sources":["../../src/generators/AdditionalSchemaInfoGenerator.ts"],"names":[],"mappings":"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"}
@@ -142,6 +142,77 @@ export interface AnalysisConfig {
142
142
  guardrails?: GuardrailsConfig;
143
143
  relationshipDiscovery?: RelationshipDiscoveryConfig;
144
144
  sampleQueryGeneration?: SampleQueryGenerationConfig;
145
+ organicKeyDetection?: OrganicKeyDetectionConfig;
146
+ }
147
+ /**
148
+ * Configuration for organic-key cluster detection.
149
+ *
150
+ * Organic keys (per MJ PR #2193) are cross-entity navigation rules based on
151
+ * shared business values rather than declared FKs (e.g. matching contact records
152
+ * across CRM systems by email). This pass clusters columns whose descriptions +
153
+ * sample values indicate they share a value space, and emits proposed clusters
154
+ * for human review.
155
+ *
156
+ * Off by default — opt-in via `enabled: true`. Requires an AI provider (the
157
+ * existing `ai` config) for both embeddings and per-cluster refinement.
158
+ *
159
+ * NOTE: This pass deliberately does NOT iterate. Clustering happens once, the
160
+ * LLM refiner runs once per cluster, and the pass terminates. No convergence
161
+ * loop, no multi-pass expansion. If a future version reintroduces iteration,
162
+ * `maxIterations` would join this config section.
163
+ */
164
+ export interface OrganicKeyDetectionConfig {
165
+ /** Enable the organic-key detection pass (default: false). */
166
+ enabled: boolean;
167
+ /**
168
+ * How aggressive should clustering be? The detector auto-calibrates the
169
+ * merge distance from the actual embedding geometry — this knob just picks
170
+ * how loose to be when deciding what counts as "close enough" to merge:
171
+ *
172
+ * - 'strict': few, tight clusters. Only obvious matches. Lower recall, higher precision.
173
+ * - 'balanced': default. Catches most real organic keys without too much noise.
174
+ * - 'permissive': more clusters, including borderline cases. Higher recall, more LLM review work.
175
+ *
176
+ * Internally maps to a percentile of the pairwise distance distribution
177
+ * (strict ~ p1, balanced ~ p5, permissive ~ p15).
178
+ */
179
+ clusteringSensitivity?: 'strict' | 'balanced' | 'permissive';
180
+ /**
181
+ * Advanced / debugging override — explicit cosine-distance threshold. Set ONLY
182
+ * to bypass auto-calibration (e.g. ablation studies, reproducing a specific run).
183
+ * Normal users should set `clusteringSensitivity` instead.
184
+ */
185
+ mergeThreshold?: number;
186
+ /** Minimum members for a cluster to be reported. Default: 2. */
187
+ minClusterSize?: number;
188
+ /** Minimum distinct tables a cluster must span. Default: 2. */
189
+ minDistinctTables?: number;
190
+ /** Number of sample values per column to include in the embedding input and refiner prompt. Default: 5. */
191
+ sampleValueCount?: number;
192
+ /** Concurrency for per-cluster LLM refinement calls. Default: 4. */
193
+ refinementConcurrency?: number;
194
+ /** Max retries per LLM call on transient failure. Default: 2. */
195
+ maxRefinementRetries?: number;
196
+ /** When a single cluster's refinement errors, fail the whole pass or just skip that cluster. Default: 'skip'. */
197
+ onRefinementError?: 'fail' | 'skip';
198
+ /** Soft token budget for the entire detection pass (warns when exceeded). Default: 0 = unlimited. */
199
+ tokenBudget?: number;
200
+ /**
201
+ * Embedding provider override. Maps to a MemberJunction `BaseEmbeddings` driver
202
+ * (resolved via the ClassFactory). Defaults to `openai` when absent. The API key
203
+ * is taken from the top-level `ai` config.
204
+ */
205
+ embedding?: {
206
+ provider?: 'openai' | 'mistral' | 'azure' | 'bedrock' | 'ollama' | 'local';
207
+ model?: string;
208
+ dimensions?: number;
209
+ batchSize?: number;
210
+ endpoint?: string;
211
+ /** Disk path for the embedding cache. Default: `<outputDir>/embedding-cache.json`. */
212
+ cachePath?: string;
213
+ };
214
+ /** Path (relative to outputDir) for the detected-organic-keys JSON output. Default: `detected-organic-keys.json`. */
215
+ outputFile?: string;
145
216
  }
146
217
  export interface SampleQueryGenerationConfig {
147
218
  enabled: boolean;