@next-bricks/ai-portal 0.29.0 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dist/bricks.json +32 -27
  2. package/dist/chunks/1027.89bc41f2.js +3 -0
  3. package/dist/chunks/1027.89bc41f2.js.map +1 -0
  4. package/dist/chunks/3744.327905d1.js +2 -0
  5. package/dist/chunks/3744.327905d1.js.map +1 -0
  6. package/dist/chunks/4820.b66649ca.js +2 -0
  7. package/dist/chunks/4820.b66649ca.js.map +1 -0
  8. package/dist/chunks/4851.39bf8330.js +2 -0
  9. package/dist/chunks/4851.39bf8330.js.map +1 -0
  10. package/dist/chunks/981.34a3482f.js +2 -0
  11. package/dist/chunks/981.34a3482f.js.map +1 -0
  12. package/dist/chunks/ai-agents.8bc0db39.js +3 -0
  13. package/dist/chunks/ai-agents.8bc0db39.js.map +1 -0
  14. package/dist/chunks/ai-employees.25f9b485.js +3 -0
  15. package/dist/chunks/ai-employees.25f9b485.js.map +1 -0
  16. package/dist/chunks/main.32e7b0fa.js +2 -0
  17. package/dist/chunks/main.32e7b0fa.js.map +1 -0
  18. package/dist/chunks/mcp-tools.0004fb6d.js +3 -0
  19. package/dist/chunks/mcp-tools.0004fb6d.js.map +1 -0
  20. package/dist/chunks/page-container.8ac1b6c4.js +2 -0
  21. package/dist/chunks/page-container.8ac1b6c4.js.map +1 -0
  22. package/dist/chunks/show-cases.87f03dc8.js +3 -0
  23. package/dist/chunks/show-cases.87f03dc8.js.LICENSE.txt +5 -0
  24. package/dist/chunks/show-cases.87f03dc8.js.map +1 -0
  25. package/dist/examples.json +15 -12
  26. package/dist/index.89d6ab59.js +2 -0
  27. package/dist/index.89d6ab59.js.map +1 -0
  28. package/dist/manifest.json +234 -180
  29. package/dist/types.json +395 -302
  30. package/dist-types/ai-agents/index.d.ts +6 -0
  31. package/dist-types/ai-employees/index.d.ts +6 -0
  32. package/dist-types/bootstrap.d.ts +1 -0
  33. package/dist-types/cruise-canvas/interfaces.d.ts +1 -0
  34. package/dist-types/cruise-canvas/utils/converters/interfaces.d.ts +1 -0
  35. package/dist-types/mcp-tools/index.d.ts +4 -0
  36. package/dist-types/page-container/index.d.ts +17 -0
  37. package/dist-types/page-container/index.spec.d.ts +1 -0
  38. package/dist-types/shared/interfaces.d.ts +1 -0
  39. package/dist-types/shared/parseTemplate.d.ts +1 -0
  40. package/docs/page-container.md +11 -0
  41. package/package.json +2 -2
  42. package/dist/chunks/1027.1439bfaf.js +0 -3
  43. package/dist/chunks/1027.1439bfaf.js.map +0 -1
  44. package/dist/chunks/1138.a969d14f.js +0 -2
  45. package/dist/chunks/1138.a969d14f.js.map +0 -1
  46. package/dist/chunks/3744.1c2c9ded.js +0 -2
  47. package/dist/chunks/3744.1c2c9ded.js.map +0 -1
  48. package/dist/chunks/4820.b05f20aa.js +0 -2
  49. package/dist/chunks/4820.b05f20aa.js.map +0 -1
  50. package/dist/chunks/981.42a7e029.js +0 -2
  51. package/dist/chunks/981.42a7e029.js.map +0 -1
  52. package/dist/chunks/ai-agents.921e8399.js +0 -2
  53. package/dist/chunks/ai-agents.921e8399.js.map +0 -1
  54. package/dist/chunks/ai-employees.f2cc101e.js +0 -3
  55. package/dist/chunks/ai-employees.f2cc101e.js.map +0 -1
  56. package/dist/chunks/main.2a174be7.js +0 -2
  57. package/dist/chunks/main.2a174be7.js.map +0 -1
  58. package/dist/chunks/mcp-tools.089be187.js +0 -3
  59. package/dist/chunks/mcp-tools.089be187.js.map +0 -1
  60. package/dist/chunks/show-cases.f0f70cfb.js +0 -3
  61. package/dist/chunks/show-cases.f0f70cfb.js.map +0 -1
  62. package/dist/index.2491a8ea.js +0 -2
  63. package/dist/index.2491a8ea.js.map +0 -1
  64. /package/dist/chunks/{1027.1439bfaf.js.LICENSE.txt → 1027.89bc41f2.js.LICENSE.txt} +0 -0
  65. /package/dist/chunks/{ai-employees.f2cc101e.js.LICENSE.txt → ai-agents.8bc0db39.js.LICENSE.txt} +0 -0
  66. /package/dist/chunks/{mcp-tools.089be187.js.LICENSE.txt → ai-employees.25f9b485.js.LICENSE.txt} +0 -0
  67. /package/dist/chunks/{show-cases.f0f70cfb.js.LICENSE.txt → mcp-tools.0004fb6d.js.LICENSE.txt} +0 -0
