@ngocsangairvds/vsaf 5.6.2 → 5.7.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.
- package/README.md +2 -2
- package/package.json +2 -1
- package/packages/cli/dist/adapters/claude.d.ts.map +1 -1
- package/packages/cli/dist/adapters/claude.js +49 -3
- package/packages/cli/dist/adapters/claude.js.map +1 -1
- package/packages/cli/dist/adapters/codex.d.ts.map +1 -1
- package/packages/cli/dist/adapters/codex.js +54 -6
- package/packages/cli/dist/adapters/codex.js.map +1 -1
- package/packages/cli/dist/server/routes/runs.d.ts +12 -0
- package/packages/cli/dist/server/routes/runs.d.ts.map +1 -1
- package/packages/cli/dist/server/routes/runs.js +53 -8
- package/packages/cli/dist/server/routes/runs.js.map +1 -1
- package/packages/web/dist/web/3rdpartylicenses.txt +0 -26
- package/packages/web/dist/web/browser/{chunk-OBMUVQWL.js → chunk-FFYMNCCZ.js} +1 -1
- package/packages/web/dist/web/browser/{chunk-VJ3UNUDS.js → chunk-IBSRIWBK.js} +1 -1
- package/packages/web/dist/web/browser/{chunk-K4VRVZWF.js → chunk-LPQARKUF.js} +1 -1
- package/packages/web/dist/web/browser/{chunk-FQUOTTEA.js → chunk-NSKD5KW7.js} +1 -1
- package/packages/web/dist/web/browser/chunk-S76O6O57.js +1 -0
- package/packages/web/dist/web/browser/{chunk-4LHJGOIU.js → chunk-TTPORHEG.js} +1 -1
- package/packages/web/dist/web/browser/{chunk-FWLQWWZ3.js → chunk-UN7U5NAR.js} +1 -1
- package/packages/web/dist/web/browser/chunk-VA6YRKIE.js +1 -0
- package/packages/web/dist/web/browser/chunk-WDOCF7IL.js +5 -0
- package/packages/web/dist/web/browser/{chunk-3LPWUDNW.js → chunk-YBYKUHHQ.js} +1 -1
- package/packages/web/dist/web/browser/index.html +2 -2
- package/packages/web/dist/web/browser/{main-7FONYLE6.js → main-7PKVTIG7.js} +1 -1
- package/packages/web/dist/web/browser/styles-MG7ITKTI.css +1 -0
- package/packages/web/dist/web/browser/chunk-UJHVWNPU.js +0 -1
- package/packages/web/dist/web/browser/chunk-UXRT7NQK.js +0 -1
- package/packages/web/dist/web/browser/chunk-W7ZKECPT.js +0 -5
- package/packages/web/dist/web/browser/styles-PWTTI45T.css +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{e as j}from"./chunk-FWLQWWZ3.js";import{a as U,b as W,e as H,g as q,h as G,i as J,j as K,k as Q}from"./chunk-K4VRVZWF.js";import{Ba as F,Fa as u,Ib as N,Jb as $,Ka as h,Kb as z,Lb as B,Mb as V,O as A,Qa as l,Ra as r,Sa as a,T as x,Ta as L,U as f,Wa as S,Xa as y,Ya as v,Za as p,bb as b,db as R,fb as o,gb as c,hb as I,jb as k,kb as E,lb as D,ob as _,pb as C,qa as s,qb as O,rb as M,z as P}from"./chunk-W7ZKECPT.js";function Z(n){switch(n){case"running":return["view","cancel"];case"paused":return["view","answer","approve","reject","abandon"];case"completed":return["view","delete"];case"failed":return["view","resume","delete"];case"cancelled":return["view","delete"];default:return["view"]}}function T(n,e){return e==="history"?[]:Z(n)}var w=n=>["/runs",n],Y=n=>({$implicit:n});function tt(n,e){if(n&1&&(r(0,"div",28),o(1),a()),n&2){let t=p();s(),c(t.error)}}function et(n,e){if(n&1){let t=y();r(0,"button",29),v("click",function(){let d=x(t).$implicit,g=p();return f(g.filter=d.status)}),L(1,"span",30),r(2,"span"),o(3),a(),r(4,"strong"),o(5),a()()}if(n&2){let t=e.$implicit,i=p();R("active",i.filter===t.status),s(),h("data-status",t.status),s(2),c(t.label),s(2),c(i.count(t.status))}}function nt(n,e){n&1&&S(0)}function rt(n,e){if(n&1&&(r(0,"article",33)(1,"div",34)(2,"div")(3,"a",35),o(4),a(),r(5,"code"),o(6),a()(),r(7,"span",36),o(8),a()(),r(9,"div",37)(10,"span"),o(11),C(12,"date"),a(),r(13,"span"),o(14),a()(),u(15,nt,1,0,"ng-container",38),a()),n&2){let t=e.$implicit,i=p(2),d=b(66);s(3),l("routerLink",_(12,w,t.runId)),s(),c(t.workflow),s(2),c(t.runId),s(),h("data-status",t.status),s(),c(t.status),s(3),I("Started ",O(12,9,t.startedAt,"medium")),s(3),c(i.elapsed(t)),s(),l("ngTemplateOutlet",d)("ngTemplateOutletContext",_(14,Y,t))}}function at(n,e){if(n&1&&(r(0,"div",31),u(1,rt,16,16,"article",32),a()),n&2){let t=p();s(),l("ngForOf",t.activeRuns)("ngForTrackBy",t.trackRun)}}function it(n,e){n&1&&(r(0,"div",39),o(1,"No active runs."),a())}function ot(n,e){if(n&1&&(r(0,"a",35),o(1),a()),n&2){let t=p().$implicit;l("routerLink",_(2,w,t.runId)),s(),c(t.workflow)}}function st(n,e){if(n&1&&(r(0,"span",42),o(1),a()),n&2){let t=p().$implicit;s(),c(t.workflow)}}function lt(n,e){n&1&&(r(0,"span",43),o(1,"history"),a())}function ct(n,e){n&1&&S(0)}function dt(n,e){if(n&1&&(r(0,"tr")(1,"td"),u(2,ot,2,4,"a",40)(3,st,2,1,"ng-template",null,2,M),r(5,"code"),o(6),a()(),r(7,"td")(8,"span",36),o(9),a(),u(10,lt,2,0,"span",41),a(),r(11,"td"),o(12),C(13,"date"),a(),r(14,"td"),o(15),a(),r(16,"td"),u(17,ct,1,0,"ng-container",38),a()()),n&2){let t=e.$implicit,i=b(4),d=p(),g=b(66);s(2),l("ngIf",t.source!=="history")("ngIfElse",i),s(4),c(t.runId),s(2),h("data-status",t.status),s(),c(t.status),s(),l("ngIf",t.source==="history"),s(2),c(O(13,10,t.startedAt,"medium")),s(3),c(d.elapsed(t)),s(2),l("ngTemplateOutlet",g)("ngTemplateOutletContext",_(13,Y,t))}}function pt(n,e){n&1&&(r(0,"tr")(1,"td",44),o(2,"No runs match the current filters."),a()())}function ut(n,e){if(n&1&&(r(0,"a",49),o(1,"View"),a()),n&2){let t=p().$implicit;l("routerLink",_(1,w,t.runId))}}function mt(n,e){if(n&1&&(r(0,"a",50),o(1,"Answer"),a()),n&2){let t=p().$implicit;l("routerLink",_(1,w,t.runId))}}function gt(n,e){if(n&1){let t=y();r(0,"button",51),v("click",function(){let d=x(t).$implicit,g=p().$implicit,m=p();return f(m.perform(g,d))}),o(1),a()}if(n&2){let t=e.$implicit,i=p().$implicit,d=p();R("danger",t==="delete"),l("disabled",d.busyRun===i.runId),s(),c(d.actionLabels[t])}}function _t(n,e){if(n&1&&(r(0,"div",45),u(1,ut,2,3,"a",46)(2,mt,2,3,"a",47)(3,gt,2,4,"button",48),a()),n&2){let t=e.$implicit,i=p();s(),l("ngIf",i.can(t,"view")),s(),l("ngIf",i.can(t,"answer")),s(),l("ngForOf",i.buttonActions(t))}}var X=class n{api=A(Q);refreshTimer;runs=[];filter="all";search="";dateRange="all";loading=!1;error="";busyRun="";lastUpdated;statusItems=[{status:"all",label:"All"},{status:"running",label:"Running"},{status:"paused",label:"Paused"},{status:"completed",label:"Completed"},{status:"failed",label:"Failed"},{status:"cancelled",label:"Cancelled"}];ngOnInit(){this.loadRuns(),this.refreshTimer=setInterval(()=>this.loadRuns(!1),5e3)}ngOnDestroy(){this.refreshTimer&&clearInterval(this.refreshTimer)}get filteredRuns(){let e=this.search.trim().toLowerCase(),t=this.cutoffDate();return this.runs.filter(i=>(this.filter==="all"||i.status===this.filter)&&(!e||i.workflow.toLowerCase().includes(e)||i.runId.toLowerCase().includes(e))&&(!t||new Date(i.startedAt)>=t))}get activeRuns(){return this.filteredRuns.filter(e=>e.status==="running"||e.status==="paused")}get historyRuns(){return this.filteredRuns.filter(e=>e.status!=="running"&&e.status!=="paused")}loadRuns(e=!0){e&&(this.loading=!0),this.api.getRuns().pipe(P(()=>this.loading=!1)).subscribe({next:t=>{this.runs=t,this.lastUpdated=new Date,this.error=""},error:t=>this.error=t?.error?.error??"Unable to load workflow runs."})}count(e){return e==="all"?this.runs.length:this.runs.filter(t=>t.status===e).length}trackRun(e,t){return t.runId}elapsed(e){let t=e.durationMs??new Date(e.completedAt??Date.now()).getTime()-new Date(e.startedAt).getTime();return t<6e4?`${Math.max(0,Math.round(t/1e3))}s`:t<36e5?`${Math.round(t/6e4)}m`:`${(t/36e5).toFixed(1)}h`}actionLabels={cancel:"Cancel",abandon:"Abandon",approve:"Approve",reject:"Reject",resume:"Resume",delete:"Delete"};buttonActions(e){return T(e.status,e.source).filter(t=>t!=="view"&&t!=="answer")}can(e,t){return T(e.status,e.source).includes(t)}perform(e,t){if(!this.can(e,t)||["cancel","abandon","delete","reject"].includes(t)&&!confirm(`${t} run ${e.runId}?`))return;let i=t==="reject"?prompt("Rejection reason","Rejected by operator")??void 0:void 0;t==="reject"&&i===void 0||(this.busyRun=e.runId,this.error="",this.api.runAction(e.runId,t,i).pipe(P(()=>this.busyRun="")).subscribe({next:()=>this.loadRuns(!1),error:d=>this.error=d?.error?.error??`Unable to ${t} run.`}))}cutoffDate(){if(this.dateRange==="all")return;let e=new Date;return this.dateRange==="today"?e.setHours(0,0,0,0):e.setDate(e.getDate()-Number(this.dateRange.slice(0,-1))),e}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=F({type:n,selectors:[["app-dashboard"]],decls:67,vars:17,consts:[["noActive",""],["actions",""],["plainName",""],[1,"dashboard"],[1,"page-header"],[1,"eyebrow"],[1,"subtitle"],[1,"header-actions"],[1,"updated"],["type","button",1,"button","secondary",3,"click","disabled"],["routerLink","/workflows/builder",1,"button","primary"],["class","error-banner",4,"ngIf"],["role","group","aria-label","Run status filters",1,"summary"],["type","button","class","summary-item",3,"active","click",4,"ngFor","ngForOf"],[1,"controls"],["type","search","placeholder","Search workflow or run ID",1,"search",3,"ngModelChange","ngModel"],["aria-label","Date range",3,"ngModelChange","ngModel"],["value","all"],["value","today"],["value","7d"],["value","30d"],[1,"capacity"],[1,"run-section"],[1,"section-heading"],["class","active-grid",4,"ngIf","ngIfElse"],[1,"table-wrap"],[4,"ngFor","ngForOf","ngForTrackBy"],[4,"ngIf"],[1,"error-banner"],["type","button",1,"summary-item",3,"click"],[1,"status-dot"],[1,"active-grid"],["class","run-card",4,"ngFor","ngForOf","ngForTrackBy"],[1,"run-card"],[1,"run-title"],[3,"routerLink"],[1,"badge"],[1,"run-meta"],[4,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"empty"],[3,"routerLink",4,"ngIf","ngIfElse"],["class","history-tag",4,"ngIf"],[1,"run-name"],[1,"history-tag"],["colspan","5",1,"empty"],[1,"actions"],["class","icon-button","title","Open run",3,"routerLink",4,"ngIf"],["class","icon-button answer","fragment","answer","title","Answer the pending question",3,"routerLink",4,"ngIf"],["type","button",3,"danger","disabled","click",4,"ngFor","ngForOf"],["title","Open run",1,"icon-button",3,"routerLink"],["fragment","answer","title","Answer the pending question",1,"icon-button","answer",3,"routerLink"],["type","button",3,"click","disabled"]],template:function(t,i){if(t&1){let d=y();r(0,"section",3)(1,"header",4)(2,"div")(3,"p",5),o(4,"Mission Control"),a(),r(5,"h1"),o(6,"Dashboard"),a(),r(7,"p",6),o(8,"Monitor workflow execution and control run lifecycle."),a()(),r(9,"div",7)(10,"span",8),o(11),C(12,"date"),a(),r(13,"button",9),v("click",function(){return i.loadRuns()}),o(14,"Refresh"),a(),r(15,"a",10),o(16,"New workflow"),a()()(),u(17,tt,2,1,"div",11),r(18,"div",12),u(19,et,6,5,"button",13),a(),r(20,"div",14)(21,"input",15),D("ngModelChange",function(m){return x(d),E(i.search,m)||(i.search=m),f(m)}),a(),r(22,"select",16),D("ngModelChange",function(m){return x(d),E(i.dateRange,m)||(i.dateRange=m),f(m)}),r(23,"option",17),o(24,"All time"),a(),r(25,"option",18),o(26,"Today"),a(),r(27,"option",19),o(28,"Last 7 days"),a(),r(29,"option",20),o(30,"Last 30 days"),a()(),r(31,"span",21),o(32),a()(),r(33,"section",22)(34,"div",23)(35,"h2"),o(36,"Active runs"),a(),r(37,"span"),o(38),a()(),u(39,at,2,2,"div",24)(40,it,2,0,"ng-template",null,0,M),a(),r(42,"section",22)(43,"div",23)(44,"h2"),o(45,"Run history"),a(),r(46,"span"),o(47),a()(),r(48,"div",25)(49,"table")(50,"thead")(51,"tr")(52,"th"),o(53,"Workflow"),a(),r(54,"th"),o(55,"Status"),a(),r(56,"th"),o(57,"Started"),a(),r(58,"th"),o(59,"Duration"),a(),r(60,"th"),o(61,"Actions"),a()()(),r(62,"tbody"),u(63,dt,18,15,"tr",26)(64,pt,3,0,"tr",27),a()()()()(),u(65,_t,4,3,"ng-template",null,1,M)}if(t&2){let d=b(41);s(11),c(i.lastUpdated?"Updated "+O(12,14,i.lastUpdated,"HH:mm:ss"):"Not updated"),s(2),l("disabled",i.loading),s(4),l("ngIf",i.error),s(2),l("ngForOf",i.statusItems),s(2),k("ngModel",i.search),s(),k("ngModel",i.dateRange),s(10),I("",i.activeRuns.length," active"),s(6),c(i.activeRuns.length),s(),l("ngIf",i.activeRuns.length)("ngIfElse",d),s(8),c(i.historyRuns.length),s(16),l("ngForOf",i.historyRuns)("ngForTrackBy",i.trackRun),s(),l("ngIf",!i.historyRuns.length)}},dependencies:[V,N,$,z,K,G,J,U,q,W,H,j,B],styles:["[_nghost-%COMP%]{display:block}.dashboard[_ngcontent-%COMP%]{max-width:1440px;margin:0 auto;padding:28px 32px 56px}.page-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;gap:24px;align-items:flex-end;margin-bottom:24px}.eyebrow[_ngcontent-%COMP%]{color:var(--primary);font-size:12px;font-weight:700;text-transform:uppercase;margin:0 0 5px}.page-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-size:28px;line-height:1.2;margin:0}.subtitle[_ngcontent-%COMP%]{color:var(--text-secondary);margin:7px 0 0}.header-actions[_ngcontent-%COMP%], .controls[_ngcontent-%COMP%], .actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.updated[_ngcontent-%COMP%]{font-size:12px;color:var(--text-tertiary)}.button[_ngcontent-%COMP%], .actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .icon-button[_ngcontent-%COMP%]{border:1px solid var(--border-bright);background:var(--surface);color:var(--text-primary);padding:8px 11px;font:inherit;font-size:12px;text-decoration:none;cursor:pointer;border-radius:5px}.button.primary[_ngcontent-%COMP%]{background:var(--primary);border-color:var(--primary);color:var(--primary-foreground);font-weight:700}.button[_ngcontent-%COMP%]:disabled, .actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:disabled{opacity:.34;cursor:not-allowed}.error-banner[_ngcontent-%COMP%]{border:1px solid var(--error);background:color-mix(in oklch,var(--error) 12%,var(--surface));padding:10px 12px;margin-bottom:16px;border-radius:5px}.summary[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));border:1px solid var(--border);background:var(--surface);border-radius:7px;overflow:hidden}.summary-item[_ngcontent-%COMP%]{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:8px;min-height:54px;border:0;border-right:1px solid var(--border);background:transparent;color:var(--text-secondary);padding:0 14px;cursor:pointer}.summary-item[_ngcontent-%COMP%]:last-child{border:0}.summary-item.active[_ngcontent-%COMP%]{background:var(--surface-elevated);color:var(--text-primary);box-shadow:inset 0 -2px var(--primary)}.status-dot[_ngcontent-%COMP%]{width:8px;height:8px;border-radius:50%;background:var(--text-tertiary)}.status-dot[data-status=running][_ngcontent-%COMP%], .badge[data-status=running][_ngcontent-%COMP%]{color:var(--primary)}.status-dot[data-status=running][_ngcontent-%COMP%]{background:var(--primary)}.status-dot[data-status=paused][_ngcontent-%COMP%], .badge[data-status=paused][_ngcontent-%COMP%]{color:var(--warning)}.status-dot[data-status=paused][_ngcontent-%COMP%]{background:var(--warning)}.status-dot[data-status=completed][_ngcontent-%COMP%], .badge[data-status=completed][_ngcontent-%COMP%]{color:var(--success)}.status-dot[data-status=completed][_ngcontent-%COMP%]{background:var(--success)}.status-dot[data-status=failed][_ngcontent-%COMP%], .status-dot[data-status=cancelled][_ngcontent-%COMP%]{background:var(--error)}.badge[data-status=failed][_ngcontent-%COMP%], .badge[data-status=cancelled][_ngcontent-%COMP%]{color:var(--error)}.controls[_ngcontent-%COMP%]{margin:18px 0}.search[_ngcontent-%COMP%], select[_ngcontent-%COMP%]{height:38px;border:1px solid var(--border);background:var(--surface);color:var(--text-primary);padding:0 11px;border-radius:5px}.search[_ngcontent-%COMP%]{width:min(390px,100%)}.capacity[_ngcontent-%COMP%]{margin-left:auto;color:var(--text-secondary);font-size:13px}.run-section[_ngcontent-%COMP%]{margin-top:28px}.section-heading[_ngcontent-%COMP%]{display:flex;align-items:center;gap:9px;margin-bottom:12px}.section-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:16px;margin:0}.section-heading[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--text-tertiary);font-size:12px}.active-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:12px}.run-card[_ngcontent-%COMP%]{border:1px solid var(--border);background:var(--surface);padding:16px;border-radius:7px}.run-title[_ngcontent-%COMP%]{display:flex;justify-content:space-between;gap:12px}.run-title[_ngcontent-%COMP%] a[_ngcontent-%COMP%], td[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:var(--text-primary);font-weight:700;text-decoration:none}.run-title[_ngcontent-%COMP%] code[_ngcontent-%COMP%], td[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{display:block;color:var(--text-tertiary);font-size:11px;margin-top:4px}.badge[_ngcontent-%COMP%]{border:1px solid currentColor;height:fit-content;padding:3px 7px;border-radius:4px;font-size:11px;text-transform:uppercase}.history-tag[_ngcontent-%COMP%]{border:1px dashed var(--border-bright);color:var(--text-tertiary);padding:2px 6px;border-radius:4px;font-size:10px;text-transform:uppercase;margin-left:6px}td[_ngcontent-%COMP%] .run-name[_ngcontent-%COMP%]{color:var(--text-primary);font-weight:700}.run-meta[_ngcontent-%COMP%]{display:flex;justify-content:space-between;color:var(--text-secondary);font-size:12px;margin:18px 0 14px}.actions[_ngcontent-%COMP%]{flex-wrap:wrap}.actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .icon-button[_ngcontent-%COMP%]{padding:5px 7px}.actions[_ngcontent-%COMP%] .danger[_ngcontent-%COMP%]{color:var(--error)}.icon-button.answer[_ngcontent-%COMP%]{border-color:var(--warning);color:var(--warning);font-weight:700}.table-wrap[_ngcontent-%COMP%]{overflow:auto;border:1px solid var(--border);border-radius:7px}table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse;background:var(--surface);font-size:13px}th[_ngcontent-%COMP%]{text-align:left;color:var(--text-secondary);font-size:11px;text-transform:uppercase;font-weight:600}th[_ngcontent-%COMP%], td[_ngcontent-%COMP%]{padding:12px 14px;border-bottom:1px solid var(--border);white-space:nowrap}tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%]{border-bottom:0}.empty[_ngcontent-%COMP%]{padding:24px;color:var(--text-tertiary);text-align:center;border:1px dashed var(--border);border-radius:7px}td.empty[_ngcontent-%COMP%]{border:0}.table-wrap[_ngcontent-%COMP%] .actions[_ngcontent-%COMP%]{min-width:220px}@media(max-width:800px){.dashboard[_ngcontent-%COMP%]{padding:20px 16px}.page-header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.summary[_ngcontent-%COMP%]{grid-template-columns:repeat(2,1fr)}.summary-item[_ngcontent-%COMP%]{border-bottom:1px solid var(--border)}.controls[_ngcontent-%COMP%]{align-items:stretch;flex-wrap:wrap}.search[_ngcontent-%COMP%]{width:100%}.capacity[_ngcontent-%COMP%]{margin-left:0}.active-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}}"]})};export{X as DashboardComponent};
|
|
1
|
+
import{e as j}from"./chunk-UN7U5NAR.js";import{a as U,b as W,e as H,g as q,h as G,i as J,j as K,k as Q}from"./chunk-LPQARKUF.js";import{Ba as F,Fa as u,Jb as N,Ka as h,Kb as $,Lb as z,Mb as B,O as A,Ob as V,Qa as l,Ra as r,Sa as a,T as x,Ta as L,U as f,Wa as S,Xa as y,Ya as v,Za as p,cb as b,eb as R,gb as o,hb as c,ib as I,kb as k,lb as E,mb as D,pb as _,qa as s,qb as C,rb as O,sb as M,z as P}from"./chunk-WDOCF7IL.js";function Z(n){switch(n){case"running":return["view","cancel"];case"paused":return["view","answer","approve","reject","abandon"];case"completed":return["view","delete"];case"failed":return["view","resume","delete"];case"cancelled":return["view","delete"];default:return["view"]}}function T(n,e){return e==="history"?[]:Z(n)}var w=n=>["/runs",n],Y=n=>({$implicit:n});function tt(n,e){if(n&1&&(r(0,"div",28),o(1),a()),n&2){let t=p();s(),c(t.error)}}function et(n,e){if(n&1){let t=y();r(0,"button",29),v("click",function(){let d=x(t).$implicit,g=p();return f(g.filter=d.status)}),L(1,"span",30),r(2,"span"),o(3),a(),r(4,"strong"),o(5),a()()}if(n&2){let t=e.$implicit,i=p();R("active",i.filter===t.status),s(),h("data-status",t.status),s(2),c(t.label),s(2),c(i.count(t.status))}}function nt(n,e){n&1&&S(0)}function rt(n,e){if(n&1&&(r(0,"article",33)(1,"div",34)(2,"div")(3,"a",35),o(4),a(),r(5,"code"),o(6),a()(),r(7,"span",36),o(8),a()(),r(9,"div",37)(10,"span"),o(11),C(12,"date"),a(),r(13,"span"),o(14),a()(),u(15,nt,1,0,"ng-container",38),a()),n&2){let t=e.$implicit,i=p(2),d=b(66);s(3),l("routerLink",_(12,w,t.runId)),s(),c(t.workflow),s(2),c(t.runId),s(),h("data-status",t.status),s(),c(t.status),s(3),I("Started ",O(12,9,t.startedAt,"medium")),s(3),c(i.elapsed(t)),s(),l("ngTemplateOutlet",d)("ngTemplateOutletContext",_(14,Y,t))}}function at(n,e){if(n&1&&(r(0,"div",31),u(1,rt,16,16,"article",32),a()),n&2){let t=p();s(),l("ngForOf",t.activeRuns)("ngForTrackBy",t.trackRun)}}function it(n,e){n&1&&(r(0,"div",39),o(1,"No active runs."),a())}function ot(n,e){if(n&1&&(r(0,"a",35),o(1),a()),n&2){let t=p().$implicit;l("routerLink",_(2,w,t.runId)),s(),c(t.workflow)}}function st(n,e){if(n&1&&(r(0,"span",42),o(1),a()),n&2){let t=p().$implicit;s(),c(t.workflow)}}function lt(n,e){n&1&&(r(0,"span",43),o(1,"history"),a())}function ct(n,e){n&1&&S(0)}function dt(n,e){if(n&1&&(r(0,"tr")(1,"td"),u(2,ot,2,4,"a",40)(3,st,2,1,"ng-template",null,2,M),r(5,"code"),o(6),a()(),r(7,"td")(8,"span",36),o(9),a(),u(10,lt,2,0,"span",41),a(),r(11,"td"),o(12),C(13,"date"),a(),r(14,"td"),o(15),a(),r(16,"td"),u(17,ct,1,0,"ng-container",38),a()()),n&2){let t=e.$implicit,i=b(4),d=p(),g=b(66);s(2),l("ngIf",t.source!=="history")("ngIfElse",i),s(4),c(t.runId),s(2),h("data-status",t.status),s(),c(t.status),s(),l("ngIf",t.source==="history"),s(2),c(O(13,10,t.startedAt,"medium")),s(3),c(d.elapsed(t)),s(2),l("ngTemplateOutlet",g)("ngTemplateOutletContext",_(13,Y,t))}}function pt(n,e){n&1&&(r(0,"tr")(1,"td",44),o(2,"No runs match the current filters."),a()())}function ut(n,e){if(n&1&&(r(0,"a",49),o(1,"View"),a()),n&2){let t=p().$implicit;l("routerLink",_(1,w,t.runId))}}function mt(n,e){if(n&1&&(r(0,"a",50),o(1,"Answer"),a()),n&2){let t=p().$implicit;l("routerLink",_(1,w,t.runId))}}function gt(n,e){if(n&1){let t=y();r(0,"button",51),v("click",function(){let d=x(t).$implicit,g=p().$implicit,m=p();return f(m.perform(g,d))}),o(1),a()}if(n&2){let t=e.$implicit,i=p().$implicit,d=p();R("danger",t==="delete"),l("disabled",d.busyRun===i.runId),s(),c(d.actionLabels[t])}}function _t(n,e){if(n&1&&(r(0,"div",45),u(1,ut,2,3,"a",46)(2,mt,2,3,"a",47)(3,gt,2,4,"button",48),a()),n&2){let t=e.$implicit,i=p();s(),l("ngIf",i.can(t,"view")),s(),l("ngIf",i.can(t,"answer")),s(),l("ngForOf",i.buttonActions(t))}}var X=class n{api=A(Q);refreshTimer;runs=[];filter="all";search="";dateRange="all";loading=!1;error="";busyRun="";lastUpdated;statusItems=[{status:"all",label:"All"},{status:"running",label:"Running"},{status:"paused",label:"Paused"},{status:"completed",label:"Completed"},{status:"failed",label:"Failed"},{status:"cancelled",label:"Cancelled"}];ngOnInit(){this.loadRuns(),this.refreshTimer=setInterval(()=>this.loadRuns(!1),5e3)}ngOnDestroy(){this.refreshTimer&&clearInterval(this.refreshTimer)}get filteredRuns(){let e=this.search.trim().toLowerCase(),t=this.cutoffDate();return this.runs.filter(i=>(this.filter==="all"||i.status===this.filter)&&(!e||i.workflow.toLowerCase().includes(e)||i.runId.toLowerCase().includes(e))&&(!t||new Date(i.startedAt)>=t))}get activeRuns(){return this.filteredRuns.filter(e=>e.status==="running"||e.status==="paused")}get historyRuns(){return this.filteredRuns.filter(e=>e.status!=="running"&&e.status!=="paused")}loadRuns(e=!0){e&&(this.loading=!0),this.api.getRuns().pipe(P(()=>this.loading=!1)).subscribe({next:t=>{this.runs=t,this.lastUpdated=new Date,this.error=""},error:t=>this.error=t?.error?.error??"Unable to load workflow runs."})}count(e){return e==="all"?this.runs.length:this.runs.filter(t=>t.status===e).length}trackRun(e,t){return t.runId}elapsed(e){let t=e.durationMs??new Date(e.completedAt??Date.now()).getTime()-new Date(e.startedAt).getTime();return t<6e4?`${Math.max(0,Math.round(t/1e3))}s`:t<36e5?`${Math.round(t/6e4)}m`:`${(t/36e5).toFixed(1)}h`}actionLabels={cancel:"Cancel",abandon:"Abandon",approve:"Approve",reject:"Reject",resume:"Resume",delete:"Delete"};buttonActions(e){return T(e.status,e.source).filter(t=>t!=="view"&&t!=="answer")}can(e,t){return T(e.status,e.source).includes(t)}perform(e,t){if(!this.can(e,t)||["cancel","abandon","delete","reject"].includes(t)&&!confirm(`${t} run ${e.runId}?`))return;let i=t==="reject"?prompt("Rejection reason","Rejected by operator")??void 0:void 0;t==="reject"&&i===void 0||(this.busyRun=e.runId,this.error="",this.api.runAction(e.runId,t,i).pipe(P(()=>this.busyRun="")).subscribe({next:()=>this.loadRuns(!1),error:d=>this.error=d?.error?.error??`Unable to ${t} run.`}))}cutoffDate(){if(this.dateRange==="all")return;let e=new Date;return this.dateRange==="today"?e.setHours(0,0,0,0):e.setDate(e.getDate()-Number(this.dateRange.slice(0,-1))),e}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=F({type:n,selectors:[["app-dashboard"]],decls:67,vars:17,consts:[["noActive",""],["actions",""],["plainName",""],[1,"dashboard"],[1,"page-header"],[1,"eyebrow"],[1,"subtitle"],[1,"header-actions"],[1,"updated"],["type","button",1,"button","secondary",3,"click","disabled"],["routerLink","/workflows/builder",1,"button","primary"],["class","error-banner",4,"ngIf"],["role","group","aria-label","Run status filters",1,"summary"],["type","button","class","summary-item",3,"active","click",4,"ngFor","ngForOf"],[1,"controls"],["type","search","placeholder","Search workflow or run ID",1,"search",3,"ngModelChange","ngModel"],["aria-label","Date range",3,"ngModelChange","ngModel"],["value","all"],["value","today"],["value","7d"],["value","30d"],[1,"capacity"],[1,"run-section"],[1,"section-heading"],["class","active-grid",4,"ngIf","ngIfElse"],[1,"table-wrap"],[4,"ngFor","ngForOf","ngForTrackBy"],[4,"ngIf"],[1,"error-banner"],["type","button",1,"summary-item",3,"click"],[1,"status-dot"],[1,"active-grid"],["class","run-card",4,"ngFor","ngForOf","ngForTrackBy"],[1,"run-card"],[1,"run-title"],[3,"routerLink"],[1,"badge"],[1,"run-meta"],[4,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"empty"],[3,"routerLink",4,"ngIf","ngIfElse"],["class","history-tag",4,"ngIf"],[1,"run-name"],[1,"history-tag"],["colspan","5",1,"empty"],[1,"actions"],["class","icon-button","title","Open run",3,"routerLink",4,"ngIf"],["class","icon-button answer","fragment","answer","title","Answer the pending question",3,"routerLink",4,"ngIf"],["type","button",3,"danger","disabled","click",4,"ngFor","ngForOf"],["title","Open run",1,"icon-button",3,"routerLink"],["fragment","answer","title","Answer the pending question",1,"icon-button","answer",3,"routerLink"],["type","button",3,"click","disabled"]],template:function(t,i){if(t&1){let d=y();r(0,"section",3)(1,"header",4)(2,"div")(3,"p",5),o(4,"Mission Control"),a(),r(5,"h1"),o(6,"Dashboard"),a(),r(7,"p",6),o(8,"Monitor workflow execution and control run lifecycle."),a()(),r(9,"div",7)(10,"span",8),o(11),C(12,"date"),a(),r(13,"button",9),v("click",function(){return i.loadRuns()}),o(14,"Refresh"),a(),r(15,"a",10),o(16,"New workflow"),a()()(),u(17,tt,2,1,"div",11),r(18,"div",12),u(19,et,6,5,"button",13),a(),r(20,"div",14)(21,"input",15),D("ngModelChange",function(m){return x(d),E(i.search,m)||(i.search=m),f(m)}),a(),r(22,"select",16),D("ngModelChange",function(m){return x(d),E(i.dateRange,m)||(i.dateRange=m),f(m)}),r(23,"option",17),o(24,"All time"),a(),r(25,"option",18),o(26,"Today"),a(),r(27,"option",19),o(28,"Last 7 days"),a(),r(29,"option",20),o(30,"Last 30 days"),a()(),r(31,"span",21),o(32),a()(),r(33,"section",22)(34,"div",23)(35,"h2"),o(36,"Active runs"),a(),r(37,"span"),o(38),a()(),u(39,at,2,2,"div",24)(40,it,2,0,"ng-template",null,0,M),a(),r(42,"section",22)(43,"div",23)(44,"h2"),o(45,"Run history"),a(),r(46,"span"),o(47),a()(),r(48,"div",25)(49,"table")(50,"thead")(51,"tr")(52,"th"),o(53,"Workflow"),a(),r(54,"th"),o(55,"Status"),a(),r(56,"th"),o(57,"Started"),a(),r(58,"th"),o(59,"Duration"),a(),r(60,"th"),o(61,"Actions"),a()()(),r(62,"tbody"),u(63,dt,18,15,"tr",26)(64,pt,3,0,"tr",27),a()()()()(),u(65,_t,4,3,"ng-template",null,1,M)}if(t&2){let d=b(41);s(11),c(i.lastUpdated?"Updated "+O(12,14,i.lastUpdated,"HH:mm:ss"):"Not updated"),s(2),l("disabled",i.loading),s(4),l("ngIf",i.error),s(2),l("ngForOf",i.statusItems),s(2),k("ngModel",i.search),s(),k("ngModel",i.dateRange),s(10),I("",i.activeRuns.length," active"),s(6),c(i.activeRuns.length),s(),l("ngIf",i.activeRuns.length)("ngIfElse",d),s(8),c(i.historyRuns.length),s(16),l("ngForOf",i.historyRuns)("ngForTrackBy",i.trackRun),s(),l("ngIf",!i.historyRuns.length)}},dependencies:[V,N,$,z,K,G,J,U,q,W,H,j,B],styles:["[_nghost-%COMP%]{display:block}.dashboard[_ngcontent-%COMP%]{max-width:1440px;margin:0 auto;padding:28px 32px 56px}.page-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;gap:24px;align-items:flex-end;margin-bottom:24px}.eyebrow[_ngcontent-%COMP%]{color:var(--primary);font-size:12px;font-weight:700;text-transform:uppercase;margin:0 0 5px}.page-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-size:28px;line-height:1.2;margin:0}.subtitle[_ngcontent-%COMP%]{color:var(--text-secondary);margin:7px 0 0}.header-actions[_ngcontent-%COMP%], .controls[_ngcontent-%COMP%], .actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.updated[_ngcontent-%COMP%]{font-size:12px;color:var(--text-tertiary)}.button[_ngcontent-%COMP%], .actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .icon-button[_ngcontent-%COMP%]{border:1px solid var(--border-bright);background:var(--surface);color:var(--text-primary);padding:8px 11px;font:inherit;font-size:12px;text-decoration:none;cursor:pointer;border-radius:5px}.button.primary[_ngcontent-%COMP%]{background:var(--primary);border-color:var(--primary);color:var(--primary-foreground);font-weight:700}.button[_ngcontent-%COMP%]:disabled, .actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:disabled{opacity:.34;cursor:not-allowed}.error-banner[_ngcontent-%COMP%]{border:1px solid var(--error);background:color-mix(in oklch,var(--error) 12%,var(--surface));padding:10px 12px;margin-bottom:16px;border-radius:5px}.summary[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));border:1px solid var(--border);background:var(--surface);border-radius:7px;overflow:hidden}.summary-item[_ngcontent-%COMP%]{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:8px;min-height:54px;border:0;border-right:1px solid var(--border);background:transparent;color:var(--text-secondary);padding:0 14px;cursor:pointer}.summary-item[_ngcontent-%COMP%]:last-child{border:0}.summary-item.active[_ngcontent-%COMP%]{background:var(--surface-elevated);color:var(--text-primary);box-shadow:inset 0 -2px var(--primary)}.status-dot[_ngcontent-%COMP%]{width:8px;height:8px;border-radius:50%;background:var(--text-tertiary)}.status-dot[data-status=running][_ngcontent-%COMP%], .badge[data-status=running][_ngcontent-%COMP%]{color:var(--primary)}.status-dot[data-status=running][_ngcontent-%COMP%]{background:var(--primary)}.status-dot[data-status=paused][_ngcontent-%COMP%], .badge[data-status=paused][_ngcontent-%COMP%]{color:var(--warning)}.status-dot[data-status=paused][_ngcontent-%COMP%]{background:var(--warning)}.status-dot[data-status=completed][_ngcontent-%COMP%], .badge[data-status=completed][_ngcontent-%COMP%]{color:var(--success)}.status-dot[data-status=completed][_ngcontent-%COMP%]{background:var(--success)}.status-dot[data-status=failed][_ngcontent-%COMP%], .status-dot[data-status=cancelled][_ngcontent-%COMP%]{background:var(--error)}.badge[data-status=failed][_ngcontent-%COMP%], .badge[data-status=cancelled][_ngcontent-%COMP%]{color:var(--error)}.controls[_ngcontent-%COMP%]{margin:18px 0}.search[_ngcontent-%COMP%], select[_ngcontent-%COMP%]{height:38px;border:1px solid var(--border);background:var(--surface);color:var(--text-primary);padding:0 11px;border-radius:5px}.search[_ngcontent-%COMP%]{width:min(390px,100%)}.capacity[_ngcontent-%COMP%]{margin-left:auto;color:var(--text-secondary);font-size:13px}.run-section[_ngcontent-%COMP%]{margin-top:28px}.section-heading[_ngcontent-%COMP%]{display:flex;align-items:center;gap:9px;margin-bottom:12px}.section-heading[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:16px;margin:0}.section-heading[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--text-tertiary);font-size:12px}.active-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:12px}.run-card[_ngcontent-%COMP%]{border:1px solid var(--border);background:var(--surface);padding:16px;border-radius:7px}.run-title[_ngcontent-%COMP%]{display:flex;justify-content:space-between;gap:12px}.run-title[_ngcontent-%COMP%] a[_ngcontent-%COMP%], td[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:var(--text-primary);font-weight:700;text-decoration:none}.run-title[_ngcontent-%COMP%] code[_ngcontent-%COMP%], td[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{display:block;color:var(--text-tertiary);font-size:11px;margin-top:4px}.badge[_ngcontent-%COMP%]{border:1px solid currentColor;height:fit-content;padding:3px 7px;border-radius:4px;font-size:11px;text-transform:uppercase}.history-tag[_ngcontent-%COMP%]{border:1px dashed var(--border-bright);color:var(--text-tertiary);padding:2px 6px;border-radius:4px;font-size:10px;text-transform:uppercase;margin-left:6px}td[_ngcontent-%COMP%] .run-name[_ngcontent-%COMP%]{color:var(--text-primary);font-weight:700}.run-meta[_ngcontent-%COMP%]{display:flex;justify-content:space-between;color:var(--text-secondary);font-size:12px;margin:18px 0 14px}.actions[_ngcontent-%COMP%]{flex-wrap:wrap}.actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .icon-button[_ngcontent-%COMP%]{padding:5px 7px}.actions[_ngcontent-%COMP%] .danger[_ngcontent-%COMP%]{color:var(--error)}.icon-button.answer[_ngcontent-%COMP%]{border-color:var(--warning);color:var(--warning);font-weight:700}.table-wrap[_ngcontent-%COMP%]{overflow:auto;border:1px solid var(--border);border-radius:7px}table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse;background:var(--surface);font-size:13px}th[_ngcontent-%COMP%]{text-align:left;color:var(--text-secondary);font-size:11px;text-transform:uppercase;font-weight:600}th[_ngcontent-%COMP%], td[_ngcontent-%COMP%]{padding:12px 14px;border-bottom:1px solid var(--border);white-space:nowrap}tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%]{border-bottom:0}.empty[_ngcontent-%COMP%]{padding:24px;color:var(--text-tertiary);text-align:center;border:1px dashed var(--border);border-radius:7px}td.empty[_ngcontent-%COMP%]{border:0}.table-wrap[_ngcontent-%COMP%] .actions[_ngcontent-%COMP%]{min-width:220px}@media(max-width:800px){.dashboard[_ngcontent-%COMP%]{padding:20px 16px}.page-header[_ngcontent-%COMP%]{align-items:flex-start;flex-direction:column}.summary[_ngcontent-%COMP%]{grid-template-columns:repeat(2,1fr)}.summary-item[_ngcontent-%COMP%]{border-bottom:1px solid var(--border)}.controls[_ngcontent-%COMP%]{align-items:stretch;flex-wrap:wrap}.search[_ngcontent-%COMP%]{width:100%}.capacity[_ngcontent-%COMP%]{margin-left:0}.active-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}}"]})};export{X as DashboardComponent};
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
<base href="/">
|
|
7
7
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
8
8
|
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
|
9
|
-
<style>@layer theme,base,components,utilities;@layer theme{
|
|
9
|
+
<style>@layer properties;@layer theme,base,components,utilities;@layer theme{:root{--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{box-sizing:border-box;margin:0;padding:0;border:0 solid}html{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}}@layer utilities{}: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}@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;}@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{--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}}}</style><link rel="stylesheet" href="styles-MG7ITKTI.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-MG7ITKTI.css"></noscript></head>
|
|
10
10
|
<body>
|
|
11
11
|
<app-root></app-root>
|
|
12
|
-
<link rel="modulepreload" href="chunk-
|
|
12
|
+
<link rel="modulepreload" href="chunk-UN7U5NAR.js"><link rel="modulepreload" href="chunk-WDOCF7IL.js"><script src="polyfills-YMBILSHJ.js" type="module"></script><script src="main-7PKVTIG7.js" type="module"></script></body>
|
|
13
13
|
</html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as S,c as P,e as M,f as O,g as A}from"./chunk-
|
|
1
|
+
import{a as S,c as P,e as M,f as O,g as A}from"./chunk-UN7U5NAR.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,Sa as o,T as m,Ta as h,Tb as j,U as g,Ub as L,Xa as b,Ya as k,Za as c,gb as i,hb as _,ob as y,qa as a,zb as w}from"./chunk-WDOCF7IL.js";var E=[{path:"",loadComponent:()=>import("./chunk-YBYKUHHQ.js").then(e=>e.DashboardComponent)},{path:"workflows",loadComponent:()=>import("./chunk-FFYMNCCZ.js").then(e=>e.WorkflowsComponent)},{path:"workflows/builder",loadComponent:()=>import("./chunk-NSKD5KW7.js").then(e=>e.WorkflowBuilderComponent)},{path:"workflows/detail",loadComponent:()=>import("./chunk-TTPORHEG.js").then(e=>e.WorkflowDetailComponent)},{path:"conversations",loadComponent:()=>import("./chunk-S76O6O57.js").then(e=>e.ConversationsComponent)},{path:"conversations/:conversationId",loadComponent:()=>import("./chunk-S76O6O57.js").then(e=>e.ConversationsComponent)},{path:"runs/:runId",loadComponent:()=>import("./chunk-VA6YRKIE.js").then(e=>e.RunExecutionComponent)},{path:"settings",loadComponent:()=>import("./chunk-IBSRIWBK.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}.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}.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 +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,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}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};
|