@next-bricks/ai-portal 0.55.0 → 0.55.1

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 (31) hide show
  1. package/dist/bricks.json +21 -21
  2. package/dist/chunks/1080.c0cb398b.js +2 -0
  3. package/dist/chunks/1080.c0cb398b.js.map +1 -0
  4. package/dist/chunks/{2084.0e9751e7.js → 2084.778e8126.js} +3 -3
  5. package/dist/chunks/2084.778e8126.js.map +1 -0
  6. package/dist/chunks/3227.77ba4968.js +2 -0
  7. package/dist/chunks/3227.77ba4968.js.map +1 -0
  8. package/dist/chunks/8717.462ca5c9.js +2 -0
  9. package/dist/chunks/8717.462ca5c9.js.map +1 -0
  10. package/dist/chunks/{main.6b7402db.js → main.9f2b6ec7.js} +2 -2
  11. package/dist/chunks/{main.6b7402db.js.map → main.9f2b6ec7.js.map} +1 -1
  12. package/dist/examples.json +14 -14
  13. package/dist/{index.14c08956.js → index.fe56261d.js} +2 -2
  14. package/dist/{index.14c08956.js.map → index.fe56261d.js.map} +1 -1
  15. package/dist/manifest.json +139 -139
  16. package/dist/types.json +188 -84
  17. package/dist-types/chat-stream/UserMessage/UserMessage.d.ts +3 -1
  18. package/dist-types/chat-stream/interfaces.d.ts +2 -1
  19. package/dist-types/cruise-canvas/NodeRequirement/NodeRequirement.d.ts +3 -1
  20. package/dist-types/cruise-canvas/interfaces.d.ts +2 -1
  21. package/dist-types/shared/ReadableCommand/ReadableCommand.d.ts +7 -0
  22. package/dist-types/shared/interfaces.d.ts +3 -0
  23. package/package.json +2 -2
  24. package/dist/chunks/2084.0e9751e7.js.map +0 -1
  25. package/dist/chunks/3227.689d8678.js +0 -2
  26. package/dist/chunks/3227.689d8678.js.map +0 -1
  27. package/dist/chunks/6201.fa3b6e24.js +0 -2
  28. package/dist/chunks/6201.fa3b6e24.js.map +0 -1
  29. package/dist/chunks/8717.1e5ad2b1.js +0 -2
  30. package/dist/chunks/8717.1e5ad2b1.js.map +0 -1
  31. /package/dist/chunks/{2084.0e9751e7.js.LICENSE.txt → 2084.778e8126.js.LICENSE.txt} +0 -0
package/dist/types.json CHANGED
@@ -1,17 +1,4 @@
1
1
  {
2
- "ai-portal.home-container": {
3
- "properties": [
4
- {
5
- "name": "sticky",
6
- "annotation": {
7
- "type": "keyword",
8
- "value": "boolean"
9
- }
10
- }
11
- ],
12
- "events": [],
13
- "methods": []
14
- },
15
2
  "ai-portal.stat-with-mini-chart": {
16
3
  "properties": [
17
4
  {
@@ -116,6 +103,19 @@
116
103
  "events": [],
117
104
  "methods": []
118
105
  },
106
+ "ai-portal.home-container": {
107
+ "properties": [
108
+ {
109
+ "name": "sticky",
110
+ "annotation": {
111
+ "type": "keyword",
112
+ "value": "boolean"
113
+ }
114
+ }
115
+ ],
116
+ "events": [],
117
+ "methods": []
118
+ },
119
119
  "ai-portal.icon-button": {
120
120
  "properties": [
121
121
  {
@@ -365,6 +365,19 @@
365
365
  },
366
366
  "computed": false
367
367
  },
368
+ {
369
+ "type": "propertySignature",
370
+ "key": {
371
+ "type": "identifier",
372
+ "name": "spaceName"
373
+ },
374
+ "annotation": {
375
+ "type": "keyword",
376
+ "value": "string"
377
+ },
378
+ "optional": true,
379
+ "computed": false
380
+ },
368
381
  {
369
382
  "type": "propertySignature",
370
383
  "key": {
@@ -377,6 +390,19 @@
377
390
  },
378
391
  "optional": true,
379
392
  "computed": false
393
+ },
394
+ {
395
+ "type": "propertySignature",
396
+ "key": {
397
+ "type": "identifier",
398
+ "name": "flowName"
399
+ },
400
+ "annotation": {
401
+ "type": "keyword",
402
+ "value": "string"
403
+ },
404
+ "optional": true,
405
+ "computed": false
380
406
  }
381
407
  ]
382
408
  },
@@ -502,6 +528,19 @@
502
528
  },
503
529
  "computed": false
504
530
  },
531
+ {
532
+ "type": "propertySignature",
533
+ "key": {
534
+ "type": "identifier",
535
+ "name": "spaceName"
536
+ },
537
+ "annotation": {
538
+ "type": "keyword",
539
+ "value": "string"
540
+ },
541
+ "optional": true,
542
+ "computed": false
543
+ },
505
544
  {
506
545
  "type": "propertySignature",
507
546
  "key": {
@@ -514,6 +553,19 @@
514
553
  },
515
554
  "optional": true,
516
555
  "computed": false
556
+ },
557
+ {
558
+ "type": "propertySignature",
559
+ "key": {
560
+ "type": "identifier",
561
+ "name": "flowName"
562
+ },
563
+ "annotation": {
564
+ "type": "keyword",
565
+ "value": "string"
566
+ },
567
+ "optional": true,
568
+ "computed": false
517
569
  }
518
570
  ]
519
571
  },
@@ -598,6 +650,77 @@
598
650
  }
