@finos/legend-query-builder 4.19.4 → 4.19.6
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.
- package/lib/__lib__/QueryBuilderEvent.d.ts +2 -0
- package/lib/__lib__/QueryBuilderEvent.d.ts.map +1 -1
- package/lib/__lib__/QueryBuilderEvent.js +2 -0
- package/lib/__lib__/QueryBuilderEvent.js.map +1 -1
- package/lib/__lib__/QueryBuilderSetting.d.ts +2 -1
- package/lib/__lib__/QueryBuilderSetting.d.ts.map +1 -1
- package/lib/__lib__/QueryBuilderSetting.js +4 -0
- package/lib/__lib__/QueryBuilderSetting.js.map +1 -1
- package/lib/__lib__/QueryBuilderTelemetryHelper.d.ts +5 -1
- package/lib/__lib__/QueryBuilderTelemetryHelper.d.ts.map +1 -1
- package/lib/__lib__/QueryBuilderTelemetryHelper.js +8 -2
- package/lib/__lib__/QueryBuilderTelemetryHelper.js.map +1 -1
- package/lib/components/QueryAgentChat.d.ts +22 -0
- package/lib/components/QueryAgentChat.d.ts.map +1 -0
- package/lib/components/QueryAgentChat.js +26 -0
- package/lib/components/QueryAgentChat.js.map +1 -0
- package/lib/components/QueryBuilder.d.ts.map +1 -1
- package/lib/components/QueryBuilder.js +5 -2
- package/lib/components/QueryBuilder.js.map +1 -1
- package/lib/components/QueryBuilderUnsupportedQueryEditor.d.ts.map +1 -1
- package/lib/components/QueryBuilderUnsupportedQueryEditor.js +4 -1
- package/lib/components/QueryBuilderUnsupportedQueryEditor.js.map +1 -1
- package/lib/data-access-overview.css +1 -1
- package/lib/graph-manager/QueryBuilderConfig.d.ts +4 -0
- package/lib/graph-manager/QueryBuilderConfig.d.ts.map +1 -1
- package/lib/graph-manager/QueryBuilderConfig.js +5 -0
- package/lib/graph-manager/QueryBuilderConfig.js.map +1 -1
- package/lib/index.css +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/package.json +1 -1
- package/lib/stores/QueryAgentChatState.d.ts +33 -0
- package/lib/stores/QueryAgentChatState.d.ts.map +1 -0
- package/lib/stores/QueryAgentChatState.js +34 -0
- package/lib/stores/QueryAgentChatState.js.map +1 -0
- package/lib/stores/QueryBuilderResultState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderResultState.js +7 -2
- package/lib/stores/QueryBuilderResultState.js.map +1 -1
- package/lib/stores/QueryBuilderState.d.ts +12 -0
- package/lib/stores/QueryBuilderState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderState.js +41 -0
- package/lib/stores/QueryBuilderState.js.map +1 -1
- package/lib/stores/QueryBuilder_LegendApplicationPlugin_Extension.d.ts +20 -0
- package/lib/stores/QueryBuilder_LegendApplicationPlugin_Extension.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/__lib__/QueryBuilderEvent.ts +2 -0
- package/src/__lib__/QueryBuilderSetting.ts +4 -0
- package/src/__lib__/QueryBuilderTelemetryHelper.ts +19 -2
- package/src/components/QueryAgentChat.tsx +38 -0
- package/src/components/QueryBuilder.tsx +14 -2
- package/src/components/QueryBuilderUnsupportedQueryEditor.tsx +10 -0
- package/src/graph-manager/QueryBuilderConfig.ts +6 -0
- package/src/index.ts +1 -0
- package/src/stores/QueryAgentChatState.ts +37 -0
- package/src/stores/QueryBuilderResultState.ts +14 -0
- package/src/stores/QueryBuilderState.ts +54 -0
- package/src/stores/QueryBuilder_LegendApplicationPlugin_Extension.ts +28 -0
- package/tsconfig.json +2 -0
|
@@ -38,8 +38,11 @@ type GraphFetchPanel_TelemtryData = {
|
|
|
38
38
|
};
|
|
39
39
|
|
|
40
40
|
export class QueryBuilderTelemetryHelper {
|
|
41
|
-
static logEvent_QueryRunLaunched(
|
|
42
|
-
service
|
|
41
|
+
static logEvent_QueryRunLaunched(
|
|
42
|
+
service: TelemetryService,
|
|
43
|
+
data?: Record<string, unknown> | undefined,
|
|
44
|
+
): void {
|
|
45
|
+
service.logEvent(QUERY_BUILDER_EVENT.RUN_QUERY__LAUNCH, data ?? {});
|
|
43
46
|
}
|
|
44
47
|
|
|
45
48
|
static logEvent_ExportQueryDataLaunched(service: TelemetryService): void {
|
|
@@ -67,6 +70,20 @@ export class QueryBuilderTelemetryHelper {
|
|
|
67
70
|
service.logEvent(QUERY_BUILDER_EVENT.RUN_QUERY__SUCCESS, data);
|
|
68
71
|
}
|
|
69
72
|
|
|
73
|
+
static logEvent_QueryRunFailed(
|
|
74
|
+
service: TelemetryService,
|
|
75
|
+
data: { errorMessage: string } & Record<string, unknown>,
|
|
76
|
+
): void {
|
|
77
|
+
service.logEvent(QUERY_BUILDER_EVENT.RUN_QUERY__FAILURE, data);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
static logEvent_QueryRunCancelled(
|
|
81
|
+
service: TelemetryService,
|
|
82
|
+
data?: Record<string, unknown> | undefined,
|
|
83
|
+
): void {
|
|
84
|
+
service.logEvent(QUERY_BUILDER_EVENT.RUN_QUERY__CANCELLED, data ?? {});
|
|
85
|
+
}
|
|
86
|
+
|
|
70
87
|
static logEvent_ExportQueryDataSucceeded(
|
|
71
88
|
service: TelemetryService,
|
|
72
89
|
data: QueryExecution_TelemetryData,
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026-present, Goldman Sachs
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { observer } from 'mobx-react-lite';
|
|
18
|
+
import { useApplicationStore } from '@finos/legend-application';
|
|
19
|
+
import type { QueryBuilder_LegendApplicationPlugin_Extension } from '../stores/QueryBuilder_LegendApplicationPlugin_Extension.js';
|
|
20
|
+
import type { QueryBuilderState } from '../stores/QueryBuilderState.js';
|
|
21
|
+
|
|
22
|
+
export const QueryAgentChat = observer(
|
|
23
|
+
(props: { queryBuilderState: QueryBuilderState }) => {
|
|
24
|
+
const { queryBuilderState } = props;
|
|
25
|
+
const applicationStore = useApplicationStore();
|
|
26
|
+
|
|
27
|
+
const extraQueryAgentChatConfigurations = applicationStore.pluginManager
|
|
28
|
+
.getApplicationPlugins()
|
|
29
|
+
.flatMap(
|
|
30
|
+
(plugin) =>
|
|
31
|
+
(
|
|
32
|
+
plugin as QueryBuilder_LegendApplicationPlugin_Extension
|
|
33
|
+
).getExtraQueryAgentChatRenderers?.() ?? [],
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
return extraQueryAgentChatConfigurations[0]?.(queryBuilderState);
|
|
37
|
+
},
|
|
38
|
+
);
|
|
@@ -79,6 +79,7 @@ import { QueryBuilderConstantExpressionPanel } from './QueryBuilderConstantExpre
|
|
|
79
79
|
import { QUERY_BUILDER_SETTING_KEY } from '../__lib__/QueryBuilderSetting.js';
|
|
80
80
|
import { QUERY_BUILDER_COMPONENT_ELEMENT_ID } from './QueryBuilderComponentElement.js';
|
|
81
81
|
import { DataAccessOverview } from './data-access/DataAccessOverview.js';
|
|
82
|
+
import { QueryAgentChat } from './QueryAgentChat.js';
|
|
82
83
|
import { Fragment, useEffect, useRef } from 'react';
|
|
83
84
|
import { RedoButton, UndoButton } from '@finos/legend-lego/application';
|
|
84
85
|
import { FETCH_STRUCTURE_IMPLEMENTATION } from '../stores/fetch-structure/QueryBuilderFetchStructureImplementationState.js';
|
|
@@ -245,6 +246,9 @@ export const QueryBuilder = observer(
|
|
|
245
246
|
const fetchStructureState = queryBuilderState.fetchStructureState;
|
|
246
247
|
const isTDSState =
|
|
247
248
|
fetchStructureState.implementation instanceof QueryBuilderTDSState;
|
|
249
|
+
const showQueryAgentChatPanel =
|
|
250
|
+
queryBuilderState.isAgentChatOpened &&
|
|
251
|
+
!queryBuilderState.config?.TEMPORARY__disableQueryBuilderAgentChat;
|
|
248
252
|
const openLambdaEditor = (mode: QueryBuilderTextEditorMode): void =>
|
|
249
253
|
queryBuilderState.textEditorState.openModal(mode);
|
|
250
254
|
const openPure = (): void =>
|
|
@@ -1028,6 +1032,14 @@ export const QueryBuilder = observer(
|
|
|
1028
1032
|
{renderPostFetchStructure()}
|
|
1029
1033
|
</ResizablePanel>
|
|
1030
1034
|
)}
|
|
1035
|
+
{showQueryAgentChatPanel && <ResizablePanelSplitter />}
|
|
1036
|
+
{showQueryAgentChatPanel && (
|
|
1037
|
+
<ResizablePanel size={450}>
|
|
1038
|
+
<QueryAgentChat
|
|
1039
|
+
queryBuilderState={queryBuilderState}
|
|
1040
|
+
/>
|
|
1041
|
+
</ResizablePanel>
|
|
1042
|
+
)}
|
|
1031
1043
|
</ResizablePanelGroup>
|
|
1032
1044
|
) : (
|
|
1033
1045
|
<QueryBuilderUnsupportedQueryEditor
|
|
@@ -1114,9 +1126,9 @@ export const QueryBuilder = observer(
|
|
|
1114
1126
|
/>
|
|
1115
1127
|
)}
|
|
1116
1128
|
</div>
|
|
1117
|
-
{queryBuilderState.workflowState.showStatusBar
|
|
1129
|
+
{queryBuilderState.workflowState.showStatusBar && (
|
|
1118
1130
|
<QueryBuilderStatusBar queryBuilderState={queryBuilderState} />
|
|
1119
|
-
)
|
|
1131
|
+
)}
|
|
1120
1132
|
</div>
|
|
1121
1133
|
);
|
|
1122
1134
|
},
|
|
@@ -28,6 +28,7 @@ import {
|
|
|
28
28
|
} from '@finos/legend-art';
|
|
29
29
|
import { QueryBuilderSidebar } from './QueryBuilderSideBar.js';
|
|
30
30
|
import { QueryBuilderParametersPanel } from './QueryBuilderParametersPanel.js';
|
|
31
|
+
import { QueryAgentChat } from './QueryAgentChat.js';
|
|
31
32
|
|
|
32
33
|
const QueryBuilderUnsupportedQueryViewer = observer(
|
|
33
34
|
(props: { queryBuilderState: QueryBuilderState }) => {
|
|
@@ -65,6 +66,9 @@ const QueryBuilderUnsupportedQueryViewer = observer(
|
|
|
65
66
|
export const QueryBuilderUnsupportedQueryEditor = observer(
|
|
66
67
|
(props: { queryBuilderState: QueryBuilderState }) => {
|
|
67
68
|
const { queryBuilderState } = props;
|
|
69
|
+
const showQueryAgentChatPanel =
|
|
70
|
+
queryBuilderState.isAgentChatOpened &&
|
|
71
|
+
!queryBuilderState.config?.TEMPORARY__disableQueryBuilderAgentChat;
|
|
68
72
|
|
|
69
73
|
return (
|
|
70
74
|
<ResizablePanelGroup orientation="vertical">
|
|
@@ -81,6 +85,12 @@ export const QueryBuilderUnsupportedQueryEditor = observer(
|
|
|
81
85
|
queryBuilderState={queryBuilderState}
|
|
82
86
|
/>
|
|
83
87
|
</ResizablePanel>
|
|
88
|
+
{showQueryAgentChatPanel && <ResizablePanelSplitter />}
|
|
89
|
+
{showQueryAgentChatPanel && (
|
|
90
|
+
<ResizablePanel size={450}>
|
|
91
|
+
<QueryAgentChat queryBuilderState={queryBuilderState} />
|
|
92
|
+
</ResizablePanel>
|
|
93
|
+
)}
|
|
84
94
|
</ResizablePanelGroup>
|
|
85
95
|
);
|
|
86
96
|
},
|
|
@@ -23,6 +23,11 @@ export class QueryBuilderConfig {
|
|
|
23
23
|
*/
|
|
24
24
|
TEMPORARY__enableExportToCube = false;
|
|
25
25
|
|
|
26
|
+
/**
|
|
27
|
+
* This flag is to disable the Query Builder AI Agent chat panel toggle.
|
|
28
|
+
*/
|
|
29
|
+
TEMPORARY__disableQueryBuilderAgentChat = false;
|
|
30
|
+
|
|
26
31
|
/**
|
|
27
32
|
* This flag is to enable AG-GRID enterprise mode
|
|
28
33
|
*/
|
|
@@ -50,6 +55,7 @@ export class QueryBuilderConfig {
|
|
|
50
55
|
|
|
51
56
|
static readonly serialization = new SerializationFactory(
|
|
52
57
|
createModelSchema(QueryBuilderConfig, {
|
|
58
|
+
TEMPORARY__disableQueryBuilderAgentChat: optional(primitive()),
|
|
53
59
|
TEMPORARY__enableExportToCube: optional(primitive()),
|
|
54
60
|
TEMPORARY__enableGridEnterpriseMode: optional(primitive()),
|
|
55
61
|
legendMCPServiceURL: optional(primitive()),
|
package/src/index.ts
CHANGED
|
@@ -46,6 +46,7 @@ export {
|
|
|
46
46
|
QueryBuilderExecutionContextState,
|
|
47
47
|
QueryBuilderEmbeddedFromExecutionContextState,
|
|
48
48
|
} from './stores/QueryBuilderExecutionContextState.js';
|
|
49
|
+
export { QueryAgentChatState } from './stores/QueryAgentChatState.js';
|
|
49
50
|
export {
|
|
50
51
|
getTDSColumnDerivedProperyFromType,
|
|
51
52
|
buildTDSSortTypeExpression,
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026-present, Goldman Sachs
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
export abstract class QueryAgentChatState {
|
|
18
|
+
/**
|
|
19
|
+
* When set, the current lambda in the builder was produced by the Legend
|
|
20
|
+
* AI agent chat (via "Load query into builder") and this is the `trace_id`
|
|
21
|
+
* the agent surfaced in its response. Downstream telemetry providers can
|
|
22
|
+
* pick this up to correlate save / update / run events to the agent
|
|
23
|
+
* conversation that produced them. In-memory only; not persisted.
|
|
24
|
+
*
|
|
25
|
+
* NOTE: subclasses are responsible for registering this field as
|
|
26
|
+
* `observable` (and `setAgentChatTraceId` as `action`) in their own
|
|
27
|
+
* `makeObservable` call — mobx does not support multiple `makeObservable`
|
|
28
|
+
* invocations across an inheritance chain on the same instance.
|
|
29
|
+
*/
|
|
30
|
+
agentChatTraceId?: string | undefined;
|
|
31
|
+
|
|
32
|
+
setAgentChatTraceId(val: string | undefined): void {
|
|
33
|
+
this.agentChatTraceId = val;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
abstract abort(): void;
|
|
37
|
+
}
|
|
@@ -504,6 +504,7 @@ export class QueryBuilderResultState {
|
|
|
504
504
|
|
|
505
505
|
QueryBuilderTelemetryHelper.logEvent_QueryRunLaunched(
|
|
506
506
|
this.queryBuilderState.applicationStore.telemetryService,
|
|
507
|
+
this.queryBuilderState.getExtraTelemetryMetadata(),
|
|
507
508
|
);
|
|
508
509
|
|
|
509
510
|
const stopWatch = new StopWatch();
|
|
@@ -547,6 +548,7 @@ export class QueryBuilderResultState {
|
|
|
547
548
|
{},
|
|
548
549
|
report,
|
|
549
550
|
this.queryBuilderState.getStateInfo(),
|
|
551
|
+
this.queryBuilderState.getExtraTelemetryMetadata(),
|
|
550
552
|
);
|
|
551
553
|
QueryBuilderTelemetryHelper.logEvent_QueryRunSucceeded(
|
|
552
554
|
this.queryBuilderState.applicationStore.telemetryService,
|
|
@@ -567,6 +569,14 @@ export class QueryBuilderResultState {
|
|
|
567
569
|
if (error instanceof ExecutionError && error.executionTraceId) {
|
|
568
570
|
this.setExecutionTraceId(error.executionTraceId);
|
|
569
571
|
}
|
|
572
|
+
QueryBuilderTelemetryHelper.logEvent_QueryRunFailed(
|
|
573
|
+
this.queryBuilderState.applicationStore.telemetryService,
|
|
574
|
+
{
|
|
575
|
+
errorMessage:
|
|
576
|
+
error instanceof Error ? error.message : String(error),
|
|
577
|
+
...this.queryBuilderState.getExtraTelemetryMetadata(),
|
|
578
|
+
},
|
|
579
|
+
);
|
|
570
580
|
}
|
|
571
581
|
} finally {
|
|
572
582
|
this.setIsRunningQuery(false);
|
|
@@ -582,6 +592,10 @@ export class QueryBuilderResultState {
|
|
|
582
592
|
yield this.queryBuilderState.graphManagerState.graphManager.cancelUserExecutions(
|
|
583
593
|
true,
|
|
584
594
|
);
|
|
595
|
+
QueryBuilderTelemetryHelper.logEvent_QueryRunCancelled(
|
|
596
|
+
this.queryBuilderState.applicationStore.telemetryService,
|
|
597
|
+
this.queryBuilderState.getExtraTelemetryMetadata(),
|
|
598
|
+
);
|
|
585
599
|
} catch (error) {
|
|
586
600
|
// Don't notify users about success or failure
|
|
587
601
|
this.queryBuilderState.applicationStore.logService.error(
|
|
@@ -115,8 +115,10 @@ import {
|
|
|
115
115
|
} from './QueryBuilderExecutionContextState.js';
|
|
116
116
|
import type { QueryBuilderConfig } from '../graph-manager/QueryBuilderConfig.js';
|
|
117
117
|
import { QUERY_BUILDER_EVENT } from '../__lib__/QueryBuilderEvent.js';
|
|
118
|
+
import { QUERY_BUILDER_SETTING_KEY } from '../__lib__/QueryBuilderSetting.js';
|
|
118
119
|
import { QueryBuilderChangeHistoryState } from './QueryBuilderChangeHistoryState.js';
|
|
119
120
|
import { type QueryBuilderWorkflowState } from './query-workflow/QueryBuilderWorkFlowState.js';
|
|
121
|
+
import { type QueryAgentChatState } from './QueryAgentChatState.js';
|
|
120
122
|
import type { QueryBuilder_LegendApplicationPlugin_Extension } from './QueryBuilder_LegendApplicationPlugin_Extension.js';
|
|
121
123
|
import { createDataCubeViewerStateFromQueryBuilder } from './data-cube/QueryBuilderDataCubeHelper.js';
|
|
122
124
|
import type { QueryBuilderDataCubeViewerState } from './data-cube/QueryBuilderDataCubeViewerState.js';
|
|
@@ -214,6 +216,7 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
|
214
216
|
textEditorState: QueryBuilderTextEditorState;
|
|
215
217
|
unsupportedQueryState: QueryBuilderUnsupportedQueryState;
|
|
216
218
|
changeHistoryState: QueryBuilderChangeHistoryState;
|
|
219
|
+
isAgentChatOpened: boolean;
|
|
217
220
|
showFunctionsExplorerPanel = false;
|
|
218
221
|
showParametersPanel = false;
|
|
219
222
|
isEditingWatermark = false;
|
|
@@ -230,6 +233,7 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
|
230
233
|
QUERY_BUILDER_SUPPORTED_GET_ALL_FUNCTIONS.GET_ALL;
|
|
231
234
|
executionContextState: QueryBuilderExecutionContextState;
|
|
232
235
|
internalizeState?: QueryBuilderInternalizeState | undefined;
|
|
236
|
+
queryAgentChatState?: QueryAgentChatState | undefined;
|
|
233
237
|
|
|
234
238
|
// NOTE: This property contains information about workflow used
|
|
235
239
|
// to create this state. This should only be used to add additional
|
|
@@ -269,6 +273,8 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
|
269
273
|
changeHistoryState: observable,
|
|
270
274
|
executionContextState: observable,
|
|
271
275
|
sourceElement: observable,
|
|
276
|
+
queryAgentChatState: observable,
|
|
277
|
+
isAgentChatOpened: observable,
|
|
272
278
|
isLocalModeEnabled: observable,
|
|
273
279
|
dataCubeViewerState: observable,
|
|
274
280
|
getAllFunction: observable,
|
|
@@ -292,6 +298,7 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
|
292
298
|
openDataCubeEngine: action,
|
|
293
299
|
setIsCheckingEntitlments: action,
|
|
294
300
|
setSourceElement: action,
|
|
301
|
+
setIsAgentChatOpened: action,
|
|
295
302
|
setIsLocalModeEnabled: action,
|
|
296
303
|
setGetAllFunction: action,
|
|
297
304
|
setLambdaWriteMode: action,
|
|
@@ -304,6 +311,7 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
|
304
311
|
changeMapping: action,
|
|
305
312
|
changeRuntime: action,
|
|
306
313
|
setExecutionContextState: action,
|
|
314
|
+
setQueryAgentChatState: action,
|
|
307
315
|
|
|
308
316
|
rebuildWithQuery: action,
|
|
309
317
|
compileQuery: flow,
|
|
@@ -335,6 +343,12 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
|
335
343
|
this.config = config;
|
|
336
344
|
this.workflowState = workflowState;
|
|
337
345
|
this.sourceInfo = sourceInfo;
|
|
346
|
+
this.isAgentChatOpened =
|
|
347
|
+
(!this.config?.TEMPORARY__disableQueryBuilderAgentChat &&
|
|
348
|
+
this.applicationStore.settingService.getBooleanValue(
|
|
349
|
+
QUERY_BUILDER_SETTING_KEY.SHOW_QUERY_AGENT_CHAT_PANEL,
|
|
350
|
+
)) ??
|
|
351
|
+
false;
|
|
338
352
|
}
|
|
339
353
|
|
|
340
354
|
TEMPORARY_initializeExecContext(
|
|
@@ -457,6 +471,31 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
|
457
471
|
}
|
|
458
472
|
}
|
|
459
473
|
|
|
474
|
+
/**
|
|
475
|
+
* Aggregates extra telemetry metadata contributed by application plugins
|
|
476
|
+
* via `getExtraQueryBuilderTelemetryMetadataProviders`. Callers spread the
|
|
477
|
+
* result into their event payloads so telemetry helpers stay free of
|
|
478
|
+
* plugin-specific fields (e.g. agent chat trace ids).
|
|
479
|
+
*/
|
|
480
|
+
getExtraTelemetryMetadata(): Record<string, unknown> {
|
|
481
|
+
const providers = this.applicationStore.pluginManager
|
|
482
|
+
.getApplicationPlugins()
|
|
483
|
+
.flatMap(
|
|
484
|
+
(plugin) =>
|
|
485
|
+
(
|
|
486
|
+
plugin as QueryBuilder_LegendApplicationPlugin_Extension
|
|
487
|
+
).getExtraQueryBuilderTelemetryMetadataProviders?.() ?? [],
|
|
488
|
+
);
|
|
489
|
+
const metadata: Record<string, unknown> = {};
|
|
490
|
+
for (const provider of providers) {
|
|
491
|
+
const extra = provider(this);
|
|
492
|
+
if (extra) {
|
|
493
|
+
Object.assign(metadata, extra);
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
return metadata;
|
|
497
|
+
}
|
|
498
|
+
|
|
460
499
|
/**
|
|
461
500
|
* Gets information about the current queryBuilderState.
|
|
462
501
|
* This information can be used as a part of analytics
|
|
@@ -482,6 +521,17 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
|
482
521
|
return undefined;
|
|
483
522
|
}
|
|
484
523
|
|
|
524
|
+
setIsAgentChatOpened(val: boolean): void {
|
|
525
|
+
if (val && this.config?.TEMPORARY__disableQueryBuilderAgentChat) {
|
|
526
|
+
return;
|
|
527
|
+
}
|
|
528
|
+
this.isAgentChatOpened = val;
|
|
529
|
+
this.applicationStore.settingService.persistValue(
|
|
530
|
+
QUERY_BUILDER_SETTING_KEY.SHOW_QUERY_AGENT_CHAT_PANEL,
|
|
531
|
+
val,
|
|
532
|
+
);
|
|
533
|
+
}
|
|
534
|
+
|
|
485
535
|
setIsLocalModeEnabled(val: boolean): void {
|
|
486
536
|
this.isLocalModeEnabled = val;
|
|
487
537
|
}
|
|
@@ -496,6 +546,10 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
|
496
546
|
this.internalizeState = val;
|
|
497
547
|
}
|
|
498
548
|
|
|
549
|
+
setQueryAgentChatState(val: QueryAgentChatState | undefined): void {
|
|
550
|
+
this.queryAgentChatState = val;
|
|
551
|
+
}
|
|
552
|
+
|
|
499
553
|
setShowFunctionsExplorerPanel(val: boolean): void {
|
|
500
554
|
this.showFunctionsExplorerPanel = val;
|
|
501
555
|
}
|
|
@@ -67,6 +67,10 @@ export type WarehouseEntitlementRender = {
|
|
|
67
67
|
renderer: (dataAccessState: DataAccessState) => React.ReactNode;
|
|
68
68
|
};
|
|
69
69
|
|
|
70
|
+
export type QueryAgentChatRenderer = (
|
|
71
|
+
queryBuilderState: QueryBuilderState,
|
|
72
|
+
) => React.ReactNode;
|
|
73
|
+
|
|
70
74
|
export type TemplateQueryPanelContentRenderer = (
|
|
71
75
|
queryBuilderState: QueryBuilderState,
|
|
72
76
|
) => React.ReactNode;
|
|
@@ -97,6 +101,16 @@ export type QueryBuilderPropagateExecutionContextChangeHelper = (
|
|
|
97
101
|
isGraphBuildingNotRequired?: boolean,
|
|
98
102
|
) => (() => Promise<void>) | undefined;
|
|
99
103
|
|
|
104
|
+
/**
|
|
105
|
+
* Contributes extra key/value pairs that should ride along with query-builder
|
|
106
|
+
* telemetry events (e.g. run query launch/success/failure, save query, ...).
|
|
107
|
+
* The returned bag is shallow-merged into the event payload by the caller;
|
|
108
|
+
* return `undefined` (or an empty object) to contribute nothing.
|
|
109
|
+
*/
|
|
110
|
+
export type QueryBuilderTelemetryMetadataProvider = (
|
|
111
|
+
queryBuilderState: QueryBuilderState,
|
|
112
|
+
) => Record<string, unknown> | undefined;
|
|
113
|
+
|
|
100
114
|
export interface QueryBuilder_LegendApplicationPlugin_Extension
|
|
101
115
|
extends LegendApplicationPlugin {
|
|
102
116
|
/**
|
|
@@ -131,6 +145,11 @@ export interface QueryBuilder_LegendApplicationPlugin_Extension
|
|
|
131
145
|
*/
|
|
132
146
|
getExtraQueryUsageConfigurations?(): QueryExportUsageConfiguration[];
|
|
133
147
|
|
|
148
|
+
/**
|
|
149
|
+
* Get the list of query AI agent chat configurations.
|
|
150
|
+
*/
|
|
151
|
+
getExtraQueryAgentChatRenderers?(): QueryAgentChatRenderer[];
|
|
152
|
+
|
|
134
153
|
/**
|
|
135
154
|
* Get the list of template query panel content render
|
|
136
155
|
*/
|
|
@@ -160,4 +179,13 @@ export interface QueryBuilder_LegendApplicationPlugin_Extension
|
|
|
160
179
|
* Get the list of Query Builder Propagate Execution Context Change Helper
|
|
161
180
|
*/
|
|
162
181
|
getExtraQueryBuilderPropagateExecutionContextChangeHelper?(): QueryBuilderPropagateExecutionContextChangeHelper[];
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Get the list of providers that contribute extra key/value metadata to
|
|
185
|
+
* query-builder telemetry event payloads (agent-chat trace ids, custom
|
|
186
|
+
* environment tags, ...). Callers spread the aggregated metadata into
|
|
187
|
+
* their own event payloads via
|
|
188
|
+
* `QueryBuilderState.getExtraTelemetryMetadata()`.
|
|
189
|
+
*/
|
|
190
|
+
getExtraQueryBuilderTelemetryMetadataProviders?(): QueryBuilderTelemetryMetadataProvider[];
|
|
163
191
|
}
|
package/tsconfig.json
CHANGED
|
@@ -80,6 +80,7 @@
|
|
|
80
80
|
"./src/graph-manager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.ts",
|
|
81
81
|
"./src/graph-manager/protocol/pure/v1/V1_QueryBuilder_PureGraphManagerExtension.ts",
|
|
82
82
|
"./src/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.ts",
|
|
83
|
+
"./src/stores/QueryAgentChatState.ts",
|
|
83
84
|
"./src/stores/QueryBuilderChangeDetectionState.ts",
|
|
84
85
|
"./src/stores/QueryBuilderChangeHistoryState.ts",
|
|
85
86
|
"./src/stores/QueryBuilderCommand.ts",
|
|
@@ -230,6 +231,7 @@
|
|
|
230
231
|
"./src/stores/workflows/accessor/AccessorQueryBuilderHelper.ts",
|
|
231
232
|
"./src/stores/workflows/accessor/AccessorQueryBuilderState.ts",
|
|
232
233
|
"./src/stores/workflows/dataProduct/DataProductQueryBuilderState.ts",
|
|
234
|
+
"./src/components/QueryAgentChat.tsx",
|
|
233
235
|
"./src/components/QueryBuilder.tsx",
|
|
234
236
|
"./src/components/QueryBuilderConstantExpressionPanel.tsx",
|
|
235
237
|
"./src/components/QueryBuilderDiffPanel.tsx",
|