@next-bricks/ai-portal 0.2.2 → 0.2.3

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 CHANGED
@@ -2,8 +2,8 @@
2
2
  "id": "bricks/ai-portal",
3
3
  "bricks": [
4
4
  "ai-portal.cruise-canvas",
5
- "ai-portal.home-container",
6
- "ai-portal.chat-box"
5
+ "ai-portal.chat-box",
6
+ "ai-portal.home-container"
7
7
  ],
8
8
  "elements": [],
9
9
  "processors": [],
@@ -19,5 +19,5 @@
19
19
  "eo-icon"
20
20
  ]
21
21
  },
22
- "filePath": "bricks/ai-portal/dist/index.9fc38a3a.js"
22
+ "filePath": "bricks/ai-portal/dist/index.0ce11b37.js"
23
23
  }
@@ -0,0 +1,2 @@
1
+ "use strict";(globalThis.webpackChunk_next_bricks_ai_portal=globalThis.webpackChunk_next_bricks_ai_portal||[]).push([[2569],{79:(e,t,n)=>{n.d(t,{I:()=>s,K:()=>r,NS:()=>a,t:()=>l});var o=n(3922);let r=function(e){return e.YES="YES",e.NO="NO",e.PLAN_COMPLETED="PLAN_COMPLETED",e.TASK_COMPLETED="TASK_COMPLETED",e.SHARE="SHARE",e.TYPE_YOUR_MESSAGE_HERE="TYPE_YOUR_MESSAGE_HERE",e.ARGUMENTS="ARGUMENTS",e.RESPONSE="RESPONSE",e.cmdb_create_app_system="cmdb_create_app_system",e.cmdb_create_service_set="cmdb_create_service_set",e.cmdb_append_host_to_service_set="cmdb_append_host_to_service_set",e.cmdb_create_agent_scan_job="cmdb_create_agent_scan_job",e.cmdb_service_node_clustering="cmdb_service_node_clustering",e.ask_human="ask_human",e}({});const a="bricks/ai-portal/cruise-canvas",s={en:{YES:"Yes",NO:"No",PLAN_COMPLETED:"All jobs done",TASK_COMPLETED:"Task completed",SHARE:"Share",TYPE_YOUR_MESSAGE_HERE:"Type your message here",ARGUMENTS:"Arguments",RESPONSE:"Response",cmdb_create_app_system:"Create app system",cmdb_create_service_set:"Create service set",cmdb_append_host_to_service_set:"Append host to service set",cmdb_create_agent_scan_job:"Create agent scan job",cmdb_service_node_clustering:"Service node clustering",ask_human:"Ask user"},zh:{YES:"是",NO:"否",PLAN_COMPLETED:"所有任务已全部完成",TASK_COMPLETED:"任务完成",SHARE:"分享",TYPE_YOUR_MESSAGE_HERE:"在这里输入信息",ARGUMENTS:"参数",RESPONSE:"响应",cmdb_create_app_system:"创建应用系统",cmdb_create_service_set:"创建服务集",cmdb_append_host_to_service_set:"将主机添加到服务集",cmdb_create_agent_scan_job:"创建 agent 扫描任务",cmdb_service_node_clustering:"服务节点聚类",ask_human:"询问用户"}},l=o.i18n.getFixedT(null,a)},1451:(e,t,n)=>{n.d(t,{e:()=>d});var o=n(9575),r=n(8769),a=n(9435),s=n(9126);const l=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","font-variant","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing","word-break","white-space"];let i;const c=/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"metaKey":"ctrlKey",d=r.forwardRef(u);function u(e,t){let{autoResize:n,minRows:d,maxRows:u,borderSize:p,paddingSize:m,containerRef:g,value:b,style:f,submitWhen:h,onChange:x,onSubmit:k,onKeyDown:v,onCompositionStart:w,onCompositionEnd:y,...A}=e;const E=null==n||n,[T,_]=(0,r.useState)(null!=b?b:""),j=(0,r.useRef)(null),[S,Y]=(0,r.useState)(null);(0,r.useImperativeHandle)(t,(()=>({focus:()=>{const e=j.current;if(e){var t;const n=null===(t=e.value)||void 0===t?void 0:t.length;e.focus(),n&&e.setSelectionRange(n,n)}}})),[]);const N=(0,r.useCallback)((()=>{const e=j.current;if(e&&E){const t=function(e,t){const{minRows:n=null,maxRows:o=null,borderSize:r=2,paddingSize:a=8}=null!=t?t:{};i||(i=document.createElement("textarea"),i.setAttribute("tab-index","-1"),i.setAttribute("aria-hidden","true"),document.body.appendChild(i));const s=window.getComputedStyle(e),c=l.map((e=>`${e}:${s.getPropertyValue(e)}`)).join(";");let d,u,p;i.setAttribute("style",`${c};\n min-height: 0!important;\n max-height: none!important;\n height: 0!important;\n visibility: hidden!important;\n overflow: hidden!important;\n position: absolute!important;\n z-index: -1000!important;\n top: 0!important;\n right: 0!important;\n pointer-events: none!important;\n`),i.value=e.value||e.placeholder||"";let m=i.scrollHeight+r;if(null!==n||null!==o){const e=parseFloat(window.getComputedStyle(i).getPropertyValue("line-height"));null!==n&&(d=e*n+a+r,m=Math.max(d,m)),null!==o&&(u=e*o+a+r,m<=u&&(p="hidden"),m=Math.min(u,m))}const g={height:m,overflowY:p,resize:"none"};return d&&(g.minHeight=d),u&&(g.maxHeight=u),g}(e,{minRows:d,maxRows:u,borderSize:p,paddingSize:m});(0,a.flushSync)((()=>{Y(t)}))}}),[E,u,d,p,m]);(0,r.useEffect)((()=>{_(null!=b?b:"")}),[b]),(0,r.useEffect)((()=>{N()}),[N,T]);const z=(0,r.useRef)(!1),C=(0,r.useCallback)((e=>{z.current=!0,null==w||w(e)}),[w]),R=(0,r.useCallback)((e=>{z.current=!1,null==y||y(e)}),[y]),M=(0,r.useCallback)((e=>{z.current||("Enter"===e.key&&("enter-without-shift"===h?!e.shiftKey:"enter-with-mod"===h&&e[c])&&(e.preventDefault(),e.stopPropagation(),null==k||k(e)),null==v||v(e))}),[v,k,h]);return(0,r.useEffect)((()=>{const e=null==g?void 0:g.current;if(!e||!E)return;let t;const n=new s.A((n=>{for(const o of n)if(o.target===e){const e=o.contentBoxSize?o.contentBoxSize[0]?o.contentBoxSize[0].inlineSize:o.contentBoxSize.inlineSize:o.contentRect.width;if(void 0!==e&&e!==t){const n=!t;t=e,n||requestAnimationFrame(N)}}}));return n.observe(e),()=>{n.disconnect()}}),[E,g,N]),r.createElement("textarea",(0,o.A)({},A,{ref:j,value:T,style:{...f,...S},onChange:e=>{_(e.target.value),null==x||x(e)},onCompositionStart:C,onCompositionEnd:R,onKeyDown:M}))}},1525:(e,t,n)=>{n.d(t,{A:()=>l});var o=n(6758),r=n.n(o),a=n(935),s=n.n(a)()(r());s.push([e.id,".shine-text--t2t9tIJp{color:transparent;background:linear-gradient(to right,var(--shine-text-color) 0%,var(--shine-text-color) 40%,var(--shine-text-highlight-color) 50%,var(--shine-text-color) 60%,var(--shine-text-color) 100%);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;animation:shineText--ycIJ4nxc 2s infinite linear}@keyframes shineText--ycIJ4nxc{0%{background-position:-50% 50%}100%{background-position:-250% 50%}}",""]),s.locals={"shine-text":"shine-text--t2t9tIJp",shineText:"shineText--ycIJ4nxc"};const l=s},1776:(e,t,n)=>{e.exports=n.p+"images/a1d108f4.png"},2464:(e,t,n)=>{n.d(t,{A:()=>h});var o=n(2591),r=n.n(o),a=n(1740),s=n.n(a),l=n(8128),i=n.n(l),c=n(855),d=n.n(c),u=n(3051),p=n.n(u),m=n(3656),g=n.n(m),b=n(7110),f={};f.styleTagTransform=g(),f.setAttributes=d(),f.insert=i().bind(null,"head"),f.domAPI=s(),f.insertStyleElement=p(),r()(b.A,f);const h=b.A&&b.A.locals?b.A.locals:void 0},2773:(e,t,n)=>{n.d(t,{S:()=>p});var o=n(8769),r=n(1030),a=n(3357),s=n(4427),l=n(8974);function i(e){const t=[];let n;for(const o of e){if(n&&n===o.role){const e=t[t.length-1];e.parts=[...e.parts,...o.parts]}else t.push({...o});n=o.role}for(const e of t)e.parts=c(e.parts);return t}function c(e){const t=[];let n;for(const o of e)n&&n===o.type&&"text"===o.type?t[t.length-1].text+=o.text:t.push({...o}),n=o.type;return t}const d=(u={task:(e,t)=>{switch(t.type){case"sse":{const n=(0,r.pick)(t.payload,["id","requirement","state","title","startTime","endTime","plan"]);return"blocked"===n.state&&(n.state="working"),t.isInitial?n:e&&(0,r.isMatchWith)(e,n,r.isEqual)?e:{...e,...n}}case"reset":return null}return e},jobs:(e,t)=>{switch(t.type){case"sse":{const s=t.payload.jobs;let l=t.isInitial?[]:e;if(!Array.isArray(s)||0===s.length)return l;for(const e of s){var n,o;"blocked"===e.state&&(e.state="working");const t=null!==(n=null===(o=l)||void 0===o?void 0:o.findIndex((t=>t.id===e.id)))&&void 0!==n?n:-1,{messages:s,toolCall:c}=e;if("string"==typeof(null==c?void 0:c.arguments)){c.originalArguments=c.arguments;try{c.arguments=JSON.parse(c.arguments)}catch(e){console.error("Failed to parse toolCall arguments:",e),c.arguments={},c.argumentsParseFailed=!0,c.argumentsParseError=e}}if(-1===t)l=Array.isArray(s)&&s.length>0?[...l,{...e,messages:i(s)}]:[...l,e];else{const n=l[t],o=(0,r.pick)(e,["id","upstream","parent","state","instruction","toolCall","isError","startTime","endTime"]);var a;Array.isArray(s)&&s.length>0&&(o.messages=i([...null!==(a=n.messages)&&void 0!==a?a:[],...s])),(0,r.isMatchWith)(n,o,r.isEqual)||(l=[...l.slice(0,t),{...n,...o},...l.slice(t+1)])}}return l}case"reset":return 0===e.length?e:[]}return e},error:(e,t)=>{switch(t.type){case"sse":{const n=t.payload.error;return null===e&&"string"==typeof n?n:e}case"reset":return null}return e}},(e,t)=>Object.fromEntries(Object.entries(u).map((n=>{let[o,r]=n;return[o,r(e[o],t)]}))));var u;function p(e){const[{task:t,jobs:n,error:i},c]=(0,o.useReducer)(d,null,(()=>({task:null,jobs:[],error:null}))),u=(0,o.useRef)();(0,o.useEffect)((()=>{if(c({type:"reset"}),u.current=void 0,!e)return;let t,n=!1,o=!1;const r=async()=>{if(!o){o=!0,t=new AbortController;try{const r=await(0,s.createSSEStream)(`${(0,l.getBasePath)()}api/gateway/logic.llm.aiops_service/api/v1/llm/agent/flow/${e}`,{signal:t.signal}),a=await r;let i=!0;for await(const e of a){if(n)return void(o=!1);c({type:"sse",payload:e,isInitial:i}),i=!1}}catch(e){console.error("sse failed",e),(0,l.handleHttpError)(e)}finally{o=!1}}};return u.current=async(t,n)=>{try{await a.http.post(`${(0,l.getBasePath)()}api/gateway/logic.llm.aiops_service/api/v1/llm/agent/flow/${e}/job/${t}`,{input:n})}catch(e){return console.error("human input failed",e),void(0,l.handleHttpError)(e)}r()},r(),()=>{var e;n=!0,null===(e=t)||void 0===e||e.abort()}}),[e]);const[p,m]=(0,o.useState)([]);return(0,o.useEffect)((()=>{m((e=>{const o=new Map,a=new Map;for(const e of n){var s;o.set(e.id,e),e.parent&&a.set(e.parent,[...null!==(s=a.get(e.parent))&&void 0!==s?s:[],e.id])}const l=e=>{var t;return"input-required"===e.state||!(null===(t=a.get(e.id))||void 0===t||!t.some((e=>{const t=o.get(e);return l(t)})))},i=[];for(const e of null!==(c=null==t?void 0:t.plan)&&void 0!==c?c:[]){var c;const t=o.get(e.id);i.push({id:e.id,instruction:e.instruction,state:t?l(t)?"input-required":t.state:void 0})}return(0,r.isEqual)(e,i)?e:i}))}),[n,null==t?void 0:t.plan]),{task:t,jobs:n,plan:p,error:i,humanInputRef:u}}},3153:(e,t,n)=>{n.d(t,{r:()=>T});var o=n(9575),r=n(8769),a=n.n(r),s=n(3373),l=n.n(s),i=n(2591),c=n.n(i),d=n(1740),u=n.n(d),p=n(8128),m=n.n(p),g=n(855),b=n.n(g),f=n(3051),h=n.n(f),x=n(3656),k=n.n(x),v=n(4751),w={};w.styleTagTransform=k(),w.setAttributes=b(),w.insert=m().bind(null,"head"),w.domAPI=u(),w.insertStyleElement=h(),c()(v.A,w);const y=v.A&&v.A.locals?v.A.locals:void 0;var A=n(5805),E=n(79);function T(e){let{plan:t}=e;const[n,o]=(0,r.useState)(!1),{doneCount:s,state:i,instruction:c}=(0,r.useMemo)((()=>(null!=t?t:[]).reduce(((e,t)=>"completed"===t.state?{...e,state:t.state,doneCount:e.doneCount+1}:!e.instruction||t.state&&"unknown"!==t.state?{...e,state:t.state,instruction:t.instruction}:e),{doneCount:0,state:"unknown",instruction:""})),[t]),{className:d,icon:u}=(0,r.useMemo)((()=>j(i)),[i]),p=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return null!=t&&t.length?a().createElement("div",{className:l()(y.progress,d),onClick:p},a().createElement("div",{className:y.icon},a().createElement(A.Bj,u)),a().createElement("span",{className:y.text,title:"completed"===i?"":c},"completed"===i?(0,E.t)(E.K.PLAN_COMPLETED):c),a().createElement("span",{className:y.stat},s,"/",t.length),a().createElement(A.Bj,{className:y.expand,lib:"antd",theme:"outlined",icon:n?"down":"up"}),n&&a().createElement("ul",{className:y.details,onClick:e=>e.stopPropagation()},t.map(((e,t)=>a().createElement(_,{key:t,state:e.state,instruction:e.instruction}))))):null}function _(e){let{state:t,instruction:n}=e;const{className:s,icon:i}=(0,r.useMemo)((()=>j(t)),[t]);return a().createElement("li",{className:y.step},a().createElement(A.Bj,(0,o.A)({},i,{className:l()(y.state,s)})),a().createElement("span",{className:y.instruction,title:n},n))}function j(e){switch(e){case"completed":return{className:y.completed,icon:{lib:"fa",prefix:"fas",icon:"check"}};case"submitted":case"working":return{className:y.working,icon:{lib:"antd",theme:"outlined",icon:"loading-3-quarters",spinning:!0}};case"input-required":return{className:y["input-required"],icon:{lib:"fa",prefix:"far",icon:"circle-pause"}};case"failed":return{className:y.failed,icon:{lib:"fa",prefix:"fas",icon:"xmark"}};case"canceled":return{className:y.canceled,icon:{lib:"fa",prefix:"far",icon:"circle-stop"}};default:return{icon:{lib:"fa",prefix:"far",icon:"clock"}}}}},3865:(e,t,n)=>{n.d(t,{A:()=>l});var o=n(6758),r=n.n(o),a=n(935),s=n.n(a)()(r());s.push([e.id,".zoom-bar--MTw5VGPl{position:absolute;left:20px;bottom:20px;display:flex;align-items:center;padding:3px 5px;-webkit-user-select:none;user-select:none;background:rgba(255,255,255,0.7);box-shadow:0px 3px 14px 0px rgba(0,0,0,0.1),0px 1px 4px 0px rgba(0,0,0,0.06);border-radius:8px;border:1px solid rgba(255,255,255,0.3)}.zoom-bar--MTw5VGPl button{background:transparent;border:none;border-radius:4px;color:#333;width:24px;height:24px;font-size:16px;line-height:16px;display:flex;align-items:center;justify-content:center;cursor:pointer}.zoom-bar--MTw5VGPl button:hover{background:rgba(0,0,0,0.04)}.zoom-bar--MTw5VGPl button:active{background:rgba(0,0,0,0.08)}.divider--S0X2YCDi{background:rgba(0,0,0,0.15);width:1px;height:16px}.zoom-bar--MTw5VGPl > :not(:last-child){margin-right:6px}@media (max-width: 719px){.zoom-bar--MTw5VGPl{left:auto;bottom:auto;top:20px;right:20px}}",""]),s.locals={"zoom-bar":"zoom-bar--MTw5VGPl",divider:"divider--S0X2YCDi"};const l=s},3921:(e,t,n)=>{e.exports=n.p+"images/9f5ff403.png"},4388:(e,t,n)=>{n.d(t,{O:()=>T});var o=n(8769),r=n.n(o),a=n(9859),s=n(480),l=n(1302),i=n.n(l),c=n(2591),d=n.n(c),u=n(1740),p=n.n(u),m=n(8128),g=n.n(m),b=n(855),f=n.n(b),h=n(3051),x=n.n(h),k=n(3656),v=n.n(k),w=n(6137),y={};y.styleTagTransform=v(),y.setAttributes=f(),y.insert=g().bind(null,"head"),y.domAPI=p(),y.insertStyleElement=x(),d()(w.A,y);const A=w.A&&w.A.locals?w.A.locals:void 0,E=(0,a.wrapBrick)("eo-easyops-avatar");function T(e){let{content:t,startTime:n,loading:a}=e;const l=(0,o.useMemo)((()=>s.auth.getAuth().username),[]);return r().createElement("div",{className:A["node-requirement"]},r().createElement("div",{className:A.heading},r().createElement("div",{className:A.user},r().createElement(E,{nameOrInstanceId:l,showName:!0,size:"xs"})),r().createElement("div",{className:A.time},n&&i()(1e3*n).format("MM-DD HH:mm"))),r().createElement("div",{className:A.body},t),a&&r().createElement(r().Fragment,null,r().createElement("svg",{className:A["loading-line"],viewBox:"0 0 2 62",width:"2",height:"62"},r().createElement("path",{d:"M1 0 L1 62"})),r().createElement("div",{className:A.loading},r().createElement("div",{className:A.inner}))))}},4751:(e,t,n)=>{n.d(t,{A:()=>l});var o=n(6758),r=n.n(o),a=n(935),s=n.n(a)()(r());s.push([e.id,".progress--62eOnxaf{position:absolute;bottom:20px;left:50%;transform:translate(-50%,0);width:453px;max-width:80%;background:#ffffff;box-shadow:0px 6px 16px 0px rgba(0,0,0,0.08),0px 3px 6px -4px rgba(0,0,0,0.12);border-radius:12px;padding:12px;line-height:24px;cursor:pointer;display:flex;align-items:center}.icon--TMLJniSx{margin-right:6px;width:22px;height:22px;border-radius:22px;display:flex;align-items:center;justify-content:center;background:linear-gradient(222deg,#abaab7 25%,#fff 75%);color:#4e4d56;font-size:12px;text-shadow:0px 1px 1px #fff}.progress--62eOnxaf.completed--ACUTqxl7 .icon--TMLJniSx{background:linear-gradient(222deg,#16c661 25%,#fff 75%);color:#055527}.progress--62eOnxaf.failed--atS7ek2B .icon--TMLJniSx{background:linear-gradient(222deg,#f24c25 25%,#fff 75%);color:#5b1504}.progress--62eOnxaf.working--Z6W16jVj .icon--TMLJniSx{background:linear-gradient(222deg,#3e56ff 25%,#fff 75%);color:#0c165d}.progress--62eOnxaf.input-required--YhWlEgu0 .icon--TMLJniSx{background:linear-gradient(222deg,#12aacc 25%,#fff 75%);color:#0c353e}.progress--62eOnxaf.canceled--imA9nfyy .icon--TMLJniSx{background:linear-gradient(222deg,#fcaa07 25%,#fff 75%);color:#302206}.text--vZYOZzn1,\n.instruction--Z7riLyFL{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;min-width:0;flex:1}.stat--YsJ88cZz{margin-left:6px;color:#8c8c8c}.expand--gqn8QEnc{margin-left:6px;color:#8c8c8c}.details--rtuqBzKj{position:absolute;left:0;right:0;bottom:4em;background:#fff;border-radius:12px;box-shadow:0px 6px 16px 0px rgba(0,0,0,0.08),0px 3px 6px -4px rgba(0,0,0,0.12);list-style:none;margin:0;padding:12px;cursor:auto}.step--f9i49Db2{display:flex;align-items:center}.step--f9i49Db2:not(:last-child){margin-bottom:8px}.state--TmkD_q3_{margin-right:6px;color:var(--text-color-secondary)}.state--TmkD_q3_.completed--ACUTqxl7{color:var(--color-success)}.state--TmkD_q3_.failed--atS7ek2B{color:var(--color-error)}.state--TmkD_q3_.working--Z6W16jVj{color:var(--color-info)}.state--TmkD_q3_.input-required--YhWlEgu0{color:var(--palette-cyan-7)}.state--TmkD_q3_.canceled--imA9nfyy{color:#fcaa07}",""]),s.locals={progress:"progress--62eOnxaf",icon:"icon--TMLJniSx",completed:"completed--ACUTqxl7",failed:"failed--atS7ek2B",working:"working--Z6W16jVj","input-required":"input-required--YhWlEgu0",canceled:"canceled--imA9nfyy",text:"text--vZYOZzn1",instruction:"instruction--Z7riLyFL",stat:"stat--YsJ88cZz",expand:"expand--gqn8QEnc",details:"details--rtuqBzKj",step:"step--f9i49Db2",state:"state--TmkD_q3_"};const l=s},4999:(e,t,n)=>{n.d(t,{l:()=>w});var o=n(8769),r=n.n(o),a=n(2591),s=n.n(a),l=n(1740),i=n.n(l),c=n(8128),d=n.n(c),u=n(855),p=n.n(u),m=n(3051),g=n.n(m),b=n(3656),f=n.n(b),h=n(3865),x={};x.styleTagTransform=f(),x.setAttributes=p(),x.insert=d().bind(null,"head"),x.domAPI=i(),x.insertStyleElement=g(),s()(h.A,x);const k=h.A&&h.A.locals?h.A.locals:void 0;var v=n(5805);function w(e){let{scale:t,onScaleChange:n,onReCenter:a}=e;const s=(0,o.useCallback)((()=>{null==n||n(t+.1)}),[n,t]),l=(0,o.useCallback)((()=>{null==n||n(t-.1)}),[n,t]);return r().createElement("div",{className:k["zoom-bar"]},r().createElement("button",{onClick:a},r().createElement(v.Bj,{lib:"fa",prefix:"fas",icon:"expand"})),r().createElement("div",{className:k.divider}),r().createElement("button",{onClick:l},r().createElement(v.Bj,{lib:"antd",theme:"outlined",icon:"minus-circle"})),r().createElement("button",{onClick:s},r().createElement(v.Bj,{lib:"antd",theme:"outlined",icon:"plus-circle"})))}},5005:(e,t,n)=>{n.d(t,{A:()=>l});var o=n(6758),r=n.n(o),a=n(935),s=n.n(a)()(r());s.push([e.id,".node-instruction--Gu7k6RDs{max-width:437px;max-width:min(437px,90vw);background:rgba(255,255,255,0.2);box-shadow:0px 4px 10px 0px rgba(54,64,80,0.08);border-radius:9999px;border:1px solid rgba(255,255,255,0.284);padding:6px 16px;color:rgba(0,0,0,0.45)}.text--jsSeLl7B{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;--shine-text-color:rgba(0,0,0,0.45);--shine-text-highlight-color:#dcdcdc}",""]),s.locals={"node-instruction":"node-instruction--Gu7k6RDs",text:"text--jsSeLl7B"};const l=s},5391:(e,t,n)=>{n.d(t,{W:()=>Y});var o=n(8769),r=n.n(o),a=n(1085),s=n(3091),l=n(7447),i=n(3640),c=n(4360),d=n(3544),u=n(4650),p=n(9830);function m(){function e(e,t,n){if(!n||"pre"!==n.tagName||"code"!==e.tagName)return;const o=function(e){const t=e.properties.className||[];for(const e of t)if("language-"===e.slice(0,9))return e.slice(9).toLowerCase();return null}(e);if(null===o)return;let r;try{n.properties.className=(n.properties.className||[]).concat("language-"+o),r=p.L.highlight((0,u.d)(e),o)}catch{return}e.children=r.children}return t=>{(0,d.YR)(t,"element",e)}}const g={Fragment:a.Fragment,jsx:a.jsx,jsxs:a.jsxs};function b(e){let{content:t}=e;const[n,r]=(0,o.useState)(null);return(0,o.useEffect)((()=>{let e=!1;return(0,s.l)().use(l.A).use(i.A).use([m]).use(c.A,g).process(t).then((t=>{e||r(t.result)})).catch((t=>{e||(console.error("Convert markdown failed:",t),r(null))})),()=>{e=!0}}),[t]),n}var f=n(1451),h=n(4598),x=n(3373),k=n.n(x),v=n(1302),w=n.n(v),y=n(8974),A=n(9443),E=n(6903),T=n(79),_=n(8361);const j=r().lazy((async()=>({default:await(0,_.asyncWrapBrick)("cmdb-instances.cmdb-instances-input-form",{onChangeV2:"cmdb.instance.form.change.v2"})})));var S=n(5805);function Y(e){var t,n,o,a,s,l,i;let{job:c,state:d,humanInput:u}=e;const p="ask_human"===(null===(t=c.toolCall)||void 0===t?void 0:t.name),m=p&&["ask_user_more","ask_user_confirm","ask_user_choose","ask_user_select_from_cmdb"].includes(null===(n=c.toolCall.arguments)||void 0===n?void 0:n.command),g="working"===d||"submitted"===d;return r().createElement("div",{className:k()(A.A["node-job"],{[A.A.error]:c.isError,[A.A["ask-user"]]:m})},r().createElement("div",{className:A.A.heading},p?r().createElement(S.Bj,{className:A.A.icon,lib:"fa",prefix:"fas",icon:"person-circle-question"}):c.toolCall?r().createElement(S.Bj,{className:A.A.icon,lib:"antd",theme:"outlined",icon:"tool"}):r().createElement(S.Bj,{className:A.A.icon,lib:"easyops",icon:"robot"}),r().createElement("div",{className:k()(A.A.tool,{[E.A["shine-text"]]:g})},null!==(o=c.toolCall)&&void 0!==o&&o.name?(0,T.t)(T.K[c.toolCall.name])||c.toolCall.name:"Elevo"),r().createElement("div",{className:A.A.time},c.startTime&&w()(1e3*c.startTime).format("MM-DD HH:mm"))),r().createElement("div",{className:A.A.body},m?r().createElement(r().Fragment,null,r().createElement("div",{className:`${A.A.message} ${A.A["role-assistant"]}`},r().createElement(b,{content:null===(a=c.toolCall.arguments)||void 0===a?void 0:a.question})),"input-required"===d&&("ask_user_more"===c.toolCall.arguments.command?r().createElement(z,{jobId:c.id,humanInput:u}):"ask_user_confirm"===c.toolCall.arguments.command?r().createElement(C,{jobId:c.id,humanInput:u,confirmText:c.toolCall.arguments.confirm_text,cancelText:c.toolCall.arguments.cancel_text}):"ask_user_choose"===c.toolCall.arguments.command?r().createElement(R,{jobId:c.id,humanInput:u,options:c.toolCall.arguments.options}):"ask_user_select_from_cmdb"===c.toolCall.arguments.command?r().createElement(M,{jobId:c.id,humanInput:u,objectId:c.toolCall.arguments.objectId,attrId:c.toolCall.arguments.attrId}):null)):p?r().createElement("div",{className:`${A.A.message} ${A.A["role-assistant"]}`},"Unexpected ask_human command:"," ",JSON.stringify(null!==(s=null===(l=c.toolCall.arguments)||void 0===l?void 0:l.command)&&void 0!==s?s:null)):null,!p&&c.toolCall&&r().createElement(N,{job:c}),null===(i=c.messages)||void 0===i?void 0:i.map(((e,t)=>{var n;return"tool"!==e.role||p?r().createElement("div",{key:t,className:k()(A.A.message,{[A.A["role-user"]]:"tool"===e.role})},null===(n=e.parts)||void 0===n?void 0:n.map(((e,t)=>r().createElement(r().Fragment,{key:t},"text"===e.type?r().createElement(b,{content:e.text}):"file"===e.type?r().createElement("pre",{className:"language-plaintext"},"File: ",e.file.name):r().createElement("pre",{className:"language-plaintext"},"Data: ",JSON.stringify(e.data,null,2)))))):null}))))}function N(e){var t;let{job:n}=e;const a=n.toolCall,s=null===(t=n.messages)||void 0===t?void 0:t.filter((e=>"tool"===e.role)),[l,i]=(0,o.useState)(!1),c="working"!==n.state&&"input-required"!==n.state||null==s||!s.length?n.state:"completed";return r().createElement("div",{className:k()(A.A["tool-call"],{[A.A.expanded]:l})},r().createElement("div",{className:A.A["tool-call-heading"],onClick:()=>{i((e=>!e))}},n.isError||"failed"===c?r().createElement(S.Bj,{className:`${A.A["tool-icon"]} ${A.A.failed}`,lib:"fa",prefix:"fas",icon:"xmark"}):"completed"===c?r().createElement(S.Bj,{className:A.A["tool-icon"],lib:"fa",prefix:"fas",icon:"check"}):"working"===c?r().createElement(S.Bj,{className:A.A["tool-icon"],lib:"antd",theme:"outlined",icon:"loading-3-quarters",spinning:!0}):"input-required"===c?r().createElement(S.Bj,{className:A.A["tool-icon"],lib:"fa",prefix:"far",icon:"circle-pause"}):"canceled"===c?r().createElement(S.Bj,{className:A.A["tool-icon"],lib:"fa",prefix:"far",icon:"circle-stop"}):r().createElement(S.Bj,{className:A.A["tool-icon"],lib:"fa",prefix:"far",icon:"clock"}),r().createElement("span",{className:A.A["tool-call-name"]},a.name),r().createElement(S.Bj,{className:A.A.expand,lib:"fa",prefix:"fas",icon:l?"chevron-up":"chevron-down"})),l&&r().createElement("dl",{className:A.A["tool-call-body"]},r().createElement("dt",null,(0,T.t)(T.K.ARGUMENTS),":"),r().createElement("dd",null,r().createElement(P,{content:a.originalArguments,maybeJson:!0})),!(null==s||!s.length)&&r().createElement(r().Fragment,null,r().createElement("dt",null,(0,T.t)(T.K.RESPONSE),":"),r().createElement("dd",null,null==s?void 0:s.map(((e,t)=>{var n;return r().createElement("div",{key:t},null===(n=e.parts)||void 0===n?void 0:n.map(((e,t)=>r().createElement(P,{key:t,content:"text"===e.type?e.text:"file"===e.type?`File: ${e.file.name}`:`Data: ${JSON.stringify(e.data,null,2)}`,maybeJson:"text"===e.type}))))}))))))}function z(e){let{jobId:t,humanInput:n}=e;const a=(0,o.useRef)(null);return r().createElement("div",{ref:a},r().createElement(f.e,{className:A.A["human-input"],containerRef:a,autoResize:!0,minRows:2,borderSize:0,paddingSize:20,placeholder:(0,T.t)(T.K.TYPE_YOUR_MESSAGE_HERE),submitWhen:"enter-without-shift",onSubmit:e=>{const o=e.currentTarget.value;o&&(null==n||n(t,o))}}))}function C(e){let{jobId:t,humanInput:n,confirmText:o,cancelText:a}=e;return r().createElement("div",{style:{marginTop:"1em"}},r().createElement(S.Gx,{type:"primary",onClick:()=>{null==n||n(t,o||(0,T.t)(T.K.YES))}},o||(0,T.t)(T.K.YES)),r().createElement(S.Gx,{onClick:()=>{null==n||n(t,a||(0,T.t)(T.K.NO))},style:{marginLeft:"0.5em"}},a||(0,T.t)(T.K.NO)))}function R(e){let{jobId:t,options:n,humanInput:o}=e;return r().createElement("div",{style:{marginTop:"1em",display:"flex",flexDirection:"column",gap:"0.5em"}},null==n?void 0:n.map(((e,n)=>r().createElement(S.Gx,{key:n,onClick:()=>{null==o||o(t,e)}},e))))}function M(e){let{jobId:t,objectId:n,attrId:a,humanInput:s}=e;const[l,i]=(0,o.useState)(null);if((0,o.useEffect)((()=>{if(!n)return;let e=!1;return(async()=>{try{const t=(await(0,h.r)({ref_object:n})).data;e||i(t)}catch(e){console.error("Fetch object list failed:",e),(0,y.handleHttpError)(e)}})(),()=>{e=!0}}),[n]),!n)return r().createElement("div",{style:{marginTop:"1em"}},"Can not call ask_user_select_from_cmdb without objectId");const c=!a||"instanceId"===a&&"HOST"===n?"ip":a;return r().createElement("div",{style:{marginTop:"1em"}},r().createElement(o.Suspense,null,r().createElement(j,{objectList:l,objectId:n,fieldId:c,onChangeV2:e=>{e.detail.length&&(null==s||s(t,e.detail.map((e=>e[c])).join("\n")))}})))}function P(e){let{content:t,maybeJson:n}=e;const[a,s]=(0,o.useMemo)((()=>{if(n)try{const e=JSON.parse(null!=t?t:"");return[`\`\`\`json\n${JSON.stringify(e,null,2)}\n\`\`\``]}catch{}return[t,!0]}),[t,n]);return s?r().createElement("pre",{className:"language-plaintext"},a):r().createElement(b,{content:a})}},5805:(e,t,n)=>{n.d(t,{Bj:()=>r,EM:()=>s,Gx:()=>a});var o=n(9859);const r=(0,o.wrapBrick)("eo-icon"),a=(0,o.wrapBrick)("eo-button"),s=(0,o.wrapBrick)("eo-link")},6137:(e,t,n)=>{n.d(t,{A:()=>p});var o=n(6758),r=n.n(o),a=n(935),s=n.n(a),l=n(62),i=n.n(l),c=new URL(n(1776),n.b),d=s()(r()),u=i()(c);d.push([e.id,`.node-requirement--aVjY3LFY{width:453px;max-width:90vw;background-color:rgba(255,255,255,0.4);background-image:url(${u});background-position:center bottom;background-size:453px 128px;background-repeat:no-repeat;box-shadow:0px 4px 10px 0px rgba(54,64,80,0.18);border-radius:12px;-webkit-backdrop-filter:blur(28px);backdrop-filter:blur(28px);border:1px solid rgba(255,255,255,0.4);padding:8px;white-space:pre-wrap;position:relative}.heading--F8b1aIJT{display:flex;justify-content:space-between;align-items:center;margin-bottom:11px;font-size:12px}.time--IRwoiblW{color:#8c8c8c}.body--JYv_r9n_{background:#f1f6ff;box-shadow:0px 1px 0px 0px #ffffff;border-radius:9px;padding:15px 10px}.loading-line--xDrsXoxu{position:absolute;bottom:-62px;left:50%;transform:translate(-50%,0)}.loading-line--xDrsXoxu path{fill:none;stroke-width:2px;stroke:rgba(255,255,255,0.6);stroke-dasharray:5,5}.loading--yZvyv4wE{position:absolute;bottom:-74px;left:50%;transform:translate(-50%,0);width:24px;height:24px;display:flex;align-items:center;justify-content:center;background:rgba(69,94,255,0.5);border-radius:24px;animation:loading--yZvyv4wE 1s infinite linear}.inner--voOHXPcc{width:12px;height:12px;background:rgb(69,94,255);border-radius:12px}@keyframes loading--yZvyv4wE{0%{transform:translate(-50%,0) scale(1);opacity:1}100%{transform:translate(-50%,0) scale(1.5);opacity:0}}`,""]),d.locals={"node-requirement":"node-requirement--aVjY3LFY",heading:"heading--F8b1aIJT",time:"time--IRwoiblW",body:"body--JYv_r9n_","loading-line":"loading-line--xDrsXoxu",loading:"loading--yZvyv4wE",inner:"inner--voOHXPcc"};const p=d},6261:(e,t,n)=>{e.exports=n.p+"images/854a0152.png"},6494:(e,t,n)=>{n.d(t,{E:()=>l});var o=n(8769),r=n(4257),a=n(7566),s=n(6854);function l(e){let{nodes:t,sizeReady:n,zoomer:l,rootRef:i}=e;const[c,d]=(0,o.useState)(!1),u=(0,o.useRef)(!1);return(0,o.useEffect)((()=>{const e=i.current;if(n&&e&&!c&&t.length>0){let n=1/0,o=-1/0,i=1/0,c=-1/0;for(const e of t){const t=e.view,r=t.x+t.width,a=t.y+t.height;t.x<n&&(n=t.x),r>o&&(o=r),t.y<i&&(i=t.y),a>c&&(c=a)}const p=(e.clientWidth-(o+n))/2;let m=30;if(u.current){const t=c-i+s.xX-e.clientHeight;m=t>0?-t-i:(e.clientHeight-(c+i))/2}l.transform((0,a.A)(e),new r.uV(1,p,m)),d(!0)}u.current=!1}),[c,t,i,n,l]),{centered:c,setCentered:d,reCenterRef:u}}},6811:(e,t,n)=>{e.exports=n.p+"images/d4ea5a5c.png"},6854:(e,t,n)=>{n.d(t,{Bf:()=>d,CO:()=>i,GT:()=>c,Jw:()=>s,QB:()=>u,U5:()=>a,Yt:()=>r,sS:()=>o,xX:()=>l});const o=.5,r=2,a="<START>",s="<END>",l=96,i=40,c=42,d=10,u=["completed","failed","canceled"]},6903:(e,t,n)=>{n.d(t,{A:()=>h});var o=n(2591),r=n.n(o),a=n(1740),s=n.n(a),l=n(8128),i=n.n(l),c=n(855),d=n.n(c),u=n(3051),p=n.n(u),m=n(3656),g=n.n(m),b=n(1525),f={};f.styleTagTransform=g(),f.setAttributes=d(),f.insert=i().bind(null,"head"),f.domAPI=s(),f.insertStyleElement=p(),r()(b.A,f);const h=b.A&&b.A.locals?b.A.locals:void 0},6938:(e,t,n)=>{n.d(t,{L:()=>A});var o=n(8769),r=n.n(o),a=n(3373),s=n.n(a),l=n(2591),i=n.n(l),c=n(1740),d=n.n(c),u=n(8128),p=n.n(u),m=n(855),g=n.n(m),b=n(3051),f=n.n(b),h=n(3656),x=n.n(h),k=n(5005),v={};v.styleTagTransform=x(),v.setAttributes=g(),v.insert=p().bind(null,"head"),v.domAPI=d(),v.insertStyleElement=f(),i()(k.A,v);const w=k.A&&k.A.locals?k.A.locals:void 0;var y=n(6903);function A(e){let{content:t,loading:n}=e;return r().createElement("div",{className:w["node-instruction"]},r().createElement("div",{className:s()(w.text,{[y.A["shine-text"]]:n}),title:t},t))}},7110:(e,t,n)=>{n.d(t,{A:()=>p});var o=n(6758),r=n.n(o),a=n(935),s=n.n(a),l=n(62),i=n.n(l),c=new URL(n(3921),n.b),d=s()(r()),u=i()(c);d.push([e.id,`ai-portal\\.cruise-canvas{display:block;position:relative;width:100%;height:100%;overflow:hidden;background-color:rgb(205,206,207);background-image:url(${u});background-size:cover;background-repeat:no-repeat;background-position:center;color:#262626;--cruise-canvas-node-border:1px solid gray;--cruise-canvas-node-width-medium:380px;--cruise-canvas-node-width-large:764px;--cruise-canvas-primary-color:#2540ff}.root--z6jdb_BU{width:100%;height:100%;position:relative}.widgets--r6lUPOu2{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;-webkit-user-select:none;user-select:none}.root--z6jdb_BU.loading--m5r507Hp .canvas--u6C26uH_,\n.root--z6jdb_BU.loading--m5r507Hp + .widgets--r6lUPOu2{visibility:hidden}.loading-icon--UkRBMlBy{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:48px;color:#fff}.widgets--r6lUPOu2 > *{pointer-events:auto;-webkit-user-select:text;user-select:text}.canvas--u6C26uH_,\n.edges--uNPQGWZg{width:100%;height:100%;position:absolute;transform-origin:0% 0%;-webkit-user-select:none;user-select:none}.node--IBGywwp4{position:absolute;-webkit-user-select:text;user-select:text;cursor:auto}.node--IBGywwp4:not(.ready--pmh440go),\n.canvas--u6C26uH_:not(.ready--pmh440go) > .edges--uNPQGWZg{visibility:hidden}svg.edges--uNPQGWZg{pointer-events:none;overflow:visible}.edge--muRUWYG1{fill:none;stroke-width:2px;stroke:rgba(255,255,255,0.6);stroke-dasharray:5,5}.size-medium--s_5BfbCV,\n.size-large--GFdstz_s{border:var(--cruise-canvas-node-border);border-radius:6px;padding:6px}.size-medium--s_5BfbCV{width:var(--cruise-canvas-node-width-medium)}.size-large--GFdstz_s{width:var(--cruise-canvas-node-width-large)}.node-default--rfA_zOid{border:var(--cruise-canvas-node-border)}.node-default--rfA_zOid > :first-child{margin-top:0}.node-default--rfA_zOid > :last-child{margin-bottom:0}.go-back--myNmSpSv{position:absolute;top:20px;left:20px}.go-back--myNmSpSv::part(link){width:32px;height:32px;display:flex;justify-content:center;align-items:center;background:rgba(255,255,255,0.7);box-shadow:0px 3px 14px 0px rgba(0,0,0,0.1),0px 1px 4px 0px rgba(0,0,0,0.06);border-radius:8px;border:1px solid rgba(255,255,255,0.3);color:inherit;box-sizing:border-box}.go-back--myNmSpSv::part(link):hover{background:rgba(255,255,255,0.5)}.go-back--myNmSpSv::part(link):active{background:rgba(255,255,255,0.3)}`,""]),d.locals={root:"root--z6jdb_BU",widgets:"widgets--r6lUPOu2",loading:"loading--m5r507Hp",canvas:"canvas--u6C26uH_","loading-icon":"loading-icon--UkRBMlBy",edges:"edges--uNPQGWZg",node:"node--IBGywwp4",ready:"ready--pmh440go",edge:"edge--muRUWYG1","size-medium":"size-medium--s_5BfbCV","size-large":"size-large--GFdstz_s","node-default":"node-default--rfA_zOid","go-back":"go-back--myNmSpSv"};const p=d},7221:(e,t,n)=>{n.d(t,{A:()=>g});var o=n(6758),r=n.n(o),a=n(935),s=n.n(a),l=n(62),i=n.n(l),c=new URL(n(9594),n.b),d=new URL(n(6261),n.b),u=s()(r()),p=i()(c),m=i()(d);u.push([e.id,`.node-end--yzRaOZnC{width:330px;background-color:#fff;background-image:url(${p});background-size:330px 271px;background-repeat:no-repeat;background-position:center;border:1px solid #e0e5f0;border-radius:12px;display:flex;flex-direction:column;align-items:center;padding:41px 24px 28px}.icon--IVcHjGFO{width:64px;height:64px;background-image:url(${m});background-size:59px 49px;background-repeat:no-repeat;background-position:center;margin-bottom:16px}.title--ESn4jaJ9{margin-bottom:8px;font-weight:500;font-size:16px;line-height:24px}.description--aYl8sq6S{margin-bottom:36px;font-size:13px;color:#8c8c8c;line-height:24px}.button--mkIwsPzt{width:120px;height:30px;background:rgba(0,0,0,0.04);border:none;border-radius:15px;text-align:center;cursor:pointer}.button--mkIwsPzt:hover{background:rgba(0,0,0,0.08)}.button--mkIwsPzt:active{background:rgba(0,0,0,0.15)}`,""]),u.locals={"node-end":"node-end--yzRaOZnC",icon:"icon--IVcHjGFO",title:"title--ESn4jaJ9",description:"description--aYl8sq6S",button:"button--mkIwsPzt"};const g=u},7617:(e,t,n)=>{n.d(t,{A:()=>l});var o=n(6758),r=n.n(o),a=n(935),s=n.n(a)()(r());s.push([e.id,'.node-job--soTYrcA7{width:330px;max-width:90vw;background:linear-gradient(180deg,#f5f8ff 0%,#edf0f9 100%);box-shadow:0px 4px 10px 0px rgba(177,149,207,0.4),0px 2px 4px 0px rgba(0,0,0,0.06);border-radius:12px;border:1px solid #fff;padding:8px}.ask-user--lf925zGf{background:rgba(255,255,255,0.4);box-shadow:0px 4px 10px 0px rgba(54,64,80,0.18);border-color:rgba(255,255,255,0.5);-webkit-backdrop-filter:blur(28px);backdrop-filter:blur(28px)}.error--IwtdD0T6{box-shadow:inset 0px 0px 8px 2px rgba(242,76,37,0.6);border-color:rgba(242,76,37,0.6)}.heading--GZqrhPqL{display:flex;align-items:center;border-bottom:1px solid #e2e2ec;padding:0 5px 5px;font-size:12px;color:#8c8c8c}.icon--Rb_vveHN{margin-right:6px}.tool--RR3S1Z1V{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;--shine-text-color:#8c8c8c;--shine-text-highlight-color:#dcdcdc}.time--eHXSEjt6{margin-left:6px}.body--V34MsV9R{padding:16px 4px 8px;max-height:392px;overflow-y:auto}.tool-call--R4168MLY,\n.message--iVQBlD6k{overflow-wrap:break-word}.tool-call--R4168MLY + .message--iVQBlD6k,\n.message--iVQBlD6k + .message--iVQBlD6k{margin-top:1em}.message--iVQBlD6k p{margin:1em 0}.message--iVQBlD6k > :first-child{margin-top:0}.message--iVQBlD6k > :last-child{margin-bottom:0}.ask-user--lf925zGf .heading--GZqrhPqL{border-bottom:none}.ask-user--lf925zGf .body--V34MsV9R{padding-top:8px}.role-assistant--Y8vd9Oms,\n.role-user--nAW4Hzsu{background:rgba(255,255,255,0.8);border-radius:9px;border:1px solid #ccd1de;padding:6px 16px}.role-user--nAW4Hzsu{white-space:pre-wrap}.human-input--wFc6ovnT{margin-top:1em;display:block;width:100%;padding:10px 16px;color:inherit;background:rgba(255,255,255,0.8);box-shadow:0px 1px 0px 0px #ffffff,inset 0px 2px 4px 0px #b3bcf9;border:none;border-radius:9px;font-size:14px;line-height:22px;height:64px}.human-input--wFc6ovnT:focus-visible{outline:none}.human-input--wFc6ovnT::placeholder{color:#bfbfbf}.tool-call--R4168MLY{padding:3px 10px;border-radius:9px;background-color:rgba(0,0,0,0.06);border:1px solid rgba(0,0,0,0.04)}.tool-call-heading--bMDn60o8{display:flex;align-items:center;border-radius:inherit;cursor:pointer;color:rgba(0,0,0,0.45)}.expanded--eCmijryB .tool-call-heading--bMDn60o8{color:inherit}.tool-call-name--rH6tMvX7{min-width:0;flex:1;margin-left:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tool-call--R4168MLY dt{font-weight:400}.expand--XB3NqkVv{margin-left:6px}.tool-call--R4168MLY:not(:hover) .expand--XB3NqkVv{display:none}.tool-call-body--j2C9eUdY{margin-top:1em}.failed--MS4GZtpc{color:var(--color-error)}.node-job--soTYrcA7 code[class*="language-"],.node-job--soTYrcA7 pre[class*="language-"]{background:hsl(230,1%,98%);color:hsl(230,8%,24%);font-family:"Fira Code","Fira Mono",Menlo,Consolas,"DejaVu Sans Mono",monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;line-height:1.5;-moz-tab-size:2;tab-size:2;-webkit-hyphens:none;hyphens:none;font-size:13px}.node-job--soTYrcA7 code[class*="language-"]::selection,.node-job--soTYrcA7 code[class*="language-"] *::selection,.node-job--soTYrcA7 pre[class*="language-"] *::selection{background:hsl(230,1%,90%);color:inherit}.node-job--soTYrcA7 pre[class*="language-"]{padding:1em;margin:0.5em 0;overflow:auto;border-radius:9px}.node-job--soTYrcA7 :not(pre) > code[class*="language-"]{padding:0.2em 0.3em;border-radius:9px;white-space:normal}.node-job--soTYrcA7 .token.comment,.node-job--soTYrcA7 .token.prolog,.node-job--soTYrcA7 .token.cdata{color:hsl(230,4%,64%)}.node-job--soTYrcA7 .token.doctype,.node-job--soTYrcA7 .token.punctuation,.node-job--soTYrcA7 .token.entity{color:hsl(230,8%,24%)}.node-job--soTYrcA7 .token.attr-name,.node-job--soTYrcA7 .token.class-name,.node-job--soTYrcA7 .token.boolean,.node-job--soTYrcA7 .token.constant,.node-job--soTYrcA7 .token.number,.node-job--soTYrcA7 .token.atrule{color:hsl(35,99%,36%)}.node-job--soTYrcA7 .token.keyword{color:hsl(301,63%,40%)}.node-job--soTYrcA7 .token.property,.node-job--soTYrcA7 .token.tag,.node-job--soTYrcA7 .token.symbol,.node-job--soTYrcA7 .token.deleted,.node-job--soTYrcA7 .token.important{color:hsl(5,74%,59%)}.node-job--soTYrcA7 .token.selector,.node-job--soTYrcA7 .token.string,.node-job--soTYrcA7 .token.char,.node-job--soTYrcA7 .token.builtin,.node-job--soTYrcA7 .token.inserted,.node-job--soTYrcA7 .token.regex,.node-job--soTYrcA7 .token.attr-value,.node-job--soTYrcA7 .token.attr-value > .token.punctuation{color:hsl(119,34%,47%)}.node-job--soTYrcA7 .token.variable,.node-job--soTYrcA7 .token.operator,.node-job--soTYrcA7 .token.function{color:hsl(221,87%,60%)}.node-job--soTYrcA7 .token.url{color:hsl(198,99%,37%)}.node-job--soTYrcA7 .token.attr-value > .token.punctuation.attr-equals,.node-job--soTYrcA7 .token.special-attr > .token.attr-value > .token.value.css{color:hsl(230,8%,24%)}.node-job--soTYrcA7 .language-css .token.selector{color:hsl(5,74%,59%)}.node-job--soTYrcA7 .language-css .token.property{color:hsl(230,8%,24%)}.node-job--soTYrcA7 .language-css .token.function,.node-job--soTYrcA7 .language-css .token.url > .token.function{color:hsl(198,99%,37%)}.node-job--soTYrcA7 .language-css .token.url > .token.string.url{color:hsl(119,34%,47%)}.node-job--soTYrcA7 .language-css .token.important,.node-job--soTYrcA7 .language-css .token.atrule .token.rule{color:hsl(301,63%,40%)}.node-job--soTYrcA7 .language-javascript .token.operator{color:hsl(301,63%,40%)}.node-job--soTYrcA7 .language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation{color:hsl(344,84%,43%)}.node-job--soTYrcA7 .language-json .token.operator{color:hsl(230,8%,24%)}.node-job--soTYrcA7 .language-json .token.null.keyword{color:hsl(35,99%,36%)}.node-job--soTYrcA7 .language-markdown .token.url,.node-job--soTYrcA7 .language-markdown .token.url > .token.operator,.node-job--soTYrcA7 .language-markdown .token.url-reference.url > .token.string{color:hsl(230,8%,24%)}.node-job--soTYrcA7 .language-markdown .token.url > .token.content{color:hsl(221,87%,60%)}.node-job--soTYrcA7 .language-markdown .token.url > .token.url,.node-job--soTYrcA7 .language-markdown .token.url-reference.url{color:hsl(198,99%,37%)}.node-job--soTYrcA7 .language-markdown .token.blockquote.punctuation,.node-job--soTYrcA7 .language-markdown .token.hr.punctuation{color:hsl(230,4%,64%);font-style:italic}.node-job--soTYrcA7 .language-markdown .token.code-snippet{color:hsl(119,34%,47%)}.node-job--soTYrcA7 .language-markdown .token.bold .token.content{color:hsl(35,99%,36%)}.node-job--soTYrcA7 .language-markdown .token.italic .token.content{color:hsl(301,63%,40%)}.node-job--soTYrcA7 .language-markdown .token.strike .token.content,.node-job--soTYrcA7 .language-markdown .token.strike .token.punctuation,.node-job--soTYrcA7 .language-markdown .token.list.punctuation,.node-job--soTYrcA7 .language-markdown .token.title.important > .token.punctuation{color:hsl(5,74%,59%)}.node-job--soTYrcA7 .token.bold{font-weight:bold}.node-job--soTYrcA7 .token.comment,.node-job--soTYrcA7 .token.italic{font-style:italic}.node-job--soTYrcA7 .token.entity{cursor:help}.node-job--soTYrcA7 .token.namespace{opacity:0.8}.node-job--soTYrcA7 *::-webkit-scrollbar{width:5px;height:5px;background:transparent}.node-job--soTYrcA7 *::-webkit-scrollbar-thumb{background-color:#d8d8d8;border-radius:3px}.node-job--soTYrcA7 *::-webkit-scrollbar-track{background:transparent}',""]),s.locals={"node-job":"node-job--soTYrcA7","ask-user":"ask-user--lf925zGf",error:"error--IwtdD0T6",heading:"heading--GZqrhPqL",icon:"icon--Rb_vveHN",tool:"tool--RR3S1Z1V",time:"time--eHXSEjt6",body:"body--V34MsV9R","tool-call":"tool-call--R4168MLY",message:"message--iVQBlD6k","role-assistant":"role-assistant--Y8vd9Oms","role-user":"role-user--nAW4Hzsu","human-input":"human-input--wFc6ovnT","tool-call-heading":"tool-call-heading--bMDn60o8",expanded:"expanded--eCmijryB","tool-call-name":"tool-call-name--rH6tMvX7",expand:"expand--XB3NqkVv","tool-call-body":"tool-call-body--j2C9eUdY",failed:"failed--MS4GZtpc"};const l=s},7642:(e,t,n)=>{n.d(t,{g:()=>l});var o=n(7586),r=n.n(o),a=n(8769),s=n(6854);function l(e){let{rawNodes:t,rawEdges:n,sizeMap:o,state:l}=e;const c=(0,a.useRef)(null),d="completed"===l,{initialNodes:u,initialEdges:p}=(0,a.useMemo)((()=>{const e=[{type:"start",id:s.U5}],o=[],r=[],a=null!=t?t:[],l=null!=n?n:[],i=new Set(l.map((e=>e.target))),u=d?new Set(l.map((e=>e.source))):null;for(const e of a)i.has(e.id)||o.push({source:s.U5,target:e.id}),d&&!u.has(e.id)&&r.push(e.id);e.push(...a),o.push(...l),r.length>0&&(e.push({id:s.Jw,type:"end"}),o.push(...r.map((e=>({source:e,target:s.Jw})))));const p=c.current;if(p)for(const t of e){const e=p.get(t.id);e&&(t.view=e)}return{initialNodes:e,initialEdges:o}}),[d,n,t]),m=(0,a.useRef)(null);return(0,a.useMemo)((()=>{var e;for(const e of u)if(null==o||!o.has(e.id))return{sizeReady:!1,nodes:u,edges:[]};const t=new(r().graphlib.Graph);t.setGraph({rankdir:"TB",nodesep:s.GT,edgesep:s.Bf,ranksep:s.CO}),t.setDefaultEdgeLabel((function(){return{}}));for(const e of p)t.setEdge(e.source,e.target);for(const e of u){const[n,r]=o.get(e.id);t.setNode(e.id,{id:e.id,width:n,height:r})}r().layout(t);let n=null;const a=u.map((e=>{const o=t.node(e.id),r=o.x-o.width/2,a=o.y-o.height/2;return"start"===e.type&&(m.current?n={x:m.current.x-r,y:m.current.y-a}:m.current={x:r,y:a}),{...e,view:{x:r,y:a,width:o.width,height:o.height}}}));if(n)for(const e of a)Object.assign(e.view,i(e.view,n));const l=null!==(e=c.current)&&void 0!==e?e:c.current=new Map;for(const e of a){const{x:t,y:n}=e.view;l.set(e.id,{x:t,y:n})}return{sizeReady:!0,nodes:a,edges:p.map((e=>{const o=t.node(e.source),r=i(o,n),a=t.node(e.target),l=i(a,n),c=l.y-(a.height+s.CO)/2,d=[{x:r.x,y:r.y+o.height/2},{x:r.x,y:c},{x:l.x,y:c},{x:l.x,y:l.y-a.height/2}];return{...e,points:d}}))}}),[p,u,o])}function i(e,t){return t?{x:e.x+t.x,y:e.y+t.y}:{x:e.x,y:e.y}}},7954:(e,t,n)=>{n.d(t,{H:()=>v});var o=n(8769),r=n.n(o),a=n(2591),s=n.n(a),l=n(1740),i=n.n(l),c=n(8128),d=n.n(c),u=n(855),p=n.n(u),m=n(3051),g=n.n(m),b=n(3656),f=n.n(b),h=n(8905),x={};x.styleTagTransform=f(),x.setAttributes=p(),x.insert=d().bind(null,"head"),x.domAPI=i(),x.insertStyleElement=g(),s()(h.A,x);const k=h.A&&h.A.locals?h.A.locals:void 0;function v(){return r().createElement("div",{className:k["node-start"]},r().createElement("div",{className:k.icon}))}},8231:(e,t,n)=>{n.d(t,{f:()=>m});var o,r,a,s=n(8769),l=n(7566),i=n(4257),c=n(6854),d=n(9443);const u=/mac/i.test(null!==(o=null!==(r=null===(a=navigator.userAgentData)||void 0===a?void 0:a.platform)&&void 0!==r?r:navigator.platform)&&void 0!==o?o:navigator.userAgent);function p(e){return-e.deltaY*(1===e.deltaMode?.05:e.deltaMode?1:.002)*(e.ctrlKey&&u?10:1)}function m(e){let{rootRef:t,zoomable:n,scrollable:o,pannable:r,pannableWithCtrl:a,scaleRange:u,onSwitchActiveTarget:m}=e;const[g,b]=(0,s.useState)(!1),[f,h]=(0,s.useState)({k:1,x:0,y:0}),x=(0,s.useRef)(f),k=(0,s.useMemo)((()=>null!=u?u:[c.sS,c.Yt]),[u]),v=(0,s.useMemo)((()=>(0,i.s_)().wheelDelta(p)),[]);return(0,s.useEffect)((()=>{let e=!1;v.scaleExtent(n?k:[1,1]).on("start",(()=>{e=!1,b(!0)})).on("zoom",(t=>{e=!0,h(t.transform),x.current=t.transform})).on("end",(()=>{b(!1),e||null==m||m(null)})).filter((e=>("wheel"===e.type||(a?r||e.ctrlKey:!e.ctrlKey))&&!e.button))}),[m,k,n,v,a,r]),(0,s.useEffect)((()=>{if(a){const e=e=>{e.ctrlKey&&e.preventDefault()};return document.addEventListener("contextmenu",e,!0),()=>{document.removeEventListener("contextmenu",e,!0)}}}),[a]),(0,s.useEffect)((()=>{const e=t.current;if(!e)return;const s=(0,l.A)(e),i=()=>{s.on(".zoom",null).on(".zoom.custom",null).on("wheel",null)};if(n||o||r)return(n||o)&&s.on("wheel.zoom.custom",(e=>{if(!e.ctrlKey&&(e.stopImmediatePropagation(),o)){const t=e.target.closest('pre[class*="language-"]');if(t&&function(e,t){if(t>0){const t=e.scrollWidth-e.clientWidth;return e.scrollLeft<=t-1}return e.scrollLeft>=1}(t,e.deltaX))return;const n=e.target.closest(`.${d.A.body}`);if(n&&function(e,t){if(t>0){const t=e.scrollHeight-e.clientHeight;return e.scrollTop<=t-1}return e.scrollTop>=1}(n,e.deltaY))return;e.cancelable&&(e.preventDefault(),v.translateBy(s,e.wheelDeltaX/5,e.wheelDeltaY/5))}})),s.call(v).on("wheel",(e=>{e.preventDefault()})).on("dblclick.zoom",null),r||a||s.on("mousedown.zoom",null),r||s.on("touchstart.zoom",null).on("touchmove.zoom",null).on("touchend.zoom",null),i;i()}),[a,r,t,o,n,v]),{grabbing:g,transform:f,transformRef:x,zoomer:v,scaleRange:k}}},8905:(e,t,n)=>{n.d(t,{A:()=>p});var o=n(6758),r=n.n(o),a=n(935),s=n.n(a),l=n(62),i=n.n(l),c=new URL(n(6811),n.b),d=s()(r()),u=i()(c);d.push([e.id,`.node-start--Mrh1iP5r{width:65px;height:65px;position:relative;overflow:visible}.icon--NxC4u6Wl{width:75px;height:75px;background-image:url(${u});background-size:75px 75px;background-repeat:no-repeat;background-position:center;position:absolute;left:-5px;top:-1px}`,""]),d.locals={"node-start":"node-start--Mrh1iP5r",icon:"icon--NxC4u6Wl"};const p=d},9295:(e,t,n)=>{n.d(t,{s:()=>w});var o=n(8769),r=n.n(o),a=n(2591),s=n.n(a),l=n(1740),i=n.n(l),c=n(8128),d=n.n(c),u=n(855),p=n.n(u),m=n(3051),g=n.n(m),b=n(3656),f=n.n(b),h=n(7221),x={};x.styleTagTransform=f(),x.setAttributes=p(),x.insert=d().bind(null,"head"),x.domAPI=i(),x.insertStyleElement=g(),s()(h.A,x);const k=h.A&&h.A.locals?h.A.locals:void 0;var v=n(79);function w(e){let{onShare:t}=e;return r().createElement("div",{className:k["node-end"]},r().createElement("div",{className:k.icon}),r().createElement("div",{className:k.title},(0,v.t)(v.K.TASK_COMPLETED)),r().createElement("div",{className:k.description},(0,v.t)(v.K.PLAN_COMPLETED)),r().createElement("button",{className:k.button,onClick:t},(0,v.t)(v.K.SHARE)))}},9443:(e,t,n)=>{n.d(t,{A:()=>h});var o=n(2591),r=n.n(o),a=n(1740),s=n.n(a),l=n(8128),i=n.n(l),c=n(855),d=n.n(c),u=n(3051),p=n.n(u),m=n(3656),g=n.n(m),b=n(7617),f={};f.styleTagTransform=g(),f.setAttributes=d(),f.insert=i().bind(null,"head"),f.domAPI=s(),f.insertStyleElement=p(),r()(b.A,f);const h=b.A&&b.A.locals?b.A.locals:void 0},9533:(e,t,n)=>{n.d(t,{B:()=>r});var o=n(8769);function r(e,t){return(0,o.useMemo)((()=>{if(!e)return null;const n=[],o=[],r="requirement";n.push({type:"requirement",id:r,content:e.requirement,state:0===t.length?"working":"completed"});const a=new Map,s=new Map,l=new Map,i=new Map,c=[],d=[];for(const e of t)if(e.parent){let t=s.get(e.parent);t||(t=[],s.set(e.parent,t)),t.push(e.id)}for(const e of t){a.set(e.id,e);for(const t of null!==(u=e.upstream)&&void 0!==u?u:[]){var u;let n=l.get(t);n||(n=[],l.set(t,n)),n.push(e.id)}var p;e.parent||(d.push(e.id),null!==(p=e.upstream)&&void 0!==p&&p.length||c.push(e.id))}const m=e=>{for(const t of e){const e=s.get(t),n=l.get(t);if(e){const o=e.filter((e=>{var t;return!(null!==(t=a.get(e).upstream)&&void 0!==t&&t.length)})),r=n?e.filter((e=>!l.has(e))):[];l.set(t,o);for(const e of r)l.set(e,[...n]);m(e)}}};m(d);for(const[e,t]of l)for(const n of t){let t=i.get(n);t||(t=[],i.set(n,t)),t.push(e)}const g=[],b=new Set,f=[...c];for(;f.length>0;){const e=f.shift();if(b.has(e))continue;b.add(e),g.push(e);const t=l.get(e);t&&f.push(...t)}const h=new Map([[r,[r]]]);for(const e of g){const t=a.get(e),{messages:o}=t,r=Array.isArray(o)&&o.length>0||t.toolCall,s=[];if(t.instruction){const o=`instruction:${e}`;n.push({type:"instruction",id:o,job:t,state:t.state}),s.push(o)}if(r||!t.instruction){const e=`job:${t.id}`;n.push({type:"job",id:e,job:t,state:t.state}),s.push(e)}h.set(e,s)}for(const e of g){const t=h.get(e),n=i.get(e);for(const e of null!=n?n:[r]){const n=h.get(e);o.push({source:n[n.length-1],target:t[0]})}for(let e=1;e<t.length;e++)o.push({source:t[e-1],target:t[e]})}return{nodes:n,edges:o}}),[e,t])}},9594:(e,t,n)=>{e.exports=n.p+"images/b1e65906.png"}}]);
2
+ //# sourceMappingURL=2569.c39eeb6e.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunks/2569.c39eeb6e.js","mappings":"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","sources":["webpack:///./src/cruise-canvas/i18n.ts","webpack:///../../../src/utils/calculateAutoSizeStyle.ts","webpack:///../../src/TextareaAutoResize.tsx","webpack:///./src/cruise-canvas/shared.module.css","webpack:///./src/cruise-canvas/styles.module.css?7c94","webpack:///./src/cruise-canvas/reducers/jobs.ts","webpack:///./src/cruise-canvas/reducers/index.ts","webpack:///./src/cruise-canvas/reducers/task.ts","webpack:///./src/cruise-canvas/reducers/error.ts","webpack:///./src/cruise-canvas/useTaskDetail.ts","webpack:///./src/cruise-canvas/PlanProgress/PlanProgress.module.css?4fe8","webpack:///./src/cruise-canvas/PlanProgress/PlanProgress.tsx","webpack:///./src/cruise-canvas/ZoomBar/ZoomBar.module.css","webpack:///./src/cruise-canvas/NodeRequirement/NodeRequirement.module.css?7927","webpack:///./src/cruise-canvas/NodeRequirement/NodeRequirement.tsx","webpack:///./src/cruise-canvas/PlanProgress/PlanProgress.module.css","webpack:///./src/cruise-canvas/ZoomBar/ZoomBar.module.css?7d53","webpack:///./src/cruise-canvas/ZoomBar/ZoomBar.tsx","webpack:///./src/cruise-canvas/NodeInstruction/NodeInstruction.module.css","webpack:///../../src/rehypePrism.ts","webpack:///../../src/MarkdownComponent.tsx","webpack:///./src/cruise-canvas/cmdb.tsx","webpack:///./src/cruise-canvas/NodeJob/NodeJob.tsx","webpack:///./src/cruise-canvas/bricks.ts","webpack:///./src/cruise-canvas/NodeRequirement/NodeRequirement.module.css","webpack:///./src/cruise-canvas/useAutoCenter.ts","webpack:///./src/cruise-canvas/constants.ts","webpack:///./src/cruise-canvas/shared.module.css?c988","webpack:///./src/cruise-canvas/NodeInstruction/NodeInstruction.module.css?5e68","webpack:///./src/cruise-canvas/NodeInstruction/NodeInstruction.tsx","webpack:///./src/cruise-canvas/styles.module.css","webpack:///./src/cruise-canvas/NodeEnd/NodeEnd.module.css","webpack:///./src/cruise-canvas/NodeJob/NodeJob.module.css","webpack:///./src/cruise-canvas/useLayout.ts","webpack:///./src/cruise-canvas/NodeStart/NodeStart.module.css?c135","webpack:///./src/cruise-canvas/NodeStart/NodeStart.tsx","webpack:///./src/cruise-canvas/useZoom.ts","webpack:///./src/cruise-canvas/NodeStart/NodeStart.module.css","webpack:///./src/cruise-canvas/NodeEnd/NodeEnd.module.css?bd4b","webpack:///./src/cruise-canvas/NodeEnd/NodeEnd.tsx","webpack:///./src/cruise-canvas/NodeJob/NodeJob.module.css?69ec","webpack:///./src/cruise-canvas/useTaskGraph.ts"],"sourcesContent":["import { i18n } from \"@next-core/i18n\";\n\nexport enum K {\n YES = \"YES\",\n NO = \"NO\",\n PLAN_COMPLETED = \"PLAN_COMPLETED\",\n TASK_COMPLETED = \"TASK_COMPLETED\",\n SHARE = \"SHARE\",\n TYPE_YOUR_MESSAGE_HERE = \"TYPE_YOUR_MESSAGE_HERE\",\n ARGUMENTS = \"ARGUMENTS\",\n RESPONSE = \"RESPONSE\",\n cmdb_create_app_system = \"cmdb_create_app_system\",\n cmdb_create_service_set = \"cmdb_create_service_set\",\n cmdb_append_host_to_service_set = \"cmdb_append_host_to_service_set\",\n cmdb_create_agent_scan_job = \"cmdb_create_agent_scan_job\",\n cmdb_service_node_clustering = \"cmdb_service_node_clustering\",\n ask_human = \"ask_human\",\n}\n\nconst en: Locale = {\n YES: \"Yes\",\n NO: \"No\",\n PLAN_COMPLETED: \"All jobs done\",\n TASK_COMPLETED: \"Task completed\",\n SHARE: \"Share\",\n TYPE_YOUR_MESSAGE_HERE: \"Type your message here\",\n ARGUMENTS: \"Arguments\",\n RESPONSE: \"Response\",\n cmdb_create_app_system: \"Create app system\",\n cmdb_create_service_set: \"Create service set\",\n cmdb_append_host_to_service_set: \"Append host to service set\",\n cmdb_create_agent_scan_job: \"Create agent scan job\",\n cmdb_service_node_clustering: \"Service node clustering\",\n ask_human: \"Ask user\",\n};\n\nconst zh: Locale = {\n YES: \"是\",\n NO: \"否\",\n PLAN_COMPLETED: \"所有任务已全部完成\",\n TASK_COMPLETED: \"任务完成\",\n SHARE: \"分享\",\n TYPE_YOUR_MESSAGE_HERE: \"在这里输入信息\",\n ARGUMENTS: \"参数\",\n RESPONSE: \"响应\",\n cmdb_create_app_system: \"创建应用系统\",\n cmdb_create_service_set: \"创建服务集\",\n cmdb_append_host_to_service_set: \"将主机添加到服务集\",\n cmdb_create_agent_scan_job: \"创建 agent 扫描任务\",\n cmdb_service_node_clustering: \"服务节点聚类\",\n ask_human: \"询问用户\",\n};\n\nexport const NS = \"bricks/ai-portal/cruise-canvas\";\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","// istanbul ignore file\nimport type React from \"react\";\n\nconst HIDDEN_TEXTAREA_STYLE = `\n min-height: 0!important;\n max-height: none!important;\n height: 0!important;\n visibility: hidden!important;\n overflow: hidden!important;\n position: absolute!important;\n z-index: -1000!important;\n top: 0!important;\n right: 0!important;\n pointer-events: none!important;\n`;\n\nconst SIZING_STYLE = [\n \"letter-spacing\",\n \"line-height\",\n \"padding-top\",\n \"padding-bottom\",\n \"font-family\",\n \"font-weight\",\n \"font-size\",\n \"font-variant\",\n \"text-rendering\",\n \"text-transform\",\n \"width\",\n \"text-indent\",\n \"padding-left\",\n \"padding-right\",\n \"border-width\",\n \"box-sizing\",\n \"word-break\",\n \"white-space\",\n];\n\nlet hiddenTextarea: HTMLTextAreaElement | undefined;\n\nexport interface AutoSizeOptions {\n minRows?: number | null;\n maxRows?: number | null;\n borderSize?: number;\n paddingSize?: number;\n}\n\n/**\n * 计算 textarea 高度\n * https://github.com/react-component/textarea/blob/1c0026fbe30e5f7dff1fca695b2cf262246381ca/src/calculateNodeHeight.tsx\n */\nexport default function calculateAutoSizeStyle(\n uiTextNode: HTMLTextAreaElement,\n options?: AutoSizeOptions\n): React.CSSProperties {\n const {\n minRows = null,\n maxRows = null,\n borderSize = 2,\n paddingSize = 8,\n } = options ?? {};\n\n if (!hiddenTextarea) {\n hiddenTextarea = document.createElement(\"textarea\");\n hiddenTextarea.setAttribute(\"tab-index\", \"-1\");\n hiddenTextarea.setAttribute(\"aria-hidden\", \"true\");\n document.body.appendChild(hiddenTextarea);\n }\n\n const uiTextNodeStyle = window.getComputedStyle(uiTextNode);\n const sizingStyle = SIZING_STYLE.map(\n (name) => `${name}:${uiTextNodeStyle.getPropertyValue(name)}`\n ).join(\";\");\n\n // equal style\n hiddenTextarea.setAttribute(\n \"style\",\n `${sizingStyle};${HIDDEN_TEXTAREA_STYLE}`\n );\n hiddenTextarea.value = uiTextNode.value || uiTextNode.placeholder || \"\";\n\n let minHeight: number | undefined;\n let maxHeight: number | undefined;\n let overflowY: React.CSSProperties[\"overflowY\"];\n\n let height = hiddenTextarea.scrollHeight + borderSize;\n\n if (minRows !== null || maxRows !== null) {\n const singleRowHeight =\n process.env.NODE_ENV === \"test\"\n ? 22\n : parseFloat(\n window\n .getComputedStyle(hiddenTextarea)\n .getPropertyValue(\"line-height\")\n );\n if (minRows !== null) {\n minHeight = singleRowHeight * minRows + paddingSize + borderSize;\n height = Math.max(minHeight, height);\n }\n if (maxRows !== null) {\n maxHeight = singleRowHeight * maxRows + paddingSize + borderSize;\n if (height <= maxHeight) {\n overflowY = \"hidden\";\n }\n height = Math.min(maxHeight, height);\n }\n }\n\n const style: React.CSSProperties = {\n height,\n overflowY,\n resize: \"none\",\n };\n\n if (minHeight) {\n style.minHeight = minHeight;\n }\n if (maxHeight) {\n style.maxHeight = maxHeight;\n }\n\n return style;\n}\n","import React, {\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { flushSync } from \"react-dom\";\nimport ResizeObserver from \"resize-observer-polyfill\";\nimport calculateAutoSizeStyle from \"./utils/calculateAutoSizeStyle.js\";\n\n// istanbul ignore next\nconst modKey = /Mac|iPod|iPhone|iPad/.test(navigator.platform)\n ? \"metaKey\"\n : \"ctrlKey\";\n\nexport interface TextareaAutoResizeProps\n extends React.DetailedHTMLProps<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n HTMLTextAreaElement\n > {\n /** @default true */\n autoResize?: boolean;\n minRows?: number | null;\n maxRows?: number | null;\n /** @default 2 */\n borderSize?: number;\n /** @default 8 */\n paddingSize?: number;\n containerRef?: React.RefObject<HTMLElement>;\n submitWhen?: \"enter-without-shift\" | \"enter-with-mod\";\n}\n\nexport interface TextareaAutoResizeRef {\n focus(): void;\n}\n\nexport const TextareaAutoResize = React.forwardRef<\n TextareaAutoResizeRef,\n TextareaAutoResizeProps\n>(LegacyTextareaAutoResize);\n\nfunction LegacyTextareaAutoResize(\n {\n autoResize: _autoResize,\n minRows,\n maxRows,\n borderSize,\n paddingSize,\n containerRef,\n value: propValue,\n style,\n submitWhen,\n onChange,\n onSubmit,\n onKeyDown,\n onCompositionStart,\n onCompositionEnd,\n ...props\n }: TextareaAutoResizeProps,\n ref: React.ForwardedRef<TextareaAutoResizeRef>\n): React.JSX.Element {\n const autoResize = _autoResize ?? true;\n const [value, setValue] = useState(propValue ?? \"\");\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const [autoStyle, setAutoStyle] = useState<React.CSSProperties | null>(null);\n\n useImperativeHandle(\n ref,\n () => ({\n focus: () => {\n const textarea = textareaRef.current;\n // istanbul ignore else: defensive check\n if (textarea) {\n const valueLength = textarea.value?.length;\n textarea.focus();\n valueLength && textarea.setSelectionRange(valueLength, valueLength);\n }\n },\n }),\n []\n );\n\n const doAutoResize = useCallback(() => {\n const textarea = textareaRef.current;\n if (textarea && autoResize) {\n const style = calculateAutoSizeStyle(textarea, {\n minRows,\n maxRows,\n borderSize,\n paddingSize,\n });\n // istanbul ignore next\n if (process.env.NODE_ENV === \"test\") {\n setAutoStyle(style);\n } else {\n flushSync(() => {\n setAutoStyle(style);\n });\n }\n }\n }, [autoResize, maxRows, minRows, borderSize, paddingSize]);\n\n const handleInputChange = (\n e: React.ChangeEvent<HTMLTextAreaElement>\n ): void => {\n setValue(e.target.value);\n onChange?.(e);\n };\n\n useEffect(() => {\n setValue(propValue ?? \"\");\n }, [propValue]);\n\n useEffect(() => {\n doAutoResize();\n }, [doAutoResize, value]);\n\n const compositionRef = useRef(false);\n\n const handleCompositionStart = useCallback(\n (e: React.CompositionEvent<HTMLTextAreaElement>) => {\n compositionRef.current = true;\n onCompositionStart?.(e);\n },\n [onCompositionStart]\n );\n\n const handleCompositionEnd = useCallback(\n (e: React.CompositionEvent<HTMLTextAreaElement>) => {\n compositionRef.current = false;\n onCompositionEnd?.(e);\n },\n [onCompositionEnd]\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (compositionRef.current) {\n // Ignore key events during composition\n return;\n }\n\n if (\n e.key === \"Enter\" &&\n (submitWhen === \"enter-without-shift\"\n ? !e.shiftKey\n : submitWhen === \"enter-with-mod\" && e[modKey])\n ) {\n e.preventDefault();\n e.stopPropagation();\n onSubmit?.(e);\n }\n\n onKeyDown?.(e);\n },\n [onKeyDown, onSubmit, submitWhen]\n );\n\n // istanbul ignore next\n useEffect(() => {\n const container = containerRef?.current;\n if (!container || !autoResize) {\n return;\n }\n let previousInlineSize: number | undefined;\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n if (entry.target === container) {\n // istanbul ignore next: compatibility\n const currentInlineSize = entry.contentBoxSize\n ? entry.contentBoxSize[0]\n ? entry.contentBoxSize[0].inlineSize\n : (entry.contentBoxSize as unknown as ResizeObserverSize)\n .inlineSize\n : entry.contentRect.width;\n if (\n currentInlineSize !== undefined &&\n currentInlineSize !== previousInlineSize\n ) {\n const isInitial = !previousInlineSize;\n previousInlineSize = currentInlineSize;\n if (!isInitial) {\n requestAnimationFrame(doAutoResize);\n }\n }\n }\n }\n });\n observer.observe(container);\n return () => {\n observer.disconnect();\n };\n }, [autoResize, containerRef, doAutoResize]);\n\n return (\n <textarea\n {...props}\n ref={textareaRef}\n value={value}\n style={{\n ...style,\n ...autoStyle,\n }}\n onChange={handleInputChange}\n onCompositionStart={handleCompositionStart}\n onCompositionEnd={handleCompositionEnd}\n onKeyDown={handleKeyDown}\n />\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, `.shine-text--t2t9tIJp{color:transparent;background:linear-gradient(to right,var(--shine-text-color) 0%,var(--shine-text-color) 40%,var(--shine-text-highlight-color) 50%,var(--shine-text-color) 60%,var(--shine-text-color) 100%);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;animation:shineText--ycIJ4nxc 2s infinite linear}@keyframes shineText--ycIJ4nxc{0%{background-position:-50% 50%}100%{background-position:-250% 50%}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"shine-text\": `shine-text--t2t9tIJp`,\n\t\"shineText\": `shineText--ycIJ4nxc`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./styles.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./styles.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import type { Reducer } from \"react\";\nimport { isEqual, isMatchWith, pick } from \"lodash\";\nimport type { Job, JobPatch, Message, Part, TextPart } from \"../interfaces\";\nimport type { CruiseCanvasAction } from \"./interfaces\";\n\nexport const jobs: Reducer<Job[], CruiseCanvasAction> = (state, action) => {\n switch (action.type) {\n case \"sse\": {\n const jobsPatch = action.payload.jobs;\n let jobs = action.isInitial ? [] : state;\n\n if (!Array.isArray(jobsPatch) || jobsPatch.length === 0) {\n return jobs;\n }\n\n for (const jobPatch of jobsPatch) {\n // TODO(): remove temp work around.\n // if (!jobPatch.upstream?.length) {\n // delete jobPatch.upstream;\n // }\n // if (!jobPatch.parent) {\n // delete jobPatch.parent;\n // }\n // if (!jobPatch.state) {\n // delete jobPatch.state;\n // }\n // if (!jobPatch.instruction) {\n // delete jobPatch.instruction;\n // }\n\n if ((jobPatch as any).state === \"blocked\") {\n jobPatch.state = \"working\";\n }\n\n const previousJobIndex =\n jobs?.findIndex((job) => job.id === jobPatch.id) ?? -1;\n const { messages: messagesPatch, toolCall } = jobPatch;\n\n if (typeof toolCall?.arguments === \"string\") {\n toolCall.originalArguments = toolCall.arguments;\n try {\n toolCall.arguments = JSON.parse(toolCall.arguments);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"Failed to parse toolCall arguments:\", e);\n toolCall.arguments = {};\n toolCall.argumentsParseFailed = true;\n toolCall.argumentsParseError = e;\n }\n }\n\n if (previousJobIndex === -1) {\n if (Array.isArray(messagesPatch) && messagesPatch.length > 0) {\n jobs = [\n ...jobs,\n {\n ...jobPatch,\n messages: mergeMessages(messagesPatch),\n } as Job,\n ];\n } else {\n jobs = [...jobs, jobPatch as Job];\n }\n } else {\n const previousJob = jobs[previousJobIndex];\n const restMessagesPatch: JobPatch = pick(jobPatch, [\n \"id\",\n \"upstream\",\n \"parent\",\n \"state\",\n \"instruction\",\n \"toolCall\",\n \"isError\",\n \"startTime\",\n \"endTime\",\n ]);\n if (Array.isArray(messagesPatch) && messagesPatch.length > 0) {\n restMessagesPatch.messages = mergeMessages([\n ...(previousJob.messages ?? []),\n ...messagesPatch,\n ]);\n }\n if (!isMatchWith(previousJob, restMessagesPatch, isEqual)) {\n jobs = [\n ...jobs.slice(0, previousJobIndex),\n {\n ...previousJob,\n ...restMessagesPatch,\n },\n ...jobs.slice(previousJobIndex + 1),\n ];\n }\n }\n }\n\n return jobs;\n }\n\n case \"reset\": {\n return state.length === 0 ? state : [];\n }\n }\n\n return state;\n};\n\nfunction mergeMessages(messages: Message[]): Message[] {\n const merged: Message[] = [];\n let previousRole: Message[\"role\"] | undefined;\n for (const message of messages) {\n if (!previousRole || previousRole !== message.role) {\n merged.push({ ...message });\n } else {\n const lastMessage = merged[merged.length - 1];\n lastMessage.parts = [...lastMessage.parts, ...message.parts];\n }\n previousRole = message.role;\n }\n\n for (const message of merged) {\n message.parts = mergeMessageParts(message.parts);\n }\n\n return merged;\n}\n\nfunction mergeMessageParts(parts: Part[]): Part[] {\n const merged: Part[] = [];\n let previousType: Part[\"type\"] | undefined;\n for (const part of parts) {\n if (!previousType || previousType !== part.type || part.type !== \"text\") {\n merged.push({ ...part });\n } else {\n const lastPart = merged[merged.length - 1] as TextPart;\n lastPart.text += part.text;\n }\n previousType = part.type;\n }\n return merged;\n}\n","import { Reducer } from \"react\";\nimport type { CruiseCanvasAction, CruiseCanvasState } from \"./interfaces\";\nimport { jobs } from \"./jobs\";\nimport { task } from \"./task\";\nimport { error } from \"./error\";\n\ntype ReducersMapObject<S, A> = {\n [K in keyof S]: Reducer<S[K], A>;\n};\n\nfunction combineReducers<S, A>(\n reducers: ReducersMapObject<S, A>\n): Reducer<S, A> {\n return ((state, action) =>\n Object.fromEntries(\n Object.entries<Reducer<any, A>>(reducers).map(([key, value]) => [\n key,\n value(state[key as keyof S], action),\n ])\n )) as Reducer<S, A>;\n}\n\nexport const rootReducer = combineReducers<\n CruiseCanvasState,\n CruiseCanvasAction\n>({\n task,\n jobs,\n error,\n});\n","import type { Reducer } from \"react\";\nimport { isEqual, isMatchWith, pick } from \"lodash\";\nimport type { TaskBaseDetail } from \"../interfaces\";\nimport type { CruiseCanvasAction } from \"./interfaces\";\n\nexport const task: Reducer<TaskBaseDetail | null, CruiseCanvasAction> = (\n state,\n action\n) => {\n switch (action.type) {\n case \"sse\": {\n const taskPatch = pick(action.payload, [\n \"id\",\n \"requirement\",\n \"state\",\n \"title\",\n \"startTime\",\n \"endTime\",\n \"plan\",\n ]);\n\n // TODO(): remove temp work around.\n // if (!taskPatch.requirement) {\n // delete taskPatch.requirement;\n // }\n // if (!taskPatch.state) {\n // delete taskPatch.state;\n // }\n\n if ((taskPatch as any).state === \"blocked\") {\n taskPatch.state = \"working\";\n }\n\n return (\n action.isInitial\n ? taskPatch\n : state && isMatchWith(state, taskPatch, isEqual)\n ? state\n : { ...state, ...taskPatch }\n ) as TaskBaseDetail;\n }\n\n case \"reset\": {\n return null;\n }\n }\n return state;\n};\n","import type { Reducer } from \"react\";\nimport type { CruiseCanvasAction } from \"./interfaces\";\n\nexport const error: Reducer<string | null, CruiseCanvasAction> = (\n state,\n action\n) => {\n switch (action.type) {\n case \"sse\": {\n const error = action.payload.error;\n return state === null && typeof error === \"string\" ? error : state;\n }\n\n case \"reset\": {\n return null;\n }\n }\n\n return state;\n};\n","// istanbul ignore file\nimport { useEffect, useReducer, useRef, useState } from \"react\";\nimport { isEqual } from \"lodash\";\nimport { http } from \"@next-core/http\";\nimport { createSSEStream } from \"@next-core/utils/general\";\nimport { getBasePath, handleHttpError } from \"@next-core/runtime\";\nimport { rootReducer } from \"./reducers\";\nimport type { Job, StepWithState, TaskPatch } from \"./interfaces\";\n\nexport function useTaskDetail(taskId: string | undefined) {\n const [{ task, jobs, error }, dispatch] = useReducer(\n rootReducer,\n null,\n () => ({\n task: null,\n jobs: [],\n error: null,\n })\n );\n\n const humanInputRef = useRef<(jobId: string, input: string) => void>();\n\n useEffect(() => {\n dispatch({ type: \"reset\" });\n humanInputRef.current = undefined;\n if (!taskId) {\n return;\n }\n\n let ignore = false;\n let requesting = false;\n let ctrl: AbortController | undefined;\n\n const makeRequest = async () => {\n if (requesting) {\n return;\n }\n\n requesting = true;\n ctrl = new AbortController();\n try {\n const request = await createSSEStream<TaskPatch>(\n `${getBasePath()}api/gateway/logic.llm.aiops_service/api/v1/llm/agent/flow/${taskId}`,\n // `/api/mocks/task/get?${new URLSearchParams({ id: taskId })}`\n // `http://localhost:8888/.netlify/functions/task-get?${new URLSearchParams({ id: taskId })}`\n // `https://serverless-mocks.netlify.app/.netlify/functions/task-get?${new URLSearchParams({ id: taskId })}`\n {\n signal: ctrl.signal,\n }\n );\n const stream = await request;\n let isInitial = true;\n for await (const value of stream) {\n if (ignore) {\n requesting = false;\n return;\n }\n\n dispatch({ type: \"sse\", payload: value, isInitial });\n isInitial = false;\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"sse failed\", e);\n handleHttpError(e);\n } finally {\n requesting = false;\n }\n };\n\n humanInputRef.current = async (jobId: string, input: string) => {\n try {\n await http.post(\n `${getBasePath()}api/gateway/logic.llm.aiops_service/api/v1/llm/agent/flow/${taskId}/job/${jobId}`,\n { input }\n );\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"human input failed\", e);\n handleHttpError(e);\n return;\n }\n\n makeRequest();\n };\n\n makeRequest();\n\n return () => {\n ignore = true;\n ctrl?.abort();\n };\n }, [taskId]);\n\n const [plan, setPlan] = useState<StepWithState[]>([]);\n\n useEffect(() => {\n setPlan((prev) => {\n const jobMap = new Map<string, Job>();\n const childrenMap = new Map<string, string[]>();\n for (const job of jobs) {\n jobMap.set(job.id, job);\n\n if (job.parent) {\n childrenMap.set(job.parent, [\n ...(childrenMap.get(job.parent) ?? []),\n job.id,\n ]);\n }\n }\n\n // A step is input-required when itself is input-required or any of its descendants is input-required.\n const isInputRequired = (job: Job): boolean => {\n return (\n job.state === \"input-required\" ||\n !!childrenMap.get(job.id)?.some((childId) => {\n const childJob = jobMap.get(childId)!;\n return isInputRequired(childJob);\n })\n );\n };\n\n const plan: StepWithState[] = [];\n for (const step of task?.plan ?? []) {\n const job = jobMap.get(step.id);\n plan.push({\n id: step.id,\n instruction: step.instruction,\n state: job\n ? isInputRequired(job)\n ? \"input-required\"\n : job.state\n : undefined,\n });\n }\n\n return isEqual(prev, plan) ? prev : plan;\n });\n }, [jobs, task?.plan]);\n\n return { task, jobs, plan, error, humanInputRef };\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./PlanProgress.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./PlanProgress.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React, { useCallback, useMemo, useState } from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./PlanProgress.module.css\";\nimport type { JobState, StepWithState } from \"../interfaces\";\nimport { WrappedIcon } from \"../bricks\";\nimport { K, t } from \"../i18n\";\n\nexport interface PlanProgressProps {\n plan?: StepWithState[];\n}\n\ninterface PlanProgressStat {\n doneCount: number;\n instruction: string;\n state: JobState | undefined;\n}\n\nexport function PlanProgress({ plan }: PlanProgressProps): JSX.Element | null {\n const [expanded, setExpanded] = useState(false);\n\n const { doneCount, state, instruction } = useMemo(() => {\n return (plan ?? []).reduce<PlanProgressStat>(\n (acc, step) => {\n if (step.state === \"completed\") {\n return {\n ...acc,\n state: step.state,\n doneCount: acc.doneCount + 1,\n };\n } else if (\n !acc.instruction ||\n (step.state && step.state !== \"unknown\")\n ) {\n return {\n ...acc,\n state: step.state,\n instruction: step.instruction,\n };\n }\n return acc;\n },\n {\n doneCount: 0,\n state: \"unknown\",\n instruction: \"\",\n }\n );\n }, [plan]);\n\n const { className, icon } = useMemo(() => {\n return getClassNameAndIconProps(state);\n }, [state]);\n\n const toggle = useCallback(() => {\n setExpanded((prev) => !prev);\n }, []);\n\n if (!plan?.length) {\n return null;\n }\n\n return (\n <div className={classNames(styles.progress, className)} onClick={toggle}>\n <div className={styles.icon}>\n <WrappedIcon {...icon} />\n </div>\n <span\n className={styles.text}\n title={state === \"completed\" ? \"\" : instruction}\n >\n {state === \"completed\" ? t(K.PLAN_COMPLETED) : instruction}\n </span>\n <span className={styles.stat}>\n {doneCount}/{plan.length}\n </span>\n <WrappedIcon\n className={styles.expand}\n lib=\"antd\"\n theme=\"outlined\"\n icon={expanded ? \"down\" : \"up\"}\n />\n {expanded && (\n <ul className={styles.details} onClick={(e) => e.stopPropagation()}>\n {plan.map((step, index) => (\n <PlanStep\n key={index}\n state={step.state}\n instruction={step.instruction}\n />\n ))}\n </ul>\n )}\n </div>\n );\n}\n\ninterface PlanStepProps {\n state?: JobState;\n instruction: string;\n}\n\nfunction PlanStep({ state, instruction }: PlanStepProps) {\n const { className, icon } = useMemo(() => {\n return getClassNameAndIconProps(state);\n }, [state]);\n\n return (\n <li className={styles.step}>\n <WrappedIcon {...icon} className={classNames(styles.state, className)} />\n <span className={styles.instruction} title={instruction}>\n {instruction}\n </span>\n </li>\n );\n}\n\nfunction getClassNameAndIconProps(state: JobState | undefined) {\n switch (state) {\n case \"completed\":\n return {\n className: styles.completed,\n icon: {\n lib: \"fa\",\n prefix: \"fas\",\n icon: \"check\",\n },\n };\n case \"submitted\":\n case \"working\":\n return {\n className: styles.working,\n icon: {\n lib: \"antd\",\n theme: \"outlined\",\n icon: \"loading-3-quarters\",\n spinning: true,\n },\n };\n case \"input-required\":\n return {\n className: styles[\"input-required\"],\n icon: {\n lib: \"fa\",\n prefix: \"far\",\n icon: \"circle-pause\",\n },\n };\n case \"failed\":\n return {\n className: styles.failed,\n icon: {\n lib: \"fa\",\n prefix: \"fas\",\n icon: \"xmark\",\n },\n };\n case \"canceled\":\n return {\n className: styles.canceled,\n icon: {\n lib: \"fa\",\n prefix: \"far\",\n icon: \"circle-stop\",\n },\n };\n default:\n return {\n icon: {\n lib: \"fa\",\n prefix: \"far\",\n icon: \"clock\",\n },\n };\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, `.zoom-bar--MTw5VGPl{position:absolute;left:20px;bottom:20px;display:flex;align-items:center;padding:3px 5px;-webkit-user-select:none;user-select:none;background:rgba(255,255,255,0.7);box-shadow:0px 3px 14px 0px rgba(0,0,0,0.1),0px 1px 4px 0px rgba(0,0,0,0.06);border-radius:8px;border:1px solid rgba(255,255,255,0.3)}.zoom-bar--MTw5VGPl button{background:transparent;border:none;border-radius:4px;color:#333;width:24px;height:24px;font-size:16px;line-height:16px;display:flex;align-items:center;justify-content:center;cursor:pointer}.zoom-bar--MTw5VGPl button:hover{background:rgba(0,0,0,0.04)}.zoom-bar--MTw5VGPl button:active{background:rgba(0,0,0,0.08)}.divider--S0X2YCDi{background:rgba(0,0,0,0.15);width:1px;height:16px}.zoom-bar--MTw5VGPl > :not(:last-child){margin-right:6px}@media (max-width: 719px){.zoom-bar--MTw5VGPl{left:auto;bottom:auto;top:20px;right:20px}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"zoom-bar\": `zoom-bar--MTw5VGPl`,\n\t\"divider\": `divider--S0X2YCDi`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeRequirement.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeRequirement.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React, { useMemo } from \"react\";\nimport { wrapBrick } from \"@next-core/react-element\";\nimport { auth } from \"@next-core/easyops-runtime\";\nimport type {\n EoEasyopsAvatar,\n EoEasyopsAvatarProps,\n} from \"@next-bricks/basic/easyops-avatar\";\nimport moment from \"moment\";\nimport styles from \"./NodeRequirement.module.css\";\n\nconst WrappedEasyOpsAvatar = wrapBrick<EoEasyopsAvatar, EoEasyopsAvatarProps>(\n \"eo-easyops-avatar\"\n);\n\nexport interface NodeRequirementProps {\n content?: string;\n startTime?: number;\n loading?: boolean;\n}\n\nexport function NodeRequirement({\n content,\n startTime,\n loading,\n}: NodeRequirementProps): JSX.Element {\n const username = useMemo(() => {\n return auth.getAuth().username;\n }, []);\n\n return (\n <div className={styles[\"node-requirement\"]}>\n <div className={styles.heading}>\n <div className={styles.user}>\n <WrappedEasyOpsAvatar\n nameOrInstanceId={username}\n showName\n size=\"xs\"\n />\n </div>\n <div className={styles.time}>\n {startTime && moment(startTime * 1000).format(\"MM-DD HH:mm\")}\n </div>\n </div>\n <div className={styles.body}>{content}</div>\n {loading && (\n <>\n <svg\n className={styles[\"loading-line\"]}\n viewBox=\"0 0 2 62\"\n width=\"2\"\n height=\"62\"\n >\n <path d=\"M1 0 L1 62\" />\n </svg>\n <div className={styles.loading}>\n <div className={styles.inner} />\n </div>\n </>\n )}\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, `.progress--62eOnxaf{position:absolute;bottom:20px;left:50%;transform:translate(-50%,0);width:453px;max-width:80%;background:#ffffff;box-shadow:0px 6px 16px 0px rgba(0,0,0,0.08),0px 3px 6px -4px rgba(0,0,0,0.12);border-radius:12px;padding:12px;line-height:24px;cursor:pointer;display:flex;align-items:center}.icon--TMLJniSx{margin-right:6px;width:22px;height:22px;border-radius:22px;display:flex;align-items:center;justify-content:center;background:linear-gradient(222deg,#abaab7 25%,#fff 75%);color:#4e4d56;font-size:12px;text-shadow:0px 1px 1px #fff}.progress--62eOnxaf.completed--ACUTqxl7 .icon--TMLJniSx{background:linear-gradient(222deg,#16c661 25%,#fff 75%);color:#055527}.progress--62eOnxaf.failed--atS7ek2B .icon--TMLJniSx{background:linear-gradient(222deg,#f24c25 25%,#fff 75%);color:#5b1504}.progress--62eOnxaf.working--Z6W16jVj .icon--TMLJniSx{background:linear-gradient(222deg,#3e56ff 25%,#fff 75%);color:#0c165d}.progress--62eOnxaf.input-required--YhWlEgu0 .icon--TMLJniSx{background:linear-gradient(222deg,#12aacc 25%,#fff 75%);color:#0c353e}.progress--62eOnxaf.canceled--imA9nfyy .icon--TMLJniSx{background:linear-gradient(222deg,#fcaa07 25%,#fff 75%);color:#302206}.text--vZYOZzn1,\n.instruction--Z7riLyFL{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;min-width:0;flex:1}.stat--YsJ88cZz{margin-left:6px;color:#8c8c8c}.expand--gqn8QEnc{margin-left:6px;color:#8c8c8c}.details--rtuqBzKj{position:absolute;left:0;right:0;bottom:4em;background:#fff;border-radius:12px;box-shadow:0px 6px 16px 0px rgba(0,0,0,0.08),0px 3px 6px -4px rgba(0,0,0,0.12);list-style:none;margin:0;padding:12px;cursor:auto}.step--f9i49Db2{display:flex;align-items:center}.step--f9i49Db2:not(:last-child){margin-bottom:8px}.state--TmkD_q3_{margin-right:6px;color:var(--text-color-secondary)}.state--TmkD_q3_.completed--ACUTqxl7{color:var(--color-success)}.state--TmkD_q3_.failed--atS7ek2B{color:var(--color-error)}.state--TmkD_q3_.working--Z6W16jVj{color:var(--color-info)}.state--TmkD_q3_.input-required--YhWlEgu0{color:var(--palette-cyan-7)}.state--TmkD_q3_.canceled--imA9nfyy{color:#fcaa07}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"progress\": `progress--62eOnxaf`,\n\t\"icon\": `icon--TMLJniSx`,\n\t\"completed\": `completed--ACUTqxl7`,\n\t\"failed\": `failed--atS7ek2B`,\n\t\"working\": `working--Z6W16jVj`,\n\t\"input-required\": `input-required--YhWlEgu0`,\n\t\"canceled\": `canceled--imA9nfyy`,\n\t\"text\": `text--vZYOZzn1`,\n\t\"instruction\": `instruction--Z7riLyFL`,\n\t\"stat\": `stat--YsJ88cZz`,\n\t\"expand\": `expand--gqn8QEnc`,\n\t\"details\": `details--rtuqBzKj`,\n\t\"step\": `step--f9i49Db2`,\n\t\"state\": `state--TmkD_q3_`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ZoomBar.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./ZoomBar.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React, { useCallback } from \"react\";\nimport styles from \"./ZoomBar.module.css\";\nimport { WrappedIcon } from \"../bricks\";\n\nexport interface ZoomBarProps {\n scale: number;\n onScaleChange?: (scale: number) => void;\n onReCenter?: () => void;\n}\n\nexport function ZoomBar({\n scale,\n onScaleChange,\n onReCenter,\n}: ZoomBarProps): JSX.Element {\n const handleZoomIn = useCallback(() => {\n onScaleChange?.(scale + 0.1);\n }, [onScaleChange, scale]);\n\n const handleZoomOut = useCallback(() => {\n onScaleChange?.(scale - 0.1);\n }, [onScaleChange, scale]);\n\n return (\n <div className={styles[\"zoom-bar\"]}>\n <button onClick={onReCenter}>\n <WrappedIcon lib=\"fa\" prefix=\"fas\" icon=\"expand\" />\n </button>\n <div className={styles.divider}></div>\n <button onClick={handleZoomOut}>\n <WrappedIcon lib=\"antd\" theme=\"outlined\" icon=\"minus-circle\" />\n </button>\n <button onClick={handleZoomIn}>\n <WrappedIcon lib=\"antd\" theme=\"outlined\" icon=\"plus-circle\" />\n </button>\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, `.node-instruction--Gu7k6RDs{max-width:437px;max-width:min(437px,90vw);background:rgba(255,255,255,0.2);box-shadow:0px 4px 10px 0px rgba(54,64,80,0.08);border-radius:9999px;border:1px solid rgba(255,255,255,0.284);padding:6px 16px;color:rgba(0,0,0,0.45)}.text--jsSeLl7B{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;--shine-text-color:rgba(0,0,0,0.45);--shine-text-highlight-color:#dcdcdc}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-instruction\": `node-instruction--Gu7k6RDs`,\n\t\"text\": `text--jsSeLl7B`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import { visit } from \"unist-util-visit\";\nimport { toString } from \"hast-util-to-string\";\nimport { refractor, type RefractorElement } from \"refractor\";\n\n// Reference https://github.com/mapbox/rehype-prism\nexport function rehypePrism() {\n function visitor(\n node: RefractorElement,\n _index: number | undefined,\n parent: RefractorElement | undefined\n ) {\n if (!parent || parent.tagName !== \"pre\" || node.tagName !== \"code\") {\n return;\n }\n\n const lang = getLanguage(node);\n\n if (lang === null) {\n return;\n }\n\n let result;\n try {\n parent.properties.className = (\n (parent.properties.className as string[]) || []\n ).concat(\"language-\" + lang);\n result = refractor.highlight(toString(node), lang);\n } catch {\n return;\n }\n\n node.children = result.children;\n }\n return (tree: RefractorElement) => {\n visit(tree, \"element\", visitor);\n };\n}\n\nfunction getLanguage(node: RefractorElement) {\n const className = (node.properties.className as string[]) || [];\n\n for (const classListItem of className) {\n if (classListItem.slice(0, 9) === \"language-\") {\n return classListItem.slice(9).toLowerCase();\n }\n }\n\n return null;\n}\n","import { useEffect, useState } from \"react\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nimport { unified } from \"unified\";\nimport remarkParse from \"remark-parse\";\nimport remarkToRehype from \"remark-rehype\";\nimport rehypeReact, { Options as RehypeReactOptions } from \"rehype-react\";\nimport { rehypePrism } from \"./rehypePrism.js\";\n\nconst production = { Fragment, jsx, jsxs };\n\nexport interface MarkdownComponentProps {\n content?: string;\n}\n\n// Reference https://github.com/remarkjs/react-remark/blob/39553e5f5c9e9b903bebf261788ff45130668de0/src/index.ts\nexport function MarkdownComponent({ content }: MarkdownComponentProps) {\n const [reactContent, setReactContent] = useState<JSX.Element | null>(null);\n\n useEffect(() => {\n let ignore = false;\n unified()\n .use(remarkParse)\n .use(remarkToRehype)\n .use([rehypePrism])\n .use(rehypeReact, production as RehypeReactOptions)\n .process(content)\n .then((vFile) => {\n if (!ignore) {\n setReactContent(vFile.result);\n }\n })\n .catch((error) => {\n if (!ignore) {\n // eslint-disable-next-line no-console\n console.error(\"Convert markdown failed:\", error);\n setReactContent(null);\n }\n });\n return () => {\n ignore = true;\n };\n }, [content]);\n\n return reactContent;\n}\n","import React from \"react\";\nimport { asyncWrapBrick } from \"@next-core/react-runtime\";\n\ninterface CMDBSelectProps {\n objectId?: string | null;\n fieldId?: string | null;\n objectList?: any[] | null;\n}\n\ninterface CMDBSelectEvents {\n \"cmdb.instance.form.change.v2\": CustomEvent<any[]>;\n}\n\ninterface CMDBSelectEvensMapping {\n onChangeV2: \"cmdb.instance.form.change.v2\";\n}\n\nexport const AsyncWrappedCMDB = React.lazy(async () => ({\n default: await asyncWrapBrick<\n HTMLElement,\n CMDBSelectProps,\n CMDBSelectEvents,\n CMDBSelectEvensMapping\n >(\"cmdb-instances.cmdb-instances-input-form\", {\n onChangeV2: \"cmdb.instance.form.change.v2\",\n }),\n}));\n","// istanbul ignore file: experimental\nimport React, { Suspense, useEffect, useMemo, useRef, useState } from \"react\";\nimport { MarkdownComponent } from \"@next-shared/markdown\";\nimport { TextareaAutoResize } from \"@next-shared/form\";\nimport { CmdbObjectApi_getObjectRef } from \"@next-api-sdk/cmdb-sdk\";\nimport classNames from \"classnames\";\nimport moment from \"moment\";\nimport { handleHttpError } from \"@next-core/runtime\";\nimport styles from \"./NodeJob.module.css\";\nimport sharedStyles from \"../shared.module.css\";\nimport type { Job } from \"../interfaces\";\nimport { K, t } from \"../i18n.js\";\nimport { AsyncWrappedCMDB } from \"../cmdb.js\";\nimport { WrappedButton, WrappedIcon } from \"../bricks.js\";\n\nexport interface NodeJobProps {\n job: Job;\n state?: string;\n humanInput?: (jobId: string, input: string) => void;\n}\n\nexport function NodeJob({ job, state, humanInput }: NodeJobProps): JSX.Element {\n const askUser = job.toolCall?.name === \"ask_human\";\n const knownAskUser =\n askUser &&\n [\n \"ask_user_more\",\n \"ask_user_confirm\",\n \"ask_user_choose\",\n \"ask_user_select_from_cmdb\",\n ].includes(job.toolCall!.arguments?.command as string);\n const loading = state === \"working\" || state === \"submitted\";\n\n return (\n <div\n className={classNames(styles[\"node-job\"], {\n [styles.error]: job.isError,\n [styles[\"ask-user\"]]: knownAskUser,\n })}\n >\n <div className={styles.heading}>\n {askUser ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"fa\"\n prefix=\"fas\"\n icon=\"person-circle-question\"\n />\n ) : job.toolCall ? (\n <WrappedIcon\n className={styles.icon}\n lib=\"antd\"\n theme=\"outlined\"\n icon=\"tool\"\n />\n ) : (\n <WrappedIcon className={styles.icon} lib=\"easyops\" icon=\"robot\" />\n )}\n <div\n className={classNames(styles.tool, {\n [sharedStyles[\"shine-text\"]]: loading,\n })}\n >\n {job.toolCall?.name\n ? t(K[job.toolCall.name as K]) || job.toolCall.name\n : \"Elevo\"}\n </div>\n <div className={styles.time}>\n {job.startTime && moment(job.startTime * 1000).format(\"MM-DD HH:mm\")}\n </div>\n </div>\n <div className={styles.body}>\n {knownAskUser ? (\n <>\n <div className={`${styles.message} ${styles[\"role-assistant\"]}`}>\n <MarkdownComponent\n content={job.toolCall!.arguments?.question as string}\n />\n </div>\n {state === \"input-required\" &&\n (job.toolCall!.arguments!.command === \"ask_user_more\" ? (\n <HumanInputComponent jobId={job.id} humanInput={humanInput} />\n ) : job.toolCall!.arguments!.command === \"ask_user_confirm\" ? (\n <HumanConfirmComponent\n jobId={job.id}\n humanInput={humanInput}\n confirmText={job.toolCall!.arguments!.confirm_text as string}\n cancelText={job.toolCall!.arguments!.cancel_text as string}\n />\n ) : job.toolCall!.arguments!.command === \"ask_user_choose\" ? (\n <HumanChooseComponent\n jobId={job.id}\n humanInput={humanInput}\n options={job.toolCall!.arguments!.options as string[]}\n />\n ) : job.toolCall!.arguments!.command ===\n \"ask_user_select_from_cmdb\" ? (\n <HumanSelectFromCmdb\n jobId={job.id}\n humanInput={humanInput}\n objectId={job.toolCall!.arguments!.objectId as string}\n attrId={job.toolCall!.arguments!.attrId as string}\n />\n ) : null)}\n </>\n ) : askUser ? (\n <div className={`${styles.message} ${styles[\"role-assistant\"]}`}>\n Unexpected ask_human command:{\" \"}\n {JSON.stringify(job.toolCall!.arguments?.command ?? null)}\n </div>\n ) : null}\n {!askUser && job.toolCall && <ToolCallComponent job={job} />}\n {job.messages?.map((message, index) =>\n message.role === \"tool\" && !askUser ? null : (\n <div\n key={index}\n className={classNames(styles.message, {\n [styles[\"role-user\"]]: message.role === \"tool\",\n })}\n >\n {message.parts?.map((part, partIndex) => (\n <React.Fragment key={partIndex}>\n {part.type === \"text\" ? (\n <MarkdownComponent content={part.text} />\n ) : part.type === \"file\" ? (\n <pre className=\"language-plaintext\">\n File: {part.file.name}\n </pre>\n ) : (\n <pre className=\"language-plaintext\">\n Data: {JSON.stringify(part.data, null, 2)}\n </pre>\n )}\n </React.Fragment>\n ))}\n </div>\n )\n )}\n </div>\n </div>\n );\n}\n\nfunction ToolCallComponent({ job }: { job: Job }): JSX.Element {\n const toolCall = job.toolCall!;\n const toolCallMessages = job.messages?.filter((msg) => msg.role === \"tool\");\n\n const [expanded, setExpanded] = useState(false);\n const toggle = () => {\n setExpanded((prev) => !prev);\n };\n\n const toolState =\n (job.state === \"working\" || job.state === \"input-required\") &&\n toolCallMessages?.length\n ? \"completed\"\n : job.state;\n\n return (\n <div\n className={classNames(styles[\"tool-call\"], {\n [styles.expanded]: expanded,\n })}\n >\n <div className={styles[\"tool-call-heading\"]} onClick={toggle}>\n {/* <WrappedIcon lib=\"antd\" theme=\"outlined\" icon=\"code\" /> */}\n {job.isError || toolState === \"failed\" ? (\n <WrappedIcon\n className={`${styles[\"tool-icon\"]} ${styles.failed}`}\n lib=\"fa\"\n prefix=\"fas\"\n icon=\"xmark\"\n />\n ) : toolState === \"completed\" ? (\n <WrappedIcon\n className={styles[\"tool-icon\"]}\n lib=\"fa\"\n prefix=\"fas\"\n icon=\"check\"\n />\n ) : toolState === \"working\" ? (\n <WrappedIcon\n className={styles[\"tool-icon\"]}\n lib=\"antd\"\n theme=\"outlined\"\n icon=\"loading-3-quarters\"\n spinning\n />\n ) : toolState === \"input-required\" ? (\n <WrappedIcon\n className={styles[\"tool-icon\"]}\n lib=\"fa\"\n prefix=\"far\"\n icon=\"circle-pause\"\n />\n ) : toolState === \"canceled\" ? (\n <WrappedIcon\n className={styles[\"tool-icon\"]}\n lib=\"fa\"\n prefix=\"far\"\n icon=\"circle-stop\"\n />\n ) : (\n <WrappedIcon\n className={styles[\"tool-icon\"]}\n lib=\"fa\"\n prefix=\"far\"\n icon=\"clock\"\n />\n )}\n <span className={styles[\"tool-call-name\"]}>{toolCall.name}</span>\n <WrappedIcon\n className={styles.expand}\n lib=\"fa\"\n prefix=\"fas\"\n icon={expanded ? \"chevron-up\" : \"chevron-down\"}\n />\n </div>\n {expanded && (\n <dl className={styles[\"tool-call-body\"]}>\n <dt>{t(K.ARGUMENTS)}:</dt>\n <dd>\n <PreComponent content={toolCall.originalArguments} maybeJson />\n </dd>\n {!!toolCallMessages?.length && (\n <>\n <dt>{t(K.RESPONSE)}:</dt>\n <dd>\n {toolCallMessages?.map((message, index) => (\n <div key={index}>\n {message.parts?.map((part, partIndex) => (\n <PreComponent\n key={partIndex}\n content={\n part.type === \"text\"\n ? part.text\n : part.type === \"file\"\n ? `File: ${part.file.name}`\n : `Data: ${JSON.stringify(part.data, null, 2)}`\n }\n maybeJson={part.type === \"text\"}\n />\n ))}\n </div>\n ))}\n </dd>\n </>\n )}\n </dl>\n )}\n </div>\n );\n}\n\nfunction HumanInputComponent({\n jobId,\n humanInput,\n}: {\n jobId: string;\n humanInput?: (jobId: string, input: string) => void;\n}): JSX.Element {\n const containerRef = useRef<HTMLDivElement>(null);\n\n return (\n <div ref={containerRef}>\n <TextareaAutoResize\n className={styles[\"human-input\"]}\n containerRef={containerRef}\n autoResize\n minRows={2}\n borderSize={0}\n paddingSize={20}\n placeholder={t(K.TYPE_YOUR_MESSAGE_HERE)}\n submitWhen=\"enter-without-shift\"\n onSubmit={(e) => {\n const input = e.currentTarget.value;\n if (input) {\n humanInput?.(jobId, input);\n }\n }}\n />\n </div>\n );\n}\n\nfunction HumanConfirmComponent({\n jobId,\n humanInput,\n confirmText,\n cancelText,\n}: {\n jobId: string;\n confirmText?: string;\n cancelText?: string;\n humanInput?: (jobId: string, input: string) => void;\n}): JSX.Element {\n return (\n <div style={{ marginTop: \"1em\" }}>\n <WrappedButton\n type=\"primary\"\n onClick={() => {\n humanInput?.(jobId, confirmText || t(K.YES));\n }}\n >\n {confirmText || t(K.YES)}\n </WrappedButton>\n <WrappedButton\n onClick={() => {\n humanInput?.(jobId, cancelText || t(K.NO));\n }}\n style={{ marginLeft: \"0.5em\" }}\n >\n {cancelText || t(K.NO)}\n </WrappedButton>\n </div>\n );\n}\n\nfunction HumanChooseComponent({\n jobId,\n options,\n humanInput,\n}: {\n jobId: string;\n options?: string[];\n humanInput?: (jobId: string, input: string) => void;\n}): JSX.Element {\n return (\n <div\n style={{\n marginTop: \"1em\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"0.5em\",\n }}\n >\n {options?.map((option, index) => (\n <WrappedButton\n key={index}\n onClick={() => {\n humanInput?.(jobId, option);\n }}\n >\n {option}\n </WrappedButton>\n ))}\n </div>\n );\n}\n\nfunction HumanSelectFromCmdb({\n jobId,\n objectId,\n attrId,\n humanInput,\n}: {\n jobId: string;\n objectId?: string;\n attrId?: string;\n humanInput?: (jobId: string, input: string) => void;\n}): JSX.Element {\n const [objectList, setObjectList] = useState<any[] | null>(null);\n\n useEffect(() => {\n if (!objectId) {\n return;\n }\n let ignore = false;\n (async () => {\n try {\n const objects = (\n await CmdbObjectApi_getObjectRef({ ref_object: objectId })\n ).data;\n if (!ignore) {\n setObjectList(objects);\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(\"Fetch object list failed:\", e);\n handleHttpError(e);\n }\n })();\n return () => {\n ignore = true;\n };\n }, [objectId]);\n\n if (!objectId) {\n return (\n <div style={{ marginTop: \"1em\" }}>\n Can not call ask_user_select_from_cmdb without objectId\n </div>\n );\n }\n // if (!objectId || !attrId) {\n // return <div style={{ marginTop: \"1em\" }}>Can not call ask_user_select_from_cmdb without {!objectId ? \"objectId\" : \"attrId\"}</div>;\n // }\n\n const fieldId =\n !attrId || (attrId === \"instanceId\" && objectId === \"HOST\") ? \"ip\" : attrId;\n\n return (\n <div style={{ marginTop: \"1em\" }}>\n <Suspense>\n <AsyncWrappedCMDB\n objectList={objectList}\n objectId={objectId}\n fieldId={fieldId}\n onChangeV2={(e) => {\n if (!e.detail.length) {\n return;\n }\n humanInput?.(\n jobId,\n e.detail.map((i) => i[fieldId /* ?? \"instanceId\" */]).join(\"\\n\")\n );\n }}\n />\n </Suspense>\n </div>\n );\n}\n\nfunction PreComponent({\n content,\n maybeJson,\n}: {\n content?: string;\n maybeJson?: boolean;\n}): JSX.Element {\n const [refinedContent, fallback] = useMemo(() => {\n if (maybeJson) {\n try {\n const json = JSON.parse(content ?? \"\");\n return [`${\"```json\\n\"}${JSON.stringify(json, null, 2)}${\"\\n```\"}`];\n } catch {\n // Fallback to original content\n }\n }\n return [content, true];\n }, [content, maybeJson]);\n\n return fallback ? (\n <pre className=\"language-plaintext\">{refinedContent}</pre>\n ) : (\n <MarkdownComponent content={refinedContent} />\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 { Button, ButtonProps } from \"@next-bricks/basic/button\";\nimport type { Link, LinkProps } from \"@next-bricks/basic/link\";\n\nexport const WrappedIcon = wrapBrick<GeneralIcon, GeneralIconProps>(\"eo-icon\");\n\nexport const WrappedButton = wrapBrick<Button, ButtonProps>(\"eo-button\");\n\nexport const WrappedLink = wrapBrick<Link, LinkProps>(\"eo-link\");\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\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../images/requirement@2x.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-requirement--aVjY3LFY{width:453px;max-width:90vw;background-color:rgba(255,255,255,0.4);background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});background-position:center bottom;background-size:453px 128px;background-repeat:no-repeat;box-shadow:0px 4px 10px 0px rgba(54,64,80,0.18);border-radius:12px;-webkit-backdrop-filter:blur(28px);backdrop-filter:blur(28px);border:1px solid rgba(255,255,255,0.4);padding:8px;white-space:pre-wrap;position:relative}.heading--F8b1aIJT{display:flex;justify-content:space-between;align-items:center;margin-bottom:11px;font-size:12px}.time--IRwoiblW{color:#8c8c8c}.body--JYv_r9n_{background:#f1f6ff;box-shadow:0px 1px 0px 0px #ffffff;border-radius:9px;padding:15px 10px}.loading-line--xDrsXoxu{position:absolute;bottom:-62px;left:50%;transform:translate(-50%,0)}.loading-line--xDrsXoxu path{fill:none;stroke-width:2px;stroke:rgba(255,255,255,0.6);stroke-dasharray:5,5}.loading--yZvyv4wE{position:absolute;bottom:-74px;left:50%;transform:translate(-50%,0);width:24px;height:24px;display:flex;align-items:center;justify-content:center;background:rgba(69,94,255,0.5);border-radius:24px;animation:loading--yZvyv4wE 1s infinite linear}.inner--voOHXPcc{width:12px;height:12px;background:rgb(69,94,255);border-radius:12px}@keyframes loading--yZvyv4wE{0%{transform:translate(-50%,0) scale(1);opacity:1}100%{transform:translate(-50%,0) scale(1.5);opacity:0}}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-requirement\": `node-requirement--aVjY3LFY`,\n\t\"heading\": `heading--F8b1aIJT`,\n\t\"time\": `time--IRwoiblW`,\n\t\"body\": `body--JYv_r9n_`,\n\t\"loading-line\": `loading-line--xDrsXoxu`,\n\t\"loading\": `loading--yZvyv4wE`,\n\t\"inner\": `inner--voOHXPcc`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import { useEffect, useRef, useState, type RefObject } from \"react\";\nimport { ZoomTransform, type ZoomBehavior } from \"d3-zoom\";\nimport { select } from \"d3-selection\";\nimport type { GraphNode } from \"./interfaces\";\nimport { CANVAS_PADDING_BOTTOM } from \"./constants\";\n\nexport interface UseAutoCenterOptions {\n nodes: GraphNode[];\n sizeReady: boolean;\n zoomer: ZoomBehavior<HTMLDivElement, unknown>;\n rootRef: RefObject<HTMLDivElement>;\n}\n\nexport function useAutoCenter({\n nodes,\n sizeReady,\n zoomer,\n rootRef,\n}: UseAutoCenterOptions) {\n const [centered, setCentered] = useState(false);\n const reCenterRef = useRef(false);\n\n // Transform to horizontal center once.\n useEffect(() => {\n const root = rootRef.current;\n if (sizeReady && root && !centered && nodes.length > 0) {\n let left = Infinity;\n let right = -Infinity;\n let top = Infinity;\n let bottom = -Infinity;\n\n for (const node of nodes) {\n const view = node.view!;\n const r = view.x + view.width;\n const b = view.y + view.height;\n if (view.x < left) {\n left = view.x;\n }\n if (r > right) {\n right = r;\n }\n if (view.y < top) {\n top = view.y;\n }\n if (b > bottom) {\n bottom = b;\n }\n }\n\n const x = (root.clientWidth - (right + left)) / 2;\n let y = 30;\n if (reCenterRef.current) {\n const height = bottom - top + CANVAS_PADDING_BOTTOM;\n const diffY = height - root.clientHeight;\n if (diffY > 0) {\n y = -diffY - top;\n } else {\n y = (root.clientHeight - (bottom + top)) / 2;\n }\n }\n\n zoomer.transform(select(root), new ZoomTransform(1, x, y));\n setCentered(true);\n }\n\n reCenterRef.current = false;\n }, [centered, nodes, rootRef, sizeReady, zoomer]);\n\n return { centered, setCentered, reCenterRef };\n}\n","import { JobState } from \"./interfaces.js\";\n\nexport const DEFAULT_SCALE_RANGE_MIN = 0.5;\nexport const DEFAULT_SCALE_RANGE_MAX = 2;\nexport const START_NODE_ID = \"<START>\";\nexport const END_NODE_ID = \"<END>\";\nexport const CANVAS_PADDING_BOTTOM = 96;\nexport const RANK_SEP = 40;\nexport const NODE_SEP = 42;\nexport const EDGE_SEP = 10;\n\nexport const DONE_STATES = [\"completed\", \"failed\", \"canceled\"] as JobState[];\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./shared.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./shared.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeInstruction.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeInstruction.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React from \"react\";\nimport classNames from \"classnames\";\nimport styles from \"./NodeInstruction.module.css\";\nimport sharedStyles from \"../shared.module.css\";\n\nexport interface NodeInstructionProps {\n content?: string;\n loading?: boolean;\n}\n\nexport function NodeInstruction({\n content,\n loading,\n}: NodeInstructionProps): JSX.Element {\n return (\n <div className={styles[\"node-instruction\"]}>\n <div\n className={classNames(styles.text, {\n [sharedStyles[\"shine-text\"]]: loading,\n })}\n title={content}\n >\n {content}\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\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"./images/background.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `ai-portal\\\\.cruise-canvas{display:block;position:relative;width:100%;height:100%;overflow:hidden;background-color:rgb(205,206,207);background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});background-size:cover;background-repeat:no-repeat;background-position:center;color:#262626;--cruise-canvas-node-border:1px solid gray;--cruise-canvas-node-width-medium:380px;--cruise-canvas-node-width-large:764px;--cruise-canvas-primary-color:#2540ff}.root--z6jdb_BU{width:100%;height:100%;position:relative}.widgets--r6lUPOu2{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;-webkit-user-select:none;user-select:none}.root--z6jdb_BU.loading--m5r507Hp .canvas--u6C26uH_,\n.root--z6jdb_BU.loading--m5r507Hp + .widgets--r6lUPOu2{visibility:hidden}.loading-icon--UkRBMlBy{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:48px;color:#fff}.widgets--r6lUPOu2 > *{pointer-events:auto;-webkit-user-select:text;user-select:text}.canvas--u6C26uH_,\n.edges--uNPQGWZg{width:100%;height:100%;position:absolute;transform-origin:0% 0%;-webkit-user-select:none;user-select:none}.node--IBGywwp4{position:absolute;-webkit-user-select:text;user-select:text;cursor:auto}.node--IBGywwp4:not(.ready--pmh440go),\n.canvas--u6C26uH_:not(.ready--pmh440go) > .edges--uNPQGWZg{visibility:hidden}svg.edges--uNPQGWZg{pointer-events:none;overflow:visible}.edge--muRUWYG1{fill:none;stroke-width:2px;stroke:rgba(255,255,255,0.6);stroke-dasharray:5,5}.size-medium--s_5BfbCV,\n.size-large--GFdstz_s{border:var(--cruise-canvas-node-border);border-radius:6px;padding:6px}.size-medium--s_5BfbCV{width:var(--cruise-canvas-node-width-medium)}.size-large--GFdstz_s{width:var(--cruise-canvas-node-width-large)}.node-default--rfA_zOid{border:var(--cruise-canvas-node-border)}.node-default--rfA_zOid > :first-child{margin-top:0}.node-default--rfA_zOid > :last-child{margin-bottom:0}.go-back--myNmSpSv{position:absolute;top:20px;left:20px}.go-back--myNmSpSv::part(link){width:32px;height:32px;display:flex;justify-content:center;align-items:center;background:rgba(255,255,255,0.7);box-shadow:0px 3px 14px 0px rgba(0,0,0,0.1),0px 1px 4px 0px rgba(0,0,0,0.06);border-radius:8px;border:1px solid rgba(255,255,255,0.3);color:inherit;box-sizing:border-box}.go-back--myNmSpSv::part(link):hover{background:rgba(255,255,255,0.5)}.go-back--myNmSpSv::part(link):active{background:rgba(255,255,255,0.3)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"root\": `root--z6jdb_BU`,\n\t\"widgets\": `widgets--r6lUPOu2`,\n\t\"loading\": `loading--m5r507Hp`,\n\t\"canvas\": `canvas--u6C26uH_`,\n\t\"loading-icon\": `loading-icon--UkRBMlBy`,\n\t\"edges\": `edges--uNPQGWZg`,\n\t\"node\": `node--IBGywwp4`,\n\t\"ready\": `ready--pmh440go`,\n\t\"edge\": `edge--muRUWYG1`,\n\t\"size-medium\": `size-medium--s_5BfbCV`,\n\t\"size-large\": `size-large--GFdstz_s`,\n\t\"node-default\": `node-default--rfA_zOid`,\n\t\"go-back\": `go-back--myNmSpSv`\n};\nexport default ___CSS_LOADER_EXPORT___;\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\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../images/end@2x.png\", import.meta.url);\nvar ___CSS_LOADER_URL_IMPORT_1___ = new URL(\"../images/completed@2x.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-end--yzRaOZnC{width:330px;background-color:#fff;background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});background-size:330px 271px;background-repeat:no-repeat;background-position:center;border:1px solid #e0e5f0;border-radius:12px;display:flex;flex-direction:column;align-items:center;padding:41px 24px 28px}.icon--IVcHjGFO{width:64px;height:64px;background-image:url(${___CSS_LOADER_URL_REPLACEMENT_1___});background-size:59px 49px;background-repeat:no-repeat;background-position:center;margin-bottom:16px}.title--ESn4jaJ9{margin-bottom:8px;font-weight:500;font-size:16px;line-height:24px}.description--aYl8sq6S{margin-bottom:36px;font-size:13px;color:#8c8c8c;line-height:24px}.button--mkIwsPzt{width:120px;height:30px;background:rgba(0,0,0,0.04);border:none;border-radius:15px;text-align:center;cursor:pointer}.button--mkIwsPzt:hover{background:rgba(0,0,0,0.08)}.button--mkIwsPzt:active{background:rgba(0,0,0,0.15)}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-end\": `node-end--yzRaOZnC`,\n\t\"icon\": `icon--IVcHjGFO`,\n\t\"title\": `title--ESn4jaJ9`,\n\t\"description\": `description--aYl8sq6S`,\n\t\"button\": `button--mkIwsPzt`\n};\nexport default ___CSS_LOADER_EXPORT___;\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, `.node-job--soTYrcA7{width:330px;max-width:90vw;background:linear-gradient(180deg,#f5f8ff 0%,#edf0f9 100%);box-shadow:0px 4px 10px 0px rgba(177,149,207,0.4),0px 2px 4px 0px rgba(0,0,0,0.06);border-radius:12px;border:1px solid #fff;padding:8px}.ask-user--lf925zGf{background:rgba(255,255,255,0.4);box-shadow:0px 4px 10px 0px rgba(54,64,80,0.18);border-color:rgba(255,255,255,0.5);-webkit-backdrop-filter:blur(28px);backdrop-filter:blur(28px)}.error--IwtdD0T6{box-shadow:inset 0px 0px 8px 2px rgba(242,76,37,0.6);border-color:rgba(242,76,37,0.6)}.heading--GZqrhPqL{display:flex;align-items:center;border-bottom:1px solid #e2e2ec;padding:0 5px 5px;font-size:12px;color:#8c8c8c}.icon--Rb_vveHN{margin-right:6px}.tool--RR3S1Z1V{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;--shine-text-color:#8c8c8c;--shine-text-highlight-color:#dcdcdc}.time--eHXSEjt6{margin-left:6px}.body--V34MsV9R{padding:16px 4px 8px;max-height:392px;overflow-y:auto}.tool-call--R4168MLY,\n.message--iVQBlD6k{overflow-wrap:break-word}.tool-call--R4168MLY + .message--iVQBlD6k,\n.message--iVQBlD6k + .message--iVQBlD6k{margin-top:1em}.message--iVQBlD6k p{margin:1em 0}.message--iVQBlD6k > :first-child{margin-top:0}.message--iVQBlD6k > :last-child{margin-bottom:0}.ask-user--lf925zGf .heading--GZqrhPqL{border-bottom:none}.ask-user--lf925zGf .body--V34MsV9R{padding-top:8px}.role-assistant--Y8vd9Oms,\n.role-user--nAW4Hzsu{background:rgba(255,255,255,0.8);border-radius:9px;border:1px solid #ccd1de;padding:6px 16px}.role-user--nAW4Hzsu{white-space:pre-wrap}.human-input--wFc6ovnT{margin-top:1em;display:block;width:100%;padding:10px 16px;color:inherit;background:rgba(255,255,255,0.8);box-shadow:0px 1px 0px 0px #ffffff,inset 0px 2px 4px 0px #b3bcf9;border:none;border-radius:9px;font-size:14px;line-height:22px;height:64px}.human-input--wFc6ovnT:focus-visible{outline:none}.human-input--wFc6ovnT::placeholder{color:#bfbfbf}.tool-call--R4168MLY{padding:3px 10px;border-radius:9px;background-color:rgba(0,0,0,0.06);border:1px solid rgba(0,0,0,0.04)}.tool-call-heading--bMDn60o8{display:flex;align-items:center;border-radius:inherit;cursor:pointer;color:rgba(0,0,0,0.45)}.expanded--eCmijryB .tool-call-heading--bMDn60o8{color:inherit}.tool-call-name--rH6tMvX7{min-width:0;flex:1;margin-left:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tool-call--R4168MLY dt{font-weight:400}.expand--XB3NqkVv{margin-left:6px}.tool-call--R4168MLY:not(:hover) .expand--XB3NqkVv{display:none}.tool-call-body--j2C9eUdY{margin-top:1em}.failed--MS4GZtpc{color:var(--color-error)}.node-job--soTYrcA7 code[class*=\"language-\"],.node-job--soTYrcA7 pre[class*=\"language-\"]{background:hsl(230,1%,98%);color:hsl(230,8%,24%);font-family:\"Fira Code\",\"Fira Mono\",Menlo,Consolas,\"DejaVu Sans Mono\",monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;line-height:1.5;-moz-tab-size:2;tab-size:2;-webkit-hyphens:none;hyphens:none;font-size:13px}.node-job--soTYrcA7 code[class*=\"language-\"]::selection,.node-job--soTYrcA7 code[class*=\"language-\"] *::selection,.node-job--soTYrcA7 pre[class*=\"language-\"] *::selection{background:hsl(230,1%,90%);color:inherit}.node-job--soTYrcA7 pre[class*=\"language-\"]{padding:1em;margin:0.5em 0;overflow:auto;border-radius:9px}.node-job--soTYrcA7 :not(pre) > code[class*=\"language-\"]{padding:0.2em 0.3em;border-radius:9px;white-space:normal}.node-job--soTYrcA7 .token.comment,.node-job--soTYrcA7 .token.prolog,.node-job--soTYrcA7 .token.cdata{color:hsl(230,4%,64%)}.node-job--soTYrcA7 .token.doctype,.node-job--soTYrcA7 .token.punctuation,.node-job--soTYrcA7 .token.entity{color:hsl(230,8%,24%)}.node-job--soTYrcA7 .token.attr-name,.node-job--soTYrcA7 .token.class-name,.node-job--soTYrcA7 .token.boolean,.node-job--soTYrcA7 .token.constant,.node-job--soTYrcA7 .token.number,.node-job--soTYrcA7 .token.atrule{color:hsl(35,99%,36%)}.node-job--soTYrcA7 .token.keyword{color:hsl(301,63%,40%)}.node-job--soTYrcA7 .token.property,.node-job--soTYrcA7 .token.tag,.node-job--soTYrcA7 .token.symbol,.node-job--soTYrcA7 .token.deleted,.node-job--soTYrcA7 .token.important{color:hsl(5,74%,59%)}.node-job--soTYrcA7 .token.selector,.node-job--soTYrcA7 .token.string,.node-job--soTYrcA7 .token.char,.node-job--soTYrcA7 .token.builtin,.node-job--soTYrcA7 .token.inserted,.node-job--soTYrcA7 .token.regex,.node-job--soTYrcA7 .token.attr-value,.node-job--soTYrcA7 .token.attr-value > .token.punctuation{color:hsl(119,34%,47%)}.node-job--soTYrcA7 .token.variable,.node-job--soTYrcA7 .token.operator,.node-job--soTYrcA7 .token.function{color:hsl(221,87%,60%)}.node-job--soTYrcA7 .token.url{color:hsl(198,99%,37%)}.node-job--soTYrcA7 .token.attr-value > .token.punctuation.attr-equals,.node-job--soTYrcA7 .token.special-attr > .token.attr-value > .token.value.css{color:hsl(230,8%,24%)}.node-job--soTYrcA7 .language-css .token.selector{color:hsl(5,74%,59%)}.node-job--soTYrcA7 .language-css .token.property{color:hsl(230,8%,24%)}.node-job--soTYrcA7 .language-css .token.function,.node-job--soTYrcA7 .language-css .token.url > .token.function{color:hsl(198,99%,37%)}.node-job--soTYrcA7 .language-css .token.url > .token.string.url{color:hsl(119,34%,47%)}.node-job--soTYrcA7 .language-css .token.important,.node-job--soTYrcA7 .language-css .token.atrule .token.rule{color:hsl(301,63%,40%)}.node-job--soTYrcA7 .language-javascript .token.operator{color:hsl(301,63%,40%)}.node-job--soTYrcA7 .language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation{color:hsl(344,84%,43%)}.node-job--soTYrcA7 .language-json .token.operator{color:hsl(230,8%,24%)}.node-job--soTYrcA7 .language-json .token.null.keyword{color:hsl(35,99%,36%)}.node-job--soTYrcA7 .language-markdown .token.url,.node-job--soTYrcA7 .language-markdown .token.url > .token.operator,.node-job--soTYrcA7 .language-markdown .token.url-reference.url > .token.string{color:hsl(230,8%,24%)}.node-job--soTYrcA7 .language-markdown .token.url > .token.content{color:hsl(221,87%,60%)}.node-job--soTYrcA7 .language-markdown .token.url > .token.url,.node-job--soTYrcA7 .language-markdown .token.url-reference.url{color:hsl(198,99%,37%)}.node-job--soTYrcA7 .language-markdown .token.blockquote.punctuation,.node-job--soTYrcA7 .language-markdown .token.hr.punctuation{color:hsl(230,4%,64%);font-style:italic}.node-job--soTYrcA7 .language-markdown .token.code-snippet{color:hsl(119,34%,47%)}.node-job--soTYrcA7 .language-markdown .token.bold .token.content{color:hsl(35,99%,36%)}.node-job--soTYrcA7 .language-markdown .token.italic .token.content{color:hsl(301,63%,40%)}.node-job--soTYrcA7 .language-markdown .token.strike .token.content,.node-job--soTYrcA7 .language-markdown .token.strike .token.punctuation,.node-job--soTYrcA7 .language-markdown .token.list.punctuation,.node-job--soTYrcA7 .language-markdown .token.title.important > .token.punctuation{color:hsl(5,74%,59%)}.node-job--soTYrcA7 .token.bold{font-weight:bold}.node-job--soTYrcA7 .token.comment,.node-job--soTYrcA7 .token.italic{font-style:italic}.node-job--soTYrcA7 .token.entity{cursor:help}.node-job--soTYrcA7 .token.namespace{opacity:0.8}.node-job--soTYrcA7 *::-webkit-scrollbar{width:5px;height:5px;background:transparent}.node-job--soTYrcA7 *::-webkit-scrollbar-thumb{background-color:#d8d8d8;border-radius:3px}.node-job--soTYrcA7 *::-webkit-scrollbar-track{background:transparent}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-job\": `node-job--soTYrcA7`,\n\t\"ask-user\": `ask-user--lf925zGf`,\n\t\"error\": `error--IwtdD0T6`,\n\t\"heading\": `heading--GZqrhPqL`,\n\t\"icon\": `icon--Rb_vveHN`,\n\t\"tool\": `tool--RR3S1Z1V`,\n\t\"time\": `time--eHXSEjt6`,\n\t\"body\": `body--V34MsV9R`,\n\t\"tool-call\": `tool-call--R4168MLY`,\n\t\"message\": `message--iVQBlD6k`,\n\t\"role-assistant\": `role-assistant--Y8vd9Oms`,\n\t\"role-user\": `role-user--nAW4Hzsu`,\n\t\"human-input\": `human-input--wFc6ovnT`,\n\t\"tool-call-heading\": `tool-call-heading--bMDn60o8`,\n\t\"expanded\": `expanded--eCmijryB`,\n\t\"tool-call-name\": `tool-call-name--rH6tMvX7`,\n\t\"expand\": `expand--XB3NqkVv`,\n\t\"tool-call-body\": `tool-call-body--j2C9eUdY`,\n\t\"failed\": `failed--MS4GZtpc`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","import dagre from \"@dagrejs/dagre\";\nimport { useMemo, useRef } from \"react\";\nimport type {\n NodePosition,\n NodeView,\n GraphEdge,\n GraphNode,\n SizeTuple,\n TaskState,\n} from \"./interfaces\";\nimport {\n EDGE_SEP,\n END_NODE_ID,\n NODE_SEP,\n RANK_SEP,\n START_NODE_ID,\n} from \"./constants\";\n\nexport interface UseLayoutOptions {\n rawNodes: GraphNode[] | undefined;\n rawEdges: GraphEdge[] | undefined;\n sizeMap: Map<string, SizeTuple> | null;\n state?: TaskState;\n}\n\nexport function useLayout({\n rawNodes: _rawNodes,\n rawEdges: _rawEdges,\n sizeMap,\n state,\n}: UseLayoutOptions) {\n const memoizedPositionsRef = useRef<Map<string, NodePosition> | null>(null);\n const completed = state === \"completed\";\n\n const { initialNodes, initialEdges } = useMemo(() => {\n const initialNodes: GraphNode[] = [\n {\n type: \"start\",\n id: START_NODE_ID,\n },\n ];\n const initialEdges: GraphEdge[] = [];\n const finishedNodeIds: string[] = [];\n const rawNodes = _rawNodes ?? [];\n const rawEdges = _rawEdges ?? [];\n\n const hasSource = new Set<string>(rawEdges.map((edge) => edge.target));\n const hasTarget = completed\n ? new Set<string>(rawEdges.map((edge) => edge.source))\n : null;\n\n for (const node of rawNodes) {\n if (!hasSource.has(node.id)) {\n initialEdges.push({\n source: START_NODE_ID,\n target: node.id,\n });\n }\n\n if (completed && !hasTarget!.has(node.id)) {\n finishedNodeIds.push(node.id);\n }\n }\n\n initialNodes.push(...rawNodes);\n initialEdges.push(...rawEdges);\n\n if (finishedNodeIds.length > 0) {\n initialNodes.push({\n id: END_NODE_ID,\n type: \"end\",\n });\n initialEdges.push(\n ...finishedNodeIds.map((id) => ({\n source: id,\n target: END_NODE_ID,\n }))\n );\n }\n\n const memoizedPositions = memoizedPositionsRef.current;\n if (memoizedPositions) {\n for (const node of initialNodes) {\n const view = memoizedPositions.get(node.id);\n if (view) {\n node.view = view as NodeView;\n }\n }\n }\n\n return { initialNodes, initialEdges };\n }, [completed, _rawEdges, _rawNodes]);\n\n const startNodePositionRef = useRef<NodePosition | null>(null);\n\n return useMemo(() => {\n for (const node of initialNodes) {\n if (!sizeMap?.has(node.id)) {\n return { sizeReady: false, nodes: initialNodes, edges: [] };\n }\n }\n\n const graph = new dagre.graphlib.Graph();\n graph.setGraph({\n rankdir: \"TB\",\n nodesep: NODE_SEP,\n edgesep: EDGE_SEP,\n ranksep: RANK_SEP,\n });\n // Default to assigning a new object as a label for each new edge.\n graph.setDefaultEdgeLabel(function () {\n return {};\n });\n for (const edge of initialEdges) {\n graph.setEdge(edge.source, edge.target);\n }\n for (const node of initialNodes) {\n const [width, height] = sizeMap!.get(node.id)!;\n graph.setNode(node.id, {\n id: node.id,\n width,\n height,\n });\n }\n dagre.layout(graph);\n\n // Make the start node position unchanged\n let offsets: NodePosition | null = null;\n\n const nodes = initialNodes.map<GraphNode>((node) => {\n const nodeView = graph.node(node.id);\n const x = nodeView.x - nodeView.width / 2;\n const y = nodeView.y - nodeView.height / 2;\n\n if (node.type === \"start\") {\n if (startNodePositionRef.current) {\n offsets = {\n x: startNodePositionRef.current.x - x,\n y: startNodePositionRef.current.y - y,\n };\n } else {\n startNodePositionRef.current = { x, y };\n }\n }\n\n return {\n ...node,\n view: {\n x,\n y,\n width: nodeView.width,\n height: nodeView.height,\n },\n };\n });\n\n if (offsets) {\n for (const node of nodes) {\n Object.assign(node.view!, getPositionWithOffsets(node.view!, offsets));\n }\n }\n\n const memoizedPositions = (memoizedPositionsRef.current ??= new Map());\n for (const node of nodes) {\n const { x, y } = node.view!;\n memoizedPositions.set(node.id, { x, y });\n }\n\n const edges = initialEdges.map((edge) => {\n const source = graph.node(edge.source);\n const sourcePosition = getPositionWithOffsets(source, offsets);\n const target = graph.node(edge.target);\n const targetPosition = getPositionWithOffsets(target, offsets);\n // const turnY =\n // (sourcePosition.y +\n // source.height / 2 +\n // targetPosition.y -\n // target.height / 2) /\n // 2;\n const turnY = targetPosition.y - (target.height + RANK_SEP) / 2;\n const points: NodePosition[] = [\n { x: sourcePosition.x, y: sourcePosition.y + source.height / 2 },\n { x: sourcePosition.x, y: turnY },\n { x: targetPosition.x, y: turnY },\n { x: targetPosition.x, y: targetPosition.y - target.height / 2 },\n ];\n\n return {\n ...edge,\n points,\n };\n });\n\n return {\n sizeReady: true,\n nodes,\n edges,\n };\n }, [initialEdges, initialNodes, sizeMap]);\n}\n\nfunction getPositionWithOffsets<T extends NodePosition>(\n position: T,\n offsets: NodePosition | null\n): NodePosition {\n if (!offsets) {\n return {\n x: position.x,\n y: position.y,\n };\n }\n return {\n x: position.x + offsets.x,\n y: position.y + offsets.y,\n };\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeStart.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeStart.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React from \"react\";\nimport styles from \"./NodeStart.module.css\";\n\nexport function NodeStart(): JSX.Element {\n return (\n <div className={styles[\"node-start\"]}>\n <div className={styles.icon} />\n </div>\n );\n}\n","// istanbul ignore file: hard to test with d3-zoom\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { select } from \"d3-selection\";\nimport { zoom, type ZoomBehavior } from \"d3-zoom\";\nimport type {\n RangeTuple,\n TransformLiteral /* , ActiveTarget */,\n} from \"./interfaces\";\nimport { DEFAULT_SCALE_RANGE_MIN, DEFAULT_SCALE_RANGE_MAX } from \"./constants\";\n// import type { ActiveTarget } from \"./interfaces\";\nimport jobStyles from \"./NodeJob/NodeJob.module.css\";\n\nexport interface UseZoomOptions {\n rootRef: React.RefObject<HTMLDivElement>;\n zoomable?: boolean;\n scrollable?: boolean;\n pannable?: boolean;\n pannableWithCtrl?: boolean;\n scaleRange?: RangeTuple;\n onSwitchActiveTarget?(target: unknown | null): void;\n}\n\nexport interface UseZoomResult {\n grabbing: boolean;\n transform: TransformLiteral;\n transformRef: React.MutableRefObject<TransformLiteral>;\n scaleRange: RangeTuple;\n zoomer: ZoomBehavior<HTMLDivElement, unknown>;\n}\n\n// istanbul ignore next\nconst isMac = /mac/i.test(\n (\n navigator as Navigator & {\n userAgentData?: {\n platform: string;\n };\n }\n ).userAgentData?.platform ??\n navigator.platform ??\n navigator.userAgent\n);\n\n// istanbul ignore next\nfunction wheelData(event: WheelEvent) {\n // On Windows with normal mouse, deltaY is too big when scroll with ctrlKey pressed,\n // which cause the zooming too fast.\n // While on mac OS, we need to keep default behavior of d3-zoom.\n return (\n -event.deltaY *\n (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) *\n (event.ctrlKey && isMac ? 10 : 1)\n );\n}\n\nexport function useZoom({\n rootRef,\n zoomable,\n scrollable,\n pannable,\n pannableWithCtrl,\n scaleRange: _scaleRange,\n onSwitchActiveTarget,\n}: UseZoomOptions): UseZoomResult {\n const [grabbing, setGrabbing] = useState(false);\n const [transform, setTransform] = useState<TransformLiteral>({\n k: 1,\n x: 0,\n y: 0,\n });\n const transformRef = useRef(transform);\n\n const scaleRange = useMemo(\n () =>\n _scaleRange ??\n ([DEFAULT_SCALE_RANGE_MIN, DEFAULT_SCALE_RANGE_MAX] as RangeTuple),\n [_scaleRange]\n );\n\n const zoomer = useMemo(\n () => zoom<HTMLDivElement, unknown>().wheelDelta(wheelData),\n []\n );\n\n // istanbul ignore next: d3-zoom currently hard to test\n useEffect(() => {\n let moved = false;\n zoomer\n .scaleExtent(zoomable ? scaleRange : [1, 1])\n .on(\"start\", () => {\n moved = false;\n setGrabbing(true);\n })\n .on(\"zoom\", (e: { transform: TransformLiteral }) => {\n moved = true;\n setTransform(e.transform);\n transformRef.current = e.transform;\n })\n .on(\"end\", () => {\n setGrabbing(false);\n if (!moved) {\n onSwitchActiveTarget?.(null);\n }\n })\n .filter(\n (event) =>\n (event.type === \"wheel\" ||\n (pannableWithCtrl ? pannable || event.ctrlKey : !event.ctrlKey)) &&\n !event.button\n );\n }, [\n onSwitchActiveTarget,\n scaleRange,\n zoomable,\n zoomer,\n pannableWithCtrl,\n pannable,\n ]);\n\n useEffect(() => {\n if (pannableWithCtrl) {\n const onContextMenu = (e: MouseEvent) => {\n if (e.ctrlKey) {\n e.preventDefault();\n }\n };\n document.addEventListener(\"contextmenu\", onContextMenu, true);\n return () => {\n document.removeEventListener(\"contextmenu\", onContextMenu, true);\n };\n }\n }, [pannableWithCtrl]);\n\n // istanbul ignore next: d3-zoom currently hard to test\n useEffect(() => {\n const root = rootRef.current;\n if (!root) {\n return;\n }\n\n const rootSelection = select(root);\n\n const unsetZoom = () => {\n rootSelection\n .on(\".zoom\", null)\n .on(\".zoom.custom\", null)\n .on(\"wheel\", null);\n };\n\n if (!(zoomable || scrollable || pannable)) {\n unsetZoom();\n return;\n }\n\n if (zoomable || scrollable) {\n // Do not override default d3 zoom handler.\n // Only handles *panning*\n rootSelection.on(\n \"wheel.zoom.custom\",\n (e: WheelEvent & { wheelDeltaX: number; wheelDeltaY: number }) => {\n // Mac OS trackpad pinch event is emitted as a wheel.zoom and d3.event.ctrlKey set to true\n if (!e.ctrlKey) {\n // Stop immediate propagation for default d3 zoom handler\n e.stopImmediatePropagation();\n if (scrollable) {\n const pre = (e.target as HTMLElement)!.closest(\n 'pre[class*=\"language-\"]'\n );\n if (pre) {\n if (checkScrollableX(pre, e.deltaX)) {\n return;\n }\n }\n\n const node = (e.target as HTMLElement)!.closest(\n `.${jobStyles.body}`\n );\n if (node) {\n if (checkScrollableY(node, e.deltaY)) {\n return;\n }\n }\n\n if (e.cancelable) {\n e.preventDefault();\n zoomer.translateBy(\n rootSelection,\n e.wheelDeltaX / 5,\n e.wheelDeltaY / 5\n );\n }\n }\n }\n // zoomer.scaleBy(rootSelection, Math.pow(2, defaultWheelDelta(e)))\n }\n );\n }\n\n rootSelection\n .call(zoomer)\n .on(\"wheel\", (e: WheelEvent) => {\n e.preventDefault();\n })\n .on(\"dblclick.zoom\", null);\n\n if (!pannable && !pannableWithCtrl) {\n rootSelection.on(\"mousedown.zoom\", null);\n }\n\n if (!pannable) {\n rootSelection\n .on(\"touchstart.zoom\", null)\n .on(\"touchmove.zoom\", null)\n .on(\"touchend.zoom\", null);\n }\n\n return unsetZoom;\n }, [pannableWithCtrl, pannable, rootRef, scrollable, zoomable, zoomer]);\n\n return { grabbing, transform, transformRef, zoomer, scaleRange };\n}\n\n// 检查元素是否还能滚动\nfunction checkScrollableY(element: Element, delta: number) {\n const isScrollingDown = delta > 0;\n // 还能向下滚动 或 还能向上滚动\n if (isScrollingDown) {\n const maxScroll = element.scrollHeight - element.clientHeight;\n return element.scrollTop <= maxScroll - 1;\n }\n return element.scrollTop >= 1;\n}\n\n// 检查元素是否还能滚动\nfunction checkScrollableX(element: Element, delta: number) {\n const isScrollingRight = delta > 0; // Updated variable name for clarity\n // 还能向右滚动 或 还能向左滚动\n if (isScrollingRight) {\n const maxScroll = element.scrollWidth - element.clientWidth; // Changed to scrollWidth and clientWidth\n return element.scrollLeft <= maxScroll - 1; // Changed to scrollLeft\n }\n return element.scrollLeft >= 1;\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\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(\"../images/start@2x.png\", import.meta.url);\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_NO_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.node-start--Mrh1iP5r{width:65px;height:65px;position:relative;overflow:visible}.icon--NxC4u6Wl{width:75px;height:75px;background-image:url(${___CSS_LOADER_URL_REPLACEMENT_0___});background-size:75px 75px;background-repeat:no-repeat;background-position:center;position:absolute;left:-5px;top:-1px}`, \"\"]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"node-start\": `node-start--Mrh1iP5r`,\n\t\"icon\": `icon--NxC4u6Wl`\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeEnd.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeEnd.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file: experimental\nimport React from \"react\";\nimport styles from \"./NodeEnd.module.css\";\nimport { K, t } from \"../i18n\";\n\nexport interface NodeEndProps {\n onShare?: () => void;\n}\n\nexport function NodeEnd({ onShare }: NodeEndProps): JSX.Element {\n return (\n <div className={styles[\"node-end\"]}>\n <div className={styles.icon} />\n <div className={styles.title}>{t(K.TASK_COMPLETED)}</div>\n <div className={styles.description}>{t(K.PLAN_COMPLETED)}</div>\n <button className={styles.button} onClick={onShare}>\n {t(K.SHARE)}\n </button>\n </div>\n );\n}\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeJob.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./NodeJob.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","// istanbul ignore file\nimport { useMemo } from \"react\";\nimport type { Job, GraphEdge, GraphNode, TaskBaseDetail } from \"./interfaces\";\n\nexport function useTaskGraph(\n task: TaskBaseDetail | null | undefined,\n jobs: Job[]\n) {\n return useMemo(() => {\n if (!task) {\n return null;\n }\n\n const nodes: GraphNode[] = [];\n const edges: GraphEdge[] = [];\n\n const requirementNodeId = \"requirement\";\n nodes.push({\n type: \"requirement\",\n id: requirementNodeId,\n content: task.requirement,\n state: jobs.length === 0 ? \"working\" : \"completed\",\n });\n\n const jobMap = new Map<string, Job>();\n const childrenMap = new Map<string, string[]>();\n const downstreamMap = new Map<string, string[]>();\n const upstreamMap = new Map<string, string[]>();\n const rootDownstream: string[] = [];\n const rootChildren: string[] = [];\n\n for (const job of jobs) {\n if (job.parent) {\n let children = childrenMap.get(job.parent);\n if (!children) {\n children = [];\n childrenMap.set(job.parent, children);\n }\n children.push(job.id);\n }\n }\n\n // Setup jobMap and downstreamMap\n for (const job of jobs) {\n jobMap.set(job.id, job);\n\n for (const up of job.upstream ?? []) {\n let downstream = downstreamMap.get(up);\n if (!downstream) {\n downstream = [];\n downstreamMap.set(up, downstream);\n }\n downstream.push(job.id);\n }\n\n if (!job.parent) {\n rootChildren.push(job.id);\n\n if (!job.upstream?.length) {\n rootDownstream.push(job.id);\n }\n }\n }\n\n const alignDownstreamMap = (children: string[]) => {\n for (const rootJobId of children) {\n const subChildren = childrenMap.get(rootJobId);\n const downstream = downstreamMap.get(rootJobId);\n\n if (subChildren) {\n const firstLevelChildren = subChildren.filter((child) => {\n const childJob = jobMap.get(child)!;\n return !childJob.upstream?.length;\n });\n\n const lastLevelChildren = downstream\n ? subChildren.filter((child) => {\n return !downstreamMap.has(child);\n })\n : [];\n\n downstreamMap.set(rootJobId, firstLevelChildren);\n\n for (const child of lastLevelChildren) {\n downstreamMap.set(child, [...downstream!]);\n }\n\n alignDownstreamMap(subChildren);\n }\n }\n };\n\n alignDownstreamMap(rootChildren);\n\n // Setup upstreamMap\n for (const [upstream, downstream] of downstreamMap) {\n for (const target of downstream) {\n let upstreams = upstreamMap.get(target);\n if (!upstreams) {\n upstreams = [];\n upstreamMap.set(target, upstreams);\n }\n upstreams.push(upstream);\n }\n }\n\n // Get BFS order of jobs\n const list: string[] = [];\n const visitedJobs = new Set<string>();\n const queue: string[] = [...rootDownstream];\n while (queue.length > 0) {\n const id = queue.shift()!;\n if (visitedJobs.has(id)) {\n continue;\n }\n visitedJobs.add(id);\n list.push(id);\n const downstream = downstreamMap.get(id);\n if (downstream) {\n queue.push(...downstream);\n }\n }\n\n const jobNodesMap = new Map<string, string[]>([\n [requirementNodeId, [requirementNodeId]],\n ]);\n\n for (const jobId of list) {\n const job = jobMap.get(jobId)!;\n const { messages } = job;\n const hasMessages =\n (Array.isArray(messages) && messages.length > 0) || job.toolCall;\n\n const nodeIds: string[] = [];\n\n if (job.instruction) {\n const instructionNodeId = `instruction:${jobId}`;\n nodes.push({\n type: \"instruction\",\n id: instructionNodeId,\n job,\n state: job.state,\n });\n\n nodeIds.push(instructionNodeId);\n }\n\n if (hasMessages || !job.instruction) {\n const jobNodeId = `job:${job.id}`;\n nodes.push({\n type: \"job\",\n id: jobNodeId,\n job,\n state: job.state,\n });\n nodeIds.push(jobNodeId);\n }\n\n jobNodesMap.set(jobId, nodeIds);\n }\n\n for (const jobId of list) {\n const nodeIds = jobNodesMap.get(jobId)!;\n\n const upstreams = upstreamMap.get(jobId);\n for (const upstream of upstreams ?? [requirementNodeId]) {\n const parentNodeIds = jobNodesMap.get(upstream)!;\n edges.push({\n source: parentNodeIds[parentNodeIds.length - 1],\n target: nodeIds[0],\n });\n }\n\n for (let i = 1; i < nodeIds.length; i++) {\n edges.push({\n source: nodeIds[i - 1],\n target: nodeIds[i],\n });\n }\n }\n\n return {\n nodes,\n edges,\n };\n }, [task, jobs]);\n}\n"],"names":["K","NS","locales","en","YES","NO","PLAN_COMPLETED","TASK_COMPLETED","SHARE","TYPE_YOUR_MESSAGE_HERE","ARGUMENTS","RESPONSE","cmdb_create_app_system","cmdb_create_service_set","cmdb_append_host_to_service_set","cmdb_create_agent_scan_job","cmdb_service_node_clustering","ask_human","zh","t","i18n","getFixedT","SIZING_STYLE","hiddenTextarea","modKey","test","navigator","platform","TextareaAutoResize","React","LegacyTextareaAutoResize","_ref","ref","autoResize","_autoResize","minRows","maxRows","borderSize","paddingSize","containerRef","value","propValue","style","submitWhen","onChange","onSubmit","onKeyDown","onCompositionStart","onCompositionEnd","props","setValue","useState","textareaRef","useRef","autoStyle","setAutoStyle","useImperativeHandle","focus","textarea","current","_textarea$value","valueLength","length","setSelectionRange","doAutoResize","useCallback","uiTextNode","options","document","createElement","setAttribute","body","appendChild","uiTextNodeStyle","window","getComputedStyle","sizingStyle","map","name","getPropertyValue","join","minHeight","maxHeight","overflowY","placeholder","height","scrollHeight","singleRowHeight","parseFloat","Math","max","min","resize","calculateAutoSizeStyle","flushSync","useEffect","compositionRef","handleCompositionStart","e","handleCompositionEnd","handleKeyDown","key","shiftKey","preventDefault","stopPropagation","container","previousInlineSize","observer","ResizeObserver","entries","entry","target","currentInlineSize","contentBoxSize","inlineSize","contentRect","width","undefined","isInitial","requestAnimationFrame","observe","disconnect","_extends","___CSS_LOADER_EXPORT___","push","module","id","locals","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","mergeMessages","messages","merged","previousRole","message","role","lastMessage","parts","mergeMessageParts","previousType","part","type","text","rootReducer","reducers","task","state","action","taskPatch","pick","payload","isMatchWith","isEqual","jobs","jobsPatch","Array","isArray","jobPatch","_jobs$findIndex","_jobs","previousJobIndex","findIndex","job","messagesPatch","toolCall","arguments","originalArguments","JSON","parse","console","error","argumentsParseFailed","argumentsParseError","previousJob","restMessagesPatch","_previousJob$messages","slice","Object","fromEntries","useTaskDetail","taskId","dispatch","useReducer","humanInputRef","ctrl","ignore","requesting","makeRequest","async","AbortController","request","createSSEStream","getBasePath","signal","stream","handleHttpError","jobId","input","http","post","_ctrl","abort","plan","setPlan","prev","jobMap","Map","childrenMap","_childrenMap$get","set","parent","get","isInputRequired","_childrenMap$get2","some","childId","childJob","step","_task$plan","instruction","PlanProgress","expanded","setExpanded","doneCount","useMemo","reduce","acc","className","icon","getClassNameAndIconProps","toggle","classNames","styles","progress","onClick","WrappedIcon","title","stat","expand","lib","theme","details","index","PlanStep","_ref2","completed","prefix","working","spinning","failed","canceled","WrappedEasyOpsAvatar","wrapBrick","NodeRequirement","content","startTime","loading","username","auth","getAuth","heading","user","nameOrInstanceId","showName","size","time","moment","format","viewBox","d","inner","ZoomBar","scale","onScaleChange","onReCenter","handleZoomIn","handleZoomOut","divider","rehypePrism","visitor","node","_index","tagName","lang","properties","classListItem","toLowerCase","getLanguage","result","concat","refractor","highlight","toString","children","tree","visit","production","Fragment","jsx","jsxs","MarkdownComponent","reactContent","setReactContent","unified","use","remarkParse","remarkToRehype","rehypeReact","process","then","vFile","catch","AsyncWrappedCMDB","default","asyncWrapBrick","onChangeV2","NodeJob","_job$toolCall","_arguments","_job$toolCall2","_arguments2","_arguments$command","_arguments3","_job$messages","humanInput","askUser","knownAskUser","includes","command","isError","tool","sharedStyles","question","HumanInputComponent","HumanConfirmComponent","confirmText","confirm_text","cancelText","cancel_text","HumanChooseComponent","HumanSelectFromCmdb","objectId","attrId","stringify","ToolCallComponent","_message$parts","partIndex","file","data","_job$messages2","toolCallMessages","filter","msg","toolState","PreComponent","maybeJson","_message$parts2","_ref3","currentTarget","_ref4","marginTop","WrappedButton","marginLeft","_ref5","display","flexDirection","gap","option","_ref6","objectList","setObjectList","objects","CmdbObjectApi_getObjectRef","ref_object","fieldId","Suspense","detail","i","_ref7","refinedContent","fallback","json","WrappedLink","___CSS_LOADER_URL_IMPORT_0___","URL","___CSS_LOADER_URL_REPLACEMENT_0___","useAutoCenter","nodes","sizeReady","zoomer","rootRef","centered","setCentered","reCenterRef","root","left","Infinity","right","top","bottom","view","r","x","b","y","clientWidth","diffY","CANVAS_PADDING_BOTTOM","clientHeight","transform","select","ZoomTransform","DEFAULT_SCALE_RANGE_MIN","DEFAULT_SCALE_RANGE_MAX","START_NODE_ID","END_NODE_ID","RANK_SEP","NODE_SEP","EDGE_SEP","DONE_STATES","NodeInstruction","___CSS_LOADER_URL_IMPORT_1___","___CSS_LOADER_URL_REPLACEMENT_1___","useLayout","rawNodes","_rawNodes","rawEdges","_rawEdges","sizeMap","memoizedPositionsRef","initialNodes","initialEdges","finishedNodeIds","hasSource","Set","edge","hasTarget","source","has","memoizedPositions","startNodePositionRef","_memoizedPositionsRef","edges","graph","dagre","Graph","setGraph","rankdir","nodesep","edgesep","ranksep","setDefaultEdgeLabel","setEdge","setNode","offsets","nodeView","assign","getPositionWithOffsets","sourcePosition","targetPosition","turnY","points","position","NodeStart","isMac","_userAgentData$platfo","_userAgentData","userAgentData","userAgent","wheelData","event","deltaY","deltaMode","ctrlKey","useZoom","zoomable","scrollable","pannable","pannableWithCtrl","scaleRange","_scaleRange","onSwitchActiveTarget","grabbing","setGrabbing","setTransform","k","transformRef","zoom","wheelDelta","moved","scaleExtent","on","button","onContextMenu","addEventListener","removeEventListener","rootSelection","unsetZoom","stopImmediatePropagation","pre","closest","element","delta","maxScroll","scrollWidth","scrollLeft","checkScrollableX","deltaX","jobStyles","scrollTop","checkScrollableY","cancelable","translateBy","wheelDeltaX","wheelDeltaY","call","NodeEnd","onShare","description","useTaskGraph","requirementNodeId","requirement","downstreamMap","upstreamMap","rootDownstream","rootChildren","up","_job$upstream","upstream","downstream","_job$upstream2","alignDownstreamMap","rootJobId","subChildren","firstLevelChildren","child","_childJob$upstream","lastLevelChildren","upstreams","list","visitedJobs","queue","shift","add","jobNodesMap","hasMessages","nodeIds","instructionNodeId","jobNodeId","parentNodeIds"],"sourceRoot":""}