599
651
  ]
600
652
  },
653
+ "ai-portal.tab-list": {
654
+ "properties": [
655
+ {
656
+ "name": "tabs",
657
+ "annotation": {
658
+ "type": "array",
659
+ "elementType": {
660
+ "type": "reference",
661
+ "typeName": {
662
+ "type": "identifier",
663
+ "name": "Tab"
664
+ }
665
+ }
666
+ }
667
+ },
668
+ {
669
+ "name": "activeTab",
670
+ "annotation": {
671
+ "type": "keyword",
672
+ "value": "string"
673
+ }
674
+ }
675
+ ],
676
+ "events": [
677
+ {
678
+ "name": "tab.click",
679
+ "detail": {
680
+ "annotation": {
681
+ "type": "reference",
682
+ "typeName": {
683
+ "type": "identifier",
684
+ "name": "Tab"
685
+ }
686
+ }
687
+ }
688
+ }
689
+ ],
690
+ "methods": [],
691
+ "types": [
692
+ {
693
+ "type": "interface",
694
+ "name": "Tab",
695
+ "body": [
696
+ {
697
+ "type": "propertySignature",
698
+ "key": {
699
+ "type": "identifier",
700
+ "name": "id"
701
+ },
702
+ "annotation": {
703
+ "type": "keyword",
704
+ "value": "string"
705
+ },
706
+ "computed": false
707
+ },
708
+ {
709
+ "type": "propertySignature",
710
+ "key": {
711
+ "type": "identifier",
712
+ "name": "label"
713
+ },
714
+ "annotation": {
715
+ "type": "keyword",
716
+ "value": "string"
717
+ },
718
+ "computed": false
719
+ }
720
+ ]
721
+ }
722
+ ]
723
+ },
601
724
  "ai-portal.page-container": {
602
725
  "properties": [
603
726
  {
@@ -706,77 +829,6 @@
706
829
  }
707
830
  ]
708
831
  },
709
- "ai-portal.tab-list": {
710
- "properties": [
711
- {
712
- "name": "tabs",
713
- "annotation": {
714
- "type": "array",
715
- "elementType": {
716
- "type": "reference",
717
- "typeName": {
718
- "type": "identifier",
719
- "name": "Tab"
720
- }
721
- }
722
- }
723
- },
724
- {
725
- "name": "activeTab",
726
- "annotation": {
727
- "type": "keyword",
728
- "value": "string"
729
- }
730
- }
731
- ],
732
- "events": [
733
- {
734
- "name": "tab.click",
735
- "detail": {
736
- "annotation": {
737
- "type": "reference",
738
- "typeName": {
739
- "type": "identifier",
740
- "name": "Tab"
741
- }
742
- }
743
- }
744
- }
745
- ],
746
- "methods": [],
747
- "types": [
748
- {
749
- "type": "interface",
750
- "name": "Tab",
751
- "body": [
752
- {
753
- "type": "propertySignature",
754
- "key": {
755
- "type": "identifier",
756
- "name": "id"
757
- },
758
- "annotation": {
759
- "type": "keyword",
760
- "value": "string"
761
- },
762
- "computed": false
763
- },
764
- {
765
- "type": "propertySignature",
766
- "key": {
767
- "type": "identifier",
768
- "name": "label"
769
- },
770
- "annotation": {
771
- "type": "keyword",
772
- "value": "string"
773
- },
774
- "computed": false
775
- }
776
- ]
777
- }
778
- ]
779
- },
780
832
  "ai-portal.elevo-logo": {
781
833
  "properties": [],
782
834
  "events": [],
@@ -5069,6 +5121,19 @@
5069
5121
  },
5070
5122
  "computed": false
5071
5123
  },
5124
+ {
5125
+ "type": "propertySignature",
5126
+ "key": {
5127
+ "type": "identifier",
5128
+ "name": "spaceName"
5129
+ },
5130
+ "annotation": {
5131
+ "type": "keyword",
5132
+ "value": "string"
5133
+ },
5134
+ "optional": true,
5135
+ "computed": false
5136
+ },
5072
5137
  {
5073
5138
  "type": "propertySignature",
5074
5139
  "key": {
@@ -5081,6 +5146,19 @@
5081
5146
  },
5082
5147
  "optional": true,
5083
5148
  "computed": false
5149
+ },
5150
+ {
5151
+ "type": "propertySignature",
5152
+ "key": {
5153
+ "type": "identifier",
5154
+ "name": "flowName"
5155
+ },
5156
+ "annotation": {
5157
+ "type": "keyword",
5158
+ "value": "string"
5159
+ },
5160
+ "optional": true,
5161
+ "computed": false
5084
5162
  }
5085
5163
  ]
5086
5164
  },
@@ -5602,6 +5680,19 @@
5602
5680
  },
5603
5681
  "computed": false
5604
5682
  },
5683
+ {
5684
+ "type": "propertySignature",
5685
+ "key": {
5686
+ "type": "identifier",
5687
+ "name": "spaceName"
5688
+ },
5689
+ "annotation": {
5690
+ "type": "keyword",
5691
+ "value": "string"
5692
+ },
5693
+ "optional": true,
5694
+ "computed": false
5695
+ },
5605
5696
  {
5606
5697
  "type": "propertySignature",
5607
5698
  "key": {
@@ -5614,6 +5705,19 @@
5614
5705
  },
5615
5706
  "optional": true,
5616
5707
  "computed": false
5708
+ },
5709
+ {
5710
+ "type": "propertySignature",
5711
+ "key": {
5712
+ "type": "identifier",
5713
+ "name": "flowName"
5714
+ },
5715
+ "annotation": {
5716
+ "type": "keyword",
5717
+ "value": "string"
5718
+ },
5719
+ "optional": true,
5720
+ "computed": false
5617
5721
  }
