@next-bricks/ai-portal 0.13.0 → 0.13.2

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.
@@ -1,2 +0,0 @@
1
- "use strict";(globalThis.webpackChunk_next_bricks_ai_portal=globalThis.webpackChunk_next_bricks_ai_portal||[]).push([[2267],{6185:(e,t,n)=>{n.r(t),n.d(t,{CruiseCanvas:()=>we});var a,s=n(4635),r=n(918),i=n(6902),o=n(5536),l=n(6121),c=n(829),u=n(2740),d=n(8769),m=n.n(d),v=n(7921),h=n(1280),f=n(3081),p=(n(5168),n(79)),k=n(3373),b=n.n(k),A=n(9126),g=n(7566),E=n(9445),w=n(2460),y=n(2464),C=n(8231),j=n(6494),M=n(7642),R=n(2773),x=n(9533),I=n(3153),N=n(4999),W=n(7954),S=n(4388),B=n(6938),T=n(4609),L=n(9295),_=n(9194),H=n(6854),z=n(5805),$=n(5620),P=n(3349),U=n(2601),X=n(7097),J=n(3490);let O,Q,V,q,D,Y,F,G,K,Z,ee,te,ne,ae,se,re,ie,oe,le,ce,ue,de,me,ve,he,fe;(0,p.initializeI18n)(w.NS,w.I);const{defineElement:pe,property:ke,event:be,method:Ae}=(0,v.createDecorators)(),ge=(0,d.memo)($e),Ee=(0,d.forwardRef)(ze);let we;var ye=new WeakMap,Ce=new WeakMap,je=new WeakMap,Me=new WeakMap,Re=new WeakMap,xe=new WeakSet,Ie=new WeakMap,Ne=new WeakMap,We=new WeakMap,Se=new WeakMap,Be=new WeakMap,Te=new WeakMap,Le=new WeakMap,_e=new WeakMap;class He extends h.ReactNextElement{constructor(){super(...arguments),(0,s.A)(this,xe),(0,r.A)(this,ye,(O(this),V(this))),(0,r.A)(this,Ce,(q(this),D(this))),(0,r.A)(this,je,(Y(this),F(this))),(0,r.A)(this,Me,(G(this),K(this))),(0,r.A)(this,Re,(Z(this),ee(this))),(0,r.A)(this,Ie,(ae(this),()=>{(0,o.A)(xe,this,te).emit()})),(0,r.A)(this,Ne,se(this)),(0,r.A)(this,We,(oe(this),()=>{(0,o.A)(xe,this,re).emit()})),(0,r.A)(this,Se,le(this)),(0,r.A)(this,Be,(de(this),()=>{(0,o.A)(xe,this,ce).emit()})),(0,r.A)(this,Te,me(this)),(0,r.A)(this,Le,(fe(this),()=>{(0,o.A)(xe,this,ve).emit()})),(0,r.A)(this,_e,(0,d.createRef)())}get taskId(){return(0,c.A)(ye,this)}set taskId(e){(0,l.A)(ye,this,e)}get task(){return(0,c.A)(Ce,this)}set task(e){(0,l.A)(Ce,this,e)}get jobs(){return(0,c.A)(je,this)}set jobs(e){(0,l.A)(je,this,e)}get goBackUrl(){return(0,c.A)(Me,this)}set goBackUrl(e){(0,l.A)(Me,this,e)}resumed(){var e;null===(e=(0,c.A)(_e,this).current)||void 0===e||e.resumed()}render(){return m().createElement(Ee,{taskId:this.taskId,jobs:this.jobs,task:this.task,goBackUrl:this.goBackUrl,onShare:(0,c.A)(Ie,this),onPause:(0,c.A)(We,this),onResume:(0,c.A)(Be,this),onCancel:(0,c.A)(Le,this),ref:(0,c.A)(_e,this)})}}function ze(e,t){var n;let{taskId:a,task:s,jobs:r,goBackUrl:i,onShare:o,onPause:l,onResume:c,onCancel:u}=e;const v=(0,d.useRef)(null),{task:h,jobs:p,plan:k,error:A,humanInputRef:w,resumedRef:W}=(0,R.S)(a),S=a?h:s,B=a?p:r,T=a?k:null==s?void 0:s.plan,L=(0,x.B)(S,B),_=null==L?void 0:L.nodes,O=null==L?void 0:L.edges,Q=null==L?void 0:L.nav,V=null==L?void 0:L.views,q=null!==(n=null==S?void 0:S.title)&&void 0!==n?n:"",D=null==S?void 0:S.state,[Y,F]=(0,d.useState)(null),G=(0,d.useMemo)((()=>{if(Y){const[e,t]=Y.split(":");if("job"===e||"view"===e)return t}return null}),[Y]);(0,d.useImperativeHandle)(t,(()=>({resumed:()=>{var e;return null===(e=W.current)||void 0===e?void 0:e.call(W)}})),[W]);const K=(0,d.useRef)(!1);(0,d.useEffect)((()=>{const e=setTimeout((()=>{K.current=!0}),3e3);return()=>{clearTimeout(e)}}),[]);const Z=(0,d.useRef)(!1),ee=(0,d.useCallback)(((e,t)=>K.current&&0!==t?(Z.current=!0,e.transition().duration(null!=t?t:300).ease((e=>e*(2-e))).on("end",(()=>{Z.current=!1}))):e),[]);(0,d.useEffect)((()=>{(0,f.getRuntime)().applyPageTitle(q)}),[q]),(0,d.useEffect)((()=>{A&&(0,f.handleHttpError)(A)}),[A]);const te=(0,d.useCallback)(((e,t)=>{var n;null===(n=w.current)||void 0===n||n.call(w,e,t)}),[w]),[ne,ae]=(0,d.useState)(null),se=(0,d.useCallback)(((e,t)=>{ae((n=>{if(!t){if(!n)return null;const t=new Map(n);return t.delete(e)?t:n}return n?new Map(n).set(e,t):new Map([[e,t]])}))}),[]),{sizeReady:re,nodes:ie,edges:oe}=(0,M.g)({rawNodes:_,rawEdges:O,state:D,sizeMap:ne}),[le,ce]=(0,d.useState)(!1),{grabbing:ue,transform:de,transformRef:me,zoomer:ve}=(0,C.f)({rootRef:v,zoomable:re,scrollable:re&&!le,pannable:re}),{centered:he,setCentered:fe,reCenterRef:pe}=(0,j.E)({nodes:ie,sizeReady:re,zoomer:ve,rootRef:v,selectTransition:ee}),ke=!H.QB.includes(null!=D?D:"working")&&2===ie.length,be=(0,d.useMemo)((()=>new Set(oe.map((e=>e.source)))),[oe]),Ae=(0,d.useMemo)((()=>{if(!re)return null;const e=[];for(const t of ie)be.has(t.id)||e.push(t);return e.length>0?Math.max(...e.map((e=>e.view.y+e.view.height))):null}),[ie,be,re]),Ee=(0,d.useRef)(null);(0,d.useEffect)((()=>{Ee.current=Ae}),[Ae]);const we=(0,d.useRef)(!1);(0,d.useEffect)((()=>{const e=v.current;if(!e||null===Ae||we.current)return;const{offsetHeight:t}=e,n=me.current,a=Ae*n.k+n.y,s=t-H.xX-a;s<0&&ve.translateBy(ee((0,g.A)(e),s>-100?100:s<-500?300:200),0,s/n.k)}),[Ae,me,ve,ee]),(0,d.useEffect)((()=>{const e=Ee.current,t=v.current;if(!t||null===e||Z.current)return;const{offsetHeight:n}=t,a=e*de.k+de.y,s=n-H.xX-a;we.current=s<0}),[de,ve]);const ye=(0,d.useCallback)((()=>{pe.current=!0,fe(!1)}),[pe,fe]),Ce=(0,d.useCallback)((e=>{ve.scaleTo((0,g.A)(v.current),e)}),[ve]),je=(0,d.useCallback)((e=>{let{nodeId:t,jobId:n,behavior:a,block:s}=e;const r=v.current,i=ie.filter((e=>{var a;return!(t&&e.id!==t||n&&(null===(a=e.job)||void 0===a?void 0:a.id)!==n)}));if(!r||0===i.length)return;const o=(0,E.o)(i.map((e=>e.view))),{x:l,y:c}=(0,U.D)(o,[r.offsetWidth,r.offsetHeight],[H.RV,H.kq,H.xX,H.bL],me.current,s);(l||c)&&ve.translateBy(ee((0,g.A)(r),"instant"===a?0:void 0),l,c)}),[ie,ee,me,ve]),Me=(0,d.useCallback)(((e,t)=>{const n=v.current;if(!n||!re)return;let a,s=0,r=0,i=300;const o="left"===e||"right"===e;if("line"===t)a=40*("up"===e||"left"===e?1:-1),i=150;else if("page"===t)a=(n.offsetHeight-H.xX)*("up"===e?-1:1);else{const{y:t,height:s}=(0,E.o)(ie.map((e=>e.view)));if("down"===e){const e=t+s-t+H.xX;a=n.offsetHeight-e-me.current.y}else a=t+H.RV-me.current.y}o?s=a:r=a,(s||r)&&ve.translateBy(ee((0,g.A)(n),i),s,r)}),[ie,ee,re,me,ve]),[Re,xe]=(0,d.useState)(null),[Ie,Ne]=(0,d.useState)(null),We=(0,d.useMemo)((()=>({humanInput:te,onShare:o,onPause:l,onResume:c,onCancel:u,onNodeResize:se,activeToolCallJobId:Re,setActiveToolCallJobId:xe,setActiveNodeId:F,hoverOnScrollableContent:le,setHoverOnScrollableContent:ce,activeExpandedViewJobId:Ie,setActiveExpandedViewJobId:Ne})),[Re,le,Ie,se,te,o,l,c,u]),Se=(0,d.useMemo)((()=>Re?null==B?void 0:B.find((e=>e.id===Re)):null),[Re,B]),Be=(0,d.useCallback)((e=>{for(const t of e.nativeEvent.composedPath()){if(t instanceof HTMLElement&&t.classList.contains(y.A.node))return;if(t===v.current)break}F(null)}),[]);return(0,d.useEffect)((()=>{const e=v.current;if(!e||Se||Ie)return;const t=t=>{if(document.activeElement&&document.activeElement!==document.body&&document.activeElement!==e)return;const n=(0,X.l)(t,{activeNodeId:Y,nodes:ie});if(!n)return;const{action:a,node:s}=n;if("scroll"===a)Me(n.direction,n.range);else if("enter"===a){var r,i;if("job"!==s.type&&"view"!==s.type)return;const e="ask_human"===(null===(r=s.job.toolCall)||void 0===r?void 0:r.name),t="ask_human_confirming_plan"===(null===(i=s.job.toolCall)||void 0===i?void 0:i.name);if(e||t)return}t.preventDefault(),t.stopPropagation(),"enter"===a?"view"===s.type?Ne(s.job.id):xe(s.job.id):"switch-active-node"===a&&(F(s.id),"job"===s.type||"view"===s.type?je({jobId:s.job.id,behavior:"smooth"}):je({nodeId:s.id,behavior:"smooth"}))};return document.addEventListener("keydown",t),()=>{document.removeEventListener("keydown",t)}}),[Y,Se,Ie,ie,je,Me]),m().createElement($.Q.Provider,{value:We},m().createElement("div",{className:b()(y.A.root,{[y.A.loading]:!S}),ref:v,style:{cursor:ue?"grabbing":"grab"},tabIndex:-1,onClick:Be},!S&&m().createElement("div",{className:y.A["loading-icon"]},m().createElement(z.Bj,{lib:"antd",theme:"outlined",icon:"loading-3-quarters",spinning:!0})),m().createElement("div",{className:b()(y.A.canvas,{[y.A.ready]:re&&he}),style:{transform:`translate3d(${de.x}px, ${de.y}px, 0) scale(${de.k})`}},m().createElement("svg",{className:y.A.edges},oe.map((e=>m().createElement("path",{className:y.A.edge,key:`${e.source}-${e.target}`,d:e.points.map(((e,t)=>{let{x:n,y:a}=e;return`${0===t?"M":"L"}${n},${a}`})).join(" ")})))),ie.map((e=>{var t,n,a;return m().createElement(ge,{key:e.id,id:e.id,type:e.type,content:e.content,job:e.job,state:e.state,startTime:null==S?void 0:S.startTime,taskLoading:ke,instructionLoading:"instruction"===e.type&&!be.has(e.id)&&!H.QB.includes(null!==(t=e.state)&&void 0!==t?t:"working")&&!H.X4.includes(null!=D?D:"working"),edges:oe,x:null===(n=e.view)||void 0===n?void 0:n.x,y:null===(a=e.view)||void 0===a?void 0:a.y,active:Y===e.id})})))),m().createElement("div",{className:y.A.widgets},i&&m().createElement(z.EM,{className:y.A["go-back"],url:i},m().createElement(z.Bj,{lib:"fa",prefix:"fas",icon:"arrow-left-long"})),m().createElement("div",{className:y.A["nav-container"]},m().createElement("ul",{className:y.A.nav},null==Q?void 0:Q.map((e=>m().createElement("li",{key:e.id,className:b()(y.A["nav-item"],{[y.A.active]:G===e.id})},m().createElement("a",{className:y.A["nav-link"],onClick:()=>{F(`job:${e.id}`),je({jobId:e.id,block:"start"})}},m().createElement("span",{className:y.A["nav-link-text"]},e.title))))))),m().createElement(I.r,{plan:T,state:D}),m().createElement(N.l,{scale:de.k,onScaleChange:Ce,onReCenter:ye})),Se&&m().createElement(P.M,{job:Se}),Ie&&m().createElement(J.f,{views:V}))}function $e(e){let{id:t,type:n,state:a,job:s,content:r,startTime:i,taskLoading:o,instructionLoading:l,x:c,y:u,active:v}=e;const h=(0,d.useRef)(null),{onNodeResize:f,setActiveNodeId:p}=(0,d.useContext)($.Q);(0,d.useEffect)((()=>{const e=h.current;if(!e)return;const n=new A.A((()=>{f(t,[e.offsetWidth,e.offsetHeight])}));return n.observe(e),()=>{n.disconnect(),f(t,null)}}),[t,f]),(0,d.useEffect)((()=>{const e=h.current;if(!e)return;const t=e=>{e.stopPropagation()};return e.addEventListener("mousedown",t),()=>{e.removeEventListener("mousedown",t)}}),[]);const k=(0,d.useCallback)((()=>{"start"!==n&&"instruction"!==n&&p(t)}),[t,p,n]);return m().createElement("div",{className:b()(y.A.node,{[y.A.ready]:null!=c&&null!=u}),ref:h,style:{left:c,top:u},onClick:k},"start"===n?m().createElement(W.H,null):"end"===n?m().createElement(L.s,{active:v}):"requirement"===n?m().createElement(S.O,{content:r,startTime:i,loading:o,active:v}):"instruction"===n?m().createElement(B.L,{content:s.instruction,loading:l}):"view"===n?m().createElement(_.Y,{job:s,active:v}):m().createElement(T.W,{state:a,job:s,active:v}))}a=He,({e:[V,q,D,Y,F,G,K,Z,ee,te,ne,ae,se,re,ie,oe,le,ce,ue,de,me,ve,he,fe,O],c:[we,Q]}=(0,u.A)(a,[pe("ai-portal.cruise-canvas",{shadowOptions:!1})],[[ke(),1,"taskId"],[ke({attribute:!1}),1,"task"],[ke({attribute:!1}),1,"jobs"],[ke(),1,"goBackUrl"],[be({type:"share"}),1,"shareEvent",e=>(0,c.A)(Re,e),(e,t)=>(0,l.A)(Re,e,t)],[be({type:"pause"}),1,"pauseEvent",e=>(0,c.A)(Ne,e),(e,t)=>(0,l.A)(Ne,e,t)],[be({type:"resume"}),1,"resumeEvent",e=>(0,c.A)(Se,e),(e,t)=>(0,l.A)(Se,e,t)],[be({type:"cancel"}),1,"cancelEvent",e=>(0,c.A)(Te,e),(e,t)=>(0,l.A)(Te,e,t)],[Ae(),2,"resumed"]],0,(e=>_e.has((0,i.A)(e))),h.ReactNextElement)),Q()}}]);
2
- //# sourceMappingURL=cruise-canvas.25c11f40.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chunks/cruise-canvas.25c11f40.js","mappings":"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","sources":["webpack:///./src/cruise-canvas/index.tsx"],"sourcesContent":["// istanbul ignore file: experimental\nimport React, {\n createRef,\n forwardRef,\n memo,\n useCallback,\n useContext,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createDecorators, type EventEmitter } from \"@next-core/element\";\nimport { ReactNextElement } from \"@next-core/react-element\";\nimport { getRuntime, handleHttpError } from \"@next-core/runtime\";\nimport \"@next-core/theme\";\nimport { initializeI18n } from \"@next-core/i18n\";\nimport classNames from \"classnames\";\nimport ResizeObserver from \"resize-observer-polyfill\";\nimport { select, type Selection } from \"d3-selection\";\nimport { mergeRects } from \"@next-shared/diagram\";\nimport { NS, locales } from \"./i18n.js\";\nimport styles from \"./styles.module.css\";\nimport { useZoom } from \"./useZoom.js\";\nimport type {\n SizeTuple,\n GraphNode,\n Job,\n RequirementGraphNode,\n JobGraphNode,\n TaskBaseDetail,\n GraphEdge,\n} from \"./interfaces.js\";\nimport { useAutoCenter } from \"./useAutoCenter.js\";\nimport { useLayout } from \"./useLayout.js\";\nimport { useTaskDetail } from \"./useTaskDetail.js\";\nimport { useTaskGraph } from \"./useTaskGraph.js\";\nimport { PlanProgress } from \"./PlanProgress/PlanProgress.js\";\nimport { ZoomBar } from \"./ZoomBar/ZoomBar.js\";\nimport { NodeStart } from \"./NodeStart/NodeStart.js\";\nimport { NodeRequirement } from \"./NodeRequirement/NodeRequirement.js\";\nimport { NodeInstruction } from \"./NodeInstruction/NodeInstruction.js\";\nimport { NodeJob } from \"./NodeJob/NodeJob.js\";\nimport { NodeEnd } from \"./NodeEnd/NodeEnd.js\";\nimport { NodeView } from \"./NodeView/NodeView.js\";\nimport {\n CANVAS_PADDING_BOTTOM,\n CANVAS_PADDING_LEFT,\n CANVAS_PADDING_RIGHT,\n CANVAS_PADDING_TOP,\n DONE_STATES,\n GENERAL_DONE_STATES,\n} from \"./constants.js\";\nimport { WrappedIcon, WrappedLink } from \"./bricks.js\";\nimport { CanvasContext } from \"./CanvasContext.js\";\nimport { ToolCallDetail } from \"./ToolCallDetail/ToolCallDetail.js\";\nimport { getScrollTo } from \"./utils/getScrollTo.js\";\nimport { handleKeyboardNav } from \"./utils/handleKeyboardNav.js\";\nimport { ExpandedView } from \"./ExpandedView/ExpandedView.js\";\n\ninitializeI18n(NS, locales);\n\nconst { defineElement, property, event, method } = createDecorators();\n\nconst MemoizedNodeComponent = memo(NodeComponent);\n\nexport interface CruiseCanvasProps {\n taskId?: string;\n task?: TaskBaseDetail;\n jobs?: Job[];\n goBackUrl?: string;\n}\n\nconst CruiseCanvasComponent = forwardRef(LegacyCruiseCanvasComponent);\n\n/**\n * 构件 `ai-portal.cruise-canvas`\n */\nexport\n@defineElement(\"ai-portal.cruise-canvas\", {\n // Will wrap v2 bricks which don't support in shadow DOM.\n shadowOptions: false,\n})\nclass CruiseCanvas extends ReactNextElement implements CruiseCanvasProps {\n @property()\n accessor taskId: string | undefined;\n\n @property({ attribute: false })\n accessor task: TaskBaseDetail | undefined;\n\n @property({ attribute: false })\n accessor jobs: Job[] | undefined;\n\n @property()\n accessor goBackUrl: string | undefined;\n\n @event({ type: \"share\" })\n accessor #shareEvent!: EventEmitter<void>;\n\n #onShare = () => {\n this.#shareEvent.emit();\n };\n\n @event({ type: \"pause\" })\n accessor #pauseEvent!: EventEmitter<void>;\n\n #onPause = () => {\n this.#pauseEvent.emit();\n };\n\n @event({ type: \"resume\" })\n accessor #resumeEvent!: EventEmitter<void>;\n\n #onResume = () => {\n this.#resumeEvent.emit();\n };\n\n @event({ type: \"cancel\" })\n accessor #cancelEvent!: EventEmitter<void>;\n\n #onCancel = () => {\n this.#cancelEvent.emit();\n };\n\n #ref = createRef<CruiseCanvasRef>();\n\n @method()\n resumed() {\n this.#ref.current?.resumed();\n }\n\n render() {\n return (\n <CruiseCanvasComponent\n taskId={this.taskId}\n jobs={this.jobs}\n task={this.task}\n goBackUrl={this.goBackUrl}\n onShare={this.#onShare}\n onPause={this.#onPause}\n onResume={this.#onResume}\n onCancel={this.#onCancel}\n ref={this.#ref}\n />\n );\n }\n}\n\ninterface CruiseCanvasComponentProps extends CruiseCanvasProps {\n onShare: () => void;\n onPause: () => void;\n onResume: () => void;\n onCancel: () => void;\n}\n\ninterface ScrollToOptions {\n nodeId?: string;\n jobId?: string;\n\n /**\n * @default \"auto\"\n */\n behavior?: \"smooth\" | \"instant\" | \"auto\";\n\n /**\n * When set to \"start\", force scroll even if the node is fully visible.\n *\n * @default \"nearest\"\n */\n block?: \"start\" | \"nearest\";\n}\n\ninterface CruiseCanvasRef {\n resumed: () => void;\n}\n\nfunction LegacyCruiseCanvasComponent(\n {\n taskId,\n task: propTask,\n jobs: propJobs,\n goBackUrl,\n onShare,\n onPause,\n onResume,\n onCancel,\n }: CruiseCanvasComponentProps,\n ref: React.Ref<CruiseCanvasRef>\n) {\n const rootRef = useRef<HTMLDivElement>(null);\n const {\n task: _task,\n jobs: _jobs,\n plan: _plan,\n error,\n humanInputRef,\n resumedRef,\n } = useTaskDetail(taskId);\n const task = taskId ? _task : propTask;\n const jobs = taskId ? _jobs : propJobs;\n const plan = taskId ? _plan : propTask?.plan;\n const graph = useTaskGraph(task, jobs);\n const rawNodes = graph?.nodes;\n const rawEdges = graph?.edges;\n const nav = graph?.nav;\n const views = graph?.views;\n const pageTitle = task?.title ?? \"\";\n const taskState = task?.state;\n const [activeNodeId, setActiveNodeId] = useState<string | null>(null);\n const currentNavId = useMemo(() => {\n if (activeNodeId) {\n const [type, jobId] = activeNodeId.split(\":\");\n if (type === \"job\" || type === \"view\") {\n return jobId;\n }\n }\n return null;\n }, [activeNodeId]);\n\n useImperativeHandle(\n ref,\n () => ({\n resumed: () => resumedRef.current?.(),\n }),\n [resumedRef]\n );\n\n // Enable transition after 3 seconds to avoid initial flicker\n const transitionEnabledRef = useRef(false);\n useEffect(() => {\n const timer = setTimeout(() => {\n transitionEnabledRef.current = true;\n }, 3e3);\n return () => {\n clearTimeout(timer);\n };\n }, []);\n\n const transitionRef = useRef(false);\n const selectTransition = useCallback(\n (\n selection: Selection<HTMLDivElement, unknown, null, undefined>,\n duration?: number\n ) => {\n if (!transitionEnabledRef.current || duration === 0) {\n return selection;\n }\n transitionRef.current = true;\n return selection\n .transition()\n .duration(duration ?? 300)\n .ease((t) => t * (2 - t)) // Ease in-out\n .on(\"end\", () => {\n transitionRef.current = false;\n });\n },\n []\n );\n\n useEffect(() => {\n getRuntime().applyPageTitle(pageTitle);\n }, [pageTitle]);\n\n useEffect(() => {\n if (error) {\n handleHttpError(error);\n }\n }, [error]);\n\n const humanInput = useCallback(\n (jobId: string, input: string) => {\n humanInputRef.current?.(jobId, input);\n },\n [humanInputRef]\n );\n\n const [sizeMap, setSizeMap] = useState<Map<string, SizeTuple> | null>(null);\n const onNodeResize = useCallback((id: string, size: SizeTuple | null) => {\n // Handle resize logic here\n setSizeMap((prev) => {\n if (!size) {\n if (!prev) {\n return null;\n }\n const newMap = new Map(prev);\n const deleted = newMap.delete(id);\n return deleted ? newMap : prev;\n }\n return prev ? new Map(prev).set(id, size) : new Map([[id, size]]);\n });\n }, []);\n\n const { sizeReady, nodes, edges } = useLayout({\n rawNodes,\n rawEdges,\n state: taskState,\n sizeMap,\n });\n\n const [hoverOnScrollableContent, setHoverOnScrollableContent] =\n useState(false);\n\n const { grabbing, transform, transformRef, zoomer /* , scaleRange */ } =\n useZoom({\n rootRef,\n zoomable: sizeReady,\n scrollable: sizeReady && !hoverOnScrollableContent,\n pannable: sizeReady,\n });\n\n const { centered, setCentered, reCenterRef } = useAutoCenter({\n nodes,\n sizeReady,\n zoomer,\n rootRef,\n selectTransition,\n });\n\n const taskDone = DONE_STATES.includes(taskState ?? \"working\");\n const taskLoading = !taskDone && nodes.length === 2;\n\n const nonLeafNodes = useMemo(() => {\n return new Set<string>(edges.map((edge) => edge.source));\n }, [edges]);\n\n const bottom = useMemo(() => {\n if (!sizeReady) {\n return null;\n }\n\n const leafNodes: GraphNode[] = [];\n for (const node of nodes) {\n if (!nonLeafNodes.has(node.id)) {\n leafNodes.push(node);\n }\n }\n if (leafNodes.length > 0) {\n const y1 = Math.max(\n ...leafNodes.map((node) => node.view!.y + node.view!.height)\n );\n return y1;\n }\n\n return null;\n }, [nodes, nonLeafNodes, sizeReady]);\n\n const bottomRef = useRef<number | null>(null);\n useEffect(() => {\n bottomRef.current = bottom;\n }, [bottom]);\n\n // Disable auto scroll when the user manually scrolled up\n const manualScrolledUpRef = useRef(false);\n\n useEffect(() => {\n const root = rootRef.current;\n if (!root || bottom === null || manualScrolledUpRef.current) {\n return;\n }\n const { offsetHeight } = root;\n const transform = transformRef.current;\n const transformedBottom = bottom * transform.k + transform.y;\n const diffY = offsetHeight - CANVAS_PADDING_BOTTOM - transformedBottom;\n if (diffY < 0) {\n // Make the latest node visible\n zoomer.translateBy(\n selectTransition(\n select(root),\n diffY > -100 ? 100 : diffY < -500 ? 300 : 200\n ),\n 0,\n diffY / transform.k\n );\n }\n }, [bottom, transformRef, zoomer, selectTransition]);\n\n // Detect if the user scrolled up manually\n useEffect(() => {\n const bottom = bottomRef.current;\n const root = rootRef.current;\n if (!root || bottom === null || transitionRef.current) {\n return;\n }\n const { offsetHeight } = root;\n const transformedBottom = bottom * transform.k + transform.y;\n\n const diffY = offsetHeight - CANVAS_PADDING_BOTTOM - transformedBottom;\n manualScrolledUpRef.current = diffY < 0;\n }, [transform, zoomer]);\n\n const handleReCenter = useCallback(() => {\n reCenterRef.current = true;\n setCentered(false);\n }, [reCenterRef, setCentered]);\n\n const handleScaleChange = useCallback(\n (scale: number) => {\n zoomer.scaleTo(select(rootRef.current!), scale);\n },\n [zoomer]\n );\n\n const scrollTo = useCallback(\n ({ nodeId, jobId, behavior, block }: ScrollToOptions) => {\n /**\n * - When the node is fully visible, take no action.\n * - Otherwise, scroll to make it fully visible while make the scroll\n * distance as small as possible.\n * - Special cases:\n * - When the node is higher or wider than the viewport, scroll to\n * the top or left of the node.\n */\n const root = rootRef.current;\n const targets = nodes.filter((n) => {\n if (nodeId && n.id !== nodeId) {\n return false;\n }\n if (jobId && (n as JobGraphNode).job?.id !== jobId) {\n return false;\n }\n return true;\n });\n if (!root || targets.length === 0) {\n return;\n }\n const rect = mergeRects(targets.map((node) => node.view!));\n\n const { x, y } = getScrollTo(\n rect,\n [root.offsetWidth, root.offsetHeight],\n [\n CANVAS_PADDING_TOP,\n CANVAS_PADDING_RIGHT,\n CANVAS_PADDING_BOTTOM,\n CANVAS_PADDING_LEFT,\n ],\n transformRef.current,\n block\n );\n\n if (x || y) {\n zoomer.translateBy(\n selectTransition(\n select(root),\n behavior === \"instant\" ? 0 : undefined\n ),\n x,\n y\n );\n }\n },\n [nodes, selectTransition, transformRef, zoomer]\n );\n\n const scrollBy = useCallback(\n (\n direction: \"up\" | \"down\" | \"left\" | \"right\",\n range: \"line\" | \"page\" | \"document\"\n ) => {\n const root = rootRef.current;\n if (!root || !sizeReady) {\n return;\n }\n let x = 0;\n let y = 0;\n let duration = 300;\n let distance: number;\n const isHorizontal = direction === \"left\" || direction === \"right\";\n if (range === \"line\") {\n const lineHeight = 40;\n distance =\n lineHeight * (direction === \"up\" || direction === \"left\" ? 1 : -1);\n duration = 150;\n } else if (range === \"page\") {\n const pageHeight = root.offsetHeight - CANVAS_PADDING_BOTTOM;\n distance = pageHeight * (direction === \"up\" ? -1 : 1);\n } else {\n const { y: top, height } = mergeRects(nodes.map((node) => node.view!));\n\n if (direction === \"down\") {\n const bottom = top + height;\n const targetHeight = bottom - top + CANVAS_PADDING_BOTTOM;\n distance = root.offsetHeight - targetHeight - transformRef.current.y;\n } else {\n distance = top + CANVAS_PADDING_TOP - transformRef.current.y;\n }\n }\n\n if (isHorizontal) {\n x = distance;\n } else {\n y = distance;\n }\n\n if (x || y) {\n zoomer.translateBy(selectTransition(select(root), duration), x, y);\n }\n },\n [nodes, selectTransition, sizeReady, transformRef, zoomer]\n );\n\n const [activeToolCallJobId, setActiveToolCallJobId] = useState<string | null>(\n null\n );\n\n const [activeExpandedViewJobId, setActiveExpandedViewJobId] = useState<\n string | null\n >(null);\n\n const canvasContextValue = useMemo(\n () => ({\n humanInput,\n onShare,\n onPause,\n onResume,\n onCancel,\n onNodeResize,\n activeToolCallJobId,\n setActiveToolCallJobId,\n setActiveNodeId,\n hoverOnScrollableContent,\n setHoverOnScrollableContent,\n activeExpandedViewJobId,\n setActiveExpandedViewJobId,\n }),\n [\n activeToolCallJobId,\n hoverOnScrollableContent,\n activeExpandedViewJobId,\n onNodeResize,\n humanInput,\n onShare,\n onPause,\n onResume,\n onCancel,\n ]\n );\n\n const activeToolCallJob = useMemo(() => {\n if (!activeToolCallJobId) {\n return null;\n }\n return jobs?.find((job) => job.id === activeToolCallJobId);\n }, [activeToolCallJobId, jobs]);\n\n const handleRootClick = useCallback((e: React.MouseEvent) => {\n for (const element of e.nativeEvent.composedPath()) {\n if (\n element instanceof HTMLElement &&\n element.classList.contains(styles.node)\n ) {\n // If the click is on a node, do not reset active node\n return;\n }\n if (element === rootRef.current) {\n break;\n }\n }\n setActiveNodeId(null);\n }, []);\n\n useEffect(() => {\n const root = rootRef.current;\n if (!root || activeToolCallJob || activeExpandedViewJobId) {\n return;\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (\n document.activeElement &&\n document.activeElement !== document.body &&\n document.activeElement !== root\n ) {\n return;\n }\n\n const keyboardAction = handleKeyboardNav(e, { activeNodeId, nodes });\n if (!keyboardAction) {\n return;\n }\n const { action, node } = keyboardAction;\n\n if (action === \"scroll\") {\n scrollBy(keyboardAction.direction, keyboardAction.range);\n } else if (action === \"enter\") {\n if (node.type !== \"job\" && node.type !== \"view\") {\n return;\n }\n const askUser = node.job.toolCall?.name === \"ask_human\";\n const askUserPlan =\n node.job.toolCall?.name === \"ask_human_confirming_plan\";\n if (askUser || askUserPlan) {\n return;\n }\n }\n e.preventDefault();\n e.stopPropagation();\n\n if (action === \"enter\") {\n if (node.type === \"view\") {\n setActiveExpandedViewJobId(node.job.id);\n } else {\n setActiveToolCallJobId((node as JobGraphNode).job.id);\n }\n } else if (action === \"switch-active-node\") {\n setActiveNodeId(node.id);\n if (node.type === \"job\" || node.type === \"view\") {\n scrollTo({\n jobId: node.job.id,\n behavior: \"smooth\",\n });\n } else {\n scrollTo({\n nodeId: node.id,\n behavior: \"smooth\",\n });\n }\n }\n };\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [\n activeNodeId,\n activeToolCallJob,\n activeExpandedViewJobId,\n nodes,\n scrollTo,\n scrollBy,\n ]);\n\n return (\n <CanvasContext.Provider value={canvasContextValue}>\n <div\n className={classNames(styles.root, { [styles.loading]: !task })}\n ref={rootRef}\n style={{\n cursor: grabbing ? \"grabbing\" : \"grab\",\n }}\n tabIndex={-1}\n onClick={handleRootClick}\n >\n {!task && (\n <div className={styles[\"loading-icon\"]}>\n <WrappedIcon\n lib=\"antd\"\n theme=\"outlined\"\n icon=\"loading-3-quarters\"\n spinning\n />\n </div>\n )}\n <div\n className={classNames(styles.canvas, {\n [styles.ready]: sizeReady && centered,\n })}\n style={{\n transform: `translate3d(${transform.x}px, ${transform.y}px, 0) scale(${transform.k})`,\n }}\n >\n <svg className={styles.edges}>\n {edges.map((edge) => (\n <path\n className={styles.edge}\n key={`${edge.source}-${edge.target}`}\n d={edge\n .points!.map(\n ({ x, y }, i) => `${i === 0 ? \"M\" : \"L\"}${x},${y}`\n )\n .join(\" \")}\n />\n ))}\n </svg>\n {nodes.map((node) => (\n <MemoizedNodeComponent\n key={node.id}\n id={node.id}\n type={node.type}\n content={(node as RequirementGraphNode).content}\n job={(node as JobGraphNode).job}\n state={node.state}\n startTime={task?.startTime}\n taskLoading={taskLoading}\n instructionLoading={\n node.type === \"instruction\" &&\n !nonLeafNodes.has(node.id) &&\n !DONE_STATES.includes(node.state ?? \"working\") &&\n !GENERAL_DONE_STATES.includes(taskState ?? \"working\")\n }\n edges={edges}\n x={node.view?.x}\n y={node.view?.y}\n active={activeNodeId === node.id}\n />\n ))}\n </div>\n </div>\n <div className={styles.widgets}>\n {goBackUrl && (\n <WrappedLink className={styles[\"go-back\"]} url={goBackUrl}>\n <WrappedIcon lib=\"fa\" prefix=\"fas\" icon=\"arrow-left-long\" />\n </WrappedLink>\n )}\n <div className={styles[\"nav-container\"]}>\n <ul className={styles.nav}>\n {nav?.map((item) => (\n <li\n key={item.id}\n className={classNames(styles[\"nav-item\"], {\n [styles.active]: currentNavId === item.id,\n })}\n >\n <a\n className={styles[\"nav-link\"]}\n onClick={() => {\n setActiveNodeId(`job:${item.id}`);\n scrollTo({ jobId: item.id, block: \"start\" });\n }}\n >\n <span className={styles[\"nav-link-text\"]}>{item.title}</span>\n </a>\n </li>\n ))}\n </ul>\n </div>\n <PlanProgress plan={plan} state={taskState} />\n <ZoomBar\n scale={transform.k}\n onScaleChange={handleScaleChange}\n onReCenter={handleReCenter}\n />\n </div>\n {activeToolCallJob && <ToolCallDetail job={activeToolCallJob} />}\n {activeExpandedViewJobId && <ExpandedView views={views!} />}\n </CanvasContext.Provider>\n );\n}\n\ninterface NodeComponentProps {\n id: string;\n type: GraphNode[\"type\"];\n edges: GraphEdge[];\n content?: string;\n job?: Job;\n state?: string;\n startTime?: number;\n taskLoading?: boolean;\n instructionLoading?: boolean;\n x?: number;\n y?: number;\n active?: boolean;\n}\n\nfunction NodeComponent({\n id,\n type,\n state,\n job,\n content,\n startTime,\n taskLoading,\n instructionLoading,\n x,\n y,\n active,\n}: NodeComponentProps) {\n const nodeRef = useRef<HTMLDivElement>(null);\n const { onNodeResize, setActiveNodeId } = useContext(CanvasContext);\n\n useEffect(() => {\n const element = nodeRef.current;\n if (!element) {\n return;\n }\n const observer = new ResizeObserver(() => {\n onNodeResize(id, [element.offsetWidth, element.offsetHeight]);\n });\n observer.observe(element);\n return () => {\n observer.disconnect();\n onNodeResize(id, null);\n };\n }, [id, onNodeResize]);\n\n useEffect(() => {\n const element = nodeRef.current;\n if (!element) {\n return;\n }\n const handleMouseDown = (e: MouseEvent) => {\n e.stopPropagation();\n };\n element.addEventListener(\"mousedown\", handleMouseDown);\n return () => {\n element.removeEventListener(\"mousedown\", handleMouseDown);\n };\n }, []);\n\n const handleClick = useCallback(() => {\n if (type !== \"start\" && type !== \"instruction\") {\n setActiveNodeId(id);\n }\n }, [id, setActiveNodeId, type]);\n\n return (\n <div\n className={classNames(styles.node, {\n [styles.ready]: x != null && y != null,\n })}\n ref={nodeRef}\n style={{\n left: x,\n top: y,\n }}\n onClick={handleClick}\n >\n {type === \"start\" ? (\n <NodeStart />\n ) : type === \"end\" ? (\n <NodeEnd active={active} />\n ) : type === \"requirement\" ? (\n <NodeRequirement\n content={content}\n startTime={startTime}\n loading={taskLoading}\n active={active}\n />\n ) : type === \"instruction\" ? (\n <NodeInstruction\n content={job!.instruction}\n loading={instructionLoading}\n />\n ) : type === \"view\" ? (\n <NodeView job={job!} active={active} />\n ) : (\n <NodeJob state={state} job={job!} active={active} />\n )}\n </div>\n );\n}\n"],"names":["initializeI18n","NS","locales","defineElement","property","event","method","createDecorators","MemoizedNodeComponent","memo","NodeComponent","CruiseCanvasComponent","forwardRef","LegacyCruiseCanvasComponent","_CruiseCanvas","_A","WeakMap","_B","_C","_D","_E","_CruiseCanvas_brand","WeakSet","_onShare","_F","_onPause","_G","_onResume","_H","_onCancel","_ref","CruiseCanvas","ReactNextElement","constructor","arguments","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","_initProto","_init_taskId","_init_extra_taskId","_init_task","_init_extra_task","_init_jobs","_init_extra_jobs","_init_goBackUrl","_init_extra_goBackUrl","_init_shareEvent","_init_extra_shareEvent","_classPrivateGetter","this","_get_shareEvent","emit","_init_pauseEvent","_init_extra_pauseEvent","_get_pauseEvent","_init_resumeEvent","_init_extra_resumeEvent","_get_resumeEvent","_init_cancelEvent","_init_extra_cancelEvent","_get_cancelEvent","createRef","taskId","_classPrivateFieldGet","v","_classPrivateFieldSet","task","jobs","goBackUrl","resumed","_classPrivateFieldGet2","current","render","React","onShare","onPause","onResume","onCancel","ref","_ref2","_task$title","propTask","propJobs","rootRef","useRef","_task","_jobs","plan","_plan","error","humanInputRef","resumedRef","useTaskDetail","graph","useTaskGraph","rawNodes","nodes","rawEdges","edges","nav","views","pageTitle","title","taskState","state","activeNodeId","setActiveNodeId","useState","currentNavId","useMemo","type","jobId","split","useImperativeHandle","_resumedRef$current","call","transitionEnabledRef","useEffect","timer","setTimeout","clearTimeout","transitionRef","selectTransition","useCallback","selection","duration","transition","ease","t","on","getRuntime","applyPageTitle","handleHttpError","humanInput","input","_humanInputRef$curren","sizeMap","setSizeMap","onNodeResize","id","size","prev","newMap","Map","delete","set","sizeReady","useLayout","hoverOnScrollableContent","setHoverOnScrollableContent","grabbing","transform","transformRef","zoomer","useZoom","zoomable","scrollable","pannable","centered","setCentered","reCenterRef","useAutoCenter","taskLoading","DONE_STATES","includes","length","nonLeafNodes","Set","map","edge","source","bottom","leafNodes","node","has","push","Math","max","view","y","height","bottomRef","manualScrolledUpRef","root","offsetHeight","transformedBottom","k","diffY","CANVAS_PADDING_BOTTOM","translateBy","select","handleReCenter","handleScaleChange","scale","scaleTo","scrollTo","_ref3","nodeId","behavior","block","targets","filter","n","_job","job","rect","mergeRects","x","getScrollTo","offsetWidth","CANVAS_PADDING_TOP","CANVAS_PADDING_RIGHT","CANVAS_PADDING_LEFT","undefined","scrollBy","direction","range","distance","isHorizontal","top","targetHeight","activeToolCallJobId","setActiveToolCallJobId","activeExpandedViewJobId","setActiveExpandedViewJobId","canvasContextValue","activeToolCallJob","find","handleRootClick","e","element","nativeEvent","composedPath","HTMLElement","classList","contains","styles","handleKeyDown","document","activeElement","body","keyboardAction","handleKeyboardNav","action","_node$job$toolCall","_node$job$toolCall2","askUser","toolCall","name","askUserPlan","preventDefault","stopPropagation","addEventListener","removeEventListener","CanvasContext","Provider","value","className","classNames","loading","style","cursor","tabIndex","onClick","WrappedIcon","lib","theme","icon","spinning","canvas","ready","key","target","d","points","_ref4","i","join","_node$state","_node$view","_node$view2","content","startTime","instructionLoading","GENERAL_DONE_STATES","active","widgets","WrappedLink","url","prefix","item","PlanProgress","ZoomBar","onScaleChange","onReCenter","ToolCallDetail","ExpandedView","_ref5","nodeRef","useContext","observer","ResizeObserver","observe","disconnect","handleMouseDown","handleClick","left","NodeStart","NodeEnd","NodeRequirement","NodeInstruction","instruction","NodeView","NodeJob","_CruiseCanvas2","_set_shareEvent","_set_pauseEvent","_set_resumeEvent","_set_cancelEvent","c","_initClass","_applyDecs","shadowOptions","attribute","o","_","_checkInRHS"],"sourceRoot":""}