@next-bricks/ai-portal 0.28.5 → 0.28.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bricks.json +11 -11
- package/dist/chunks/4820.e6af8c49.js +2 -0
- package/dist/chunks/4820.e6af8c49.js.map +1 -0
- package/dist/chunks/{7314.b506f276.js → 7314.71e96327.js} +3 -3
- package/dist/chunks/7314.71e96327.js.map +1 -0
- package/dist/chunks/{981.b69af31a.js → 981.42a7e029.js} +2 -2
- package/dist/chunks/981.42a7e029.js.map +1 -0
- package/dist/chunks/{main.63045414.js → main.87716b90.js} +2 -2
- package/dist/chunks/{main.63045414.js.map → main.87716b90.js.map} +1 -1
- package/dist/examples.json +9 -9
- package/dist/{index.4dc3c04b.js → index.45bcdcf1.js} +2 -2
- package/dist/{index.4dc3c04b.js.map → index.45bcdcf1.js.map} +1 -1
- package/dist/manifest.json +99 -99
- package/dist/types.json +70 -70
- package/dist-types/elevo-sidebar/ChatHistory.d.ts +1 -1
- package/package.json +2 -2
- package/dist/chunks/4820.d2d81591.js +0 -2
- package/dist/chunks/4820.d2d81591.js.map +0 -1
- package/dist/chunks/7314.b506f276.js.map +0 -1
- package/dist/chunks/981.b69af31a.js.map +0 -1
- /package/dist/chunks/{7314.b506f276.js.LICENSE.txt → 7314.71e96327.js.LICENSE.txt} +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
/*! For license information please see 7314.
|
|
2
|
-
"use strict";(globalThis.webpackChunk_next_bricks_ai_portal=globalThis.webpackChunk_next_bricks_ai_portal||[]).push([[7314],{17099:(e,t,i)=>{e.exports=i.p+"images/e47076cc.png"},26785:(e,t,i)=>{i.d(t,{Y:()=>f});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 u=i(41030),m=i(99671),g=i(42965),h=i(97907);const f=(0,n.forwardRef)(b);function b(e,t){let{activeId:i,actions:o,urlTemplate:s,onActionClick:d,onHistoryClick:f}=e;const b=(0,n.useRef)(null),[v,k]=(0,n.useState)(null),[x,y]=(0,n.useState)(),[E,w]=(0,n.useState)();(0,n.useEffect)((()=>{Promise.all([p({next_token:E},{interceptorParams:{ignoreLoadingBar:!0}}),new Promise((e=>setTimeout(e,500)))]).then((e=>{let[t]=e;k((e=>[...null!=e?e:[],...t.data])),y(t.next_token)})).catch((e=>{console.error("Error loading chat history:",e)}))}),[E]);const S=(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!=v?v:[]){let i;i=t.startTime>=o?(0,m.t)(m.K.TODAY):t.startTime>=s?(0,m.t)(m.K.YESTERDAY):t.startTime>=c?(0,m.t)(m.K.PREVIOUS_7_DAYS):t.startTime>=d?(0,m.t)(m.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()]}),[v]),[A,_]=(0,n.useState)(null),T=(0,n.useRef)(null);(0,n.useEffect)((()=>{const e=T.current,t=b.current;if(!e||!x||!t)return;const i=new IntersectionObserver((e=>{for(const t of e)t.isIntersecting&&w(x)}),{root:t});return i.observe(e),()=>{i.disconnect()}}),[x]);const Y=(0,n.useRef)(0),I=(0,n.useCallback)((async()=>{try{const e=++Y.current,t=await p({},{interceptorParams:{ignoreLoadingBar:!0}});if(e!==Y.current)return;k((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,u.isEqual)(t,e),l)break;s=!1}return o?l?[...a,...i.filter((e=>!n.has(e.id)))]:e:(y(t.next_token),a)}))}catch(e){console.error("Error pulling chat history:",e)}}),[]);return(0,n.useImperativeHandle)(t,(()=>({pull:I})),[I]),v?r().createElement("div",{className:"history",ref:b},r().createElement("ul",null,S.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=>{return 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:f},s?{url:(t=s,n=e,null==t?void 0:t.replace(/{{(.*?)}}/g,((e,t)=>(0,u.get)(n,t))))}: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"})));var t,n}))))))),x&&r().createElement("div",{className:"load-more",ref:T},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")},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}.collapsed{width:0;overflow:visible}.collapsed .sidebar{transform:translateX(-100%)}.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 .loading{display:flex;justify-content:center;padding:8px}.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()},72467:(e,t,i)=>{i.d(t,{D:()=>f});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 u=i(41030),m=i(99671),g=i(42965),h=i(97907);const f=(0,n.forwardRef)(b);function b(e,t){let{username:i,activeId:o,actions:s,urlTemplate:d,onActionClick:f,onHistoryClick:b}=e;const v=(0,n.useRef)(null),[k,x]=(0,n.useState)(null),[y,E]=(0,n.useState)(),[w,S]=(0,n.useState)();(0,n.useEffect)((()=>{E(void 0),S(void 0),x(null)}),[i]),(0,n.useEffect)((()=>{Promise.all([p({token:w,username:i},{interceptorParams:{ignoreLoadingBar:!0}}),new Promise((e=>setTimeout(e,500)))]).then((e=>{let[t]=e;x((e=>[...null!=e?e:[],...t.conversations])),E(t.nextToken)})).catch((e=>{console.error("Error loading chat history:",e)}))}),[w,i]);const A=(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!=k?k:[]){let i;i=t.time>=o?(0,m.t)(m.K.TODAY):t.time>=s?(0,m.t)(m.K.YESTERDAY):t.time>=c?(0,m.t)(m.K.PREVIOUS_7_DAYS):t.time>=d?(0,m.t)(m.K.PREVIOUS_30_DAYS):t.time>=p?l()(1e3*t.time).format("MMMM"):l()(1e3*t.time).format("YYYY");let a=e.get(i);a||e.set(i,a={title:i,items:[]}),a.items.push(t)}return[...e.values()]}),[k]),[_,T]=(0,n.useState)(null),Y=(0,n.useRef)(null);(0,n.useEffect)((()=>{const e=Y.current,t=v.current;if(!e||!y||!t)return;const i=new IntersectionObserver((e=>{for(const t of e)t.isIntersecting&&S(y)}),{root:t});return i.observe(e),()=>{i.disconnect()}}),[y]);const I=(0,n.useRef)(0),N=(0,n.useCallback)((async()=>{try{const e=++I.current,t=await p({username:i},{interceptorParams:{ignoreLoadingBar:!0}});if(e!==I.current)return;x((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,u.isEqual)(t,e),l)break;s=!1}return o?l?[...a,...i.filter((e=>!n.has(e.conversationId)))]:e:(E(t.nextToken),a)}))}catch(e){console.error("Error pulling chat history:",e)}}),[i]);return(0,n.useImperativeHandle)(t,(()=>({pull:N})),[N]),k?r().createElement("div",{className:"history",ref:v},r().createElement("ul",null,A.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=>{return r().createElement("li",{key:e.conversationId},r().createElement(g.EM,(0,a.A)({className:c()("item",{"actions-active":e.conversationId===_,active:e.conversationId===o}),onClick:b},d?{url:(t=d,i=e,null==t?void 0:t.replace(/{{(.*?)}}/g,((e,t)=>(0,u.get)(i,t))))}:null),r().createElement("div",{className:"item-title",title:e.title},e.title),r().createElement(g.qu,{className:"actions",actions:s,onActionClick:t=>{f({action:t.detail,item:e})},onVisibleChange:t=>{T(t.detail?e.conversationId:null)}}),!h.QB.includes(e.state)&&r().createElement("div",{className:"working"})));var t,i}))))))),y&&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})))}},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}({});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]:"中文"},o={[n.NEW_CHAT]:"新对话",[n.LOGOUT]:"登出",[n.TODAY]:"今天",[n.YESTERDAY]:"昨天",[n.PREVIOUS_7_DAYS]:"过去7天",[n.PREVIOUS_30_DAYS]:"过去30天",[n.SWITCH_LANGUAGE]:"English"},l="bricks/ai-portal/elevo-sidebar",s={en:r,zh:o},c=a.i18n.getFixedT(null,l)}}]);
|
|
3
|
-
//# sourceMappingURL=7314.
|
|
1
|
+
/*! For license information please see 7314.71e96327.js.LICENSE.txt */
|
|
2
|
+
"use strict";(globalThis.webpackChunk_next_bricks_ai_portal=globalThis.webpackChunk_next_bricks_ai_portal||[]).push([[7314],{17099:(e,t,i)=>{e.exports=i.p+"images/e47076cc.png"},26785:(e,t,i)=>{i.d(t,{Y:()=>f});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);const f=(0,n.forwardRef)(b);function b(e,t){let{activeId:i,actions:o,urlTemplate:s,onActionClick:d,onHistoryClick:f}=e;const b=(0,n.useRef)(null),[v,k]=(0,n.useState)(null),[x,y]=(0,n.useState)(),[E,w]=(0,n.useState)();(0,n.useEffect)((()=>{Promise.all([p({next_token:E},{interceptorParams:{ignoreLoadingBar:!0}}),new Promise((e=>setTimeout(e,500)))]).then((e=>{let[t]=e;k((e=>[...null!=e?e:[],...t.data])),y(t.next_token)})).catch((e=>{console.error("Error loading chat history:",e)}))}),[E]);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!=v?v:[]){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()]}),[v]),[S,A]=(0,n.useState)(null),_=(0,n.useRef)(null);(0,n.useEffect)((()=>{const e=_.current,t=b.current;if(!e||!x||!t)return;const i=new IntersectionObserver((e=>{for(const t of e)t.isIntersecting&&w(x)}),{root:t});return i.observe(e),()=>{i.disconnect()}}),[x]);const Y=(0,n.useRef)(0),I=(0,n.useCallback)((async()=>{try{const e=++Y.current,t=await p({},{interceptorParams:{ignoreLoadingBar:!0}});if(e!==Y.current)return;k((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:(y(t.next_token),a)}))}catch(e){console.error("Error pulling chat history:",e)}}),[]);return(0,n.useImperativeHandle)(t,(()=>({pull:I})),[I]),v?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=>{return r().createElement("li",{key:e.id},r().createElement(g.EM,(0,a.A)({className:c()("item",{"actions-active":e.id===S,active:e.id===i}),onClick:f},s?{url:(t=s,n=e,null==t?void 0:t.replace(/{{(.*?)}}/g,((e,t)=>(0,m.get)(n,t))))}: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=>{A(t.detail?e.id:null)}}),!h.QB.includes(e.state)&&r().createElement("div",{className:"working"})));var t,n}))))))),x&&r().createElement("div",{className:"load-more",ref:_},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")},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}.collapsed{width:0;overflow:visible}.collapsed .sidebar{transform:translateX(-100%)}.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 .loading{display:flex;justify-content:center;padding:8px}.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()},72467:(e,t,i)=>{i.d(t,{D:()=>f});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);const f=(0,n.forwardRef)(b);function b(e,t){let{username:i,activeId:o,actions:s,urlTemplate:d,onActionClick:f,onHistoryClick:b}=e;const v=(0,n.useRef)(null),[k,x]=(0,n.useState)(null),[y,E]=(0,n.useState)(),[w,T]=(0,n.useState)();(0,n.useEffect)((()=>{E(void 0),T(void 0),x(null)}),[i]),(0,n.useEffect)((()=>{Promise.all([p({token:w,username:i,limit:30},{interceptorParams:{ignoreLoadingBar:!0}}),new Promise((e=>setTimeout(e,500)))]).then((e=>{let[t]=e;x((e=>[...null!=e?e:[],...t.conversations])),E(t.nextToken)})).catch((e=>{console.error("Error loading chat history:",e)}))}),[w,i]);const S=(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!=k?k:[]){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()]}),[k]),[A,_]=(0,n.useState)(null),Y=(0,n.useRef)(null);(0,n.useEffect)((()=>{const e=Y.current,t=v.current;if(!e||!y||!t)return;const i=new IntersectionObserver((e=>{for(const t of e)t.isIntersecting&&T(y)}),{root:t});return i.observe(e),()=>{i.disconnect()}}),[y]);const I=(0,n.useRef)(0),N=(0,n.useCallback)((async()=>{try{const e=++I.current,t=await p({username:i,limit:30},{interceptorParams:{ignoreLoadingBar:!0}});if(e!==I.current)return;x((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:(E(t.nextToken),a)}))}catch(e){console.error("Error pulling chat history:",e)}}),[i]);return(0,n.useImperativeHandle)(t,(()=>({pull:N})),[N]),k?r().createElement("div",{className:"history",ref:v},r().createElement("ul",null,S.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=>{return r().createElement("li",{key:e.conversationId},r().createElement(g.EM,(0,a.A)({className:c()("item",{"actions-active":e.conversationId===A,active:e.conversationId===o}),onClick:b},d?{url:(t=d,i=e,null==t?void 0:t.replace(/{{(.*?)}}/g,((e,t)=>(0,m.get)(i,t))))}:null),r().createElement("div",{className:"item-title",title:e.title},e.title),r().createElement(g.qu,{className:"actions",actions:s,onActionClick:t=>{f({action:t.detail,item:e})},onVisibleChange:t=>{_(t.detail?e.conversationId:null)}}),!h.QB.includes(e.state)&&r().createElement("div",{className:"working"})));var t,i}))))))),y&&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})))}},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}({});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]:"中文"},o={[n.NEW_CHAT]:"新对话",[n.LOGOUT]:"登出",[n.TODAY]:"今天",[n.YESTERDAY]:"昨天",[n.PREVIOUS_7_DAYS]:"过去7天",[n.PREVIOUS_30_DAYS]:"过去30天",[n.SWITCH_LANGUAGE]:"English"},l="bricks/ai-portal/elevo-sidebar",s={en:r,zh:o},c=a.i18n.getFixedT(null,l)}}]);
|
|
3
|
+
//# sourceMappingURL=7314.71e96327.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunks/7314.71e96327.js","mappings":"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","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:///./src/elevo-sidebar/styles.shadow.css","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/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 { get, 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\";\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\nfunction 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);\n return value;\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","// 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}.collapsed{width:0;overflow:visible}.collapsed .sidebar{transform:translateX(-100%)}.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 .loading{display:flex;justify-content:center;padding:8px}.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 { 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 { ElevoApi_listElevoConversations } from \"@next-api-sdk/llm-sdk\";\nimport type {\n ActionType,\n SimpleActionType,\n} from \"@next-bricks/basic/mini-actions\";\nimport { get, 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\";\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 ChatHistoryProps {\n username?: string;\n activeId?: string;\n urlTemplate?: string;\n actions?: ActionType[];\n onActionClick: (detail: ActionClickDetail) => void;\n onHistoryClick: () => void;\n}\n\nexport interface ChatHistoryRef {\n pull: () => void;\n}\n\nexport const ChatHistory = forwardRef(LowLevelChatHistory);\n\nexport function LowLevelChatHistory(\n {\n username,\n activeId,\n actions,\n urlTemplate,\n onActionClick,\n onHistoryClick,\n }: ChatHistoryProps,\n ref: React.Ref<ChatHistoryRef>\n) {\n const rootRef = useRef<HTMLDivElement | null>(null);\n const [list, setList] = useState<HistoryItem[] | null>(null);\n const [nextToken, setNextToken] = useState<string | undefined>();\n const [loadNextToken, setLoadNextToken] = useState<string | undefined>();\n\n useEffect(() => {\n setNextToken(undefined);\n setLoadNextToken(undefined);\n setList(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 new Promise((resolve) => setTimeout(resolve, 500)), // Force a minimum delay\n ])\n .then(([data]) => {\n setList((prev) => [\n ...(prev ?? []),\n ...(data.conversations as HistoryItem[]),\n ]);\n setNextToken(data.nextToken);\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, 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 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 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 setList((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 }),\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.conversationId}>\n <WrappedLink\n className={classNames(\"item\", {\n \"actions-active\": item.conversationId === actionsVisible,\n active: item.conversationId === 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(\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 </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\nfunction 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);\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}\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};\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};\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","template","context","replace","_match","WrappedMiniActions","e","action","detail","onVisibleChange","DONE_STATES","includes","state","WrappedIcon","lib","icon","spinning","theme","wrapBrick","WrappedDropdownActions","WrappedEasyopsAvatar","WrappedIconButton","___CSS_LOADER_EXPORT___","module","toString","ElevoApi_listElevoConversations","params","ChatHistory","username","undefined","token","limit","conversations","conversationId","en","NEW_CHAT","LOGOUT","SWITCH_LANGUAGE","zh","NS","locales","i18n","getFixedT"],"sourceRoot":""}
|