@kb-labs/workflow-entry 2.47.0 → 2.53.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/dist/rest/runs-list-handler.js +1 -1
- package/dist/rest/runs-list-handler.js.map +1 -1
- package/dist/widgets/162.js +2 -2
- package/dist/widgets/162.js.map +1 -1
- package/dist/widgets/__federation_expose_RunDetail.js +2 -2
- package/dist/widgets/__federation_expose_RunDetail.js.map +1 -1
- package/dist/widgets/__federation_expose_Runs.js +1 -1
- package/dist/widgets/__federation_expose_Runs.js.map +1 -1
- package/dist/widgets/mf-manifest.json +12 -12
- package/dist/widgets/mf-stats.json +12 -12
- package/dist/widgets/remoteEntry.js +2 -2
- package/dist/widgets/remoteEntry.js.map +1 -1
- package/package.json +6 -6
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_kb_labs_workflow_entry=self.webpackChunk_kb_labs_workflow_entry||[]).push([["67"],{9725(e,t,r){r.r(t),r.d(t,{default:()=>I});var n=r(4552),a=r(2913),l=r(6831),o=r(1349),i=r(2383),s=r(4461),u=r(5688),c=r(9747),d=r(7205),p={failed:{color:"error",label:"Failed"},waiting_approval:{color:"warning",label:"Approval"},running:{color:"processing",label:"Running"},queued:{color:"default",label:"Queued"},success:{color:"success",label:"Done"},cancelled:{color:"default",label:"Cancelled"}};function y(e){var t,r,a,l,i,s,y,f,g,h,v=e.run,x=e.onClick,m=(0,d.F)(v).phases.map(function(e){var t=e.steps.every(function(e){return"success"===e.stepRun.status}),r=e.steps.some(function(e){return"running"===e.stepRun.status||"waiting_approval"===e.stepRun.status});return{label:e.label,status:t?"done":r?"active":"pending"}}),b=function(e){var t=!0,r=!1,n=void 0;try{for(var a,l=e.jobs[Symbol.iterator]();!(t=(a=l.next()).done);t=!0){var o=a.value,i=!0,s=!1,u=void 0;try{for(var c,d=o.steps[Symbol.iterator]();!(i=(c=d.next()).done);i=!0){var p,y=c.value;if("running"===y.status||"waiting_approval"===y.status)return{name:y.name,summary:null==(p=y.spec)?void 0:p.summary,status:y.status}}}catch(e){s=!0,u=e}finally{try{i||null==d.return||d.return()}finally{if(s)throw u}}}}catch(e){r=!0,n=e}finally{try{t||null==l.return||l.return()}finally{if(r)throw n}}return null}(v),j=(null==(t=v.trigger.payload)?void 0:t.task)&&"string"==typeof t.task?t.task:"",w=null!=(r=null!=(a=null!=(l=v.startedAt)?l:null==(f=v.jobs[0])?void 0:f.startedAt)?a:v.queuedAt)?r:null,k=null!=(i=null!=(s=v.finishedAt)?s:null==(g=v.jobs[0])?void 0:g.finishedAt)?i:null,T=w?(0,u.a3)((k?new Date(k).getTime():Date.now())-new Date(w).getTime()):null,I=p[v.status],S=w?function(e){var t=Math.floor((Date.now()-new Date(e).getTime())/6e4);if(t<1)return"just now";if(t<60)return"".concat(t,"m ago");var r=Math.floor(t/60);return r<24?"".concat(r,"h ago"):"".concat(Math.floor(r/24),"d ago")}(w):null;return(0,n.jsxs)("div",{onClick:x,style:{padding:"12px 16px",background:"var(--bg-primary)",border:"1px solid var(--border-primary)",borderRadius:8,cursor:"pointer",transition:"border-color 0.15s"},onMouseEnter:function(e){return e.currentTarget.style.borderColor="var(--link)"},onMouseLeave:function(e){return e.currentTarget.style.borderColor="var(--border-primary)"},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:6},children:[(0,n.jsx)("span",{style:{fontSize:14,fontWeight:500,color:"var(--text-primary)",flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:v.name}),I&&(0,n.jsx)(o.UITag,{color:I.color,style:{marginLeft:8,flexShrink:0},children:I.label})]}),(0,n.jsxs)("div",{style:{display:"flex",gap:12,marginBottom:j||m.length>0||b?8:0},children:[S&&(0,n.jsx)("span",{style:{fontSize:12,color:"var(--text-tertiary)"},children:S}),T&&(0,n.jsx)("span",{style:{fontSize:12,color:"var(--text-tertiary)"},children:T}),(0,n.jsxs)("span",{style:{fontSize:12,color:"var(--text-tertiary)",fontFamily:"monospace"},children:["#",v.id.slice(-6)]})]}),j&&(0,n.jsx)("div",{style:{fontSize:12,color:"var(--text-secondary)",marginBottom:8,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:j}),m.length>0&&(0,n.jsx)("div",{style:{marginBottom:8},children:(0,n.jsx)(c.g,{phases:m,compact:!0})}),b&&(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6},children:[(0,n.jsx)(u.md,{status:b.status}),(0,n.jsx)("span",{style:{fontSize:12,color:"var(--text-secondary)"},children:null!=(y=b.summary)?y:b.name})]}),"failed"===v.status&&(null==(h=v.result)?void 0:h.error)&&(0,n.jsx)("div",{style:{fontSize:12,color:"var(--error)",marginTop:6,padding:"4px 8px",background:"color-mix(in srgb, var(--error) 6%, transparent)",borderRadius:4,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:v.result.error.message})]})}var f=[{key:"attention",label:"Needs Attention",statuses:["waiting_approval"],color:"var(--warning)"},{key:"running",label:"Running",statuses:["running","queued"],color:"var(--info)"},{key:"completed",label:"Completed",statuses:["success"],color:"var(--success)"},{key:"failed",label:"Failed",statuses:["failed"],color:"var(--error)"},{key:"other",label:"Other",statuses:["cancelled","skipped","pending"],color:"var(--text-tertiary)"}];function g(e){var t=e.runs,r=e.onRunClick,l=a.useMemo(function(){var e={},r=!0,n=!1,a=void 0;try{for(var l,o=f[Symbol.iterator]();!(r=(l=o.next()).done);r=!0)!function(){var r=l.value;e[r.key]=t.filter(function(e){return r.statuses.includes(e.status)})}()}catch(e){n=!0,a=e}finally{try{r||null==o.return||o.return()}finally{if(n)throw a}}return e},[t]),i=f.filter(function(e){var t,r;return(null!=(t=null==(r=l[e.key])?void 0:r.length)?t:0)>0});return 0===t.length?(0,n.jsx)("div",{style:{textAlign:"center",padding:"48px 0",color:"var(--text-secondary)"},children:(0,n.jsx)(o.UITypographyText,{className:"typo-description text-secondary",children:"No runs found"})}):(0,n.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:32},children:i.map(function(e){return(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:12},children:[(0,n.jsx)("span",{style:{width:8,height:8,borderRadius:"50%",background:e.color,display:"inline-block"}}),(0,n.jsx)(o.UITypographyText,{className:"typo-label",style:{color:"var(--text-secondary)"},children:e.label}),(0,n.jsxs)(o.UITypographyText,{className:"typo-caption text-tertiary",children:["(",l[e.key].length,")"]})]}),(0,n.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(320px, 1fr))",gap:12},children:l[e.key].map(function(e){return(0,n.jsx)(y,{run:e,onClick:function(){return r(e.id)}},e.id)})})]},e.key)})})}var h=[{status:"queued",label:"Queued",color:"var(--text-tertiary)"},{status:"running",label:"Running",color:"var(--info)"},{status:"waiting_approval",label:"Waiting Approval",color:"var(--warning)"},{status:"success",label:"Success",color:"var(--success)"},{status:"failed",label:"Failed",color:"var(--error)"},{status:"cancelled",label:"Cancelled",color:"var(--text-tertiary)"}];function v(e){var t=e.runs,r=e.onRunClick,a=Object.fromEntries(h.map(function(e){return[e.status,t.filter(function(t){return t.status===e.status})]})),l=h.filter(function(e){var t,r;return(null!=(t=null==(r=a[e.status])?void 0:r.length)?t:0)>0});return 0===l.length?(0,n.jsx)("div",{style:{textAlign:"center",padding:"48px 0"},children:(0,n.jsx)(o.UITypographyText,{className:"typo-description text-secondary",children:"No runs found"})}):(0,n.jsx)("div",{style:{display:"flex",gap:16,overflowX:"auto",paddingBottom:8},children:l.map(function(e){return(0,n.jsxs)("div",{style:{minWidth:280,maxWidth:320,flexShrink:0},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:10,padding:"0 4px"},children:[(0,n.jsx)("span",{style:{width:8,height:8,borderRadius:"50%",background:e.color,display:"inline-block"}}),(0,n.jsx)(o.UITypographyText,{className:"typo-label",style:{color:"var(--text-secondary)"},children:e.label}),(0,n.jsx)(o.UITypographyText,{className:"typo-caption text-tertiary",children:a[e.status].length})]}),(0,n.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:8},children:a[e.status].map(function(e){return(0,n.jsx)(y,{run:e,onClick:function(){return r(e.id)}},e.id)})})]},e.status)})})}var x=r(8292);function m(e){var t=e.runs,r=e.loading,l=e.onRunClick,i=(0,a.useMemo)(function(){return[{title:"Run ID",dataIndex:"id",key:"id",width:180,render:function(e){return(0,n.jsxs)(o.UITypographyText,{className:"typo-caption",code:!0,ellipsis:{tooltip:e},children:[e.slice(0,16),"..."]})}},{title:"Workflow",dataIndex:"name",key:"name",width:220,render:function(e,t){return(0,n.jsxs)(o.UITypographyText,{className:"typo-body",strong:!0,children:[t.name,"@",t.version]})}},{title:"Status",dataIndex:"status",key:"status",width:140,render:function(e){return(0,n.jsx)(x.d,{status:e})}},{title:"Triggered By",key:"actor",width:140,render:function(e,t){var r;return(0,n.jsx)(o.UITypographyText,{className:"typo-caption text-secondary",children:null!=(r=t.trigger.actor)?r:"unknown"})}},{title:"Started At",dataIndex:"startedAt",key:"startedAt",width:180,render:function(e){return(0,n.jsx)(o.UITypographyText,{className:"typo-caption",children:e?new Date(e).toLocaleString():"-"})}},{title:"Duration",key:"duration",width:100,render:function(e,t){return(0,n.jsx)(o.UITypographyText,{className:"typo-caption",children:function(e){if(!e.startedAt)return"-";var t=new Date(e.startedAt).getTime(),r=Math.floor(((e.finishedAt?new Date(e.finishedAt).getTime():Date.now())-t)/1e3);if(r<60)return"".concat(r,"s");var n=Math.floor(r/60);if(n<60)return"".concat(n,"m ").concat(r%60,"s");var a=Math.floor(n/60);return"".concat(a,"h ").concat(n%60,"m")}(t)})}}]},[]);return(0,n.jsx)(o.UITable,{rowKey:"id",columns:i,dataSource:t,loading:r,scroll:{x:960},pagination:{pageSize:20},onRow:function(e){return{style:{cursor:"pointer"},onClick:function(){return l(e.id)}}}})}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function j(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function w(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function k(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var l=[],o=!0,i=!1;try{for(a=a.call(e);!(o=(r=a.next()).done)&&(l.push(r.value),!t||l.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==a.return||a.return()}finally{if(i)throw n}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return b(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return b(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var T={triage:{label:"Triage"},board:{label:"Board"},table:{label:"Table"}};function I(){var e,t=(0,l.useNavigate)(),r=k((0,a.useState)("triage"),2),u=r[0],c=r[1],d=k((0,a.useState)({limit:50}),2),p=d[0],y=d[1],f=(0,i.useData)("/exec/api/v1/runs",{params:j({limit:p.limit},p.status?{status:p.status}:{}),pollingMs:"table"!==u?5e3:void 0}),h=f.data,x=f.isLoading,b=f.refetch,I=null!=(e=null==h?void 0:h.runs)?e:[];return(0,n.jsxs)(o.UIPage,{width:"full",children:[(0,n.jsx)(o.UIPageHeader,{title:"Workflow Runs",description:"All workflow executions",breadcrumbs:[{title:"Home",href:"/"},{title:"Workflows",href:"/workflows"},{title:"Runs"}],actions:(0,n.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center"},children:[(0,n.jsx)(s.k,{views:T,current:u,onChange:c}),(0,n.jsx)(o.UIButton,{icon:(0,n.jsx)(o.UIIcon,{name:"ReloadOutlined",spin:x}),onClick:function(){return b()}})]})}),(0,n.jsx)(o.UICard,{style:{marginBottom:"var(--spacing-section)"},children:(0,n.jsxs)(o.UIRow,{gutter:16,children:[(0,n.jsxs)(o.UICol,{span:8,children:[(0,n.jsx)(o.UITypographyText,{className:"typo-label",children:"Filter by Status"}),(0,n.jsx)(o.UISelect,{style:{width:"100%",marginTop:8},placeholder:"All statuses",allowClear:!0,value:p.status,onChange:function(e){return y(w(j({},p),{status:e}))},options:[{label:"Running",value:"running"},{label:"Success",value:"success"},{label:"Failed",value:"failed"},{label:"Cancelled",value:"cancelled"},{label:"Queued",value:"queued"}]})]}),(0,n.jsxs)(o.UICol,{span:8,children:[(0,n.jsx)(o.UITypographyText,{className:"typo-label",children:"Limit"}),(0,n.jsx)(o.UISelect,{style:{width:"100%",marginTop:8},value:p.limit,onChange:function(e){return y(w(j({},p),{limit:e}))},options:[{label:"25",value:25},{label:"50",value:50},{label:"100",value:100},{label:"200",value:200}]})]})]})}),"triage"===u&&(0,n.jsx)(g,{runs:I,onRunClick:function(e){return t("/p/workflows/runs/".concat(e))}}),"board"===u&&(0,n.jsx)(v,{runs:I,onRunClick:function(e){return t("/p/workflows/runs/".concat(e))}}),"table"===u&&(0,n.jsx)(o.UICard,{children:(0,n.jsx)(m,{runs:I,loading:x,onRunClick:function(e){return t("/p/workflows/runs/".concat(e))}})})]})}}}]);
|
|
1
|
+
"use strict";(self.webpackChunk_kb_labs_workflow_entry=self.webpackChunk_kb_labs_workflow_entry||[]).push([["67"],{9725(e,t,r){r.r(t),r.d(t,{default:()=>I});var n=r(4552),l=r(2913),a=r(6831),o=r(1349),i=r(2383),s=r(4461),u=r(5688),c=r(9747),d=r(7205),p={failed:{color:"error",label:"Failed"},waiting_approval:{color:"warning",label:"Approval"},running:{color:"processing",label:"Running"},queued:{color:"default",label:"Queued"},success:{color:"success",label:"Done"},cancelled:{color:"default",label:"Cancelled"}};function y(e){var t,r,l,a,i,s,y,f,g,h,v=e.run,x=e.onClick,m=(0,d.F)(v).phases.map(function(e){var t=e.steps.every(function(e){return"success"===e.stepRun.status}),r=e.steps.some(function(e){return"running"===e.stepRun.status||"waiting_approval"===e.stepRun.status});return{label:e.label,status:t?"done":r?"active":"pending"}}),b=function(e){var t=!0,r=!1,n=void 0;try{for(var l,a=e.jobs[Symbol.iterator]();!(t=(l=a.next()).done);t=!0){var o=l.value,i=!0,s=!1,u=void 0;try{for(var c,d=o.steps[Symbol.iterator]();!(i=(c=d.next()).done);i=!0){var p,y=c.value;if("running"===y.status||"waiting_approval"===y.status)return{name:y.name,summary:null==(p=y.spec)?void 0:p.summary,status:y.status}}}catch(e){s=!0,u=e}finally{try{i||null==d.return||d.return()}finally{if(s)throw u}}}}catch(e){r=!0,n=e}finally{try{t||null==a.return||a.return()}finally{if(r)throw n}}return null}(v),j=(null==(t=v.trigger.payload)?void 0:t.task)&&"string"==typeof t.task?t.task:"",w=null!=(r=null!=(l=null!=(a=v.startedAt)?a:null==(f=v.jobs[0])?void 0:f.startedAt)?l:v.queuedAt)?r:null,k=null!=(i=null!=(s=v.finishedAt)?s:null==(g=v.jobs[0])?void 0:g.finishedAt)?i:null,T=w?(0,u.a3)((k?new Date(k).getTime():Date.now())-new Date(w).getTime()):null,I=p[v.status],S=w?function(e){var t=Math.floor((Date.now()-new Date(e).getTime())/6e4);if(t<1)return"just now";if(t<60)return"".concat(t,"m ago");var r=Math.floor(t/60);return r<24?"".concat(r,"h ago"):"".concat(Math.floor(r/24),"d ago")}(w):null;return(0,n.jsxs)("div",{onClick:x,style:{padding:"12px 16px",background:"var(--bg-primary)",border:"1px solid var(--border-primary)",borderRadius:8,cursor:"pointer",transition:"border-color 0.15s"},onMouseEnter:function(e){return e.currentTarget.style.borderColor="var(--link)"},onMouseLeave:function(e){return e.currentTarget.style.borderColor="var(--border-primary)"},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:6},children:[(0,n.jsx)("span",{style:{fontSize:14,fontWeight:500,color:"var(--text-primary)",flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:v.name}),I&&(0,n.jsx)(o.UITag,{color:I.color,style:{marginLeft:8,flexShrink:0},children:I.label})]}),(0,n.jsxs)("div",{style:{display:"flex",gap:12,marginBottom:j||m.length>0||b?8:0},children:[S&&(0,n.jsx)("span",{style:{fontSize:12,color:"var(--text-tertiary)"},children:S}),T&&(0,n.jsx)("span",{style:{fontSize:12,color:"var(--text-tertiary)"},children:T}),(0,n.jsxs)("span",{style:{fontSize:12,color:"var(--text-tertiary)",fontFamily:"monospace"},children:["#",v.id.slice(-6)]})]}),j&&(0,n.jsx)("div",{style:{fontSize:12,color:"var(--text-secondary)",marginBottom:8,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:j}),m.length>0&&(0,n.jsx)("div",{style:{marginBottom:8},children:(0,n.jsx)(c.g,{phases:m,compact:!0})}),b&&(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6},children:[(0,n.jsx)(u.md,{status:b.status}),(0,n.jsx)("span",{style:{fontSize:12,color:"var(--text-secondary)"},children:null!=(y=b.summary)?y:b.name})]}),"failed"===v.status&&(null==(h=v.result)?void 0:h.error)&&(0,n.jsx)("div",{style:{fontSize:12,color:"var(--error)",marginTop:6,padding:"4px 8px",background:"color-mix(in srgb, var(--error) 6%, transparent)",borderRadius:4,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:v.result.error.message})]})}var f=[{key:"attention",label:"Needs Attention",statuses:["waiting_approval"],color:"var(--warning)"},{key:"running",label:"Running",statuses:["running","queued"],color:"var(--info)"},{key:"completed",label:"Completed",statuses:["success"],color:"var(--success)"},{key:"failed",label:"Failed",statuses:["failed","dlq"],color:"var(--error)"},{key:"other",label:"Other",statuses:["cancelled","skipped","pending"],color:"var(--text-tertiary)"}];function g(e){var t=e.runs,r=e.onRunClick,a=l.useMemo(function(){var e={},r=!0,n=!1,l=void 0;try{for(var a,o=f[Symbol.iterator]();!(r=(a=o.next()).done);r=!0)!function(){var r=a.value;e[r.key]=t.filter(function(e){return r.statuses.includes(e.status)})}()}catch(e){n=!0,l=e}finally{try{r||null==o.return||o.return()}finally{if(n)throw l}}return e},[t]),i=f.filter(function(e){var t,r;return(null!=(t=null==(r=a[e.key])?void 0:r.length)?t:0)>0});return 0===t.length?(0,n.jsx)("div",{style:{textAlign:"center",padding:"48px 0",color:"var(--text-secondary)"},children:(0,n.jsx)(o.UITypographyText,{className:"typo-description text-secondary",children:"No runs found"})}):(0,n.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:32},children:i.map(function(e){return(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,marginBottom:12},children:[(0,n.jsx)("span",{style:{width:8,height:8,borderRadius:"50%",background:e.color,display:"inline-block"}}),(0,n.jsx)(o.UITypographyText,{className:"typo-label",style:{color:"var(--text-secondary)"},children:e.label}),(0,n.jsxs)(o.UITypographyText,{className:"typo-caption text-tertiary",children:["(",a[e.key].length,")"]})]}),(0,n.jsx)("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(320px, 1fr))",gap:12},children:a[e.key].map(function(e){return(0,n.jsx)(y,{run:e,onClick:function(){return r(e.id)}},e.id)})})]},e.key)})})}var h=[{status:"queued",label:"Queued",color:"var(--text-tertiary)"},{status:"running",label:"Running",color:"var(--info)"},{status:"waiting_approval",label:"Waiting Approval",color:"var(--warning)"},{status:"success",label:"Success",color:"var(--success)"},{status:"failed",label:"Failed",color:"var(--error)"},{status:"dlq",label:"Dead Letter",color:"var(--error)"},{status:"cancelled",label:"Cancelled",color:"var(--text-tertiary)"}];function v(e){var t=e.runs,r=e.onRunClick,l=Object.fromEntries(h.map(function(e){return[e.status,t.filter(function(t){return t.status===e.status})]})),a=h.filter(function(e){var t,r;return(null!=(t=null==(r=l[e.status])?void 0:r.length)?t:0)>0});return 0===a.length?(0,n.jsx)("div",{style:{textAlign:"center",padding:"48px 0"},children:(0,n.jsx)(o.UITypographyText,{className:"typo-description text-secondary",children:"No runs found"})}):(0,n.jsx)("div",{style:{display:"flex",gap:16,overflowX:"auto",paddingBottom:8},children:a.map(function(e){return(0,n.jsxs)("div",{style:{minWidth:280,maxWidth:320,flexShrink:0},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:10,padding:"0 4px"},children:[(0,n.jsx)("span",{style:{width:8,height:8,borderRadius:"50%",background:e.color,display:"inline-block"}}),(0,n.jsx)(o.UITypographyText,{className:"typo-label",style:{color:"var(--text-secondary)"},children:e.label}),(0,n.jsx)(o.UITypographyText,{className:"typo-caption text-tertiary",children:l[e.status].length})]}),(0,n.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:8},children:l[e.status].map(function(e){return(0,n.jsx)(y,{run:e,onClick:function(){return r(e.id)}},e.id)})})]},e.status)})})}var x=r(8292);function m(e){var t=e.runs,r=e.loading,a=e.onRunClick,i=(0,l.useMemo)(function(){return[{title:"Run ID",dataIndex:"id",key:"id",width:180,render:function(e){return(0,n.jsxs)(o.UITypographyText,{className:"typo-caption",code:!0,ellipsis:{tooltip:e},children:[e.slice(0,16),"..."]})}},{title:"Workflow",dataIndex:"name",key:"name",width:220,render:function(e,t){return(0,n.jsxs)(o.UITypographyText,{className:"typo-body",strong:!0,children:[t.name,"@",t.version]})}},{title:"Status",dataIndex:"status",key:"status",width:140,render:function(e){return(0,n.jsx)(x.d,{status:e})}},{title:"Triggered By",key:"actor",width:140,render:function(e,t){var r;return(0,n.jsx)(o.UITypographyText,{className:"typo-caption text-secondary",children:null!=(r=t.trigger.actor)?r:"unknown"})}},{title:"Started At",dataIndex:"startedAt",key:"startedAt",width:180,render:function(e){return(0,n.jsx)(o.UITypographyText,{className:"typo-caption",children:e?new Date(e).toLocaleString():"-"})}},{title:"Duration",key:"duration",width:100,render:function(e,t){return(0,n.jsx)(o.UITypographyText,{className:"typo-caption",children:function(e){if(!e.startedAt)return"-";var t=new Date(e.startedAt).getTime(),r=Math.floor(((e.finishedAt?new Date(e.finishedAt).getTime():Date.now())-t)/1e3);if(r<60)return"".concat(r,"s");var n=Math.floor(r/60);if(n<60)return"".concat(n,"m ").concat(r%60,"s");var l=Math.floor(n/60);return"".concat(l,"h ").concat(n%60,"m")}(t)})}}]},[]);return(0,n.jsx)(o.UITable,{rowKey:"id",columns:i,dataSource:t,loading:r,scroll:{x:960},pagination:{pageSize:20},onRow:function(e){return{style:{cursor:"pointer"},onClick:function(){return a(e.id)}}}})}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function j(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){var n;n=r[t],t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n})}return e}function w(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t})(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}function k(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r,n,l=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,i=!1;try{for(l=l.call(e);!(o=(r=l.next()).done)&&(a.push(r.value),!t||a.length!==t);o=!0);}catch(e){i=!0,n=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw n}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return b(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if("Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r)return Array.from(r);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return b(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var T={triage:{label:"Triage"},board:{label:"Board"},table:{label:"Table"}};function I(){var e,t=(0,a.useNavigate)(),r=k((0,l.useState)("triage"),2),u=r[0],c=r[1],d=k((0,l.useState)({limit:50}),2),p=d[0],y=d[1],f=(0,i.useData)("/exec/api/v1/runs",{params:j({limit:p.limit},p.status?{status:p.status}:{}),pollingMs:"table"!==u?5e3:void 0}),h=f.data,x=f.isLoading,b=f.refetch,I=null!=(e=null==h?void 0:h.runs)?e:[];return(0,n.jsxs)(o.UIPage,{width:"full",children:[(0,n.jsx)(o.UIPageHeader,{title:"Workflow Runs",description:"All workflow executions",breadcrumbs:[{title:"Home",href:"/"},{title:"Workflows",href:"/workflows"},{title:"Runs"}],actions:(0,n.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center"},children:[(0,n.jsx)(s.k,{views:T,current:u,onChange:c}),(0,n.jsx)(o.UIButton,{icon:(0,n.jsx)(o.UIIcon,{name:"ReloadOutlined",spin:x}),onClick:function(){return b()}})]})}),(0,n.jsx)(o.UICard,{style:{marginBottom:"var(--spacing-section)"},children:(0,n.jsxs)(o.UIRow,{gutter:16,children:[(0,n.jsxs)(o.UICol,{span:8,children:[(0,n.jsx)(o.UITypographyText,{className:"typo-label",children:"Filter by Status"}),(0,n.jsx)(o.UISelect,{style:{width:"100%",marginTop:8},placeholder:"All statuses",allowClear:!0,value:p.status,onChange:function(e){return y(w(j({},p),{status:e}))},options:[{label:"Running",value:"running"},{label:"Success",value:"success"},{label:"Failed",value:"failed"},{label:"Dead Letter",value:"dlq"},{label:"Cancelled",value:"cancelled"},{label:"Queued",value:"queued"}]})]}),(0,n.jsxs)(o.UICol,{span:8,children:[(0,n.jsx)(o.UITypographyText,{className:"typo-label",children:"Limit"}),(0,n.jsx)(o.UISelect,{style:{width:"100%",marginTop:8},value:p.limit,onChange:function(e){return y(w(j({},p),{limit:e}))},options:[{label:"25",value:25},{label:"50",value:50},{label:"100",value:100},{label:"200",value:200}]})]})]})}),"triage"===u&&(0,n.jsx)(g,{runs:I,onRunClick:function(e){return t("/p/workflows/runs/".concat(e))}}),"board"===u&&(0,n.jsx)(v,{runs:I,onRunClick:function(e){return t("/p/workflows/runs/".concat(e))}}),"table"===u&&(0,n.jsx)(o.UICard,{children:(0,n.jsx)(m,{runs:I,loading:x,onRunClick:function(e){return t("/p/workflows/runs/".concat(e))}})})]})}}}]);
|
|
2
2
|
//# sourceMappingURL=__federation_expose_Runs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"__federation_expose_Runs.js","sources":["webpack://@kb-labs/workflow-entry/./src/studio/components/triage/RunCard.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/triage/TriageView.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/board/BoardView.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/table/TableView.tsx","webpack://@kb-labs/workflow-entry/./src/studio/pages/WorkflowsRuns.tsx"],"sourcesContent":["/**\n * Compact run card for triage/board views.\n * Shows workflow name, task, current status, phase progress, and duration.\n */\n\nimport * as React from 'react';\nimport { UITag } from '@kb-labs/sdk/studio';\nimport type { WorkflowRun } from '@kb-labs/workflow-contracts';\nimport { StatusDot, formatDuration } from '../pipeline/shared';\nimport { PhaseProgressBar } from '../shared/PhaseProgressBar';\nimport { usePipelineModel } from '../../hooks/use-pipeline-graph';\nimport type { PhaseStatus } from '../shared/PhaseProgressBar';\n\nfunction timeAgo(iso: string): string {\n const diffMs = Date.now() - new Date(iso).getTime();\n const m = Math.floor(diffMs / 60_000);\n if (m < 1) { return 'just now'; }\n if (m < 60) { return `${m}m ago`; }\n const h = Math.floor(m / 60);\n if (h < 24) { return `${h}h ago`; }\n return `${Math.floor(h / 24)}d ago`;\n}\n\nconst STATUS_TAG: Record<string, { color: string; label: string }> = {\n failed: { color: 'error', label: 'Failed' },\n waiting_approval: { color: 'warning', label: 'Approval' },\n running: { color: 'processing', label: 'Running' },\n queued: { color: 'default', label: 'Queued' },\n success: { color: 'success', label: 'Done' },\n cancelled: { color: 'default', label: 'Cancelled' },\n};\n\nfunction getCurrentStepInfo(run: WorkflowRun): { name: string; summary?: string; status: string } | null {\n for (const job of run.jobs) {\n for (const step of job.steps) {\n if (step.status === 'running' || step.status === 'waiting_approval') {\n return {\n name: step.name,\n summary: step.spec?.summary,\n status: step.status,\n };\n }\n }\n }\n return null;\n}\n\nfunction getTaskDescription(run: WorkflowRun): string {\n const payload = run.trigger.payload;\n if (payload?.task && typeof payload.task === 'string') { return payload.task; }\n return '';\n}\n\ninterface RunCardProps {\n run: WorkflowRun;\n onClick: () => void;\n}\n\nexport function RunCard({ run, onClick }: RunCardProps) {\n const model = usePipelineModel(run);\n const phases: PhaseStatus[] = model.phases.map((phase) => {\n const allDone = phase.steps.every((s) => s.stepRun.status === 'success');\n const anyActive = phase.steps.some(\n (s) => s.stepRun.status === 'running' || s.stepRun.status === 'waiting_approval',\n );\n return {\n label: phase.label,\n status: allDone ? 'done' as const : anyActive ? 'active' as const : 'pending' as const,\n };\n });\n\n const currentStep = getCurrentStepInfo(run);\n const task = getTaskDescription(run);\n const startedAt = run.startedAt ?? run.jobs[0]?.startedAt ?? run.queuedAt ?? null;\n const finishedAt = run.finishedAt ?? run.jobs[0]?.finishedAt ?? null;\n\n const duration = startedAt\n ? formatDuration(\n (finishedAt ? new Date(finishedAt).getTime() : Date.now()) -\n new Date(startedAt).getTime(),\n )\n : null;\n\n const statusTag = STATUS_TAG[run.status];\n const startedAgo = startedAt ? timeAgo(startedAt) : null;\n\n return (\n <div\n onClick={onClick}\n style={{\n padding: '12px 16px',\n background: 'var(--bg-primary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 8,\n cursor: 'pointer',\n transition: 'border-color 0.15s',\n }}\n onMouseEnter={(e: React.MouseEvent<HTMLDivElement>) => (e.currentTarget.style.borderColor = 'var(--link)')}\n onMouseLeave={(e: React.MouseEvent<HTMLDivElement>) => (e.currentTarget.style.borderColor = 'var(--border-primary)')}\n >\n {/* Header: name + status tag */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: 6 }}>\n <span style={{ fontSize: 14, fontWeight: 500, color: 'var(--text-primary)', flex: 1, minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {run.name}\n </span>\n {statusTag && (\n <UITag color={statusTag.color} style={{ marginLeft: 8, flexShrink: 0 }}>{statusTag.label}</UITag>\n )}\n </div>\n\n {/* Meta: time ago + duration */}\n <div style={{ display: 'flex', gap: 12, marginBottom: task || phases.length > 0 || currentStep ? 8 : 0 }}>\n {startedAgo && (\n <span style={{ fontSize: 12, color: 'var(--text-tertiary)' }}>{startedAgo}</span>\n )}\n {duration && (\n <span style={{ fontSize: 12, color: 'var(--text-tertiary)' }}>{duration}</span>\n )}\n <span style={{ fontSize: 12, color: 'var(--text-tertiary)', fontFamily: 'monospace' }}>\n #{run.id.slice(-6)}\n </span>\n </div>\n\n {/* Task description */}\n {task && (\n <div style={{ fontSize: 12, color: 'var(--text-secondary)', marginBottom: 8, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {task}\n </div>\n )}\n\n {/* Phase progress */}\n {phases.length > 0 && (\n <div style={{ marginBottom: 8 }}>\n <PhaseProgressBar phases={phases} compact />\n </div>\n )}\n\n {/* Current step */}\n {currentStep && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n <StatusDot status={currentStep.status} />\n <span style={{ fontSize: 12, color: 'var(--text-secondary)' }}>\n {currentStep.summary ?? currentStep.name}\n </span>\n </div>\n )}\n\n {/* Error summary for failed runs */}\n {run.status === 'failed' && run.result?.error && (\n <div style={{\n fontSize: 12, color: 'var(--error)', marginTop: 6,\n padding: '4px 8px', background: 'color-mix(in srgb, var(--error) 6%, transparent)',\n borderRadius: 4,\n overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap',\n }}>\n {run.result.error.message}\n </div>\n )}\n </div>\n );\n}\n","/**\n * Triage view for workflow runs.\n * Groups runs into: Needs Attention → Running → Completed → Failed\n */\n\nimport * as React from 'react';\nimport { UITypographyText } from '@kb-labs/sdk/studio';\nimport type { WorkflowRun } from '@kb-labs/workflow-contracts';\nimport { RunCard } from './RunCard';\n\nconst GROUPS: { key: string; label: string; statuses: string[]; color: string }[] = [\n {\n key: 'attention',\n label: 'Needs Attention',\n statuses: ['waiting_approval'],\n color: 'var(--warning)',\n },\n {\n key: 'running',\n label: 'Running',\n statuses: ['running', 'queued'],\n color: 'var(--info)',\n },\n {\n key: 'completed',\n label: 'Completed',\n statuses: ['success'],\n color: 'var(--success)',\n },\n {\n key: 'failed',\n label: 'Failed',\n statuses: ['failed'],\n color: 'var(--error)',\n },\n {\n key: 'other',\n label: 'Other',\n statuses: ['cancelled', 'skipped', 'pending'],\n color: 'var(--text-tertiary)',\n },\n];\n\ninterface TriageViewProps {\n runs: WorkflowRun[];\n onRunClick: (runId: string) => void;\n}\n\nexport function TriageView({ runs, onRunClick }: TriageViewProps) {\n const grouped = React.useMemo(() => {\n const result: Record<string, WorkflowRun[]> = {};\n for (const group of GROUPS) {\n result[group.key] = runs.filter((r) => (group.statuses as string[]).includes(r.status));\n }\n return result;\n }, [runs]);\n\n const nonEmptyGroups = GROUPS.filter((g) => (grouped[g.key]?.length ?? 0) > 0);\n\n if (runs.length === 0) {\n return (\n <div style={{ textAlign: 'center', padding: '48px 0', color: 'var(--text-secondary)' }}>\n <UITypographyText className=\"typo-description text-secondary\">No runs found</UITypographyText>\n </div>\n );\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 32 }}>\n {nonEmptyGroups.map((group) => (\n <div key={group.key}>\n <div style={{ display: 'flex', alignItems: 'center', gap: 8, marginBottom: 12 }}>\n <span style={{ width: 8, height: 8, borderRadius: '50%', background: group.color, display: 'inline-block' }} />\n <UITypographyText className=\"typo-label\" style={{ color: 'var(--text-secondary)' }}>\n {group.label}\n </UITypographyText>\n <UITypographyText className=\"typo-caption text-tertiary\">\n ({grouped[group.key]!.length})\n </UITypographyText>\n </div>\n <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fill, minmax(320px, 1fr))', gap: 12 }}>\n {grouped[group.key]!.map((run) => (\n <RunCard key={run.id} run={run} onClick={() => onRunClick(run.id)} />\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n}\n","/**\n * Board (kanban) view for workflow runs.\n * Columns: Queued → Running → Waiting Approval → Success → Failed → Cancelled\n */\n\nimport { UITypographyText } from '@kb-labs/sdk/studio';\nimport type { WorkflowRun } from '@kb-labs/workflow-contracts';\nimport { RunCard } from '../triage/RunCard';\n\nconst COLUMNS: { status: WorkflowRun['status'] | 'waiting_approval'; label: string; color: string }[] = [\n { status: 'queued', label: 'Queued', color: 'var(--text-tertiary)' },\n { status: 'running', label: 'Running', color: 'var(--info)' },\n { status: 'waiting_approval', label: 'Waiting Approval', color: 'var(--warning)' },\n { status: 'success', label: 'Success', color: 'var(--success)' },\n { status: 'failed', label: 'Failed', color: 'var(--error)' },\n { status: 'cancelled', label: 'Cancelled', color: 'var(--text-tertiary)' },\n];\n\ninterface BoardViewProps {\n runs: WorkflowRun[];\n onRunClick: (runId: string) => void;\n}\n\nexport function BoardView({ runs, onRunClick }: BoardViewProps) {\n const byStatus = Object.fromEntries(\n COLUMNS.map((col) => [col.status, runs.filter((r) => r.status === col.status)]),\n );\n\n const activeCols = COLUMNS.filter((col) => (byStatus[col.status]?.length ?? 0) > 0);\n\n if (activeCols.length === 0) {\n return (\n <div style={{ textAlign: 'center', padding: '48px 0' }}>\n <UITypographyText className=\"typo-description text-secondary\">No runs found</UITypographyText>\n </div>\n );\n }\n\n return (\n <div style={{ display: 'flex', gap: 16, overflowX: 'auto', paddingBottom: 8 }}>\n {activeCols.map((col) => (\n <div\n key={col.status}\n style={{ minWidth: 280, maxWidth: 320, flexShrink: 0 }}\n >\n {/* Column header */}\n <div style={{\n display: 'flex', alignItems: 'center', gap: 6,\n marginBottom: 10, padding: '0 4px',\n }}>\n <span style={{ width: 8, height: 8, borderRadius: '50%', background: col.color, display: 'inline-block' }} />\n <UITypographyText className=\"typo-label\" style={{ color: 'var(--text-secondary)' }}>\n {col.label}\n </UITypographyText>\n <UITypographyText className=\"typo-caption text-tertiary\">\n {byStatus[col.status]!.length}\n </UITypographyText>\n </div>\n\n {/* Cards */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {byStatus[col.status]!.map((run) => (\n <RunCard key={run.id} run={run} onClick={() => onRunClick(run.id)} />\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n}\n","/**\n * Table view for workflow runs — sortable, filterable list.\n * Extracted from WorkflowsRuns.tsx to be used as one of the view modes.\n */\n\nimport { useMemo } from 'react';\nimport {\n UITable,\n UITypographyText,\n} from '@kb-labs/sdk/studio';\nimport type { UITableColumn } from '@kb-labs/sdk/studio';\nimport type { WorkflowRun } from '@kb-labs/workflow-contracts';\nimport { WorkflowStatusBadge } from '../shared/WorkflowStatusBadge';\n\nfunction formatDate(dateStr?: string) {\n if (!dateStr) { return '-'; }\n return new Date(dateStr).toLocaleString();\n}\n\nfunction formatDuration(run: WorkflowRun) {\n if (!run.startedAt) { return '-'; }\n const start = new Date(run.startedAt).getTime();\n const end = run.finishedAt ? new Date(run.finishedAt).getTime() : Date.now();\n const ms = end - start;\n const seconds = Math.floor(ms / 1000);\n if (seconds < 60) { return `${seconds}s`; }\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) { return `${minutes}m ${seconds % 60}s`; }\n const hours = Math.floor(minutes / 60);\n return `${hours}h ${minutes % 60}m`;\n}\n\ninterface TableViewProps {\n runs: WorkflowRun[];\n loading: boolean;\n onRunClick: (runId: string) => void;\n}\n\nexport function TableView({ runs, loading, onRunClick }: TableViewProps) {\n const columns = useMemo<UITableColumn<WorkflowRun>[]>(\n () => [\n {\n title: 'Run ID',\n dataIndex: 'id',\n key: 'id',\n width: 180,\n render: (value: string) => (\n <UITypographyText className=\"typo-caption\" code ellipsis={{ tooltip: value }}>\n {value.slice(0, 16)}...\n </UITypographyText>\n ),\n },\n {\n title: 'Workflow',\n dataIndex: 'name',\n key: 'name',\n width: 220,\n render: (_value: unknown, record: WorkflowRun) => (\n <UITypographyText className=\"typo-body\" strong>\n {record.name}@{record.version}\n </UITypographyText>\n ),\n },\n {\n title: 'Status',\n dataIndex: 'status',\n key: 'status',\n width: 140,\n render: (status: WorkflowRun['status']) => <WorkflowStatusBadge status={status} />,\n },\n {\n title: 'Triggered By',\n key: 'actor',\n width: 140,\n render: (_value: unknown, record: WorkflowRun) => (\n <UITypographyText className=\"typo-caption text-secondary\">\n {record.trigger.actor ?? 'unknown'}\n </UITypographyText>\n ),\n },\n {\n title: 'Started At',\n dataIndex: 'startedAt',\n key: 'startedAt',\n width: 180,\n render: (val: string) => (\n <UITypographyText className=\"typo-caption\">{formatDate(val)}</UITypographyText>\n ),\n },\n {\n title: 'Duration',\n key: 'duration',\n width: 100,\n render: (_value: unknown, record: WorkflowRun) => (\n <UITypographyText className=\"typo-caption\">{formatDuration(record)}</UITypographyText>\n ),\n },\n ],\n [],\n );\n\n return (\n <UITable\n rowKey=\"id\"\n columns={columns}\n dataSource={runs}\n loading={loading}\n scroll={{ x: 960 }}\n pagination={{ pageSize: 20 }}\n onRow={(record) => ({\n style: { cursor: 'pointer' },\n onClick: () => onRunClick(record.id),\n })}\n />\n );\n}\n","/**\n * @module @kb-labs/studio-app/modules/workflows/pages/workflows-runs-page\n * All workflow runs list — Triage / Board / Table views\n */\n\nimport { useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n UIButton,\n UISelect,\n UIRow,\n UICol,\n UIIcon,\n UITypographyText,\n} from '@kb-labs/sdk/studio';\nimport { useData } from '@kb-labs/sdk/studio';\nimport type { WorkflowRun } from '@kb-labs/workflow-contracts';\nimport { UIPage, UIPageHeader, UICard } from '@kb-labs/sdk/studio';\nimport { ViewModeSelector } from '../components/shared/ViewModeSelector';\nimport { TriageView } from '../components/triage/TriageView';\nimport { BoardView } from '../components/board/BoardView';\nimport { TableView } from '../components/table/TableView';\n\ntype ViewMode = 'triage' | 'board' | 'table';\n\nconst VIEWS = {\n triage: { label: 'Triage' },\n board: { label: 'Board' },\n table: { label: 'Table' },\n};\n\nexport default function WorkflowsRuns() {\n const navigate = useNavigate();\n const [viewMode, setViewMode] = useState<ViewMode>('triage');\n const [filters, setFilters] = useState<{ limit: number; status?: string }>({ limit: 50 });\n\n const { data, isLoading, refetch } = useData<{ runs: WorkflowRun[]; total: number }>('/exec/api/v1/runs', {\n params: { limit: filters.limit, ...(filters.status ? { status: filters.status } : {}) },\n pollingMs: viewMode !== 'table' ? 5000 : undefined,\n });\n\n const runs = data?.runs ?? [];\n\n return (\n <UIPage width=\"full\">\n <UIPageHeader\n title=\"Workflow Runs\"\n description=\"All workflow executions\"\n breadcrumbs={[\n { title: 'Home', href: '/' },\n { title: 'Workflows', href: '/workflows' },\n { title: 'Runs' },\n ]}\n actions={\n <div style={{ display: 'flex', gap: 8, alignItems: 'center' }}>\n <ViewModeSelector views={VIEWS} current={viewMode} onChange={setViewMode} />\n <UIButton\n icon={<UIIcon name=\"ReloadOutlined\" spin={isLoading} />}\n onClick={() => refetch()}\n />\n </div>\n }\n />\n\n {/* Filters */}\n <UICard style={{ marginBottom: 'var(--spacing-section)' }}>\n <UIRow gutter={16}>\n <UICol span={8}>\n <UITypographyText className=\"typo-label\">Filter by Status</UITypographyText>\n <UISelect\n style={{ width: '100%', marginTop: 8 }}\n placeholder=\"All statuses\"\n allowClear\n value={filters.status}\n onChange={(status) => setFilters({ ...filters, status: status as string | undefined })}\n options={[\n { label: 'Running', value: 'running' },\n { label: 'Success', value: 'success' },\n { label: 'Failed', value: 'failed' },\n { label: 'Cancelled', value: 'cancelled' },\n { label: 'Queued', value: 'queued' },\n ]}\n />\n </UICol>\n <UICol span={8}>\n <UITypographyText className=\"typo-label\">Limit</UITypographyText>\n <UISelect\n style={{ width: '100%', marginTop: 8 }}\n value={filters.limit}\n onChange={(limit) => setFilters({ ...filters, limit: limit as number })}\n options={[\n { label: '25', value: 25 },\n { label: '50', value: 50 },\n { label: '100', value: 100 },\n { label: '200', value: 200 },\n ]}\n />\n </UICol>\n </UIRow>\n </UICard>\n\n {/* View */}\n {viewMode === 'triage' && (\n <TriageView runs={runs} onRunClick={(id) => navigate(`/p/workflows/runs/${id}`)} />\n )}\n {viewMode === 'board' && (\n <BoardView runs={runs} onRunClick={(id) => navigate(`/p/workflows/runs/${id}`)} />\n )}\n {viewMode === 'table' && (\n <UICard>\n <TableView runs={runs} loading={isLoading} onRunClick={(id) => navigate(`/p/workflows/runs/${id}`)} />\n </UICard>\n )}\n </UIPage>\n );\n}\n"],"names":["STATUS_TAG","RunCard","param","payload","_ref","_ref2","_currentStep_summary","_run_jobs_","_run_jobs_1","_run_result","run","onClick","phases","model","usePipelineModel","phase","allDone","s","anyActive","currentStep","getCurrentStepInfo","_iteratorError","job","_iteratorError1","_step_spec","step","task","startedAt","finishedAt","duration","formatDuration","Date","statusTag","startedAgo","timeAgo","iso","m","Math","diffMs","h","onMouseEnter","e","onMouseLeave","UITag","PhaseProgressBar","StatusDot","GROUPS","TriageView","runs","onRunClick","grouped","React","result","group","r","nonEmptyGroups","g","_grouped_g_key","UITypographyText","COLUMNS","BoardView","byStatus","Object","col","activeCols","_byStatus_col_status","TableView","loading","columns","useMemo","render","value","_value","record","status","WorkflowStatusBadge","_record_trigger_actor","val","start","seconds","ms","end","minutes","hours","UITable","onRow","VIEWS","WorkflowsRuns","navigate","useNavigate","_useState","viewMode","setViewMode","_useState1","filters","setFilters","_useData","undefined","data","isLoading","refetch","UIPage","UIPageHeader","ViewModeSelector","UIButton","UIIcon","UICard","UIRow","UICol","UISelect","onChange","limit","id"],"mappings":"2PAuBMA,EAA+D,CACnE,OAAkB,CAAE,MAAO,QAAW,MAAO,QAAS,EACtD,iBAAkB,CAAE,MAAO,UAAW,MAAO,UAAW,EACxD,QAAkB,CAAE,MAAO,aAAc,MAAO,SAAU,EAC1D,OAAkB,CAAE,MAAO,UAAW,MAAO,QAAS,EACtD,QAAkB,CAAE,MAAO,UAAW,MAAO,MAAO,EACpD,UAAkB,CAAE,MAAO,UAAW,MAAO,WAAY,CAC3D,EA4BO,SAASC,EAAQC,CAA8B,E,IAV9CC,EAyBYC,EAAAA,EAAAA,EACCC,EAAAA,EAoERC,EArEwBC,EACEC,EA0ELC,EA1FRC,EAAFR,EAAEQ,GAAG,CAAEC,EAAPT,EAAOS,OAAO,CAE9BC,EAAwBC,AADhBC,AAAAA,GAAAA,EAAAA,CAAAA,AAAAA,EAAiBJ,GACK,MAAM,CAAC,GAAG,CAAC,SAACK,CAAK,EACnD,IAAMC,EAAUD,EAAM,KAAK,CAAC,KAAK,CAAC,SAACE,CAAC,E,MAAKA,AAAqB,YAArBA,EAAE,OAAO,CAAC,MAAM,A,GACnDC,EAAYH,EAAM,KAAK,CAAC,IAAI,CAChC,SAACE,CAAC,E,MAAKA,AAAqB,YAArBA,EAAE,OAAO,CAAC,MAAM,EAAkBA,AAAqB,qBAArBA,EAAE,OAAO,CAAC,MAAM,A,GAE3D,MAAO,CACL,MAAOF,EAAM,KAAK,CAClB,OAAQC,EAAU,OAAkBE,EAAY,SAAoB,SACtE,CACF,GAEMC,EAAcC,AAvCtB,SAA4BV,CAAgB,E,IACrCW,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,O,IAAL,QAAKA,EAAAA,EAAaX,EAAI,IAAI,oBAArBW,CAAAA,CAAAA,EAAAA,AAAAA,CAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,AAAAA,EAAAA,EAAAA,GAAuB,CAAvBA,IAAMC,EAAND,EAAAA,KAAAA,CACEE,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,O,IAAL,QAAKA,EAAAA,EAAcD,EAAI,KAAK,oBAAvBC,CAAAA,CAAAA,EAAAA,AAAAA,CAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,AAAAA,EAAAA,EAAAA,GAAyB,CAAzBA,IAIUC,EAJJC,EAANF,EAAAA,KAAAA,CACH,GAAIE,AAAgB,YAAhBA,EAAK,MAAM,EAAkBA,AAAgB,qBAAhBA,EAAK,MAAM,CAC1C,MAAO,CACL,KAAMA,EAAK,IAAI,CACf,QAAS,MAAAD,CAAAA,EAAAA,EAAK,IAAI,AAAD,EAARA,KAAAA,EAAAA,EAAW,OAAO,CAC3B,OAAQC,EAAK,MAAM,AACrB,CAEJ,C,UARKF,EAAAA,GAAAA,EAAAA,C,aAAAA,GAAAA,AAAAA,MAAAA,EAAAA,MAAAA,EAAAA,EAAAA,MAAAA,E,YAAAA,E,MAAAA,C,EASP,C,UAVKF,EAAAA,GAAAA,EAAAA,C,aAAAA,GAAAA,AAAAA,MAAAA,EAAAA,MAAAA,EAAAA,EAAAA,MAAAA,E,YAAAA,E,MAAAA,C,EAWL,OAAO,IACT,EA0ByCX,GACjCgB,EAvBN,AAAIvB,AAAAA,QADEA,EAAUO,AAwBgBA,EAxBZ,OAAO,CAAC,OAAO,EAC/BP,KAAAA,EAAAA,EAAS,IAAI,AAAD,GAAK,AAAwB,UAAxB,OAAOA,EAAQ,IAAI,CAAwBA,EAAQ,IAAI,CACrE,GAuBDwB,EAAY,MAAAvB,CAAAA,EAAAA,MAAAA,CAAAA,EAAAA,MAAAA,CAAAA,EAAAA,EAAI,SAAS,AAAD,EAAZA,EAAAA,MAAiBG,CAAAA,EAAAA,EAAI,IAAI,CAAC,EAAE,AAAD,EAAVA,KAAAA,EAAAA,EAAa,SAAS,AAAD,EAAtCH,EAA2CM,EAAI,QAAQ,AAAD,EAAtDN,EAA2D,KACvEwB,EAAa,MAAAvB,CAAAA,EAAAA,MAAAA,CAAAA,EAAAA,EAAI,UAAU,AAAD,EAAbA,EAAAA,MAAkBG,CAAAA,EAAAA,EAAI,IAAI,CAAC,EAAE,AAAD,EAAVA,KAAAA,EAAAA,EAAa,UAAU,AAAD,EAAxCH,EAA6C,KAE1DwB,EAAWF,EACbG,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,EACGF,AAAAA,CAAAA,EAAa,IAAIG,KAAKH,GAAY,OAAO,GAAKG,KAAK,GAAG,EAAC,EACxD,IAAIA,KAAKJ,GAAW,OAAO,IAE7B,KAEEK,EAAYhC,CAAU,CAACU,EAAI,MAAM,CAAC,CAClCuB,EAAaN,EAAYO,AAvEjC,SAAiBC,CAAW,EAE1B,IAAMC,EAAIC,KAAK,KAAK,CAACC,AADNP,CAAAA,KAAK,GAAG,GAAK,IAAIA,KAAKI,GAAK,OAAO,EAAC,EACpB,KAC9B,GAAIC,EAAI,EAAK,MAAO,WACpB,GAAIA,EAAI,GAAM,MAAQ,GAAI,OAAFA,EAAE,SAC1B,IAAMG,EAAIF,KAAK,KAAK,CAACD,EAAI,WACzB,AAAIG,EAAI,GAAc,GAAI,OAAFA,EAAE,SAClB,GAAqB,OAAnBF,KAAK,KAAK,CAACE,EAAI,IAAI,QAC/B,EA+DyCZ,GAAa,KAEpD,MACE,WAAC,OACC,QAAShB,EACT,MAAO,CACL,QAAS,YACT,WAAY,oBACZ,OAAQ,kCACR,aAAc,EACd,OAAQ,UACR,WAAY,oBACd,EACA6B,aAAc,SAACC,CAAC,E,OAAwCA,EAAE,aAAa,CAAC,KAAK,CAAC,WAAW,CAAG,a,EAC5FC,aAAc,SAACD,CAAC,E,OAAwCA,EAAE,aAAa,CAAC,KAAK,CAAC,WAAW,CAAG,uB,YAG5F,WAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,eAAgB,gBAAiB,aAAc,CAAE,E,UACpG,UAAC,QAAK,MAAO,CAAE,SAAU,GAAI,WAAY,IAAK,MAAO,sBAAuB,KAAM,EAAG,SAAU,EAAG,SAAU,SAAU,aAAc,WAAY,WAAY,QAAS,E,SAClK/B,EAAI,IAAI,A,GAEVsB,GACC,UAACW,EAAAA,KAAKA,CAAAA,CAAC,MAAOX,EAAU,KAAK,CAAE,MAAO,CAAE,WAAY,EAAG,WAAY,CAAE,E,SAAIA,EAAU,KAAK,A,MAK5F,WAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,IAAK,GAAI,aAAcN,GAAQd,EAAO,MAAM,CAAG,GAAKO,EAAc,EAAI,CAAE,E,UACpGc,GACC,UAAC,QAAK,MAAO,CAAE,SAAU,GAAI,MAAO,sBAAuB,E,SAAIA,C,GAEhEJ,GACC,UAAC,QAAK,MAAO,CAAE,SAAU,GAAI,MAAO,sBAAuB,E,SAAIA,C,GAEjE,WAAC,QAAK,MAAO,CAAE,SAAU,GAAI,MAAO,uBAAwB,WAAY,WAAY,E,UAAG,IACnFnB,EAAI,EAAE,CAAC,KAAK,CAAC,I,MAKlBgB,GACC,UAAC,OAAI,MAAO,CAAE,SAAU,GAAI,MAAO,wBAAyB,aAAc,EAAG,SAAU,SAAU,aAAc,WAAY,WAAY,QAAS,E,SAC7IA,C,GAKJd,EAAO,MAAM,CAAG,GACf,UAAC,OAAI,MAAO,CAAE,aAAc,CAAE,E,SAC5B,UAACgC,EAAAA,CAAgBA,CAAAA,CAAC,OAAQhC,EAAQ,QAAO,E,KAK5CO,GACC,WAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,CAAE,E,UAC1D,UAAC0B,EAAAA,EAASA,CAAAA,CAAC,OAAQ1B,EAAY,MAAM,A,GACrC,UAAC,QAAK,MAAO,CAAE,SAAU,GAAI,MAAO,uBAAwB,E,eACzDb,CAAAA,EAAAA,EAAY,OAAO,AAAD,EAAlBA,EAAuBa,EAAY,IAAI,A,MAM7CT,AAAe,WAAfA,EAAI,MAAM,EAAK,OAAYD,CAAAA,EAAAA,EAAI,MAAM,AAAD,EAATA,KAAAA,EAAAA,EAAY,KAAK,AAAD,GAC1C,UAAC,OAAI,MAAO,CACV,SAAU,GAAI,MAAO,eAAgB,UAAW,EAChD,QAAS,UAAW,WAAY,mDAChC,aAAc,EACd,SAAU,SAAU,aAAc,WAAY,WAAY,QAC5D,E,SACGC,EAAI,MAAM,CAAC,KAAK,CAAC,OAAO,A,KAKnC,CCtJA,IAAMoC,EAA8E,CAClF,CACE,IAAK,YACL,MAAO,kBACP,SAAU,CAAC,mBAAmB,CAC9B,MAAO,gBACT,EACA,CACE,IAAK,UACL,MAAO,UACP,SAAU,CAAC,UAAW,SAAS,CAC/B,MAAO,aACT,EACA,CACE,IAAK,YACL,MAAO,YACP,SAAU,CAAC,UAAU,CACrB,MAAO,gBACT,EACA,CACE,IAAK,SACL,MAAO,SACP,SAAU,CAAC,SAAS,CACpB,MAAO,cACT,EACA,CACE,IAAK,QACL,MAAO,QACP,SAAU,CAAC,YAAa,UAAW,UAAU,CAC7C,MAAO,sBACT,EACD,CAOM,SAASC,EAAW7C,CAAqC,E,IAAnC8C,EAAF9C,EAAE8C,IAAI,CAAEC,EAAR/C,EAAQ+C,UAAU,CACrCC,EAAUC,EAAAA,OAAa,CAAC,WAC5B,IAAMC,EAAwC,CAAC,EAC1C/B,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,O,IAAL,QAAKA,EAAAA,EAAeyB,CAAM,CAANA,OAAAA,QAAAA,CAAAA,GAAfzB,CAAAA,CAAAA,EAAAA,AAAAA,CAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,AAAAA,EAAAA,EAAAA,IAAAA,A,WAAAA,IAAMgC,EAANhC,EAAAA,KAAAA,AACH+B,CAAAA,CAAM,CAACC,EAAM,GAAG,CAAC,CAAGL,EAAK,MAAM,CAAC,SAACM,CAAC,E,OAAMD,EAAM,QAAQ,CAAc,QAAQ,CAACC,EAAE,MAAM,C,EACvF,G,UAFKjC,EAAAA,GAAAA,EAAAA,C,aAAAA,GAAAA,AAAAA,MAAAA,EAAAA,MAAAA,EAAAA,EAAAA,MAAAA,E,YAAAA,E,MAAAA,C,EAGL,OAAO+B,CACT,EAAG,CAACJ,EAAK,EAEHO,EAAiBT,EAAO,MAAM,CAAC,SAACU,CAAC,M,EAAMC,E,MAAD,AAAC,OAAD,SAACA,CAAAA,EAAAA,CAAO,CAACD,EAAE,GAAG,CAAC,AAAD,EAAbC,KAAAA,EAAAA,EAAgB,MAAM,AAAD,EAAC,EAAI,GAAK,C,UAE5E,AAAIT,AAAgB,IAAhBA,EAAK,MAAM,CAEX,UAAC,OAAI,MAAO,CAAE,UAAW,SAAU,QAAS,SAAU,MAAO,uBAAwB,E,SACnF,UAACU,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,kC,SAAkC,e,KAMlE,UAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,EAAG,E,SAC7DH,EAAe,GAAG,CAAC,SAACF,CAAK,E,MACxB,WAAC,O,UACC,WAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,WAAY,SAAU,IAAK,EAAG,aAAc,EAAG,E,UAC5E,UAAC,QAAK,MAAO,CAAE,MAAO,EAAG,OAAQ,EAAG,aAAc,MAAO,WAAYA,EAAM,KAAK,CAAE,QAAS,cAAe,C,GAC1G,UAACK,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,aAAa,MAAO,CAAE,MAAO,uBAAwB,E,SAC9EL,EAAM,KAAK,A,GAEd,WAACK,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,6B,UAA6B,IACrDR,CAAO,CAACG,EAAM,GAAG,CAAC,CAAE,MAAM,CAAC,I,MAGjC,UAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,oBAAqB,wCAAyC,IAAK,EAAG,E,SAClGH,CAAO,CAACG,EAAM,GAAG,CAAC,CAAE,GAAG,CAAC,SAAC3C,CAAG,E,MAC3B,UAACT,EAAOA,CAAc,IAAKS,EAAKC,QAAS,W,OAAMsC,EAAWvC,EAAI,EAAE,C,GAAlDA,EAAI,EAAE,C,OAZhB2C,EAAM,GAAG,C,IAmB3B,CChFA,IAAMM,EAAkG,CACtG,CAAE,OAAQ,SAAoB,MAAO,SAAoB,MAAO,sBAAuB,EACvF,CAAE,OAAQ,UAAoB,MAAO,UAAoB,MAAO,aAAc,EAC9E,CAAE,OAAQ,mBAAoB,MAAO,mBAAoB,MAAO,gBAAiB,EACjF,CAAE,OAAQ,UAAoB,MAAO,UAAoB,MAAO,gBAAiB,EACjF,CAAE,OAAQ,SAAoB,MAAO,SAAoB,MAAO,cAAe,EAC/E,CAAE,OAAQ,YAAoB,MAAO,YAAoB,MAAO,sBAAuB,EACxF,CAOM,SAASC,EAAU1D,CAAoC,E,IAAlC8C,EAAF9C,EAAE8C,IAAI,CAAEC,EAAR/C,EAAQ+C,UAAU,CACpCY,EAAWC,OAAO,WAAW,CACjCH,EAAQ,GAAG,CAAC,SAACI,CAAG,E,MAAK,CAACA,EAAI,MAAM,CAAEf,EAAK,MAAM,CAAC,SAACM,CAAC,E,OAAKA,EAAE,MAAM,GAAKS,EAAI,MAAM,A,GAAE,A,IAG1EC,EAAaL,EAAQ,MAAM,CAAC,SAACI,CAAG,M,EAAME,E,MAAD,AAAC,OAAD,SAACA,CAAAA,EAAAA,CAAQ,CAACF,EAAI,MAAM,CAAC,AAAD,EAAnBE,KAAAA,EAAAA,EAAsB,MAAM,AAAD,EAAC,EAAI,GAAK,C,UAEjF,AAAID,AAAsB,IAAtBA,EAAW,MAAM,CAEjB,UAAC,OAAI,MAAO,CAAE,UAAW,SAAU,QAAS,QAAS,E,SACnD,UAACN,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,kC,SAAkC,e,KAMlE,UAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,IAAK,GAAI,UAAW,OAAQ,cAAe,CAAE,E,SACzEM,EAAW,GAAG,CAAC,SAACD,CAAG,E,MAClB,WAAC,OAEC,MAAO,CAAE,SAAU,IAAK,SAAU,IAAK,WAAY,CAAE,E,UAGrD,WAAC,OAAI,MAAO,CACV,QAAS,OAAQ,WAAY,SAAU,IAAK,EAC5C,aAAc,GAAI,QAAS,OAC7B,E,UACE,UAAC,QAAK,MAAO,CAAE,MAAO,EAAG,OAAQ,EAAG,aAAc,MAAO,WAAYA,EAAI,KAAK,CAAE,QAAS,cAAe,C,GACxG,UAACL,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,aAAa,MAAO,CAAE,MAAO,uBAAwB,E,SAC9EK,EAAI,KAAK,A,GAEZ,UAACL,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,6B,SACzBG,CAAQ,CAACE,EAAI,MAAM,CAAC,CAAE,MAAM,A,MAKjC,UAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,cAAe,SAAU,IAAK,CAAE,E,SAC5DF,CAAQ,CAACE,EAAI,MAAM,CAAC,CAAE,GAAG,CAAC,SAACrD,CAAG,E,MAC7B,UAACT,EAAOA,CAAc,IAAKS,EAAKC,QAAS,W,OAAMsC,EAAWvC,EAAI,EAAE,C,GAAlDA,EAAI,EAAE,C,OApBnBqD,EAAI,MAAM,C,IA2BzB,C,cC/BO,SAASG,EAAUhE,CAA6C,E,IAA3C8C,EAAF9C,EAAE8C,IAAI,CAAEmB,EAARjE,EAAQiE,OAAO,CAAElB,EAAjB/C,EAAiB+C,UAAU,CAC7CmB,EAAUC,AAAAA,GAAAA,EAAAA,OAAAA,AAAAA,EACd,W,MAAM,CACJ,CACE,MAAO,SACP,UAAW,KACX,IAAK,KACL,MAAO,IACPC,OAAQ,SAACC,CAAK,E,MACZ,WAACb,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,eAAe,KAAI,GAAC,SAAU,CAAE,QAASa,CAAM,E,UACxEA,EAAM,KAAK,CAAC,EAAG,IAAI,M,GAG1B,EACA,CACE,MAAO,WACP,UAAW,OACX,IAAK,OACL,MAAO,IACPD,OAAQ,SAACE,CAAM,CAAWC,CAAM,E,MAC9B,WAACf,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,YAAY,OAAM,G,UAC3Ce,EAAO,IAAI,CAAC,IAAEA,EAAO,OAAO,C,GAGnC,EACA,CACE,MAAO,SACP,UAAW,SACX,IAAK,SACL,MAAO,IACPH,OAAQ,SAACI,CAAM,E,MAA4B,UAACC,EAAAA,CAAmBA,CAAAA,CAAC,OAAQD,C,GAC1E,EACA,CACE,MAAO,eACP,IAAK,QACL,MAAO,IACPJ,OAAQ,SAACE,CAAM,CAAWC,CAAM,E,IAE3BG,E,MADH,UAAClB,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,8B,eACzBkB,CAAAA,EAAAA,EAAO,OAAO,CAAC,KAAK,AAAD,EAAnBA,EAAwB,S,GAG/B,EACA,CACE,MAAO,aACP,UAAW,YACX,IAAK,YACL,MAAO,IACPN,OAAQ,SAACO,CAAG,E,MACV,UAACnB,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,e,SAvEpC,AAuE+DmB,EAtExD,IAAI9C,KAsEoD8C,GAtEtC,cAAc,GADhB,G,GAyEnB,EACA,CACE,MAAO,WACP,IAAK,WACL,MAAO,IACPP,OAAQ,SAACE,CAAM,CAAWC,CAAM,E,MAC9B,UAACf,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,e,SAAgB5B,AA3EtD,SAAwBpB,CAAgB,EACtC,GAAI,CAACA,EAAI,SAAS,CAAI,MAAO,IAC7B,IAAMoE,EAAQ,IAAI/C,KAAKrB,EAAI,SAAS,EAAE,OAAO,GAGvCqE,EAAU1C,KAAK,KAAK,CAAC2C,AADhBC,CADCvE,CAAAA,EAAI,UAAU,CAAG,IAAIqB,KAAKrB,EAAI,UAAU,EAAE,OAAO,GAAKqB,KAAK,GAAG,EAAC,EAC1D+C,CAAI,EACW,KAChC,GAAIC,EAAU,GAAM,MAAQ,GAAU,OAARA,EAAQ,KACtC,IAAMG,EAAU7C,KAAK,KAAK,CAAC0C,EAAU,IACrC,GAAIG,EAAU,GAAM,MAAQ,GAAcH,MAAAA,CAAZG,EAAQ,MAAiB,OAAbH,EAAU,GAAG,KACvD,IAAMI,EAAQ9C,KAAK,KAAK,CAAC6C,EAAU,IACnC,MAAQ,GAAYA,MAAAA,CAAVC,EAAM,MAAiB,OAAbD,EAAU,GAAG,IACnC,EAgEqET,E,GAE/D,EACD,A,EACD,EAAE,EAGJ,MACE,UAACW,EAAAA,OAAOA,CAAAA,CACN,OAAO,KACP,QAAShB,EACT,WAAYpB,EACZ,QAASmB,EACT,OAAQ,CAAE,EAAG,GAAI,EACjB,WAAY,CAAE,SAAU,EAAG,EAC3BkB,MAAO,SAACZ,CAAM,E,MAAM,CAClB,MAAO,CAAE,OAAQ,SAAU,EAC3B9D,QAAS,W,OAAMsC,EAAWwB,EAAO,EAAE,C,CACrC,C,GAGN,C,ssDC1FA,IAAMa,EAAQ,CACZ,OAAQ,CAAE,MAAO,QAAS,EAC1B,MAAQ,CAAE,MAAO,OAAQ,EACzB,MAAQ,CAAE,MAAO,OAAQ,CAC3B,EAEe,SAASC,IACtB,I,EAAMC,EAAWC,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,IACeC,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAmB,aAA5CC,EAAyBD,CAAAA,CAAAA,EAAAA,CAAfE,EAAeF,CAAAA,CAAAA,EAAAA,CACFG,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAA6C,CAAE,MAAO,EAAG,MAAhFC,EAAuBD,CAAAA,CAAAA,EAAAA,CAAdE,EAAcF,CAAAA,CAAAA,EAAAA,CAEOG,EAAAA,AAAAA,GAAAA,EAAAA,OAAAA,AAAAA,EAAgD,oBAAqB,CACxG,OAAQ,GAAE,MAAOF,EAAQ,KAAK,A,EAAMA,EAAQ,MAAM,CAAG,CAAE,OAAQA,EAAQ,MAAM,AAAC,EAAI,CAAC,GACnF,UAAWH,AAAa,UAAbA,EAAuB,IAAOM,MAC3C,GAHQC,EAA6BF,EAA7BE,IAAI,CAAEC,EAAuBH,EAAvBG,SAAS,CAAEC,EAAYJ,EAAZI,OAAO,CAK1BpD,EAAO,MAAPA,CAAAA,EAAOkD,MAAAA,EAAAA,KAAAA,EAAAA,EAAM,IAAI,AAAD,EAAC,EAAI,EAAE,CAE7B,MACE,WAACG,EAAAA,MAAMA,CAAAA,CAAC,MAAM,O,UACZ,UAACC,EAAAA,YAAYA,CAAAA,CACX,MAAM,gBACN,YAAY,0BACZ,YAAa,CACX,CAAE,MAAO,OAAQ,KAAM,GAAI,EAC3B,CAAE,MAAO,YAAa,KAAM,YAAa,EACzC,CAAE,MAAO,MAAO,EACjB,CACD,QACE,WAAC,OAAI,MAAO,CAAE,QAAS,OAAQ,IAAK,EAAG,WAAY,QAAS,E,UAC1D,UAACC,EAAAA,CAAgBA,CAAAA,CAAC,MAAOjB,EAAO,QAASK,EAAU,SAAUC,C,GAC7D,UAACY,EAAAA,QAAQA,CAAAA,CACP,KAAM,UAACC,EAAAA,MAAMA,CAAAA,CAAC,KAAK,iBAAiB,KAAMN,C,GAC1CxF,QAAS,W,OAAMyF,G,SAOvB,UAACM,EAAAA,MAAMA,CAAAA,CAAC,MAAO,CAAE,aAAc,wBAAyB,E,SACtD,WAACC,EAAAA,KAAKA,CAAAA,CAAC,OAAQ,G,UACb,WAACC,EAAAA,KAAKA,CAAAA,CAAC,KAAM,E,UACX,UAAClD,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,a,SAAa,kB,GACzC,UAACmD,EAAAA,QAAQA,CAAAA,CACP,MAAO,CAAE,MAAO,OAAQ,UAAW,CAAE,EACrC,YAAY,eACZ,WAAU,GACV,MAAOf,EAAQ,MAAM,CACrBgB,SAAU,SAACpC,CAAM,E,OAAKqB,EAAW,OAAKD,GAAAA,CAAS,OAAQpB,C,KACvD,QAAS,CACP,CAAE,MAAO,UAAW,MAAO,SAAU,EACrC,CAAE,MAAO,UAAW,MAAO,SAAU,EACrC,CAAE,MAAO,SAAU,MAAO,QAAS,EACnC,CAAE,MAAO,YAAa,MAAO,WAAY,EACzC,CAAE,MAAO,SAAU,MAAO,QAAS,EACpC,A,MAGL,WAACkC,EAAAA,KAAKA,CAAAA,CAAC,KAAM,E,UACX,UAAClD,EAAAA,gBAAgBA,CAAAA,CAAC,UAAU,a,SAAa,O,GACzC,UAACmD,EAAAA,QAAQA,CAAAA,CACP,MAAO,CAAE,MAAO,OAAQ,UAAW,CAAE,EACrC,MAAOf,EAAQ,KAAK,CACpBgB,SAAU,SAACC,CAAK,E,OAAKhB,EAAW,OAAKD,GAAAA,CAAS,MAAOiB,C,KACrD,QAAS,CACP,CAAE,MAAO,KAAM,MAAO,EAAG,EACzB,CAAE,MAAO,KAAM,MAAO,EAAG,EACzB,CAAE,MAAO,MAAO,MAAO,GAAI,EAC3B,CAAE,MAAO,MAAO,MAAO,GAAI,EAC5B,A,WAORpB,AAAa,WAAbA,GACC,UAAC5C,EAAUA,CAAC,KAAMC,EAAMC,WAAY,SAAC+D,CAAE,E,OAAKxB,EAAU,qBAAuB,OAAHwB,G,IAE3ErB,AAAa,UAAbA,GACC,UAAC/B,EAASA,CAAC,KAAMZ,EAAMC,WAAY,SAAC+D,CAAE,E,OAAKxB,EAAU,qBAAuB,OAAHwB,G,IAE1ErB,AAAa,UAAbA,GACC,UAACe,EAAAA,MAAMA,CAAAA,C,SACL,UAACxC,EAASA,CAAC,KAAMlB,EAAM,QAASmD,EAAWlD,WAAY,SAAC+D,CAAE,E,OAAKxB,EAAU,qBAAuB,OAAHwB,G,QAKvG,C"}
|
|
1
|
+
{"version":3,"file":"__federation_expose_Runs.js","sources":["webpack://@kb-labs/workflow-entry/./src/studio/components/triage/RunCard.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/triage/TriageView.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/board/BoardView.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/table/TableView.tsx","webpack://@kb-labs/workflow-entry/./src/studio/pages/WorkflowsRuns.tsx"],"sourcesContent":["/**\n * Compact run card for triage/board views.\n * Shows workflow name, task, current status, phase progress, and duration.\n */\n\nimport * as React from 'react';\nimport { UITag } from '@kb-labs/sdk/studio';\nimport type { WorkflowRun } from '@kb-labs/workflow-contracts';\nimport { StatusDot, formatDuration } from '../pipeline/shared';\nimport { PhaseProgressBar } from '../shared/PhaseProgressBar';\nimport { usePipelineModel } from '../../hooks/use-pipeline-graph';\nimport type { PhaseStatus } from '../shared/PhaseProgressBar';\n\nfunction timeAgo(iso: string): string {\n const diffMs = Date.now() - new Date(iso).getTime();\n const m = Math.floor(diffMs / 60_000);\n if (m < 1) { return 'just now'; }\n if (m < 60) { return `${m}m ago`; }\n const h = Math.floor(m / 60);\n if (h < 24) { return `${h}h ago`; }\n return `${Math.floor(h / 24)}d ago`;\n}\n\nconst STATUS_TAG: Record<string, { color: string; label: string }> = {\n failed: { color: 'error', label: 'Failed' },\n waiting_approval: { color: 'warning', label: 'Approval' },\n running: { color: 'processing', label: 'Running' },\n queued: { color: 'default', label: 'Queued' },\n success: { color: 'success', label: 'Done' },\n cancelled: { color: 'default', label: 'Cancelled' },\n};\n\nfunction getCurrentStepInfo(run: WorkflowRun): { name: string; summary?: string; status: string } | null {\n for (const job of run.jobs) {\n for (const step of job.steps) {\n if (step.status === 'running' || step.status === 'waiting_approval') {\n return {\n name: step.name,\n summary: step.spec?.summary,\n status: step.status,\n };\n }\n }\n }\n return null;\n}\n\nfunction getTaskDescription(run: WorkflowRun): string {\n const payload = run.trigger.payload;\n if (payload?.task && typeof payload.task === 'string') { return payload.task; }\n return '';\n}\n\ninterface RunCardProps {\n run: WorkflowRun;\n onClick: () => void;\n}\n\nexport function RunCard({ run, onClick }: RunCardProps) {\n const model = usePipelineModel(run);\n const phases: PhaseStatus[] = model.phases.map((phase) => {\n const allDone = phase.steps.every((s) => s.stepRun.status === 'success');\n const anyActive = phase.steps.some(\n (s) => s.stepRun.status === 'running' || s.stepRun.status === 'waiting_approval',\n );\n return {\n label: phase.label,\n status: allDone ? 'done' as const : anyActive ? 'active' as const : 'pending' as const,\n };\n });\n\n const currentStep = getCurrentStepInfo(run);\n const task = getTaskDescription(run);\n const startedAt = run.startedAt ?? run.jobs[0]?.startedAt ?? run.queuedAt ?? null;\n const finishedAt = run.finishedAt ?? run.jobs[0]?.finishedAt ?? null;\n\n const duration = startedAt\n ? formatDuration(\n (finishedAt ? new Date(finishedAt).getTime() : Date.now()) -\n new Date(startedAt).getTime(),\n )\n : null;\n\n const statusTag = STATUS_TAG[run.status];\n const startedAgo = startedAt ? timeAgo(startedAt) : null;\n\n return (\n <div\n onClick={onClick}\n style={{\n padding: '12px 16px',\n background: 'var(--bg-primary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 8,\n cursor: 'pointer',\n transition: 'border-color 0.15s',\n }}\n onMouseEnter={(e: React.MouseEvent<HTMLDivElement>) => (e.currentTarget.style.borderColor = 'var(--link)')}\n onMouseLeave={(e: React.MouseEvent<HTMLDivElement>) => (e.currentTarget.style.borderColor = 'var(--border-primary)')}\n >\n {/* Header: name + status tag */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: 6 }}>\n <span style={{ fontSize: 14, fontWeight: 500, color: 'var(--text-primary)', flex: 1, minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {run.name}\n </span>\n {statusTag && (\n <UITag color={statusTag.color} style={{ marginLeft: 8, flexShrink: 0 }}>{statusTag.label}</UITag>\n )}\n </div>\n\n {/* Meta: time ago + duration */}\n <div style={{ display: 'flex', gap: 12, marginBottom: task || phases.length > 0 || currentStep ? 8 : 0 }}>\n {startedAgo && (\n <span style={{ fontSize: 12, color: 'var(--text-tertiary)' }}>{startedAgo}</span>\n )}\n {duration && (\n <span style={{ fontSize: 12, color: 'var(--text-tertiary)' }}>{duration}</span>\n )}\n <span style={{ fontSize: 12, color: 'var(--text-tertiary)', fontFamily: 'monospace' }}>\n #{run.id.slice(-6)}\n </span>\n </div>\n\n {/* Task description */}\n {task && (\n <div style={{ fontSize: 12, color: 'var(--text-secondary)', marginBottom: 8, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {task}\n </div>\n )}\n\n {/* Phase progress */}\n {phases.length > 0 && (\n <div style={{ marginBottom: 8 }}>\n <PhaseProgressBar phases={phases} compact />\n </div>\n )}\n\n {/* Current step */}\n {currentStep && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n <StatusDot status={currentStep.status} />\n <span style={{ fontSize: 12, color: 'var(--text-secondary)' }}>\n {currentStep.summary ?? currentStep.name}\n </span>\n </div>\n )}\n\n {/* Error summary for failed runs */}\n {run.status === 'failed' && run.result?.error && (\n <div style={{\n fontSize: 12, color: 'var(--error)', marginTop: 6,\n padding: '4px 8px', background: 'color-mix(in srgb, var(--error) 6%, transparent)',\n borderRadius: 4,\n overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap',\n }}>\n {run.result.error.message}\n </div>\n )}\n </div>\n );\n}\n","/**\n * Triage view for workflow runs.\n * Groups runs into: Needs Attention → Running → Completed → Failed\n */\n\nimport * as React from 'react';\nimport { UITypographyText } from '@kb-labs/sdk/studio';\nimport type { WorkflowRun } from '@kb-labs/workflow-contracts';\nimport { RunCard } from './RunCard';\n\nconst GROUPS: { key: string; label: string; statuses: string[]; color: string }[] = [\n {\n key: 'attention',\n label: 'Needs Attention',\n statuses: ['waiting_approval'],\n color: 'var(--warning)',\n },\n {\n key: 'running',\n label: 'Running',\n statuses: ['running', 'queued'],\n color: 'var(--info)',\n },\n {\n key: 'completed',\n label: 'Completed',\n statuses: ['success'],\n color: 'var(--success)',\n },\n {\n key: 'failed',\n label: 'Failed',\n statuses: ['failed', 'dlq'],\n color: 'var(--error)',\n },\n {\n key: 'other',\n label: 'Other',\n statuses: ['cancelled', 'skipped', 'pending'],\n color: 'var(--text-tertiary)',\n },\n];\n\ninterface TriageViewProps {\n runs: WorkflowRun[];\n onRunClick: (runId: string) => void;\n}\n\nexport function TriageView({ runs, onRunClick }: TriageViewProps) {\n const grouped = React.useMemo(() => {\n const result: Record<string, WorkflowRun[]> = {};\n for (const group of GROUPS) {\n result[group.key] = runs.filter((r) => (group.statuses as string[]).includes(r.status));\n }\n return result;\n }, [runs]);\n\n const nonEmptyGroups = GROUPS.filter((g) => (grouped[g.key]?.length ?? 0) > 0);\n\n if (runs.length === 0) {\n return (\n <div style={{ textAlign: 'center', padding: '48px 0', color: 'var(--text-secondary)' }}>\n <UITypographyText className=\"typo-description text-secondary\">No runs found</UITypographyText>\n </div>\n );\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 32 }}>\n {nonEmptyGroups.map((group) => (\n <div key={group.key}>\n <div style={{ display: 'flex', alignItems: 'center', gap: 8, marginBottom: 12 }}>\n <span style={{ width: 8, height: 8, borderRadius: '50%', background: group.color, display: 'inline-block' }} />\n <UITypographyText className=\"typo-label\" style={{ color: 'var(--text-secondary)' }}>\n {group.label}\n </UITypographyText>\n <UITypographyText className=\"typo-caption text-tertiary\">\n ({grouped[group.key]!.length})\n </UITypographyText>\n </div>\n <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fill, minmax(320px, 1fr))', gap: 12 }}>\n {grouped[group.key]!.map((run) => (\n <RunCard key={run.id} run={run} onClick={() => onRunClick(run.id)} />\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n}\n","/**\n * Board (kanban) view for workflow runs.\n * Columns: Queued → Running → Waiting Approval → Success → Failed → Cancelled\n */\n\nimport { UITypographyText } from '@kb-labs/sdk/studio';\nimport type { WorkflowRun } from '@kb-labs/workflow-contracts';\nimport { RunCard } from '../triage/RunCard';\n\nconst COLUMNS: { status: WorkflowRun['status'] | 'waiting_approval'; label: string; color: string }[] = [\n { status: 'queued', label: 'Queued', color: 'var(--text-tertiary)' },\n { status: 'running', label: 'Running', color: 'var(--info)' },\n { status: 'waiting_approval', label: 'Waiting Approval', color: 'var(--warning)' },\n { status: 'success', label: 'Success', color: 'var(--success)' },\n { status: 'failed', label: 'Failed', color: 'var(--error)' },\n { status: 'dlq', label: 'Dead Letter', color: 'var(--error)' },\n { status: 'cancelled', label: 'Cancelled', color: 'var(--text-tertiary)' },\n];\n\ninterface BoardViewProps {\n runs: WorkflowRun[];\n onRunClick: (runId: string) => void;\n}\n\nexport function BoardView({ runs, onRunClick }: BoardViewProps) {\n const byStatus = Object.fromEntries(\n COLUMNS.map((col) => [col.status, runs.filter((r) => r.status === col.status)]),\n );\n\n const activeCols = COLUMNS.filter((col) => (byStatus[col.status]?.length ?? 0) > 0);\n\n if (activeCols.length === 0) {\n return (\n <div style={{ textAlign: 'center', padding: '48px 0' }}>\n <UITypographyText className=\"typo-description text-secondary\">No runs found</UITypographyText>\n </div>\n );\n }\n\n return (\n <div style={{ display: 'flex', gap: 16, overflowX: 'auto', paddingBottom: 8 }}>\n {activeCols.map((col) => (\n <div\n key={col.status}\n style={{ minWidth: 280, maxWidth: 320, flexShrink: 0 }}\n >\n {/* Column header */}\n <div style={{\n display: 'flex', alignItems: 'center', gap: 6,\n marginBottom: 10, padding: '0 4px',\n }}>\n <span style={{ width: 8, height: 8, borderRadius: '50%', background: col.color, display: 'inline-block' }} />\n <UITypographyText className=\"typo-label\" style={{ color: 'var(--text-secondary)' }}>\n {col.label}\n </UITypographyText>\n <UITypographyText className=\"typo-caption text-tertiary\">\n {byStatus[col.status]!.length}\n </UITypographyText>\n </div>\n\n {/* Cards */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {byStatus[col.status]!.map((run) => (\n <RunCard key={run.id} run={run} onClick={() => onRunClick(run.id)} />\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n}\n","/**\n * Table view for workflow runs — sortable, filterable list.\n * Extracted from WorkflowsRuns.tsx to be used as one of the view modes.\n */\n\nimport { useMemo } from 'react';\nimport {\n UITable,\n UITypographyText,\n} from '@kb-labs/sdk/studio';\nimport type { UITableColumn } from '@kb-labs/sdk/studio';\nimport type { WorkflowRun } from '@kb-labs/workflow-contracts';\nimport { WorkflowStatusBadge } from '../shared/WorkflowStatusBadge';\n\nfunction formatDate(dateStr?: string) {\n if (!dateStr) { return '-'; }\n return new Date(dateStr).toLocaleString();\n}\n\nfunction formatDuration(run: WorkflowRun) {\n if (!run.startedAt) { return '-'; }\n const start = new Date(run.startedAt).getTime();\n const end = run.finishedAt ? new Date(run.finishedAt).getTime() : Date.now();\n const ms = end - start;\n const seconds = Math.floor(ms / 1000);\n if (seconds < 60) { return `${seconds}s`; }\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) { return `${minutes}m ${seconds % 60}s`; }\n const hours = Math.floor(minutes / 60);\n return `${hours}h ${minutes % 60}m`;\n}\n\ninterface TableViewProps {\n runs: WorkflowRun[];\n loading: boolean;\n onRunClick: (runId: string) => void;\n}\n\nexport function TableView({ runs, loading, onRunClick }: TableViewProps) {\n const columns = useMemo<UITableColumn<WorkflowRun>[]>(\n () => [\n {\n title: 'Run ID',\n dataIndex: 'id',\n key: 'id',\n width: 180,\n render: (value: string) => (\n <UITypographyText className=\"typo-caption\" code ellipsis={{ tooltip: value }}>\n {value.slice(0, 16)}...\n </UITypographyText>\n ),\n },\n {\n title: 'Workflow',\n dataIndex: 'name',\n key: 'name',\n width: 220,\n render: (_value: unknown, record: WorkflowRun) => (\n <UITypographyText className=\"typo-body\" strong>\n {record.name}@{record.version}\n </UITypographyText>\n ),\n },\n {\n title: 'Status',\n dataIndex: 'status',\n key: 'status',\n width: 140,\n render: (status: WorkflowRun['status']) => <WorkflowStatusBadge status={status} />,\n },\n {\n title: 'Triggered By',\n key: 'actor',\n width: 140,\n render: (_value: unknown, record: WorkflowRun) => (\n <UITypographyText className=\"typo-caption text-secondary\">\n {record.trigger.actor ?? 'unknown'}\n </UITypographyText>\n ),\n },\n {\n title: 'Started At',\n dataIndex: 'startedAt',\n key: 'startedAt',\n width: 180,\n render: (val: string) => (\n <UITypographyText className=\"typo-caption\">{formatDate(val)}</UITypographyText>\n ),\n },\n {\n title: 'Duration',\n key: 'duration',\n width: 100,\n render: (_value: unknown, record: WorkflowRun) => (\n <UITypographyText className=\"typo-caption\">{formatDuration(record)}</UITypographyText>\n ),\n },\n ],\n [],\n );\n\n return (\n <UITable\n rowKey=\"id\"\n columns={columns}\n dataSource={runs}\n loading={loading}\n scroll={{ x: 960 }}\n pagination={{ pageSize: 20 }}\n onRow={(record) => ({\n style: { cursor: 'pointer' },\n onClick: () => onRunClick(record.id),\n })}\n />\n );\n}\n","/**\n * @module @kb-labs/studio-app/modules/workflows/pages/workflows-runs-page\n * All workflow runs list — Triage / Board / Table views\n */\n\nimport { useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n UIButton,\n UISelect,\n UIRow,\n UICol,\n UIIcon,\n UITypographyText,\n} from '@kb-labs/sdk/studio';\nimport { useData } from '@kb-labs/sdk/studio';\nimport type { WorkflowRun } from '@kb-labs/workflow-contracts';\nimport { UIPage, UIPageHeader, UICard } from '@kb-labs/sdk/studio';\nimport { ViewModeSelector } from '../components/shared/ViewModeSelector';\nimport { TriageView } from '../components/triage/TriageView';\nimport { BoardView } from '../components/board/BoardView';\nimport { TableView } from '../components/table/TableView';\n\ntype ViewMode = 'triage' | 'board' | 'table';\n\nconst VIEWS = {\n triage: { label: 'Triage' },\n board: { label: 'Board' },\n table: { label: 'Table' },\n};\n\nexport default function WorkflowsRuns() {\n const navigate = useNavigate();\n const [viewMode, setViewMode] = useState<ViewMode>('triage');\n const [filters, setFilters] = useState<{ limit: number; status?: string }>({ limit: 50 });\n\n const { data, isLoading, refetch } = useData<{ runs: WorkflowRun[]; total: number }>('/exec/api/v1/runs', {\n params: { limit: filters.limit, ...(filters.status ? { status: filters.status } : {}) },\n pollingMs: viewMode !== 'table' ? 5000 : undefined,\n });\n\n const runs = data?.runs ?? [];\n\n return (\n <UIPage width=\"full\">\n <UIPageHeader\n title=\"Workflow Runs\"\n description=\"All workflow executions\"\n breadcrumbs={[\n { title: 'Home', href: '/' },\n { title: 'Workflows', href: '/workflows' },\n { title: 'Runs' },\n ]}\n actions={\n <div style={{ display: 'flex', gap: 8, alignItems: 'center' }}>\n <ViewModeSelector views={VIEWS} current={viewMode} onChange={setViewMode} />\n <UIButton\n icon={<UIIcon name=\"ReloadOutlined\" spin={isLoading} />}\n onClick={() => refetch()}\n />\n </div>\n }\n />\n\n {/* Filters */}\n <UICard style={{ marginBottom: 'var(--spacing-section)' }}>\n <UIRow gutter={16}>\n <UICol span={8}>\n <UITypographyText className=\"typo-label\">Filter by Status</UITypographyText>\n <UISelect\n style={{ width: '100%', marginTop: 8 }}\n placeholder=\"All statuses\"\n allowClear\n value={filters.status}\n onChange={(status) => setFilters({ ...filters, status: status as string | undefined })}\n options={[\n { label: 'Running', value: 'running' },\n { label: 'Success', value: 'success' },\n { label: 'Failed', value: 'failed' },\n { label: 'Dead Letter', value: 'dlq' },\n { label: 'Cancelled', value: 'cancelled' },\n { label: 'Queued', value: 'queued' },\n ]}\n />\n </UICol>\n <UICol span={8}>\n <UITypographyText className=\"typo-label\">Limit</UITypographyText>\n <UISelect\n style={{ width: '100%', marginTop: 8 }}\n value={filters.limit}\n onChange={(limit) => setFilters({ ...filters, limit: limit as number })}\n options={[\n { label: '25', value: 25 },\n { label: '50', value: 50 },\n { label: '100', value: 100 },\n { label: '200', value: 200 },\n ]}\n />\n </UICol>\n </UIRow>\n </UICard>\n\n {/* View */}\n {viewMode === 'triage' && (\n <TriageView runs={runs} onRunClick={(id) => navigate(`/p/workflows/runs/${id}`)} />\n )}\n {viewMode === 'board' && (\n <BoardView runs={runs} onRunClick={(id) => navigate(`/p/workflows/runs/${id}`)} />\n )}\n {viewMode === 'table' && (\n <UICard>\n <TableView runs={runs} loading={isLoading} onRunClick={(id) => navigate(`/p/workflows/runs/${id}`)} />\n </UICard>\n )}\n </UIPage>\n );\n}\n"],"names":["STATUS_TAG","RunCard","param","payload","_ref","_ref2","_currentStep_summary","_run_jobs_","_run_jobs_1","_run_result","run","onClick","phases","model","usePipelineModel","phase","allDone","s","anyActive","currentStep","getCurrentStepInfo","_iteratorError","job","_iteratorError1","_step_spec","step","task","startedAt","finishedAt","duration","formatDuration","Date","statusTag","startedAgo","timeAgo","iso","m","Math","diffMs","h","onMouseEnter","e","onMouseLeave","UITag","PhaseProgressBar","StatusDot","GROUPS","TriageView","runs","onRunClick","grouped","React","result","group","r","nonEmptyGroups","g","_grouped_g_key","UITypographyText","COLUMNS","BoardView","byStatus","Object","col","activeCols","_byStatus_col_status","TableView","loading","columns","useMemo","render","value","_value","record","status","WorkflowStatusBadge","_record_trigger_actor","val","start","seconds","ms","end","minutes","hours","UITable","onRow","VIEWS","WorkflowsRuns","navigate","useNavigate","_useState","viewMode","setViewMode","_useState1","filters","setFilters","_useData","undefined","data","isLoading","refetch","UIPage","UIPageHeader","ViewModeSelector","UIButton","UIIcon","UICard","UIRow","UICol","UISelect","onChange","limit","id"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"name": "workflowPlugin",
|
|
6
6
|
"globalName": "workflowPlugin",
|
|
7
7
|
"buildInfo": {
|
|
8
|
-
"buildVersion": "2.
|
|
8
|
+
"buildVersion": "2.52.0",
|
|
9
9
|
"buildName": "@kb-labs/workflow-entry"
|
|
10
10
|
},
|
|
11
11
|
"publicPath": "auto",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
{
|
|
28
28
|
"id": "workflowPlugin:@kb-labs/studio-event-bus",
|
|
29
29
|
"name": "@kb-labs/studio-event-bus",
|
|
30
|
-
"version": "2.
|
|
30
|
+
"version": "2.52.0",
|
|
31
31
|
"singleton": true,
|
|
32
32
|
"requiredVersion": "^0.1.0",
|
|
33
33
|
"assets": {
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
{
|
|
48
48
|
"id": "workflowPlugin:@kb-labs/studio-ui-core",
|
|
49
49
|
"name": "@kb-labs/studio-ui-core",
|
|
50
|
-
"version": "2.
|
|
50
|
+
"version": "2.52.0",
|
|
51
51
|
"singleton": true,
|
|
52
52
|
"requiredVersion": "^0.1.0",
|
|
53
53
|
"assets": {
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
{
|
|
87
87
|
"id": "workflowPlugin:@kb-labs/studio-hooks",
|
|
88
88
|
"name": "@kb-labs/studio-hooks",
|
|
89
|
-
"version": "2.
|
|
89
|
+
"version": "2.52.0",
|
|
90
90
|
"singleton": true,
|
|
91
91
|
"requiredVersion": "^0.1.0",
|
|
92
92
|
"assets": {
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
{
|
|
107
107
|
"id": "workflowPlugin:@kb-labs/studio-ui-kit",
|
|
108
108
|
"name": "@kb-labs/studio-ui-kit",
|
|
109
|
-
"version": "2.
|
|
109
|
+
"version": "2.52.0",
|
|
110
110
|
"singleton": true,
|
|
111
111
|
"requiredVersion": "^0.1.0",
|
|
112
112
|
"assets": {
|
|
@@ -126,16 +126,15 @@
|
|
|
126
126
|
}
|
|
127
127
|
},
|
|
128
128
|
{
|
|
129
|
-
"id": "workflowPlugin:react
|
|
130
|
-
"name": "react
|
|
129
|
+
"id": "workflowPlugin:react",
|
|
130
|
+
"name": "react",
|
|
131
131
|
"version": "19.2.5",
|
|
132
132
|
"singleton": true,
|
|
133
133
|
"requiredVersion": "^19.0.0",
|
|
134
134
|
"assets": {
|
|
135
135
|
"js": {
|
|
136
136
|
"sync": [
|
|
137
|
-
"
|
|
138
|
-
"546.js"
|
|
137
|
+
"405.js"
|
|
139
138
|
],
|
|
140
139
|
"async": []
|
|
141
140
|
},
|
|
@@ -146,15 +145,16 @@
|
|
|
146
145
|
}
|
|
147
146
|
},
|
|
148
147
|
{
|
|
149
|
-
"id": "workflowPlugin:react",
|
|
150
|
-
"name": "react",
|
|
148
|
+
"id": "workflowPlugin:react-dom",
|
|
149
|
+
"name": "react-dom",
|
|
151
150
|
"version": "19.2.5",
|
|
152
151
|
"singleton": true,
|
|
153
152
|
"requiredVersion": "^19.0.0",
|
|
154
153
|
"assets": {
|
|
155
154
|
"js": {
|
|
156
155
|
"sync": [
|
|
157
|
-
"
|
|
156
|
+
"165.js",
|
|
157
|
+
"546.js"
|
|
158
158
|
],
|
|
159
159
|
"async": []
|
|
160
160
|
},
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"name": "workflowPlugin",
|
|
6
6
|
"globalName": "workflowPlugin",
|
|
7
7
|
"buildInfo": {
|
|
8
|
-
"buildVersion": "2.
|
|
8
|
+
"buildVersion": "2.52.0",
|
|
9
9
|
"buildName": "@kb-labs/workflow-entry"
|
|
10
10
|
},
|
|
11
11
|
"publicPath": "auto",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
{
|
|
28
28
|
"id": "workflowPlugin:@kb-labs/studio-event-bus",
|
|
29
29
|
"name": "@kb-labs/studio-event-bus",
|
|
30
|
-
"version": "2.
|
|
30
|
+
"version": "2.52.0",
|
|
31
31
|
"requiredVersion": "^0.1.0",
|
|
32
32
|
"singleton": true,
|
|
33
33
|
"assets": {
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
{
|
|
49
49
|
"id": "workflowPlugin:@kb-labs/studio-ui-core",
|
|
50
50
|
"name": "@kb-labs/studio-ui-core",
|
|
51
|
-
"version": "2.
|
|
51
|
+
"version": "2.52.0",
|
|
52
52
|
"requiredVersion": "^0.1.0",
|
|
53
53
|
"singleton": true,
|
|
54
54
|
"assets": {
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
{
|
|
90
90
|
"id": "workflowPlugin:@kb-labs/studio-hooks",
|
|
91
91
|
"name": "@kb-labs/studio-hooks",
|
|
92
|
-
"version": "2.
|
|
92
|
+
"version": "2.52.0",
|
|
93
93
|
"requiredVersion": "^0.1.0",
|
|
94
94
|
"singleton": true,
|
|
95
95
|
"assets": {
|
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
{
|
|
111
111
|
"id": "workflowPlugin:@kb-labs/studio-ui-kit",
|
|
112
112
|
"name": "@kb-labs/studio-ui-kit",
|
|
113
|
-
"version": "2.
|
|
113
|
+
"version": "2.52.0",
|
|
114
114
|
"requiredVersion": "^0.1.0",
|
|
115
115
|
"singleton": true,
|
|
116
116
|
"assets": {
|
|
@@ -131,16 +131,15 @@
|
|
|
131
131
|
"usedIn": []
|
|
132
132
|
},
|
|
133
133
|
{
|
|
134
|
-
"id": "workflowPlugin:react
|
|
135
|
-
"name": "react
|
|
134
|
+
"id": "workflowPlugin:react",
|
|
135
|
+
"name": "react",
|
|
136
136
|
"version": "19.2.5",
|
|
137
137
|
"requiredVersion": "^19.0.0",
|
|
138
138
|
"singleton": true,
|
|
139
139
|
"assets": {
|
|
140
140
|
"js": {
|
|
141
141
|
"sync": [
|
|
142
|
-
"
|
|
143
|
-
"546.js"
|
|
142
|
+
"405.js"
|
|
144
143
|
],
|
|
145
144
|
"async": []
|
|
146
145
|
},
|
|
@@ -152,15 +151,16 @@
|
|
|
152
151
|
"usedIn": []
|
|
153
152
|
},
|
|
154
153
|
{
|
|
155
|
-
"id": "workflowPlugin:react",
|
|
156
|
-
"name": "react",
|
|
154
|
+
"id": "workflowPlugin:react-dom",
|
|
155
|
+
"name": "react-dom",
|
|
157
156
|
"version": "19.2.5",
|
|
158
157
|
"requiredVersion": "^19.0.0",
|
|
159
158
|
"singleton": true,
|
|
160
159
|
"assets": {
|
|
161
160
|
"js": {
|
|
162
161
|
"sync": [
|
|
163
|
-
"
|
|
162
|
+
"165.js",
|
|
163
|
+
"546.js"
|
|
164
164
|
],
|
|
165
165
|
"async": []
|
|
166
166
|
},
|