5618
5722
  ]
5619
5723
  },
@@ -1,5 +1,7 @@
1
1
  import React from "react";
2
+ import type { CommandPayload } from "../../shared/interfaces";
2
3
  export interface UserMessageProps {
3
4
  content: string;
5
+ cmd?: CommandPayload;
4
6
  }
5
- export declare function UserMessage({ content }: UserMessageProps): React.JSX.Element;
7
+ export declare function UserMessage({ content, cmd }: UserMessageProps): React.JSX.Element;
@@ -1,8 +1,9 @@
1
- import type { Job } from "../shared/interfaces.js";
1
+ import type { CommandPayload, Job } from "../shared/interfaces.js";
2
2
  export type ChatMessage = MessageFromUser | MessageFromAssistant;
3
3
  export interface MessageFromUser {
4
4
  role: "user";
5
5
  content: string;
6
+ cmd?: CommandPayload;
6
7
  }
7
8
  export interface MessageFromAssistant {
8
9
  role: "assistant";
@@ -1,7 +1,9 @@
1
+ import type { CommandPayload } from "../../shared/interfaces";
1
2
  export interface NodeRequirementProps {
2
3
  username?: string;
3
4
  content?: string;
4
5
  startTime?: number;
5
6
  active?: boolean;
7
+ cmd?: CommandPayload;
6
8
  }
7
- export declare function NodeRequirement({ username, content, startTime, active, }: NodeRequirementProps): JSX.Element;
9
+ export declare function NodeRequirement({ username, content, startTime, active, cmd, }: NodeRequirementProps): JSX.Element;
@@ -1,5 +1,5 @@
1
1
  import type { JSONSchema } from "./json-schema";
2
- import type { GeneratedView, Job, JobState } from "../shared/interfaces";
2
+ import type { CommandPayload, GeneratedView, Job, JobState } from "../shared/interfaces";
3
3
  export type RangeTuple = [min: number, max: number];
4
4
  export type SizeTuple = [width: number, height: number];
5
5
  export interface NodePosition {
@@ -16,6 +16,7 @@ export interface RequirementGraphNode extends BaseGraphNode {
16
16
  type: "requirement";
17
17
  content: string;
18
18
  username?: string;
19
+ cmd?: CommandPayload;
19
20
  }
20
21
  export interface LoadingGraphNode extends BaseGraphNode {
21
22
  type: "loading";
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ import type { CommandPayload } from "../interfaces";
3
+ export interface ReadableCommandProps {
4
+ cmd: CommandPayload;
5
+ size?: "medium" | "small";
6
+ }
7
+ export declare function ReadableCommand({ cmd, size }: ReadableCommandProps): React.JSX.Element;
@@ -40,6 +40,7 @@ export interface Job {
40
40
  humanAction?: string;
41
41
  aiEmployeeId?: string;
42
42
  username?: string;
43
+ cmd?: CommandPayload;
43
44
  }
44
45
  export type HumanAction = HumanActionConfirm | HumanActionSelect;
45
46
  export interface HumanActionConfirm {
@@ -139,6 +140,8 @@ export interface CommandPayloadServiceFlowStarting {
139
140
  type: "serviceFlowStarting";
140
141
  serviceFlowStarting: {
141
142
  spaceInstanceId: string;
143
+ spaceName?: string;
142
144
  flowInstanceId?: string;
145
+ flowName?: string;
143
146
  };
144
147
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@next-bricks/ai-portal",
3
- "version": "0.55.0",
3
+ "version": "0.55.1",
4
4
  "homepage": "https://github.com/easyops-cn/next-advanced-bricks/tree/master/bricks/ai-portal",
5
5
  "repository": {
6
6
  "type": "git",
@@ -47,5 +47,5 @@
47
47
  "@next-bricks/presentational": "*",
48
48
  "@next-bricks/vs": "*"
49
49
  },
50
- "gitHead": "e7cda4d9f829a0395da2471e7d1058ea21394dd3"
50
+ "gitHead": "dcc953bab421b19595f25a36abd5ff30d04aa819"
51
51
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"chunks/2084.0e9751e7.js","mappings":"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","sources":["webpack:///./src/elevo-sidebar/i18n.ts","webpack:///./src/elevo-sidebar/styles.shadow.css","webpack:///./src/elevo-sidebar/bricks.ts","webpack:///../../node_modules/@next-api-sdk/llm-sdk/dist/esm/api/llm/elevo/getElevoProjects.js","webpack:///../../node_modules/@next-api-sdk/llm-sdk/dist/esm/api/llm/elevo/listElevoConversations.js","webpack:///./src/elevo-sidebar/ChatHistory.tsx","webpack:///./src/elevo-sidebar/NavLink.tsx"],"sourcesContent":["import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n NEW_CHAT = \"NEW_CHAT\",\n LOGOUT = \"LOGOUT\",\n TODAY = \"TODAY\",\n YESTERDAY = \"YESTERDAY\",\n PREVIOUS_7_DAYS = \"PREVIOUS_7_DAYS\",\n PREVIOUS_30_DAYS = \"PREVIOUS_30_DAYS\",\n SWITCH_LANGUAGE = \"SWITCH_LANGUAGE\",\n MY = \"MY\",\n PROJECTS = \"PROJECTS\",\n HISTORY = \"HISTORY\",\n CREATE_PROJECT = \"CREATE_PROJECT\",\n MOVE_TO_PROJECT = \"MOVE_TO_PROJECT\",\n UNTITLED = \"UNTITLED\",\n UNNAMED = \"UNNAMED\",\n}\n\nconst en: Locale = {\n [K.NEW_CHAT]: \"New chat\",\n [K.LOGOUT]: \"Logout\",\n [K.TODAY]: \"Today\",\n [K.YESTERDAY]: \"Yesterday\",\n [K.PREVIOUS_7_DAYS]: \"Previous 7 days\",\n [K.PREVIOUS_30_DAYS]: \"Previous 30 days\",\n [K.SWITCH_LANGUAGE]: \"中文\",\n [K.MY]: \"My\",\n [K.PROJECTS]: \"Projects\",\n [K.HISTORY]: \"Chats\",\n [K.CREATE_PROJECT]: \"Create project\",\n [K.MOVE_TO_PROJECT]: \"Move to project\",\n [K.UNTITLED]: \"Untitled\",\n [K.UNNAMED]: \"Unnamed\",\n};\n\nconst zh: Locale = {\n [K.NEW_CHAT]: \"新对话\",\n [K.LOGOUT]: \"登出\",\n [K.TODAY]: \"今天\",\n [K.YESTERDAY]: \"昨天\",\n [K.PREVIOUS_7_DAYS]: \"过去7天\",\n [K.PREVIOUS_30_DAYS]: \"过去30天\",\n [K.SWITCH_LANGUAGE]: \"English\",\n [K.MY]: \"我的\",\n [K.PROJECTS]: \"项目\",\n [K.HISTORY]: \"对话\",\n [K.CREATE_PROJECT]: \"创建项目\",\n [K.MOVE_TO_PROJECT]: \"移动到项目\",\n [K.UNTITLED]: \"无标题\",\n [K.UNNAMED]: \"未命名\",\n};\n\nexport const NS = \"bricks/ai-portal/elevo-sidebar\";\n\nexport const locales = { en, zh };\n\nexport const t = i18n.getFixedT(null, NS);\n\ntype Locale = { [k in K]: string } & {\n [k in K as `${k}_plural`]?: string;\n};\n","// Imports\nimport ___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `:host{display:block}:host([hidden]){display:none}*{box-sizing:border-box}.sidebar{position:relative;z-index:2;width:260px;height:100%;background:rgba(246,247,249,0.5);border:1px solid rgba(255,255,255,0.3);border-radius:12px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:23px 11px 0;display:flex;flex-direction:column;transition:transform 0.3s ease-in-out}.logo-bar{display:flex;align-items:center;justify-content:space-between;margin-bottom:30px;margin-left:4px}.logo-link::part(link){display:block}.logo{vertical-align:middle}.new-chat::part(link){display:flex;gap:0;align-items:center;color:var(--elevo-color-brand);font-size:14px;text-align:left;cursor:pointer}.sidebar .new-chat::part(link){background:#f0f4ff;border-radius:8px;border:1px solid #c9d7ff;padding:9px 13px;font-weight:500;margin-bottom:16px}.sidebar .new-chat::part(link):hover{background:rgba(201,215,255,0.5)}.new-chat-icon{font-size:16px;margin-right:5px}.footer{border-top:1px solid rgba(0,0,0,0.04);padding:9px 12px;margin:0 -12px}.dropdown{display:block}.account{background:none;border:none;border-radius:8px;padding:6px 10px;display:block;width:100%;text-align:left;cursor:pointer}.account:hover{background:rgba(0,0,0,0.04)}.alternative{position:fixed;top:12px;left:8px;padding:6px 10px 6px 8px;display:flex;align-items:center;opacity:0;z-index:2;transition:opacity 0.2s ease-in-out;background:rgba(255,255,255,0);border-radius:8px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.alternative .new-chat::part(link){padding:4px;margin-left:16px;font-size:12px}.alternative .new-chat::part(link):hover{color:#7891ff}.alternative .new-chat::part(link):active{color:#0911b3}.container{width:270px;padding:10px 0 10px 10px;height:100%;transition:width 0.3s ease-in-out,padding 0.3s ease-in-out}.container.collapsed{width:0;padding:10px 0;overflow:visible}.container.collapsed .sidebar{transform:translateX(-100%)}.container.collapsed .alternative{opacity:1}:host([behavior=\"drawer\"]){z-index:2;width:0}:host(:not([behavior=\"drawer\"])) .alternative .new-chat{display:none}.mask{position:fixed;top:0;right:0;bottom:0;left:0}.links{border-bottom:1px solid rgba(0,0,0,0.06);padding-bottom:16px;margin-bottom:16px}.link{display:block}.link + .link{margin-top:4px}.link::part(link){display:flex;gap:0;align-items:center;padding:7px 10px;border-radius:8px;color:#000}.link.active::part(link),.link::part(link):hover{background:rgba(0,0,0,0.04)}.link .icon{font-size:16px;margin-right:10px}.link .title{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.history{flex:1;min-height:0;overflow-y:auto;margin:0 -12px;padding:0 12px}.history ul{list-style:none;margin:0;padding:0}.history .section + .section{margin-top:14px}.history .section-title{display:flex;align-items:center;justify-content:space-between;height:30px;margin-bottom:6px;padding:0 8px;position:sticky;top:0}.history .section-title.sticky::before{content:\"\";position:absolute;top:0;right:0;bottom:0;left:0;background-color:rgb(229,228,234);border-radius:8px;z-index:-1}.history .section-label{display:flex;align-items:center;height:24px;padding:0 8px;margin-left:-8px;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;font-size:12px;color:#8c8c8c;border-radius:8px}.history .section-label eo-icon{vertical-align:middle;margin-left:6px;transition:transform 0.2s ease-in-out}.history .section-label:hover{background:rgba(0,0,0,0.04)}.history .collapsed > ul{display:none}.history .collapsed .section-label eo-icon{transform:rotate(-90deg)}.history .error,.history .loading{display:flex;align-items:center;height:36px;padding:0 8px}.history .loading{justify-content:center}.history .error{color:var(--color-error)}.history .group + .group{margin-top:15px}.history .group-title{font-weight:500;font-size:12px;color:#000;padding:8px;height:36px;line-height:20px}.history .item{display:block}.history .item::part(link){display:flex;align-items:center;padding:0 8px;height:36px;border-radius:8px;color:#000}.history .item.active::part(link){background:rgba(0,0,0,0.06)}.history .item.actions-active::part(link),.history .item::part(link):hover{background:rgba(0,0,0,0.04)}.history .item-title{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.history .actions{cursor:auto}.history .item:not(:hover):not(.actions-active) .actions{display:none}.history .working{width:8px;height:8px;border-radius:8px;background:var(--elevo-color-brand);margin:0 7px}.history .item.actions-active .working,.history .item:hover .working,.history .item.active .working{display:none}.history .load-more{display:flex;justify-content:center;align-items:center;height:36px}.button{display:flex}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","import { wrapBrick } from \"@next-core/react-element\";\nimport type {\n GeneralIcon,\n GeneralIconProps,\n} from \"@next-bricks/icons/general-icon\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\nimport type {\n EoDropdownActions,\n DropdownActionsProps,\n DropdownActionsEvents,\n DropdownActionsEventsMapping,\n} from \"@next-bricks/basic/dropdown-actions\";\nimport type {\n EoEasyopsAvatar,\n EoEasyopsAvatarProps,\n} from \"@next-bricks/basic/easyops-avatar\";\nimport type {\n EoMiniActions,\n EoMiniActionsEvents,\n EoMiniActionsEventsMapping,\n EoMiniActionsProps,\n} from \"@next-bricks/basic/mini-actions\";\nimport type { IconButton, IconButtonProps } from \"../icon-button\";\n\nexport const WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\nexport const WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\nexport const WrappedDropdownActions = wrapBrick<\n EoDropdownActions,\n DropdownActionsProps,\n DropdownActionsEvents,\n DropdownActionsEventsMapping\n>(\"eo-dropdown-actions\", {\n onActionClick: \"action.click\",\n onVisibleChange: \"visible.change\",\n});\nexport const WrappedEasyopsAvatar = wrapBrick<\n EoEasyopsAvatar,\n EoEasyopsAvatarProps\n>(\"eo-easyops-avatar\");\nexport const WrappedMiniActions = wrapBrick<\n EoMiniActions,\n EoMiniActionsProps & { themeVariant?: \"default\" | \"elevo\" },\n EoMiniActionsEvents,\n EoMiniActionsEventsMapping\n>(\"eo-mini-actions\", {\n onActionClick: \"action.click\",\n onVisibleChange: \"visible.change\",\n});\nexport const WrappedIconButton = wrapBrick<IconButton, IconButtonProps>(\n \"ai-portal.icon-button\"\n);\n","import { http } from \"@next-core/http\";\n/**\n * @description 获取elevo项目列表\n * @endpoint list /api/v1/elevo/projects\n */\nexport const ElevoApi_getElevoProjects = async (params, options) => /**! @contract easyops.api.llm.elevo.GetElevoProjects@1.0.0 */(await http.get(\"api/gateway/logic.llm.aiops_service/api/v1/elevo/projects\", {\n ...options,\n params\n})).data;\n//# sourceMappingURL=getElevoProjects.js.map","import { http } from \"@next-core/http\";\n/**\n * @description 获取elevo会话列表\n * @endpoint GET /api/v1/elevo/conversations\n */\nexport const ElevoApi_listElevoConversations = async (params, options) => /**! @contract easyops.api.llm.elevo.ListElevoConversations@1.0.0 */(await http.get(\"api/gateway/logic.llm.aiops_service/api/v1/elevo/conversations\", {\n ...options,\n params\n})).data;\n//# sourceMappingURL=listElevoConversations.js.map","import React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type MutableRefObject,\n type PropsWithChildren,\n} from \"react\";\nimport classNames from \"classnames\";\nimport {\n ElevoApi_listElevoConversations,\n ElevoApi_getElevoProjects,\n type ElevoApi_ListElevoConversationsRequestParams,\n} from \"@next-api-sdk/llm-sdk\";\nimport type {\n ActionType,\n SimpleActionType,\n} from \"@next-bricks/basic/mini-actions\";\nimport type { GeneralIconProps } from \"@next-bricks/icons/general-icon\";\nimport { isEqual, throttle } from \"lodash\";\nimport { K, t } from \"./i18n.js\";\nimport {\n WrappedIcon,\n WrappedLink,\n WrappedMiniActions,\n WrappedIconButton,\n} from \"./bricks.js\";\nimport { DONE_STATES } from \"../shared/constants.js\";\nimport { parseTemplate } from \"../shared/parseTemplate.js\";\nimport type { ConversationState } from \"../shared/interfaces.js\";\nimport type { SidebarLink } from \"./index.js\";\nimport { NavLink } from \"./NavLink.js\";\n\nconst ADD_ICON: GeneralIconProps = {\n lib: \"fa\",\n icon: \"plus\",\n};\n\nexport interface HistoryItem {\n conversationId: string;\n title: string;\n startTime: number;\n state?: ConversationState;\n}\n\nexport interface GroupedHistory {\n title: string;\n items: HistoryItem[];\n}\n\nexport interface ActionClickDetail {\n action: SimpleActionType;\n item: HistoryItem;\n project?: Project;\n}\n\nexport interface ProjectActionClickDetail {\n action: SimpleActionType;\n project: Project;\n}\n\nexport interface Project {\n /** 实例ID */\n instanceId: string;\n /** 项目名称 */\n name: string;\n /** 项目描述 */\n description: string;\n /** 状态 */\n state: \"active\" | \"inactive\";\n /** 默认数字人ID */\n defaultAiEmployeeId: string;\n /** 创建者 */\n creator: string;\n /** 创建时间 */\n ctime: string;\n /** 修改时间 */\n mtime: string;\n /** 修改者 */\n modifier: string;\n}\n\nexport interface ChatHistoryProps {\n historyUrlTemplate?: string;\n historyActions?: ActionType[];\n projectUrlTemplate?: string;\n projectActions?: ActionType[];\n canAddProject?: boolean;\n myLinks?: SidebarLink[];\n onActionClick: (detail: ActionClickDetail) => void;\n onHistoryClick: () => void;\n onProjectActionClick: (detail: ProjectActionClickDetail) => void;\n onAddProject: () => void;\n}\n\nexport interface ChatHistoryRef {\n pull: () => void;\n removeProject?: (projectId: string) => void;\n addProject?: (project: Project) => void;\n moveConversation?: (conversationId: string) => void;\n}\n\nexport const ChatHistory = forwardRef(LowLevelChatHistory);\n\nexport function LowLevelChatHistory(\n {\n historyActions,\n historyUrlTemplate,\n projectUrlTemplate,\n projectActions,\n canAddProject,\n myLinks,\n onActionClick,\n onHistoryClick,\n onProjectActionClick,\n onAddProject,\n }: ChatHistoryProps,\n ref: React.Ref<ChatHistoryRef>\n) {\n const rootRef = useRef<HTMLDivElement | null>(null);\n const [myCollapsed, setMyCollapsed] = useState(false);\n const [projects, setProjects] = useState<Project[] | null>(null);\n const [projectsCollapsed, setProjectsCollapsed] = useState(false);\n const [projectsError, setProjectsError] = useState(false);\n const [historyList, setHistoryList] = useState<HistoryItem[] | null>(null);\n const [historyCollapsed, setHistoryCollapsed] = useState(false);\n const [nextToken, setNextToken] = useState<string | undefined>();\n const [loadNextToken, setLoadNextToken] = useState<string | undefined>();\n const [historyError, setHistoryError] = useState(false);\n const initialRef = useRef(true);\n const [movedConversations, setMovedConversations] = useState<string[]>([]);\n\n const mergedHistoryActions = useMemo(\n () =>\n [\n ...(historyActions ?? []),\n {\n isDropdown: true,\n text: t(K.MOVE_TO_PROJECT),\n disabled: !projects?.length,\n items: projects?.map((project) => ({\n event: \"move\",\n key: project.instanceId,\n text: project.name,\n project,\n })),\n },\n ] as ActionType[],\n [historyActions, projects]\n );\n\n useEffect(() => {\n (async () => {\n try {\n const projects = await ElevoApi_getElevoProjects({\n page: 1,\n page_size: 3000,\n });\n setProjects(projects.list as Project[]);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Error loading projects:\", error);\n setProjectsError(true);\n setProjects([]);\n }\n })();\n }, []);\n\n useEffect(() => {\n Promise.all([\n ElevoApi_listElevoConversations(\n {\n token: loadNextToken,\n limit: 30,\n onlyOwner: true,\n onlyUnrelatedProject: true,\n } as ElevoApi_ListElevoConversationsRequestParams,\n {\n interceptorParams: {\n ignoreLoadingBar: true,\n },\n }\n ),\n ...(initialRef.current\n ? []\n : [\n new Promise((resolve) => setTimeout(resolve, 500)), // Force a minimum delay\n ]),\n ])\n .then(([data]) => {\n initialRef.current = false;\n setHistoryList((prev) => [\n ...(prev ?? []),\n ...(data.conversations as HistoryItem[]),\n ]);\n setNextToken(data.nextToken);\n })\n .catch((error) => {\n // eslint-disable-next-line no-console\n console.error(\"Error loading chat history:\", error);\n setHistoryList([]);\n setHistoryError(true);\n });\n }, [loadNextToken]);\n\n const [actionsVisible, setActionsVisible] = useState<string | null>(null);\n\n const nextRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const next = nextRef.current;\n const root = rootRef.current;\n if (!next || !nextToken || !root || historyCollapsed) {\n return;\n }\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n setLoadNextToken(nextToken);\n }\n }\n },\n { root }\n );\n observer.observe(next);\n return () => {\n observer.disconnect();\n };\n }, [nextToken, historyCollapsed]);\n\n const pullIdRef = useRef(0);\n\n const pull = useCallback(async () => {\n try {\n const pullId = ++pullIdRef.current;\n const tempList = await ElevoApi_listElevoConversations(\n {\n limit: 30,\n onlyOwner: true,\n onlyUnrelatedProject: true,\n } as ElevoApi_ListElevoConversationsRequestParams,\n {\n interceptorParams: {\n ignoreLoadingBar: true,\n },\n }\n );\n if (pullId !== pullIdRef.current) {\n // Ignore this pull if a newer one has been triggered\n return;\n }\n setHistoryList((prev) => {\n const prevList = prev ?? [];\n const newList = tempList.conversations as HistoryItem[];\n const newIds = new Set(newList.map((item) => item.conversationId));\n const newItemsMap = new Map(\n newList.map((item) => [item.conversationId, item])\n );\n\n let foundIntersection = false;\n let foundChanged = false;\n let isFirst = true;\n for (const item of prevList) {\n const newItem = newItemsMap.get(item.conversationId);\n if (newItem) {\n foundIntersection = true;\n foundChanged =\n (isFirst && newItem !== newList[0]) || !isEqual(newItem, item);\n if (foundChanged) {\n break;\n }\n } else {\n break;\n }\n isFirst = false;\n }\n\n if (!foundIntersection) {\n setNextToken(tempList.nextToken);\n return newList;\n }\n\n if (foundChanged) {\n return [\n ...newList,\n ...prevList.filter((item) => !newIds.has(item.conversationId)),\n ];\n }\n\n return prev;\n });\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Error pulling chat history:\", error);\n }\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n pull,\n removeProject: (projectId: string) => {\n setProjects((prev) =>\n prev ? prev.filter((p) => p.instanceId !== projectId) : prev\n );\n },\n addProject: (project: Project) => {\n setProjects((prev) => (prev ? [...prev, project] : [project]));\n },\n moveConversation: (conversationId: string) => {\n setMovedConversations((prev) => [...prev, conversationId]);\n },\n }),\n [pull]\n );\n\n const filteredHistoryList = useMemo(() => {\n if (!historyList || !historyList.length) {\n return historyList;\n }\n return historyList.filter(\n (item) => !movedConversations.includes(item.conversationId)\n );\n }, [historyList, movedConversations]);\n\n return (\n <div className=\"history\" ref={rootRef}>\n {myLinks?.length ? (\n <div className={classNames(\"section\", { collapsed: myCollapsed })}>\n <SectionTitle\n rootRef={rootRef}\n title={t(K.MY)}\n onToggle={() => setMyCollapsed((prev) => !prev)}\n />\n <ul className=\"items\">\n {myLinks.map((link, index) => (\n <li key={index}>\n <NavLink\n url={link.url}\n activeIncludes={link.activeIncludes}\n render={({ active }) => (\n <WrappedLink\n className={classNames(\"item\", { active })}\n url={link.url}\n >\n <div className=\"item-title\">{link.title}</div>\n </WrappedLink>\n )}\n />\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n <div className={classNames(\"section\", { collapsed: projectsCollapsed })}>\n <SectionTitle\n rootRef={rootRef}\n title={t(K.PROJECTS)}\n onToggle={() => setProjectsCollapsed((prev) => !prev)}\n >\n {canAddProject && (\n <WrappedIconButton\n icon={ADD_ICON}\n variant=\"mini-light\"\n tooltip={t(K.CREATE_PROJECT)}\n tooltipHoist={true}\n className=\"button\"\n onClick={onAddProject}\n />\n )}\n </SectionTitle>\n <ul className=\"items\">\n {projectsError ? (\n <li className=\"error\">Failed to load project</li>\n ) : projects ? (\n projects.map((project) => {\n const url = projectUrlTemplate\n ? parseTemplate(projectUrlTemplate, project)\n : undefined;\n return (\n <li key={project.instanceId}>\n <NavLink\n url={url}\n render={({ active }) => (\n <WrappedLink\n className={classNames(\"item\", {\n \"actions-active\":\n project.instanceId === actionsVisible,\n active,\n })}\n onClick={onHistoryClick}\n {...(url ? { url } : null)}\n >\n <div className=\"item-title\" title={project.name}>\n {project.name || t(K.UNNAMED)}\n </div>\n <WrappedMiniActions\n className=\"actions\"\n actions={projectActions}\n themeVariant=\"elevo\"\n onActionClick={(e) => {\n onProjectActionClick({ action: e.detail, project });\n }}\n onVisibleChange={(e) => {\n setActionsVisible(\n e.detail ? project.instanceId : null\n );\n }}\n />\n </WrappedLink>\n )}\n />\n </li>\n );\n })\n ) : (\n <li className=\"loading\">\n <WrappedIcon\n lib=\"antd\"\n theme=\"outlined\"\n icon=\"loading-3-quarters\"\n spinning\n />\n </li>\n )}\n </ul>\n </div>\n <div className={classNames(\"section\", { collapsed: historyCollapsed })}>\n <SectionTitle\n rootRef={rootRef}\n title={t(K.HISTORY)}\n onToggle={() => setHistoryCollapsed((prev) => !prev)}\n />\n <ul className=\"items\">\n {filteredHistoryList ? (\n filteredHistoryList.map((item) => {\n const url = historyUrlTemplate\n ? parseTemplate(historyUrlTemplate, item)\n : undefined;\n return (\n <li key={item.conversationId}>\n <NavLink\n url={url}\n render={({ active }) => (\n <WrappedLink\n className={classNames(\"item\", {\n \"actions-active\":\n item.conversationId === actionsVisible,\n active,\n })}\n onClick={onHistoryClick}\n {...(historyUrlTemplate\n ? { url: parseTemplate(historyUrlTemplate, item) }\n : null)}\n >\n <div className=\"item-title\" title={item.title}>\n {item.title || t(K.UNTITLED)}\n </div>\n <WrappedMiniActions\n className=\"actions\"\n actions={mergedHistoryActions}\n onActionClick={(e) => {\n onActionClick({ action: e.detail, item });\n }}\n onVisibleChange={(e) => {\n setActionsVisible(\n e.detail ? item.conversationId : null\n );\n }}\n />\n {!DONE_STATES.includes(item.state!) && (\n <div className=\"working\"></div>\n )}\n </WrappedLink>\n )}\n />\n </li>\n );\n })\n ) : (\n <li className=\"loading\">\n <WrappedIcon\n lib=\"antd\"\n theme=\"outlined\"\n icon=\"loading-3-quarters\"\n spinning\n />\n </li>\n )}\n {historyError ? (\n <li className=\"error\">Failed to load chat history</li>\n ) : null}\n </ul>\n {!historyCollapsed && nextToken && (\n <div className=\"load-more\" ref={nextRef}>\n <WrappedIcon lib=\"antd\" icon=\"loading-3-quarters\" spinning />\n </div>\n )}\n </div>\n </div>\n );\n}\n\ninterface SectionTitleProps {\n rootRef: MutableRefObject<HTMLDivElement | null>;\n title: string;\n onToggle: () => void;\n}\n\nfunction SectionTitle({\n rootRef,\n title,\n children,\n onToggle,\n}: PropsWithChildren<SectionTitleProps>) {\n const ref = useRef<HTMLDivElement | null>(null);\n const [stickyActive, setStickyActive] = useState(false);\n\n useEffect(() => {\n const parent = rootRef.current;\n const element = ref.current;\n const sibling = element?.nextElementSibling as HTMLElement | null;\n if (!parent || !element || !sibling) {\n return;\n }\n const onScroll = throttle(() => {\n const rect = element.getBoundingClientRect();\n const siblingRect = sibling.getBoundingClientRect();\n const diff = siblingRect.top - rect.top - rect.height;\n setStickyActive(diff < 1);\n }, 100);\n parent.addEventListener(\"scroll\", onScroll);\n return () => {\n parent.removeEventListener(\"scroll\", onScroll);\n };\n }, [rootRef]);\n\n return (\n <div\n className={classNames(\"section-title\", { sticky: stickyActive })}\n ref={ref}\n >\n <div className=\"section-label\" onClick={onToggle}>\n {title}\n <WrappedIcon lib=\"fa\" icon=\"angle-down\" />\n </div>\n {children}\n </div>\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { getHistory, matchPath } from \"@next-core/runtime\";\nimport type { Location } from \"history\";\n\nexport interface NavLinkProps {\n url?: string;\n activeIncludes?: string[];\n render: (props: { active: boolean }) => React.ReactElement;\n}\n\nexport function NavLink({ url, activeIncludes, render }: NavLinkProps) {\n const [active, setActive] = useState(false);\n\n useEffect(() => {\n function checkLinkActive(loc: Location) {\n if (!url) {\n setActive(false);\n return;\n }\n for (const path of [url, ...(activeIncludes ?? [])]) {\n const matched = matchPath(loc.pathname, { path, exact: false });\n if (matched) {\n setActive(true);\n return;\n }\n }\n setActive(false);\n }\n const history = getHistory();\n checkLinkActive(history.location);\n return history.listen(checkLinkActive);\n }, [url, activeIncludes]);\n\n return render({ active });\n}\n"],"names":["K","en","NEW_CHAT","LOGOUT","TODAY","YESTERDAY","PREVIOUS_7_DAYS","PREVIOUS_30_DAYS","SWITCH_LANGUAGE","MY","PROJECTS","HISTORY","CREATE_PROJECT","MOVE_TO_PROJECT","UNTITLED","UNNAMED","zh","NS","locales","t","i18n","getFixedT","___CSS_LOADER_EXPORT___","push","module","id","toString","WrappedIcon","wrapBrick","WrappedLink","WrappedDropdownActions","onActionClick","onVisibleChange","WrappedEasyopsAvatar","WrappedMiniActions","WrappedIconButton","ElevoApi_listElevoConversations","async","params","options","http","get","data","ADD_ICON","lib","icon","ChatHistory","forwardRef","LowLevelChatHistory","_ref","ref","historyActions","historyUrlTemplate","projectUrlTemplate","projectActions","canAddProject","myLinks","onHistoryClick","onProjectActionClick","onAddProject","rootRef","useRef","myCollapsed","setMyCollapsed","useState","projects","setProjects","projectsCollapsed","setProjectsCollapsed","projectsError","setProjectsError","historyList","setHistoryList","historyCollapsed","setHistoryCollapsed","nextToken","setNextToken","loadNextToken","setLoadNextToken","historyError","setHistoryError","initialRef","movedConversations","setMovedConversations","mergedHistoryActions","useMemo","isDropdown","text","disabled","length","items","map","project","event","key","instanceId","name","useEffect","page","page_size","ElevoApi_getElevoProjects","list","error","console","Promise","all","token","limit","onlyOwner","onlyUnrelatedProject","interceptorParams","ignoreLoadingBar","current","resolve","setTimeout","then","_ref2","prev","conversations","catch","actionsVisible","setActionsVisible","nextRef","next","root","observer","IntersectionObserver","entries","entry","isIntersecting","observe","disconnect","pullIdRef","pull","useCallback","pullId","tempList","prevList","newList","newIds","Set","item","conversationId","newItemsMap","Map","foundIntersection","foundChanged","isFirst","newItem","isEqual","filter","has","useImperativeHandle","removeProject","projectId","p","addProject","moveConversation","filteredHistoryList","includes","React","className","classNames","collapsed","SectionTitle","title","onToggle","link","index","NavLink","url","activeIncludes","render","_ref3","active","variant","tooltip","tooltipHoist","onClick","parseTemplate","undefined","_ref4","_extends","actions","themeVariant","e","action","detail","theme","spinning","_ref5","DONE_STATES","state","_ref6","children","stickyActive","setStickyActive","parent","element","sibling","nextElementSibling","onScroll","throttle","rect","getBoundingClientRect","diff","top","height","addEventListener","removeEventListener","sticky","setActive","checkLinkActive","loc","path","matchPath","pathname","exact","history","getHistory","location","listen"],"sourceRoot":""}