@ngocsangairvds/vsaf 6.0.1 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/package.json +1 -1
  2. package/packages/cli/dist/commands/run.d.ts +3 -0
  3. package/packages/cli/dist/commands/run.d.ts.map +1 -1
  4. package/packages/cli/dist/commands/run.js +10 -0
  5. package/packages/cli/dist/commands/run.js.map +1 -1
  6. package/packages/cli/dist/server/routes/runs.d.ts +2 -0
  7. package/packages/cli/dist/server/routes/runs.d.ts.map +1 -1
  8. package/packages/cli/dist/server/routes/runs.js +2 -0
  9. package/packages/cli/dist/server/routes/runs.js.map +1 -1
  10. package/packages/cli/dist/server/services/execution-manager.d.ts.map +1 -1
  11. package/packages/cli/dist/server/services/execution-manager.js +5 -0
  12. package/packages/cli/dist/server/services/execution-manager.js.map +1 -1
  13. package/packages/core/dist/config/ai-config.d.ts +3 -0
  14. package/packages/core/dist/config/ai-config.d.ts.map +1 -1
  15. package/packages/core/dist/config/ai-config.js +9 -0
  16. package/packages/core/dist/config/ai-config.js.map +1 -1
  17. package/packages/core/dist/index.d.ts +1 -1
  18. package/packages/core/dist/index.d.ts.map +1 -1
  19. package/packages/core/dist/index.js +3 -2
  20. package/packages/core/dist/index.js.map +1 -1
  21. package/packages/core/dist/runtime/executor.d.ts.map +1 -1
  22. package/packages/core/dist/runtime/executor.js +1 -0
  23. package/packages/core/dist/runtime/executor.js.map +1 -1
  24. package/packages/web/dist/web/browser/{chunk-FE2VGLSN.js → chunk-7L4OEPXU.js} +1 -1
  25. package/packages/web/dist/web/browser/{chunk-FBCNCNPM.js → chunk-BDLVJ3JS.js} +1 -1
  26. package/packages/web/dist/web/browser/{chunk-MCW5ACIZ.js → chunk-CQQRQYJU.js} +1 -1
  27. package/packages/web/dist/web/browser/{chunk-6H3AYIT3.js → chunk-E3BSTPAZ.js} +1 -1
  28. package/packages/web/dist/web/browser/{chunk-L7B3BT5E.js → chunk-IBUECISR.js} +1 -1
  29. package/packages/web/dist/web/browser/{chunk-7ELOO4IC.js → chunk-OYL4KDHJ.js} +1 -1
  30. package/packages/web/dist/web/browser/{chunk-GR7SKUVU.js → chunk-Q6S2YOXT.js} +1 -1
  31. package/packages/web/dist/web/browser/chunk-RM7DW5FD.js +5 -0
  32. package/packages/web/dist/web/browser/chunk-SM2S63GA.js +1 -0
  33. package/packages/web/dist/web/browser/{chunk-N3FOQ3O5.js → chunk-ZZWA24BS.js} +1 -1
  34. package/packages/web/dist/web/browser/index.html +2 -2
  35. package/packages/web/dist/web/browser/{main-3UCJ3N4F.js → main-MOJ6YEDN.js} +1 -1
  36. package/packages/web/dist/web/browser/styles-KOJ4NEWT.css +1 -0
  37. package/packages/web/dist/web/browser/chunk-4R37VVI4.js +0 -5
  38. package/packages/web/dist/web/browser/chunk-UDCOYDXU.js +0 -1
  39. package/packages/web/dist/web/browser/styles-5MTP4CCO.css +0 -1