package/dist/bricks.json CHANGED
@@ -1,38 +1,51 @@
1
1
  {
2
2
  "id": "bricks/ai-portal",
3
3
  "bricks": [
4
- "ai-portal.home-container",
4
+ "ai-portal.cruise-canvas",
5
5
  "ai-portal.chat-box",
6
+ "ai-portal.chat-history",
6
7
  "ai-portal.stat-with-mini-chart",
7
8
  "ai-portal.elevo-logo",
8
- "ai-portal.chat-history",
9
+ "ai-portal.home-container",
9
10
  "ai-portal.elevo-sidebar",
10
- "ai-portal.show-cases",
11
11
  "ai-portal.icon-button",
12
+ "ai-portal.show-cases",
12
13
  "ai-portal.mcp-tools",
14
+ "ai-portal.chat-stream",
13
15
  "ai-portal.ai-employees",
14
16
  "ai-portal.ai-agents",
15
17
  "ai-portal.save-request-store",
16
18
  "ai-portal.load-request-store",
17
19
  "ai-portal.clear-request-store",
18
- "ai-portal.cruise-canvas",
19
- "ai-portal.chat-stream"
20
+ "ai-portal.page-container"
20
21
  ],
21
22
  "elements": [],
22
23
  "processors": [],
23
24
  "editors": [],
24
25
  "dependencies": {
26
+ "ai-portal.cruise-canvas": [
27
+ "eo-icon",
28
+ "eo-button",
29
+ "eo-link",
30
+ "eo-tooltip",
31
+ "eo-popover",
32
+ "eo-drawer",
33
+ "ai-portal.icon-button",
34
+ "basic.show-dialog",
35
+ "basic.copy-to-clipboard",
36
+ "eo-easyops-avatar"
37
+ ],
25
38
  "ai-portal.chat-box": [
26
39
  "eo-icon"
27
40
  ],
28
- "ai-portal.stat-with-mini-chart": [
29
- "eo-mini-line-chart"
30
- ],
31
41
  "ai-portal.chat-history": [
32
42
  "eo-icon",
33
43
  "eo-link",
34
44
  "eo-mini-actions"
35
45
  ],
46
+ "ai-portal.stat-with-mini-chart": [
47
+ "eo-mini-line-chart"
48
+ ],
36
49
  "ai-portal.elevo-sidebar": [
37
50
  "eo-icon",
38
51
  "eo-link",
@@ -41,31 +54,16 @@
41
54
  "eo-mini-actions",
42
55
  "ai-portal.icon-button"
43
56
  ],
44
- "ai-portal.show-cases": [
45
- "eo-link"
46
- ],
47
57
  "ai-portal.icon-button": [
48
58
  "eo-icon",
49
59
  "eo-tooltip"
50
60
  ],
51
- "ai-portal.mcp-tools": [
52
- "eo-icon"
61
+ "ai-portal.show-cases": [
62
+ "eo-link"
53
63
  ],
54
- "ai-portal.ai-agents": [
64
+ "ai-portal.mcp-tools": [
55
65
  "eo-icon"
56
66
  ],
57
- "ai-portal.cruise-canvas": [
58
- "eo-icon",
59
- "eo-button",
60
- "eo-link",
61
- "eo-tooltip",
62
- "eo-popover",
63
- "eo-drawer",
64
- "ai-portal.icon-button",
65
- "basic.show-dialog",
66
- "basic.copy-to-clipboard",
67
- "eo-easyops-avatar"
68
- ],
69
67
  "ai-portal.chat-stream": [
70
68
  "eo-icon",
71
69
  "eo-button",
@@ -76,7 +74,14 @@
76
74
  "ai-portal.icon-button",
77
75
  "basic.show-dialog",
78
76
  "basic.copy-to-clipboard"
77
+ ],
78
+ "ai-portal.ai-employees": [
79
+ "eo-link"
80
+ ],
81
+ "ai-portal.ai-agents": [
82
+ "eo-icon",
83
+ "eo-link"
79
84
  ]
80
85
  },
81
- "filePath": "bricks/ai-portal/dist/index.2491a8ea.js"
86
+ "filePath": "bricks/ai-portal/dist/index.89d6ab59.js"
82
87
  }
@@ -0,0 +1,3 @@
1
+ /*! For license information please see 1027.89bc41f2.js.LICENSE.txt */
2
+ "use strict";(globalThis.webpackChunk_next_bricks_ai_portal=globalThis.webpackChunk_next_bricks_ai_portal||[]).push([[1027],{17099:(e,t,i)=>{e.exports=i.p+"images/e47076cc.png"},26785:(e,t,i)=>{i.d(t,{Y:()=>v});var a=i(89575),n=i(18769),r=i.n(n),o=i(21302),l=i.n(o),s=i(53373),c=i.n(s),d=i(57372);const p=async(e,t)=>(await d.http.post("api/gateway/logic.llm.aiops_service/api/v1/llm/agent/flow/search",e,t)).data;var m=i(41030),u=i(99671),g=i(42965),h=i(97907),f=i(98343);const v=(0,n.forwardRef)(b);function b(e,t){let{activeId:i,actions:o,urlTemplate:s,onActionClick:d,onHistoryClick:v}=e;const b=(0,n.useRef)(null),[y,E]=(0,n.useState)(null),[x,k]=(0,n.useState)(),[w,S]=(0,n.useState)();(0,n.useEffect)((()=>{Promise.all([p({next_token:w},{interceptorParams:{ignoreLoadingBar:!0}}),new Promise((e=>setTimeout(e,500)))]).then((e=>{let[t]=e;E((e=>[...null!=e?e:[],...t.data])),k(t.next_token)})).catch((e=>{console.error("Error loading chat history:",e)}))}),[w]);const T=(0,n.useMemo)((()=>{const e=new Map,t=l()(),i=t.clone().startOf("day"),a=i.clone().subtract(1,"day"),n=i.clone().subtract(7,"days"),r=i.clone().subtract(30,"days"),o=+i/1e3,s=+a/1e3,c=+n/1e3,d=+r/1e3,p=+t.clone().startOf("year")/1e3;for(const t of null!=y?y:[]){let i;i=t.startTime>=o?(0,u.t)(u.K.TODAY):t.startTime>=s?(0,u.t)(u.K.YESTERDAY):t.startTime>=c?(0,u.t)(u.K.PREVIOUS_7_DAYS):t.startTime>=d?(0,u.t)(u.K.PREVIOUS_30_DAYS):t.startTime>=p?l()(1e3*t.startTime).format("MMMM"):l()(1e3*t.startTime).format("YYYY");let a=e.get(i);a||e.set(i,a={title:i,items:[]}),a.items.push(t)}return[...e.values()]}),[y]),[A,_]=(0,n.useState)(null),Y=(0,n.useRef)(null);(0,n.useEffect)((()=>{const e=Y.current,t=b.current;if(!e||!x||!t)return;const i=new IntersectionObserver((e=>{for(const t of e)t.isIntersecting&&S(x)}),{root:t});return i.observe(e),()=>{i.disconnect()}}),[x]);const I=(0,n.useRef)(0),N=(0,n.useCallback)((async()=>{try{const e=++I.current,t=await p({},{interceptorParams:{ignoreLoadingBar:!0}});if(e!==I.current)return;E((e=>{const i=null!=e?e:[],a=t.data,n=new Set(a.map((e=>e.id))),r=new Map(a.map((e=>[e.id,e])));let o=!1,l=!1,s=!0;for(const e of i){const t=r.get(e.id);if(!t)break;if(o=!0,l=s&&t!==a[0]||!(0,m.isEqual)(t,e),l)break;s=!1}return o?l?[...a,...i.filter((e=>!n.has(e.id)))]:e:(k(t.next_token),a)}))}catch(e){console.error("Error pulling chat history:",e)}}),[]);return(0,n.useImperativeHandle)(t,(()=>({pull:N})),[N]),y?r().createElement("div",{className:"history",ref:b},r().createElement("ul",null,T.map((e=>r().createElement("li",{key:e.title,className:"group"},r().createElement("div",{className:"group-title"},e.title),r().createElement("ul",{className:"items"},e.items.map((e=>r().createElement("li",{key:e.id},r().createElement(g.EM,(0,a.A)({className:c()("item",{"actions-active":e.id===A,active:e.id===i}),onClick:v},s?{url:(0,f.Q)(s,e)}:null),r().createElement("div",{className:"item-title",title:e.title},e.title),r().createElement(g.qu,{className:"actions",actions:o,onActionClick:t=>{d({action:t.detail,item:e})},onVisibleChange:t=>{_(t.detail?e.id:null)}}),!h.QB.includes(e.state)&&r().createElement("div",{className:"working"})))))))))),x&&r().createElement("div",{className:"load-more",ref:Y},r().createElement(g.Bj,{lib:"antd",icon:"loading-3-quarters",spinning:!0}))):r().createElement("div",{className:"history"},r().createElement("div",{className:"loading"},r().createElement(g.Bj,{lib:"antd",theme:"outlined",icon:"loading-3-quarters",spinning:!0})))}},42965:(e,t,i)=>{i.d(t,{Bj:()=>n,EM:()=>r,JQ:()=>l,Py:()=>c,qb:()=>o,qu:()=>s});var a=i(11280);const n=(0,a.wrapBrick)("eo-icon"),r=(0,a.wrapBrick)("eo-link"),o=(0,a.wrapBrick)("eo-dropdown-actions",{onActionClick:"action.click",onVisibleChange:"visible.change"}),l=(0,a.wrapBrick)("eo-easyops-avatar"),s=(0,a.wrapBrick)("eo-mini-actions",{onActionClick:"action.click",onVisibleChange:"visible.change"}),c=(0,a.wrapBrick)("ai-portal.icon-button")},45646:(e,t,i)=>{i.d(t,{D:()=>b});var a=i(89575),n=i(18769),r=i.n(n),o=i(21302),l=i.n(o),s=i(53373),c=i.n(s),d=i(57372);const p=async(e,t)=>(await d.http.get("api/gateway/logic.llm.aiops_service/api/v1/elevo/conversations",{...t,params:e})).data;var m=i(41030),u=i(99671),g=i(42965),h=i(97907),f=i(98343);const v={lib:"antd",icon:"plus-circle"},b=(0,n.forwardRef)(y);function y(e,t){let{username:i,historyActiveId:o,historyActions:s,historyUrlTemplate:b,projectActiveId:y,projectUrlTemplate:E,projectActions:x,onActionClick:k,onHistoryClick:w,onProjectActionClick:S,onAddProject:T}=e;const A=(0,n.useRef)(null),[_,Y]=(0,n.useState)(null),[I,N]=(0,n.useState)(!1),[O,C]=(0,n.useState)(null),[R,P]=(0,n.useState)(!1),[D,j]=(0,n.useState)(),[U,B]=(0,n.useState)(),H=(0,n.useRef)(!0);(0,n.useEffect)((()=>{(async()=>{try{const e=await(async()=>(await d.http.get("api/gateway/logic.llm.aiops_service/api/v1/elevo/projects",{params:{page:1,page_size:3e3}})).data)();Y(e.list)}catch(e){console.error("Error loading projects:",e),Y([])}})()}),[]),(0,n.useEffect)((()=>{j(void 0),B(void 0),C(null)}),[i]),(0,n.useEffect)((()=>{Promise.all([p({token:U,username:i,limit:30},{interceptorParams:{ignoreLoadingBar:!0}}),...H.current?[]:[new Promise((e=>setTimeout(e,500)))]]).then((e=>{let[t]=e;H.current=!1,C((e=>[...null!=e?e:[],...t.conversations])),j(t.nextToken)})).catch((e=>{console.error("Error loading chat history:",e),C([])}))}),[U,i]);const M=(0,n.useMemo)((()=>{const e=new Map,t=l()(),i=t.clone().startOf("day"),a=i.clone().subtract(1,"day"),n=i.clone().subtract(7,"days"),r=i.clone().subtract(30,"days"),o=+i/1e3,s=+a/1e3,c=+n/1e3,d=+r/1e3,p=+t.clone().startOf("year")/1e3;for(const t of null!=O?O:[]){let i;i=t.startTime>=o?(0,u.t)(u.K.TODAY):t.startTime>=s?(0,u.t)(u.K.YESTERDAY):t.startTime>=c?(0,u.t)(u.K.PREVIOUS_7_DAYS):t.startTime>=d?(0,u.t)(u.K.PREVIOUS_30_DAYS):t.startTime>=p?l()(1e3*t.startTime).format("MMMM"):l()(1e3*t.startTime).format("YYYY");let a=e.get(i);a||e.set(i,a={title:i,items:[]}),a.items.push(t)}return[...e.values()]}),[O]),[V,L]=(0,n.useState)(null),q=(0,n.useRef)(null);(0,n.useEffect)((()=>{const e=q.current,t=A.current;if(!e||!D||!t||R)return;const i=new IntersectionObserver((e=>{for(const t of e)t.isIntersecting&&B(D)}),{root:t});return i.observe(e),()=>{i.disconnect()}}),[D,R]);const z=(0,n.useRef)(0),G=(0,n.useCallback)((async()=>{try{const e=++z.current,t=await p({username:i,limit:30},{interceptorParams:{ignoreLoadingBar:!0}});if(e!==z.current)return;C((e=>{const i=null!=e?e:[],a=t.conversations,n=new Set(a.map((e=>e.conversationId))),r=new Map(a.map((e=>[e.conversationId,e])));let o=!1,l=!1,s=!0;for(const e of i){const t=r.get(e.conversationId);if(!t)break;if(o=!0,l=s&&t!==a[0]||!(0,m.isEqual)(t,e),l)break;s=!1}return o?l?[...a,...i.filter((e=>!n.has(e.conversationId)))]:e:(j(t.nextToken),a)}))}catch(e){console.error("Error pulling chat history:",e)}}),[i]);return(0,n.useImperativeHandle)(t,(()=>({pull:G,removeProject:e=>{Y((t=>t?t.filter((t=>t.instanceId!==e)):t))},addProject:e=>{Y((t=>t?[...t,e]:[e]))}})),[G]),r().createElement("div",{className:"history",ref:A},r().createElement("div",{className:c()("section",{collapsed:I})},r().createElement("div",{className:"section-title"},r().createElement("div",{className:"section-label",onClick:()=>N((e=>!e))},(0,u.t)(u.K.PROJECTS),r().createElement(g.Bj,{lib:"fa",icon:"caret-down"})),r().createElement(g.Py,{icon:v,variant:"mini",onClick:T})),r().createElement("ul",{className:"items"},_?_.map((e=>r().createElement("li",{key:e.instanceId},r().createElement(g.EM,(0,a.A)({className:c()("item",{"actions-active":e.instanceId===V,active:e.instanceId===y}),onClick:w},E?{url:(0,f.Q)(E,e)}:null),r().createElement("div",{className:"item-title",title:e.name},e.name),r().createElement(g.qu,{className:"actions",actions:x,onActionClick:t=>{S({action:t.detail,project:e})},onVisibleChange:t=>{L(t.detail?e.instanceId:null)}}))))):r().createElement("li",{className:"loading"},r().createElement(g.Bj,{lib:"antd",theme:"outlined",icon:"loading-3-quarters",spinning:!0})))),r().createElement("div",{className:c()("section",{collapsed:R})},r().createElement("div",{className:"section-title"},r().createElement("div",{className:"section-label",onClick:()=>P((e=>!e))},(0,u.t)(u.K.HISTORY),r().createElement(g.Bj,{lib:"fa",icon:"caret-down"}))),r().createElement("ul",null,O?M.map((e=>r().createElement("li",{key:e.title,className:"group"},r().createElement("div",{className:"group-title"},e.title),r().createElement("ul",{className:"items"},e.items.map((e=>r().createElement("li",{key:e.conversationId},r().createElement(g.EM,(0,a.A)({className:c()("item",{"actions-active":e.conversationId===V,active:e.conversationId===o}),onClick:w},b?{url:(0,f.Q)(b,e)}:null),r().createElement("div",{className:"item-title",title:e.title},e.title),r().createElement(g.qu,{className:"actions",actions:s,onActionClick:t=>{k({action:t.detail,item:e})},onVisibleChange:t=>{L(t.detail?e.conversationId:null)}}),!h.QB.includes(e.state)&&r().createElement("div",{className:"working"}))))))))):r().createElement("li",{className:"loading"},r().createElement(g.Bj,{lib:"antd",theme:"outlined",icon:"loading-3-quarters",spinning:!0}))),!R&&D&&r().createElement("div",{className:"load-more",ref:q},r().createElement(g.Bj,{lib:"antd",icon:"loading-3-quarters",spinning:!0}))))}},61408:(e,t,i)=>{i.d(t,{A:()=>l});var a=i(36758),n=i.n(a),r=i(40935),o=i.n(r)()(n());o.push([e.id,':host{display:block}:host([hidden]){display:none}*{box-sizing:border-box}.sidebar{position:relative;z-index:1;width:261px;height:100%;background:#f6f7f9;border-right:1px solid #e3e5eb;padding:26px 16px 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}.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 -16px}.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:8px;left:8px;padding:6px 10px 6px 8px;display:flex;align-items:center;opacity:0;z-index:1;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:261px;height:100%;transition:width 0.3s ease-in-out}.container.collapsed{width:0;overflow:visible}.container.collapsed .sidebar{transform:translateX(-100%)}.container.collapsed .alternative{opacity:1}:host([behavior="drawer"]){z-index:1;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 13px;border-radius:8px;color:#000}.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 -16px;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:36px;padding:0 8px}.history .section-label{display:flex;align-items:center;height:20px;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;font-size:12px;color:#000}.history .section-label eo-icon{vertical-align:middle;margin-left:6px;transition:transform 0.2s ease-in-out}.history .collapsed > ul{display:none}.history .collapsed .section-label eo-icon{transform:rotate(-90deg)}.history .loading{display:flex;align-items:center;justify-content:center;height:36px}.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}',""]);const l=o.toString()},98343:(e,t,i)=>{i.d(t,{Q:()=>n});var a=i(41030);function n(e,t){return null==e?void 0:e.replace(/{{(.*?)}}/g,((e,i)=>(0,a.get)(t,i.trim())))}},99671:(e,t,i)=>{i.d(t,{I:()=>s,K:()=>n,NS:()=>l,t:()=>c});var a=i(87117);let n=function(e){return e.NEW_CHAT="NEW_CHAT",e.LOGOUT="LOGOUT",e.TODAY="TODAY",e.YESTERDAY="YESTERDAY",e.PREVIOUS_7_DAYS="PREVIOUS_7_DAYS",e.PREVIOUS_30_DAYS="PREVIOUS_30_DAYS",e.SWITCH_LANGUAGE="SWITCH_LANGUAGE",e.PROJECTS="PROJECTS",e.HISTORY="HISTORY",e}({});const r={[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]:"中文",[n.PROJECTS]:"Projects",[n.HISTORY]:"History"},o={[n.NEW_CHAT]:"新对话",[n.LOGOUT]:"登出",[n.TODAY]:"今天",[n.YESTERDAY]:"昨天",[n.PREVIOUS_7_DAYS]:"过去7天",[n.PREVIOUS_30_DAYS]:"过去30天",[n.SWITCH_LANGUAGE]:"English",[n.PROJECTS]:"项目",[n.HISTORY]:"历史会话"},l="bricks/ai-portal/elevo-sidebar",s={en:r,zh:o},c=a.i18n.getFixedT(null,l)}}]);
3
+ //# sourceMappingURL=1027.89bc41f2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunks/1027.89bc41f2.js","mappings":";ySAKO,MAAMA,EAAsCC,MAAOC,EAAMC,WAA4F,EAAAC,KAAKC,KAAK,mEAAoEH,EAAMC,IAAUD,gEC4CnP,MAAMI,GAAoBC,EAAAA,EAAAA,YAAWC,GAErC,SAASA,EAAmBC,EAQjCC,GACA,IARA,SACEC,EAAQ,QACRC,EAAO,YACPC,EAAW,cACXC,EAAa,eACbC,GACuBN,EAGzB,MAAMO,GAAUC,EAAAA,EAAAA,QAA8B,OACvCC,EAAMC,IAAWC,EAAAA,EAAAA,UAAqC,OACtDC,EAAWC,IAAgBF,EAAAA,EAAAA,aAC3BG,EAAeC,IAAoBJ,EAAAA,EAAAA,aAE1CK,EAAAA,EAAAA,YAAU,KACRC,QAAQC,IAAI,CACV3B,EACE,CAAE4B,WAAYL,GACd,CACEM,kBAAmB,CACjBC,kBAAkB,KAIxB,IAAIJ,SAASK,GAAYC,WAAWD,EAAS,SAE5CE,MAAKC,IAAY,IAAVhC,GAAKgC,EACXf,GAASgB,GAAS,IACZA,QAAAA,EAAQ,MACRjC,EAAKA,QAEXoB,EAAapB,EAAK0B,WAAW,IAE9BQ,OAAOC,IAGJC,QAAQD,MAAM,8BAA+BA,EAC/C,GACA,GACH,CAACd,IAEJ,MAAMgB,GAASC,EAAAA,EAAAA,UAAQ,KACrB,MAAMC,EAAW,IAAIC,IAQfC,EAAMC,MACNC,EAAaF,EAAIG,QAAQC,QAAQ,OACjCC,EAAYH,EAAWC,QAAQG,SAAS,EAAG,OAC3CC,EAAeL,EAAWC,QAAQG,SAAS,EAAG,QAC9CE,EAAgBN,EAAWC,QAAQG,SAAS,GAAI,QAGhDG,GACSP,EAAa,IADtBO,GAEQJ,EAAY,IAFpBI,GAGWF,EAAe,IAH1BE,GAIYD,EAAgB,IAJ5BC,GAFWT,EAAIG,QAAQC,QAAQ,QAOb,IAExB,IAAK,MAAMM,KAAQnC,QAAAA,EAAQ,GAAI,CAC7B,IAAIoC,EAEFA,EADED,EAAKE,WAAaH,GACTI,EAAAA,EAAAA,GAAEC,EAAAA,EAAEC,OACNL,EAAKE,WAAaH,GAChBI,EAAAA,EAAAA,GAAEC,EAAAA,EAAEE,WACNN,EAAKE,WAAaH,GAChBI,EAAAA,EAAAA,GAAEC,EAAAA,EAAEG,iBACNP,EAAKE,WAAaH,GAChBI,EAAAA,EAAAA,GAAEC,EAAAA,EAAEI,kBACNR,EAAKE,WAAaH,EAChBR,IAAwB,IAAjBS,EAAKE,WAAkBO,OAAO,QAErClB,IAAwB,IAAjBS,EAAKE,WAAkBO,OAAO,QAElD,IAAIC,EAAQtB,EAASuB,IAAIV,GACpBS,GACHtB,EAASwB,IAAIX,EAAWS,EAAQ,CAAEG,MAAOZ,EAAUa,MAAO,KAE5DJ,EAAMI,MAAMC,KAAKf,EACnB,CAEA,MAAO,IAAIZ,EAAS4B,SAAS,GAC5B,CAACnD,KAEGoD,EAAgBC,IAAqBnD,EAAAA,EAAAA,UAAwB,MAE9DoD,GAAUvD,EAAAA,EAAAA,QAA8B,OAE9CQ,EAAAA,EAAAA,YAAU,KACR,MAAMgD,EAAOD,EAAQE,QACfC,EAAO3D,EAAQ0D,QACrB,IAAKD,IAASpD,IAAcsD,EAC1B,OAEF,MAAMC,EAAW,IAAIC,sBAClBC,IACC,IAAK,MAAMC,KAASD,EACdC,EAAMC,gBACRxD,EAAiBH,EAErB,GAEF,CAAEsD,SAGJ,OADAC,EAASK,QAAQR,GACV,KACLG,EAASM,YAAY,CACtB,GACA,CAAC7D,IAEJ,MAAM8D,GAAYlE,EAAAA,EAAAA,QAAO,GAEnBmE,GAAOC,EAAAA,EAAAA,cAAYpF,UACvB,IACE,MAAMqF,IAAWH,EAAUT,QACrBa,QAAiBvF,EACrB,CAAC,EACD,CACE6B,kBAAmB,CACjBC,kBAAkB,KAIxB,GAAIwD,IAAWH,EAAUT,QAEvB,OAEFvD,GAASgB,IACP,MAAMqD,EAAWrD,QAAAA,EAAQ,GACnBsD,EAAUF,EAASrF,KACnBwF,EAAS,IAAIC,IAAIF,EAAQG,KAAKvC,GAASA,EAAKwC,MAC5CC,EAAc,IAAIpD,IAAI+C,EAAQG,KAAKvC,GAAS,CAACA,EAAKwC,GAAIxC,MAE5D,IAAI0C,GAAoB,EACpBC,GAAe,EACfC,GAAU,EACd,IAAK,MAAM5C,KAAQmC,EAAU,CAC3B,MAAMU,EAAUJ,EAAY9B,IAAIX,EAAKwC,IACrC,IAAIK,EAQF,MAJA,GAHAH,GAAoB,EACpBC,EACGC,GAAWC,IAAYT,EAAQ,MAAQU,EAAAA,EAAAA,SAAQD,EAAS7C,GACvD2C,EACF,MAKJC,GAAU,CACZ,CAEA,OAAKF,EAKDC,EACK,IACFP,KACAD,EAASY,QAAQ/C,IAAUqC,EAAOW,IAAIhD,EAAKwC,OAI3C1D,GAXLb,EAAaiE,EAAS3D,YACf6D,EAUE,GAEf,CAAE,MAAOpD,GAEPC,QAAQD,MAAM,8BAA+BA,EAC/C,IACC,IAUH,OARAiE,EAAAA,EAAAA,qBACE5F,GACA,KAAM,CACJ0E,UAEF,CAACA,IAGElE,EAgBHqF,IAAAA,cAAA,OAAKC,UAAU,UAAU9F,IAAKM,GAC5BuF,IAAAA,cAAA,UACGhE,EAAOqD,KAAK7B,GACXwC,IAAAA,cAAA,MAAIE,IAAK1C,EAAMG,MAAOsC,UAAU,SAC9BD,IAAAA,cAAA,OAAKC,UAAU,eAAezC,EAAMG,OACpCqC,IAAAA,cAAA,MAAIC,UAAU,SACXzC,EAAMI,MAAMyB,KAAKvC,GAChBkD,IAAAA,cAAA,MAAIE,IAAKpD,EAAKwC,IACZU,IAAAA,cAACG,EAAAA,IAAWC,EAAAA,EAAAA,GAAA,CACVH,UAAWI,IAAW,OAAQ,CAC5B,iBAAkBvD,EAAKwC,KAAOvB,EAC9BuC,OAAQxD,EAAKwC,KAAOlF,IAEtBmG,QAAS/F,GACJF,EACD,CAAEkG,KAAKC,EAAAA,EAAAA,GAAcnG,EAAawC,IAClC,MAEJkD,IAAAA,cAAA,OAAKC,UAAU,aAAatC,MAAOb,EAAKa,OACrCb,EAAKa,OAERqC,IAAAA,cAACU,EAAAA,GAAkB,CACjBT,UAAU,UACV5F,QAASA,EACTE,cAAgBoG,IACdpG,EAAc,CAAEqG,OAAQD,EAAEE,OAAQ/D,QAAO,EAE3CgE,gBAAkBH,IAChB3C,EAAkB2C,EAAEE,OAAS/D,EAAKwC,GAAK,KAAK,KAG9CyB,EAAAA,GAAYC,SAASlE,EAAKmE,QAC1BjB,IAAAA,cAAA,OAAKC,UAAU,qBAS9BnF,GACCkF,IAAAA,cAAA,OAAKC,UAAU,YAAY9F,IAAK8D,GAC9B+B,IAAAA,cAACkB,EAAAA,GAAW,CAACC,IAAI,OAAOC,KAAK,qBAAqBC,UAAQ,MAzD9DrB,IAAAA,cAAA,OAAKC,UAAU,WACbD,IAAAA,cAAA,OAAKC,UAAU,WACbD,IAAAA,cAACkB,EAAAA,GAAW,CACVC,IAAI,OACJG,MAAM,WACNF,KAAK,qBACLC,UAAQ,KAwDpB,iGCpRO,MAAMH,GAAcK,EAAAA,EAAAA,WAAyC,WACvDpB,GAAcoB,EAAAA,EAAAA,WAA2B,WACzCC,GAAyBD,EAAAA,EAAAA,WAKpC,sBAAuB,CACvBhH,cAAe,eACfuG,gBAAiB,mBAENW,GAAuBF,EAAAA,EAAAA,WAGlC,qBACWb,GAAqBa,EAAAA,EAAAA,WAKhC,kBAAmB,CACnBhH,cAAe,eACfuG,gBAAiB,mBAENY,GAAoBH,EAAAA,EAAAA,WAC/B,iJC5CK,MCAMI,EAAkCjI,MAAOkI,EAAQhI,WAAuF,EAAAC,KAAK4D,IAAI,iEAAkE,IAC3N7D,EACHgI,YACEjI,gECwBJ,MAAMkI,EAA6B,CACjCV,IAAK,OACLC,KAAM,eAkEKU,GAAc9H,EAAAA,EAAAA,YAAWC,GAE/B,SAASA,EAAmBC,EAcjCC,GACA,IAdA,SACE4H,EAAQ,gBACRC,EAAe,eACfC,EAAc,mBACdC,EAAkB,gBAClBC,EAAe,mBACfC,EAAkB,eAClBC,EAAc,cACd9H,EAAa,eACbC,EAAc,qBACd8H,EAAoB,aACpBC,GACiBrI,EAGnB,MAAMO,GAAUC,EAAAA,EAAAA,QAA8B,OACvC8H,EAAUC,IAAe5H,EAAAA,EAAAA,UAA2B,OACpD6H,EAAmBC,IAAwB9H,EAAAA,EAAAA,WAAS,IACpD+H,EAAaC,IAAkBhI,EAAAA,EAAAA,UAA+B,OAC9DiI,EAAkBC,IAAuBlI,EAAAA,EAAAA,WAAS,IAClDC,EAAWC,IAAgBF,EAAAA,EAAAA,aAC3BG,EAAeC,IAAoBJ,EAAAA,EAAAA,YACpCmI,GAAatI,EAAAA,EAAAA,SAAO,IAE1BQ,EAAAA,EAAAA,YAAU,KACR,WACE,IACE,MAAMsH,OF7H2B9I,iBAAgG,EAAAG,KAAK4D,IAAI,4DAA6D,CAE7MmE,OE2HuD,CAC/CqB,KAAM,EACNC,UAAW,QF5HjBvJ,KE0H2BwJ,GAIvBV,EAAYD,EAAS7H,KACvB,CAAE,MAAOmB,GAEPC,QAAQD,MAAM,0BAA2BA,GACzC2G,EAAY,GACd,CACD,EAZD,EAYI,GACH,KAEHvH,EAAAA,EAAAA,YAAU,KACRH,OAAaqI,GACbnI,OAAiBmI,GACjBP,EAAe,KAAK,GACnB,CAACd,KAEJ7G,EAAAA,EAAAA,YAAU,KACRC,QAAQC,IAAI,CACVuG,EACE,CACE0B,MAAOrI,EACP+G,WACAuB,MAAO,IAET,CACEhI,kBAAmB,CACjBC,kBAAkB,QAIpByH,EAAW7E,QACX,GACA,CACE,IAAIhD,SAASK,GAAYC,WAAWD,EAAS,UAGlDE,MAAKC,IAAY,IAAVhC,GAAKgC,EACXqH,EAAW7E,SAAU,EACrB0E,GAAgBjH,GAAS,IACnBA,QAAAA,EAAQ,MACRjC,EAAK4J,iBAEXxI,EAAapB,EAAKmB,UAAU,IAE7Be,OAAOC,IAENC,QAAQD,MAAM,8BAA+BA,GAC7C+G,EAAe,GAAG,GAClB,GACH,CAAC7H,EAAe+G,IAEnB,MAAM/F,GAASC,EAAAA,EAAAA,UAAQ,KACrB,MAAMC,EAAW,IAAIC,IAQfC,EAAMC,MACNC,EAAaF,EAAIG,QAAQC,QAAQ,OACjCC,EAAYH,EAAWC,QAAQG,SAAS,EAAG,OAC3CC,EAAeL,EAAWC,QAAQG,SAAS,EAAG,QAC9CE,EAAgBN,EAAWC,QAAQG,SAAS,GAAI,QAGhDG,GACSP,EAAa,IADtBO,GAEQJ,EAAY,IAFpBI,GAGWF,EAAe,IAH1BE,GAIYD,EAAgB,IAJ5BC,GAFWT,EAAIG,QAAQC,QAAQ,QAOb,IAExB,IAAK,MAAMM,KAAQ8F,QAAAA,EAAe,GAAI,CACpC,IAAI7F,EAEFA,EADED,EAAKE,WAAaH,GACTI,EAAAA,EAAAA,GAAEC,EAAAA,EAAEC,OACNL,EAAKE,WAAaH,GAChBI,EAAAA,EAAAA,GAAEC,EAAAA,EAAEE,WACNN,EAAKE,WAAaH,GAChBI,EAAAA,EAAAA,GAAEC,EAAAA,EAAEG,iBACNP,EAAKE,WAAaH,GAChBI,EAAAA,EAAAA,GAAEC,EAAAA,EAAEI,kBACNR,EAAKE,WAAaH,EAChBR,IAAwB,IAAjBS,EAAKE,WAAkBO,OAAO,QAErClB,IAAwB,IAAjBS,EAAKE,WAAkBO,OAAO,QAElD,IAAIC,EAAQtB,EAASuB,IAAIV,GACpBS,GACHtB,EAASwB,IAAIX,EAAWS,EAAQ,CAAEG,MAAOZ,EAAUa,MAAO,KAE5DJ,EAAMI,MAAMC,KAAKf,EACnB,CAEA,MAAO,IAAIZ,EAAS4B,SAAS,GAC5B,CAAC8E,KAEG7E,EAAgBC,IAAqBnD,EAAAA,EAAAA,UAAwB,MAE9DoD,GAAUvD,EAAAA,EAAAA,QAA8B,OAE9CQ,EAAAA,EAAAA,YAAU,KACR,MAAMgD,EAAOD,EAAQE,QACfC,EAAO3D,EAAQ0D,QACrB,IAAKD,IAASpD,IAAcsD,GAAQ0E,EAClC,OAEF,MAAMzE,EAAW,IAAIC,sBAClBC,IACC,IAAK,MAAMC,KAASD,EACdC,EAAMC,gBACRxD,EAAiBH,EAErB,GAEF,CAAEsD,SAGJ,OADAC,EAASK,QAAQR,GACV,KACLG,EAASM,YAAY,CACtB,GACA,CAAC7D,EAAWgI,IAEf,MAAMlE,GAAYlE,EAAAA,EAAAA,QAAO,GAEnBmE,GAAOC,EAAAA,EAAAA,cAAYpF,UACvB,IACE,MAAMqF,IAAWH,EAAUT,QACrBa,QAAiB2C,EACrB,CAAEI,WAAUuB,MAAO,IACnB,CACEhI,kBAAmB,CACjBC,kBAAkB,KAIxB,GAAIwD,IAAWH,EAAUT,QAEvB,OAEF0E,GAAgBjH,IACd,MAAMqD,EAAWrD,QAAAA,EAAQ,GACnBsD,EAAUF,EAASuE,cACnBpE,EAAS,IAAIC,IAAIF,EAAQG,KAAKvC,GAASA,EAAK0G,kBAC5CjE,EAAc,IAAIpD,IACtB+C,EAAQG,KAAKvC,GAAS,CAACA,EAAK0G,eAAgB1G,MAG9C,IAAI0C,GAAoB,EACpBC,GAAe,EACfC,GAAU,EACd,IAAK,MAAM5C,KAAQmC,EAAU,CAC3B,MAAMU,EAAUJ,EAAY9B,IAAIX,EAAK0G,gBACrC,IAAI7D,EAQF,MAJA,GAHAH,GAAoB,EACpBC,EACGC,GAAWC,IAAYT,EAAQ,MAAQU,EAAAA,EAAAA,SAAQD,EAAS7C,GACvD2C,EACF,MAKJC,GAAU,CACZ,CAEA,OAAKF,EAKDC,EACK,IACFP,KACAD,EAASY,QAAQ/C,IAAUqC,EAAOW,IAAIhD,EAAK0G,mBAI3C5H,GAXLb,EAAaiE,EAASlE,WACfoE,EAUE,GAEf,CAAE,MAAOpD,GAEPC,QAAQD,MAAM,8BAA+BA,EAC/C,IACC,CAACiG,IAkBJ,OAhBAhC,EAAAA,EAAAA,qBACE5F,GACA,KAAM,CACJ0E,OACA4E,cAAgBC,IACdjB,GAAa7G,GACXA,EAAOA,EAAKiE,QAAQ8D,GAAMA,EAAEC,aAAeF,IAAa9H,GACzD,EAEHiI,WAAaC,IACXrB,GAAa7G,GAAUA,EAAO,IAAIA,EAAMkI,GAAW,CAACA,IAAU,KAGlE,CAACjF,IAIDmB,IAAAA,cAAA,OAAKC,UAAU,UAAU9F,IAAKM,GAC5BuF,IAAAA,cAAA,OAAKC,UAAWI,IAAW,UAAW,CAAE0D,UAAWrB,KACjD1C,IAAAA,cAAA,OAAKC,UAAU,iBACbD,IAAAA,cAAA,OACEC,UAAU,gBACVM,QAASA,IAAMoC,GAAsB/G,IAAUA,MAE9CqB,EAAAA,EAAAA,GAAEC,EAAAA,EAAE8G,UACLhE,IAAAA,cAACkB,EAAAA,GAAW,CAACC,IAAI,KAAKC,KAAK,gBAE7BpB,IAAAA,cAAC0B,EAAAA,GAAiB,CAChBN,KAAMS,EACNoC,QAAQ,OACR1D,QAASgC,KAGbvC,IAAAA,cAAA,MAAIC,UAAU,SACXuC,EACCA,EAASnD,KAAKyE,GACZ9D,IAAAA,cAAA,MAAIE,IAAK4D,EAAQF,YACf5D,IAAAA,cAACG,EAAAA,IAAWC,EAAAA,EAAAA,GAAA,CACVH,UAAWI,IAAW,OAAQ,CAC5B,iBAAkByD,EAAQF,aAAe7F,EACzCuC,OAAQwD,EAAQF,aAAezB,IAEjC5B,QAAS/F,GACJ4H,EACD,CAAE5B,KAAKC,EAAAA,EAAAA,GAAc2B,EAAoB0B,IACzC,MAEJ9D,IAAAA,cAAA,OAAKC,UAAU,aAAatC,MAAOmG,EAAQI,MACxCJ,EAAQI,MAEXlE,IAAAA,cAACU,EAAAA,GAAkB,CACjBT,UAAU,UACV5F,QAASgI,EACT9H,cAAgBoG,IACd2B,EAAqB,CAAE1B,OAAQD,EAAEE,OAAQiD,WAAU,EAErDhD,gBAAkBH,IAChB3C,EAAkB2C,EAAEE,OAASiD,EAAQF,WAAa,KAAK,QAOjE5D,IAAAA,cAAA,MAAIC,UAAU,WACZD,IAAAA,cAACkB,EAAAA,GAAW,CACVC,IAAI,OACJG,MAAM,WACNF,KAAK,qBACLC,UAAQ,OAMlBrB,IAAAA,cAAA,OAAKC,UAAWI,IAAW,UAAW,CAAE0D,UAAWjB,KACjD9C,IAAAA,cAAA,OAAKC,UAAU,iBACbD,IAAAA,cAAA,OACEC,UAAU,gBACVM,QAASA,IAAMwC,GAAqBnH,IAAUA,MAE7CqB,EAAAA,EAAAA,GAAEC,EAAAA,EAAEiH,SACLnE,IAAAA,cAACkB,EAAAA,GAAW,CAACC,IAAI,KAAKC,KAAK,iBAG/BpB,IAAAA,cAAA,UACG4C,EACC5G,EAAOqD,KAAK7B,GACVwC,IAAAA,cAAA,MAAIE,IAAK1C,EAAMG,MAAOsC,UAAU,SAC9BD,IAAAA,cAAA,OAAKC,UAAU,eAAezC,EAAMG,OACpCqC,IAAAA,cAAA,MAAIC,UAAU,SACXzC,EAAMI,MAAMyB,KAAKvC,GAChBkD,IAAAA,cAAA,MAAIE,IAAKpD,EAAK0G,gBACZxD,IAAAA,cAACG,EAAAA,IAAWC,EAAAA,EAAAA,GAAA,CACVH,UAAWI,IAAW,OAAQ,CAC5B,iBACEvD,EAAK0G,iBAAmBzF,EAC1BuC,OAAQxD,EAAK0G,iBAAmBxB,IAElCzB,QAAS/F,GACJ0H,EACD,CAAE1B,KAAKC,EAAAA,EAAAA,GAAcyB,EAAoBpF,IACzC,MAEJkD,IAAAA,cAAA,OAAKC,UAAU,aAAatC,MAAOb,EAAKa,OACrCb,EAAKa,OAERqC,IAAAA,cAACU,EAAAA,GAAkB,CACjBT,UAAU,UACV5F,QAAS4H,EACT1H,cAAgBoG,IACdpG,EAAc,CAAEqG,OAAQD,EAAEE,OAAQ/D,QAAO,EAE3CgE,gBAAkBH,IAChB3C,EACE2C,EAAEE,OAAS/D,EAAK0G,eAAiB,KAClC,KAGHzC,EAAAA,GAAYC,SAASlE,EAAKmE,QAC1BjB,IAAAA,cAAA,OAAKC,UAAU,oBAS7BD,IAAAA,cAAA,MAAIC,UAAU,WACZD,IAAAA,cAACkB,EAAAA,GAAW,CACVC,IAAI,OACJG,MAAM,WACNF,KAAK,qBACLC,UAAQ,OAKdyB,GAAoBhI,GACpBkF,IAAAA,cAAA,OAAKC,UAAU,YAAY9F,IAAK8D,GAC9B+B,IAAAA,cAACkB,EAAAA,GAAW,CAACC,IAAI,OAAOC,KAAK,qBAAqBC,UAAQ,MAMtE,uECjdI+C,QAA0B,GAA4B,KAE1DA,EAAwBvG,KAAK,CAACwG,EAAO/E,GAAI,s+HAAu+H,KAEhhI,QAAe8E,EAAwBE,4DCLhC,SAAS7D,EACd8D,EACAC,GAEA,OAAOD,aAAQ,EAARA,EAAUE,QAAQ,cAAc,CAACC,EAAgBxE,KACxCzC,EAAAA,EAAAA,KAAI+G,EAAStE,EAAIyE,SAGnC,4ECRO,IAAKzH,EAAC,SAADA,GAAC,OAADA,EAAC,oBAADA,EAAC,gBAADA,EAAC,cAADA,EAAC,sBAADA,EAAC,kCAADA,EAAC,oCAADA,EAAC,kCAADA,EAAC,oBAADA,EAAC,kBAADA,CAAC,MAYb,MAAM0H,EAAa,CACjB,CAAC1H,EAAE2H,UAAW,WACd,CAAC3H,EAAE4H,QAAS,SACZ,CAAC5H,EAAEC,OAAQ,QACX,CAACD,EAAEE,WAAY,YACf,CAACF,EAAEG,iBAAkB,kBACrB,CAACH,EAAEI,kBAAmB,mBACtB,CAACJ,EAAE6H,iBAAkB,KACrB,CAAC7H,EAAE8G,UAAW,WACd,CAAC9G,EAAEiH,SAAU,WAGTa,EAAa,CACjB,CAAC9H,EAAE2H,UAAW,MACd,CAAC3H,EAAE4H,QAAS,KACZ,CAAC5H,EAAEC,OAAQ,KACX,CAACD,EAAEE,WAAY,KACf,CAACF,EAAEG,iBAAkB,OACrB,CAACH,EAAEI,kBAAmB,QACtB,CAACJ,EAAE6H,iBAAkB,UACrB,CAAC7H,EAAE8G,UAAW,KACd,CAAC9G,EAAEiH,SAAU,QAGFc,EAAK,iCAELC,EAAU,CAAEN,KAAII,MAEhB/H,EAAIkI,EAAAA,KAAKC,UAAU,KAAMH","sources":["webpack:///../../node_modules/@next-api-sdk/llm-sdk/dist/esm/api/llm/agent_flow/searchTaskForAgentFlow.js","webpack:///./src/elevo-sidebar/LegacyChatHistory.tsx","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/styles.shadow.css","webpack:///./src/shared/parseTemplate.ts","webpack:///./src/elevo-sidebar/i18n.ts"],"sourcesContent":["import { http } from \"@next-core/http\";\n/**\n * @description 分页查询agent flow, 默认只查询最近三个页的数据\n * @endpoint POST /api/v1/llm/agent/flow/search\n */\nexport const AgentFlowApi_searchTaskForAgentFlow = async (data, options) => /**! @contract easyops.api.llm.agent_flow.SearchTaskForAgentFlow@1.0.0 */(await http.post(\"api/gateway/logic.llm.aiops_service/api/v1/llm/agent/flow/search\", data, options)).data;\n//# sourceMappingURL=searchTaskForAgentFlow.js.map","import React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport moment from \"moment\";\nimport classNames from \"classnames\";\nimport { AgentFlowApi_searchTaskForAgentFlow } from \"@next-api-sdk/llm-sdk\";\nimport type {\n ActionType,\n SimpleActionType,\n} from \"@next-bricks/basic/mini-actions\";\nimport { isEqual } from \"lodash\";\nimport { K, t } from \"./i18n.js\";\nimport type { TaskState } from \"../cruise-canvas/interfaces.js\";\nimport { WrappedIcon, WrappedLink, WrappedMiniActions } from \"./bricks.js\";\nimport { DONE_STATES } from \"../shared/constants.js\";\nimport type { ChatHistoryRef } from \"./ChatHistory.js\";\nimport { parseTemplate } from \"../shared/parseTemplate.js\";\n\ninterface LegacyHistoryItem {\n id: string;\n title: string;\n startTime: number;\n state?: TaskState;\n}\n\ninterface LegacyGroupedHistory {\n title: string;\n items: LegacyHistoryItem[];\n}\n\nexport interface LegacyActionClickDetail {\n action: SimpleActionType;\n item: LegacyHistoryItem;\n}\n\nexport interface LegacyChatHistoryProps {\n activeId?: string;\n urlTemplate?: string;\n actions?: ActionType[];\n onActionClick: (detail: LegacyActionClickDetail) => void;\n onHistoryClick: () => void;\n}\n\nexport const LegacyChatHistory = forwardRef(LowLevelChatHistory);\n\nexport function LowLevelChatHistory(\n {\n activeId,\n actions,\n urlTemplate,\n onActionClick,\n onHistoryClick,\n }: LegacyChatHistoryProps,\n ref: React.Ref<ChatHistoryRef>\n) {\n const rootRef = useRef<HTMLDivElement | null>(null);\n const [list, setList] = useState<LegacyHistoryItem[] | null>(null);\n const [nextToken, setNextToken] = useState<string | undefined>();\n const [loadNextToken, setLoadNextToken] = useState<string | undefined>();\n\n useEffect(() => {\n Promise.all([\n AgentFlowApi_searchTaskForAgentFlow(\n { next_token: loadNextToken },\n {\n interceptorParams: {\n ignoreLoadingBar: true,\n },\n }\n ),\n new Promise((resolve) => setTimeout(resolve, 500)), // Force a minimum delay\n ])\n .then(([data]) => {\n setList((prev) => [\n ...(prev ?? []),\n ...(data.data as LegacyHistoryItem[]),\n ]);\n setNextToken(data.next_token);\n })\n .catch((error) => {\n if (process.env.NODE_ENV !== \"test\") {\n // eslint-disable-next-line no-console\n console.error(\"Error loading chat history:\", error);\n }\n });\n }, [loadNextToken]);\n\n const groups = useMemo(() => {\n const groupMap = new Map<string, LegacyGroupedHistory>();\n // Group history by\n // - today\n // - yesterday\n // - previous 7 days\n // - previous 30 days\n // - each month this year\n // - each year before.\n const now = moment();\n const startOfDay = now.clone().startOf(\"day\");\n const yesterday = startOfDay.clone().subtract(1, \"day\");\n const sevenDaysAgo = startOfDay.clone().subtract(7, \"days\");\n const thirtyDaysAgo = startOfDay.clone().subtract(30, \"days\");\n const thisYear = now.clone().startOf(\"year\");\n\n const timestamps = {\n startOfDay: +startOfDay / 1000,\n yesterday: +yesterday / 1000,\n sevenDaysAgo: +sevenDaysAgo / 1000,\n thirtyDaysAgo: +thirtyDaysAgo / 1000,\n thisYear: +thisYear / 1000,\n };\n for (const item of list ?? []) {\n let groupKey: string;\n if (item.startTime >= timestamps.startOfDay) {\n groupKey = t(K.TODAY);\n } else if (item.startTime >= timestamps.yesterday) {\n groupKey = t(K.YESTERDAY);\n } else if (item.startTime >= timestamps.sevenDaysAgo) {\n groupKey = t(K.PREVIOUS_7_DAYS);\n } else if (item.startTime >= timestamps.thirtyDaysAgo) {\n groupKey = t(K.PREVIOUS_30_DAYS);\n } else if (item.startTime >= timestamps.thisYear) {\n groupKey = moment(item.startTime * 1000).format(\"MMMM\");\n } else {\n groupKey = moment(item.startTime * 1000).format(\"YYYY\");\n }\n let group = groupMap.get(groupKey);\n if (!group) {\n groupMap.set(groupKey, (group = { title: groupKey, items: [] }));\n }\n group.items.push(item);\n }\n\n return [...groupMap.values()];\n }, [list]);\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) {\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]);\n\n const pullIdRef = useRef(0);\n\n const pull = useCallback(async () => {\n try {\n const pullId = ++pullIdRef.current;\n const tempList = await AgentFlowApi_searchTaskForAgentFlow(\n {},\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 setList((prev) => {\n const prevList = prev ?? [];\n const newList = tempList.data as LegacyHistoryItem[];\n const newIds = new Set(newList.map((item) => item.id));\n const newItemsMap = new Map(newList.map((item) => [item.id, item]));\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.id);\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.next_token);\n return newList;\n }\n\n if (foundChanged) {\n return [\n ...newList,\n ...prevList.filter((item) => !newIds.has(item.id)),\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 }),\n [pull]\n );\n\n if (!list) {\n return (\n <div className=\"history\">\n <div className=\"loading\">\n <WrappedIcon\n lib=\"antd\"\n theme=\"outlined\"\n icon=\"loading-3-quarters\"\n spinning\n />\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"history\" ref={rootRef}>\n <ul>\n {groups.map((group) => (\n <li key={group.title} className=\"group\">\n <div className=\"group-title\">{group.title}</div>\n <ul className=\"items\">\n {group.items.map((item) => (\n <li key={item.id}>\n <WrappedLink\n className={classNames(\"item\", {\n \"actions-active\": item.id === actionsVisible,\n active: item.id === activeId,\n })}\n onClick={onHistoryClick}\n {...(urlTemplate\n ? { url: parseTemplate(urlTemplate, item) }\n : null)}\n >\n <div className=\"item-title\" title={item.title}>\n {item.title}\n </div>\n <WrappedMiniActions\n className=\"actions\"\n actions={actions}\n onActionClick={(e) => {\n onActionClick({ action: e.detail, item });\n }}\n onVisibleChange={(e) => {\n setActionsVisible(e.detail ? item.id : null);\n }}\n />\n {!DONE_STATES.includes(item.state!) && (\n <div className=\"working\"></div>\n )}\n </WrappedLink>\n </li>\n ))}\n </ul>\n </li>\n ))}\n </ul>\n {nextToken && (\n <div className=\"load-more\" ref={nextRef}>\n <WrappedIcon lib=\"antd\" icon=\"loading-3-quarters\" spinning />\n </div>\n )}\n </div>\n );\n}\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,\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} from \"react\";\nimport moment from \"moment\";\nimport classNames from \"classnames\";\nimport {\n ElevoApi_listElevoConversations,\n ElevoApi_getElevoProjects,\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 } from \"lodash\";\nimport { K, t } from \"./i18n.js\";\nimport type { TaskState } from \"../cruise-canvas/interfaces.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\";\n\nconst ADD_ICON: GeneralIconProps = {\n lib: \"antd\",\n icon: \"plus-circle\",\n};\n\nexport interface HistoryItem {\n conversationId: string;\n title: string;\n startTime: number;\n state?: TaskState;\n}\n\nexport interface GroupedHistory {\n title: string;\n items: HistoryItem[];\n}\n\nexport interface ActionClickDetail {\n action: SimpleActionType;\n item: HistoryItem;\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 username?: string;\n historyActiveId?: string;\n historyUrlTemplate?: string;\n historyActions?: ActionType[];\n projectActiveId?: string;\n projectUrlTemplate?: string;\n projectActions?: ActionType[];\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}\n\nexport const ChatHistory = forwardRef(LowLevelChatHistory);\n\nexport function LowLevelChatHistory(\n {\n username,\n historyActiveId,\n historyActions,\n historyUrlTemplate,\n projectActiveId,\n projectUrlTemplate,\n projectActions,\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 [projects, setProjects] = useState<Project[] | null>(null);\n const [projectsCollapsed, setProjectsCollapsed] = 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 initialRef = useRef(true);\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 setProjects([]);\n }\n })();\n }, []);\n\n useEffect(() => {\n setNextToken(undefined);\n setLoadNextToken(undefined);\n setHistoryList(null);\n }, [username]);\n\n useEffect(() => {\n Promise.all([\n ElevoApi_listElevoConversations(\n {\n token: loadNextToken,\n username,\n limit: 30,\n },\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 });\n }, [loadNextToken, username]);\n\n const groups = useMemo(() => {\n const groupMap = new Map<string, GroupedHistory>();\n // Group history by\n // - today\n // - yesterday\n // - previous 7 days\n // - previous 30 days\n // - each month this year\n // - each year before.\n const now = moment();\n const startOfDay = now.clone().startOf(\"day\");\n const yesterday = startOfDay.clone().subtract(1, \"day\");\n const sevenDaysAgo = startOfDay.clone().subtract(7, \"days\");\n const thirtyDaysAgo = startOfDay.clone().subtract(30, \"days\");\n const thisYear = now.clone().startOf(\"year\");\n\n const timestamps = {\n startOfDay: +startOfDay / 1000,\n yesterday: +yesterday / 1000,\n sevenDaysAgo: +sevenDaysAgo / 1000,\n thirtyDaysAgo: +thirtyDaysAgo / 1000,\n thisYear: +thisYear / 1000,\n };\n for (const item of historyList ?? []) {\n let groupKey: string;\n if (item.startTime >= timestamps.startOfDay) {\n groupKey = t(K.TODAY);\n } else if (item.startTime >= timestamps.yesterday) {\n groupKey = t(K.YESTERDAY);\n } else if (item.startTime >= timestamps.sevenDaysAgo) {\n groupKey = t(K.PREVIOUS_7_DAYS);\n } else if (item.startTime >= timestamps.thirtyDaysAgo) {\n groupKey = t(K.PREVIOUS_30_DAYS);\n } else if (item.startTime >= timestamps.thisYear) {\n groupKey = moment(item.startTime * 1000).format(\"MMMM\");\n } else {\n groupKey = moment(item.startTime * 1000).format(\"YYYY\");\n }\n let group = groupMap.get(groupKey);\n if (!group) {\n groupMap.set(groupKey, (group = { title: groupKey, items: [] }));\n }\n group.items.push(item);\n }\n\n return [...groupMap.values()];\n }, [historyList]);\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 { username, limit: 30 },\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 }, [username]);\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 }),\n [pull]\n );\n\n return (\n <div className=\"history\" ref={rootRef}>\n <div className={classNames(\"section\", { collapsed: projectsCollapsed })}>\n <div className=\"section-title\">\n <div\n className=\"section-label\"\n onClick={() => setProjectsCollapsed((prev) => !prev)}\n >\n {t(K.PROJECTS)}\n <WrappedIcon lib=\"fa\" icon=\"caret-down\" />\n </div>\n <WrappedIconButton\n icon={ADD_ICON}\n variant=\"mini\"\n onClick={onAddProject}\n />\n </div>\n <ul className=\"items\">\n {projects ? (\n projects.map((project) => (\n <li key={project.instanceId}>\n <WrappedLink\n className={classNames(\"item\", {\n \"actions-active\": project.instanceId === actionsVisible,\n active: project.instanceId === projectActiveId,\n })}\n onClick={onHistoryClick}\n {...(projectUrlTemplate\n ? { url: parseTemplate(projectUrlTemplate, project) }\n : null)}\n >\n <div className=\"item-title\" title={project.name}>\n {project.name}\n </div>\n <WrappedMiniActions\n className=\"actions\"\n actions={projectActions}\n onActionClick={(e) => {\n onProjectActionClick({ action: e.detail, project });\n }}\n onVisibleChange={(e) => {\n setActionsVisible(e.detail ? project.instanceId : null);\n }}\n />\n </WrappedLink>\n </li>\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 <div className=\"section-title\">\n <div\n className=\"section-label\"\n onClick={() => setHistoryCollapsed((prev) => !prev)}\n >\n {t(K.HISTORY)}\n <WrappedIcon lib=\"fa\" icon=\"caret-down\" />\n </div>\n </div>\n <ul>\n {historyList ? (\n groups.map((group) => (\n <li key={group.title} className=\"group\">\n <div className=\"group-title\">{group.title}</div>\n <ul className=\"items\">\n {group.items.map((item) => (\n <li key={item.conversationId}>\n <WrappedLink\n className={classNames(\"item\", {\n \"actions-active\":\n item.conversationId === actionsVisible,\n active: item.conversationId === historyActiveId,\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}\n </div>\n <WrappedMiniActions\n className=\"actions\"\n actions={historyActions}\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 </li>\n ))}\n </ul>\n </li>\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 {!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","// 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:1;width:261px;height:100%;background:#f6f7f9;border-right:1px solid #e3e5eb;padding:26px 16px 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}.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 -16px}.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:8px;left:8px;padding:6px 10px 6px 8px;display:flex;align-items:center;opacity:0;z-index:1;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:261px;height:100%;transition:width 0.3s ease-in-out}.container.collapsed{width:0;overflow:visible}.container.collapsed .sidebar{transform:translateX(-100%)}.container.collapsed .alternative{opacity:1}:host([behavior=\"drawer\"]){z-index:1;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 13px;border-radius:8px;color:#000}.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 -16px;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:36px;padding:0 8px}.history .section-label{display:flex;align-items:center;height:20px;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500;font-size:12px;color:#000}.history .section-label eo-icon{vertical-align:middle;margin-left:6px;transition:transform 0.2s ease-in-out}.history .collapsed > ul{display:none}.history .collapsed .section-label eo-icon{transform:rotate(-90deg)}.history .loading{display:flex;align-items:center;justify-content:center;height:36px}.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}`, \"\"]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___.toString();\n","import { get } from \"lodash\";\n\nexport function parseTemplate(\n template: string | undefined,\n context: Record<string, any>\n) {\n return template?.replace(/{{(.*?)}}/g, (_match: string, key: string) => {\n const value = get(context, key.trim());\n return value;\n });\n}\n","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 PROJECTS = \"PROJECTS\",\n HISTORY = \"HISTORY\",\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.PROJECTS]: \"Projects\",\n [K.HISTORY]: \"History\",\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.PROJECTS]: \"项目\",\n [K.HISTORY]: \"历史会话\",\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"],"names":["AgentFlowApi_searchTaskForAgentFlow","async","data","options","http","post","LegacyChatHistory","forwardRef","LowLevelChatHistory","_ref","ref","activeId","actions","urlTemplate","onActionClick","onHistoryClick","rootRef","useRef","list","setList","useState","nextToken","setNextToken","loadNextToken","setLoadNextToken","useEffect","Promise","all","next_token","interceptorParams","ignoreLoadingBar","resolve","setTimeout","then","_ref2","prev","catch","error","console","groups","useMemo","groupMap","Map","now","moment","startOfDay","clone","startOf","yesterday","subtract","sevenDaysAgo","thirtyDaysAgo","timestamps","item","groupKey","startTime","t","K","TODAY","YESTERDAY","PREVIOUS_7_DAYS","PREVIOUS_30_DAYS","format","group","get","set","title","items","push","values","actionsVisible","setActionsVisible","nextRef","next","current","root","observer","IntersectionObserver","entries","entry","isIntersecting","observe","disconnect","pullIdRef","pull","useCallback","pullId","tempList","prevList","newList","newIds","Set","map","id","newItemsMap","foundIntersection","foundChanged","isFirst","newItem","isEqual","filter","has","useImperativeHandle","React","className","key","WrappedLink","_extends","classNames","active","onClick","url","parseTemplate","WrappedMiniActions","e","action","detail","onVisibleChange","DONE_STATES","includes","state","WrappedIcon","lib","icon","spinning","theme","wrapBrick","WrappedDropdownActions","WrappedEasyopsAvatar","WrappedIconButton","ElevoApi_listElevoConversations","params","ADD_ICON","ChatHistory","username","historyActiveId","historyActions","historyUrlTemplate","projectActiveId","projectUrlTemplate","projectActions","onProjectActionClick","onAddProject","projects","setProjects","projectsCollapsed","setProjectsCollapsed","historyList","setHistoryList","historyCollapsed","setHistoryCollapsed","initialRef","page","page_size","ElevoApi_getElevoProjects","undefined","token","limit","conversations","conversationId","removeProject","projectId","p","instanceId","addProject","project","collapsed","PROJECTS","variant","name","HISTORY","___CSS_LOADER_EXPORT___","module","toString","template","context","replace","_match","trim","en","NEW_CHAT","LOGOUT","SWITCH_LANGUAGE","zh","NS","locales","i18n","getFixedT"],"sourceRoot":""}