@finos/legend-extension-dsl-data-space 10.4.231 → 10.4.232

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.
@@ -15,6 +15,7 @@
15
15
  */
16
16
  export declare enum DSL_DATASPACE_EVENT {
17
17
  BUILD_ANALYTICS_RESULT = "dataProduct.builder.analytics-result",
18
- ERROR_GENERATE_SAMPLE_VALUES = "dataProduct.error.build-sample-values"
18
+ ERROR_GENERATE_SAMPLE_VALUES = "dataProduct.error.build-sample-values",
19
+ ERROR_EXTRACT_LEGEND_AI_SERVICES = "dataProduct.error.extract-legend-ai-services"
19
20
  }
20
21
  //# sourceMappingURL=DSL_DataSpace_Event.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DSL_DataSpace_Event.d.ts","sourceRoot":"","sources":["../../src/__lib__/DSL_DataSpace_Event.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,oBAAY,mBAAmB;IAC7B,sBAAsB,yCAAyC;IAC/D,4BAA4B,0CAA0C;CACvE"}
1
+ {"version":3,"file":"DSL_DataSpace_Event.d.ts","sourceRoot":"","sources":["../../src/__lib__/DSL_DataSpace_Event.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,oBAAY,mBAAmB;IAC7B,sBAAsB,yCAAyC;IAC/D,4BAA4B,0CAA0C;IACtE,gCAAgC,iDAAiD;CAClF"}
@@ -17,5 +17,6 @@ export var DSL_DATASPACE_EVENT;
17
17
  (function (DSL_DATASPACE_EVENT) {
18
18
  DSL_DATASPACE_EVENT["BUILD_ANALYTICS_RESULT"] = "dataProduct.builder.analytics-result";
19
19
  DSL_DATASPACE_EVENT["ERROR_GENERATE_SAMPLE_VALUES"] = "dataProduct.error.build-sample-values";
20
+ DSL_DATASPACE_EVENT["ERROR_EXTRACT_LEGEND_AI_SERVICES"] = "dataProduct.error.extract-legend-ai-services";
20
21
  })(DSL_DATASPACE_EVENT || (DSL_DATASPACE_EVENT = {}));
21
22
  //# sourceMappingURL=DSL_DataSpace_Event.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DSL_DataSpace_Event.js","sourceRoot":"","sources":["../../src/__lib__/DSL_DataSpace_Event.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,CAAN,IAAY,mBAGX;AAHD,WAAY,mBAAmB;IAC7B,sFAA+D,CAAA;IAC/D,6FAAsE,CAAA;AACxE,CAAC,EAHW,mBAAmB,KAAnB,mBAAmB,QAG9B"}
1
+ {"version":3,"file":"DSL_DataSpace_Event.js","sourceRoot":"","sources":["../../src/__lib__/DSL_DataSpace_Event.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,CAAN,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC7B,sFAA+D,CAAA;IAC/D,6FAAsE,CAAA;IACtE,wGAAiF,CAAA;AACnF,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,QAI9B"}
@@ -13,8 +13,24 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { type TDSServiceSchema, type LegendAIConfig } from '@finos/legend-lego/legend-ai';
16
+ import { type MappingModelCoverageAnalysisResult } from '@finos/legend-graph';
17
+ import { type TDSServiceSchema, type LegendAIConfig, type LegendAIModelContext, type LegendAIExecutableInfo } from '@finos/legend-lego/legend-ai';
18
+ import { type DiagramAnalysisResult } from '@finos/legend-extension-dsl-diagram';
17
19
  import type { DataSpaceViewerState } from '../stores/DataSpaceViewerState.js';
20
+ import { type DataSpaceExecutableAnalysisResult } from '../graph-manager/action/analytics/DataSpaceAnalysis.js';
21
+ /**
22
+ * Extracts a {@link LegendAIModelContext} from diagram metamodel objects.
23
+ * Diagrams always contain the actual Class metamodel references so this
24
+ * works even when elementDocs documentation is empty or incomplete.
25
+ */
26
+ export declare function extractModelContextFromDiagrams(diagrams: DiagramAnalysisResult[]): LegendAIModelContext;
27
+ /**
28
+ * Enriches a {@link LegendAIModelContext} with mapping coverage data.
29
+ * Marks entities that are root-mapped (directly queryable by the orchestrator)
30
+ * so entity resolution can prefer them.
31
+ */
32
+ export declare function enrichModelContextWithMappingCoverage(modelContext: LegendAIModelContext, mappingCoverage: MappingModelCoverageAnalysisResult | undefined): void;
33
+ export declare function extractExecutableInfo(executables: DataSpaceExecutableAnalysisResult[], modelContext: LegendAIModelContext, services: TDSServiceSchema[]): LegendAIExecutableInfo[];
18
34
  export declare function extractTDSServicesFromDataSpace(viewerState: DataSpaceViewerState): Promise<TDSServiceSchema[]>;
19
35
  export declare const DataSpaceLegendAIIntegration: ((props: {
20
36
  dataSpaceViewerState: DataSpaceViewerState;
@@ -1 +1 @@
1
- {"version":3,"file":"DataSpaceLegendAIIntegration.d.ts","sourceRoot":"","sources":["../../src/components/DataSpaceLegendAIIntegration.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EAUL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EAIpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAW9E,wBAAsB,+BAA+B,CACnD,WAAW,EAAE,oBAAoB,GAChC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAkF7B;AA6JD,eAAO,MAAM,4BAA4B,WAC/B;IACN,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;;CAKF,CAAC"}
1
+ {"version":3,"file":"DataSpaceLegendAIIntegration.d.ts","sourceRoot":"","sources":["../../src/components/DataSpaceLegendAIIntegration.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAEL,KAAK,kCAAkC,EAIxC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAWL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EAInB,KAAK,oBAAoB,EAIzB,KAAK,sBAAsB,EAG5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAEjF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,OAAO,EAIL,KAAK,iCAAiC,EACvC,MAAM,wDAAwD,CAAC;AAehE;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,qBAAqB,EAAE,GAChC,oBAAoB,CAkEtB;AAED;;;;GAIG;AACH,wBAAgB,qCAAqC,CACnD,YAAY,EAAE,oBAAoB,EAClC,eAAe,EAAE,kCAAkC,GAAG,SAAS,GAC9D,IAAI,CAYN;AAoGD,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,iCAAiC,EAAE,EAChD,YAAY,EAAE,oBAAoB,EAClC,QAAQ,EAAE,gBAAgB,EAAE,GAC3B,sBAAsB,EAAE,CAgC1B;AAED,wBAAsB,+BAA+B,CACnD,WAAW,EAAE,oBAAoB,GAChC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAoF7B;AAiND,eAAO,MAAM,4BAA4B,WAC/B;IACN,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;;CAKF,CAAC"}
@@ -16,10 +16,207 @@ import { jsx as _jsx } from "react/jsx-runtime";
16
16
  */
17
17
  import { useState, useEffect, useMemo } from 'react';
18
18
  import { observer } from 'mobx-react-lite';
19
- import {} from '@finos/legend-graph';
20
- import { LegendAIChat, LegendAIErrorBoundary, findLegendAIPlugin, extractParameterSchemas, buildPropertyDocIndex, enrichColumnsFromElementDocs, inferServiceRelationshipsFromAssociations, extractLambdaPreFilters, } from '@finos/legend-lego/legend-ai';
19
+ import { Enumeration, getAllSuperclasses, PRIMITIVE_TYPE, } from '@finos/legend-graph';
20
+ import { LegendAIChat, LegendAIErrorBoundary, findLegendAIPlugin, extractParameterSchemas, buildPropertyDocIndex, enrichColumnsFromElementDocs, inferServiceRelationshipsFromAssociations, extractLambdaPreFilters, extractModelContext, } from '@finos/legend-lego/legend-ai';
21
+ import {} from '@finos/legend-extension-dsl-diagram';
22
+ import { assertErrorThrown, LogEvent } from '@finos/legend-shared';
23
+ import { DSL_DATASPACE_EVENT } from '../__lib__/DSL_DataSpace_Event.js';
21
24
  import { DataSpaceServiceExecutableInfo, DataSpaceMultiExecutionServiceExecutableInfo, DataSpaceExecutableTDSResult, } from '../graph-manager/action/analytics/DataSpaceAnalysis.js';
22
25
  import { DataSpaceSupportEmail, DataSpaceSupportCombinedInfo, } from '../graph/metamodel/pure/model/packageableElements/dataSpace/DSL_DataSpace_DataSpace.js';
26
+ const MAX_QUERY_SCAN_LENGTH = 5_000;
27
+ const MAX_QUERY_TEMPLATE_LENGTH = 1000;
28
+ const ENTITY_PATH_PATTERN = /(?<entityPath>[A-Za-z_]\w{0,63}(?:::[A-Za-z_]\w{0,63}){0,10})\.all\(\)/g;
29
+ // ────────────────────────────────────────────────────────────────────────────
30
+ // Diagram-based model context extraction (fallback when elementDocs is sparse)
31
+ // ────────────────────────────────────────────────────────────────────────────
32
+ /**
33
+ * Extracts a {@link LegendAIModelContext} from diagram metamodel objects.
34
+ * Diagrams always contain the actual Class metamodel references so this
35
+ * works even when elementDocs documentation is empty or incomplete.
36
+ */
37
+ export function extractModelContextFromDiagrams(diagrams) {
38
+ const entityMap = new Map();
39
+ const associations = [];
40
+ const enumPaths = new Map();
41
+ for (const { diagram } of diagrams) {
42
+ for (const classView of diagram.classViews) {
43
+ const cls = classView.class.value;
44
+ if (entityMap.has(cls.path)) {
45
+ continue;
46
+ }
47
+ const properties = cls.properties.map((prop) => {
48
+ const rawType = prop.genericType.value.rawType;
49
+ const typePath = rawType.path;
50
+ if (rawType instanceof Enumeration && !enumPaths.has(typePath)) {
51
+ enumPaths.set(typePath, {
52
+ path: typePath,
53
+ name: rawType.name,
54
+ values: rawType.values.map((v) => v.name),
55
+ });
56
+ }
57
+ return {
58
+ name: prop.name,
59
+ type: typePath,
60
+ isCollection: prop.multiplicity.upperBound === undefined ||
61
+ prop.multiplicity.upperBound > 1,
62
+ isOptional: prop.multiplicity.lowerBound === 0,
63
+ };
64
+ });
65
+ const entity = {
66
+ path: cls.path,
67
+ name: cls.name,
68
+ properties,
69
+ };
70
+ const superTypes = getAllSuperclasses(cls).map((c) => c.path);
71
+ if (superTypes.length > 0) {
72
+ entity.superTypes = superTypes;
73
+ }
74
+ entityMap.set(cls.path, entity);
75
+ }
76
+ for (const assocView of diagram.associationViews) {
77
+ const assoc = assocView.association.value;
78
+ const [propA, propB] = assoc.properties;
79
+ associations.push({
80
+ name: assoc.name,
81
+ leftEntity: assocView.from.classView.value.class.value.path,
82
+ leftProperty: propA.name,
83
+ rightEntity: assocView.to.classView.value.class.value.path,
84
+ rightProperty: propB.name,
85
+ });
86
+ }
87
+ }
88
+ const result = {
89
+ entities: Array.from(entityMap.values()),
90
+ associations,
91
+ };
92
+ if (enumPaths.size > 0) {
93
+ result.enumerations = Array.from(enumPaths.values());
94
+ }
95
+ return result;
96
+ }
97
+ /**
98
+ * Enriches a {@link LegendAIModelContext} with mapping coverage data.
99
+ * Marks entities that are root-mapped (directly queryable by the orchestrator)
100
+ * so entity resolution can prefer them.
101
+ */
102
+ export function enrichModelContextWithMappingCoverage(modelContext, mappingCoverage) {
103
+ if (!mappingCoverage) {
104
+ return;
105
+ }
106
+ for (const entity of modelContext.entities) {
107
+ const mapped = mappingCoverage.mappedEntities.find((me) => me.path === entity.path);
108
+ if (mapped?.info?.isRootEntity) {
109
+ entity.isRootMapped = true;
110
+ }
111
+ }
112
+ }
113
+ /**
114
+ * Builds column-to-property mappings by matching TDS result column names
115
+ * to model property names on the root entity.
116
+ * Uses case-insensitive, whitespace/underscore-normalized comparison.
117
+ */
118
+ function buildColumnPropertyMappings(columns, rootEntity) {
119
+ if (!rootEntity || rootEntity.properties.length === 0) {
120
+ return undefined;
121
+ }
122
+ const propLookup = new Map();
123
+ for (const prop of rootEntity.properties) {
124
+ const normalized = prop.name.toLowerCase().replaceAll('_', '');
125
+ propLookup.set(normalized, prop.name);
126
+ }
127
+ const mappings = [];
128
+ for (const colName of columns) {
129
+ const normalized = colName.toLowerCase().replaceAll(/[\s_]/g, '');
130
+ const propName = propLookup.get(normalized);
131
+ if (propName && propName !== colName) {
132
+ mappings.push({ columnName: colName, propertyPath: propName });
133
+ }
134
+ }
135
+ return mappings.length > 0 ? mappings : undefined;
136
+ }
137
+ function collectReferencedEntityPaths(queryStr) {
138
+ const safeQuery = queryStr.slice(0, MAX_QUERY_SCAN_LENGTH);
139
+ // Reset lastIndex defensively — the regex is module-scoped and reused.
140
+ ENTITY_PATH_PATTERN.lastIndex = 0;
141
+ const paths = [];
142
+ const seen = new Set();
143
+ let match;
144
+ while ((match = ENTITY_PATH_PATTERN.exec(safeQuery)) !== null) {
145
+ const path = match.groups?.entityPath;
146
+ if (path && !seen.has(path)) {
147
+ seen.add(path);
148
+ paths.push(path);
149
+ }
150
+ }
151
+ return paths;
152
+ }
153
+ function buildExecutableInfo(exec, entityMap, serviceParameters) {
154
+ if (!(exec.info instanceof DataSpaceServiceExecutableInfo ||
155
+ exec.info instanceof DataSpaceMultiExecutionServiceExecutableInfo)) {
156
+ return undefined;
157
+ }
158
+ const queryStr = exec.info.query;
159
+ const referencedEntityPaths = collectReferencedEntityPaths(queryStr);
160
+ const rootEntityPath = referencedEntityPaths[0];
161
+ if (!rootEntityPath) {
162
+ return undefined;
163
+ }
164
+ const info = {
165
+ title: exec.title,
166
+ rootEntityPath,
167
+ queryTemplate: queryStr.length > MAX_QUERY_TEMPLATE_LENGTH
168
+ ? `${queryStr.slice(0, MAX_QUERY_TEMPLATE_LENGTH)}...`
169
+ : queryStr,
170
+ };
171
+ if (referencedEntityPaths.length > 1) {
172
+ info.referencedEntityPaths = referencedEntityPaths;
173
+ }
174
+ if (exec.description !== undefined) {
175
+ info.description = exec.description;
176
+ }
177
+ const reqParams = serviceParameters.get(exec.title);
178
+ if (reqParams && reqParams.length > 0) {
179
+ info.requiredParameters = reqParams;
180
+ }
181
+ if (exec.result instanceof DataSpaceExecutableTDSResult) {
182
+ info.columns = exec.result.columns.map((c) => c.name);
183
+ const colMappings = buildColumnPropertyMappings(info.columns, entityMap.get(rootEntityPath));
184
+ if (colMappings) {
185
+ info.columnPropertyMappings = colMappings;
186
+ }
187
+ }
188
+ return info;
189
+ }
190
+ export function extractExecutableInfo(executables, modelContext, services) {
191
+ const entityMap = new Map(modelContext.entities.map((e) => [e.path, e]));
192
+ const serviceParameters = new Map();
193
+ for (const svc of services) {
194
+ if (svc.parameterSchemas && svc.parameterSchemas.length > 0) {
195
+ serviceParameters.set(svc.title, svc.parameterSchemas.map((p) => ({
196
+ name: p.name,
197
+ type: p.type ?? PRIMITIVE_TYPE.STRING,
198
+ })));
199
+ }
200
+ }
201
+ const result = [];
202
+ for (const exec of executables) {
203
+ const info = buildExecutableInfo(exec, entityMap, serviceParameters);
204
+ if (!info) {
205
+ continue;
206
+ }
207
+ result.push(info);
208
+ const queryableEntityPaths = info.referencedEntityPaths ?? [
209
+ info.rootEntityPath,
210
+ ];
211
+ for (const entityPath of queryableEntityPaths) {
212
+ const entity = entityMap.get(entityPath);
213
+ if (entity) {
214
+ entity.isQueryable = true;
215
+ }
216
+ }
217
+ }
218
+ return result;
219
+ }
23
220
  export async function extractTDSServicesFromDataSpace(viewerState) {
24
221
  const executables = viewerState.dataSpaceAnalysisResult.executables;
25
222
  const graphManager = viewerState.graphManagerState.graphManager;
@@ -41,8 +238,10 @@ export async function extractTDSServicesFromDataSpace(viewerState) {
41
238
  preFilters = extracted;
42
239
  }
43
240
  }
44
- catch {
45
- /* pre-filter extraction is best-effort */
241
+ catch (error) {
242
+ assertErrorThrown(error);
243
+ // pre-filter extraction is best-effort — a service without pre-filters
244
+ // still works, the AI just won't know about hardcoded constraints.
46
245
  }
47
246
  const entry = {
48
247
  title: exec.title,
@@ -140,8 +339,9 @@ const DataSpaceLegendAIIntegrationInner = observer((props) => {
140
339
  setServices(result);
141
340
  }
142
341
  })
143
- .catch(() => {
144
- /* noop — services stay empty; AI panel simply won't render */
342
+ .catch((error) => {
343
+ assertErrorThrown(error);
344
+ dataSpaceViewerState.applicationStore.logService.warn(LogEvent.create(DSL_DATASPACE_EVENT.ERROR_EXTRACT_LEGEND_AI_SERVICES), error);
145
345
  });
146
346
  return () => {
147
347
  cancelled = true;
@@ -166,24 +366,50 @@ const DataSpaceLegendAIIntegrationInner = observer((props) => {
166
366
  dataSpaceViewerState.currentExecutionContext.mapping,
167
367
  dataSpaceViewerState.currentRuntime,
168
368
  ]);
169
- const metadata = useMemo(() => {
170
- try {
171
- return extractMetadataFromDataSpace(dataSpaceViewerState, coordinates, services);
369
+ const metadata = useMemo(() => extractMetadataFromDataSpace(dataSpaceViewerState, coordinates, services), [dataSpaceViewerState, coordinates, services]);
370
+ const modelContext = useMemo(() => {
371
+ const result = dataSpaceViewerState.dataSpaceAnalysisResult;
372
+ let ctx;
373
+ if (result.elementDocs.length > 0) {
374
+ const docsCtx = extractModelContext(result.elementDocs);
375
+ if (docsCtx.entities.length > 0) {
376
+ ctx = docsCtx;
377
+ }
172
378
  }
173
- catch {
174
- return {
175
- name: 'Unknown',
176
- coordinates,
177
- serviceSummaries: [],
178
- };
379
+ // Fallback: extract from diagram metamodel objects (always available)
380
+ if (!ctx && result.diagrams.length > 0) {
381
+ const diagramCtx = extractModelContextFromDiagrams(result.diagrams);
382
+ if (diagramCtx.entities.length > 0) {
383
+ ctx = diagramCtx;
384
+ }
179
385
  }
180
- }, [dataSpaceViewerState, coordinates, services]);
386
+ if (!ctx) {
387
+ return undefined;
388
+ }
389
+ const mappingPath = dataSpaceViewerState.currentExecutionContext.mapping.path;
390
+ const mappingCoverage = result.mappingToMappingCoverageResult?.get(mappingPath);
391
+ enrichModelContextWithMappingCoverage(ctx, mappingCoverage);
392
+ if (result.executables.length > 0) {
393
+ const execInfos = extractExecutableInfo(result.executables, ctx, services);
394
+ if (execInfos.length > 0) {
395
+ ctx.executables = execInfos;
396
+ }
397
+ }
398
+ if (result.description) {
399
+ ctx.dataspaceDescription = result.description;
400
+ }
401
+ return ctx;
402
+ }, [
403
+ dataSpaceViewerState.dataSpaceAnalysisResult,
404
+ dataSpaceViewerState.currentExecutionContext.mapping,
405
+ services,
406
+ ]);
181
407
  if (!config.enabled || !legendAIPlugin) {
182
408
  return null;
183
409
  }
184
410
  const dsTitle = dataSpaceViewerState.dataSpaceAnalysisResult.title ??
185
411
  dataSpaceViewerState.dataSpaceAnalysisResult.name;
186
- return (_jsx(LegendAIChat, { services: services, coordinates: coordinates, config: config, metadata: metadata, title: `Ask ${dsTitle}`, plugin: legendAIPlugin, dataProductCoordinates: dataProductCoordinates, pureExecutionContext: pureExecutionContext, ...(onClose ? { onClose } : {}), ...(onMinimize ? { onMinimize } : {}) }));
412
+ return (_jsx(LegendAIChat, { services: services, coordinates: coordinates, config: config, metadata: metadata, title: `Ask ${dsTitle}`, plugin: legendAIPlugin, contextBannerMessage: "You can query available TDS Executables within Data Space, or use Legend AI MCP for Pure queries on models.", dataProductCoordinates: dataProductCoordinates, pureExecutionContext: pureExecutionContext, ...(modelContext ? { modelContext } : {}), ...(onClose ? { onClose } : {}), ...(onMinimize ? { onMinimize } : {}) }));
187
413
  });
188
414
  export const DataSpaceLegendAIIntegration = observer((props) => (_jsx(LegendAIErrorBoundary, { children: _jsx(DataSpaceLegendAIIntegrationInner, { ...props }) })));
189
415
  //# sourceMappingURL=DataSpaceLegendAIIntegration.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataSpaceLegendAIIntegration.js","sourceRoot":"","sources":["../../src/components/DataSpaceLegendAIIntegration.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DataSpaceLegendAIIntegration.js","sourceRoot":"","sources":["../../src/components/DataSpaceLegendAIIntegration.tsx"],"names":[],"mappings":"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"}
package/lib/index.css CHANGED
@@ -1,4 +1,4 @@
1
- /** @license @finos/legend-extension-dsl-data-space v10.4.231
1
+ /** @license @finos/legend-extension-dsl-data-space v10.4.232
2
2
  * Copyright (c) 2020-present, Goldman Sachs
3
3
  *
4
4
  * Licensed under the Apache License, Version 2.0 (the "License");
package/lib/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finos/legend-extension-dsl-data-space",
3
- "version": "10.4.231",
3
+ "version": "10.4.232",
4
4
  "description": "Legend extension for Data Space DSL",
5
5
  "keywords": [
6
6
  "legend",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finos/legend-extension-dsl-data-space",
3
- "version": "10.4.231",
3
+ "version": "10.4.232",
4
4
  "description": "Legend extension for Data Space DSL",
5
5
  "keywords": [
6
6
  "legend",
@@ -45,11 +45,11 @@
45
45
  "dependencies": {
46
46
  "@finos/legend-application": "16.0.113",
47
47
  "@finos/legend-art": "7.1.154",
48
- "@finos/legend-code-editor": "2.0.182",
49
- "@finos/legend-extension-dsl-diagram": "8.1.246",
50
- "@finos/legend-graph": "32.6.13",
51
- "@finos/legend-lego": "2.0.202",
52
- "@finos/legend-query-builder": "4.18.21",
48
+ "@finos/legend-code-editor": "2.0.183",
49
+ "@finos/legend-extension-dsl-diagram": "8.1.247",
50
+ "@finos/legend-graph": "32.6.14",
51
+ "@finos/legend-lego": "2.0.203",
52
+ "@finos/legend-query-builder": "4.18.22",
53
53
  "@finos/legend-server-depot": "6.1.14",
54
54
  "@finos/legend-server-sdlc": "5.4.5",
55
55
  "@finos/legend-shared": "11.0.26",
@@ -17,4 +17,5 @@
17
17
  export enum DSL_DATASPACE_EVENT {
18
18
  BUILD_ANALYTICS_RESULT = 'dataProduct.builder.analytics-result',
19
19
  ERROR_GENERATE_SAMPLE_VALUES = 'dataProduct.error.build-sample-values',
20
+ ERROR_EXTRACT_LEGEND_AI_SERVICES = 'dataProduct.error.extract-legend-ai-services',
20
21
  }
@@ -16,7 +16,13 @@
16
16
 
17
17
  import { useState, useEffect, useMemo } from 'react';
18
18
  import { observer } from 'mobx-react-lite';
19
- import { type QueryExplicitExecutionContextInfo } from '@finos/legend-graph';
19
+ import {
20
+ type QueryExplicitExecutionContextInfo,
21
+ type MappingModelCoverageAnalysisResult,
22
+ Enumeration,
23
+ getAllSuperclasses,
24
+ PRIMITIVE_TYPE,
25
+ } from '@finos/legend-graph';
20
26
  import {
21
27
  LegendAIChat,
22
28
  LegendAIErrorBoundary,
@@ -26,24 +32,278 @@ import {
26
32
  enrichColumnsFromElementDocs,
27
33
  inferServiceRelationshipsFromAssociations,
28
34
  extractLambdaPreFilters,
35
+ extractModelContext,
29
36
  type TDSColumnSchema,
30
37
  type TDSServiceSchema,
31
38
  type LegendAIConfig,
32
39
  type LegendAIProductMetadata,
33
40
  type LegendAIOrchestratorDataProductCoordinates,
34
41
  type LegendAIServiceSummary,
42
+ type LegendAIModelContext,
43
+ type LegendAIModelEntity,
44
+ type LegendAIModelProperty,
45
+ type LegendAIModelAssociation,
46
+ type LegendAIExecutableInfo,
47
+ type LegendAIColumnPropertyMapping,
48
+ type LegendAIParameterInfo,
35
49
  } from '@finos/legend-lego/legend-ai';
50
+ import { type DiagramAnalysisResult } from '@finos/legend-extension-dsl-diagram';
51
+ import { assertErrorThrown, LogEvent } from '@finos/legend-shared';
36
52
  import type { DataSpaceViewerState } from '../stores/DataSpaceViewerState.js';
53
+ import { DSL_DATASPACE_EVENT } from '../__lib__/DSL_DataSpace_Event.js';
37
54
  import {
38
55
  DataSpaceServiceExecutableInfo,
39
56
  DataSpaceMultiExecutionServiceExecutableInfo,
40
57
  DataSpaceExecutableTDSResult,
58
+ type DataSpaceExecutableAnalysisResult,
41
59
  } from '../graph-manager/action/analytics/DataSpaceAnalysis.js';
42
60
  import {
43
61
  DataSpaceSupportEmail,
44
62
  DataSpaceSupportCombinedInfo,
45
63
  } from '../graph/metamodel/pure/model/packageableElements/dataSpace/DSL_DataSpace_DataSpace.js';
46
64
 
65
+ const MAX_QUERY_SCAN_LENGTH = 5_000;
66
+ const MAX_QUERY_TEMPLATE_LENGTH = 1000;
67
+ const ENTITY_PATH_PATTERN =
68
+ /(?<entityPath>[A-Za-z_]\w{0,63}(?:::[A-Za-z_]\w{0,63}){0,10})\.all\(\)/g;
69
+
70
+ // ────────────────────────────────────────────────────────────────────────────
71
+ // Diagram-based model context extraction (fallback when elementDocs is sparse)
72
+ // ────────────────────────────────────────────────────────────────────────────
73
+
74
+ /**
75
+ * Extracts a {@link LegendAIModelContext} from diagram metamodel objects.
76
+ * Diagrams always contain the actual Class metamodel references so this
77
+ * works even when elementDocs documentation is empty or incomplete.
78
+ */
79
+ export function extractModelContextFromDiagrams(
80
+ diagrams: DiagramAnalysisResult[],
81
+ ): LegendAIModelContext {
82
+ const entityMap = new Map<string, LegendAIModelEntity>();
83
+ const associations: LegendAIModelAssociation[] = [];
84
+ const enumPaths = new Map<
85
+ string,
86
+ { path: string; name: string; values: string[] }
87
+ >();
88
+
89
+ for (const { diagram } of diagrams) {
90
+ for (const classView of diagram.classViews) {
91
+ const cls = classView.class.value;
92
+ if (entityMap.has(cls.path)) {
93
+ continue;
94
+ }
95
+ const properties: LegendAIModelProperty[] = cls.properties.map((prop) => {
96
+ const rawType = prop.genericType.value.rawType;
97
+ const typePath = rawType.path;
98
+ if (rawType instanceof Enumeration && !enumPaths.has(typePath)) {
99
+ enumPaths.set(typePath, {
100
+ path: typePath,
101
+ name: rawType.name,
102
+ values: rawType.values.map((v) => v.name),
103
+ });
104
+ }
105
+ return {
106
+ name: prop.name,
107
+ type: typePath,
108
+ isCollection:
109
+ prop.multiplicity.upperBound === undefined ||
110
+ prop.multiplicity.upperBound > 1,
111
+ isOptional: prop.multiplicity.lowerBound === 0,
112
+ };
113
+ });
114
+ const entity: LegendAIModelEntity = {
115
+ path: cls.path,
116
+ name: cls.name,
117
+ properties,
118
+ };
119
+ const superTypes = getAllSuperclasses(cls).map((c) => c.path);
120
+ if (superTypes.length > 0) {
121
+ entity.superTypes = superTypes;
122
+ }
123
+ entityMap.set(cls.path, entity);
124
+ }
125
+
126
+ for (const assocView of diagram.associationViews) {
127
+ const assoc = assocView.association.value;
128
+ const [propA, propB] = assoc.properties;
129
+ associations.push({
130
+ name: assoc.name,
131
+ leftEntity: assocView.from.classView.value.class.value.path,
132
+ leftProperty: propA.name,
133
+ rightEntity: assocView.to.classView.value.class.value.path,
134
+ rightProperty: propB.name,
135
+ });
136
+ }
137
+ }
138
+
139
+ const result: LegendAIModelContext = {
140
+ entities: Array.from(entityMap.values()),
141
+ associations,
142
+ };
143
+ if (enumPaths.size > 0) {
144
+ result.enumerations = Array.from(enumPaths.values());
145
+ }
146
+ return result;
147
+ }
148
+
149
+ /**
150
+ * Enriches a {@link LegendAIModelContext} with mapping coverage data.
151
+ * Marks entities that are root-mapped (directly queryable by the orchestrator)
152
+ * so entity resolution can prefer them.
153
+ */
154
+ export function enrichModelContextWithMappingCoverage(
155
+ modelContext: LegendAIModelContext,
156
+ mappingCoverage: MappingModelCoverageAnalysisResult | undefined,
157
+ ): void {
158
+ if (!mappingCoverage) {
159
+ return;
160
+ }
161
+ for (const entity of modelContext.entities) {
162
+ const mapped = mappingCoverage.mappedEntities.find(
163
+ (me) => me.path === entity.path,
164
+ );
165
+ if (mapped?.info?.isRootEntity) {
166
+ entity.isRootMapped = true;
167
+ }
168
+ }
169
+ }
170
+
171
+ /**
172
+ * Builds column-to-property mappings by matching TDS result column names
173
+ * to model property names on the root entity.
174
+ * Uses case-insensitive, whitespace/underscore-normalized comparison.
175
+ */
176
+ function buildColumnPropertyMappings(
177
+ columns: string[],
178
+ rootEntity: { properties: { name: string }[] } | undefined,
179
+ ): LegendAIColumnPropertyMapping[] | undefined {
180
+ if (!rootEntity || rootEntity.properties.length === 0) {
181
+ return undefined;
182
+ }
183
+
184
+ const propLookup = new Map<string, string>();
185
+ for (const prop of rootEntity.properties) {
186
+ const normalized = prop.name.toLowerCase().replaceAll('_', '');
187
+ propLookup.set(normalized, prop.name);
188
+ }
189
+
190
+ const mappings: LegendAIColumnPropertyMapping[] = [];
191
+ for (const colName of columns) {
192
+ const normalized = colName.toLowerCase().replaceAll(/[\s_]/g, '');
193
+ const propName = propLookup.get(normalized);
194
+ if (propName && propName !== colName) {
195
+ mappings.push({ columnName: colName, propertyPath: propName });
196
+ }
197
+ }
198
+
199
+ return mappings.length > 0 ? mappings : undefined;
200
+ }
201
+
202
+ function collectReferencedEntityPaths(queryStr: string): string[] {
203
+ const safeQuery = queryStr.slice(0, MAX_QUERY_SCAN_LENGTH);
204
+ // Reset lastIndex defensively — the regex is module-scoped and reused.
205
+ ENTITY_PATH_PATTERN.lastIndex = 0;
206
+ const paths: string[] = [];
207
+ const seen = new Set<string>();
208
+ let match: RegExpExecArray | null;
209
+ while ((match = ENTITY_PATH_PATTERN.exec(safeQuery)) !== null) {
210
+ const path = match.groups?.entityPath;
211
+ if (path && !seen.has(path)) {
212
+ seen.add(path);
213
+ paths.push(path);
214
+ }
215
+ }
216
+ return paths;
217
+ }
218
+
219
+ function buildExecutableInfo(
220
+ exec: DataSpaceExecutableAnalysisResult,
221
+ entityMap: Map<string, LegendAIModelEntity>,
222
+ serviceParameters: Map<string, LegendAIParameterInfo[]>,
223
+ ): LegendAIExecutableInfo | undefined {
224
+ if (
225
+ !(
226
+ exec.info instanceof DataSpaceServiceExecutableInfo ||
227
+ exec.info instanceof DataSpaceMultiExecutionServiceExecutableInfo
228
+ )
229
+ ) {
230
+ return undefined;
231
+ }
232
+ const queryStr = exec.info.query;
233
+ const referencedEntityPaths = collectReferencedEntityPaths(queryStr);
234
+ const rootEntityPath = referencedEntityPaths[0];
235
+ if (!rootEntityPath) {
236
+ return undefined;
237
+ }
238
+ const info: LegendAIExecutableInfo = {
239
+ title: exec.title,
240
+ rootEntityPath,
241
+ queryTemplate:
242
+ queryStr.length > MAX_QUERY_TEMPLATE_LENGTH
243
+ ? `${queryStr.slice(0, MAX_QUERY_TEMPLATE_LENGTH)}...`
244
+ : queryStr,
245
+ };
246
+ if (referencedEntityPaths.length > 1) {
247
+ info.referencedEntityPaths = referencedEntityPaths;
248
+ }
249
+ if (exec.description !== undefined) {
250
+ info.description = exec.description;
251
+ }
252
+ const reqParams = serviceParameters.get(exec.title);
253
+ if (reqParams && reqParams.length > 0) {
254
+ info.requiredParameters = reqParams;
255
+ }
256
+ if (exec.result instanceof DataSpaceExecutableTDSResult) {
257
+ info.columns = exec.result.columns.map((c) => c.name);
258
+ const colMappings = buildColumnPropertyMappings(
259
+ info.columns,
260
+ entityMap.get(rootEntityPath),
261
+ );
262
+ if (colMappings) {
263
+ info.columnPropertyMappings = colMappings;
264
+ }
265
+ }
266
+ return info;
267
+ }
268
+
269
+ export function extractExecutableInfo(
270
+ executables: DataSpaceExecutableAnalysisResult[],
271
+ modelContext: LegendAIModelContext,
272
+ services: TDSServiceSchema[],
273
+ ): LegendAIExecutableInfo[] {
274
+ const entityMap = new Map(modelContext.entities.map((e) => [e.path, e]));
275
+ const serviceParameters = new Map<string, LegendAIParameterInfo[]>();
276
+ for (const svc of services) {
277
+ if (svc.parameterSchemas && svc.parameterSchemas.length > 0) {
278
+ serviceParameters.set(
279
+ svc.title,
280
+ svc.parameterSchemas.map((p) => ({
281
+ name: p.name,
282
+ type: p.type ?? PRIMITIVE_TYPE.STRING,
283
+ })),
284
+ );
285
+ }
286
+ }
287
+ const result: LegendAIExecutableInfo[] = [];
288
+ for (const exec of executables) {
289
+ const info = buildExecutableInfo(exec, entityMap, serviceParameters);
290
+ if (!info) {
291
+ continue;
292
+ }
293
+ result.push(info);
294
+ const queryableEntityPaths = info.referencedEntityPaths ?? [
295
+ info.rootEntityPath,
296
+ ];
297
+ for (const entityPath of queryableEntityPaths) {
298
+ const entity = entityMap.get(entityPath);
299
+ if (entity) {
300
+ entity.isQueryable = true;
301
+ }
302
+ }
303
+ }
304
+ return result;
305
+ }
306
+
47
307
  export async function extractTDSServicesFromDataSpace(
48
308
  viewerState: DataSpaceViewerState,
49
309
  ): Promise<TDSServiceSchema[]> {
@@ -79,8 +339,10 @@ export async function extractTDSServicesFromDataSpace(
79
339
  if (extracted.length > 0) {
80
340
  preFilters = extracted;
81
341
  }
82
- } catch {
83
- /* pre-filter extraction is best-effort */
342
+ } catch (error) {
343
+ assertErrorThrown(error);
344
+ // pre-filter extraction is best-effort — a service without pre-filters
345
+ // still works, the AI just won't know about hardcoded constraints.
84
346
  }
85
347
 
86
348
  const entry: TDSServiceSchema = {
@@ -208,8 +470,14 @@ const DataSpaceLegendAIIntegrationInner = observer(
208
470
  setServices(result);
209
471
  }
210
472
  })
211
- .catch(() => {
212
- /* noop — services stay empty; AI panel simply won't render */
473
+ .catch((error) => {
474
+ assertErrorThrown(error);
475
+ dataSpaceViewerState.applicationStore.logService.warn(
476
+ LogEvent.create(
477
+ DSL_DATASPACE_EVENT.ERROR_EXTRACT_LEGEND_AI_SERVICES,
478
+ ),
479
+ error,
480
+ );
213
481
  });
214
482
  return () => {
215
483
  cancelled = true;
@@ -244,21 +512,65 @@ const DataSpaceLegendAIIntegrationInner = observer(
244
512
  ],
245
513
  );
246
514
 
247
- const metadata = useMemo(() => {
248
- try {
249
- return extractMetadataFromDataSpace(
515
+ const metadata = useMemo(
516
+ () =>
517
+ extractMetadataFromDataSpace(
250
518
  dataSpaceViewerState,
251
519
  coordinates,
252
520
  services,
521
+ ),
522
+ [dataSpaceViewerState, coordinates, services],
523
+ );
524
+
525
+ const modelContext: LegendAIModelContext | undefined = useMemo(() => {
526
+ const result = dataSpaceViewerState.dataSpaceAnalysisResult;
527
+ let ctx: LegendAIModelContext | undefined;
528
+ if (result.elementDocs.length > 0) {
529
+ const docsCtx = extractModelContext(result.elementDocs);
530
+ if (docsCtx.entities.length > 0) {
531
+ ctx = docsCtx;
532
+ }
533
+ }
534
+
535
+ // Fallback: extract from diagram metamodel objects (always available)
536
+ if (!ctx && result.diagrams.length > 0) {
537
+ const diagramCtx = extractModelContextFromDiagrams(result.diagrams);
538
+ if (diagramCtx.entities.length > 0) {
539
+ ctx = diagramCtx;
540
+ }
541
+ }
542
+
543
+ if (!ctx) {
544
+ return undefined;
545
+ }
546
+
547
+ const mappingPath =
548
+ dataSpaceViewerState.currentExecutionContext.mapping.path;
549
+ const mappingCoverage =
550
+ result.mappingToMappingCoverageResult?.get(mappingPath);
551
+ enrichModelContextWithMappingCoverage(ctx, mappingCoverage);
552
+
553
+ if (result.executables.length > 0) {
554
+ const execInfos = extractExecutableInfo(
555
+ result.executables,
556
+ ctx,
557
+ services,
253
558
  );
254
- } catch {
255
- return {
256
- name: 'Unknown',
257
- coordinates,
258
- serviceSummaries: [],
259
- };
559
+ if (execInfos.length > 0) {
560
+ ctx.executables = execInfos;
561
+ }
562
+ }
563
+
564
+ if (result.description) {
565
+ ctx.dataspaceDescription = result.description;
260
566
  }
261
- }, [dataSpaceViewerState, coordinates, services]);
567
+
568
+ return ctx;
569
+ }, [
570
+ dataSpaceViewerState.dataSpaceAnalysisResult,
571
+ dataSpaceViewerState.currentExecutionContext.mapping,
572
+ services,
573
+ ]);
262
574
 
263
575
  if (!config.enabled || !legendAIPlugin) {
264
576
  return null;
@@ -276,8 +588,10 @@ const DataSpaceLegendAIIntegrationInner = observer(
276
588
  metadata={metadata}
277
589
  title={`Ask ${dsTitle}`}
278
590
  plugin={legendAIPlugin}
591
+ contextBannerMessage="You can query available TDS Executables within Data Space, or use Legend AI MCP for Pure queries on models."
279
592
  dataProductCoordinates={dataProductCoordinates}
280
593
  pureExecutionContext={pureExecutionContext}
594
+ {...(modelContext ? { modelContext } : {})}
281
595
  {...(onClose ? { onClose } : {})}
282
596
  {...(onMinimize ? { onMinimize } : {})}
283
597
  />