@@ -1 +0,0 @@
1
- import{a as Ie}from"./chunk-33F7AVPH.js";import{b as ve,e as _e}from"./chunk-N3FOQ3O5.js";import{a as xe,b as ye,e as Ce,j as Ee,k as P}from"./chunk-7ELOO4IC.js";import{$,Ba as N,Fa as U,J as ne,Ka as C,Kb as ge,La as f,Lb as he,Ma as b,Mb as fe,Na as oe,O as y,Oa as O,Pa as F,Pb as be,Qa as m,Qb as M,Ra as a,Sa as o,T as I,Ta as E,U as S,V as k,Wb as we,Xa as D,Ya as g,Za as c,a as Z,aa as ie,b as ee,bb as se,cb as ae,db as de,ea as re,f as te,gb as G,ib as l,jb as v,kb as H,lb as A,mb as le,nb as ue,oa as B,ob as pe,qa as s,sb as ce,tb as me}from"./chunk-4R37VVI4.js";var j=class i{zone=y(ie);projectService=y(we);connect(t){return new te(e=>{let n=this.projectService.currentId,r=n?`?project=${encodeURIComponent(n)}`:"",d=new EventSource(`/api/runs/${t}/events${r}`),_=["node:start","node:complete","node:skip","node:fail","run:complete","run:state","run:pause","run:cancel"];for(let p of _)d.addEventListener(p,u=>{this.zone.run(()=>{e.next({type:p,data:JSON.parse(u.data)})})});return d.onerror=()=>{this.zone.run(()=>{e.complete()}),d.close()},()=>{d.close()}})}static \u0275fac=function(e){return new(e||i)};static \u0275prov=ne({token:i,factory:i.\u0275fac,providedIn:"root"})};var $e=new Set(["completed","failed","cancelled"]);function X(i){return i!==void 0&&$e.has(i)}function Se(i,t=new Date().toISOString()){X(i.status)&&!i.completedAt&&(i.completedAt=t)}var He="Approval required",Pe="Run paused \u2014 input required to continue.";function V(i){return`${i.nodeId}\0${i.iteration??""}\0${i.message}`}function De(i){let t=ke(i);if(t)return t;let e=i.approval;if(e&&typeof e=="object")return ke(e)}function ke(i){let t=T(i.approvalNodeId)??T(i.nodeId);if(!t)return;let e=T(i.approvalMessage)??T(i.message),n=T(i.approvalType)??T(i.type),r=i.iteration;return{nodeId:t,message:e||He,type:n==="interactive_loop"?"interactive_loop":"approval",iteration:typeof r=="number"?r:void 0}}function T(i){return typeof i=="string"&&i!==""?i:void 0}var K=class{current;state="hidden";error;answeredKey;pauseReceived(t){this.current=De(t)??Ne(),this.state="ready",this.error=void 0}runStateChanged(t,e){if(t!=="paused"){this.current=void 0,this.state="hidden",this.error=void 0,this.answeredKey=void 0;return}if(this.state==="submitting")return;let n=e?De(e):void 0,r=n?V(n):void 0;r!==void 0&&r===this.answeredKey||this.current&&r!==void 0&&r===V(this.current)||this.current&&n===void 0||(this.current=n??Ne(),this.state="ready",this.error=void 0)}submitStarted(){this.state!=="hidden"&&(this.state="submitting",this.error=void 0)}submitFailed(t){this.state!=="hidden"&&(this.state="error",this.error=t)}submitSucceeded(){this.current&&(this.answeredKey=V(this.current)),this.current=void 0,this.state="hidden",this.error=void 0}visible(){return this.state!=="hidden"}phase(){return this.state}request(){return this.current}errorMessage(){return this.error}submitAction(){return this.current?.type==="interactive_loop"?"resume":"approve"}};function Ne(){return{nodeId:"",message:Pe,type:"approval"}}function Me(i,t,e=new Date().toISOString()){let n=`gate:${V(t)}`;return i.some(r=>r.key===n)?i:[...i,{key:n,role:"gate",text:t.message,at:e,nodeId:t.nodeId,iteration:t.iteration}]}function Q(i,t,e,n=new Date().toISOString()){return[...i,{key:`user:${i.length}:${n}`,role:"user",kind:t,text:je(t,e),at:n}]}function je(i,t){let e=t.trim();switch(i){case"answer":return e;case"approve":return e?`Approved: ${e}`:"Approved";case"reject":return e?`Rejected: ${e}`:"Rejected"}}function Te(i){return Ke(i).split(/`([^`]*)`/).map((n,r)=>r%2===1?`<code>${n}</code>`:n.replace(/\*\*([^*]+)\*\*/g,"<strong>$1</strong>")).join("").replace(/\n/g,"<br>")}function Ke(i){return i.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}var We=["host"];function ze(i,t){if(i&1&&(k(),E(0,"path",9)),i&2){let e=t.$implicit;C("d",e)}}function qe(i,t){if(i&1&&(k(),a(0,"text",16),l(1),o()),i&2){let e=c().$implicit,n=c();C("x",n.NODE_W-12)("y",n.NODE_H/2+5),s(),A("",e.progress.done,"/",e.progress.total)}}function Be(i,t){if(i&1&&(k(),a(0,"text",17),l(1,"\u29C9"),o()),i&2){let e=c(2);C("x",e.NODE_W-12)("y",14)}}function Ue(i,t){if(i&1){let e=D();k(),a(0,"g",10),g("click",function(){let r=I(e).$implicit,d=c();return S(d.nodeClick.emit(r.key))}),E(1,"rect",11),a(2,"text",12),l(3),o(),a(4,"text",13),l(5),o(),U(6,qe,2,4,"text",14)(7,Be,2,2,"text",15),o()}if(i&2){let e=t.$implicit,n=c();C("transform","translate("+e.x+","+e.y+")"),s(),G("dag-pulse",e.status==="running"),C("width",n.NODE_W)("height",n.NODE_H)("fill",n.fillFor(e.status))("stroke",n.strokeFor(e.status)),s(),C("y",n.NODE_H/2+5)("fill",n.strokeFor(e.status)),s(),v(n.icon(e.status)),s(),C("y",n.NODE_H/2+5),s(),v(n.clip(e.label)),s(),m("ngIf",e.progress),s(),m("ngIf",e.isGroup)}}var R=class i{NODE_W=168;NODE_H=44;nodes=[];edges=[];width=0;height=0;nodeClick=new $;hostRef;scale=1;panX=16;panY=40;dragging=!1;lastX=0;lastY=0;get edgePaths(){let t=new Map(this.nodes.map(n=>[n.key,n])),e=[];for(let n of this.edges){let r=t.get(n.from),d=t.get(n.to);if(!r||!d)continue;let _=r.x+168/2,p=r.y+44,u=d.x+168/2,x=d.y,h=(p+x)/2;e.push(`M${_} ${p} C${_} ${h}, ${u} ${h}, ${u} ${x}`)}return e}onWheel(t){t.preventDefault(),this.zoomBy(t.deltaY<0?1.1:.9)}zoomBy(t,e){e?.stopPropagation(),this.scale=Math.min(2.5,Math.max(.2,this.scale*t))}onDown(t){this.dragging=!0,this.lastX=t.clientX,this.lastY=t.clientY}onMove(t){this.dragging&&(this.panX+=t.clientX-this.lastX,this.panY+=t.clientY-this.lastY,this.lastX=t.clientX,this.lastY=t.clientY)}onUp(){this.dragging=!1}fit(){if(!this.width||!this.height){this.scale=1,this.panX=16,this.panY=40;return}let t=this.hostRef?.nativeElement,e=t?.clientWidth??600,n=t?.clientHeight??400;this.scale=Math.min(2,Math.max(.2,Math.min((e-32)/this.width,(n-48)/this.height))),this.panX=Math.max(16,(e-this.width*this.scale)/2),this.panY=44}clip(t){return t.length>20?t.slice(0,19)+"\u2026":t}icon(t){return{completed:"\u2713",running:"\u25CF",failed:"\u2717",skipped:"\u2298"}[t]??"\u25CB"}fillFor(t){return{completed:"rgba(34,197,94,.14)",running:"rgba(59,130,246,.16)",failed:"rgba(239,68,68,.14)"}[t]??"rgba(30,41,59,.9)"}strokeFor(t){return{completed:"#22c55e",running:"#3b82f6",failed:"#ef4444",skipped:"#64748b"}[t]??"#475569"}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=N({type:i,selectors:[["app-dag-graph"]],viewQuery:function(e,n){if(e&1&&se(We,5),e&2){let r;ae(r=de())&&(n.hostRef=r.first)}},inputs:{nodes:"nodes",edges:"edges",width:"width",height:"height"},outputs:{nodeClick:"nodeClick"},decls:16,vars:7,consts:[["host",""],[1,"relative","w-full","h-full","overflow-hidden","select-none","bg-slate-950/40",3,"wheel","mousedown","mousemove","mouseup","mouseleave"],[1,"absolute","top-2","left-2","z-10","flex","gap-1","items-center"],["type","button",1,"dag-btn",3,"click"],[1,"text-xs","text-slate-400","w-10","text-center","font-mono"],["type","button",1,"dag-btn","px-2","w-auto",3,"click"],[1,"absolute","inset-0","w-full","h-full"],["fill","none","stroke","#475569","stroke-width","2","opacity","0.8",4,"ngFor","ngForOf"],["class","cursor-pointer",3,"click",4,"ngFor","ngForOf"],["fill","none","stroke","#475569","stroke-width","2","opacity","0.8"],[1,"cursor-pointer",3,"click"],["rx","9","stroke-width","2"],["x","16","font-size","15"],["x","34","font-size","13","fill","#e2e8f0"],["text-anchor","end","font-size","10","fill","#94a3b8",4,"ngIf"],["text-anchor","end","font-size","11","fill","#94a3b8",4,"ngIf"],["text-anchor","end","font-size","10","fill","#94a3b8"],["text-anchor","end","font-size","11","fill","#94a3b8"]],template:function(e,n){e&1&&(a(0,"div",1,0),g("wheel",function(d){return n.onWheel(d)})("mousedown",function(d){return n.onDown(d)})("mousemove",function(d){return n.onMove(d)})("mouseup",function(){return n.onUp()})("mouseleave",function(){return n.onUp()}),a(2,"div",2)(3,"button",3),g("click",function(d){return n.zoomBy(.8,d)}),l(4,"\u2212"),o(),a(5,"span",4),l(6),ce(7,"number"),o(),a(8,"button",3),g("click",function(d){return n.zoomBy(1.25,d)}),l(9,"+"),o(),a(10,"button",5),g("click",function(){return n.fit()}),l(11,"fit"),o()(),k(),a(12,"svg",6)(13,"g"),U(14,ze,1,1,"path",7)(15,Ue,8,14,"g",8),o()()()),e&2&&(s(6),H("",me(7,4,n.scale*100,"1.0-0"),"%"),s(7),C("transform","translate("+n.panX+","+n.panY+") scale("+n.scale+")"),s(),m("ngForOf",n.edgePaths),s(),m("ngForOf",n.nodes))},dependencies:[M,he,fe,be],styles:[".dag-btn[_ngcontent-%COMP%]{width:24px;height:24px;border:1px solid #334155;border-radius:6px;background:#1e293b;color:#94a3b8;font-size:13px;line-height:1}.dag-btn[_ngcontent-%COMP%]:hover{color:#e2e8f0}.dag-pulse[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_dagpulse 1.3s ease-in-out infinite}@keyframes _ngcontent-%COMP%_dagpulse{0%,to{opacity:1}50%{opacity:.45}}"]})};function L(i,t=""){let e=t===""?"":t+".",n=i.filter(u=>t===""||u.id===t||u.id.startsWith(e)),r=new Map(i.map(u=>[u.id,u])),d=new Map;for(let u of n){let x=t===""?u.id:u.id.slice(e.length),h=x.split(".")[0];if(!h)continue;let w=d.get(h);w||(w={key:e+h,label:h,leafIds:[],deeper:!1},d.set(h,w)),w.leafIds.push(u.id),x.includes(".")&&(w.deeper=!0)}let _=u=>{if(t!==""&&u!==t&&!u.startsWith(e))return;let h=(t===""?u:u.slice(e.length)).split(".")[0];return d.has(h)?e+h:void 0},p=[];for(let u of d.values()){let x=new Set;for(let h of u.leafIds)for(let w of r.get(h)?.dependsOn??[]){let q=_(w);q&&q!==u.key&&x.add(q)}p.push({key:u.key,label:u.label,isGroup:u.deeper,leafIds:u.leafIds,dependsOn:[...x]})}return p}var Fe=new Set(["completed","skipped"]);function Ge(i,t){let e=i.map(t);return e.some(n=>n==="failed")?"failed":e.some(n=>n==="running")?"running":e.length>0&&e.every(n=>n==="skipped")?"skipped":e.length>0&&e.every(n=>Fe.has(n))?"completed":e.some(n=>n==="completed")?"running":"pending"}function Ae(i,t){let e=i.map(t);return{done:e.filter(n=>Fe.has(n)).length,total:e.length}}function W(i,t,e=""){let n=L(i,e),r=Ie(n.map(p=>({key:p.key,dependsOn:p.dependsOn}))),d=n.map(p=>{let u=r.positions.get(p.key)??{x:0,y:0};return{key:p.key,label:p.label,isGroup:p.isGroup,status:p.isGroup?Ge(p.leafIds,t):t(p.leafIds[0]),progress:p.isGroup?Ae(p.leafIds,t):void 0,x:u.x,y:u.y}}),_=[];for(let p of n)for(let u of p.dependsOn)_.push({from:u,to:p.key});return{vms:d,edges:_,width:r.width,height:r.height}}function Ye(i,t){i&1&&(a(0,"span"),l(1," \u203A "),o())}function Xe(i,t){if(i&1){let e=D();a(0,"button",10),g("click",function(){let r=I(e).$implicit,d=c();return S(d.goTo(r))}),l(1),o(),f(2,Ye,2,0,"span")}if(i&2){let e=t.$implicit,n=t.$index,r=t.$count,d=c();s(),v(d.label(e)),s(),b(n!==r-1?2:-1)}}function Qe(i,t){i&1&&(a(0,"div",11),l(1,"\u0110ang t\u1EA3i output\u2026"),o())}function Je(i,t){if(i&1&&(a(0,"div",12),l(1),o()),i&2){let e=c(2);s(),v(e.leafError)}}function Ze(i,t){if(i&1&&(a(0,"pre",13),l(1),o()),i&2){let e=c(3);s(),v(e.leafData==null?null:e.leafData.error)}}function et(i,t){if(i&1&&(a(0,"pre",14),l(1),o()),i&2){let e=c(3);s(),v(e.leafData==null?null:e.leafData.output)}}function tt(i,t){i&1&&(a(0,"div",15),l(1,"Kh\xF4ng c\xF3 output"),o())}function nt(i,t){if(i&1&&(f(0,Ze,2,1,"pre",13),f(1,et,2,1,"pre",14)(2,tt,2,0,"div",15)),i&2){let e=c(2);b(e.leafData!=null&&e.leafData.error?0:-1),s(),b(e.leafData!=null&&e.leafData.output?1:e.leafData!=null&&e.leafData.error?-1:2)}}function it(i,t){if(i&1&&(a(0,"div",8),f(1,Qe,2,0,"div",11)(2,Je,2,1,"div",12)(3,nt,3,2),o()),i&2){let e,n=c();s(),b((e=n.leafPhase)==="loading"?1:e==="error"?2:e==="loaded"?3:-1)}}function rt(i,t){if(i&1){let e=D();a(0,"app-dag-graph",16),g("nodeClick",function(r){I(e);let d=c();return S(d.onSubClick(r))}),o()}if(i&2){let e=c();m("nodes",e.subNodes)("edges",e.subEdges)("width",e.subWidth)("height",e.subHeight)}}var z=class i{api=y(P);runId="";nodes=[];statusOf=()=>"pending";rootKey="";close=new $;breadcrumb=[];isLeaf=!1;subNodes=[];subEdges=[];subWidth=0;subHeight=0;leafPhase="loading";leafData;leafError="";ngOnChanges(t){if(t.rootKey){this.breadcrumb=[],this.goTo(this.rootKey);return}(t.nodes||t.statusOf)&&!this.isLeaf&&this.breadcrumb.length&&this.buildSubView(this.breadcrumb[this.breadcrumb.length-1])}goTo(t){let e=this.breadcrumb.indexOf(t);this.breadcrumb=e>=0?this.breadcrumb.slice(0,e+1):[...this.breadcrumb,t];let n=L(this.nodes,t);if(this.isLeaf=n.length===0,this.isLeaf){this.loadLeaf(t);return}this.buildSubView(t)}buildSubView(t){let e=W(this.nodes,this.statusOf,t);this.subNodes=e.vms,this.subEdges=e.edges,this.subWidth=e.width,this.subHeight=e.height}onSubClick(t){this.goTo(t)}loadLeaf(t){this.leafPhase="loading",this.api.getNodeOutput(this.runId,t).subscribe({next:e=>{this.leafData={output:e.output,error:e.error},this.leafPhase="loaded"},error:e=>{this.leafError=e?.error?.error??"Kh\xF4ng t\u1EA3i \u0111\u01B0\u1EE3c output.",this.leafPhase="error"}})}label(t){return t.split(".").pop()??t}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=N({type:i,selectors:[["app-node-inspector"]],inputs:{runId:"runId",nodes:"nodes",statusOf:"statusOf",rootKey:"rootKey"},outputs:{close:"close"},features:[re],decls:13,vars:1,consts:[[1,"absolute","inset-0","z-20","flex"],[1,"absolute","inset-0","bg-black/40",3,"click"],[1,"relative","m-3","flex-1","max-w-[78%]","bg-slate-900","border","border-slate-700","rounded-xl","shadow-2xl","flex","flex-col","overflow-hidden"],[1,"flex","items-center","gap-2","px-4","py-2.5","border-b","border-slate-800","text-sm"],[1,"text-slate-500"],[1,"flex-1"],["type","button",1,"text-slate-400","hover:text-slate-100",3,"click"],[1,"flex-1","min-h-0","relative"],[1,"absolute","inset-0","overflow-auto","p-4","text-xs"],[3,"nodes","edges","width","height"],["type","button",1,"hover:text-slate-200",3,"click"],[1,"text-slate-500","animate-pulse"],[1,"text-red-400"],[1,"font-mono","text-red-300","bg-red-500/10","border","border-red-500/30","rounded","p-3","mb-2","whitespace-pre-wrap","break-words"],[1,"font-mono","text-slate-300","bg-slate-950","border","border-slate-800","rounded","p-3","whitespace-pre-wrap","break-words"],[1,"text-slate-500","italic"],[3,"nodeClick","nodes","edges","width","height"]],template:function(e,n){e&1&&(a(0,"div",0)(1,"div",1),g("click",function(){return n.close.emit()}),o(),a(2,"div",2)(3,"div",3)(4,"span",4),O(5,Xe,3,2,null,null,oe),o(),E(7,"span",5),a(8,"button",6),g("click",function(){return n.close.emit()}),l(9,"\u2715"),o()(),a(10,"div",7),f(11,it,4,1,"div",8)(12,rt,1,4,"app-dag-graph",9),o()()()),e&2&&(s(5),F(n.breadcrumb),s(6),b(n.isLeaf?11:12))},dependencies:[M,R],encapsulation:2})};var ot=(i,t)=>t.id,st=(i,t)=>t.key;function at(i,t){if(i&1&&(a(0,"span",6),l(1),o()),i&2){let e=c();m("ngClass",e.statusClass(e.run.status)),s(),A(" ",e.statusIcon(e.run.status)," ",e.run.status," ")}}function dt(i,t){i&1&&(a(0,"div",10),l(1,"Kh\xF4ng d\u1EF1ng \u0111\u01B0\u1EE3c s\u01A1 \u0111\u1ED3 ph\u1EE5 thu\u1ED9c \u2014 hi\u1EC3n th\u1ECB theo th\u1EE9 t\u1EF1 ch\u1EA1y."),o())}function lt(i,t){if(i&1){let e=D();a(0,"app-node-inspector",23),g("close",function(){I(e);let r=c();return S(r.closeInspector())}),o()}if(i&2){let e=c();m("runId",e.run.runId)("nodes",e.dagInputNodes)("statusOf",e.statusOf)("rootKey",e.inspectorKey)}}function ut(i,t){if(i&1&&(a(0,"div",24)(1,"div",25),E(2,"div",26),o()()),i&2){let e=t.$implicit,n=c();G("justify-end",e.role==="user"),s(),m("ngClass",e.role==="user"?"bg-indigo-500/15 text-indigo-100":"bg-slate-800 text-slate-200"),s(),m("innerHTML",n.render(e.content),B)}}function pt(i,t){i&1&&(a(0,"div",16),l(1,"\u2014 phi\xEAn hi\u1EC7n t\u1EA1i \u2014"),o())}function ct(i,t){if(i&1&&(a(0,"div",27),l(1),o()),i&2){let e=c().$implicit;s(),A(" \u23F8 ",e.nodeId||"gate","",e.iteration!==void 0?" \xB7 iteration "+e.iteration:""," ")}}function mt(i,t){if(i&1&&(a(0,"div",24)(1,"div",25),f(2,ct,2,2,"div",27),E(3,"div",26),o()()),i&2){let e=t.$implicit,n=c();G("justify-end",e.role==="user"),s(),m("ngClass",e.role==="user"?"bg-indigo-500/15 text-indigo-100":"bg-slate-800 text-slate-200"),s(),b(e.role==="gate"?2:-1),s(),m("innerHTML",n.render(e.text),B)}}function gt(i,t){if(i&1&&(a(0,"div",19),l(1),o()),i&2){let e=c();s(),v(e.gate.errorMessage())}}var Ve=class i{route=y(ve);api=y(P);sse=y(j);run;gate=new K;feed=[];messages=[];draft="";runId="";sseSub;timerInterval;focusAnswerOnShow=!1;dagNodes=[];dagEdges=[];dagWidth=0;dagHeight=0;dagInputNodes=[];statusMap=new Map;ngOnInit(){this.runId=this.route.snapshot.paramMap.get("runId"),this.focusAnswerOnShow=this.route.snapshot.fragment==="answer",this.api.getRun(this.runId).subscribe(t=>{this.run=t,t.conversationId&&this.api.getConversationMessages(t.conversationId).subscribe({next:e=>{this.messages=e.messages},error:()=>{this.messages=[]}}),this.rebuildDag(),this.stopTimerIfFinished(),this.syncGateFromRun()}),this.sseSub=this.sse.connect(this.runId).subscribe(t=>{this.handleSseEvent(t)}),this.timerInterval=setInterval(()=>{},1e3)}ngOnDestroy(){this.sseSub?.unsubscribe(),this.timerInterval&&clearInterval(this.timerInterval)}inspectorKey=null;onNodeClick(t){this.inspectorKey=t}closeInspector(){this.inspectorKey=null}hierInput(){let t=this.run?.graph?.nodes;if(t&&t.length)return t.map(n=>({id:n.id,dependsOn:n.dependsOn}));let e=this.run?Object.keys(this.run.nodes):[];return e.map((n,r)=>({id:n,dependsOn:r===0?[]:[e[r-1]]}))}statusOf=t=>this.statusMap.get(t)??"pending";syncStatusMap(){if(this.run)for(let[t,e]of Object.entries(this.run.nodes))this.statusMap.has(t)||this.statusMap.set(t,e.status)}rebuildDag(){if(!this.run)return;this.syncStatusMap(),this.dagInputNodes=this.hierInput();let t=W(this.dagInputNodes,this.statusOf,"");this.dagNodes=t.vms,this.dagEdges=t.edges,this.dagWidth=t.width,this.dagHeight=t.height}handleSseEvent(t){let e=t.data,n=e.nodeId;switch(t.type){case"run:state":{let r=e;this.run=ee(Z({},r),{graph:r.graph??this.run?.graph,conversationId:r.conversationId??this.run?.conversationId}),this.rebuildDag(),this.stopTimerIfFinished(),this.syncGateFromRun();break}case"run:pause":this.run&&(this.run.status="paused"),this.gate.pauseReceived(e),this.noteGateInFeed(),this.maybeFocusAnswer();break;case"run:cancel":this.run&&(this.run.status="cancelled"),this.gate.runStateChanged("cancelled"),this.stopTimerIfFinished();break;case"node:start":this.updateNodeStatus(n,"running",void 0,{provider:e.provider,model:e.model});break;case"node:complete":this.updateNodeStatus(n,"completed",e.durationMs);break;case"node:skip":this.updateNodeStatus(n,"skipped");break;case"node:fail":this.updateNodeStatus(n,"failed");break;case"run:complete":this.run&&(this.run.status=e.success?"completed":"failed",this.gate.runStateChanged(this.run.status)),this.stopTimerIfFinished();break}}updateNodeStatus(t,e,n,r){this.statusMap.set(t,e),this.rebuildDag()}syncGateFromRun(){this.run&&(this.gate.runStateChanged(this.run.status,this.run),this.noteGateInFeed(),this.maybeFocusAnswer())}noteGateInFeed(){let t=this.gate.request();this.gate.visible()&&t&&(this.feed=Me(this.feed,t))}sendAnswer(){if(!this.gate.visible()||this.gate.phase()==="submitting")return;let t=this.draft.trim(),e=this.gate.submitAction();if(e==="resume"&&!t)return;this.gate.submitStarted(),(e==="resume"?this.api.resumeRun(this.runId,t):this.api.approveRun(this.runId,t||void 0)).subscribe({next:()=>{this.feed=Q(this.feed,e==="resume"?"answer":"approve",t),this.draft="",this.gate.submitSucceeded()},error:r=>this.gate.submitFailed(r?.error?.error??"Failed to send the answer.")})}rejectGate(){if(!this.gate.visible()||this.gate.phase()==="submitting")return;let t=prompt("Rejection reason","Rejected by operator");t!==null&&(this.gate.submitStarted(),this.api.rejectRun(this.runId,t||void 0).subscribe({next:()=>{this.feed=Q(this.feed,"reject",t),this.gate.submitSucceeded()},error:e=>this.gate.submitFailed(e?.error?.error??"Failed to reject the run.")}))}render(t){return Te(t)}maybeFocusAnswer(){!this.focusAnswerOnShow||!this.gate.visible()||(this.focusAnswerOnShow=!1,setTimeout(()=>{document.getElementById("gate-answer-panel")?.scrollIntoView({behavior:"smooth",block:"center"}),document.getElementById("gate-answer-input")?.focus()}))}stopTimerIfFinished(){!this.run||!X(this.run.status)||(Se(this.run),this.timerInterval&&(clearInterval(this.timerInterval),this.timerInterval=void 0))}statusClass(t){switch(t){case"completed":return"bg-green-500/10 text-green-400";case"failed":return"bg-red-500/10 text-red-400";case"running":return"bg-blue-500/10 text-blue-400";default:return"bg-slate-700 text-slate-400"}}statusIcon(t){switch(t){case"completed":return"\u2713";case"failed":return"\u2717";case"running":return"\u25CF";default:return"\u25CB"}}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=N({type:i,selectors:[["app-run-execution"]],decls:35,vars:17,consts:[[1,"flex","flex-col","h-[calc(100vh-6rem)]"],[1,"flex","items-center","mb-3","gap-2","text-sm","shrink-0"],["routerLink","/",1,"text-slate-500","hover:text-slate-300"],[1,"text-slate-600"],[1,"text-slate-300"],[1,"font-mono","text-slate-100"],[1,"text-xs","px-2","py-0.5","rounded","ml-2",3,"ngClass"],[1,"flex-1","flex","min-h-0","gap-3"],[1,"flex-[1.6]","min-w-0","border","border-slate-800","rounded-lg","overflow-hidden","relative"],[3,"nodeClick","nodes","edges","width","height"],[1,"absolute","bottom-2","left-2","text-[10px]","text-slate-500"],[3,"runId","nodes","statusOf","rootKey"],[1,"flex-1","min-w-0","flex","flex-col","border","border-slate-800","rounded-lg","overflow-hidden"],[1,"px-3","py-2","border-b","border-slate-800","text-sm","text-slate-200","shrink-0"],[1,"flex-1","overflow-auto","p-3","space-y-2"],[1,"flex",3,"justify-end"],[1,"text-[10px]","text-slate-600","text-center"],["id","gate-answer-panel",1,"border-t","border-slate-800","p-3","shrink-0","bg-slate-900/40"],["id","gate-answer-input","rows","2",1,"w-full","rounded","border","border-slate-700","bg-slate-950","p-2","text-sm","text-slate-100","focus:border-amber-500","focus:outline-none",3,"ngModelChange","ngModel","disabled","placeholder"],[1,"text-xs","text-red-400","mt-1"],[1,"flex","gap-2","mt-2"],["type","button",1,"rounded","bg-amber-500","px-3","py-1.5","text-sm","font-semibold","text-slate-950","hover:bg-amber-400","disabled:opacity-40","disabled:cursor-not-allowed",3,"click","disabled"],["type","button",1,"rounded","border","border-red-500/50","px-3","py-1.5","text-sm","text-red-300","hover:bg-red-500/10","disabled:opacity-40",3,"click","disabled"],[3,"close","runId","nodes","statusOf","rootKey"],[1,"flex"],[1,"max-w-[90%]","rounded-lg","px-3","py-2","text-sm",3,"ngClass"],[3,"innerHTML"],[1,"text-[10px]","uppercase","tracking-wide","text-amber-400","mb-1"]],template:function(e,n){e&1&&(a(0,"div",0)(1,"div",1)(2,"a",2),l(3,"Dashboard"),o(),a(4,"span",3),l(5,"\u203A"),o(),a(6,"span",4),l(7),o(),a(8,"span",3),l(9,"\u203A"),o(),a(10,"span",5),l(11),o(),f(12,at,2,3,"span",6),o(),a(13,"div",7)(14,"div",8)(15,"app-dag-graph",9),g("nodeClick",function(d){return n.onNodeClick(d)}),o(),f(16,dt,2,0,"div",10),f(17,lt,1,4,"app-node-inspector",11),o(),a(18,"div",12)(19,"div",13),l(20,"\u{1F4AC} H\u1ED9i tho\u1EA1i"),o(),a(21,"div",14),O(22,ut,3,4,"div",15,ot),f(24,pt,2,0,"div",16),O(25,mt,4,5,"div",15,st),o(),a(27,"div",17)(28,"textarea",18),pe("ngModelChange",function(d){return ue(n.draft,d)||(n.draft=d),d}),o(),f(29,gt,2,1,"div",19),a(30,"div",20)(31,"button",21),g("click",function(){return n.sendAnswer()}),l(32),o(),a(33,"button",22),g("click",function(){return n.rejectGate()}),l(34," T\u1EEB ch\u1ED1i "),o()()()()()()),e&2&&(s(7),v(n.run==null?null:n.run.workflow),s(4),v(n.run==null?null:n.run.runId),s(),b(n.run?12:-1),s(3),m("nodes",n.dagNodes)("edges",n.dagEdges)("width",n.dagWidth)("height",n.dagHeight),s(),b(!(n.run==null||n.run.graph==null||n.run.graph.nodes==null)&&n.run.graph.nodes.length?-1:16),s(),b(n.inspectorKey?17:-1),s(5),F(n.messages),s(2),b(n.messages.length&&n.feed.length?24:-1),s(),F(n.feed),s(3),le("ngModel",n.draft),m("disabled",n.gate.phase()==="submitting")("placeholder",n.gate.visible()?n.gate.submitAction()==="resume"?"Nh\u1EADp c\xE2u tr\u1EA3 l\u1EDDi\u2026":"Ph\u1EA3n h\u1ED3i (tu\u1EF3 ch\u1ECDn)\u2026":"Ch\u1EC9 tr\u1EA3 l\u1EDDi \u0111\u01B0\u1EE3c khi run \u0111ang t\u1EA1m d\u1EEBng."),s(),b(n.gate.errorMessage()?29:-1),s(2),m("disabled",!n.gate.visible()||n.gate.phase()==="submitting"||n.gate.submitAction()==="resume"&&!n.draft.trim()),s(),H(" ",n.gate.phase()==="submitting"?"\u0110ang g\u1EEDi\u2026":"G\u1EEDi"," "),s(),m("disabled",!n.gate.visible()||n.gate.phase()==="submitting"))},dependencies:[M,ge,Ee,xe,ye,Ce,_e,R,z],encapsulation:2})};export{Ve as RunExecutionComponent};
@@ -1 +0,0 @@
1
- @layer properties;@layer theme,base,components,utilities;@layer theme{:root,:host{--color-red-300: oklch(80.8% .114 19.571);--color-red-400: oklch(70.4% .191 22.216);--color-red-500: oklch(63.7% .237 25.331);--color-amber-400: oklch(82.8% .189 84.429);--color-amber-500: oklch(76.9% .188 70.08);--color-green-400: oklch(79.2% .209 151.711);--color-green-500: oklch(72.3% .219 149.579);--color-blue-400: oklch(70.7% .165 254.624);--color-blue-500: oklch(62.3% .214 259.815);--color-blue-600: oklch(54.6% .245 262.881);--color-indigo-100: oklch(93% .034 272.788);--color-indigo-500: oklch(58.5% .233 277.117);--color-slate-100: oklch(96.8% .007 247.896);--color-slate-200: oklch(92.9% .013 255.508);--color-slate-300: oklch(86.9% .022 252.894);--color-slate-400: oklch(70.4% .04 256.788);--color-slate-500: oklch(55.4% .046 257.417);--color-slate-600: oklch(44.6% .043 257.281);--color-slate-700: oklch(37.2% .044 257.287);--color-slate-800: oklch(27.9% .041 260.031);--color-slate-900: oklch(20.8% .042 265.755);--color-slate-950: oklch(12.9% .042 264.695);--color-black: #000;--color-white: #fff;--spacing: .25rem;--container-md: 28rem;--text-xs: .75rem;--text-xs--line-height: calc(1 / .75);--text-sm: .875rem;--text-sm--line-height: calc(1.25 / .875);--text-lg: 1.125rem;--text-lg--line-height: calc(1.75 / 1.125);--font-weight-semibold: 600;--tracking-wide: .025em;--radius-lg: .5rem;--radius-xl: .75rem;--ease-in-out: cubic-bezier(.4, 0, .2, 1);--animate-pulse: pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-font-family: Inter, ui-sans-serif, system-ui, sans-serif;--default-mono-font-family: "JetBrains Mono", ui-monospace, monospace}}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings, normal);font-variation-settings:var(--default-font-variation-settings, normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings, normal);font-variation-settings:var(--default-mono-font-variation-settings, normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px){::placeholder{color:currentcolor}@supports (color: color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.top-2{top:calc(var(--spacing) * 2)}.bottom-2{bottom:calc(var(--spacing) * 2)}.left-2{left:calc(var(--spacing) * 2)}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.m-3{margin:calc(var(--spacing) * 3)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-2{margin-left:calc(var(--spacing) * 2)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.table{display:table}.h-\[calc\(100vh-6rem\)\]{height:calc(100vh - 6rem)}.h-full{height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.w-10{width:calc(var(--spacing) * 10)}.w-auto{width:auto}.w-full{width:100%}.max-w-\[78\%\]{max-width:78%}.max-w-\[90\%\]{max-width:90%}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.flex-\[1\.6\]{flex:1.6}.shrink-0{flex-shrink:0}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-primary{border-color:var(--primary)}.border-red-500\/30{border-color:color-mix(in srgb,oklch(63.7% .237 25.331) 30%,transparent)}@supports (color: color-mix(in lab,red,red)){.border-red-500\/30{border-color:color-mix(in oklab,var(--color-red-500) 30%,transparent)}}.border-red-500\/50{border-color:color-mix(in srgb,oklch(63.7% .237 25.331) 50%,transparent)}@supports (color: color-mix(in lab,red,red)){.border-red-500\/50{border-color:color-mix(in oklab,var(--color-red-500) 50%,transparent)}}.border-slate-600{border-color:var(--color-slate-600)}.border-slate-700{border-color:var(--color-slate-700)}.border-slate-800{border-color:var(--color-slate-800)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black\/40{background-color:color-mix(in srgb,#000 40%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-black\/60{background-color:color-mix(in srgb,#000 60%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-blue-500\/10{background-color:color-mix(in srgb,oklch(62.3% .214 259.815) 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500) 10%,transparent)}}.bg-blue-600{background-color:var(--color-blue-600)}.bg-green-500\/10{background-color:color-mix(in srgb,oklch(72.3% .219 149.579) 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500) 10%,transparent)}}.bg-indigo-500\/15{background-color:color-mix(in srgb,oklch(58.5% .233 277.117) 15%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-indigo-500\/15{background-color:color-mix(in oklab,var(--color-indigo-500) 15%,transparent)}}.bg-red-500\/10{background-color:color-mix(in srgb,oklch(63.7% .237 25.331) 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.bg-slate-700{background-color:var(--color-slate-700)}.bg-slate-800{background-color:var(--color-slate-800)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-900\/40{background-color:color-mix(in srgb,oklch(20.8% .042 265.755) 40%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-slate-900\/40{background-color:color-mix(in oklab,var(--color-slate-900) 40%,transparent)}}.bg-slate-950{background-color:var(--color-slate-950)}.bg-slate-950\/40{background-color:color-mix(in srgb,oklch(12.9% .042 264.695) 40%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-slate-950\/40{background-color:color-mix(in oklab,var(--color-slate-950) 40%,transparent)}}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.text-center{text-align:center}.font-mono{font-family:JetBrains Mono,ui-monospace,monospace}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading, var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading, var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.font-semibold{--tw-font-weight: var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking: var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-400{color:var(--color-amber-400)}.text-blue-400{color:var(--color-blue-400)}.text-green-400{color:var(--color-green-400)}.text-indigo-100{color:var(--color-indigo-100)}.text-primary{color:var(--primary)}.text-red-300{color:var(--color-red-300)}.text-red-400{color:var(--color-red-400)}.text-slate-100{color:var(--color-slate-100)}.text-slate-200{color:var(--color-slate-200)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-950{color:var(--color-slate-950)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.shadow-2xl{--tw-shadow: 0 25px 50px -12px var(--tw-shadow-color, rgb(0 0 0 / .25));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur: blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.ease-in-out{--tw-ease: var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.hover\:bg-amber-400:hover{background-color:var(--color-amber-400)}}@media(hover:hover){.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}}@media(hover:hover){.hover\:bg-red-500\/10:hover{background-color:color-mix(in srgb,oklch(63.7% .237 25.331) 10%,transparent)}@supports (color: color-mix(in lab,red,red)){.hover\:bg-red-500\/10:hover{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}}@media(hover:hover){.hover\:text-slate-100:hover{color:var(--color-slate-100)}}@media(hover:hover){.hover\:text-slate-200:hover{color:var(--color-slate-200)}}@media(hover:hover){.hover\:text-slate-300:hover{color:var(--color-slate-300)}}.focus\:border-amber-500:focus{border-color:var(--color-amber-500)}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:outline-none:focus{--tw-outline-style: none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:40%}}:root{--background: oklch(.14 .005 260);--surface: oklch(.18 .008 260);--surface-elevated: oklch(.22 .01 260);--border: oklch(.28 .01 260);--border-bright: oklch(.35 .015 260);--text-primary: oklch(.93 .005 260);--text-secondary: oklch(.65 .01 260);--text-tertiary: oklch(.45 .01 260);--primary: oklch(.65 .18 250);--primary-foreground: oklch(.98 .005 260);--success: oklch(.65 .17 155);--warning: oklch(.75 .15 75);--error: oklch(.6 .2 25)}html,body{min-height:100%;background:var(--background);color:var(--text-primary);font-family:Inter,ui-sans-serif,system-ui,sans-serif}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--background)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--border-bright)}@property --tw-rotate-x{syntax: "*"; inherits: false;}@property --tw-rotate-y{syntax: "*"; inherits: false;}@property --tw-rotate-z{syntax: "*"; inherits: false;}@property --tw-skew-x{syntax: "*"; inherits: false;}@property --tw-skew-y{syntax: "*"; inherits: false;}@property --tw-space-y-reverse{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-border-style{syntax: "*"; inherits: false; initial-value: solid;}@property --tw-font-weight{syntax: "*"; inherits: false;}@property --tw-tracking{syntax: "*"; inherits: false;}@property --tw-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: "*"; inherits: false;}@property --tw-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: "*"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: "*"; inherits: false;}@property --tw-ring-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: "*"; inherits: false;}@property --tw-inset-ring-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: "*"; inherits: false;}@property --tw-ring-offset-width{syntax: "<length>"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: "*"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-outline-style{syntax: "*"; inherits: false; initial-value: solid;}@property --tw-blur{syntax: "*"; inherits: false;}@property --tw-brightness{syntax: "*"; inherits: false;}@property --tw-contrast{syntax: "*"; inherits: false;}@property --tw-grayscale{syntax: "*"; inherits: false;}@property --tw-hue-rotate{syntax: "*"; inherits: false;}@property --tw-invert{syntax: "*"; inherits: false;}@property --tw-opacity{syntax: "*"; inherits: false;}@property --tw-saturate{syntax: "*"; inherits: false;}@property --tw-sepia{syntax: "*"; inherits: false;}@property --tw-drop-shadow{syntax: "*"; inherits: false;}@property --tw-drop-shadow-color{syntax: "*"; inherits: false;}@property --tw-drop-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-drop-shadow-size{syntax: "*"; inherits: false;}@property --tw-ease{syntax: "*"; inherits: false;}@keyframes pulse{50%{opacity:.5}}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x: initial;--tw-rotate-y: initial;--tw-rotate-z: initial;--tw-skew-x: initial;--tw-skew-y: initial;--tw-space-y-reverse: 0;--tw-border-style: solid;--tw-font-weight: initial;--tw-tracking: initial;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-outline-style: solid;--tw-blur: initial;--tw-brightness: initial;--tw-contrast: initial;--tw-grayscale: initial;--tw-hue-rotate: initial;--tw-invert: initial;--tw-opacity: initial;--tw-saturate: initial;--tw-sepia: initial;--tw-drop-shadow: initial;--tw-drop-shadow-color: initial;--tw-drop-shadow-alpha: 100%;--tw-drop-shadow-size: initial;--tw-ease: initial}}}