@ngocsangairvds/vsaf 5.6.3 → 5.8.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 (24) hide show
  1. package/package.json +1 -1
  2. package/packages/cli/dist/server/routes/runs.d.ts +12 -0
  3. package/packages/cli/dist/server/routes/runs.d.ts.map +1 -1
  4. package/packages/cli/dist/server/routes/runs.js +53 -8
  5. package/packages/cli/dist/server/routes/runs.js.map +1 -1
  6. package/packages/web/dist/web/3rdpartylicenses.txt +0 -26
  7. package/packages/web/dist/web/browser/chunk-4R37VVI4.js +5 -0
  8. package/packages/web/dist/web/browser/chunk-67SQ7ZNG.js +1 -0
  9. package/packages/web/dist/web/browser/{chunk-4LHJGOIU.js → chunk-6H3AYIT3.js} +1 -1
  10. package/packages/web/dist/web/browser/{chunk-K4VRVZWF.js → chunk-7ELOO4IC.js} +1 -1
  11. package/packages/web/dist/web/browser/chunk-FE2VGLSN.js +1 -0
  12. package/packages/web/dist/web/browser/{chunk-OBMUVQWL.js → chunk-GR7SKUVU.js} +1 -1
  13. package/packages/web/dist/web/browser/{chunk-VJ3UNUDS.js → chunk-L7B3BT5E.js} +1 -1
  14. package/packages/web/dist/web/browser/{chunk-3LPWUDNW.js → chunk-MCW5ACIZ.js} +1 -1
  15. package/packages/web/dist/web/browser/{chunk-FWLQWWZ3.js → chunk-N3FOQ3O5.js} +1 -1
  16. package/packages/web/dist/web/browser/chunk-WNFSSUWZ.js +4 -0
  17. package/packages/web/dist/web/browser/index.html +2 -2
  18. package/packages/web/dist/web/browser/{main-7FONYLE6.js → main-NH3DOZDL.js} +1 -1
  19. package/packages/web/dist/web/browser/styles-5MTP4CCO.css +1 -0
  20. package/packages/web/dist/web/browser/chunk-FQUOTTEA.js +0 -4
  21. package/packages/web/dist/web/browser/chunk-UJHVWNPU.js +0 -1
  22. package/packages/web/dist/web/browser/chunk-UXRT7NQK.js +0 -1
  23. package/packages/web/dist/web/browser/chunk-W7ZKECPT.js +0 -5
  24. package/packages/web/dist/web/browser/styles-PWTTI45T.css +0 -1
