@c8y/ngx-components 1023.68.0 → 1023.68.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.
Files changed (38) hide show
  1. package/ai/agent-chat/index.d.ts +28 -5
  2. package/ai/agent-chat/index.d.ts.map +1 -1
  3. package/context-dashboard/index.d.ts +1 -0
  4. package/context-dashboard/index.d.ts.map +1 -1
  5. package/echart/index.d.ts +6 -2
  6. package/echart/index.d.ts.map +1 -1
  7. package/echart/models/index.d.ts +6 -1
  8. package/echart/models/index.d.ts.map +1 -1
  9. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs +33 -5
  10. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs.map +1 -1
  11. package/fesm2022/c8y-ngx-components-ai-agents-html.mjs +4 -0
  12. package/fesm2022/c8y-ngx-components-ai-agents-html.mjs.map +1 -1
  13. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +1 -0
  14. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  15. package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -1
  16. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  17. package/fesm2022/c8y-ngx-components-global-context.mjs +67 -10
  18. package/fesm2022/c8y-ngx-components-global-context.mjs.map +1 -1
  19. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +4 -106
  20. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs.map +1 -1
  21. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs +7 -2
  22. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs.map +1 -1
  23. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +67 -38
  24. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  25. package/fesm2022/c8y-ngx-components.mjs +5 -12
  26. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  27. package/global-context/index.d.ts +7 -1
  28. package/global-context/index.d.ts.map +1 -1
  29. package/index.d.ts +8 -1
  30. package/index.d.ts.map +1 -1
  31. package/locales/locales.pot +3 -0
  32. package/package.json +1 -1
  33. package/widgets/implementations/alarms/index.d.ts +4 -0
  34. package/widgets/implementations/alarms/index.d.ts.map +1 -1
  35. package/widgets/implementations/datapoints-graph/index.d.ts +25 -17
  36. package/widgets/implementations/datapoints-graph/index.d.ts.map +1 -1
  37. package/widgets/implementations/datapoints-list/index.d.ts +2 -0
  38. package/widgets/implementations/datapoints-list/index.d.ts.map +1 -1
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { OnInit, OnDestroy, Type, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
3
3
  import { ClientAgentDefinition, ToolResult, AIMessageStreamSteps, AgentStep, AIMessage } from '@c8y/ngx-components/ai';
4
- import { BehaviorSubject, OperatorFunction } from 'rxjs';
4
+ import { BehaviorSubject, OperatorFunction, Observable } from 'rxjs';
5
5
 
6
6
  declare class AgentChatComponent implements OnInit, OnDestroy {
7
7
  private _agent;
@@ -80,11 +80,34 @@ declare class WidgetAiChatSectionComponent implements OnInit {
80
80
  headline: "Welcome!";
81
81
  title: string;
82
82
  welcomeText: any;
83
- variables: {
84
- [key: string]: any;
85
- };
86
83
  useContextAsVariable: boolean;
87
84
  contextVariableName: string;
85
+ private variables$;
86
+ /**
87
+ * If set, the variables will be loaded async on each round-trip.
88
+ * This is useful if the variables depend on some async data source or if they need to be updated on each round-trip.
89
+ *
90
+ * @example
91
+ * ```ts
92
+ * variables = combineLatest([
93
+ * this.someService.getData(),
94
+ * this.anotherService.getOtherData()
95
+ * ]).pipe(
96
+ * map(([data, otherData]) => ({
97
+ * myVarOne: data,
98
+ * myVarTwo: otherData
99
+ * }))
100
+ * );
101
+ * ```
102
+ */
103
+ set variables(val: Observable<{
104
+ [key: string]: any;
105
+ }> | {
106
+ [key: string]: any;
107
+ });
108
+ get variables(): Observable<{
109
+ [key: string]: any;
110
+ }>;
88
111
  _renderStepComponent: Type<any>;
89
112
  private readonly widgetConfigService;
90
113
  private readonly alertService;
@@ -112,7 +135,7 @@ declare class WidgetAiChatSectionComponent implements OnInit {
112
135
  */
113
136
  toolResultHandler(tool: ToolResult): void;
114
137
  static ɵfac: i0.ɵɵFactoryDeclaration<WidgetAiChatSectionComponent, never>;
115
- static ɵcmp: i0.ɵɵComponentDeclaration<WidgetAiChatSectionComponent, "c8y-widget-ai-chat-section", never, { "suggestions": { "alias": "suggestions"; "required": false; }; "agent": { "alias": "agent"; "required": false; }; "headline": { "alias": "headline"; "required": false; }; "title": { "alias": "title"; "required": false; }; "welcomeText": { "alias": "welcomeText"; "required": false; }; "variables": { "alias": "variables"; "required": false; }; "useContextAsVariable": { "alias": "useContextAsVariable"; "required": false; }; "contextVariableName": { "alias": "contextVariableName"; "required": false; }; "loadRenderStepComponent": { "alias": "loadRenderStepComponent"; "required": false; }; }, {}, never, never, true, never>;
138
+ static ɵcmp: i0.ɵɵComponentDeclaration<WidgetAiChatSectionComponent, "c8y-widget-ai-chat-section", never, { "suggestions": { "alias": "suggestions"; "required": false; }; "agent": { "alias": "agent"; "required": false; }; "headline": { "alias": "headline"; "required": false; }; "title": { "alias": "title"; "required": false; }; "welcomeText": { "alias": "welcomeText"; "required": false; }; "useContextAsVariable": { "alias": "useContextAsVariable"; "required": false; }; "contextVariableName": { "alias": "contextVariableName"; "required": false; }; "variables": { "alias": "variables"; "required": false; }; "loadRenderStepComponent": { "alias": "loadRenderStepComponent"; "required": false; }; }, {}, never, never, true, never>;
116
139
  }
117
140
 
118
141
  export { AgentChatComponent, AgentStepFeedbackComponent, WidgetAiChatSectionComponent };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sources":["../../../ai/agent-chat/agent-chat.component.ts","../../../ai/agent-chat/agent-step-feedback.component.ts","../../../ai/agent-chat/widget-ai-chat-section.component.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":";;;;;AAgDA,cAAA,kBAAA,YAAA,MAAA,EAAA,SAAA;;AAmBE,8BAAA,qBAAA;AAWS;;;;AAA6D;;;;AAI7D;AACA;AACA,yBAAA,IAAA;AAEC,oBAAA,YAAA;AACA,mBAAA,YAAA;AACA,qBAAA,YAAA;AACA,kBAAA,YAAA,CAAA,UAAA;AAEV;AAEA;;AAEG;AACH,eAAA,eAAA,CAAA,oBAAA;;AAIA,qBAAA,qBAAA;AACA;AACA;AACA;AACA;;;;;;;;;AAcA,kCAAA,gBAAA,CAAA,SAAA;AAEI,iBAAA,IAAA;;AAAgD;AAc9C,gBAAA,OAAA;;AAkDN;;AAYA,2BAAA,oBAAA;;;;AAsEA;AAoCA;;;AAyCD;;ACzUD,cAAA,0BAAA,YAAA,MAAA,EAAA,SAAA;;;AAsBW;AACA;AACA;AAET;AAMA,yBAAA,aAAA;AAMA,gCAAA,SAAA;;;AAoBD;;AC5DD,cAAA,4BAAA,YAAA,MAAA;;;;AAQsD;AAEpD,oBAAA,qBAAA;AAEA;;AAIA;AAEA;AAAa;;AAEb;AAEA;AACA,0BAAA,IAAA;AAEA;AACA;AACA;AAEA;;;;;AAKG;;AAKH;;;;AAIG;;AAGH;;AAEG;AACG,gBAAA,OAAA;AAWN;;;AAGG;;;;AAoBJ;;;;"}
1
+ {"version":3,"file":"index.d.ts","sources":["../../../ai/agent-chat/agent-chat.component.ts","../../../ai/agent-chat/agent-step-feedback.component.ts","../../../ai/agent-chat/widget-ai-chat-section.component.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":";;;;;AAgDA,cAAA,kBAAA,YAAA,MAAA,EAAA,SAAA;;AAmBE,8BAAA,qBAAA;AAWS;;;;AAA6D;;;;AAI7D;AACA;AACA,yBAAA,IAAA;AAEC,oBAAA,YAAA;AACA,mBAAA,YAAA;AACA,qBAAA,YAAA;AACA,kBAAA,YAAA,CAAA,UAAA;AAEV;AAEA;;AAEG;AACH,eAAA,eAAA,CAAA,oBAAA;;AAIA,qBAAA,qBAAA;AACA;AACA;AACA;AACA;;;;;;;;;AAcA,kCAAA,gBAAA,CAAA,SAAA;AAEI,iBAAA,IAAA;;AAAgD;AAc9C,gBAAA,OAAA;;AAkDN;;AAYA,2BAAA,oBAAA;;;;AAsEA;AAoCA;;;AAyCD;;ACzUD,cAAA,0BAAA,YAAA,MAAA,EAAA,SAAA;;;AAsBW;AACA;AACA;AAET;AAMA,yBAAA,aAAA;AAMA,gCAAA,SAAA;;;AAoBD;;AC3DD,cAAA,4BAAA,YAAA,MAAA;;;;AAQsD;AAEpD,oBAAA,qBAAA;AAEA;;AAIA;AAEA;AAEA;;AAGA;;;;;;;;;;;;;;;;AAgBG;AACH,uBAAA,UAAA;AACgC;AAAoB;AAAM;;;AAO5B;AAAoB;AAIlD,0BAAA,IAAA;AAEA;AACA;AACA;AAEA;;;;;AAKG;;AAKH;;;;AAIG;;AAGH;;AAEG;AACG,gBAAA,OAAA;AAWN;;;AAGG;;;;AAoBJ;;;;"}
@@ -50,6 +50,7 @@ declare const DASHBOARD_SETTINGS_CHANGES: {
50
50
  readonly widgetMargin: "widget margin";
51
51
  readonly icon: "icon";
52
52
  readonly name: "name";
53
+ readonly description: "description";
53
54
  readonly priority: "priority";
54
55
  readonly c8y_IsNavigatorNode: "navigator item";
55
56
  readonly translateWidgetTitle: "translate widget title";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sources":["../../context-dashboard/add-dashboard.component.ts","../../context-dashboard/add-dashboard.factory.ts","../../context-dashboard/context-dashboard.model.ts","../../context-dashboard/context-dashboard.service.ts","../../context-dashboard/dashboard-detail.service.ts","../../context-dashboard/dashboard-detail.component.ts","../../context-dashboard/memento/dashboard-originator.service.ts","../../context-dashboard/memento/dashboard-caretaker.service.ts","../../context-dashboard/memento/dashboard-edit-mode.service.ts","../../context-dashboard/widget.service.ts","../../context-dashboard/context-dashboard.component.ts","../../context-dashboard/widget-config/appearance-settings.component.ts","../../context-dashboard/type-dashboard-info/type-dashboard-info.component.ts","../../context-dashboard/widget-config-hook/widget-config-hook.model.ts","../../context-dashboard/widget-config-hook/widget-config-hook.service.ts","../../context-dashboard/widget-config.service.ts","../../context-dashboard/widget-config/widget-config-root.component.ts","../../context-dashboard/widget-config.component.ts","../../context-dashboard/widget-config/widget-preview.component.ts","../../context-dashboard/widget-config/widget-config-section.component.ts","../../context-dashboard/widget-config/widget-preview-wrapper.component.ts","../../context-dashboard/paste-dashboard-action.component.ts","../../context-dashboard/context-dashboard.module.ts","../../context-dashboard/dashboard-action-bar.factory.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.component.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.module.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.ts","../../context-dashboard/widget-config/widget-config-appearance.component.ts","../../context-dashboard/widget-config/widget-config-general.component.ts","../../context-dashboard/widget-config/widget-asset-selector.component.ts","../../context-dashboard/new-dashboard.guard.ts","../../context-dashboard/widget-config/global-context-section.component.ts","../../context-dashboard/widget-config/widget-config-feedback.component.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sources":["../../context-dashboard/add-dashboard.component.ts","../../context-dashboard/add-dashboard.factory.ts","../../context-dashboard/context-dashboard.model.ts","../../context-dashboard/context-dashboard.service.ts","../../context-dashboard/dashboard-detail.service.ts","../../context-dashboard/dashboard-detail.component.ts","../../context-dashboard/memento/dashboard-originator.service.ts","../../context-dashboard/memento/dashboard-caretaker.service.ts","../../context-dashboard/memento/dashboard-edit-mode.service.ts","../../context-dashboard/widget.service.ts","../../context-dashboard/context-dashboard.component.ts","../../context-dashboard/widget-config/appearance-settings.component.ts","../../context-dashboard/type-dashboard-info/type-dashboard-info.component.ts","../../context-dashboard/widget-config-hook/widget-config-hook.model.ts","../../context-dashboard/widget-config-hook/widget-config-hook.service.ts","../../context-dashboard/widget-config.service.ts","../../context-dashboard/widget-config/widget-config-root.component.ts","../../context-dashboard/widget-config.component.ts","../../context-dashboard/widget-config/widget-preview.component.ts","../../context-dashboard/widget-config/widget-config-section.component.ts","../../context-dashboard/widget-config/widget-preview-wrapper.component.ts","../../context-dashboard/paste-dashboard-action.component.ts","../../context-dashboard/context-dashboard.module.ts","../../context-dashboard/dashboard-action-bar.factory.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.component.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.module.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.ts","../../context-dashboard/widget-config/widget-config-appearance.component.ts","../../context-dashboard/widget-config/widget-config-general.component.ts","../../context-dashboard/widget-config/widget-asset-selector.component.ts","../../context-dashboard/new-dashboard.guard.ts","../../context-dashboard/widget-config/global-context-section.component.ts","../../context-dashboard/widget-config/widget-config-feedback.component.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":"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"}
package/echart/index.d.ts CHANGED
@@ -7,8 +7,8 @@ import { AlarmDetails, EventDetails, SelectedDatapoint } from '@c8y/ngx-componen
7
7
  import { TooltipFormatterCallback, ECBasicOption } from 'echarts/types/src/util/types';
8
8
  import { TopLevelFormatterParams } from 'echarts/types/src/component/tooltip/TooltipModel';
9
9
  import { DateTimeContext, TimeInterval, RefreshOption, GlobalContextDisplayMode } from '@c8y/ngx-components/global-context';
10
+ import { WidgetDisplaySettings, DynamicComponentAlertAggregator } from '@c8y/ngx-components';
10
11
  import { Observable } from 'rxjs';
11
- import { DynamicComponentAlertAggregator } from '@c8y/ngx-components';
12
12
  import { Interval } from '@c8y/ngx-components/interval-picker';
13
13
  import * as _c8y_ngx_components_dist_global_context from '@c8y/ngx-components/dist/global-context';
14
14
  import { SafeHtml } from '@angular/platform-browser';
@@ -18,8 +18,9 @@ type DatapointsGraphKPIDetails = KPIDetails & {
18
18
  renderType?: DatapointChartRenderType;
19
19
  };
20
20
  type DatapointsGraphWidgetConfig = {
21
+ eventSourceId?: string | null;
21
22
  activeAlarmTypesOutOfRange?: string[];
22
- aggregatedDatapoint?: DatapointsGraphKPIDetails;
23
+ aggregatedDatapoint?: DatapointsGraphKPIDetails | null;
23
24
  alarmsEventsConfigs?: AlarmOrEventExtended[];
24
25
  datapoints?: DatapointsGraphKPIDetails[] | null;
25
26
  dataPointLegendDisplay?: string | null;
@@ -30,6 +31,8 @@ type DatapointsGraphWidgetConfig = {
30
31
  displayDateSelection?: boolean | null;
31
32
  displayMarkedLine?: boolean;
32
33
  displayMarkedPoint?: boolean;
34
+ displaySettings?: WidgetDisplaySettings;
35
+ isGlobalContextReady?: boolean;
33
36
  mergeMatchingDatapoints?: boolean;
34
37
  forceMergeDatapoints?: boolean;
35
38
  setYaxisStartToZero?: boolean;
@@ -37,6 +40,7 @@ type DatapointsGraphWidgetConfig = {
37
40
  realtime?: boolean | null;
38
41
  showLabelAndUnit?: boolean;
39
42
  showSlider?: boolean | null;
43
+ source?: string | null;
40
44
  sliderChange?: boolean | null;
41
45
  xAxisSplitLines?: boolean | null;
42
46
  yAxisSplitLines?: boolean | null;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sources":["../../echart/models/datapoints-graph-widget.model.ts","../../echart/models/chart.model.ts","../../echart/models/svg-icons.model.ts","../../echart/charts.component.ts","../../echart/services/chart-alarms.service.ts","../../echart/services/chart-events.service.ts","../../echart/services/chart-helpers.service.ts","../../echart/chart-alerts/chart-alerts.component.ts","../../echart/select-aggregated-datapoint/select-aggregated-datapoint.component.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;;;;AAmBM;;;;AAKA;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AAOA;;AAEA;AACA;AACA;AACA;;;AAGA;;;;;;;;;;AAWI;;;;;;;;;;AAUJ;;;AAIF;AAyBM;;AAEJ;AACA;;AAGI;;;AAIN;;AAEG;;AAGG;AAIN;AACE;AACA;AACD;AAED;AACM;;AAEL;AAED;;;;AAIM;;;;;;;AAQL;AAED;;;;;AAUE;;;;;AAGD;;AAGC;;AAEA;;AAEE;;AAEF;;;AACD;;;;;;;AAQC;AACA;AACD;AAEK;AACA;AAEA;AAEA;AAEN;;;;AAKA;;;;;;;;;;;;;AAcM;AACA;AAEA;;;;AAKA;;;;;;;;;;;AAYL;AAED;;;;;;;;AAUE;AACA;AACD;;ACzOD;;;;;;AAMG;AACH;AACE;;;;AAIA;;;AACD;;;AAIA;;;AAIA;AAEK;AACA;AACJ;AACE;AACD;AACF;;AAGC;AACA;AACD;AAED;AACE;AACA;AACA;AACD;;AC3CD;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACD;AAED;;;;;;;;;;;AC4DA;AA4BE;;AAEA;;;;;;;;AAQA;;;;;;AAMK;AACK;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEV;;;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AAsDA;;;;;AA2JuB;;;AAA4B;AAiDnD;AAOA;AAIA;AAwBA;AA6BA;AAWA;;;;;;AAMG;AACH;AAoCA;;;;;AAKG;AACH;;AA6CA;AAeA;AA0BA;;AA8DA;;;AA6MA;AAiEA;AAsDA;AAkBA;AAWA;AAYA;;;AA6BD;;ACriCD;AAEc;AAAQ;AAEpB;;;;;AAKG;AACG;;;AAqCP;;AC/CD;AAEc;AAAQ;AAEpB;;;;;AAKG;AACG;;;AAuBP;;AChCD;AAEE;;;;AAIG;;;;;;;;;;;AAcH;AAcA;;;AAGD;;AC9BD;;AAQmC;AAEjC;;;;AAQD;;ACVD;;AAqBW;AACC;AAEV;;AAGA;;;AAiBA;;;AAgBD;;;"}
1
+ {"version":3,"file":"index.d.ts","sources":["../../echart/models/datapoints-graph-widget.model.ts","../../echart/models/chart.model.ts","../../echart/models/svg-icons.model.ts","../../echart/charts.component.ts","../../echart/services/chart-alarms.service.ts","../../echart/services/chart-events.service.ts","../../echart/services/chart-helpers.service.ts","../../echart/chart-alerts/chart-alerts.component.ts","../../echart/select-aggregated-datapoint/select-aggregated-datapoint.component.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;;;;AAoBM;;;;AAKA;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;AASA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;;;;;;;;;;AAWI;;;;;;;;;;AAUJ;;;AAIF;AAyBM;;AAEJ;AACA;;AAGI;;;AAIN;;AAEG;;AAGG;AAIN;AACE;AACA;AACD;AAED;AACM;;AAEL;AAED;;;;AAIM;;;;;;;AAQL;AAED;;;;;AAUE;;;;;AAGD;;AAGC;;AAEA;;AAEE;;AAEF;;;AACD;;;;;;;AAQC;AACA;AACD;AAEK;AACA;AAEA;AAEA;AAEN;;;;AAKA;;;;;;;;;;;;;AAcM;AACA;AAEA;;;;AAKA;;;;;;;;;;;AAYL;AAED;;;;;;;;AAUE;AACA;AACD;;AC9OD;;;;;;AAMG;AACH;AACE;;;;AAIA;;;AACD;;;AAIA;;;AAIA;AAEK;AACA;AACJ;AACE;AACD;AACF;;AAGC;AACA;AACD;AAED;AACE;AACA;AACA;AACD;;AC3CD;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACD;AAED;;;;;;;;;;;AC4DA;AA4BE;;AAEA;;;;;;;;AAQA;;;;;;AAMK;AACK;AAGA;AACA;AACA;AACA;AACA;AACA;;AAEV;;;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;AAsDA;;;;;AA2JuB;;;AAA4B;AAiDnD;AAOA;AAIA;AAwBA;AA6BA;AAWA;;;;;;AAMG;AACH;AAoCA;;;;;AAKG;AACH;;AA6CA;AAeA;AA0BA;;AA8DA;;;AA6MA;AAiEA;AAsDA;AAkBA;AAWA;AAYA;;;AA6BD;;ACriCD;AAEc;AAAQ;AAEpB;;;;;AAKG;AACG;;;AAqCP;;AC/CD;AAEc;AAAQ;AAEpB;;;;;AAKG;AACG;;;AAuBP;;AChCD;AAEE;;;;AAIG;;;;;;;;;;;AAcH;AAcA;;;AAGD;;AC9BD;;AAQmC;AAEjC;;;;AAQD;;ACVD;;AAqBW;AACC;AAEV;;AAGA;;;AAiBA;;;AAgBD;;;"}
@@ -5,14 +5,16 @@ import { AlarmDetails, EventDetails } from '@c8y/ngx-components/alarm-event-sele
5
5
  import { TooltipFormatterCallback, ECBasicOption } from 'echarts/types/src/util/types';
6
6
  import { TopLevelFormatterParams } from 'echarts/types/src/component/tooltip/TooltipModel';
7
7
  import { DateTimeContext, TimeInterval, RefreshOption, GlobalContextDisplayMode } from '@c8y/ngx-components/global-context';
8
+ import { WidgetDisplaySettings } from '@c8y/ngx-components';
8
9
 
9
10
  type DatapointsGraphKPIDetails = KPIDetails & {
10
11
  lineType?: DatapointLineType;
11
12
  renderType?: DatapointChartRenderType;
12
13
  };
13
14
  type DatapointsGraphWidgetConfig = {
15
+ eventSourceId?: string | null;
14
16
  activeAlarmTypesOutOfRange?: string[];
15
- aggregatedDatapoint?: DatapointsGraphKPIDetails;
17
+ aggregatedDatapoint?: DatapointsGraphKPIDetails | null;
16
18
  alarmsEventsConfigs?: AlarmOrEventExtended[];
17
19
  datapoints?: DatapointsGraphKPIDetails[] | null;
18
20
  dataPointLegendDisplay?: string | null;
@@ -23,6 +25,8 @@ type DatapointsGraphWidgetConfig = {
23
25
  displayDateSelection?: boolean | null;
24
26
  displayMarkedLine?: boolean;
25
27
  displayMarkedPoint?: boolean;
28
+ displaySettings?: WidgetDisplaySettings;
29
+ isGlobalContextReady?: boolean;
26
30
  mergeMatchingDatapoints?: boolean;
27
31
  forceMergeDatapoints?: boolean;
28
32
  setYaxisStartToZero?: boolean;
@@ -30,6 +34,7 @@ type DatapointsGraphWidgetConfig = {
30
34
  realtime?: boolean | null;
31
35
  showLabelAndUnit?: boolean;
32
36
  showSlider?: boolean | null;
37
+ source?: string | null;
33
38
  sliderChange?: boolean | null;
34
39
  xAxisSplitLines?: boolean | null;
35
40
  yAxisSplitLines?: boolean | null;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sources":["../../../echart/models/datapoints-graph-widget.model.ts","../../../echart/models/chart.model.ts","../../../echart/models/svg-icons.model.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":";;;;;;;;AAmBM;;;;AAKA;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;AAOA;;AAEA;AACA;AACA;AACA;;;AAGA;;;;;;;;;;AAWI;;;;;;;;;;AAUJ;;;AAIF;AAyBM;;AAEJ;AACA;;AAGI;;;AAIN;;AAEG;;AAGG;AAIN;AACE;AACA;AACD;AAED;AACM;;AAEL;AAED;;;;AAIM;;;;;;;AAQL;AAED;;;;;AAUE;;;;;AAGD;;AAGC;;AAEA;;AAEE;;AAEF;;;AACD;;;;;;;AAQC;AACA;AACD;AAEK;AACA;AAEA;AAEA;AAEN;;;;AAKA;;;;;;;;;;;;;AAcM;AACA;AAEA;;;;AAKA;;;;;;;;;;;AAYL;AAED;;;;;;;;AAUE;AACA;AACD;;ACzOD;;;;;;AAMG;AACH;AACE;;;;AAIA;;;AACD;;;AAIA;;;AAIA;AAEK;AACA;AACJ;AACE;AACD;AACF;;AAGC;AACA;AACD;AAED;AACE;AACA;AACA;AACD;;AC3CD;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACD;AAED;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.d.ts","sources":["../../../echart/models/datapoints-graph-widget.model.ts","../../../echart/models/chart.model.ts","../../../echart/models/svg-icons.model.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":";;;;;;;;;AAoBM;;;;AAKA;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;;;;;;;AASA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;;;;;;;;;;AAWI;;;;;;;;;;AAUJ;;;AAIF;AAyBM;;AAEJ;AACA;;AAGI;;;AAIN;;AAEG;;AAGG;AAIN;AACE;AACA;AACD;AAED;AACM;;AAEL;AAED;;;;AAIM;;;;;;;AAQL;AAED;;;;;AAUE;;;;;AAGD;;AAGC;;AAEA;;AAEE;;AAEF;;;AACD;;;;;;;AAQC;AACA;AACD;AAEK;AACA;AAEA;AAEA;AAEN;;;;AAKA;;;;;;;;;;;;;AAcM;AACA;AAEA;;;;AAKA;;;;;;;;;;;AAYL;AAED;;;;;;;;AAUE;AACA;AACD;;AC9OD;;;;;;AAMG;AACH;AACE;;;;AAIA;;;AACD;;;AAIA;;;AAIA;AAEK;AACA;AACJ;AACE;AACD;AACF;;AAGC;AACA;AACD;AAED;AACE;AACA;AACA;AACD;;AC3CD;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACD;AAED;;;;;;;;;;;;"}
@@ -5,7 +5,7 @@ import { ListGroupComponent, ListItemComponent, ListItemCollapseComponent, ListI
5
5
  import { AIService } from '@c8y/ngx-components/ai';
6
6
  import { AiChatComponent, AiChatSuggestionComponent, AiChatMessageComponent, AiChatMessageActionComponent } from '@c8y/ngx-components/ai/ai-chat';
7
7
  import { gettext } from '@c8y/ngx-components/gettext';
8
- import { BehaviorSubject, map, firstValueFrom, of } from 'rxjs';
8
+ import { BehaviorSubject, map, firstValueFrom, of, isObservable } from 'rxjs';
9
9
  import { WidgetConfigService, WidgetConfigFeedbackComponent } from '@c8y/ngx-components/context-dashboard';
10
10
 
11
11
  class AgentStepFeedbackComponent {
@@ -352,6 +352,34 @@ class WidgetAiChatSectionComponent {
352
352
  */
353
353
  this.onToolResult = () => undefined;
354
354
  }
355
+ /**
356
+ * If set, the variables will be loaded async on each round-trip.
357
+ * This is useful if the variables depend on some async data source or if they need to be updated on each round-trip.
358
+ *
359
+ * @example
360
+ * ```ts
361
+ * variables = combineLatest([
362
+ * this.someService.getData(),
363
+ * this.anotherService.getOtherData()
364
+ * ]).pipe(
365
+ * map(([data, otherData]) => ({
366
+ * myVarOne: data,
367
+ * myVarTwo: otherData
368
+ * }))
369
+ * );
370
+ * ```
371
+ */
372
+ set variables(val) {
373
+ if (isObservable(val)) {
374
+ this.variables$ = val;
375
+ }
376
+ else {
377
+ this.variables$ = of(val);
378
+ }
379
+ }
380
+ get variables() {
381
+ return this.variables$;
382
+ }
355
383
  /**
356
384
  * @ignore
357
385
  */
@@ -386,11 +414,11 @@ class WidgetAiChatSectionComponent {
386
414
  }
387
415
  }
388
416
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: WidgetAiChatSectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
389
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: WidgetAiChatSectionComponent, isStandalone: true, selector: "c8y-widget-ai-chat-section", inputs: { suggestions: "suggestions", agent: "agent", headline: "headline", title: "title", welcomeText: "welcomeText", variables: "variables", useContextAsVariable: "useContextAsVariable", contextVariableName: "contextVariableName", loadRenderStepComponent: "loadRenderStepComponent" }, ngImport: i0, template: "<c8y-widget-config-feedback>\n <div\n class=\"m-l-4 btn-ai btn-ai-hint btn-sm\"\n [title]=\"'AI code assistant' | translate\"\n >\n <span></span>\n </div>\n</c8y-widget-config-feedback>\n\n<c8y-agent-chat\n [title]=\"title | translate\"\n [headline]=\"headline | translate\"\n [welcomeText]=\"welcomeText | translate\"\n #agentChat\n [suggestions]=\"(agentChat.messages$ | async)?.length === 0 ? suggestions : []\"\n [agent]=\"agent\"\n [variables]=\"variables\"\n [stepRenderComponent]=\"_renderStepComponent\"\n (onToolResult)=\"toolResultHandler($event)\"\n></c8y-agent-chat>\n", dependencies: [{ kind: "component", type: AgentChatComponent, selector: "c8y-agent-chat", inputs: ["agent", "suggestions", "title", "headline", "welcomeText", "autoInstallAgents", "variables", "stepRenderComponent"], outputs: ["onMessageDelta", "onMessageText", "onMessageFinish", "onToolResult"] }, { kind: "component", type: WidgetConfigFeedbackComponent, selector: "c8y-widget-config-feedback" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
417
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: WidgetAiChatSectionComponent, isStandalone: true, selector: "c8y-widget-ai-chat-section", inputs: { suggestions: "suggestions", agent: "agent", headline: "headline", title: "title", welcomeText: "welcomeText", useContextAsVariable: "useContextAsVariable", contextVariableName: "contextVariableName", variables: "variables", loadRenderStepComponent: "loadRenderStepComponent" }, ngImport: i0, template: "<c8y-widget-config-feedback>\n <div\n class=\"m-l-4 btn-ai btn-ai-hint btn-sm\"\n [title]=\"'AI code assistant' | translate\"\n >\n <span></span>\n </div>\n</c8y-widget-config-feedback>\n\n<c8y-agent-chat\n [title]=\"title | translate\"\n [headline]=\"headline | translate\"\n [welcomeText]=\"welcomeText | translate\"\n #agentChat\n [suggestions]=\"(agentChat.messages$ | async)?.length === 0 ? suggestions : []\"\n [agent]=\"agent\"\n [variables]=\"variables | async\"\n [stepRenderComponent]=\"_renderStepComponent\"\n (onToolResult)=\"toolResultHandler($event)\"\n></c8y-agent-chat>\n", dependencies: [{ kind: "component", type: AgentChatComponent, selector: "c8y-agent-chat", inputs: ["agent", "suggestions", "title", "headline", "welcomeText", "autoInstallAgents", "variables", "stepRenderComponent"], outputs: ["onMessageDelta", "onMessageText", "onMessageFinish", "onToolResult"] }, { kind: "component", type: WidgetConfigFeedbackComponent, selector: "c8y-widget-config-feedback" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
390
418
  }
391
419
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: WidgetAiChatSectionComponent, decorators: [{
392
420
  type: Component,
393
- args: [{ selector: 'c8y-widget-ai-chat-section', imports: [AgentChatComponent, C8yTranslatePipe, AsyncPipe, WidgetConfigFeedbackComponent], standalone: true, template: "<c8y-widget-config-feedback>\n <div\n class=\"m-l-4 btn-ai btn-ai-hint btn-sm\"\n [title]=\"'AI code assistant' | translate\"\n >\n <span></span>\n </div>\n</c8y-widget-config-feedback>\n\n<c8y-agent-chat\n [title]=\"title | translate\"\n [headline]=\"headline | translate\"\n [welcomeText]=\"welcomeText | translate\"\n #agentChat\n [suggestions]=\"(agentChat.messages$ | async)?.length === 0 ? suggestions : []\"\n [agent]=\"agent\"\n [variables]=\"variables\"\n [stepRenderComponent]=\"_renderStepComponent\"\n (onToolResult)=\"toolResultHandler($event)\"\n></c8y-agent-chat>\n" }]
421
+ args: [{ selector: 'c8y-widget-ai-chat-section', imports: [AgentChatComponent, C8yTranslatePipe, AsyncPipe, WidgetConfigFeedbackComponent], standalone: true, template: "<c8y-widget-config-feedback>\n <div\n class=\"m-l-4 btn-ai btn-ai-hint btn-sm\"\n [title]=\"'AI code assistant' | translate\"\n >\n <span></span>\n </div>\n</c8y-widget-config-feedback>\n\n<c8y-agent-chat\n [title]=\"title | translate\"\n [headline]=\"headline | translate\"\n [welcomeText]=\"welcomeText | translate\"\n #agentChat\n [suggestions]=\"(agentChat.messages$ | async)?.length === 0 ? suggestions : []\"\n [agent]=\"agent\"\n [variables]=\"variables | async\"\n [stepRenderComponent]=\"_renderStepComponent\"\n (onToolResult)=\"toolResultHandler($event)\"\n></c8y-agent-chat>\n" }]
394
422
  }], propDecorators: { suggestions: [{
395
423
  type: Input
396
424
  }], agent: [{
@@ -401,12 +429,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
401
429
  type: Input
402
430
  }], welcomeText: [{
403
431
  type: Input
404
- }], variables: [{
405
- type: Input
406
432
  }], useContextAsVariable: [{
407
433
  type: Input
408
434
  }], contextVariableName: [{
409
435
  type: Input
436
+ }], variables: [{
437
+ type: Input
410
438
  }], loadRenderStepComponent: [{
411
439
  type: Input
412
440
  }] } });
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-ai-agent-chat.mjs","sources":["../../ai/agent-chat/agent-step-feedback.component.ts","../../ai/agent-chat/agent-step-feedback.component.html","../../ai/agent-chat/agent-chat.component.ts","../../ai/agent-chat/agent-chat.component.html","../../ai/agent-chat/widget-ai-chat-section.component.ts","../../ai/agent-chat/widget-ai-chat-section.component.html","../../ai/agent-chat/c8y-ngx-components-ai-agent-chat.ts"],"sourcesContent":["import { JsonPipe, NgClass, AsyncPipe } from '@angular/common';\nimport { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport {\n ListGroupComponent,\n ListItemBodyComponent,\n ListItemCollapseComponent,\n ListItemComponent,\n ListItemIconComponent,\n MarkdownToHtmlPipe,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { AgentStep } from '@c8y/ngx-components/ai';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n@Component({\n selector: 'c8y-agent-step-feedback',\n templateUrl: './agent-step-feedback.component.html',\n standalone: true,\n imports: [\n ListGroupComponent,\n ListItemComponent,\n ListItemCollapseComponent,\n ListItemBodyComponent,\n ListItemIconComponent,\n NgClass,\n JsonPipe,\n MarkdownToHtmlPipe,\n AsyncPipe,\n C8yTranslatePipe\n ],\n host: { class: 'agent-step-feedback' }\n})\nexport class AgentStepFeedbackComponent implements OnInit, OnChanges {\n @Input({ required: true }) step: AgentStep;\n\n @Input() label: string;\n @Input() loading = false;\n @Input() collapsed = true;\n @Input() canCollapse = false;\n\n ngOnInit(): void {\n if (this.step) {\n this.parseDefaultAgentStep(this.step);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.step) {\n this.parseDefaultAgentStep(changes.step.currentValue);\n }\n }\n\n parseDefaultAgentStep(step: AgentStep): void {\n if (step.reasoning) {\n this.label = gettext('Reasoning');\n this.loading = false;\n this.canCollapse = true;\n this.collapsed = false;\n }\n\n if (step.toolCalls.length > 0 && !step.toolResults?.length) {\n this.label = gettext('Calling a tool');\n this.loading = true;\n this.canCollapse = true;\n this.collapsed = true;\n } else if (step.toolResults?.length > 0) {\n this.label = gettext('Tool result');\n this.loading = false;\n this.canCollapse = true;\n this.collapsed = true;\n }\n }\n}\n","@if (!step.reasoning) {\n <div [innerHTML]=\"step.text | markdownToHtml | async\"></div>\n}\n@if (label) {\n <c8y-list-group class=\"m-t-16 m-b-16\">\n <c8y-li\n [active]=\"!loading\"\n [collapsed]=\"collapsed\"\n >\n <c8y-li-icon>\n <span\n class=\"btn-ai btn-ai-hint btn-sm\"\n [ngClass]=\"{ working: loading }\"\n >\n <span></span>\n </span>\n </c8y-li-icon>\n <c8y-li-body>\n {{ label | translate }}\n </c8y-li-body>\n\n @if (canCollapse) {\n <c8y-li-collapse>\n @if (step.reasoning) {\n <div [innerHTML]=\"step.reasoning | markdownToHtml | async\"></div>\n } @else if (step) {\n <pre\n class=\"fit-w\"\n style=\"max-height: 320px\"\n >{{ step | json }}</pre\n >\n }\n </c8y-li-collapse>\n }\n </c8y-li>\n </c8y-list-group>\n}\n","import { AsyncPipe, NgComponentOutlet } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Type\n} from '@angular/core';\nimport {\n AlertService,\n AppStateService,\n C8Y_PLUGIN_CONTEXT_PATH,\n C8yTranslatePipe,\n EmptyStateComponent,\n GainsightService,\n LoadingComponent,\n MarkdownToHtmlPipe\n} from '@c8y/ngx-components';\nimport {\n AgentHealthCheckResponse,\n AgentStep,\n AIMessage,\n AIMessageStreamSteps,\n AIService,\n ClientAgentDefinition,\n ToolResult\n} from '@c8y/ngx-components/ai';\nimport {\n AiChatComponent,\n AiChatMessageActionComponent,\n AiChatMessageComponent,\n AiChatSuggestionComponent\n} from '@c8y/ngx-components/ai/ai-chat';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n BehaviorSubject,\n firstValueFrom,\n map,\n Observable,\n of,\n OperatorFunction,\n Subscription\n} from 'rxjs';\nimport { AgentStepFeedbackComponent } from './agent-step-feedback.component';\n\n@Component({\n selector: 'c8y-agent-chat',\n templateUrl: './agent-chat.component.html',\n imports: [\n AiChatComponent,\n AiChatSuggestionComponent,\n AiChatMessageComponent,\n AiChatMessageActionComponent,\n LoadingComponent,\n MarkdownToHtmlPipe,\n AsyncPipe,\n NgComponentOutlet,\n C8yTranslatePipe,\n EmptyStateComponent\n ]\n})\nexport class AgentChatComponent implements OnInit, OnDestroy {\n private _agent: string | ClientAgentDefinition;\n\n @Input({ required: true })\n set agent(value: string | ClientAgentDefinition) {\n if (typeof value === 'string') {\n this.agentName = value;\n this.agentDefinition = undefined;\n } else {\n this.agentName = value.definition.name;\n this.agentDefinition = value;\n }\n }\n\n @Input() suggestions: { label: string; prompt: string; icon?: string }[] = [];\n @Input() title: string;\n @Input() headline: string = gettext('Welcome!');\n @Input() welcomeText: string;\n @Input() autoInstallAgents = true;\n @Input() variables = {};\n @Input() stepRenderComponent: Type<any> = AgentStepFeedbackComponent;\n\n @Output() onMessageDelta = new EventEmitter<string>();\n @Output() onMessageText = new EventEmitter<string>();\n @Output() onMessageFinish = new EventEmitter<string>();\n @Output() onToolResult = new EventEmitter<ToolResult>();\n\n isLoading = false;\n\n /**\n * A stream of AI messages representing the conversation.\n */\n messages$: BehaviorSubject<AIMessageStreamSteps[]> = new BehaviorSubject<AIMessageStreamSteps[]>(\n []\n );\n agentName: string;\n agentDefinition: ClientAgentDefinition | undefined;\n hasError = true;\n canCreate = false;\n errorMsg = '';\n prompt = '';\n\n private aiService = inject(AIService);\n private gainsightService = inject(GainsightService);\n private alertService = inject(AlertService);\n private pluginContextPath = inject(C8Y_PLUGIN_CONTEXT_PATH, { optional: true });\n private appState = inject(AppStateService);\n private abortController: AbortController;\n private assistantSubscription: Subscription;\n\n private get currentContextPath(): string {\n return this.pluginContextPath || this.appState.currentApplication?.value?.contextPath || '';\n }\n\n defaultAgentStepRendererPipe: OperatorFunction<\n AgentStep[],\n { content: Type<any> | string; origin: AgentStep }[]\n > = <T extends AgentStep[]>(source: Observable<T>) => {\n return source.pipe(\n map(steps =>\n steps.map(step => {\n if (step.reasoning || step.toolCalls || step.toolResults) {\n return { content: this.stepRenderComponent, origin: { ...step } };\n }\n return { content: step.text, origin: { ...step } };\n })\n )\n );\n };\n\n async ngOnInit(): Promise<void> {\n if (this.agentDefinition.snapshot) {\n this.hasError = false;\n return;\n }\n this.isLoading = true;\n try {\n const agentHealth: AgentHealthCheckResponse = await this.aiService.getAgentHealth(\n this.agentName,\n this.currentContextPath\n );\n this.composeErrorMessage(agentHealth);\n } catch (ex) {\n this.errorMsg = gettext('Microservice not found. Please contact your administrator.');\n this.hasError = true;\n }\n this.isLoading = false;\n }\n\n async sendMessage(message: AIMessage) {\n this.messages$.next([...this.messages$.value, message]);\n this.isLoading = true;\n this.abortController = new AbortController();\n const currentAssistantMessage: AIMessageStreamSteps = {\n role: 'assistant',\n content: ''\n };\n this.messages$.next([...this.messages$.value, currentAssistantMessage]);\n const stream = await this.aiService.stream$(\n this.agentDefinition || this.agentName,\n this.messages$.value.filter(m => m !== currentAssistantMessage),\n this.variables,\n this.abortController,\n this.currentContextPath\n );\n\n if (this.assistantSubscription) {\n this.assistantSubscription.unsubscribe();\n }\n\n this.assistantSubscription = stream.subscribe((messageFromAssistant: AIMessage) =>\n this.processAgentMessage(\n currentAssistantMessage,\n messageFromAssistant,\n this.agentName,\n message\n )\n );\n }\n\n ngOnDestroy(): void {\n this.cancel();\n }\n\n reprompt(userMessage: AIMessageStreamSteps) {\n const index = this.messages$.value.indexOf(userMessage);\n if (index > -1) {\n this.messages$.next(this.messages$.value.slice(0, index));\n this.prompt = userMessage.content;\n }\n }\n\n rate(assistantMessage: AIMessageStreamSteps, positive) {\n const agentName = typeof this.agent === 'string' ? this.agent : this.agent.label;\n this.gainsightService.triggerEvent('ai.agent.feedback', {\n positive,\n assistant: assistantMessage,\n user: this.messages$.value[this.messages$.value.indexOf(assistantMessage) - 1],\n agent: agentName\n });\n }\n\n reload(assistantMessage: AIMessageStreamSteps) {\n const index = this.messages$.value.indexOf(assistantMessage);\n const userMessage = this.messages$.value[index - 1];\n if (index > -1) {\n this.messages$.next(this.messages$.value.slice(0, index - 1));\n this.sendMessage({\n role: 'user',\n content: userMessage.content,\n timestamp: new Date().toISOString()\n });\n }\n }\n\n async cancel() {\n if (this.abortController) {\n this.abortController.abort();\n }\n\n const lastMessage = this.messages$.value[this.messages$.value.length - 1];\n if (lastMessage && lastMessage.role === 'assistant') {\n if (lastMessage.content === '') {\n // if message is aborted before content is even populated, remove it entirely\n this.messages$.next(this.messages$.value.slice(0, -1));\n } else {\n // if message has content, mark the last step as aborted to indicate incomplete processing\n const lastMessageSteps: AgentStep[] =\n (await firstValueFrom(lastMessage.componentSteps$))\n .map(s => s.origin)\n .map((step, index, arr) =>\n index === arr.length - 1 ? { ...step, aborted: true } : step\n ) || [];\n if (lastMessageSteps.length) {\n lastMessage.componentSteps$ = of(lastMessageSteps).pipe(\n this.defaultAgentStepRendererPipe\n );\n\n this.messages$.next([...this.messages$.value]);\n }\n }\n }\n\n if (this.assistantSubscription) {\n this.assistantSubscription.unsubscribe();\n }\n\n this.isLoading = false;\n }\n\n async createAgent() {\n this.isLoading = true;\n try {\n await this.aiService.createOrUpdateAgent(this.agentDefinition.definition);\n this.hasError = false;\n } catch (ex) {\n this.alertService.danger(gettext('Failed to create the agent.'));\n this.hasError = true;\n }\n this.isLoading = false;\n }\n\n private composeErrorMessage(agentHealth: AgentHealthCheckResponse) {\n if (agentHealth.exists) {\n this.errorMsg = '';\n this.hasError = false;\n return;\n }\n this.hasError = true;\n if (!agentHealth.isProviderConfigured) {\n this.errorMsg = gettext('AI provider is not configured. Please contact your administrator.');\n return;\n }\n if (agentHealth.canCreate && typeof this.agent === 'string') {\n this.errorMsg = gettext(\n 'The agent does not exist. Provide the agent definition in the agent manager to use it.'\n );\n return;\n }\n if (agentHealth.canCreate && typeof this.agent !== 'string') {\n this.canCreate = true;\n if (this.autoInstallAgents && this.agentDefinition) {\n this.createAgent();\n return;\n }\n this.errorMsg = gettext('The agent does not exist. You can create it now.');\n return;\n }\n if (!agentHealth.canCreate) {\n this.errorMsg = gettext('The agent does not exist. Please contact your administrator.');\n if (agentHealth.messages?.length) {\n this.errorMsg += '\\n' + agentHealth.messages.join(' ');\n }\n return;\n }\n this.errorMsg = gettext('Unknown error. Please contact your administrator.');\n }\n\n private processAgentMessage(\n currentAssistantMessage: AIMessageStreamSteps,\n messageFromAssistant: AIMessage,\n agentName: string,\n message: AIMessage\n ) {\n currentAssistantMessage.content = messageFromAssistant.content;\n\n const steps = messageFromAssistant.steps || [];\n const lastStep = steps.length ? steps[steps.length - 1] : null;\n\n this.onMessageDelta.emit(lastStep.textDelta);\n this.onMessageText.emit(lastStep.text);\n currentAssistantMessage.componentSteps$ = of(steps).pipe(this.defaultAgentStepRendererPipe);\n\n if (messageFromAssistant.finishReason === 'stop') {\n currentAssistantMessage.timestamp = new Date().toISOString();\n this.onMessageFinish.emit(currentAssistantMessage.content);\n this.gainsightService.triggerEvent('ai.agent.message', {\n agent: agentName,\n user: message,\n assistant: currentAssistantMessage.content\n });\n this.isLoading = false;\n }\n\n if (messageFromAssistant.finishReason === 'error') {\n currentAssistantMessage.timestamp = new Date().toISOString();\n this.isLoading = false;\n }\n\n if (lastStep?.toolResults) {\n lastStep.toolResults.forEach(toolResult => {\n this.onToolResult.emit(toolResult);\n });\n }\n\n // as we are mutating the currentAssistantMessage object\n // which is already in the messages array we need to emit a new array reference\n this.messages$.next([...this.messages$.value]);\n }\n}\n","@if (hasError && isLoading) {\n <c8y-loading class=\"m-auto\"></c8y-loading>\n}\n@if (hasError && !isLoading) {\n <c8y-ui-empty-state\n class=\"m-auto\"\n [icon]=\"'disclaimer'\"\n [title]=\"'An error occurred' | translate\"\n [subtitle]=\"errorMsg | translate\"\n [horizontal]=\"true\"\n >\n @if (canCreate) {\n <div class=\"text-center m-t-16 m-b-16\">\n <button\n class=\"btn btn-primary\"\n (click)=\"createAgent()\"\n >\n {{ 'Create agent' | translate }}\n </button>\n </div>\n }\n </c8y-ui-empty-state>\n}\n\n@if (!hasError) {\n <c8y-ai-chat\n (onMessage)=\"sendMessage($event)\"\n [isLoading]=\"isLoading\"\n (onCancel)=\"cancel()\"\n [config]=\"{ title: title, headline: headline, welcomeText: welcomeText }\"\n [prompt]=\"prompt\"\n >\n @for (message of messages$ | async; track $index; let i = $index) {\n <c8y-ai-chat-message\n [message]=\"{ role: message.role, content: '', timestamp: message.timestamp }\"\n >\n @if (!message.componentSteps$) {\n <div [innerHTML]=\"message.content | markdownToHtml | async\"></div>\n }\n @for (step of message.componentSteps$ | async; track $index) {\n @if (typeof step.content === 'string') {\n <div [innerHTML]=\"step.content | markdownToHtml | async\"></div>\n } @else {\n <ng-container\n [ngComponentOutlet]=\"step.content\"\n [ngComponentOutletInputs]=\"{ step: step.origin }\"\n ></ng-container>\n }\n }\n\n @if (message.role === 'user') {\n <c8y-ai-chat-message-action\n icon=\"pencil\"\n [tooltip]=\"'Edit and resend this message' | translate\"\n [disabled]=\"isLoading\"\n (click)=\"reprompt(message)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (message.role === 'assistant' && (i < (messages$ | async)?.length - 1 || !isLoading)) {\n <c8y-ai-chat-message-action\n icon=\"thumbs-up\"\n [tooltip]=\"'This is useful' | translate\"\n [disabled]=\"isLoading\"\n (click)=\"rate(message, true)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (message.role === 'assistant' && (i < (messages$ | async)?.length - 1 || !isLoading)) {\n <c8y-ai-chat-message-action\n icon=\"thumbs-down\"\n [tooltip]=\"'This is not useful' | translate\"\n [disabled]=\"isLoading\"\n (click)=\"rate(message, false)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (message.role === 'assistant' && (i < (messages$ | async)?.length - 1 || !isLoading)) {\n <c8y-ai-chat-message-action\n icon=\"refresh\"\n [tooltip]=\"'Regenerate this response' | translate\"\n [disabled]=\"isLoading\"\n (click)=\"reload(message)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (\n !message.content && message.role === 'assistant' && i === (messages$ | async)?.length - 1\n ) {\n <div class=\"text-center\">\n <c8y-loading></c8y-loading>\n </div>\n }\n </c8y-ai-chat-message>\n }\n\n @for (suggestion of suggestions; track $index) {\n <c8y-ai-chat-suggestion\n [icon]=\"suggestion.icon || 'c8y-bulb'\"\n [useAiButtons]=\"true\"\n [label]=\"suggestion.label\"\n [prompt]=\"suggestion.prompt\"\n (suggestionClicked)=\"sendMessage($event)\"\n [disabled]=\"isLoading\"\n ></c8y-ai-chat-suggestion>\n }\n </c8y-ai-chat>\n}\n","import { AsyncPipe } from '@angular/common';\nimport { Component, inject, Input, OnInit, Type } from '@angular/core';\nimport { AlertService, C8yTranslatePipe, ContextRouteService } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { ClientAgentDefinition, ToolResult } from '@c8y/ngx-components/ai';\nimport {\n WidgetConfigFeedbackComponent,\n WidgetConfigService\n} from '@c8y/ngx-components/context-dashboard';\nimport { AgentChatComponent } from './agent-chat.component';\nimport { AgentStepFeedbackComponent } from './agent-step-feedback.component';\n\n@Component({\n selector: 'c8y-widget-ai-chat-section',\n imports: [AgentChatComponent, C8yTranslatePipe, AsyncPipe, WidgetConfigFeedbackComponent],\n standalone: true,\n templateUrl: './widget-ai-chat-section.component.html'\n})\nexport class WidgetAiChatSectionComponent implements OnInit {\n @Input()\n suggestions: Array<{ label: string; prompt: string }> = [];\n @Input()\n agent: string | ClientAgentDefinition;\n @Input()\n headline = gettext('Welcome!');\n @Input()\n title: string = gettext('What can I help you with?');\n @Input()\n welcomeText;\n @Input()\n variables: { [key: string]: any };\n @Input()\n useContextAsVariable = true;\n @Input()\n contextVariableName = 'c8yContext';\n _renderStepComponent: Type<any>;\n\n private readonly widgetConfigService = inject(WidgetConfigService);\n private readonly alertService = inject(AlertService);\n private readonly contextRouteService = inject(ContextRouteService);\n\n /**\n * A component that is used to render each step in the chat. By default, it uses the `AgentStepFeedbackComponent`.\n * You can provide your own component by returning it from this callback.\n *\n * @returns A promise that resolves to a component type.\n */\n @Input()\n loadRenderStepComponent: () => Promise<Type<any>> = () =>\n Promise.resolve(AgentStepFeedbackComponent);\n\n /**\n * A callback that is invoked when a tool result is returned. The function can return either:\n * - `undefined` or `void`: No action is taken.\n * - an object which is stored to the widget configuration.\n */\n onToolResult: (step: ToolResult) => undefined | any = () => undefined;\n\n /**\n * @ignore\n */\n async ngOnInit(): Promise<void> {\n if (!this.variables && this.useContextAsVariable) {\n const { contextData } = this.contextRouteService.activatedContextData;\n this.variables = {\n [this.contextVariableName]: contextData || this.widgetConfigService.currentConfig.device\n };\n }\n\n this._renderStepComponent = await this.loadRenderStepComponent();\n }\n\n /**\n * Handles the tool result returned from the AI agent.\n * @param tool The tool result returned from the AI agent.\n */\n toolResultHandler(tool: ToolResult) {\n try {\n const parsedResult = this.onToolResult(tool);\n if (!parsedResult) {\n return;\n }\n this.widgetConfigService.updateConfig(\n {\n config: {\n ...this.widgetConfigService.currentConfig,\n ...parsedResult\n }\n },\n true\n );\n } catch (e) {\n this.alertService.danger(gettext('There was an error processing the AI response.'));\n }\n }\n}\n","<c8y-widget-config-feedback>\n <div\n class=\"m-l-4 btn-ai btn-ai-hint btn-sm\"\n [title]=\"'AI code assistant' | translate\"\n >\n <span></span>\n </div>\n</c8y-widget-config-feedback>\n\n<c8y-agent-chat\n [title]=\"title | translate\"\n [headline]=\"headline | translate\"\n [welcomeText]=\"welcomeText | translate\"\n #agentChat\n [suggestions]=\"(agentChat.messages$ | async)?.length === 0 ? suggestions : []\"\n [agent]=\"agent\"\n [variables]=\"variables\"\n [stepRenderComponent]=\"_renderStepComponent\"\n (onToolResult)=\"toolResultHandler($event)\"\n></c8y-agent-chat>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;MAgCa,0BAA0B,CAAA;AAlBvC,IAAA,WAAA,GAAA;QAsBW,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,SAAS,GAAG,IAAI;QAChB,IAAA,CAAA,WAAW,GAAG,KAAK;AAkC7B,IAAA;IAhCC,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;QACvC;IACF;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,IAAI,EAAE;YAChB,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;QACvD;IACF;AAEA,IAAA,qBAAqB,CAAC,IAAe,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC;AACjC,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACxB;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;AAC1D,YAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC;AACtC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACvB;aAAO,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC;AACnC,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACvB;IACF;+GAvCW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChCvC,07BAqCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDlBI,kBAAkB,2DAClB,iBAAiB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,OAAA,EAAA,WAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,yBAAyB,EAAA,QAAA,EAAA,yCAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,qBAAqB,8FACrB,qBAAqB,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACP,QAAQ,wCACR,kBAAkB,EAAA,IAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAClB,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACT,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAlBtC,SAAS;+BACE,yBAAyB,EAAA,UAAA,EAEvB,IAAI,EAAA,OAAA,EACP;wBACP,kBAAkB;wBAClB,iBAAiB;wBACjB,yBAAyB;wBACzB,qBAAqB;wBACrB,qBAAqB;wBACrB,OAAO;wBACP,QAAQ;wBACR,kBAAkB;wBAClB,SAAS;wBACT;AACD,qBAAA,EAAA,IAAA,EACK,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAA,QAAA,EAAA,07BAAA,EAAA;;sBAGrC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBAExB;;sBACA;;sBACA;;sBACA;;;ME0BU,kBAAkB,CAAA;AAhB/B,IAAA,WAAA,GAAA;QA8BW,IAAA,CAAA,WAAW,GAAuD,EAAE;AAEpE,QAAA,IAAA,CAAA,QAAQ,GAAW,OAAO,CAAC,UAAU,CAAC;QAEtC,IAAA,CAAA,iBAAiB,GAAG,IAAI;QACxB,IAAA,CAAA,SAAS,GAAG,EAAE;QACd,IAAA,CAAA,mBAAmB,GAAc,0BAA0B;AAE1D,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAU;AAC3C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAU;AAC1C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAU;AAC5C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAc;QAEvD,IAAA,CAAA,SAAS,GAAG,KAAK;AAEjB;;AAEG;AACH,QAAA,IAAA,CAAA,SAAS,GAA4C,IAAI,eAAe,CACtE,EAAE,CACH;QAGD,IAAA,CAAA,QAAQ,GAAG,IAAI;QACf,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,QAAQ,GAAG,EAAE;QACb,IAAA,CAAA,MAAM,GAAG,EAAE;AAEH,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAC7B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACnC,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACvE,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC;AAQ1C,QAAA,IAAA,CAAA,4BAA4B,GAGxB,CAAwB,MAAqB,KAAI;AACnD,YAAA,OAAO,MAAM,CAAC,IAAI,CAChB,GAAG,CAAC,KAAK,IACP,KAAK,CAAC,GAAG,CAAC,IAAI,IAAG;AACf,gBAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE;AACxD,oBAAA,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE;gBACnE;AACA,gBAAA,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE;YACpD,CAAC,CAAC,CACH,CACF;AACH,QAAA,CAAC;AAmNF,IAAA;IApRC,IACI,KAAK,CAAC,KAAqC,EAAA;AAC7C,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,CAAC,eAAe,GAAG,SAAS;QAClC;aAAO;YACL,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI;AACtC,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAC9B;IACF;AAsCA,IAAA,IAAY,kBAAkB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,KAAK,EAAE,WAAW,IAAI,EAAE;IAC7F;AAkBA,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE;AACjC,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;YACrB;QACF;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI;AACF,YAAA,MAAM,WAAW,GAA6B,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAC/E,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,kBAAkB,CACxB;AACD,YAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC;QACvC;QAAE,OAAO,EAAE,EAAE;AACX,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,4DAA4D,CAAC;AACrF,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACtB;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IACxB;IAEA,MAAM,WAAW,CAAC,OAAkB,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE;AAC5C,QAAA,MAAM,uBAAuB,GAAyB;AACpD,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,OAAO,EAAE;SACV;AACD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CACzC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,SAAS,EACtC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,uBAAuB,CAAC,EAC/D,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,kBAAkB,CACxB;AAED,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,YAAA,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE;QAC1C;QAEA,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,oBAA+B,KAC5E,IAAI,CAAC,mBAAmB,CACtB,uBAAuB,EACvB,oBAAoB,EACpB,IAAI,CAAC,SAAS,EACd,OAAO,CACR,CACF;IACH;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,MAAM,EAAE;IACf;AAEA,IAAA,QAAQ,CAAC,WAAiC,EAAA;AACxC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;AACvD,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACzD,YAAA,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO;QACnC;IACF;IAEA,IAAI,CAAC,gBAAsC,EAAE,QAAQ,EAAA;QACnD,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;AAChF,QAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,mBAAmB,EAAE;YACtD,QAAQ;AACR,YAAA,SAAS,EAAE,gBAAgB;AAC3B,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAC9E,YAAA,KAAK,EAAE;AACR,SAAA,CAAC;IACJ;AAEA,IAAA,MAAM,CAAC,gBAAsC,EAAA;AAC3C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC;AAC5D,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AACnD,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YACd,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAC7D,IAAI,CAAC,WAAW,CAAC;AACf,gBAAA,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,WAAW,CAAC,OAAO;AAC5B,gBAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW;AAClC,aAAA,CAAC;QACJ;IACF;AAEA,IAAA,MAAM,MAAM,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;QAC9B;AAEA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACzE,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,KAAK,WAAW,EAAE;AACnD,YAAA,IAAI,WAAW,CAAC,OAAO,KAAK,EAAE,EAAE;;AAE9B,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD;iBAAO;;gBAEL,MAAM,gBAAgB,GACpB,CAAC,MAAM,cAAc,CAAC,WAAW,CAAC,eAAe,CAAC;qBAC/C,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM;AACjB,qBAAA,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,KACpB,KAAK,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAC7D,IAAI,EAAE;AACX,gBAAA,IAAI,gBAAgB,CAAC,MAAM,EAAE;AAC3B,oBAAA,WAAW,CAAC,eAAe,GAAG,EAAE,CAAC,gBAAgB,CAAC,CAAC,IAAI,CACrD,IAAI,CAAC,4BAA4B,CAClC;AAED,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAChD;YACF;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,YAAA,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE;QAC1C;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IACxB;AAEA,IAAA,MAAM,WAAW,GAAA;AACf,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;AACzE,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACvB;QAAE,OAAO,EAAE,EAAE;YACX,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;AAChE,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACtB;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;IACxB;AAEQ,IAAA,mBAAmB,CAAC,WAAqC,EAAA;AAC/D,QAAA,IAAI,WAAW,CAAC,MAAM,EAAE;AACtB,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;YACrB;QACF;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE;AACrC,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,mEAAmE,CAAC;YAC5F;QACF;QACA,IAAI,WAAW,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;AAC3D,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CACrB,wFAAwF,CACzF;YACD;QACF;QACA,IAAI,WAAW,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;AAC3D,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;YACrB,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,eAAe,EAAE;gBAClD,IAAI,CAAC,WAAW,EAAE;gBAClB;YACF;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,kDAAkD,CAAC;YAC3E;QACF;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;AAC1B,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,8DAA8D,CAAC;AACvF,YAAA,IAAI,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE;AAChC,gBAAA,IAAI,CAAC,QAAQ,IAAI,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YACxD;YACA;QACF;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,mDAAmD,CAAC;IAC9E;AAEQ,IAAA,mBAAmB,CACzB,uBAA6C,EAC7C,oBAA+B,EAC/B,SAAiB,EACjB,OAAkB,EAAA;AAElB,QAAA,uBAAuB,CAAC,OAAO,GAAG,oBAAoB,CAAC,OAAO;AAE9D,QAAA,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,IAAI,EAAE;QAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI;QAE9D,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC5C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACtC,QAAA,uBAAuB,CAAC,eAAe,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC;AAE3F,QAAA,IAAI,oBAAoB,CAAC,YAAY,KAAK,MAAM,EAAE;YAChD,uBAAuB,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5D,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC;AAC1D,YAAA,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,kBAAkB,EAAE;AACrD,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,IAAI,EAAE,OAAO;gBACb,SAAS,EAAE,uBAAuB,CAAC;AACpC,aAAA,CAAC;AACF,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACxB;AAEA,QAAA,IAAI,oBAAoB,CAAC,YAAY,KAAK,OAAO,EAAE;YACjD,uBAAuB,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AAC5D,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACxB;AAEA,QAAA,IAAI,QAAQ,EAAE,WAAW,EAAE;AACzB,YAAA,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,IAAG;AACxC,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AACpC,YAAA,CAAC,CAAC;QACJ;;;AAIA,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAChD;+GAtRW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChE/B,qnHA4GA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDxDI,eAAe,mJACf,yBAAyB,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,MAAA,EAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,sBAAsB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,4BAA4B,oIAC5B,gBAAgB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGhB,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,sCAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,kCAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEjB,mBAAmB,+GAJnB,kBAAkB,EAAA,IAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAClB,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAET,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAhB9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,OAAA,EAEjB;wBACP,eAAe;wBACf,yBAAyB;wBACzB,sBAAsB;wBACtB,4BAA4B;wBAC5B,gBAAgB;wBAChB,kBAAkB;wBAClB,SAAS;wBACT,iBAAiB;wBACjB,gBAAgB;wBAChB;AACD,qBAAA,EAAA,QAAA,EAAA,qnHAAA,EAAA;;sBAKA,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBAWxB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;;MEvEU,4BAA4B,CAAA;AANzC,IAAA,WAAA,GAAA;QAQE,IAAA,CAAA,WAAW,GAA6C,EAAE;AAI1D,QAAA,IAAA,CAAA,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;AAE9B,QAAA,IAAA,CAAA,KAAK,GAAW,OAAO,CAAC,2BAA2B,CAAC;QAMpD,IAAA,CAAA,oBAAoB,GAAG,IAAI;QAE3B,IAAA,CAAA,mBAAmB,GAAG,YAAY;AAGjB,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAElE;;;;;AAKG;QAEH,IAAA,CAAA,uBAAuB,GAA6B,MAClD,OAAO,CAAC,OAAO,CAAC,0BAA0B,CAAC;AAE7C;;;;AAIG;AACH,QAAA,IAAA,CAAA,YAAY,GAA0C,MAAM,SAAS;AAuCtE,IAAA;AArCC;;AAEG;AACH,IAAA,MAAM,QAAQ,GAAA;QACZ,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAChD,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,oBAAoB;YACrE,IAAI,CAAC,SAAS,GAAG;AACf,gBAAA,CAAC,IAAI,CAAC,mBAAmB,GAAG,WAAW,IAAI,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC;aACnF;QACH;QAEA,IAAI,CAAC,oBAAoB,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE;IAClE;AAEA;;;AAGG;AACH,IAAA,iBAAiB,CAAC,IAAgB,EAAA;AAChC,QAAA,IAAI;YACF,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YAC5C,IAAI,CAAC,YAAY,EAAE;gBACjB;YACF;AACA,YAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,CACnC;AACE,gBAAA,MAAM,EAAE;AACN,oBAAA,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa;AACzC,oBAAA,GAAG;AACJ;aACF,EACD,IAAI,CACL;QACH;QAAE,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAC;QACrF;IACF;+GA5EW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClBzC,2lBAoBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDNY,kBAAkB,2QAA+B,6BAA6B,EAAA,QAAA,EAAA,4BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAA1D,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAI9C,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBANxC,SAAS;+BACE,4BAA4B,EAAA,OAAA,EAC7B,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,SAAS,EAAE,6BAA6B,CAAC,EAAA,UAAA,EAC7E,IAAI,EAAA,QAAA,EAAA,2lBAAA,EAAA;;sBAIf;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAEA;;sBAcA;;;AE/CH;;AAEG;;;;"}
1
+ {"version":3,"file":"c8y-ngx-components-ai-agent-chat.mjs","sources":["../../ai/agent-chat/agent-step-feedback.component.ts","../../ai/agent-chat/agent-step-feedback.component.html","../../ai/agent-chat/agent-chat.component.ts","../../ai/agent-chat/agent-chat.component.html","../../ai/agent-chat/widget-ai-chat-section.component.ts","../../ai/agent-chat/widget-ai-chat-section.component.html","../../ai/agent-chat/c8y-ngx-components-ai-agent-chat.ts"],"sourcesContent":["import { JsonPipe, NgClass, AsyncPipe } from '@angular/common';\nimport { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\nimport {\n ListGroupComponent,\n ListItemBodyComponent,\n ListItemCollapseComponent,\n ListItemComponent,\n ListItemIconComponent,\n MarkdownToHtmlPipe,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { AgentStep } from '@c8y/ngx-components/ai';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n@Component({\n selector: 'c8y-agent-step-feedback',\n templateUrl: './agent-step-feedback.component.html',\n standalone: true,\n imports: [\n ListGroupComponent,\n ListItemComponent,\n ListItemCollapseComponent,\n ListItemBodyComponent,\n ListItemIconComponent,\n NgClass,\n JsonPipe,\n MarkdownToHtmlPipe,\n AsyncPipe,\n C8yTranslatePipe\n ],\n host: { class: 'agent-step-feedback' }\n})\nexport class AgentStepFeedbackComponent implements OnInit, OnChanges {\n @Input({ required: true }) step: AgentStep;\n\n @Input() label: string;\n @Input() loading = false;\n @Input() collapsed = true;\n @Input() canCollapse = false;\n\n ngOnInit(): void {\n if (this.step) {\n this.parseDefaultAgentStep(this.step);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.step) {\n this.parseDefaultAgentStep(changes.step.currentValue);\n }\n }\n\n parseDefaultAgentStep(step: AgentStep): void {\n if (step.reasoning) {\n this.label = gettext('Reasoning');\n this.loading = false;\n this.canCollapse = true;\n this.collapsed = false;\n }\n\n if (step.toolCalls.length > 0 && !step.toolResults?.length) {\n this.label = gettext('Calling a tool');\n this.loading = true;\n this.canCollapse = true;\n this.collapsed = true;\n } else if (step.toolResults?.length > 0) {\n this.label = gettext('Tool result');\n this.loading = false;\n this.canCollapse = true;\n this.collapsed = true;\n }\n }\n}\n","@if (!step.reasoning) {\n <div [innerHTML]=\"step.text | markdownToHtml | async\"></div>\n}\n@if (label) {\n <c8y-list-group class=\"m-t-16 m-b-16\">\n <c8y-li\n [active]=\"!loading\"\n [collapsed]=\"collapsed\"\n >\n <c8y-li-icon>\n <span\n class=\"btn-ai btn-ai-hint btn-sm\"\n [ngClass]=\"{ working: loading }\"\n >\n <span></span>\n </span>\n </c8y-li-icon>\n <c8y-li-body>\n {{ label | translate }}\n </c8y-li-body>\n\n @if (canCollapse) {\n <c8y-li-collapse>\n @if (step.reasoning) {\n <div [innerHTML]=\"step.reasoning | markdownToHtml | async\"></div>\n } @else if (step) {\n <pre\n class=\"fit-w\"\n style=\"max-height: 320px\"\n >{{ step | json }}</pre\n >\n }\n </c8y-li-collapse>\n }\n </c8y-li>\n </c8y-list-group>\n}\n","import { AsyncPipe, NgComponentOutlet } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Type\n} from '@angular/core';\nimport {\n AlertService,\n AppStateService,\n C8Y_PLUGIN_CONTEXT_PATH,\n C8yTranslatePipe,\n EmptyStateComponent,\n GainsightService,\n LoadingComponent,\n MarkdownToHtmlPipe\n} from '@c8y/ngx-components';\nimport {\n AgentHealthCheckResponse,\n AgentStep,\n AIMessage,\n AIMessageStreamSteps,\n AIService,\n ClientAgentDefinition,\n ToolResult\n} from '@c8y/ngx-components/ai';\nimport {\n AiChatComponent,\n AiChatMessageActionComponent,\n AiChatMessageComponent,\n AiChatSuggestionComponent\n} from '@c8y/ngx-components/ai/ai-chat';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n BehaviorSubject,\n firstValueFrom,\n map,\n Observable,\n of,\n OperatorFunction,\n Subscription\n} from 'rxjs';\nimport { AgentStepFeedbackComponent } from './agent-step-feedback.component';\n\n@Component({\n selector: 'c8y-agent-chat',\n templateUrl: './agent-chat.component.html',\n imports: [\n AiChatComponent,\n AiChatSuggestionComponent,\n AiChatMessageComponent,\n AiChatMessageActionComponent,\n LoadingComponent,\n MarkdownToHtmlPipe,\n AsyncPipe,\n NgComponentOutlet,\n C8yTranslatePipe,\n EmptyStateComponent\n ]\n})\nexport class AgentChatComponent implements OnInit, OnDestroy {\n private _agent: string | ClientAgentDefinition;\n\n @Input({ required: true })\n set agent(value: string | ClientAgentDefinition) {\n if (typeof value === 'string') {\n this.agentName = value;\n this.agentDefinition = undefined;\n } else {\n this.agentName = value.definition.name;\n this.agentDefinition = value;\n }\n }\n\n @Input() suggestions: { label: string; prompt: string; icon?: string }[] = [];\n @Input() title: string;\n @Input() headline: string = gettext('Welcome!');\n @Input() welcomeText: string;\n @Input() autoInstallAgents = true;\n @Input() variables = {};\n @Input() stepRenderComponent: Type<any> = AgentStepFeedbackComponent;\n\n @Output() onMessageDelta = new EventEmitter<string>();\n @Output() onMessageText = new EventEmitter<string>();\n @Output() onMessageFinish = new EventEmitter<string>();\n @Output() onToolResult = new EventEmitter<ToolResult>();\n\n isLoading = false;\n\n /**\n * A stream of AI messages representing the conversation.\n */\n messages$: BehaviorSubject<AIMessageStreamSteps[]> = new BehaviorSubject<AIMessageStreamSteps[]>(\n []\n );\n agentName: string;\n agentDefinition: ClientAgentDefinition | undefined;\n hasError = true;\n canCreate = false;\n errorMsg = '';\n prompt = '';\n\n private aiService = inject(AIService);\n private gainsightService = inject(GainsightService);\n private alertService = inject(AlertService);\n private pluginContextPath = inject(C8Y_PLUGIN_CONTEXT_PATH, { optional: true });\n private appState = inject(AppStateService);\n private abortController: AbortController;\n private assistantSubscription: Subscription;\n\n private get currentContextPath(): string {\n return this.pluginContextPath || this.appState.currentApplication?.value?.contextPath || '';\n }\n\n defaultAgentStepRendererPipe: OperatorFunction<\n AgentStep[],\n { content: Type<any> | string; origin: AgentStep }[]\n > = <T extends AgentStep[]>(source: Observable<T>) => {\n return source.pipe(\n map(steps =>\n steps.map(step => {\n if (step.reasoning || step.toolCalls || step.toolResults) {\n return { content: this.stepRenderComponent, origin: { ...step } };\n }\n return { content: step.text, origin: { ...step } };\n })\n )\n );\n };\n\n async ngOnInit(): Promise<void> {\n if (this.agentDefinition.snapshot) {\n this.hasError = false;\n return;\n }\n this.isLoading = true;\n try {\n const agentHealth: AgentHealthCheckResponse = await this.aiService.getAgentHealth(\n this.agentName,\n this.currentContextPath\n );\n this.composeErrorMessage(agentHealth);\n } catch (ex) {\n this.errorMsg = gettext('Microservice not found. Please contact your administrator.');\n this.hasError = true;\n }\n this.isLoading = false;\n }\n\n async sendMessage(message: AIMessage) {\n this.messages$.next([...this.messages$.value, message]);\n this.isLoading = true;\n this.abortController = new AbortController();\n const currentAssistantMessage: AIMessageStreamSteps = {\n role: 'assistant',\n content: ''\n };\n this.messages$.next([...this.messages$.value, currentAssistantMessage]);\n const stream = await this.aiService.stream$(\n this.agentDefinition || this.agentName,\n this.messages$.value.filter(m => m !== currentAssistantMessage),\n this.variables,\n this.abortController,\n this.currentContextPath\n );\n\n if (this.assistantSubscription) {\n this.assistantSubscription.unsubscribe();\n }\n\n this.assistantSubscription = stream.subscribe((messageFromAssistant: AIMessage) =>\n this.processAgentMessage(\n currentAssistantMessage,\n messageFromAssistant,\n this.agentName,\n message\n )\n );\n }\n\n ngOnDestroy(): void {\n this.cancel();\n }\n\n reprompt(userMessage: AIMessageStreamSteps) {\n const index = this.messages$.value.indexOf(userMessage);\n if (index > -1) {\n this.messages$.next(this.messages$.value.slice(0, index));\n this.prompt = userMessage.content;\n }\n }\n\n rate(assistantMessage: AIMessageStreamSteps, positive) {\n const agentName = typeof this.agent === 'string' ? this.agent : this.agent.label;\n this.gainsightService.triggerEvent('ai.agent.feedback', {\n positive,\n assistant: assistantMessage,\n user: this.messages$.value[this.messages$.value.indexOf(assistantMessage) - 1],\n agent: agentName\n });\n }\n\n reload(assistantMessage: AIMessageStreamSteps) {\n const index = this.messages$.value.indexOf(assistantMessage);\n const userMessage = this.messages$.value[index - 1];\n if (index > -1) {\n this.messages$.next(this.messages$.value.slice(0, index - 1));\n this.sendMessage({\n role: 'user',\n content: userMessage.content,\n timestamp: new Date().toISOString()\n });\n }\n }\n\n async cancel() {\n if (this.abortController) {\n this.abortController.abort();\n }\n\n const lastMessage = this.messages$.value[this.messages$.value.length - 1];\n if (lastMessage && lastMessage.role === 'assistant') {\n if (lastMessage.content === '') {\n // if message is aborted before content is even populated, remove it entirely\n this.messages$.next(this.messages$.value.slice(0, -1));\n } else {\n // if message has content, mark the last step as aborted to indicate incomplete processing\n const lastMessageSteps: AgentStep[] =\n (await firstValueFrom(lastMessage.componentSteps$))\n .map(s => s.origin)\n .map((step, index, arr) =>\n index === arr.length - 1 ? { ...step, aborted: true } : step\n ) || [];\n if (lastMessageSteps.length) {\n lastMessage.componentSteps$ = of(lastMessageSteps).pipe(\n this.defaultAgentStepRendererPipe\n );\n\n this.messages$.next([...this.messages$.value]);\n }\n }\n }\n\n if (this.assistantSubscription) {\n this.assistantSubscription.unsubscribe();\n }\n\n this.isLoading = false;\n }\n\n async createAgent() {\n this.isLoading = true;\n try {\n await this.aiService.createOrUpdateAgent(this.agentDefinition.definition);\n this.hasError = false;\n } catch (ex) {\n this.alertService.danger(gettext('Failed to create the agent.'));\n this.hasError = true;\n }\n this.isLoading = false;\n }\n\n private composeErrorMessage(agentHealth: AgentHealthCheckResponse) {\n if (agentHealth.exists) {\n this.errorMsg = '';\n this.hasError = false;\n return;\n }\n this.hasError = true;\n if (!agentHealth.isProviderConfigured) {\n this.errorMsg = gettext('AI provider is not configured. Please contact your administrator.');\n return;\n }\n if (agentHealth.canCreate && typeof this.agent === 'string') {\n this.errorMsg = gettext(\n 'The agent does not exist. Provide the agent definition in the agent manager to use it.'\n );\n return;\n }\n if (agentHealth.canCreate && typeof this.agent !== 'string') {\n this.canCreate = true;\n if (this.autoInstallAgents && this.agentDefinition) {\n this.createAgent();\n return;\n }\n this.errorMsg = gettext('The agent does not exist. You can create it now.');\n return;\n }\n if (!agentHealth.canCreate) {\n this.errorMsg = gettext('The agent does not exist. Please contact your administrator.');\n if (agentHealth.messages?.length) {\n this.errorMsg += '\\n' + agentHealth.messages.join(' ');\n }\n return;\n }\n this.errorMsg = gettext('Unknown error. Please contact your administrator.');\n }\n\n private processAgentMessage(\n currentAssistantMessage: AIMessageStreamSteps,\n messageFromAssistant: AIMessage,\n agentName: string,\n message: AIMessage\n ) {\n currentAssistantMessage.content = messageFromAssistant.content;\n\n const steps = messageFromAssistant.steps || [];\n const lastStep = steps.length ? steps[steps.length - 1] : null;\n\n this.onMessageDelta.emit(lastStep.textDelta);\n this.onMessageText.emit(lastStep.text);\n currentAssistantMessage.componentSteps$ = of(steps).pipe(this.defaultAgentStepRendererPipe);\n\n if (messageFromAssistant.finishReason === 'stop') {\n currentAssistantMessage.timestamp = new Date().toISOString();\n this.onMessageFinish.emit(currentAssistantMessage.content);\n this.gainsightService.triggerEvent('ai.agent.message', {\n agent: agentName,\n user: message,\n assistant: currentAssistantMessage.content\n });\n this.isLoading = false;\n }\n\n if (messageFromAssistant.finishReason === 'error') {\n currentAssistantMessage.timestamp = new Date().toISOString();\n this.isLoading = false;\n }\n\n if (lastStep?.toolResults) {\n lastStep.toolResults.forEach(toolResult => {\n this.onToolResult.emit(toolResult);\n });\n }\n\n // as we are mutating the currentAssistantMessage object\n // which is already in the messages array we need to emit a new array reference\n this.messages$.next([...this.messages$.value]);\n }\n}\n","@if (hasError && isLoading) {\n <c8y-loading class=\"m-auto\"></c8y-loading>\n}\n@if (hasError && !isLoading) {\n <c8y-ui-empty-state\n class=\"m-auto\"\n [icon]=\"'disclaimer'\"\n [title]=\"'An error occurred' | translate\"\n [subtitle]=\"errorMsg | translate\"\n [horizontal]=\"true\"\n >\n @if (canCreate) {\n <div class=\"text-center m-t-16 m-b-16\">\n <button\n class=\"btn btn-primary\"\n (click)=\"createAgent()\"\n >\n {{ 'Create agent' | translate }}\n </button>\n </div>\n }\n </c8y-ui-empty-state>\n}\n\n@if (!hasError) {\n <c8y-ai-chat\n (onMessage)=\"sendMessage($event)\"\n [isLoading]=\"isLoading\"\n (onCancel)=\"cancel()\"\n [config]=\"{ title: title, headline: headline, welcomeText: welcomeText }\"\n [prompt]=\"prompt\"\n >\n @for (message of messages$ | async; track $index; let i = $index) {\n <c8y-ai-chat-message\n [message]=\"{ role: message.role, content: '', timestamp: message.timestamp }\"\n >\n @if (!message.componentSteps$) {\n <div [innerHTML]=\"message.content | markdownToHtml | async\"></div>\n }\n @for (step of message.componentSteps$ | async; track $index) {\n @if (typeof step.content === 'string') {\n <div [innerHTML]=\"step.content | markdownToHtml | async\"></div>\n } @else {\n <ng-container\n [ngComponentOutlet]=\"step.content\"\n [ngComponentOutletInputs]=\"{ step: step.origin }\"\n ></ng-container>\n }\n }\n\n @if (message.role === 'user') {\n <c8y-ai-chat-message-action\n icon=\"pencil\"\n [tooltip]=\"'Edit and resend this message' | translate\"\n [disabled]=\"isLoading\"\n (click)=\"reprompt(message)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (message.role === 'assistant' && (i < (messages$ | async)?.length - 1 || !isLoading)) {\n <c8y-ai-chat-message-action\n icon=\"thumbs-up\"\n [tooltip]=\"'This is useful' | translate\"\n [disabled]=\"isLoading\"\n (click)=\"rate(message, true)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (message.role === 'assistant' && (i < (messages$ | async)?.length - 1 || !isLoading)) {\n <c8y-ai-chat-message-action\n icon=\"thumbs-down\"\n [tooltip]=\"'This is not useful' | translate\"\n [disabled]=\"isLoading\"\n (click)=\"rate(message, false)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (message.role === 'assistant' && (i < (messages$ | async)?.length - 1 || !isLoading)) {\n <c8y-ai-chat-message-action\n icon=\"refresh\"\n [tooltip]=\"'Regenerate this response' | translate\"\n [disabled]=\"isLoading\"\n (click)=\"reload(message)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (\n !message.content && message.role === 'assistant' && i === (messages$ | async)?.length - 1\n ) {\n <div class=\"text-center\">\n <c8y-loading></c8y-loading>\n </div>\n }\n </c8y-ai-chat-message>\n }\n\n @for (suggestion of suggestions; track $index) {\n <c8y-ai-chat-suggestion\n [icon]=\"suggestion.icon || 'c8y-bulb'\"\n [useAiButtons]=\"true\"\n [label]=\"suggestion.label\"\n [prompt]=\"suggestion.prompt\"\n (suggestionClicked)=\"sendMessage($event)\"\n [disabled]=\"isLoading\"\n ></c8y-ai-chat-suggestion>\n }\n </c8y-ai-chat>\n}\n","import { AsyncPipe } from '@angular/common';\nimport { Component, inject, Input, OnInit, Type } from '@angular/core';\nimport { AlertService, C8yTranslatePipe, ContextRouteService } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { ClientAgentDefinition, ToolResult } from '@c8y/ngx-components/ai';\nimport {\n WidgetConfigFeedbackComponent,\n WidgetConfigService\n} from '@c8y/ngx-components/context-dashboard';\nimport { AgentChatComponent } from './agent-chat.component';\nimport { AgentStepFeedbackComponent } from './agent-step-feedback.component';\nimport { isObservable, Observable, of } from 'rxjs';\n\n@Component({\n selector: 'c8y-widget-ai-chat-section',\n imports: [AgentChatComponent, C8yTranslatePipe, AsyncPipe, WidgetConfigFeedbackComponent],\n standalone: true,\n templateUrl: './widget-ai-chat-section.component.html'\n})\nexport class WidgetAiChatSectionComponent implements OnInit {\n @Input()\n suggestions: Array<{ label: string; prompt: string }> = [];\n @Input()\n agent: string | ClientAgentDefinition;\n @Input()\n headline = gettext('Welcome!');\n @Input()\n title: string = gettext('What can I help you with?');\n @Input()\n welcomeText;\n @Input()\n useContextAsVariable = true;\n @Input()\n contextVariableName = 'c8yContext';\n\n private variables$: Observable<{ [key: string]: any }>;\n /**\n * If set, the variables will be loaded async on each round-trip.\n * This is useful if the variables depend on some async data source or if they need to be updated on each round-trip.\n *\n * @example\n * ```ts\n * variables = combineLatest([\n * this.someService.getData(),\n * this.anotherService.getOtherData()\n * ]).pipe(\n * map(([data, otherData]) => ({\n * myVarOne: data,\n * myVarTwo: otherData\n * }))\n * );\n * ```\n */\n @Input()\n set variables(val: Observable<{ [key: string]: any }> | { [key: string]: any }) {\n if (isObservable(val)) {\n this.variables$ = val;\n } else {\n this.variables$ = of(val);\n }\n }\n get variables(): Observable<{ [key: string]: any }> {\n return this.variables$;\n }\n\n _renderStepComponent: Type<any>;\n\n private readonly widgetConfigService = inject(WidgetConfigService);\n private readonly alertService = inject(AlertService);\n private readonly contextRouteService = inject(ContextRouteService);\n\n /**\n * A component that is used to render each step in the chat. By default, it uses the `AgentStepFeedbackComponent`.\n * You can provide your own component by returning it from this callback.\n *\n * @returns A promise that resolves to a component type.\n */\n @Input()\n loadRenderStepComponent: () => Promise<Type<any>> = () =>\n Promise.resolve(AgentStepFeedbackComponent);\n\n /**\n * A callback that is invoked when a tool result is returned. The function can return either:\n * - `undefined` or `void`: No action is taken.\n * - an object which is stored to the widget configuration.\n */\n onToolResult: (step: ToolResult) => undefined | any = () => undefined;\n\n /**\n * @ignore\n */\n async ngOnInit(): Promise<void> {\n if (!this.variables && this.useContextAsVariable) {\n const { contextData } = this.contextRouteService.activatedContextData;\n this.variables = {\n [this.contextVariableName]: contextData || this.widgetConfigService.currentConfig.device\n };\n }\n\n this._renderStepComponent = await this.loadRenderStepComponent();\n }\n\n /**\n * Handles the tool result returned from the AI agent.\n * @param tool The tool result returned from the AI agent.\n */\n toolResultHandler(tool: ToolResult) {\n try {\n const parsedResult = this.onToolResult(tool);\n if (!parsedResult) {\n return;\n }\n this.widgetConfigService.updateConfig(\n {\n config: {\n ...this.widgetConfigService.currentConfig,\n ...parsedResult\n }\n },\n true\n );\n } catch (e) {\n this.alertService.danger(gettext('There was an error processing the AI response.'));\n }\n }\n}\n","<c8y-widget-config-feedback>\n <div\n class=\"m-l-4 btn-ai btn-ai-hint btn-sm\"\n [title]=\"'AI code assistant' | translate\"\n >\n <span></span>\n </div>\n</c8y-widget-config-feedback>\n\n<c8y-agent-chat\n [title]=\"title | translate\"\n [headline]=\"headline | translate\"\n [welcomeText]=\"welcomeText | translate\"\n #agentChat\n [suggestions]=\"(agentChat.messages$ | async)?.length === 0 ? suggestions : []\"\n [agent]=\"agent\"\n [variables]=\"variables | async\"\n [stepRenderComponent]=\"_renderStepComponent\"\n (onToolResult)=\"toolResultHandler($event)\"\n></c8y-agent-chat>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1652,6 +1652,10 @@ const HTML_AGENT = {
1652
1652
  - Analyze if the widget fulfills the user request
1653
1653
  - Check for mock data usage vs real API integration
1654
1654
  - If inadequate, ask user for specific clarifications needed
1655
+
1656
+
1657
+ Currently the following Code is used:
1658
+ {{currentHtmlWidgetCode}}
1655
1659
  `,
1656
1660
  maxOutputTokens: 20000
1657
1661
  },