@@ -1 +1 @@
1
- import{a as S,c as P,e as M,f as O,g as A}from"./chunk-FWLQWWZ3.js";import{Ba as f,La as x,Ma as u,O as d,Oa as C,Pa as v,Qa as s,Ra as n,Rb as j,Sa as o,Sb as L,T as m,Ta as h,U as g,Xa as b,Ya as k,Za as c,fb as i,gb as _,nb as y,qa as a,yb as w}from"./chunk-W7ZKECPT.js";var E=[{path:"",loadComponent:()=>import("./chunk-3LPWUDNW.js").then(e=>e.DashboardComponent)},{path:"workflows",loadComponent:()=>import("./chunk-OBMUVQWL.js").then(e=>e.WorkflowsComponent)},{path:"workflows/builder",loadComponent:()=>import("./chunk-FQUOTTEA.js").then(e=>e.WorkflowBuilderComponent)},{path:"workflows/detail",loadComponent:()=>import("./chunk-4LHJGOIU.js").then(e=>e.WorkflowDetailComponent)},{path:"conversations",loadComponent:()=>import("./chunk-UJHVWNPU.js").then(e=>e.ConversationsComponent)},{path:"conversations/:conversationId",loadComponent:()=>import("./chunk-UJHVWNPU.js").then(e=>e.ConversationsComponent)},{path:"runs/:runId",loadComponent:()=>import("./chunk-UXRT7NQK.js").then(e=>e.RunExecutionComponent)},{path:"settings",loadComponent:()=>import("./chunk-VJ3UNUDS.js").then(e=>e.SettingsComponent)}];var I={providers:[w({eventCoalescing:!0}),A(E),j()]};var R=()=>({exact:!0}),T=(e,r)=>r.id;function V(e,r){if(e&1&&(n(0,"option",14),i(1),o()),e&2){let t=r.$implicit,p=c(2);s("value",t.id)("selected",t.id===p.selectedId()),a(),_(t.name)}}function F(e,r){if(e&1){let t=b();n(0,"select",13),k("change",function(z){m(t);let D=c();return g(D.onProjectChange(z))}),C(1,V,2,3,"option",14,T),o()}if(e&2){let t=c();a(),v(t.projects())}}var l=class e{projectService=d(L);projects=this.projectService.projects;selectedId=this.projectService.selectedId;constructor(){this.projectService.load()}onProjectChange(r){let t=r.target.value;!t||t===this.selectedId()||(this.projectService.select(t),document.location.reload())}static \u0275fac=function(t){return new(t||e)};static \u0275cmp=f({type:e,selectors:[["app-root"]],decls:21,vars:3,consts:[[1,"app-shell"],[1,"app-nav"],["routerLink","/",1,"brand-link"],[1,"brand-icon"],[1,"brand-name"],["routerLink","/","routerLinkActive","border-primary text-primary",1,"nav-link",3,"routerLinkActiveOptions"],["routerLink","/workflows","routerLinkActive","border-primary text-primary",1,"nav-link"],["routerLink","/conversations","routerLinkActive","border-primary text-primary",1,"nav-link"],["routerLink","/settings","routerLinkActive","border-primary text-primary",1,"nav-link"],[1,"nav-spacer"],["aria-label","Project","title","Switch project",1,"project-select"],[1,"version-pill"],[1,"app-main"],["aria-label","Project","title","Switch project",1,"project-select",3,"change"],[3,"value","selected"]],template:function(t,p){t&1&&(n(0,"div",0)(1,"nav",1)(2,"a",2)(3,"span",3),i(4,"V"),o(),n(5,"span",4),i(6,"VSAF"),o()(),n(7,"a",5),i(8," Dashboard "),o(),n(9,"a",6),i(10," Workflows "),o(),n(11,"a",7),i(12," Conversations "),o(),n(13,"a",8),i(14," Settings "),o(),n(15,"div",9),x(16,F,3,0,"select",10),n(17,"span",11),i(18,"v0.2.0"),o()()(),n(19,"main",12),h(20,"router-outlet"),o()()),t&2&&(a(7),s("routerLinkActiveOptions",y(2,R)),a(9),u(p.projects().length>1?16:-1))},dependencies:[P,M,O],styles:["[_nghost-%COMP%]{display:block;min-height:100vh;background:#101114;color:#e7e7ea}.app-shell[_ngcontent-%COMP%]{min-height:100vh;background:#101114;color:#e7e7ea}.app-nav[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;height:56px;border-bottom:1px solid #2b2d33;background:#17181d;padding:0 16px;box-sizing:border-box}.brand-link[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:9px;margin-right:18px;color:#f4f4f5;text-decoration:none}.brand-link[_ngcontent-%COMP%]:hover{opacity:.82}.brand-icon[_ngcontent-%COMP%]{display:grid;place-items:center;width:30px;height:30px;border-radius:7px;background:#6366f1;color:#fff;font-size:14px;font-weight:800}.brand-name[_ngcontent-%COMP%]{font-size:14px;font-weight:800}.nav-link[_ngcontent-%COMP%]{display:inline-flex;align-items:center;height:56px;border-bottom:2px solid transparent;padding:0 13px;color:#a1a1aa;font-size:14px;font-weight:650;text-decoration:none;box-sizing:border-box}.nav-link[_ngcontent-%COMP%]:hover{color:#f4f4f5}.nav-link.border-primary[_ngcontent-%COMP%], .nav-link.text-primary[_ngcontent-%COMP%]{border-bottom-color:#6366f1;color:#a5b4fc}.nav-spacer[_ngcontent-%COMP%]{margin-left:auto;display:flex;align-items:center;gap:12px}.project-select[_ngcontent-%COMP%]{border:1px solid #2b2d33;border-radius:7px;background:#20222a;color:#e7e7ea;padding:5px 8px;font:inherit;font-size:12px;max-width:220px;cursor:pointer}.project-select[_ngcontent-%COMP%]:focus{outline:none;border-color:#6366f1}.version-pill[_ngcontent-%COMP%]{border:1px solid #2b2d33;border-radius:7px;background:#20222a;color:#a1a1aa;padding:5px 8px;font-size:12px}.app-main[_ngcontent-%COMP%]{min-height:calc(100vh - 56px);overflow:auto;background:#101114}"]})};S(l,I).catch(e=>console.error(e));
1
+ import{a as S,c as P,e as M,f as O,g as A}from"./chunk-N3FOQ3O5.js";import{Ba as f,Bb as w,La as x,Ma as u,O as d,Oa as C,Pa as v,Qa as s,Ra as n,Sa as o,T as m,Ta as h,U as g,Vb as j,Wb as L,Xa as b,Ya as k,Za as c,ib as i,jb as _,qa as a,qb as y}from"./chunk-4R37VVI4.js";var E=[{path:"",loadComponent:()=>import("./chunk-MCW5ACIZ.js").then(e=>e.DashboardComponent)},{path:"workflows",loadComponent:()=>import("./chunk-GR7SKUVU.js").then(e=>e.WorkflowsComponent)},{path:"workflows/builder",loadComponent:()=>import("./chunk-WNFSSUWZ.js").then(e=>e.WorkflowBuilderComponent)},{path:"workflows/detail",loadComponent:()=>import("./chunk-6H3AYIT3.js").then(e=>e.WorkflowDetailComponent)},{path:"conversations",loadComponent:()=>import("./chunk-FE2VGLSN.js").then(e=>e.ConversationsComponent)},{path:"conversations/:conversationId",loadComponent:()=>import("./chunk-FE2VGLSN.js").then(e=>e.ConversationsComponent)},{path:"runs/:runId",loadComponent:()=>import("./chunk-67SQ7ZNG.js").then(e=>e.RunExecutionComponent)},{path:"settings",loadComponent:()=>import("./chunk-L7B3BT5E.js").then(e=>e.SettingsComponent)}];var I={providers:[w({eventCoalescing:!0}),A(E),j()]};var R=()=>({exact:!0}),T=(e,r)=>r.id;function V(e,r){if(e&1&&(n(0,"option",14),i(1),o()),e&2){let t=r.$implicit,p=c(2);s("value",t.id)("selected",t.id===p.selectedId()),a(),_(t.name)}}function F(e,r){if(e&1){let t=b();n(0,"select",13),k("change",function(z){m(t);let D=c();return g(D.onProjectChange(z))}),C(1,V,2,3,"option",14,T),o()}if(e&2){let t=c();a(),v(t.projects())}}var l=class e{projectService=d(L);projects=this.projectService.projects;selectedId=this.projectService.selectedId;constructor(){this.projectService.load()}onProjectChange(r){let t=r.target.value;!t||t===this.selectedId()||(this.projectService.select(t),document.location.reload())}static \u0275fac=function(t){return new(t||e)};static \u0275cmp=f({type:e,selectors:[["app-root"]],decls:21,vars:3,consts:[[1,"app-shell"],[1,"app-nav"],["routerLink","/",1,"brand-link"],[1,"brand-icon"],[1,"brand-name"],["routerLink","/","routerLinkActive","border-primary text-primary",1,"nav-link",3,"routerLinkActiveOptions"],["routerLink","/workflows","routerLinkActive","border-primary text-primary",1,"nav-link"],["routerLink","/conversations","routerLinkActive","border-primary text-primary",1,"nav-link"],["routerLink","/settings","routerLinkActive","border-primary text-primary",1,"nav-link"],[1,"nav-spacer"],["aria-label","Project","title","Switch project",1,"project-select"],[1,"version-pill"],[1,"app-main"],["aria-label","Project","title","Switch project",1,"project-select",3,"change"],[3,"value","selected"]],template:function(t,p){t&1&&(n(0,"div",0)(1,"nav",1)(2,"a",2)(3,"span",3),i(4,"V"),o(),n(5,"span",4),i(6,"VSAF"),o()(),n(7,"a",5),i(8," Dashboard "),o(),n(9,"a",6),i(10," Workflows "),o(),n(11,"a",7),i(12," Conversations "),o(),n(13,"a",8),i(14," Settings "),o(),n(15,"div",9),x(16,F,3,0,"select",10),n(17,"span",11),i(18,"v0.2.0"),o()()(),n(19,"main",12),h(20,"router-outlet"),o()()),t&2&&(a(7),s("routerLinkActiveOptions",y(2,R)),a(9),u(p.projects().length>1?16:-1))},dependencies:[P,M,O],styles:["[_nghost-%COMP%]{display:block;min-height:100vh;background:#101114;color:#e7e7ea}.app-shell[_ngcontent-%COMP%]{min-height:100vh;background:#101114;color:#e7e7ea}.app-nav[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;height:56px;border-bottom:1px solid #2b2d33;background:#17181d;padding:0 16px;box-sizing:border-box}.brand-link[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:9px;margin-right:18px;color:#f4f4f5;text-decoration:none}.brand-link[_ngcontent-%COMP%]:hover{opacity:.82}.brand-icon[_ngcontent-%COMP%]{display:grid;place-items:center;width:30px;height:30px;border-radius:7px;background:#6366f1;color:#fff;font-size:14px;font-weight:800}.brand-name[_ngcontent-%COMP%]{font-size:14px;font-weight:800}.nav-link[_ngcontent-%COMP%]{display:inline-flex;align-items:center;height:56px;border-bottom:2px solid transparent;padding:0 13px;color:#a1a1aa;font-size:14px;font-weight:650;text-decoration:none;box-sizing:border-box}.nav-link[_ngcontent-%COMP%]:hover{color:#f4f4f5}.nav-link.border-primary[_ngcontent-%COMP%], .nav-link.text-primary[_ngcontent-%COMP%]{border-bottom-color:#6366f1;color:#a5b4fc}.nav-spacer[_ngcontent-%COMP%]{margin-left:auto;display:flex;align-items:center;gap:12px}.project-select[_ngcontent-%COMP%]{border:1px solid #2b2d33;border-radius:7px;background:#20222a;color:#e7e7ea;padding:5px 8px;font:inherit;font-size:12px;max-width:220px;cursor:pointer}.project-select[_ngcontent-%COMP%]:focus{outline:none;border-color:#6366f1}.version-pill[_ngcontent-%COMP%]{border:1px solid #2b2d33;border-radius:7px;background:#20222a;color:#a1a1aa;padding:5px 8px;font-size:12px}.app-main[_ngcontent-%COMP%]{min-height:calc(100vh - 56px);overflow:auto;background:#101114}"]})};S(l,I).catch(e=>console.error(e));
@@ -0,0 +1 @@
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}}}
@@ -1,4 +0,0 @@
1
- import{b as H,d as J,e as K}from"./chunk-FWLQWWZ3.js";import{a as U,b as X,e as Q,g as Z,h as ee,i as te,j as ne,k as oe}from"./chunk-K4VRVZWF.js";import{Ba as V,Fa as _,Ib as j,Jb as q,Ka as F,Mb as G,O as M,Qa as u,Ra as i,Sa as r,T as m,Ta as O,U as g,Ua as D,V as S,Va as $,W as I,Xa as C,Ya as f,Za as p,a as B,b as T,bb as z,cb as L,db as P,eb as R,fb as d,gb as w,hb as v,ib as N,jb as h,kb as x,lb as b,ob as Y,qa as s,rb as A}from"./chunk-W7ZKECPT.js";var le=l=>["/runs",l];function de(l,n){if(l&1){let e=C();i(0,"button",39),f("dragstart",function(o){let a=m(e).$implicit,c=p();return g(c.onPaletteDragStart(o,a.type))})("click",function(){let o=m(e).$implicit,a=p();return g(a.addNode(o.type))}),i(1,"span",40),d(2),r(),i(3,"span")(4,"strong"),d(5),r(),i(6,"small"),d(7),r()()()}if(l&2){let e=n.$implicit,t=p();s(2),w(t.iconFor(e.type)),s(3),w(e.label),s(2),w(e.description)}}function se(l,n){if(l&1){let e=C();i(0,"button",41),f("click",function(){let o=m(e).$implicit,a=p();return g(a.loadWorkflow(o.id))}),i(1,"span"),d(2),r(),i(3,"small"),d(4),r()()}if(l&2){let e=n.$implicit;s(2),w(e.name),s(2),v("",e.nodeCount," nodes")}}function ce(l,n){if(l&1&&(i(0,"div",42),d(1),r()),l&2){let e=p();P("error",e.saveState==="error"),s(),v(" ",e.statusMessage," ")}}function pe(l,n){l&1&&(i(0,"div",43)(1,"h2"),d(2,"Drop nodes here"),r(),i(3,"p"),d(4,"Build a DAG by adding Bash, Command, and Prompt nodes."),r()())}function me(l,n){if(l&1&&(S(),O(0,"line")),l&2){let e=n.$implicit;F("x1",e.x1)("y1",e.y1)("x2",e.x2)("y2",e.y2)}}function ge(l,n){if(l&1){let e=C();i(0,"button",44),f("click",function(){let o=m(e).$implicit,a=p();return g(a.selectNode(o))})("dragstart",function(o){let a=m(e).$implicit,c=p();return g(c.onNodeDragStart(o,a))}),i(1,"span",45),d(2),r(),i(3,"span",46)(4,"strong"),d(5),r(),i(6,"small"),d(7),r()()()}if(l&2){let e=n.$implicit,t=p();L("left",e.x,"px")("top",e.y,"px"),P("selected",(t.selectedNode==null?null:t.selectedNode.id)===e.id),s(2),w(t.iconFor(e.type)),s(3),w(e.id),s(2),N("",e.type," \xB7 ",e.dependsOn.length||0," deps")}}function ue(l,n){if(l&1&&(i(0,"option",67),d(1),r()),l&2){let e=n.$implicit;u("value",e.name)("disabled",!e.available),s(),N(" ",e.name,"",e.available?"":" \u2014 not available on this machine"," ")}}function fe(l,n){if(l&1&&O(0,"option",68),l&2){let e=n.$implicit;u("value",e)}}function _e(l,n){if(l&1){let e=C();i(0,"label",69)(1,"input",70),f("change",function(o){let a=m(e).$implicit,c=p(2);return g(c.toggleDependency(a.id,o))}),r(),i(2,"span"),d(3),r()()}if(l&2){let e=n.$implicit,t=p(2);s(),u("checked",t.selectedNode.dependsOn.includes(e.id)),s(2),w(e.id)}}function we(l,n){if(l&1){let e=C();D(0),i(1,"div",34),d(2,"Inspector"),r(),i(3,"label",47),d(4,"Node ID"),r(),i(5,"input",48),f("ngModelChange",function(o){m(e);let a=p();return g(a.renameSelectedNode(o))}),r(),i(6,"label",49),d(7,"Type"),r(),i(8,"select",50),b("ngModelChange",function(o){m(e);let a=p();return x(a.selectedNode.type,o)||(a.selectedNode.type=o),g(o)}),f("ngModelChange",function(){m(e);let o=p();return g(o.refreshYaml())}),i(9,"option",51),d(10,"bash"),r(),i(11,"option",52),d(12,"command"),r(),i(13,"option",53),d(14,"prompt"),r()(),i(15,"label",54),d(16,"Content"),r(),i(17,"textarea",55),b("ngModelChange",function(o){m(e);let a=p();return x(a.selectedNode.content,o)||(a.selectedNode.content=o),g(o)}),f("ngModelChange",function(){m(e);let o=p();return g(o.refreshYaml())}),r(),i(18,"label",56),d(19,"Provider"),r(),i(20,"select",57),b("ngModelChange",function(o){m(e);let a=p();return x(a.selectedNode.provider,o)||(a.selectedNode.provider=o),g(o)}),f("ngModelChange",function(){m(e);let o=p();return g(o.refreshYaml())}),i(21,"option",58),d(22,"(inherit workflow)"),r(),_(23,ue,2,4,"option",59),r(),i(24,"label",60),d(25,"Model"),r(),i(26,"input",61),b("ngModelChange",function(o){m(e);let a=p();return x(a.selectedNode.model,o)||(a.selectedNode.model=o),g(o)}),f("ngModelChange",function(){m(e);let o=p();return g(o.refreshYaml())}),r(),i(27,"datalist",62),_(28,fe,1,1,"option",63),r(),i(29,"label",64),d(30,"Depends on"),r(),_(31,_e,4,2,"label",65),i(32,"button",66),f("click",function(){m(e);let o=p();return g(o.deleteSelectedNode())}),d(33,"Delete Node"),r(),$()}if(l&2){let e=p();s(5),u("ngModel",e.selectedNode.id),s(3),h("ngModel",e.selectedNode.type),s(9),h("ngModel",e.selectedNode.content),s(3),h("ngModel",e.selectedNode.provider),s(3),u("ngForOf",e.providers),s(3),h("ngModel",e.selectedNode.model),s(2),u("ngForOf",e.modelSuggestions),s(3),u("ngForOf",e.dependencyCandidates)}}function he(l,n){l&1&&(i(0,"div",34),d(1,"Inspector"),r(),i(2,"p",71),d(3,"Select a node to edit its ID, type, command body, and dependencies."),r())}function xe(l,n){if(l&1&&(i(0,"a",72)(1,"span")(2,"strong"),d(3),r(),i(4,"small"),d(5),r()(),i(6,"em"),d(7),r()()),l&2){let e=n.$implicit,t=p();u("routerLink",Y(6,le,e.runId)),s(3),w(e.workflow),s(2),w(e.runId),s(),R(t.statusClass(e.status)),s(),w(e.status)}}function be(l,n){l&1&&(i(0,"p",71),d(1,"No runs yet."),r())}var ie=class l{api=M(oe);router=M(J);route=M(H);palette=[{type:"bash",label:"Bash",description:"Run a shell step"},{type:"command",label:"Command",description:"Use a .vsaf command"},{type:"prompt",label:"Prompt",description:"Call an AI provider"}];workflowName="new-workflow";workflowFolder="";description="Draft workflow";nodes=[];selectedNode;workflows=[];runs=[];providers=[];yamlPreview="";saveState="idle";statusMessage="";draggingType;draggingNodeId;ngOnInit(){this.workflowFolder=W(this.route.snapshot.queryParamMap.get("folder")??""),this.refreshData(),this.resetBuilder();let n=this.route.snapshot.queryParamMap.get("edit");n&&this.loadWorkflow(n)}refreshData(){this.api.getWorkflows().subscribe(n=>this.workflows=n),this.api.getRuns().subscribe(n=>this.runs=n.slice().reverse().slice(0,8)),this.api.getProviders().subscribe({next:n=>this.providers=n.providers??[],error:()=>this.providers=[]})}get modelSuggestions(){let n=this.selectedNode?.provider||re;return this.providers.find(e=>e.name===n)?.defaultModels??[]}resetBuilder(){this.workflowName="new-workflow",this.description="Draft workflow",this.nodes=[this.makeNode("bash",80,100,"setup"),this.makeNode("command",330,170,"review")],this.nodes[1].dependsOn=[this.nodes[0].id],this.selectedNode=this.nodes[0],this.setStatus(""),this.refreshYaml()}get workflowId(){let n=W(this.workflowFolder),e=y(this.workflowName);return n?`${n}/${e}`:e}onPaletteDragStart(n,e){this.draggingType=e,n.dataTransfer?.setData("application/x-vsaf-node-type",e),n.dataTransfer?.setData("text/plain",e)}onNodeDragStart(n,e){this.draggingNodeId=e.id,n.dataTransfer?.setData("application/x-vsaf-node-id",e.id)}onCanvasDragOver(n){n.preventDefault()}onCanvasDrop(n){n.preventDefault();let e=n.currentTarget.getBoundingClientRect(),t=Math.max(18,n.clientX-e.left-95),o=Math.max(18,n.clientY-e.top-24),a=n.dataTransfer?.getData("application/x-vsaf-node-id")||this.draggingNodeId;if(a){let k=this.nodes.find(ae=>ae.id===a);k&&(k.x=t,k.y=o,this.selectNode(k),this.refreshYaml()),this.draggingNodeId=void 0;return}let c=n.dataTransfer?.getData("application/x-vsaf-node-type")||this.draggingType;c&&this.addNode(c,t,o),this.draggingType=void 0}addNode(n,e=90+this.nodes.length*34,t=90+this.nodes.length*42){let o=this.makeNode(n,e,t);this.nodes=[...this.nodes,o],this.selectNode(o),this.refreshYaml()}selectNode(n){this.selectedNode=n}renameSelectedNode(n){if(!this.selectedNode)return;let e=y(n);if(!e)return;let t=this.selectedNode.id;if(t!==e){if(this.nodes.some(o=>o.id===e)){this.setStatus(`Node ID already exists: ${e}`,"error");return}this.selectedNode.id=e;for(let o of this.nodes)o.dependsOn=o.dependsOn.map(a=>a===t?e:a);this.refreshYaml()}}toggleDependency(n,e){if(!this.selectedNode)return;e.target.checked?this.selectedNode.dependsOn=[...new Set([...this.selectedNode.dependsOn,n])]:this.selectedNode.dependsOn=this.selectedNode.dependsOn.filter(o=>o!==n),this.refreshYaml()}deleteSelectedNode(){if(!this.selectedNode)return;let n=this.selectedNode.id;this.nodes=this.nodes.filter(e=>e.id!==n).map(e=>T(B({},e),{dependsOn:e.dependsOn.filter(t=>t!==n)})),this.selectedNode=this.nodes[0],this.refreshYaml()}loadWorkflow(n){this.api.getWorkflow(n).subscribe(e=>{let t=e.id.lastIndexOf("/");this.workflowFolder=t>=0?e.id.slice(0,t):"",this.workflowName=t>=0?e.id.slice(t+1):e.id,this.description=e.description||"Workflow loaded from disk",this.nodes=e.nodes.map((o,a)=>({id:o.id,type:o.type,title:o.id,content:o.content,dependsOn:o.dependsOn,provider:o.provider??"",model:o.model??"",x:80+a%3*250,y:80+Math.floor(a/3)*120})),this.selectedNode=this.nodes[0],this.setStatus(`Loaded ${e.name}`),this.refreshYaml()})}saveWorkflow(){this.saveCurrentWorkflow()}runWorkflow(){this.saveCurrentWorkflow(n=>{this.api.startRun(n,"").subscribe({next:e=>this.router.navigate(["/runs",e.runId]),error:e=>this.setStatus(e?.error?.error??e?.message??"Run failed","error")})})}refreshYaml(){this.yamlPreview=ye(this.workflowName,this.description,this.nodes),this.saveState==="saved"&&(this.saveState="idle")}get dependencyCandidates(){return this.selectedNode?this.nodes.filter(n=>n.id!==this.selectedNode.id):[]}get edges(){let n=new Map(this.nodes.map(t=>[t.id,t])),e=[];for(let t of this.nodes)for(let o of t.dependsOn){let a=n.get(o);a&&e.push({x1:a.x+190,y1:a.y+28,x2:t.x,y2:t.y+28})}return e}iconFor(n){switch(n){case"bash":return"$";case"command":return"/";case"prompt":return"AI"}}statusClass(n){switch(n){case"completed":return"status-completed";case"failed":return"status-failed";case"running":return"status-running";default:return"status-default"}}saveCurrentWorkflow(n){let e=y(this.workflowName),t=W(this.workflowFolder),o=t?`${t}/${e}`:e;if(!e||this.nodes.length===0){this.setStatus("Workflow name and at least one node are required.","error");return}this.workflowName=e,this.refreshYaml(),this.saveState="saving",this.api.saveWorkflow(o,this.yamlPreview).subscribe({next:()=>{this.saveState="saved",this.setStatus(`Saved ${o}`),this.refreshData(),n?.(o)},error:a=>{this.saveState="error",this.setStatus(a?.error?.error??a?.message??"Save failed","error")}})}makeNode(n,e,t,o=n){let a=ve(this.nodes.map(c=>c.id),`${n}-${o}`);return{id:a,type:n,title:a,content:Ce(n,a),dependsOn:[],provider:"",model:"",x:e,y:t}}setStatus(n,e="idle"){this.statusMessage=n,this.saveState=e}static \u0275fac=function(e){return new(e||l)};static \u0275cmp=V({type:l,selectors:[["app-workflow-builder"]],decls:63,vars:19,consts:[["noSelection",""],[1,"builder-shell"],[1,"sidebar"],[1,"brand-row"],[1,"brand-mark"],[1,"brand-title"],[1,"brand-subtitle"],["for","workflow-folder",1,"field-label"],["id","workflow-folder","placeholder","e.g. sdlc/release",1,"text-input",3,"ngModelChange","ngModel"],["for","workflow-name",1,"field-label"],["id","workflow-name",1,"text-input",3,"ngModelChange","ngModel"],["for","workflow-description",1,"field-label"],["id","workflow-description","rows","3",1,"text-area",3,"ngModelChange","ngModel"],[1,"section-title"],["type","button","class","palette-item","draggable","true",3,"dragstart","click",4,"ngFor","ngForOf"],["type","button","class","workflow-link",3,"click",4,"ngFor","ngForOf"],[1,"workspace"],[1,"toolbar"],[1,"toolbar-actions"],["type","button",1,"ghost-button",3,"click"],["type","button",1,"primary-button",3,"click","disabled"],["type","button",1,"run-button",3,"click","disabled"],["class","status-row",3,"error",4,"ngIf"],[1,"builder-grid"],[1,"canvas",3,"dragover","drop"],[1,"canvas-grid"],["class","empty-state",4,"ngIf"],["aria-hidden","true",1,"edges"],[4,"ngFor","ngForOf"],["type","button","class","node-card","draggable","true",3,"selected","left","top","click","dragstart",4,"ngFor","ngForOf"],[1,"inspector"],[4,"ngIf","ngIfElse"],[1,"bottom-grid"],[1,"yaml-panel"],[1,"panel-title"],[1,"yaml-editor",3,"ngModelChange","ngModel"],[1,"runs-panel"],["class","run-row",3,"routerLink",4,"ngFor","ngForOf"],["class","muted",4,"ngIf"],["type","button","draggable","true",1,"palette-item",3,"dragstart","click"],[1,"palette-icon"],["type","button",1,"workflow-link",3,"click"],[1,"status-row"],[1,"empty-state"],["type","button","draggable","true",1,"node-card",3,"click","dragstart"],[1,"node-kind"],[1,"node-copy"],["for","node-id",1,"field-label"],["id","node-id",1,"text-input",3,"ngModelChange","ngModel"],["for","node-type",1,"field-label"],["id","node-type",1,"text-input",3,"ngModelChange","ngModel"],["value","bash"],["value","command"],["value","prompt"],["for","node-content",1,"field-label"],["id","node-content","rows","7",1,"text-area","mono",3,"ngModelChange","ngModel"],["for","node-provider",1,"field-label"],["id","node-provider",1,"text-input",3,"ngModelChange","ngModel"],["value",""],[3,"value","disabled",4,"ngFor","ngForOf"],["for","node-model",1,"field-label"],["id","node-model","list","builder-model-suggestions","placeholder","(inherit)",1,"text-input",3,"ngModelChange","ngModel"],["id","builder-model-suggestions"],[3,"value",4,"ngFor","ngForOf"],[1,"field-label"],["class","check-row",4,"ngFor","ngForOf"],["type","button",1,"danger-button",3,"click"],[3,"value","disabled"],[3,"value"],[1,"check-row"],["type","checkbox",3,"change","checked"],[1,"muted"],[1,"run-row",3,"routerLink"]],template:function(e,t){if(e&1){let o=C();i(0,"section",1)(1,"aside",2)(2,"div",3)(3,"div",4),d(4,"V"),r(),i(5,"div")(6,"div",5),d(7,"VSAF Builder"),r(),i(8,"div",6),d(9,"Workflow canvas"),r()()(),i(10,"label",7),d(11,"Folder"),r(),i(12,"input",8),b("ngModelChange",function(c){return m(o),x(t.workflowFolder,c)||(t.workflowFolder=c),g(c)}),r(),i(13,"label",9),d(14,"Workflow name"),r(),i(15,"input",10),b("ngModelChange",function(c){return m(o),x(t.workflowName,c)||(t.workflowName=c),g(c)}),f("ngModelChange",function(){return t.refreshYaml()}),r(),i(16,"label",11),d(17,"Description"),r(),i(18,"textarea",12),b("ngModelChange",function(c){return m(o),x(t.description,c)||(t.description=c),g(c)}),f("ngModelChange",function(){return t.refreshYaml()}),r(),i(19,"div",13),d(20,"Node Palette"),r(),_(21,de,8,3,"button",14),i(22,"div",13),d(23,"Existing"),r(),_(24,se,5,2,"button",15),r(),i(25,"main",16)(26,"header",17)(27,"div")(28,"h1"),d(29),r(),i(30,"p"),d(31),r()(),i(32,"div",18)(33,"button",19),f("click",function(){return t.resetBuilder()}),d(34,"New"),r(),i(35,"button",19),f("click",function(){return t.refreshData()}),d(36,"Reload"),r(),i(37,"button",20),f("click",function(){return t.saveWorkflow()}),d(38),r(),i(39,"button",21),f("click",function(){return t.runWorkflow()}),d(40,"Run"),r()()(),_(41,ce,2,3,"div",22),i(42,"div",23)(43,"section",24),f("dragover",function(c){return t.onCanvasDragOver(c)})("drop",function(c){return t.onCanvasDrop(c)}),O(44,"div",25),_(45,pe,5,0,"div",26),S(),i(46,"svg",27),_(47,me,1,4,"line",28),r(),_(48,ge,8,10,"button",29),r(),I(),i(49,"aside",30),_(50,we,34,8,"ng-container",31)(51,he,4,0,"ng-template",null,0,A),r()(),i(53,"section",32)(54,"div",33)(55,"div",34),d(56,"Workflow YAML"),r(),i(57,"textarea",35),b("ngModelChange",function(c){return m(o),x(t.yamlPreview,c)||(t.yamlPreview=c),g(c)}),r()(),i(58,"div",36)(59,"div",34),d(60,"Recent Runs"),r(),_(61,xe,8,8,"a",37)(62,be,2,0,"p",38),r()()()()}if(e&2){let o=z(52);s(12),h("ngModel",t.workflowFolder),s(3),h("ngModel",t.workflowName),s(3),h("ngModel",t.description),s(3),u("ngForOf",t.palette),s(3),u("ngForOf",t.workflows),s(5),w(t.workflowId||"untitled-workflow"),s(2),v("",t.nodes.length," nodes \xB7 drag from palette or click a node to edit"),s(6),u("disabled",t.saveState==="saving"),s(),v(" ",t.saveState==="saving"?"Saving...":"Save Workflow"," "),s(),u("disabled",t.nodes.length===0),s(2),u("ngIf",t.statusMessage),s(4),u("ngIf",t.nodes.length===0),s(2),u("ngForOf",t.edges),s(),u("ngForOf",t.nodes),s(2),u("ngIf",t.selectedNode)("ngIfElse",o),s(7),h("ngModel",t.yamlPreview),s(4),u("ngForOf",t.runs),s(),u("ngIf",t.runs.length===0)}},dependencies:[G,j,q,ne,ee,te,U,Z,X,Q,K],styles:["[_nghost-%COMP%]{display:block;min-height:calc(100vh - 56px);background:#101114;color:#e7e7ea}button[_ngcontent-%COMP%], input[_ngcontent-%COMP%], textarea[_ngcontent-%COMP%], select[_ngcontent-%COMP%]{font:inherit}.builder-shell[_ngcontent-%COMP%]{display:grid;grid-template-columns:280px minmax(0,1fr);min-height:calc(100vh - 56px)}.sidebar[_ngcontent-%COMP%]{border-right:1px solid #2b2d33;background:#17181d;padding:16px;overflow:auto}.brand-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;margin-bottom:22px}.brand-mark[_ngcontent-%COMP%]{display:grid;place-items:center;width:34px;height:34px;border-radius:8px;background:#6366f1;color:#fff;font-weight:700}.brand-title[_ngcontent-%COMP%]{font-size:15px;font-weight:700}.brand-subtitle[_ngcontent-%COMP%], .muted[_ngcontent-%COMP%], small[_ngcontent-%COMP%]{color:#9ca3af}.field-label[_ngcontent-%COMP%], .section-title[_ngcontent-%COMP%]{display:block;margin:14px 0 7px;color:#a1a1aa;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em}.text-input[_ngcontent-%COMP%], .text-area[_ngcontent-%COMP%]{width:100%;box-sizing:border-box;border:1px solid #333640;border-radius:7px;background:#101114;color:#f4f4f5;padding:9px 10px;outline:none}.text-input[_ngcontent-%COMP%]:focus, .text-area[_ngcontent-%COMP%]:focus, .yaml-editor[_ngcontent-%COMP%]:focus{border-color:#6366f1;box-shadow:0 0 0 2px #6366f12e}.text-area[_ngcontent-%COMP%]{resize:vertical}.mono[_ngcontent-%COMP%], .yaml-editor[_ngcontent-%COMP%]{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.palette-item[_ngcontent-%COMP%], .workflow-link[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;width:100%;border:1px solid #2b2d33;border-radius:8px;background:#1f2128;color:#e7e7ea;padding:10px;margin-bottom:8px;text-align:left;cursor:grab}.palette-item[_ngcontent-%COMP%]:hover, .workflow-link[_ngcontent-%COMP%]:hover{border-color:#4f46e5;background:#242633}.palette-icon[_ngcontent-%COMP%]{display:grid;place-items:center;width:28px;height:28px;border-radius:7px;background:#111827;color:#a5b4fc}.palette-item[_ngcontent-%COMP%] strong[_ngcontent-%COMP%], .workflow-link[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:block;font-size:13px}.palette-item[_ngcontent-%COMP%] small[_ngcontent-%COMP%], .workflow-link[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{display:block;font-size:11px;margin-top:2px}.workflow-link[_ngcontent-%COMP%]{justify-content:space-between;cursor:pointer}.workspace[_ngcontent-%COMP%]{min-width:0;padding:18px;overflow:auto}.toolbar[_ngcontent-%COMP%]{display:flex;justify-content:space-between;gap:16px;align-items:center;margin-bottom:12px}.toolbar[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{margin:0;font-size:20px}.toolbar[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:4px 0 0;color:#9ca3af;font-size:13px}.toolbar-actions[_ngcontent-%COMP%]{display:flex;gap:8px;flex-wrap:wrap}.ghost-button[_ngcontent-%COMP%], .primary-button[_ngcontent-%COMP%], .run-button[_ngcontent-%COMP%], .danger-button[_ngcontent-%COMP%]{border:1px solid #333640;border-radius:7px;padding:8px 12px;color:#f4f4f5;background:#20222a;cursor:pointer}.primary-button[_ngcontent-%COMP%]{background:#4f46e5;border-color:#4f46e5}.run-button[_ngcontent-%COMP%]{background:#059669;border-color:#059669}.danger-button[_ngcontent-%COMP%]{width:100%;margin-top:14px;background:#3f1d24;border-color:#7f1d1d;color:#fecaca}.primary-button[_ngcontent-%COMP%]:disabled, .run-button[_ngcontent-%COMP%]:disabled{opacity:.55;cursor:not-allowed}.status-row[_ngcontent-%COMP%]{border:1px solid #1f5f45;border-radius:8px;background:#092d22;color:#a7f3d0;padding:10px 12px;margin-bottom:12px;font-size:13px}.status-row.error[_ngcontent-%COMP%]{border-color:#7f1d1d;background:#2a1217;color:#fecaca}.builder-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(520px,1fr) 320px;gap:14px;min-height:470px}.canvas[_ngcontent-%COMP%]{position:relative;overflow:hidden;min-height:470px;border:1px solid #2b2d33;border-radius:8px;background:#15161b}.canvas-grid[_ngcontent-%COMP%]{position:absolute;inset:0;background-image:linear-gradient(#24262e 1px,transparent 1px),linear-gradient(90deg,#24262e 1px,transparent 1px);background-size:28px 28px;opacity:.45}.empty-state[_ngcontent-%COMP%]{position:absolute;inset:0;display:grid;place-content:center;text-align:center;color:#9ca3af;pointer-events:none}.empty-state[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0 0 6px;color:#e7e7ea}.edges[_ngcontent-%COMP%]{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.edges[_ngcontent-%COMP%] line[_ngcontent-%COMP%]{stroke:#6366f1;stroke-width:2;stroke-dasharray:5 5;opacity:.8}.node-card[_ngcontent-%COMP%]{position:absolute;z-index:2;display:flex;align-items:center;gap:10px;width:190px;border:1px solid #3f4250;border-radius:8px;background:#20222a;color:#f4f4f5;padding:11px;cursor:move;text-align:left;box-shadow:0 12px 28px #00000038}.node-card.selected[_ngcontent-%COMP%]{border-color:#818cf8;box-shadow:0 0 0 2px #6366f147,0 12px 28px #00000038}.node-kind[_ngcontent-%COMP%]{display:grid;place-items:center;width:30px;height:30px;border-radius:7px;background:#111827;color:#a5b4fc}.node-copy[_ngcontent-%COMP%] strong[_ngcontent-%COMP%], .node-copy[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.node-copy[_ngcontent-%COMP%]{min-width:0}.inspector[_ngcontent-%COMP%], .yaml-panel[_ngcontent-%COMP%], .runs-panel[_ngcontent-%COMP%]{border:1px solid #2b2d33;border-radius:8px;background:#17181d;padding:14px}.panel-title[_ngcontent-%COMP%]{margin-bottom:12px;font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:#d4d4d8}.check-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin:8px 0;color:#d4d4d8;font-size:13px}.bottom-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:14px;margin-top:14px}.yaml-editor[_ngcontent-%COMP%]{width:100%;min-height:260px;box-sizing:border-box;border:1px solid #333640;border-radius:7px;background:#0f1014;color:#d4d4d8;padding:12px;resize:vertical}.run-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;gap:12px;padding:10px 0;color:#e7e7ea;text-decoration:none;border-bottom:1px solid #252730}.run-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%], .run-row[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{display:block}.run-row[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px}.status-completed[_ngcontent-%COMP%]{color:#34d399}.status-failed[_ngcontent-%COMP%]{color:#f87171}.status-running[_ngcontent-%COMP%]{color:#60a5fa}.status-default[_ngcontent-%COMP%]{color:#a1a1aa}@media(max-width:980px){.builder-shell[_ngcontent-%COMP%], .builder-grid[_ngcontent-%COMP%], .bottom-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.sidebar[_ngcontent-%COMP%]{border-right:0;border-bottom:1px solid #2b2d33}.toolbar[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}}"]})};function Ce(l,n){switch(l){case"bash":return`echo "${n}"`;case"command":return n;case"prompt":return`Complete ${n} and summarize the result.`}}var re="claude";function ye(l,n,e){let t=[`name: ${y(l)||"new-workflow"}`,`description: ${E(n||"Draft workflow")}`,`provider: ${re}`,"model: sonnet","nodes:"];for(let o of e)if(t.push(` - id: ${o.id}`),o.dependsOn.length>0&&t.push(` depends_on: [${o.dependsOn.join(", ")}]`),o.provider&&t.push(` provider: ${o.provider}`),o.model&&t.push(` model: ${o.model}`),o.type==="bash")t.push(` bash: ${E(o.content||"echo ok")}`);else if(o.type==="command")t.push(` command: ${E(o.content||o.id)}`);else{t.push(" prompt: |");for(let a of(o.content||`Complete ${o.id}`).split(`
2
- `))t.push(` ${a}`)}return`${t.join(`
3
- `)}
4
- `}function y(l){return l.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")}function W(l){return l.split("/").map(y).filter(Boolean).join("/")}function ve(l,n){let e=y(n)||"node";if(!l.includes(e))return e;let t=2;for(;l.includes(`${e}-${t}`);)t++;return`${e}-${t}`}function E(l){return JSON.stringify(l)}export{ie as WorkflowBuilderComponent};
@@ -1 +0,0 @@
1
- import{b as T,e as L}from"./chunk-FWLQWWZ3.js";import{a as R,b as F,c as V,d as A,e as H,f as K,j as z,k as W}from"./chunk-K4VRVZWF.js";import{Ba as M,Ka as x,La as p,Ma as g,Mb as D,O as C,Oa as u,Pa as f,Qa as v,Ra as i,Sa as o,T as _,U as y,Xa as S,Ya as w,Za as l,da as d,db as O,fb as r,gb as m,ib as k,jb as P,kb as I,lb as E,ob as N,qa as a}from"./chunk-W7ZKECPT.js";function B(t){let n=t.metadata?.category;return n==="gate"?"gate":n==="workflow_status"?"status":"text"}function $(t){return t.title?t.title:t.runs.length>0?t.runs[0].workflow_name:t.id}var G=t=>["/conversations",t],h=(t,n)=>n.id;function q(t,n){t&1&&(i(0,"p",2),r(1,"No conversations yet. Start a run or send a message."),o())}function J(t,n){if(t&1&&(i(0,"span",8),r(1),o()),t&2){let e=n.$implicit;x("data-status",e.status),a(),k("",e.workflow_name," \xB7 ",e.status)}}function Q(t,n){if(t&1&&(i(0,"a",5)(1,"span",6),r(2),o(),i(3,"span",7),u(4,J,2,3,"span",8,h),o()()),t&2){let e=n.$implicit,s=l();O("active",e.id===s.selectedId()),v("routerLink",N(4,G,e.id)),a(2),m(s.label(e)),a(2),f(e.runs)}}function U(t,n){t&1&&(i(0,"p",2),r(1,"Select a conversation to view its messages."),o())}function X(t,n){if(t&1&&(i(0,"div",10)(1,"span",15),r(2),o(),i(3,"p",16),r(4),o()()),t&2){let e=n.$implicit,s=l(2);x("data-role",e.role)("data-kind",s.kind(e)),a(2),m(e.role),a(2),m(e.content)}}function Y(t,n){if(t&1&&(i(0,"p",14),r(1),o()),t&2){let e=l(2);a(),m(e.lastReply())}}function Z(t,n){if(t&1){let e=S();i(0,"div",9),u(1,X,5,4,"div",10,h),o(),i(3,"form",11),w("ngSubmit",function(){_(e);let c=l();return y(c.send())}),i(4,"input",12),E("ngModelChange",function(c){_(e);let b=l();return I(b.draft,c)||(b.draft=c),y(c)}),o(),i(5,"button",13),r(6,"Send"),o()(),p(7,Y,2,1,"p",14)}if(t&2){let e=l();a(),f(e.messages()),a(3),P("ngModel",e.draft),v("disabled",e.sending()),a(),v("disabled",e.sending()||!e.draft.trim()),a(2),g(e.lastReply()?7:-1)}}var j=class t{api=C(W);route=C(T);pollHandle;paramSub;conversations=d([]);messages=d([]);selectedId=d(null);sending=d(!1);lastReply=d("");draft="";ngOnInit(){this.paramSub=this.route.paramMap.subscribe(n=>{this.selectedId.set(n.get("conversationId")),this.refresh()}),this.pollHandle=setInterval(()=>this.refreshMessages(),4e3)}ngOnDestroy(){this.pollHandle&&clearInterval(this.pollHandle),this.paramSub?.unsubscribe()}label=$;kind=B;refresh(){this.api.listConversations().subscribe(n=>this.conversations.set(n.conversations)),this.refreshMessages()}refreshMessages(){let n=this.selectedId();n&&this.api.getConversationMessages(n).subscribe({next:e=>this.messages.set(e.messages),error:()=>this.messages.set([])})}send(){let n=this.selectedId(),e=this.draft.trim();!n||!e||(this.sending.set(!0),this.api.sendConversationMessage(n,e).subscribe({next:s=>{this.lastReply.set(s.reply),this.draft="",this.sending.set(!1),this.refresh()},error:()=>this.sending.set(!1)}))}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=M({type:t,selectors:[["app-conversations"]],decls:10,vars:2,consts:[[1,"conversations-layout"],[1,"conversations-sidebar"],[1,"empty"],[1,"conversation-item",3,"active","routerLink"],[1,"chat-panel"],[1,"conversation-item",3,"routerLink"],[1,"conversation-title"],[1,"conversation-meta"],[1,"run-chip"],[1,"message-list"],[1,"message"],[1,"message-input",3,"ngSubmit"],["type","text","name","draft","placeholder","Reply to the paused run or leave a note\u2026","aria-label","Message",3,"ngModelChange","ngModel","disabled"],["type","submit",3,"disabled"],[1,"chat-hint"],[1,"message-role"],[1,"message-content"]],template:function(e,s){e&1&&(i(0,"div",0)(1,"aside",1)(2,"h2"),r(3,"Conversations"),o(),p(4,q,2,0,"p",2),u(5,Q,6,6,"a",3,h),o(),i(7,"section",4),p(8,U,2,0,"p",2)(9,Z,8,4),o()()),e&2&&(a(4),g(s.conversations().length===0?4:-1),a(),f(s.conversations()),a(3),g(s.selectedId()?9:8))},dependencies:[D,z,K,R,F,V,H,A,L],styles:[".conversations-layout[_ngcontent-%COMP%]{display:flex;gap:1rem;min-height:70vh}.conversations-sidebar[_ngcontent-%COMP%]{width:280px;border-right:1px solid var(--border-color, #333);padding-right:1rem}.conversation-item[_ngcontent-%COMP%]{display:block;padding:.5rem;border-radius:6px;text-decoration:none;color:inherit}.conversation-item.active[_ngcontent-%COMP%]{background:#8080ff1f}.conversation-title[_ngcontent-%COMP%]{display:block;font-weight:600}.run-chip[_ngcontent-%COMP%]{font-size:.75rem;opacity:.75;margin-right:.5rem}.chat-panel[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column}.message-list[_ngcontent-%COMP%]{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:.5rem}.message[_ngcontent-%COMP%]{max-width:70%;padding:.5rem .75rem;border-radius:8px;background:#8080801f}.message[data-role=user][_ngcontent-%COMP%]{align-self:flex-end;background:#5078ff2e}.message[data-kind=gate][_ngcontent-%COMP%]{border-left:3px solid orange}.message[data-kind=status][_ngcontent-%COMP%]{opacity:.8;font-style:italic}.message-role[_ngcontent-%COMP%]{font-size:.7rem;text-transform:uppercase;opacity:.6}.message-content[_ngcontent-%COMP%]{margin:.25rem 0 0;white-space:pre-wrap}.message-input[_ngcontent-%COMP%]{display:flex;gap:.5rem;margin-top:1rem}.message-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{flex:1}.empty[_ngcontent-%COMP%]{opacity:.7;padding:1rem 0}.chat-hint[_ngcontent-%COMP%]{opacity:.7;font-size:.85rem}"]})};export{j as ConversationsComponent};
@@ -1 +0,0 @@
1
- import{b as z,e as W}from"./chunk-FWLQWWZ3.js";import{a as J,b as Z,e as Q,j as X,k as ee}from"./chunk-K4VRVZWF.js";import{$ as V,Ba as y,Hb as E,J as L,La as p,Ma as c,Mb as R,O as g,Oa as A,Pa as D,Qa as x,Ra as s,Sa as o,Sb as Y,T as v,Ta as O,U as b,Xa as j,Ya as f,Za as u,aa as B,db as S,f as q,fb as d,gb as m,hb as h,ib as w,jb as K,kb as U,lb as H,oa as N,qa as r}from"./chunk-W7ZKECPT.js";var I=class n{zone=g(B);projectService=g(Y);connect(t){return new q(e=>{let i=this.projectService.currentId,a=i?`?project=${encodeURIComponent(i)}`:"",l=new EventSource(`/api/runs/${t}/events${a}`),M=["node:start","node:complete","node:skip","node:fail","run:complete","run:state","run:pause","run:cancel"];for(let P of M)l.addEventListener(P,pe=>{this.zone.run(()=>{e.next({type:P,data:JSON.parse(pe.data)})})});return l.onerror=()=>{this.zone.run(()=>{e.complete()}),l.close()},()=>{l.close()}})}static \u0275fac=function(e){return new(e||n)};static \u0275prov=L({token:n,factory:n.\u0275fac,providedIn:"root"})};function xe(n,t){if(n&1&&(s(0,"span",1),d(1),o()),n&2){let e=u();r(),m(e.expanded?"\u25BE":"\u25B8")}}function ge(n,t){if(n&1&&(s(0,"span",4),d(1),o()),n&2){let e=u();r(),m(e.providerBadge)}}function fe(n,t){if(n&1&&(s(0,"span",5),d(1),o()),n&2){let e=u();x("ngClass",e.typeBadgeClass),r(),m(e.type)}}function he(n,t){if(n&1&&(s(0,"span",6),d(1),o()),n&2){let e=u();r(),h("",(e.durationMs/1e3).toFixed(1),"s")}}function _e(n,t){n&1&&(s(0,"span",7),d(1,"running..."),o())}function ve(n,t){n&1&&(s(0,"span",8),d(1,"skipped"),o())}function be(n,t){n&1&&(s(0,"span",9),d(1,"FAILED"),o())}var T=class n{nodeId="";status="pending";type;durationMs;provider;model;expandable=!1;expanded=!1;toggled=new V;onRowClick(){this.expandable&&this.toggled.emit()}get providerBadge(){return this.provider?this.model?`${this.provider}/${this.model}`:this.provider:""}get statusIcon(){switch(this.status){case"completed":return"\u2713";case"running":return"\u25CF";case"failed":return"\u2717";case"skipped":return"\u2298";default:return"\u25CB"}}get statusIconClass(){switch(this.status){case"completed":return"text-green-400";case"running":return"text-blue-400 animate-pulse";case"failed":return"text-red-400";case"skipped":return"text-slate-500";default:return"text-slate-600"}}get statusTextClass(){switch(this.status){case"pending":return"text-slate-500";case"skipped":return"text-slate-500";default:return"text-slate-100"}}get typeBadgeClass(){switch(this.type){case"prompt":return"bg-purple-500/10 text-purple-400";case"bash":return"bg-amber-500/10 text-amber-400";case"command":return"bg-cyan-500/10 text-cyan-400";default:return"bg-slate-700 text-slate-400"}}static \u0275fac=function(e){return new(e||n)};static \u0275cmp=y({type:n,selectors:[["app-node-status-row"]],inputs:{nodeId:"nodeId",status:"status",type:"type",durationMs:"durationMs",provider:"provider",model:"model",expandable:"expandable",expanded:"expanded"},outputs:{toggled:"toggled"},decls:12,vars:15,consts:[[1,"flex","items-center","py-2.5","border-b","border-slate-800",3,"click"],[1,"mr-2","text-xs","text-slate-500","w-3","inline-block"],[1,"mr-3","text-sm",3,"ngClass"],[1,"flex-1",3,"ngClass"],[1,"text-xs","px-1.5","py-0.5","rounded","mr-2","bg-indigo-500/10","text-indigo-300","font-mono"],[1,"text-xs","px-1.5","py-0.5","rounded","mr-2",3,"ngClass"],[1,"font-mono","text-xs","text-slate-400"],[1,"font-mono","text-xs","text-blue-400","animate-pulse"],[1,"text-xs","text-slate-500"],[1,"text-xs","text-red-400"]],template:function(e,i){e&1&&(s(0,"div",0),f("click",function(){return i.onRowClick()}),p(1,xe,2,1,"span",1),s(2,"span",2),d(3),o(),s(4,"span",3),d(5),o(),p(6,ge,2,1,"span",4),p(7,fe,2,2,"span",5),p(8,he,2,1,"span",6),p(9,_e,2,0,"span",7),p(10,ve,2,0,"span",8),p(11,be,2,0,"span",9),o()),e&2&&(S("cursor-pointer",i.expandable)("select-none",i.expandable),r(),c(i.expandable?1:-1),r(),x("ngClass",i.statusIconClass),r(),m(i.statusIcon),r(),x("ngClass",i.statusTextClass),r(),m(i.nodeId),r(),c(i.provider?6:-1),r(),c(i.type?7:-1),r(),c(i.status==="completed"&&i.durationMs!==void 0?8:-1),r(),c(i.status==="running"?9:-1),r(),c(i.status==="skipped"?10:-1),r(),c(i.status==="failed"?11:-1))},dependencies:[R,E],encapsulation:2})};var Ce=new Set(["completed","failed","cancelled"]);function G(n){return n!==void 0&&Ce.has(n)}function ne(n,t=new Date().toISOString()){G(n.status)&&!n.completedAt&&(n.completedAt=t)}function ie(n,t=Date.now()){let e=new Date(n.startedAt).getTime(),i=n.completedAt?new Date(n.completedAt).getTime():t;return Math.max(0,i-e)}function re(n){let t=Math.floor(n/1e3),e=Math.floor(t/60),i=t%60;return e>0?`${e}m ${i}s`:`${i}s`}var k=class{entries=new Map;toggle(t,e){let i=this.entry(t);return i.expanded=!i.expanded,!i.expanded||i.fetchedStatus===e&&(i.phase==="loaded"||i.phase==="loading")?!1:(i.phase="loading",i.fetchedStatus=e,i.error=void 0,!0)}statusChanged(t,e){let i=this.entries.get(t);return!i||i.fetchedStatus===void 0||i.fetchedStatus===e?!1:i.expanded?(i.phase="loading",i.fetchedStatus=e,i.error=void 0,!0):(i.phase="idle",i.data=void 0,i.error=void 0,i.fetchedStatus=void 0,!1)}resolve(t,e,i){let a=this.entries.get(t);!a||a.fetchedStatus!==e||(a.phase="loaded",a.data=i,a.error=void 0)}fail(t,e,i){let a=this.entries.get(t);!a||a.fetchedStatus!==e||(a.phase="error",a.error=i,a.data=void 0)}isExpanded(t){return this.entries.get(t)?.expanded??!1}phase(t){let e=this.entries.get(t);return!e||!e.expanded?"collapsed":e.phase==="idle"?"loading":e.phase}data(t){return this.entries.get(t)?.data}errorMessage(t){return this.entries.get(t)?.error}entry(t){let e=this.entries.get(t);return e||(e={expanded:!1,phase:"idle"},this.entries.set(t,e)),e}};var ye="Approval required",Se="Run paused \u2014 input required to continue.";function C(n){return`${n.nodeId}\0${n.iteration??""}\0${n.message}`}function ae(n){let t=oe(n);if(t)return t;let e=n.approval;if(e&&typeof e=="object")return oe(e)}function oe(n){let t=_(n.approvalNodeId)??_(n.nodeId);if(!t)return;let e=_(n.approvalMessage)??_(n.message),i=_(n.approvalType)??_(n.type),a=n.iteration;return{nodeId:t,message:e||ye,type:i==="interactive_loop"?"interactive_loop":"approval",iteration:typeof a=="number"?a:void 0}}function _(n){return typeof n=="string"&&n!==""?n:void 0}var F=class{current;state="hidden";error;answeredKey;pauseReceived(t){this.current=ae(t)??se(),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 i=e?ae(e):void 0,a=i?C(i):void 0;a!==void 0&&a===this.answeredKey||this.current&&a!==void 0&&a===C(this.current)||this.current&&i===void 0||(this.current=i??se(),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=C(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 se(){return{nodeId:"",message:Se,type:"approval"}}function de(n,t,e=new Date().toISOString()){let i=`gate:${C(t)}`;return n.some(a=>a.key===i)?n:[...n,{key:i,role:"gate",text:t.message,at:e,nodeId:t.nodeId,iteration:t.iteration}]}function $(n,t,e,i=new Date().toISOString()){return[...n,{key:`user:${n.length}:${i}`,role:"user",kind:t,text:we(t,e),at:i}]}function we(n,t){let e=t.trim();switch(n){case"answer":return e;case"approve":return e?`Approved: ${e}`:"Approved";case"reject":return e?`Rejected: ${e}`:"Rejected"}}function le(n){return Ee(n).split(/`([^`]*)`/).map((i,a)=>a%2===1?`<code>${i}</code>`:i.replace(/\*\*([^*]+)\*\*/g,"<strong>$1</strong>")).join("").replace(/\n/g,"<br>")}function Ee(n){return n.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}var Re=(n,t)=>t.id,Ie=(n,t)=>t.key;function Te(n,t){if(n&1&&(s(0,"span",6),d(1),o()),n&2){let e=u();x("ngClass",e.statusClass(e.run.status)),r(),w(" ",e.statusIcon(e.run.status)," ",e.run.status," ")}}function ke(n,t){n&1&&(s(0,"div",13),d(1,"Loading output\u2026"),o())}function Fe(n,t){if(n&1&&(s(0,"div",14),d(1),o()),n&2){let e=u(2).$implicit,i=u();r(),m(i.panels.errorMessage(e.id))}}function Me(n,t){if(n&1&&(s(0,"span",16),d(1),o()),n&2){let e=u();r(),w(" ",e.provider,"",e.model?"/"+e.model:""," ")}}function Ne(n,t){if(n&1&&(s(0,"span",17),d(1),o()),n&2){let e=u();r(),h("",(e.durationMs/1e3).toFixed(1),"s")}}function Ae(n,t){if(n&1&&(s(0,"pre",18),d(1),o()),n&2){let e=u();r(),m(e.error)}}function De(n,t){if(n&1&&(s(0,"pre",19),d(1),o()),n&2){let e=u();r(),m(e.output)}}function Oe(n,t){n&1&&(s(0,"div",20),d(1,"No output"),o())}function je(n,t){if(n&1&&(s(0,"div",15),p(1,Me,2,2,"span",16),p(2,Ne,2,1,"span",17),o(),p(3,Ae,2,1,"pre",18),p(4,De,2,1,"pre",19)(5,Oe,2,0,"div",20)),n&2){let e=t;r(),c(e.provider?1:-1),r(),c(e.durationMs!==null?2:-1),r(),c(e.error?3:-1),r(),c(e.output?4:e.error?-1:5)}}function Ge(n,t){if(n&1&&p(0,je,6,4),n&2){let e,i=u(2).$implicit,a=u();c((e=a.panels.data(i.id))?0:-1,e)}}function $e(n,t){if(n&1&&(s(0,"div",12),p(1,ke,2,0,"div",13)(2,Fe,2,1,"div",14)(3,Ge,1,1),o()),n&2){let e,i=u().$implicit,a=u();r(),c((e=a.panels.phase(i.id))==="loading"?1:e==="error"?2:e==="loaded"?3:-1)}}function Pe(n,t){if(n&1){let e=j();s(0,"app-node-status-row",11),f("toggled",function(){let a=v(e).$implicit,l=u();return b(l.togglePanel(a))}),o(),p(1,$e,4,1,"div",12)}if(n&2){let e=t.$implicit,i=u();x("nodeId",e.id)("status",e.status)("durationMs",e.durationMs)("provider",e.provider)("model",e.model)("expandable",!0)("expanded",i.panels.isExpanded(e.id)),r(),c(i.panels.isExpanded(e.id)?1:-1)}}function qe(n,t){if(n&1&&(s(0,"div",24),d(1),o()),n&2){let e=u().$implicit;r(),w(" \u23F8 ",e.nodeId||"gate","",e.iteration!==void 0?" \xB7 iteration "+e.iteration:""," ")}}function Le(n,t){if(n&1&&(s(0,"div",22)(1,"div",23),p(2,qe,2,2,"div",24),O(3,"div",25),o()()),n&2){let e=t.$implicit,i=u(2);S("justify-end",e.role==="user"),r(),x("ngClass",e.role==="user"?"bg-indigo-500/15 text-indigo-100":"bg-slate-800 text-slate-200"),r(),c(e.role==="gate"?2:-1),r(),x("innerHTML",i.render(e.text),N)}}function Ve(n,t){if(n&1&&(s(0,"div",8),A(1,Le,4,5,"div",21,Ie),o()),n&2){let e=u();r(),D(e.feed)}}function Be(n,t){if(n&1&&(s(0,"span",27),d(1),o()),n&2){let e,i=u(2);r(),m((e=i.gate.request())==null?null:e.nodeId)}}function Ke(n,t){if(n&1&&(s(0,"span",28),d(1),o()),n&2){let e,i=u(2);r(),h("iteration ",(e=i.gate.request())==null?null:e.iteration)}}function Ue(n,t){if(n&1&&(s(0,"div",31),d(1),o()),n&2){let e=u(2);r(),m(e.gate.errorMessage())}}function He(n,t){if(n&1){let e=j();s(0,"div",9)(1,"div",26)(2,"span"),d(3,"\u23F8 Input required"),o(),p(4,Be,2,1,"span",27),p(5,Ke,2,1,"span",28),o(),O(6,"div",29),s(7,"textarea",30),H("ngModelChange",function(a){v(e);let l=u();return U(l.draft,a)||(l.draft=a),b(a)}),o(),p(8,Ue,2,1,"div",31),s(9,"div",32)(10,"button",33),f("click",function(){v(e);let a=u();return b(a.sendAnswer())}),d(11),o(),s(12,"button",34),f("click",function(){v(e);let a=u();return b(a.rejectGate())}),d(13," Reject "),o()()()}if(n&2){let e,i,a,l=u();r(4),c((e=l.gate.request())!=null&&e.nodeId?4:-1),r(),c(((i=l.gate.request())==null?null:i.iteration)!==void 0?5:-1),r(),x("innerHTML",l.render(((a=l.gate.request())==null?null:a.message)??""),N),r(),K("ngModel",l.draft),x("disabled",l.gate.phase()==="submitting")("placeholder",l.gate.submitAction()==="resume"?"Type your answer\u2026":"Optional response\u2026"),r(),c(l.gate.errorMessage()?8:-1),r(2),x("disabled",l.gate.phase()==="submitting"||l.gate.submitAction()==="resume"&&!l.draft.trim()),r(),h(" ",l.gate.phase()==="submitting"?"Sending\u2026":"Send & Continue"," "),r(),x("disabled",l.gate.phase()==="submitting")}}function ze(n,t){if(n&1&&(s(0,"div",10)(1,"span",35),d(2,"Elapsed: "),s(3,"span",36),d(4),o()(),s(5,"span",37),d(6,"Nodes: "),s(7,"span",38),d(8),o(),d(9,"/"),s(10,"span",39),d(11),o(),d(12," completed "),o()()),n&2){let e=u();r(4),m(e.elapsedDisplay),r(4),m(e.completedCount),r(3),m(e.nodes.length)}}var ue=class n{route=g(z);api=g(ee);sse=g(I);run;nodes=[];panels=new k;gate=new F;feed=[];draft="";runId="";sseSub;timerInterval;focusAnswerOnShow=!1;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,this.rebuildNodeList(),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)}togglePanel(t){this.panels.toggle(t.id,t.status)&&this.fetchOutput(t.id,t.status)}fetchOutput(t,e){this.api.getNodeOutput(this.runId,t).subscribe({next:i=>this.panels.resolve(t,e,i),error:i=>this.panels.fail(t,e,i?.error?.error??"Failed to load node output.")})}handleSseEvent(t){let e=t.data,i=e.nodeId;switch(t.type){case"run:state":this.run=e,this.rebuildNodeList(),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(i,"running",void 0,{provider:e.provider,model:e.model});break;case"node:complete":this.updateNodeStatus(i,"completed",e.durationMs);break;case"node:skip":this.updateNodeStatus(i,"skipped");break;case"node:fail":this.updateNodeStatus(i,"failed");break;case"run:complete":this.run&&(this.run.status=e.success?"completed":"failed",this.gate.runStateChanged(this.run.status)),this.stopTimerIfFinished();break}}rebuildNodeList(){if(!this.run)return;let t=new Map(this.nodes.map(e=>[e.id,e]));this.nodes=Object.entries(this.run.nodes).map(([e,i])=>({id:e,status:i.status,durationMs:i.durationMs,provider:t.get(e)?.provider,model:t.get(e)?.model}));for(let e of this.nodes)this.noteStatus(e)}updateNodeStatus(t,e,i,a){let l=this.nodes.find(M=>M.id===t);l?(l.status=e,i!==void 0&&(l.durationMs=i)):(l={id:t,status:e,durationMs:i},this.nodes.push(l)),a?.provider&&(l.provider=a.provider),a?.model&&(l.model=a.model),this.noteStatus(l)}noteStatus(t){this.panels.statusChanged(t.id,t.status)&&this.fetchOutput(t.id,t.status)}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=de(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=$(this.feed,e==="resume"?"answer":"approve",t),this.draft="",this.gate.submitSucceeded()},error:a=>this.gate.submitFailed(a?.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=$(this.feed,"reject",t),this.gate.submitSucceeded()},error:e=>this.gate.submitFailed(e?.error?.error??"Failed to reject the run.")}))}render(t){return le(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()}))}get completedCount(){return this.nodes.filter(t=>t.status==="completed").length}get elapsedDisplay(){return this.run?re(ie(this.run)):"0s"}stopTimerIfFinished(){!this.run||!G(this.run.status)||(ne(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||n)};static \u0275cmp=y({type:n,selectors:[["app-run-execution"]],decls:19,vars:6,consts:[[1,"max-w-3xl","mx-auto"],[1,"flex","items-center","mb-6","gap-2","text-sm"],["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,"mb-6"],[1,"mb-4","space-y-2"],["id","gate-answer-panel",1,"mb-6","rounded-lg","border","border-amber-500/40","bg-amber-500/10","p-4"],[1,"bg-slate-800","rounded-lg","px-4","py-3","flex","items-center","text-sm"],[3,"toggled","nodeId","status","durationMs","provider","model","expandable","expanded"],[1,"border-b","border-slate-800","bg-slate-900/40","px-4","py-3"],[1,"text-xs","text-slate-500","animate-pulse"],[1,"text-xs","text-red-400"],[1,"flex","items-center","gap-3","mb-2","text-xs"],[1,"px-1.5","py-0.5","rounded","bg-indigo-500/10","text-indigo-300","font-mono"],[1,"font-mono","text-slate-400"],[1,"font-mono","text-xs","text-red-300","bg-red-500/10","border","border-red-500/30","rounded","p-3","mb-2","max-h-80","overflow-auto","whitespace-pre-wrap","break-words"],[1,"font-mono","text-xs","text-slate-300","bg-slate-950","border","border-slate-800","rounded","p-3","max-h-80","overflow-auto","whitespace-pre-wrap","break-words"],[1,"text-xs","text-slate-500","italic"],[1,"flex",3,"justify-end"],[1,"flex"],[1,"max-w-[85%]","rounded-lg","px-3","py-2","text-sm",3,"ngClass"],[1,"text-[10px]","uppercase","tracking-wide","text-slate-500","mb-1"],[3,"innerHTML"],[1,"flex","items-center","gap-2","mb-2","text-amber-300","font-semibold","text-sm"],[1,"font-mono","text-xs","text-amber-400/80"],[1,"text-xs","text-amber-400/60"],[1,"text-sm","text-slate-200","mb-3",3,"innerHTML"],["id","gate-answer-input","rows","3",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"],[1,"text-slate-400"],[1,"text-slate-100","font-mono"],[1,"ml-6","text-slate-400"],[1,"text-green-400"],[1,"text-slate-100"]],template:function(e,i){e&1&&(s(0,"div",0)(1,"div",1)(2,"a",2),d(3,"Dashboard"),o(),s(4,"span",3),d(5,"\u203A"),o(),s(6,"span",4),d(7),o(),s(8,"span",3),d(9,"\u203A"),o(),s(10,"span",5),d(11),o(),p(12,Te,2,3,"span",6),o(),s(13,"div",7),A(14,Pe,2,8,null,null,Re),o(),p(16,Ve,3,0,"div",8),p(17,He,14,10,"div",9),p(18,ze,13,3,"div",10),o()),e&2&&(r(7),m(i.run==null?null:i.run.workflow),r(4),m(i.run==null?null:i.run.runId),r(),c(i.run?12:-1),r(2),D(i.nodes),r(2),c(i.feed.length?16:-1),r(),c(i.gate.visible()?17:-1),r(),c(i.run?18:-1))},dependencies:[R,E,X,J,Z,Q,W,T],encapsulation:2})};export{ue as RunExecutionComponent};