@kb-labs/workflow-entry 2.34.0 → 2.36.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.
@@ -1 +1 @@
1
- {"version":3,"file":"__federation_expose_RunDetail.js","sources":["webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/artifacts.module.css","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/css-loader@7.1.4_@rspack+core@1.7.11_@swc+helpers@0.5.15__webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/css-loader/dist/runtime/api.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/css-loader@7.1.4_@rspack+core@1.7.11_@swc+helpers@0.5.15__webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://@kb-labs/workflow-entry/./src/studio/components/ApprovalModal.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/pipeline/StepDetailDrawer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/pipeline/PipelineView.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/MarkdownViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/artifacts.module.css?4ce2","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/IssuesViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/TableViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/DiffViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/LogViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/LinkViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/ArtifactViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/dashboard/DashboardView.tsx","webpack://@kb-labs/workflow-entry/./src/studio/pages/WorkflowRunDetail.tsx"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../../node_modules/.pnpm/css-loader@7.1.4_@rspack+core@1.7.11_@swc+helpers@0.5.15__webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../../node_modules/.pnpm/css-loader@7.1.4_@rspack+core@1.7.11_@swc+helpers@0.5.15__webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* ── Markdown editor ── */\n.eKkdFRPP08w0ipmt {\n width: 100%;\n min-height: 200px;\n font-family: monospace;\n font-size: 13px;\n padding: 12px;\n border: 1px solid var(--border-primary);\n border-radius: 6px;\n background: var(--bg-primary);\n color: var(--text-primary);\n resize: vertical;\n box-sizing: border-box;\n}\n\n.xlFaIxn8H1U2vmZd {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n}\n\n/* ── Issues ── */\n.EflSZ182vBIy0S2M {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.pie3p6utzf8rTfUu {\n padding: 8px 12px;\n background: var(--bg-secondary);\n border: 1px solid var(--border-primary);\n border-radius: 6px;\n}\n\n.Al1WXNwqfC0ju3OY {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n}\n\n.qUayT4ACFY4Pv93l {\n font-size: 12px;\n color: var(--text-secondary);\n font-family: monospace;\n}\n\n.K5oooXXvNFAN7bDb {\n font-size: 13px;\n color: var(--text-primary);\n}\n\n.tArqFztlCu4cPnh5 {\n font-size: 12px;\n color: var(--text-secondary);\n margin-top: 4px;\n font-style: italic;\n}\n\n/* ── Log ── */\n.xRIfIRB1FQYzXPeI {\n margin: 0;\n padding: 12px;\n border-radius: 6px;\n font-size: 13px;\n line-height: 1.6;\n overflow: auto;\n background: #0d1117;\n color: #c9d1d9;\n font-family: monospace;\n max-height: 400px;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n/* ── Link ── */\n.Fdjb7OQrUoEC9TE7 {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n background: var(--bg-secondary);\n border: 1px solid var(--border-primary);\n border-radius: 6px;\n font-size: 13px;\n color: var(--link);\n text-decoration: none;\n font-weight: 500;\n transition: background 0.15s;\n}\n\n.Fdjb7OQrUoEC9TE7:hover {\n background: var(--bg-tertiary, var(--bg-secondary));\n border-color: var(--link);\n}\n\n.MPGw8m2NoAVGUlis {\n font-size: 11px;\n opacity: 0.6;\n}\n\n/* ── Empty state ── */\n.CQMnm5XuOUksgiz3 {\n color: var(--text-tertiary);\n font-size: 13px;\n padding: 12px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/studio/components/artifacts/artifacts.module.css\"],\"names\":[],\"mappings\":\"AAAA,0BAA0B;AAC1B;EACE,WAAW;EACX,iBAAiB;EACjB,sBAAsB;EACtB,eAAe;EACf,aAAa;EACb,uCAAuC;EACvC,kBAAkB;EAClB,6BAA6B;EAC7B,0BAA0B;EAC1B,gBAAgB;EAChB,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,QAAQ;EACR,eAAe;AACjB;;AAEA,iBAAiB;AACjB;EACE,aAAa;EACb,sBAAsB;EACtB,QAAQ;AACV;;AAEA;EACE,iBAAiB;EACjB,+BAA+B;EAC/B,uCAAuC;EACvC,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,kBAAkB;AACpB;;AAEA;EACE,eAAe;EACf,4BAA4B;EAC5B,sBAAsB;AACxB;;AAEA;EACE,eAAe;EACf,0BAA0B;AAC5B;;AAEA;EACE,eAAe;EACf,4BAA4B;EAC5B,eAAe;EACf,kBAAkB;AACpB;;AAEA,cAAc;AACd;EACE,SAAS;EACT,aAAa;EACb,kBAAkB;EAClB,eAAe;EACf,gBAAgB;EAChB,cAAc;EACd,mBAAmB;EACnB,cAAc;EACd,sBAAsB;EACtB,iBAAiB;EACjB,qBAAqB;EACrB,sBAAsB;AACxB;;AAEA,eAAe;AACf;EACE,oBAAoB;EACpB,mBAAmB;EACnB,QAAQ;EACR,iBAAiB;EACjB,+BAA+B;EAC/B,uCAAuC;EACvC,kBAAkB;EAClB,eAAe;EACf,kBAAkB;EAClB,qBAAqB;EACrB,gBAAgB;EAChB,4BAA4B;AAC9B;;AAEA;EACE,mDAAmD;EACnD,yBAAyB;AAC3B;;AAEA;EACE,eAAe;EACf,YAAY;AACd;;AAEA,sBAAsB;AACtB;EACE,2BAA2B;EAC3B,eAAe;EACf,aAAa;AACf\",\"sourcesContent\":[\"/* ── Markdown editor ── */\\n.textarea {\\n width: 100%;\\n min-height: 200px;\\n font-family: monospace;\\n font-size: 13px;\\n padding: 12px;\\n border: 1px solid var(--border-primary);\\n border-radius: 6px;\\n background: var(--bg-primary);\\n color: var(--text-primary);\\n resize: vertical;\\n box-sizing: border-box;\\n}\\n\\n.editActions {\\n display: flex;\\n gap: 8px;\\n margin-top: 8px;\\n}\\n\\n/* ── Issues ── */\\n.issueList {\\n display: flex;\\n flex-direction: column;\\n gap: 8px;\\n}\\n\\n.issueItem {\\n padding: 8px 12px;\\n background: var(--bg-secondary);\\n border: 1px solid var(--border-primary);\\n border-radius: 6px;\\n}\\n\\n.issueHeader {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n margin-bottom: 4px;\\n}\\n\\n.issueFile {\\n font-size: 12px;\\n color: var(--text-secondary);\\n font-family: monospace;\\n}\\n\\n.issueMessage {\\n font-size: 13px;\\n color: var(--text-primary);\\n}\\n\\n.issueFix {\\n font-size: 12px;\\n color: var(--text-secondary);\\n margin-top: 4px;\\n font-style: italic;\\n}\\n\\n/* ── Log ── */\\n.logPre {\\n margin: 0;\\n padding: 12px;\\n border-radius: 6px;\\n font-size: 13px;\\n line-height: 1.6;\\n overflow: auto;\\n background: #0d1117;\\n color: #c9d1d9;\\n font-family: monospace;\\n max-height: 400px;\\n white-space: pre-wrap;\\n word-break: break-word;\\n}\\n\\n/* ── Link ── */\\n.link {\\n display: inline-flex;\\n align-items: center;\\n gap: 6px;\\n padding: 5px 12px;\\n background: var(--bg-secondary);\\n border: 1px solid var(--border-primary);\\n border-radius: 6px;\\n font-size: 13px;\\n color: var(--link);\\n text-decoration: none;\\n font-weight: 500;\\n transition: background 0.15s;\\n}\\n\\n.link:hover {\\n background: var(--bg-tertiary, var(--bg-secondary));\\n border-color: var(--link);\\n}\\n\\n.linkArrow {\\n font-size: 11px;\\n opacity: 0.6;\\n}\\n\\n/* ── Empty state ── */\\n.empty {\\n color: var(--text-tertiary);\\n font-size: 13px;\\n padding: 12px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport var textarea = `eKkdFRPP08w0ipmt`;\nexport var editActions = `xlFaIxn8H1U2vmZd`;\nexport var issueList = `EflSZ182vBIy0S2M`;\nexport var issueItem = `pie3p6utzf8rTfUu`;\nexport var issueHeader = `Al1WXNwqfC0ju3OY`;\nexport var issueFile = `qUayT4ACFY4Pv93l`;\nexport var issueMessage = `K5oooXXvNFAN7bDb`;\nexport var issueFix = `tArqFztlCu4cPnh5`;\nexport var logPre = `xRIfIRB1FQYzXPeI`;\nexport var link = `Fdjb7OQrUoEC9TE7`;\nexport var linkArrow = `MPGw8m2NoAVGUlis`;\nexport var empty = `CQMnm5XuOUksgiz3`;\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;","\"use strict\";\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;","import { useState } from 'react'\nimport {\n UIModal,\n UIButton,\n UIAlert,\n UITypographyText,\n UITypographyParagraph,\n UITitle,\n UIInputTextArea,\n} from '@kb-labs/sdk/studio'\nimport type { StepRun } from '@kb-labs/workflow-contracts'\n\nconst Text = UITypographyText\nconst Paragraph = UITypographyParagraph\nconst Title = UITitle\nconst TextArea = UIInputTextArea\n\ninterface ApprovalModalProps {\n step: StepRun | null\n runId: string\n open: boolean\n onClose: () => void\n onResolve: (action: 'approve' | 'reject', comment?: string) => Promise<void>\n isLoading?: boolean\n error?: Error | null\n}\n\nexport function ApprovalModal({\n step,\n runId: _runId,\n open,\n onClose,\n onResolve,\n isLoading,\n error,\n}: ApprovalModalProps) {\n const [comment, setComment] = useState('')\n const [pendingAction, setPendingAction] = useState<'approve' | 'reject' | null>(null)\n\n const context = (step?.spec?.with ?? {}) as Record<string, unknown>\n const title = typeof context.title === 'string' ? context.title : step?.name ?? 'Approval Required'\n const instructions = typeof context.instructions === 'string' ? context.instructions : null\n const contextData = typeof context.context === 'object' && context.context !== null\n ? context.context as Record<string, unknown>\n : null\n\n const handleResolve = async (action: 'approve' | 'reject') => {\n setPendingAction(action)\n try {\n await onResolve(action, comment.trim() || undefined)\n setComment('')\n setPendingAction(null)\n } catch {\n setPendingAction(null)\n }\n }\n\n return (\n <UIModal\n open={open}\n title={title}\n width=\"large\"\n maskClosable={false}\n onCancel={onClose}\n footer={null}\n >\n {instructions && (\n <Paragraph style={{ marginBottom: 16 }}>\n <Text type=\"secondary\">{instructions}</Text>\n </Paragraph>\n )}\n\n {contextData && Object.keys(contextData).length > 0 && (\n <div style={{ marginBottom: 16 }}>\n <Title level={5} style={{ marginBottom: 8 }}>Context</Title>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 6 }}>\n {Object.entries(contextData).map(([key, value]) => (\n <div key={key} style={{ display: 'flex', gap: 8 }}>\n <Text strong style={{ minWidth: 100, textTransform: 'capitalize' }}>\n {key.replace(/([A-Z])/g, ' $1').trim()}:\n </Text>\n <Text>{String(value ?? '—')}</Text>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {error && (\n <UIAlert\n variant=\"error\"\n message={error.message}\n style={{ marginBottom: 16 }}\n showIcon\n />\n )}\n\n <div style={{ marginBottom: 16 }}>\n <Title level={5} style={{ marginBottom: 8 }}>Comment (optional)</Title>\n <TextArea\n rows={3}\n placeholder=\"Add a comment for the record...\"\n value={comment}\n onChange={(e) => setComment(e.target.value)}\n disabled={isLoading}\n />\n </div>\n\n <div style={{ display: 'flex', gap: 8, justifyContent: 'flex-end' }}>\n <UIButton\n onClick={onClose}\n disabled={isLoading}\n >\n Cancel\n </UIButton>\n <UIButton\n danger\n onClick={() => void handleResolve('reject')}\n loading={isLoading && pendingAction === 'reject'}\n disabled={isLoading && pendingAction !== 'reject'}\n >\n Reject\n </UIButton>\n <UIButton\n variant=\"primary\"\n onClick={() => void handleResolve('approve')}\n loading={isLoading && pendingAction === 'approve'}\n disabled={isLoading && pendingAction !== 'approve'}\n >\n Approve\n </UIButton>\n </div>\n </UIModal>\n )\n}\n","/**\n * Drawer that shows step details when a node is clicked in PipelineView.\n * Reuses the existing StepPanel logic inline to avoid circular imports.\n */\n\nimport { useMemo, useRef, useEffect } from 'react'\nimport { UIDrawer, UIButton, UITabs, UIJsonViewer, UITypographyText } from '@kb-labs/sdk/studio'\nimport type { UITabItem } from '@kb-labs/sdk/studio'\nimport type { StepRun } from '@kb-labs/workflow-contracts'\nimport type { WorkflowLogEvent } from '@kb-labs/workflow-contracts/rest-api'\n\nconst Text = UITypographyText\n\nconst STATUS_LABEL: Record<string, string> = {\n queued: 'Queued',\n running: 'Running...',\n success: 'Completed',\n failed: 'Failed',\n cancelled: 'Cancelled',\n skipped: 'Skipped',\n waiting_approval: 'Waiting for your decision',\n}\n\nconst STATUS_COLOR: Record<string, string> = {\n queued: 'var(--text-tertiary)',\n running: 'var(--warning)',\n success: 'var(--success)',\n failed: 'var(--error)',\n cancelled: 'var(--text-tertiary)',\n skipped: 'var(--text-tertiary)',\n waiting_approval: 'var(--info)',\n}\n\nfunction formatDuration(ms?: number): string | null {\n if (!ms) {return null}\n if (ms < 1000) {return `${ms}ms`}\n const s = ms / 1000\n if (s < 60) {return `${s.toFixed(1)}s`}\n return `${Math.floor(s / 60)}m ${Math.floor(s % 60)}s`\n}\n\ninterface LogLine { time: string; text: string; stream?: 'stdout' | 'stderr' }\n\n// Strip ANSI escape codes from text\n \nconst ANSI_RE = /\\x1b\\[[0-9;]*[A-Za-z]|\\x1b\\].*?\\x07/g\nfunction stripAnsi(s: string): string { return s.replace(ANSI_RE, '') }\n\nfunction extractLogLines(ev: WorkflowLogEvent): LogLine[] {\n const time = ev.timestamp ? new Date(ev.timestamp).toLocaleTimeString('en-US', { hour12: false }) : ''\n const p = ev.payload as Record<string, unknown> | undefined\n if (!p) {return []}\n\n // Live log.appended events (real-time streaming)\n if (ev.type === 'log.appended') {\n const msg = typeof p.message === 'string' ? stripAnsi(p.message) : ''\n if (!msg) {return []}\n const stream = (p.stream as 'stdout' | 'stderr') ?? 'stdout'\n return [{ time, text: msg, stream }]\n }\n\n const stdout = (p.outputs as Record<string, unknown> | undefined)?.stdout ?? p.stdout\n if (typeof stdout === 'string' && stdout.trim()) {\n return stripAnsi(stdout).trim().split('\\n').map(text => ({ time, text, stream: 'stdout' as const }))\n }\n const stderr = (p.outputs as Record<string, unknown> | undefined)?.stderr ?? p.stderr\n if (typeof stderr === 'string' && stderr.trim()) {\n return stripAnsi(stderr).trim().split('\\n').map(text => ({ time, text, stream: 'stderr' as const }))\n }\n if (typeof p.error === 'string') {return [{ time, text: p.error, stream: 'stderr' }]}\n if (typeof p.message === 'string') {return [{ time, text: p.message }]}\n if (typeof p.line === 'string') {return [{ time, text: p.line }]}\n if (typeof p.text === 'string') {return [{ time, text: p.text }]}\n return []\n}\n\nconst LOG_SKIP_KEYS = new Set(['stdout', 'stderr', 'exitCode', 'ok'])\n\ninterface StepDetailDrawerProps {\n step: StepRun | null\n events: WorkflowLogEvent[]\n open: boolean\n onClose: () => void\n onApprove?: () => void\n}\n\nexport function StepDetailDrawer({ step, events, open, onClose, onApprove }: StepDetailDrawerProps) {\n const sseLines = useMemo(() => events.flatMap(extractLogLines), [events])\n const logRef = useRef<HTMLPreElement>(null)\n\n // Auto-scroll to bottom when new lines arrive\n useEffect(() => {\n const el = logRef.current\n if (!el) {return}\n const isNearBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 80\n if (isNearBottom) {\n el.scrollTop = el.scrollHeight\n }\n }, [sseLines.length])\n\n const pollingLines = useMemo<LogLine[]>(() => {\n if (!step?.outputs || sseLines.length > 0) {return []}\n const lines: LogLine[] = []\n const { stdout, stderr } = step.outputs as { stdout?: unknown; stderr?: unknown }\n if (typeof stdout === 'string' && stdout.trim()) {\n stdout.trim().split('\\n').forEach(text => lines.push({ time: '', text }))\n }\n if (typeof stderr === 'string' && stderr.trim()) {\n stderr.trim().split('\\n').forEach(text => lines.push({ time: '', text }))\n }\n if (lines.length === 0) {\n const keys = Object.keys(step.outputs).filter(k => !LOG_SKIP_KEYS.has(k))\n if (keys.length > 0) {lines.push({ time: '', text: `Output: { ${keys.join(', ')} }` })}\n }\n return lines\n }, [step?.outputs, sseLines.length])\n\n const lines = sseLines.length > 0 ? sseLines : pollingLines\n\n const dataOutputs = useMemo(() => {\n if (!step?.outputs) {return null}\n const filtered: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(step.outputs)) {\n if (!LOG_SKIP_KEYS.has(k)) {filtered[k] = v}\n }\n return Object.keys(filtered).length > 0 ? filtered : null\n }, [step?.outputs])\n\n const hasInputs = step?.spec?.with != null && Object.keys(step.spec.with).length > 0\n const hasError = step?.error != null\n const hasData = dataOutputs !== null\n\n const logContent = (\n <div style={{ fontFamily: 'monospace', fontSize: 12 }}>\n {lines.length > 0 ? (\n <pre ref={logRef} style={{\n margin: 0,\n padding: '8px 12px',\n background: '#0d1117',\n color: '#c9d1d9',\n borderRadius: 4,\n overflow: 'auto',\n maxHeight: 500,\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n lineHeight: 1.6,\n }}>\n {lines.map((l, i) => (\n <span key={i}>\n {l.time && <span style={{ color: 'var(--text-tertiary)', userSelect: 'none', marginRight: 12 }}>{l.time}</span>}\n <span style={l.stream === 'stderr' ? { color: '#f85149' } : undefined}>{l.text}</span>{'\\n'}\n </span>\n ))}\n </pre>\n ) : (\n <Text type=\"secondary\" style={{ fontSize: 12 }}>\n {step?.status === 'running' ? 'Waiting for output...' :\n step?.status === 'queued' ? 'Not started yet' :\n step?.status === 'waiting_approval' ? 'Waiting for approval' :\n 'No output'}\n </Text>\n )}\n </div>\n )\n\n const tabItems: UITabItem[] = [\n { key: 'log', label: 'Log', children: logContent },\n ]\n if (hasData) {tabItems.push({ key: 'data', label: 'Data', children: <UIJsonViewer data={dataOutputs} /> })}\n if (hasInputs) {tabItems.push({ key: 'inputs', label: 'Inputs', children: <UIJsonViewer data={step!.spec!.with} /> })}\n if (hasError) {tabItems.push({ key: 'error', label: 'Error', children: <UIJsonViewer data={step!.error} /> })}\n\n const statusColor = STATUS_COLOR[step?.status ?? 'queued']\n const duration = formatDuration(step?.durationMs)\n\n return (\n <UIDrawer\n open={open}\n onClose={onClose}\n title={\n <div style={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n <span style={{ fontSize: 14, fontWeight: 600 }}>{step?.name ?? ''}</span>\n <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>\n <span style={{ fontSize: 12, color: statusColor, fontWeight: 600 }}>\n {STATUS_LABEL[step?.status ?? 'queued']}\n </span>\n {duration && (\n <span style={{ fontSize: 12, color: 'var(--text-tertiary)' }}>\n {duration}\n </span>\n )}\n </div>\n </div>\n }\n placement=\"right\"\n width={520}\n footer={\n step?.status === 'waiting_approval' && onApprove ? (\n <div style={{ display: 'flex', justifyContent: 'flex-end' }}>\n <UIButton variant=\"primary\" onClick={onApprove}>\n Review &amp; Decide\n </UIButton>\n </div>\n ) : null\n }\n >\n {step && (\n tabItems.length > 1\n ? <UITabs items={tabItems} size=\"small\" defaultActiveKey=\"log\" />\n : logContent\n )}\n </UIDrawer>\n )\n}\n","/**\n * Pipeline visualization.\n * Steps are rows, not cards — clean and scannable.\n * Gate rework: shows decision reason + feedback inline below gate row.\n */\n\nimport { useState, useRef, useEffect } from 'react'\nimport type { WorkflowRun, StepRun } from '@kb-labs/workflow-contracts'\nimport type { WorkflowLogEvent } from '@kb-labs/workflow-contracts/rest-api'\nimport { usePipelineModel } from '../../hooks/use-pipeline-graph'\nimport type { PipelineStep } from '../../hooks/use-pipeline-graph'\nimport { StepDetailDrawer } from './StepDetailDrawer'\n\n// ─── CSS ──────────────────────────────────────────────────────────────────────\n\nconst ANIM_CSS = `\n@keyframes kb-spin { 0% { transform: rotate(0deg) } 100% { transform: rotate(360deg) } }\n@keyframes kb-shimmer { 0% { left: -60% } 100% { left: 120% } }\n`\nlet injected = false\nfunction injectCss() {\n if (injected || typeof document === 'undefined') {return}\n injected = true\n const s = document.createElement('style')\n s.textContent = ANIM_CSS\n document.head.appendChild(s)\n}\n\n// ─── Status ───────────────────────────────────────────────────────────────────\n\nconst S_COLOR: Record<string, string> = {\n queued: 'var(--text-tertiary)',\n running: 'var(--warning)',\n success: 'var(--success)',\n failed: 'var(--error)',\n cancelled: 'var(--text-tertiary)',\n skipped: 'var(--text-tertiary)',\n waiting_approval: 'var(--info)',\n}\n\nconst S_LABEL: Record<string, string> = {\n queued: 'Queued',\n running: 'Running',\n success: 'Done',\n failed: 'Failed',\n cancelled: 'Cancelled',\n skipped: 'Skipped',\n waiting_approval: 'Review',\n}\n\nfunction StatusDot({ status }: { status: string }) {\n injectCss()\n const color = S_COLOR[status] ?? 'var(--text-tertiary)'\n if (status === 'running') {\n return <span style={{\n display: 'inline-block', width: 8, height: 8, flexShrink: 0,\n border: `2px solid ${color}`, borderTopColor: 'transparent',\n borderRadius: '50%', animation: 'kb-spin 0.8s linear infinite',\n }} />\n }\n const filled = status === 'success' || status === 'failed' || status === 'waiting_approval'\n return <span style={{\n display: 'inline-block', width: 8, height: 8, flexShrink: 0,\n borderRadius: '50%',\n background: filled ? color : 'transparent',\n border: `2px solid ${color}`,\n }} />\n}\n\nfunction formatDuration(ms?: number) {\n if (!ms) {return null}\n if (ms < 1000) {return `${ms}ms`}\n const s = ms / 1000\n if (s < 60) {return `${s.toFixed(1)}s`}\n return `${Math.floor(s / 60)}m ${Math.floor(s % 60)}s`\n}\n\n// ─── Phase colors ─────────────────────────────────────────────────────────────\n\nconst PHASE_COLOR: Record<string, string> = {\n Planning: 'var(--info)',\n Implementation: 'var(--success)',\n Quality: 'var(--warning)',\n Delivery: 'var(--link)',\n}\n\n// ─── Gate decision banner ─────────────────────────────────────────────────────\n\ninterface GateOutputs {\n decisionValue?: unknown\n action?: 'continue' | 'fail' | 'restart'\n restartFrom?: string\n iteration?: number\n maxIterations?: number\n maxIterationsReached?: boolean\n}\n\nfunction GateDecisionBanner({ stepRun, targetStepName }: { stepRun: StepRun; targetStepName?: string }) {\n const outputs = stepRun.outputs as GateOutputs | undefined\n const error = stepRun.error as Record<string, unknown> | undefined | null\n\n // Show banner if: outputs have non-continue action, OR step failed (even without outputs)\n const action = outputs?.action ?? (stepRun.status === 'failed' ? 'fail' : undefined)\n const decision = outputs?.decisionValue\n const iteration = outputs?.iteration\n\n if (!action || action === 'continue') {return null}\n\n const isRestart = action === 'restart'\n\n const color = isRestart ? 'var(--warning)' : 'var(--error)'\n const bgColor = isRestart\n ? 'color-mix(in srgb, var(--warning) 6%, var(--bg-secondary))'\n : 'color-mix(in srgb, var(--error) 6%, var(--bg-secondary))'\n\n const errorMsg = typeof error?.message === 'string' ? error.message : null\n const maxIterReached = outputs?.maxIterationsReached\n ?? (errorMsg?.toLowerCase().includes('max iteration') ?? false)\n\n return (\n <div style={{\n margin: '2px 0 4px 18px',\n padding: '8px 12px',\n background: bgColor,\n border: `1px solid color-mix(in srgb, ${color} 25%, transparent)`,\n borderRadius: 5,\n fontSize: 12,\n lineHeight: 1.6,\n }}>\n {/* Header line */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, marginBottom: 4 }}>\n <span style={{ color, fontWeight: 600 }}>\n {isRestart ? '↩ Returned for rework' : '✗ Gate failed'}\n </span>\n {iteration !== undefined && (\n <span style={{\n color: 'var(--text-tertiary)',\n background: 'var(--bg-tertiary)',\n padding: '0 5px', borderRadius: 4, fontSize: 11,\n }}>\n iteration {iteration + 1}\n </span>\n )}\n </div>\n\n {/* Decision value */}\n {decision !== undefined && decision !== null && (\n <div style={{ color: 'var(--text-secondary)' }}>\n <span style={{ color: 'var(--text-tertiary)' }}>Decision: </span>\n <code style={{\n fontSize: 11,\n background: 'var(--bg-tertiary)',\n padding: '0 4px', borderRadius: 3,\n color: color,\n fontFamily: 'monospace',\n }}>\n {String(decision)}\n </code>\n </div>\n )}\n\n {/* Restart target */}\n {isRestart && targetStepName && (\n <div style={{ color: 'var(--text-secondary)', marginTop: 2 }}>\n <span style={{ color: 'var(--text-tertiary)' }}>Restarting from: </span>\n <span style={{ fontWeight: 500 }}>{targetStepName}</span>\n </div>\n )}\n\n {/* Max iterations reached */}\n {maxIterReached && (\n <div style={{ color: 'var(--error)', marginTop: 2 }}>\n Max iterations reached — pipeline stopped\n </div>\n )}\n\n {/* Error message (if not max iter) */}\n {errorMsg && !maxIterReached && (\n <div style={{ color: 'var(--text-secondary)', marginTop: 2, fontStyle: 'italic' }}>\n {errorMsg}\n </div>\n )}\n </div>\n )\n}\n\n// ─── StepRow ─────────────────────────────────────────────────────────────────\n\ninterface StepRowProps {\n step: PipelineStep\n isReworkGate: boolean\n isReworkTarget: boolean\n reworkActive: boolean\n targetStepName?: string\n onClick: () => void\n rowRef?: (el: HTMLDivElement | null) => void\n}\n\nfunction StepRow({ step, isReworkGate, isReworkTarget, reworkActive, targetStepName, onClick, rowRef }: StepRowProps) {\n const { stepRun, stepType, iteration } = step\n const status = stepRun.status\n const isWaiting = status === 'waiting_approval'\n const isFailed = status === 'failed'\n const isRunning = status === 'running'\n const isQueued = status === 'queued'\n const isApproval = stepType === 'approval'\n const isGate = stepType === 'gate'\n\n // Gate outputs for restart detection\n const gateOutputs = isGate ? stepRun.outputs as GateOutputs | undefined : undefined\n const gateAction = gateOutputs?.action\n const showBanner = isGate && (gateAction === 'restart' || gateAction === 'fail' || isFailed)\n\n const highlight = isWaiting\n ? { bg: 'color-mix(in srgb, var(--info) 5%, var(--bg-secondary))', border: 'var(--info)' }\n : isFailed\n ? { bg: 'color-mix(in srgb, var(--error) 5%, var(--bg-secondary))', border: 'var(--error)' }\n : isReworkTarget && reworkActive\n ? { bg: 'color-mix(in srgb, var(--warning) 5%, var(--bg-secondary))', border: 'var(--warning)' }\n : null\n\n return (\n <>\n <div\n ref={rowRef}\n onClick={onClick}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n padding: highlight ? '10px 14px' : '7px 14px',\n marginLeft: isApproval ? 28 : 0,\n borderRadius: 6,\n background: highlight?.bg ?? 'transparent',\n border: highlight ? `1px solid ${highlight.border}` : '1px solid transparent',\n cursor: 'pointer',\n position: 'relative',\n overflow: 'hidden',\n transition: 'background 0.1s',\n }}\n onMouseEnter={e => {\n if (!highlight) {(e.currentTarget as HTMLDivElement).style.background = 'var(--bg-hover)'}\n }}\n onMouseLeave={e => {\n if (!highlight) {(e.currentTarget as HTMLDivElement).style.background = 'transparent'}\n }}\n >\n {isRunning && (\n <div style={{\n position: 'absolute', top: 0, left: 0, height: 2, width: '45%',\n background: 'linear-gradient(90deg, transparent, var(--warning), transparent)',\n animation: 'kb-shimmer 1.4s ease-in-out infinite',\n }} />\n )}\n\n <StatusDot status={status} />\n\n <span style={{\n flex: 1,\n fontSize: 14,\n color: isQueued ? 'var(--text-tertiary)' : 'var(--text-primary)',\n fontWeight: isWaiting || isFailed ? 500 : 400,\n fontStyle: isGate ? 'italic' : 'normal',\n }}>\n {isApproval && <span style={{ color: 'var(--info)', marginRight: 5, fontStyle: 'normal', fontSize: 12 }}>⏸</span>}\n {stepRun.name}\n </span>\n\n <div style={{ display: 'flex', alignItems: 'center', gap: 10, flexShrink: 0 }}>\n {isReworkGate && iteration && (\n <span style={{\n fontSize: 11, fontWeight: 600, color: 'var(--warning)',\n background: 'color-mix(in srgb, var(--warning) 12%, transparent)',\n padding: '1px 7px', borderRadius: 8,\n }}>\n ↩ {iteration.current}/{iteration.max}\n </span>\n )}\n {formatDuration(stepRun.durationMs) && (\n <span style={{ fontSize: 12, color: 'var(--text-tertiary)' }}>\n {formatDuration(stepRun.durationMs)}\n </span>\n )}\n {isWaiting ? (\n <span style={{\n fontSize: 12, fontWeight: 600, color: 'var(--info)',\n background: 'color-mix(in srgb, var(--info) 12%, transparent)',\n padding: '2px 9px', borderRadius: 8,\n }}>\n Review\n </span>\n ) : (\n <span style={{\n fontSize: 12,\n color: S_COLOR[status] ?? 'var(--text-tertiary)',\n minWidth: 44, textAlign: 'right',\n }}>\n {S_LABEL[status] ?? status}\n </span>\n )}\n </div>\n </div>\n\n {/* Gate decision inline — shows why it restarted and where */}\n {showBanner && (\n <GateDecisionBanner stepRun={stepRun} targetStepName={targetStepName} />\n )}\n </>\n )\n}\n\n// ─── ReworkBracket ────────────────────────────────────────────────────────────\n\nfunction ReworkBracket({\n gateEl, targetEl, containerEl, isActive,\n}: {\n gateEl: HTMLDivElement | null\n targetEl: HTMLDivElement | null\n containerEl: HTMLDivElement | null\n isActive: boolean\n}) {\n const [pos, setPos] = useState<{ top: number; height: number } | null>(null)\n useEffect(() => {\n if (!gateEl || !targetEl || !containerEl) {return}\n const measure = () => {\n const cr = containerEl.getBoundingClientRect()\n const gr = gateEl.getBoundingClientRect()\n const tr = targetEl.getBoundingClientRect()\n setPos({\n top: tr.top - cr.top + tr.height / 2,\n height: Math.max(0, gr.top - cr.top + gr.height / 2 - (tr.top - cr.top + tr.height / 2)),\n })\n }\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(containerEl)\n ro.observe(gateEl)\n ro.observe(targetEl)\n return () => ro.disconnect()\n }, [gateEl, targetEl, containerEl])\n if (!pos || pos.height < 8) {return null}\n const color = isActive ? 'var(--warning)' : 'var(--border-primary)'\n return (\n <div style={{ position: 'absolute', left: 0, top: pos.top, width: 8, height: pos.height, pointerEvents: 'none' }}>\n <svg width={8} height={pos.height} overflow=\"visible\">\n <line x1={5} y1={0} x2={5} y2={pos.height}\n stroke={color} strokeWidth={isActive ? 2 : 1.5}\n strokeDasharray={isActive ? undefined : '3 3'} />\n <polygon points=\"2,6 5,0 8,6\" fill={color} />\n </svg>\n </div>\n )\n}\n\n// ─── PipelineView ─────────────────────────────────────────────────────────────\n\ninterface PipelineViewProps {\n run: WorkflowRun\n events: WorkflowLogEvent[]\n onApprove?: (step: StepRun) => void\n}\n\nexport function PipelineView({ run, events, onApprove }: PipelineViewProps) {\n const model = usePipelineModel(run)\n const [selected, setSelected] = useState<StepRun | null>(null)\n const containerRef = useRef<HTMLDivElement | null>(null)\n const rowRefs = useRef<Map<string, HTMLDivElement>>(new Map())\n\n const setRef = (id: string) => (el: HTMLDivElement | null) => {\n if (el) {rowRefs.current.set(id, el)}\n else {rowRefs.current.delete(id)}\n }\n\n if (!model.steps.length) {\n return <div style={{ padding: '24px 0', color: 'var(--text-tertiary)', fontSize: 14 }}>No execution data yet.</div>\n }\n\n const { reworkLoop } = model\n const gateStep = reworkLoop ? model.steps[reworkLoop.gateIndex] : null\n const targetStep = reworkLoop ? model.steps[reworkLoop.targetIndex] : null\n const stepEvents = events.filter(e => e.stepId === selected?.id)\n\n return (\n <div ref={containerRef} style={{ position: 'relative', paddingLeft: 10 }}>\n {reworkLoop && gateStep && targetStep && (\n <ReworkBracket\n gateEl={rowRefs.current.get(gateStep.stepRun.id) ?? null}\n targetEl={rowRefs.current.get(targetStep.stepRun.id) ?? null}\n containerEl={containerRef.current}\n isActive={reworkLoop.isActive}\n />\n )}\n\n {model.phases.map((phase, pi) => {\n const color = PHASE_COLOR[phase.label] ?? 'var(--text-tertiary)'\n const doneCount = phase.steps.filter(s => s.stepRun.status === 'success').length\n const isLast = pi === model.phases.length - 1\n\n return (\n <div key={phase.label} style={{ marginBottom: isLast ? 0 : 20 }}>\n {/* Phase label */}\n <div style={{\n display: 'flex', alignItems: 'center', gap: 8,\n padding: '0 4px', marginBottom: 4,\n }}>\n <div style={{ width: 3, height: 12, background: color, borderRadius: 2, flexShrink: 0 }} />\n <span style={{\n fontSize: 11, fontWeight: 700,\n textTransform: 'uppercase', letterSpacing: '0.09em',\n color,\n }}>\n {phase.label}\n </span>\n <span style={{ fontSize: 11, color: 'var(--text-tertiary)', marginLeft: 4 }}>\n {doneCount}/{phase.steps.length}\n </span>\n </div>\n\n {/* Steps */}\n <div style={{\n borderLeft: `2px solid color-mix(in srgb, ${color} 25%, var(--border-primary))`,\n marginLeft: 5,\n paddingLeft: 12,\n paddingTop: 2,\n paddingBottom: 2,\n }}>\n {phase.steps.map(step => {\n const flatIdx = model.steps.indexOf(step)\n const isGateWithLoop = reworkLoop?.gateIndex === flatIdx\n return (\n <StepRow\n key={step.stepRun.id}\n step={step}\n isReworkGate={isGateWithLoop ?? false}\n isReworkTarget={reworkLoop?.targetIndex === flatIdx}\n reworkActive={reworkLoop?.isActive ?? false}\n targetStepName={isGateWithLoop ? targetStep?.stepRun.name : undefined}\n onClick={() => setSelected(step.stepRun)}\n rowRef={setRef(step.stepRun.id)}\n />\n )\n })}\n </div>\n </div>\n )\n })}\n\n <StepDetailDrawer\n step={selected}\n events={stepEvents}\n open={selected !== null}\n onClose={() => setSelected(null)}\n onApprove={\n selected?.status === 'waiting_approval' && onApprove\n ? () => { onApprove(selected); setSelected(null) }\n : undefined\n }\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { UIButton } from '@kb-labs/sdk/studio'\n\ninterface Props {\n data: unknown\n editable?: boolean\n onEdit?: (v: unknown) => void\n}\n\n// ── Styles ───────────────────────────────────────────────────────────────────\n\nconst S = {\n pre: 'background:#f6f8fa;border:1px solid #d0d7de;border-radius:6px;padding:12px;overflow:auto;font-size:12px;line-height:1.5;font-family:monospace;margin:8px 0',\n code: 'background:#f0f0f0;border-radius:3px;padding:1px 4px;font-size:0.9em;font-family:monospace',\n link: 'color:var(--link)',\n h1: 'margin:0 0 12px;font-size:17px;font-weight:700;scroll-margin-top:64px',\n h2: 'margin:16px 0 8px;font-size:15px;font-weight:700;scroll-margin-top:64px',\n h3: 'margin:14px 0 6px;font-size:14px;font-weight:600;scroll-margin-top:64px',\n h4: 'margin:12px 0 4px;font-size:13px;font-weight:600;scroll-margin-top:64px',\n ul: 'margin:6px 0;padding-left:20px',\n ol: 'margin:6px 0;padding-left:20px',\n li: 'margin:2px 0',\n hr: 'border:none;border-top:1px solid var(--border-primary);margin:12px 0',\n p: 'margin:6px 0;line-height:1.6',\n}\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction escapeHtml(s: string): string {\n return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')\n}\n\nfunction slugify(text: string): string {\n return text.toLowerCase().replace(/[^\\w\\s-]/g, '').trim().replace(/\\s+/g, '-')\n}\n\nfunction anchorLink(id: string, text: string): string {\n return `<a href=\"#${id}\" onclick=\"event.preventDefault();document.getElementById('${id}')?.scrollIntoView({behavior:'smooth'})\" style=\"${S.link};cursor:pointer\">${text}</a>`\n}\n\nfunction externalLink(url: string, text: string): string {\n return `<a href=\"${url}\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"${S.link}\">${text}</a>`\n}\n\nfunction heading(level: 1 | 2 | 3 | 4, text: string): string {\n const id = slugify(text)\n const style = S[`h${level}`]\n return `<h${level} id=\"${id}\" style=\"${style}\">${text}</h${level}>`\n}\n\nfunction listItems(block: string, ordered: boolean): string {\n const itemRe = ordered ? /^[ \\t]*\\d+\\. / : /^[ \\t]*[-*+] /\n const items = block.trim().split('\\n')\n .map(line => `<li style=\"${S.li}\">${line.replace(itemRe, '')}</li>`)\n .join('')\n const tag = ordered ? 'ol' : 'ul'\n return `<${tag} style=\"${S[tag]}\">${items}</${tag}>`\n}\n\n// ── Converter ─────────────────────────────────────────────────────────────────\n\nfunction mdToHtml(md: string): string {\n // 1. Stash fenced code blocks (preserve verbatim, skip further processing)\n const codeBlocks: string[] = []\n let html = md.replace(/```[\\w]*\\n?([\\s\\S]*?)```/g, (_, code) => {\n const idx = codeBlocks.length\n codeBlocks.push(`<pre style=\"${S.pre}\">${escapeHtml(code.replace(/\\n$/, ''))}</pre>`)\n return `\\x00CODE${idx}\\x00`\n })\n\n // 2. Escape remaining HTML\n html = escapeHtml(html)\n\n // 3. Inline code\n html = html.replace(/`([^`]+)`/g, (_, c) => `<code style=\"${S.code}\">${c}</code>`)\n\n // 4. Links (decode &amp; back in href, then route anchor vs external)\n html = html.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (_, text, rawHref) => {\n const url = rawHref.replace(/&amp;/g, '&')\n return url.startsWith('#') ? anchorLink(url.slice(1), text) : externalLink(url, text)\n })\n\n // 5. Headings (h4 first to avoid partial matches)\n html = html.replace(/^#### (.+)$/gm, (_, t) => heading(4, t))\n html = html.replace(/^### (.+)$/gm, (_, t) => heading(3, t))\n html = html.replace(/^## (.+)$/gm, (_, t) => heading(2, t))\n html = html.replace(/^# (.+)$/gm, (_, t) => heading(1, t))\n\n // 6. Emphasis\n html = html.replace(/\\*\\*\\*(.+?)\\*\\*\\*/g, '<strong><em>$1</em></strong>')\n html = html.replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>')\n html = html.replace(/\\*(.+?)\\*/g, '<em>$1</em>')\n\n // 7. Lists\n html = html.replace(/((?:^[ \\t]*[-*+] .+\\n?)+)/gm, block => listItems(block, false))\n html = html.replace(/((?:^[ \\t]*\\d+\\. .+\\n?)+)/gm, block => listItems(block, true))\n\n // 8. Horizontal rule\n html = html.replace(/^---$/gm, `<hr style=\"${S.hr}\"/>`)\n\n // 9. Paragraphs (skip blocks that are already block-level HTML or code placeholders)\n html = html.replace(/\\n{2,}/g, '\\n\\n')\n html = html.split('\\n\\n').map(block => {\n const trimmed = block.trim()\n if (!trimmed) {return ''}\n if (/^(\\x00CODE\\d+\\x00|<(h[1-6]|ul|ol|pre|hr|blockquote))/.test(trimmed)) {return trimmed}\n return `<p style=\"${S.p}\">${trimmed.replace(/\\n/g, '<br/>')}</p>`\n }).join('\\n')\n\n // 10. Restore code blocks\n html = html.replace(/\\x00CODE(\\d+)\\x00/g, (_, i) => codeBlocks[Number(i)] ?? '')\n\n return html\n}\n\n// ── Component ─────────────────────────────────────────────────────────────────\n\nexport function MarkdownViewer({ data, editable, onEdit }: Props) {\n const text = typeof data === 'string' ? data : data == null ? '' : JSON.stringify(data, null, 2)\n const [editing, setEditing] = useState(false)\n const [editValue, setEditValue] = useState(text)\n\n if (editing && editable) {\n return (\n <div>\n <textarea\n value={editValue}\n onChange={e => setEditValue(e.target.value)}\n style={{\n width: '100%', minHeight: 200, fontFamily: 'monospace', fontSize: 13,\n padding: 12, border: '1px solid var(--border-primary)', borderRadius: 6,\n background: 'var(--bg-primary)', color: 'var(--text-primary)',\n resize: 'vertical', boxSizing: 'border-box',\n }}\n />\n <div style={{ display: 'flex', gap: 8, marginTop: 8 }}>\n <UIButton size=\"small\" variant=\"primary\" onClick={() => { onEdit?.(editValue); setEditing(false) }}>Save</UIButton>\n <UIButton size=\"small\" variant=\"default\" onClick={() => { setEditValue(text); setEditing(false) }}>Cancel</UIButton>\n </div>\n </div>\n )\n }\n\n return (\n <div style={{ position: 'relative' }}>\n {editable && (\n <UIButton size=\"small\" variant=\"text\" style={{ float: 'right' }} onClick={() => setEditing(true)}>\n Edit\n </UIButton>\n )}\n <div\n style={{ fontSize: 13, lineHeight: 1.6, color: 'var(--text-primary)' }}\n dangerouslySetInnerHTML={{ __html: mdToHtml(text) }}\n />\n </div>\n )\n}\n","\n import API from \"!../../../../../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../../node_modules/.pnpm/css-loader@7.1.4_@rspack+core@1.7.11_@swc+helpers@0.5.15__webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./artifacts.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../../node_modules/.pnpm/css-loader@7.1.4_@rspack+core@1.7.11_@swc+helpers@0.5.15__webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./artifacts.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { UITag } from '@kb-labs/sdk/studio'\nimport styles from './artifacts.module.css'\n\ninterface Issue {\n file?: string\n line?: number\n severity?: string\n message?: string\n problem?: string\n fix?: string\n}\n\nconst SEVERITY_COLOR: Record<string, string> = {\n blocker: 'error',\n high: 'error',\n medium: 'warning',\n low: 'default',\n info: 'processing',\n}\n\nexport function IssuesViewer({ data }: { data: unknown }) {\n const issues = Array.isArray(data) ? (data as Issue[]) : []\n\n if (!issues.length) {\n return <div className={styles.empty}>No issues found.</div>\n }\n\n return (\n <div className={styles.issueList}>\n {issues.map((issue, i) => {\n const severity = issue.severity ?? 'info'\n const color = SEVERITY_COLOR[severity] ?? 'default'\n return (\n <div key={i} className={styles.issueItem}>\n <div className={styles.issueHeader}>\n <UITag color={color}>{severity}</UITag>\n {issue.file && (\n <span className={styles.issueFile}>\n {issue.file}{issue.line ? `:${issue.line}` : ''}\n </span>\n )}\n </div>\n <div className={styles.issueMessage}>\n {issue.message ?? issue.problem ?? JSON.stringify(issue)}\n </div>\n {issue.fix && (\n <div className={styles.issueFix}>Fix: {issue.fix}</div>\n )}\n </div>\n )\n })}\n </div>\n )\n}\n","import { UITable } from '@kb-labs/sdk/studio'\nimport styles from './artifacts.module.css'\n\nexport function TableViewer({ data }: { data: unknown }) {\n const rows = Array.isArray(data) ? data as Record<string, unknown>[] : []\n\n if (!rows.length) {\n return <div className={styles.empty}>No data.</div>\n }\n\n const columns = Object.keys(rows[0] ?? {}).map(key => ({\n key,\n dataIndex: key,\n title: key,\n }))\n\n return <UITable columns={columns} dataSource={rows} size=\"small\" pagination={false} />\n}\n","import { UIDiffViewer } from '@kb-labs/sdk/studio'\n\nexport function DiffViewer({ data }: { data: unknown }) {\n const text = typeof data === 'string' ? data : data == null ? '' : (JSON.stringify(data, null, 2) ?? '')\n if (!text) {return null}\n return <UIDiffViewer diff={text} maxHeight={500} />\n}\n","import styles from './artifacts.module.css'\n\nexport function LogViewer({ data }: { data: unknown }) {\n const text = typeof data === 'string' ? data : data == null ? '' : (JSON.stringify(data, null, 2) ?? '')\n if (!text) {return null}\n return <pre className={styles.logPre}>{text}</pre>\n}\n","export function LinkViewer({ data, label }: { data: unknown; label?: string }) {\n const url = typeof data === 'string' ? data : null\n\n if (!url) {\n return (\n <span style={{ color: 'var(--text-tertiary)', fontSize: 13, padding: 12 }}>—</span>\n )\n }\n\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n padding: '5px 12px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 6,\n fontSize: 13,\n color: 'var(--link)',\n textDecoration: 'none',\n fontWeight: 500,\n }}\n >\n {label ?? url}\n <span style={{ fontSize: 11, opacity: 0.6 }}>↗</span>\n </a>\n )\n}\n","/**\n * Polymorphic artifact viewer.\n * Routes to the appropriate sub-component based on artifact type.\n * Wrapped in an ErrorBoundary so a broken artifact never crashes the page.\n */\n\nimport { Component } from 'react'\nimport type { ReactNode } from 'react'\nimport { UIJsonViewer } from '@kb-labs/sdk/studio'\nimport { MarkdownViewer } from './MarkdownViewer'\nimport { IssuesViewer } from './IssuesViewer'\nimport { TableViewer } from './TableViewer'\nimport { DiffViewer } from './DiffViewer'\nimport { LogViewer } from './LogViewer'\nimport { LinkViewer } from './LinkViewer'\n\nexport interface ArtifactViewerProps {\n type: 'markdown' | 'issues' | 'table' | 'diff' | 'log' | 'json' | 'link'\n data: unknown\n label?: string\n editable?: boolean\n onEdit?: (newValue: unknown) => void\n}\n\nclass ArtifactErrorBoundary extends Component<{ children: ReactNode; label?: string }, { error: Error | null }> {\n override state = { error: null as Error | null };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static getDerivedStateFromError(error: Error): any { return { error }; }\n override render() {\n if (this.state.error) {\n return (\n <span style={{ color: 'var(--text-tertiary)', fontSize: 12, fontStyle: 'italic' }}>\n {this.props.label ?? 'Artifact'}: render error\n </span>\n )\n }\n return this.props.children\n }\n}\n\nfunction ArtifactViewerInner({ type, data, label, editable, onEdit }: ArtifactViewerProps) {\n if (data == null) {return null}\n if (type === 'link') {return <LinkViewer data={data} label={label} />}\n if (type === 'markdown') {return <MarkdownViewer data={data} editable={editable} onEdit={onEdit} />}\n if (type === 'issues') {return <IssuesViewer data={data} />}\n if (type === 'table') {return <TableViewer data={data} />}\n if (type === 'diff') {return <DiffViewer data={data} />}\n if (type === 'log') {return <LogViewer data={data} />}\n if (type === 'json') {return <UIJsonViewer data={data} />}\n return null\n}\n\nexport function ArtifactViewer(props: ArtifactViewerProps) {\n return (\n <ArtifactErrorBoundary label={props.label}>\n <ArtifactViewerInner {...props} />\n </ArtifactErrorBoundary>\n )\n}\n","/**\n * Dashboard view for a single workflow run.\n * Shows: PhaseProgressBar → Hero block (current step) → Completed steps → Future steps\n */\n\nimport * as React from 'react';\nimport {\n UITypographyText,\n UISpace,\n UIIcon,\n UITag,\n} from '@kb-labs/sdk/studio';\nimport type { WorkflowRun, StepRun, StepArtifact } from '@kb-labs/workflow-contracts';\nimport { PhaseProgressBar, type PhaseStatus } from '../shared/PhaseProgressBar';\nimport { usePipelineModel } from '../../hooks/use-pipeline-graph';\nimport { StatusDot } from '../pipeline/shared';\nimport { ArtifactViewer } from '../artifacts/ArtifactViewer';\n\n// Runtime fields not yet in the schema — accessed via type assertion\ninterface StepRunRuntime extends StepRun {\n progress?: number;\n progressMessage?: string;\n}\n\nfunction getPhaseStatuses(run: WorkflowRun): PhaseStatus[] {\n const model = usePipelineModel(run);\n return 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' : anyActive ? 'active' : 'pending',\n };\n });\n}\n\nfunction flatSteps(run: WorkflowRun): StepRun[] {\n return run.jobs.flatMap((j) => j.steps);\n}\n\nfunction formatDurationMs(ms: number): string {\n if (ms < 1000) { return `${ms}ms`; }\n const s = ms / 1000;\n if (s < 60) { return `${s.toFixed(1)}s`; }\n const m = Math.floor(s / 60);\n const rem = Math.floor(s % 60);\n return `${m}m ${rem}s`;\n}\n\ninterface HeroBlockProps {\n step: StepRun;\n onApprove?: () => void;\n}\n\nfunction HeroBlock({ step, onApprove }: HeroBlockProps) {\n const rt = step as StepRunRuntime;\n const isWaiting = step.status === 'waiting_approval';\n const isRunning = step.status === 'running';\n // artifacts is Record<name, StepArtifact> in contracts\n const artifactsMap = (step.spec?.artifacts) as Record<string, StepArtifact> | undefined;\n const artifacts = artifactsMap ? Object.values(artifactsMap) : [];\n\n return (\n <div style={{\n padding: '20px 24px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 10,\n marginBottom: 'var(--spacing-section)',\n }}>\n {/* Header */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 10, marginBottom: 10 }}>\n <StatusDot status={step.status} />\n <UITypographyText style={{ fontSize: 15, fontWeight: 600, color: 'var(--text-primary)' }}>\n {step.spec?.summary ?? step.name}\n </UITypographyText>\n {step.durationMs && (\n <UITypographyText className=\"typo-caption text-tertiary\" style={{ marginLeft: 'auto' }}>\n {formatDurationMs(step.durationMs)}\n </UITypographyText>\n )}\n </div>\n\n {/* Progress message */}\n {rt.progressMessage && (\n <UITypographyText className=\"typo-description text-secondary\" style={{ marginBottom: 10, display: 'block' }}>\n {rt.progressMessage}\n </UITypographyText>\n )}\n\n {/* Progress bar */}\n {rt.progress != null && (\n <div style={{ marginBottom: 12 }}>\n <div style={{\n height: 6,\n background: 'var(--border-primary)',\n borderRadius: 3,\n overflow: 'hidden',\n }}>\n <div style={{\n height: '100%',\n width: `${rt.progress}%`,\n background: isWaiting ? 'var(--warning)' : 'var(--link)',\n borderRadius: 3,\n transition: 'width 0.3s ease',\n }} />\n </div>\n <UITypographyText className=\"typo-caption text-tertiary\" style={{ marginTop: 4, display: 'block' }}>\n {rt.progress}%\n </UITypographyText>\n </div>\n )}\n\n {/* Artifacts */}\n {artifacts.length > 0 && step.outputs && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n {artifacts.map((artifact, i) => {\n // Resolve dot-path from outputs\n const data = artifact.source.split('.').reduce<unknown>(\n (acc, key) => (acc && typeof acc === 'object' ? (acc as Record<string, unknown>)[key] : undefined),\n step,\n );\n return (\n <div key={i}>\n <UITypographyText className=\"typo-label text-secondary\" style={{ display: 'block', marginBottom: 6 }}>\n {artifact.label}\n </UITypographyText>\n <ArtifactViewer type={artifact.type} data={data} label={artifact.label} />\n </div>\n );\n })}\n </div>\n )}\n\n {/* Approval CTA */}\n {isWaiting && onApprove && (\n <div style={{ marginTop: 14 }}>\n <button\n onClick={onApprove}\n style={{\n padding: '6px 16px',\n background: 'var(--link)',\n color: 'var(--text-inverse)',\n border: 'none',\n borderRadius: 6,\n fontWeight: 600,\n cursor: 'pointer',\n fontSize: 13,\n }}\n >\n Review &amp; Decide\n </button>\n </div>\n )}\n\n {/* Running indicator */}\n {isRunning && !rt.progressMessage && (\n <UISpace className=\"gap-tight\" style={{ marginTop: 6 }}>\n <UIIcon name=\"LoadingOutlined\" spin style={{ color: 'var(--link)', fontSize: 13 }} />\n <UITypographyText className=\"typo-caption text-secondary\">Running...</UITypographyText>\n </UISpace>\n )}\n </div>\n );\n}\n\ninterface DashboardViewProps {\n run: WorkflowRun;\n onApprove?: (step: StepRun) => void;\n}\n\nconst TERMINAL = ['success', 'failed', 'cancelled', 'skipped'];\n\nfunction StatCard({ label, value, color }: { label: string; value: string; color?: string }) {\n return (\n <div style={{\n flex: 1,\n padding: '16px 20px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 8,\n minWidth: 0,\n }}>\n <div style={{ fontSize: 22, fontWeight: 700, color: color ?? 'var(--text-primary)', lineHeight: 1.2 }}>\n {value}\n </div>\n <div style={{ fontSize: 12, color: 'var(--text-tertiary)', marginTop: 4 }}>\n {label}\n </div>\n </div>\n );\n}\n\nexport function DashboardView({ run, onApprove }: DashboardViewProps) {\n const model = usePipelineModel(run);\n const phases = 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 { label: phase.label, status: allDone ? 'done' : anyActive ? 'active' : 'pending' } as PhaseStatus;\n });\n\n const allSteps = flatSteps(run);\n const isTerminal = TERMINAL.includes(run.status);\n\n const currentStep = !isTerminal\n ? allSteps.find((s) => s.status === 'running' || s.status === 'waiting_approval')\n : null;\n const completedSteps = allSteps.filter((s) => s.status === 'success');\n const failedSteps = allSteps.filter((s) => s.status === 'failed');\n const futureSteps = allSteps.filter((s) => s.status === 'queued' || (s.status as string) === 'pending');\n\n // Total duration\n const totalMs = run.startedAt && run.finishedAt\n ? new Date(run.finishedAt).getTime() - new Date(run.startedAt).getTime()\n : null;\n\n // Steps grouped by phase for terminal view\n const stepsByPhase = model.phases.map((phase) => ({\n label: phase.label,\n steps: phase.steps.map((s) => s.stepRun),\n }));\n const ungroupedSteps = model.phases.length === 0 ? allSteps : [];\n\n // Summary artifacts — any completed/failed step with showInSummary: true artifacts\n // Shown both during active runs (for completed steps) and after terminal\n const summaryArtifacts: { step: StepRun; artifact: StepArtifact; data: unknown }[] = [];\n for (const step of allSteps) {\n if (step.status !== 'success' && step.status !== 'failed') {continue;}\n const artifactsMap = (step.spec?.artifacts) as Record<string, StepArtifact> | undefined;\n if (!artifactsMap) {continue;}\n for (const artifact of Object.values(artifactsMap)) {\n if (!artifact.showInSummary) {continue;}\n const data = artifact.source.split('.').reduce<unknown>(\n (acc, key) => (acc && typeof acc === 'object' ? (acc as Record<string, unknown>)[key] : undefined),\n step,\n );\n summaryArtifacts.push({ step, artifact, data });\n }\n }\n\n return (\n <div>\n {/* Phase bar */}\n {phases.length > 0 && (\n <div style={{\n padding: '12px 16px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 8,\n marginBottom: 16,\n }}>\n <PhaseProgressBar phases={phases} />\n </div>\n )}\n\n {/* ── ACTIVE RUN: hero block ── */}\n {currentStep && (\n <HeroBlock\n step={currentStep}\n onApprove={onApprove ? () => onApprove(currentStep) : undefined}\n />\n )}\n\n {/* ── Summary artifacts (showInSummary: true) — shown as steps complete ── */}\n {summaryArtifacts.length > 0 && (() => {\n const links = summaryArtifacts.filter(a => a.artifact.type === 'link');\n const rich = summaryArtifacts.filter(a => a.artifact.type !== 'link');\n return (\n <div style={{ marginBottom: 16, display: 'flex', flexDirection: 'column', gap: 12 }}>\n {/* link artifacts — inline row */}\n {links.length > 0 && (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 8 }}>\n {links.map(({ artifact, data }, i) => (\n <ArtifactViewer key={i} type=\"link\" data={data} label={artifact.label} />\n ))}\n </div>\n )}\n {/* rich artifacts — full-width blocks */}\n {rich.length > 0 && (\n <div style={{\n padding: '16px 20px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 10,\n display: 'flex', flexDirection: 'column', gap: 16,\n }}>\n {rich.map(({ artifact, data }, i) => (\n <div key={i}>\n <UITypographyText className=\"typo-label text-secondary\" style={{ display: 'block', marginBottom: 6 }}>\n {artifact.label}\n </UITypographyText>\n <ArtifactViewer type={artifact.type} data={data} label={artifact.label} />\n </div>\n ))}\n </div>\n )}\n </div>\n );\n })()}\n\n {/* ── TERMINAL RUN: summary stats ── */}\n {isTerminal && (\n <div style={{ display: 'flex', gap: 12, marginBottom: 20, flexWrap: 'wrap' }}>\n <StatCard label=\"Total steps\" value={String(allSteps.length)} />\n <StatCard label=\"Completed\" value={String(completedSteps.length)} color=\"var(--success)\" />\n {failedSteps.length > 0 && (\n <StatCard label=\"Failed\" value={String(failedSteps.length)} color=\"var(--error)\" />\n )}\n {totalMs != null && (\n <StatCard label=\"Duration\" value={formatDurationMs(totalMs)} />\n )}\n </div>\n )}\n\n {/* ── TERMINAL RUN: steps by phase ── */}\n {isTerminal && stepsByPhase.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 20 }}>\n {stepsByPhase.map((phase) => (\n <div key={phase.label}>\n <UITypographyText className=\"typo-label text-secondary\" style={{ display: 'block', marginBottom: 8 }}>\n {phase.label}\n </UITypographyText>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {phase.steps.map((step) => (\n <div key={step.id} style={{\n display: 'flex', alignItems: 'center', gap: 8,\n padding: '7px 12px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 6,\n }}>\n <UIIcon\n name={step.status === 'success' ? 'CheckCircleOutlined' : step.status === 'failed' ? 'CloseCircleOutlined' : 'MinusCircleOutlined'}\n style={{ fontSize: 13, color: step.status === 'success' ? 'var(--success)' : step.status === 'failed' ? 'var(--error)' : 'var(--text-tertiary)', flexShrink: 0 }}\n />\n <UITypographyText className=\"typo-body\" style={{ flex: 1, minWidth: 0 }}>\n {step.spec?.summary ?? step.name}\n </UITypographyText>\n {step.durationMs && (\n <UITypographyText className=\"typo-caption text-tertiary\" style={{ flexShrink: 0 }}>\n {formatDurationMs(step.durationMs)}\n </UITypographyText>\n )}\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* ── TERMINAL RUN: no phases — flat list ── */}\n {isTerminal && ungroupedSteps.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {ungroupedSteps.map((step) => (\n <div key={step.id} style={{\n display: 'flex', alignItems: 'center', gap: 8,\n padding: '7px 12px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 6,\n }}>\n <UIIcon\n name={step.status === 'success' ? 'CheckCircleOutlined' : step.status === 'failed' ? 'CloseCircleOutlined' : 'MinusCircleOutlined'}\n style={{ fontSize: 13, color: step.status === 'success' ? 'var(--success)' : step.status === 'failed' ? 'var(--error)' : 'var(--text-tertiary)', flexShrink: 0 }}\n />\n <UITypographyText className=\"typo-body\" style={{ flex: 1 }}>\n {step.spec?.summary ?? step.name}\n </UITypographyText>\n {step.durationMs && (\n <UITypographyText className=\"typo-caption text-tertiary\">\n {formatDurationMs(step.durationMs)}\n </UITypographyText>\n )}\n </div>\n ))}\n </div>\n )}\n\n {/* ── ACTIVE RUN: completed + upcoming ── */}\n {!isTerminal && completedSteps.length > 0 && (\n <div style={{ marginBottom: 16 }}>\n <UITypographyText className=\"typo-label text-secondary\" style={{ display: 'block', marginBottom: 8 }}>\n Completed ({completedSteps.length})\n </UITypographyText>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {completedSteps.map((step) => (\n <div key={step.id} style={{\n display: 'flex', alignItems: 'center', gap: 8,\n padding: '7px 12px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 6,\n }}>\n <UIIcon name=\"CheckCircleOutlined\" style={{ color: 'var(--success)', fontSize: 13 }} />\n <UITypographyText className=\"typo-body\">{step.spec?.summary ?? step.name}</UITypographyText>\n {step.durationMs && (\n <UITypographyText className=\"typo-caption text-tertiary\" style={{ marginLeft: 'auto' }}>\n {formatDurationMs(step.durationMs)}\n </UITypographyText>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {!isTerminal && futureSteps.length > 0 && (\n <div>\n <UITypographyText className=\"typo-label text-secondary\" style={{ display: 'block', marginBottom: 8 }}>\n Upcoming ({futureSteps.length})\n </UITypographyText>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {futureSteps.map((step) => (\n <div key={step.id} style={{\n display: 'flex', alignItems: 'center', gap: 8,\n padding: '7px 12px',\n border: '1px dashed var(--border-primary)',\n borderRadius: 6,\n opacity: 0.5,\n }}>\n <UIIcon name=\"ClockCircleOutlined\" style={{ color: 'var(--text-tertiary)', fontSize: 13 }} />\n <UITypographyText className=\"typo-body text-secondary\">{step.spec?.summary ?? step.name}</UITypographyText>\n {step.spec?.phase && (\n <UITag style={{ marginLeft: 'auto', opacity: 0.7 }}>{step.spec.phase}</UITag>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {allSteps.length === 0 && (\n <div style={{ textAlign: 'center', padding: '40px 0' }}>\n <UITypographyText className=\"typo-description text-secondary\">No execution data</UITypographyText>\n </div>\n )}\n </div>\n );\n}\n","/**\n * @module @kb-labs/studio-app/modules/workflows/pages/workflow-run-page\n * Workflow run detail page with live SSE logs, jobs/steps accordion, and approval modal\n */\n\nimport { UIPage, UIPageHeader, UIPageSection } from '@kb-labs/sdk/studio'\nimport { useMemo, useState, useEffect, useRef } from 'react'\nimport { useParams, Link } from 'react-router-dom'\nimport {\n UIButton, UITypographyText,\n UITitle, UIAlert, UIList, UIListItem, UIAccordion, UITabs, UIJsonViewer,\n} from '@kb-labs/sdk/studio'\nimport type { UIAccordionItem, UITabItem } from '@kb-labs/sdk/studio'\nimport { useData, useMutateData, useSSE } from '@kb-labs/sdk/studio'\nimport type { WorkflowRun, StepRun } from '@kb-labs/workflow-contracts'\nimport type { WorkflowLogEvent } from '@kb-labs/workflow-contracts/rest-api'\nimport { WorkflowStatusBadge } from '../components/shared/WorkflowStatusBadge'\nimport { ApprovalModal } from '../components/ApprovalModal'\nimport { PipelineView } from '../components/pipeline/PipelineView'\nimport { DashboardView } from '../components/dashboard/DashboardView'\nimport { ViewModeSelector } from '../components/shared/ViewModeSelector'\n\nconst Text = UITypographyText\nconst Title = UITitle\n\n// --- GitHub Actions style execution log ---\n\nconst STATUS_ICON: Record<string, string> = {\n 'queued': '\\u25CB',\n 'running': '\\u25C9',\n 'success': '\\u2713',\n 'failed': '\\u2717',\n 'cancelled': '\\u2298',\n 'skipped': '\\u2014',\n 'waiting_approval': '\\u23F8',\n}\n\nconst STATUS_COLOR: Record<string, string> = {\n 'queued': '#8b949e',\n 'running': '#d29922',\n 'success': '#3fb950',\n 'failed': '#f85149',\n 'cancelled': '#8b949e',\n 'skipped': '#8b949e',\n 'waiting_approval': '#d29922',\n}\n\nfunction eventTypeToStatus(type: string): string {\n if (type.endsWith('.started')) {return 'running'}\n if (type.endsWith('.succeeded') || type.endsWith('.finished')) {return 'success'}\n if (type.endsWith('.failed')) {return 'failed'}\n if (type.endsWith('.cancelled')) {return 'cancelled'}\n if (type.endsWith('.skipped')) {return 'skipped'}\n if (type.endsWith('.waitingApproval')) {return 'waiting_approval'}\n if (type.endsWith('.queued')) {return 'queued'}\n return 'running'\n}\n\nfunction formatDurationMs(ms: number): string {\n if (ms < 1000) {return `${ms}ms`}\n const s = ms / 1000\n if (s < 60) {return `${s.toFixed(1)}s`}\n const m = Math.floor(s / 60)\n const rem = Math.floor(s % 60)\n return `${m}m ${rem}s`\n}\n\nfunction formatTime(ts?: string): string {\n if (!ts) {return ''}\n try {\n return new Date(ts).toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' })\n } catch { return '' }\n}\n\ninterface LogLine {\n time: string\n text: string\n stream?: 'stdout' | 'stderr'\n}\n\n// Strip ANSI escape codes from text\n \nconst ANSI_RE = /\\x1b\\[[0-9;]*[A-Za-z]|\\x1b\\].*?\\x07/g\nfunction stripAnsi(s: string): string { return s.replace(ANSI_RE, '') }\n\nfunction extractLogLines(ev: WorkflowLogEvent): LogLine[] {\n const time = formatTime(ev.timestamp)\n const payload = ev.payload as Record<string, unknown> | undefined\n if (!payload) {return []}\n\n // Live log.appended events (real-time streaming)\n if (ev.type === 'log.appended') {\n const msg = typeof payload.message === 'string' ? stripAnsi(payload.message) : ''\n if (!msg) {return []}\n const stream = (payload.stream as 'stdout' | 'stderr') ?? 'stdout'\n return [{ time, text: msg, stream }]\n }\n\n if (payload.outputs && typeof payload.outputs === 'object') {\n const outputs = payload.outputs as Record<string, unknown>\n if (typeof outputs.stdout === 'string' && outputs.stdout.trim()) {\n return stripAnsi(outputs.stdout).trim().split('\\n').map(line => ({ time, text: line, stream: 'stdout' as const }))\n }\n }\n if (typeof payload.stdout === 'string' && payload.stdout.trim()) {\n return stripAnsi(payload.stdout).trim().split('\\n').map(line => ({ time, text: line, stream: 'stdout' as const }))\n }\n if (typeof payload.error === 'string') {\n return [{ time, text: payload.error, stream: 'stderr' }]\n }\n if (typeof payload.message === 'string') {\n return [{ time, text: payload.message }]\n }\n if (typeof payload.line === 'string') {\n return [{ time, text: payload.line }]\n }\n if (typeof payload.text === 'string') {\n return [{ time, text: payload.text }]\n }\n const keys = Object.keys(payload).filter(k => !['status', 'jobName', 'durationMs', 'attempt'].includes(k))\n if (keys.length === 0) {return []}\n return [{ time, text: JSON.stringify(payload, null, 2) }]\n}\n\ninterface StepLogGroup {\n stepId: string\n stepName: string\n status: string\n command?: string\n events: WorkflowLogEvent[]\n outputs?: Record<string, unknown>\n error?: Record<string, unknown> | null\n spec?: { name: string; uses?: string; with?: Record<string, unknown> }\n startedAt?: string\n finishedAt?: string\n durationMs?: number\n}\n\ninterface JobLogGroup {\n jobId: string\n jobName: string\n status: string\n steps: StepLogGroup[]\n events: WorkflowLogEvent[]\n startedAt?: string\n finishedAt?: string\n durationMs?: number\n error?: Record<string, unknown> | null\n}\n\nfunction buildLogGroups(events: WorkflowLogEvent[], run: WorkflowRun): JobLogGroup[] {\n const jobMap = new Map<string, JobLogGroup>()\n\n for (const job of run.jobs) {\n const stepGroups: StepLogGroup[] = job.steps.map(s => ({\n stepId: s.id,\n stepName: s.name,\n status: s.status,\n command: (s as any).command,\n events: [],\n outputs: s.outputs ?? undefined,\n error: s.error,\n spec: s.spec,\n startedAt: s.startedAt,\n finishedAt: s.finishedAt,\n durationMs: s.durationMs,\n }))\n jobMap.set(job.id, {\n jobId: job.id,\n jobName: job.jobName,\n status: job.status,\n steps: stepGroups,\n events: [],\n startedAt: job.startedAt,\n finishedAt: job.finishedAt,\n durationMs: job.durationMs,\n error: job.error,\n })\n }\n\n for (const ev of events) {\n if (!ev.jobId) {continue}\n let group = jobMap.get(ev.jobId)\n if (!group) {\n group = {\n jobId: ev.jobId,\n jobName: ev.jobId,\n status: eventTypeToStatus(ev.type),\n steps: [],\n events: [],\n }\n jobMap.set(ev.jobId, group)\n }\n\n if (ev.type.startsWith('job.')) {\n group.status = eventTypeToStatus(ev.type)\n if (ev.payload?.jobName) {group.jobName = String(ev.payload.jobName)}\n if (ev.payload?.durationMs) {group.durationMs = Number(ev.payload.durationMs)}\n }\n\n if (ev.stepId) {\n let step = group.steps.find(s => s.stepId === ev.stepId)\n if (!step) {\n step = { stepId: ev.stepId, stepName: ev.stepId, status: 'queued', events: [] }\n group.steps.push(step)\n }\n step.events.push(ev)\n if (ev.type.startsWith('step.')) {\n step.status = eventTypeToStatus(ev.type)\n }\n } else {\n group.events.push(ev)\n }\n }\n\n return Array.from(jobMap.values())\n}\n\nconst LOG_OUTPUT_KEYS = new Set(['stdout', 'stderr', 'exitCode', 'ok'])\n\nfunction StepPanel({ step, onApprove }: { step: StepLogGroup; onApprove?: () => void }) {\n const sseLines: LogLine[] = step.events.flatMap(extractLogLines)\n const logRef = useRef<HTMLPreElement>(null)\n\n // Auto-scroll to bottom when new lines arrive\n useEffect(() => {\n const el = logRef.current\n if (!el) {return}\n const isNearBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 80\n if (isNearBottom) {\n el.scrollTop = el.scrollHeight\n }\n }, [sseLines.length])\n\n const pollingLines: LogLine[] = useMemo(() => {\n if (sseLines.length > 0) {return []}\n const lines: LogLine[] = []\n if (step.outputs) {\n const stdout = step.outputs.stdout\n const stderr = step.outputs.stderr\n if (typeof stdout === 'string' && stdout.trim()) {\n for (const line of stdout.trim().split('\\n')) {\n lines.push({ time: '', text: line })\n }\n }\n if (typeof stderr === 'string' && stderr.trim()) {\n for (const line of stderr.trim().split('\\n')) {\n lines.push({ time: '', text: line })\n }\n }\n // If no stdout/stderr but has structured data — show compact summary\n if (lines.length === 0) {\n const dataKeys = Object.keys(step.outputs).filter(k => !LOG_OUTPUT_KEYS.has(k))\n if (dataKeys.length > 0) {\n lines.push({ time: '', text: `Completed with output: { ${dataKeys.join(', ')} }` })\n }\n }\n }\n if (step.error) {\n const msg = (step.error as Record<string, unknown>).message\n if (typeof msg === 'string') {\n lines.push({ time: '', text: msg })\n }\n }\n return lines\n }, [step.outputs, step.error, sseLines.length])\n\n const lines = sseLines.length > 0 ? sseLines : pollingLines\n const isWaiting = step.status === 'waiting_approval'\n\n const dataOutputs = useMemo(() => {\n if (!step.outputs) {return null}\n const filtered: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(step.outputs)) {\n if (!LOG_OUTPUT_KEYS.has(k)) {filtered[k] = v}\n }\n return Object.keys(filtered).length > 0 ? filtered : null\n }, [step.outputs])\n\n const hasData = dataOutputs !== null\n const hasInputs = step.spec?.with != null && Object.keys(step.spec.with).length > 0\n const hasError = step.error != null\n const hasTabs = hasData || hasInputs || hasError\n\n const logContent = (\n <div style={{ fontFamily: 'monospace', fontSize: 13 }}>\n {step.command && (\n <div style={{ padding: '4px 12px', color: '#8b949e', fontSize: 12 }}>\n $ {step.command}\n </div>\n )}\n {lines.length > 0 ? (\n <pre ref={logRef} style={{\n margin: 0,\n padding: '8px 12px',\n background: '#0d1117',\n color: '#c9d1d9',\n borderRadius: 4,\n overflow: 'auto',\n maxHeight: 400,\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n lineHeight: 1.6,\n }}>\n {lines.map((l, i) => (\n <span key={i}>\n {l.time && <span style={{ color: '#484f58', userSelect: 'none', marginRight: 12 }}>{l.time}</span>}\n <span style={l.stream === 'stderr' ? { color: '#f85149' } : undefined}>{l.text}</span>\n {'\\n'}\n </span>\n ))}\n </pre>\n ) : (\n <Text type=\"secondary\" style={{ fontSize: 12, padding: '4px 12px', display: 'block' }}>\n {step.status === 'running' ? 'Waiting for output...' :\n step.status === 'queued' ? 'Queued' :\n isWaiting ? 'Waiting for approval' :\n 'No output'}\n </Text>\n )}\n {isWaiting && onApprove && (\n <div style={{ padding: '8px 12px' }}>\n <UIButton size=\"small\" variant=\"primary\" onClick={onApprove}>\n Review &amp; Decide\n </UIButton>\n </div>\n )}\n </div>\n )\n\n if (!hasTabs) {return logContent}\n\n const tabItems: UITabItem[] = [\n { key: 'log', label: 'Log', children: logContent },\n ]\n if (hasData) {\n tabItems.push({ key: 'data', label: 'Data', children: <UIJsonViewer data={dataOutputs} /> })\n }\n if (hasInputs) {\n tabItems.push({ key: 'inputs', label: 'Inputs', children: <UIJsonViewer data={step.spec!.with} /> })\n }\n if (hasError) {\n tabItems.push({ key: 'error', label: 'Error', children: <UIJsonViewer data={step.error} /> })\n }\n\n return <UITabs items={tabItems} size=\"small\" defaultActiveKey=\"log\" />\n}\n\ninterface JobStepLogProps {\n events: WorkflowLogEvent[]\n run: WorkflowRun\n onApprove?: (step: StepRun) => void\n}\n\nfunction JobStepLog({ events, run, onApprove }: JobStepLogProps) {\n const groups = useMemo(() => buildLogGroups(events, run), [events, run])\n\n const stepRunMap = useMemo(() => {\n const map = new Map<string, StepRun>()\n for (const job of run.jobs) {\n for (const step of job.steps) {\n map.set(step.id, step)\n }\n }\n return map\n }, [run])\n\n if (groups.length === 0) {\n return <Text type=\"secondary\">No execution data yet.</Text>\n }\n\n const activeJobKeys = groups\n .filter(g => g.status === 'running' || g.status === 'failed' || g.status === 'waiting_approval')\n .map(g => g.jobId)\n const defaultJobKeys = activeJobKeys.length > 0 ? activeJobKeys : groups.map(g => g.jobId)\n\n const jobItems: UIAccordionItem[] = groups.map(group => {\n const icon = STATUS_ICON[group.status] ?? '?'\n const color = STATUS_COLOR[group.status] ?? '#8b949e'\n const duration = group.durationMs ? formatDurationMs(group.durationMs) : null\n\n const activeStepKeys = group.steps\n .filter(s => s.status === 'running' || s.status === 'failed' || s.status === 'waiting_approval')\n .map(s => s.stepId)\n const defaultStepKeys = activeStepKeys.length > 0\n ? activeStepKeys\n : group.steps.filter(s => s.status !== 'queued').map(s => s.stepId)\n\n const stepItems: UIAccordionItem[] = group.steps.map(step => {\n const sIcon = STATUS_ICON[step.status] ?? '?'\n const sColor = STATUS_COLOR[step.status] ?? '#8b949e'\n const sDuration = step.durationMs ? formatDurationMs(step.durationMs) : null\n return {\n key: step.stepId,\n label: step.stepName,\n extra: (\n <span style={{ display: 'flex', alignItems: 'center', gap: 8, fontSize: 12 }}>\n {sDuration && <span style={{ color: '#8b949e' }}>{sDuration}</span>}\n <span style={{ color: sColor, fontWeight: 600, fontSize: 14 }}>{sIcon}</span>\n </span>\n ),\n children: (\n <StepPanel\n step={step}\n onApprove={\n step.status === 'waiting_approval' && onApprove\n ? () => {\n const sr = stepRunMap.get(step.stepId)\n if (sr) {onApprove(sr)}\n }\n : undefined\n }\n />\n ),\n }\n })\n\n return {\n key: group.jobId,\n label: group.jobName,\n extra: (\n <span style={{ display: 'flex', alignItems: 'center', gap: 8, fontSize: 12 }}>\n {duration && <span style={{ color: '#8b949e' }}>{duration}</span>}\n <span style={{ color, fontWeight: 600, fontSize: 14 }}>{icon}</span>\n </span>\n ),\n children: (\n <>\n {group.error && group.status === 'failed' && (\n <UIAlert\n variant=\"error\"\n message=\"Job failed\"\n description={\n typeof group.error.message === 'string'\n ? group.error.message\n : JSON.stringify(group.error, null, 2)\n }\n showIcon\n style={{ marginBottom: 8 }}\n />\n )}\n {stepItems.length > 0 ? (\n <UIAccordion\n items={stepItems}\n defaultActiveKey={defaultStepKeys}\n size=\"small\"\n ghost\n style={{ background: 'transparent' }}\n />\n ) : (\n <Text type=\"secondary\" style={{ fontSize: 12 }}>No steps.</Text>\n )}\n </>\n ),\n }\n })\n\n return (\n <UIAccordion\n items={jobItems}\n defaultActiveKey={defaultJobKeys}\n size=\"small\"\n style={{ background: 'var(--bg-secondary, #f6f8fa)' }}\n />\n )\n}\n\nexport default function WorkflowRunDetail() {\n const params = useParams<{ runId: string }>()\n const runId = params.runId ?? null\n const { data: runData, isLoading, error, refetch } = useData<{ run: WorkflowRun }>(\n runId ? `/exec/api/v1/runs/${runId}` : '/exec/api/v1/runs/__none__',\n { enabled: !!runId, pollingMs: 3000 },\n )\n const run = runData?.run ?? (runData as unknown as WorkflowRun | undefined)\n const cancelMutation = useMutateData<void, void>(`/exec/api/v1/runs/${runId ?? '__none__'}/cancel`)\n const resolveApproval = useMutateData<\n { runId: string; jobId: string; stepId: string; action: string; comment?: string },\n unknown\n >(`/exec/api/v1/runs/${runId ?? '__none__'}/approvals/resolve`)\n const isRunActive = run != null && !['success', 'failed', 'cancelled', 'skipped'].includes(run.status)\n\n const { events, error: logError, isConnected } = useSSE<WorkflowLogEvent>(\n isRunActive && runId ? `/exec/api/v1/runs/${runId}/events` : null,\n { params: { follow: 1 }, reconnect: true },\n )\n\n const [approvalStep, setApprovalStep] = useState<StepRun | null>(null)\n const [viewMode, setViewMode] = useState<'dashboard' | 'pipeline' | 'engineering'>('dashboard')\n\n const VIEW_MODES = {\n dashboard: { label: 'Dashboard' },\n pipeline: { label: 'Pipeline' },\n engineering: { label: 'Engineering' },\n } as const\n\n useEffect(() => {\n if (logError && isRunActive) {\n void refetch()\n }\n }, [logError, isRunActive, refetch])\n\n const isTerminal = run != null && !isRunActive\n\n const hasPendingApprovals = run?.jobs.some(j =>\n j.steps.some(s => (s.status as string) === 'waiting_approval')\n )\n\n const handleApprovalResolve = async (action: 'approve' | 'reject', comment?: string) => {\n if (!approvalStep || !runId) {return}\n const job = run?.jobs.find(j => j.steps.some(s => s.id === approvalStep.id))\n if (!job) {return}\n await resolveApproval.mutateAsync({\n runId,\n jobId: job.id,\n stepId: approvalStep.id,\n action,\n comment,\n })\n setApprovalStep(null)\n void refetch()\n }\n\n const shortRunId = runId ? `${runId.slice(0, 12)}...` : ''\n\n return (\n <UIPage>\n <UIPageHeader\n title={run?.name ?? `Workflow Run ${shortRunId}`}\n description={run ? `Run ${shortRunId}` : 'Detailed status of the workflow execution'}\n breadcrumbs={[\n { title: 'Home', href: '/' },\n { title: 'Workflows', href: '/workflows' },\n { title: 'Runs', href: '/p/workflows/runs' },\n { title: shortRunId },\n ]}\n actions={\n <div style={{ display: 'flex', gap: 8 }}>\n <UIButton onClick={() => refetch()} disabled={isLoading}>\n Refresh\n </UIButton>\n {run && !isTerminal && (\n <UIButton\n danger\n loading={cancelMutation.isLoading}\n onClick={() => runId && cancelMutation.mutate()}\n >\n Cancel Run\n </UIButton>\n )}\n </div>\n }\n />\n\n {error && <UIAlert variant=\"error\" message=\"Failed to load workflow run\" description={String(error)} closable />}\n\n {hasPendingApprovals && (\n <UIAlert\n variant=\"warning\"\n message=\"Waiting for your approval\"\n description=\"One or more steps require your decision. Expand the step below to review.\"\n showIcon\n style={{ marginBottom: 16 }}\n />\n )}\n\n {isLoading && <UIPageSection><Text>Loading workflow run...</Text></UIPageSection>}\n {!isLoading && !run && !error && <UIPageSection><Text>Workflow run not found.</Text></UIPageSection>}\n {run && (\n <UIPageSection>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 16,\n padding: '12px 16px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 8,\n flexWrap: 'wrap',\n }}>\n <WorkflowStatusBadge status={run.status} />\n <Link\n to={`/p/workflows/definitions/${encodeURIComponent(run.name)}`}\n style={{ color: 'var(--link)', fontWeight: 500, fontSize: 14 }}\n >\n {run.name}\n </Link>\n <span style={{ color: 'var(--text-tertiary)', fontSize: 13 }}>\n v{run.version}\n </span>\n <span style={{ color: 'var(--text-tertiary)', fontSize: 13 }}>\n by {run.trigger.actor ?? 'unknown'}\n </span>\n {run.startedAt && (\n <span style={{ color: 'var(--text-tertiary)', fontSize: 13, marginLeft: 'auto' }}>\n {new Date(run.startedAt).toLocaleString()}\n </span>\n )}\n {run.result?.summary && (\n <span style={{\n fontSize: 13,\n color: 'var(--text-secondary)',\n borderTop: '1px solid var(--border-primary)',\n paddingTop: 8,\n width: '100%',\n }}>\n {run.result.summary}\n </span>\n )}\n </div>\n </UIPageSection>\n )}\n\n {run && (\n <UIPageSection>\n {/* View toggle */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: 16 }}>\n <Title level={4} style={{ margin: 0 }}>Execution</Title>\n <ViewModeSelector views={VIEW_MODES} current={viewMode} onChange={setViewMode} />\n </div>\n\n {isRunActive && !isConnected && !logError && <UIAlert variant=\"info\" message=\"Connecting to event stream...\" showIcon style={{ marginBottom: 12 }} />}\n {isRunActive && logError && <UIAlert variant=\"error\" message=\"Event stream error\" description={logError.message} style={{ marginBottom: 12 }} />}\n\n {viewMode === 'dashboard' && (\n <DashboardView\n run={run}\n onApprove={(step) => setApprovalStep(step)}\n />\n )}\n {viewMode === 'pipeline' && (\n <PipelineView\n run={run}\n events={events}\n onApprove={(step) => setApprovalStep(step)}\n />\n )}\n {viewMode === 'engineering' && (\n <JobStepLog\n events={events}\n run={run}\n onApprove={(step) => setApprovalStep(step)}\n />\n )}\n </UIPageSection>\n )}\n\n {run?.result && (\n <UIPageSection>\n <Title level={4}>Result Metrics</Title>\n {run.result.metrics ? (\n <UIList\n bordered\n size=\"small\"\n dataSource={Object.entries(run.result.metrics).map(([key, value]) => ({\n key,\n value,\n }))}\n renderItem={({ key, value }) => (\n <UIListItem>\n <Text strong>{key}</Text>\n <span style={{ marginLeft: 8 }}>{String(value ?? '-')}</span>\n </UIListItem>\n )}\n />\n ) : (\n <Text type=\"secondary\">No metrics recorded.</Text>\n )}\n {run.result.error && (\n <UIAlert\n style={{ marginTop: 16 }}\n variant=\"error\"\n message={run.result.error.message}\n description={\n run.result.error.details ? JSON.stringify(run.result.error.details, null, 2) : undefined\n }\n showIcon\n />\n )}\n </UIPageSection>\n )}\n\n <ApprovalModal\n open={approvalStep !== null}\n step={approvalStep}\n runId={runId ?? ''}\n onClose={() => setApprovalStep(null)}\n onResolve={handleApprovalResolve}\n isLoading={resolveApproval.isLoading}\n error={resolveApproval.error instanceof Error ? resolveApproval.error : null}\n />\n </UIPage>\n )\n}\n"],"names":["n","btoa","unescape","encodeURIComponent","JSON","r","i","document","window","e","Error","Text","UITypographyText","Paragraph","UITypographyParagraph","Title","UITitle","TextArea","UIInputTextArea","ApprovalModal","param","_step_spec","step","open","onClose","onResolve","isLoading","error","_useState","comment","setComment","_useState1","pendingAction","setPendingAction","context","title","instructions","contextData","_type_of","handleResolve","action","undefined","UIModal","Object","key","value","String","UIAlert","onChange","UIButton","onClick","STATUS_LABEL","STATUS_COLOR","ANSI_RE","stripAnsi","s","extractLogLines","ev","time","Date","p","_p_outputs","_p_outputs1","_p_stream","msg","stream","stdout","text","stderr","LOG_SKIP_KEYS","Set","StepDetailDrawer","events","onApprove","sseLines","useMemo","logRef","useRef","useEffect","el","pollingLines","lines","_step_outputs","keys","k","dataOutputs","filtered","_iteratorError","v","hasInputs","hasError","hasData","logContent","l","tabItems","UIJsonViewer","statusColor","duration","formatDuration","ms","Math","UIDrawer","UITabs","injected","S_COLOR","S_LABEL","StatusDot","_S_COLOR_status","status","color","filled","PHASE_COLOR","GateDecisionBanner","stepRun","targetStepName","outputs","decision","iteration","isRestart","errorMsg","maxIterReached","StepRow","_S_LABEL_status","isReworkGate","isReworkTarget","reworkActive","rowRef","stepType","isWaiting","isFailed","isRunning","isQueued","isApproval","isGate","gateOutputs","gateAction","highlight","onMouseEnter","onMouseLeave","showBanner","ReworkBracket","gateEl","targetEl","containerEl","isActive","pos","setPos","measure","cr","gr","tr","ro","ResizeObserver","PipelineView","_rowRefs_current_get","_rowRefs_current_get1","run","model","usePipelineModel","selected","setSelected","containerRef","rowRefs","Map","reworkLoop","gateStep","targetStep","stepEvents","phase","pi","_PHASE_COLOR_phase_label","doneCount","isLast","id","flatIdx","isGateWithLoop","S","escapeHtml","heading","level","style","listItems","block","ordered","itemRe","items","line","tag","MarkdownViewer","codeBlocks","html","data","editable","onEdit","editing","setEditing","editValue","setEditValue","md","_","code","idx","c","rawHref","url","t","trimmed","_codeBlocks_Number","Number","SEVERITY_COLOR","IssuesViewer","issues","Array","styles","issue","_issue_severity","_SEVERITY_COLOR_severity","_ref","severity","UITag","TableViewer","_rows_","rows","columns","UITable","DiffViewer","_JSON_stringify","UIDiffViewer","LogViewer","LinkViewer","label","ArtifactErrorBoundary","render","_this_props_label","getDerivedStateFromError","Component","ArtifactViewerInner","type","ArtifactViewer","props","formatDurationMs","m","rem","HeroBlock","_step_spec1","artifactsMap","artifacts","rt","artifact","acc","UISpace","UIIcon","TERMINAL","StatCard","DashboardView","links","rich","phases","allDone","anyActive","allSteps","j","isTerminal","currentStep","completedSteps","failedSteps","futureSteps","totalMs","stepsByPhase","ungroupedSteps","summaryArtifacts","_iteratorError1","PhaseProgressBar","a","STATUS_ICON","eventTypeToStatus","formatTime","ts","payload","_payload_stream","LOG_OUTPUT_KEYS","StepPanel","line1","dataKeys","JobStepLog","groups","buildLogGroups","jobMap","job","stepGroups","_s_outputs","_ev_payload","_ev_payload1","group","stepRunMap","map","activeJobKeys","g","defaultJobKeys","jobItems","_STATUS_ICON_group_status","_STATUS_COLOR_group_status","icon","activeStepKeys","defaultStepKeys","stepItems","_STATUS_ICON_step_status","_STATUS_COLOR_step_status","sIcon","sColor","sDuration","sr","UIAccordion","WorkflowRunDetail","_params_runId","_run_trigger_actor","_run_result","runId","useParams","_useData","runData","refetch","cancelMutation","useMutateData","resolveApproval","isRunActive","_useSSE","logError","isConnected","approvalStep","setApprovalStep","viewMode","setViewMode","hasPendingApprovals","shortRunId","UIPage","UIPageHeader","UIPageSection","WorkflowStatusBadge","Link","ViewModeSelector","UIList","renderItem","UIListItem","_instanceof"],"mappings":"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"}
1
+ {"version":3,"file":"__federation_expose_RunDetail.js","sources":["webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/artifacts.module.css","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/css-loader@7.1.4_@rspack+core@1.7.11_@swc+helpers@0.5.15__webpack@5.106.1_@swc+core@1.15.24_@_hmb6k3cfo4kznxgppeoqzrptau/node_modules/css-loader/dist/runtime/api.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/css-loader@7.1.4_@rspack+core@1.7.11_@swc+helpers@0.5.15__webpack@5.106.1_@swc+core@1.15.24_@_hmb6k3cfo4kznxgppeoqzrptau/node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__esbuild@0.27.7_/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__esbuild@0.27.7_/node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__esbuild@0.27.7_/node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__esbuild@0.27.7_/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__esbuild@0.27.7_/node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://@kb-labs/workflow-entry/../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__esbuild@0.27.7_/node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://@kb-labs/workflow-entry/./src/studio/components/ApprovalModal.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/pipeline/StepDetailDrawer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/pipeline/PipelineView.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/MarkdownViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/artifacts.module.css?5915","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/IssuesViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/TableViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/DiffViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/LogViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/LinkViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/artifacts/ArtifactViewer.tsx","webpack://@kb-labs/workflow-entry/./src/studio/components/dashboard/DashboardView.tsx","webpack://@kb-labs/workflow-entry/./src/studio/pages/WorkflowRunDetail.tsx"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../../node_modules/.pnpm/css-loader@7.1.4_@rspack+core@1.7.11_@swc+helpers@0.5.15__webpack@5.106.1_@swc+core@1.15.24_@_hmb6k3cfo4kznxgppeoqzrptau/node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../../node_modules/.pnpm/css-loader@7.1.4_@rspack+core@1.7.11_@swc+helpers@0.5.15__webpack@5.106.1_@swc+core@1.15.24_@_hmb6k3cfo4kznxgppeoqzrptau/node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `/* ── Markdown editor ── */\n.eKkdFRPP08w0ipmt {\n width: 100%;\n min-height: 200px;\n font-family: monospace;\n font-size: 13px;\n padding: 12px;\n border: 1px solid var(--border-primary);\n border-radius: 6px;\n background: var(--bg-primary);\n color: var(--text-primary);\n resize: vertical;\n box-sizing: border-box;\n}\n\n.xlFaIxn8H1U2vmZd {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n}\n\n/* ── Issues ── */\n.EflSZ182vBIy0S2M {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.pie3p6utzf8rTfUu {\n padding: 8px 12px;\n background: var(--bg-secondary);\n border: 1px solid var(--border-primary);\n border-radius: 6px;\n}\n\n.Al1WXNwqfC0ju3OY {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 4px;\n}\n\n.qUayT4ACFY4Pv93l {\n font-size: 12px;\n color: var(--text-secondary);\n font-family: monospace;\n}\n\n.K5oooXXvNFAN7bDb {\n font-size: 13px;\n color: var(--text-primary);\n}\n\n.tArqFztlCu4cPnh5 {\n font-size: 12px;\n color: var(--text-secondary);\n margin-top: 4px;\n font-style: italic;\n}\n\n/* ── Log ── */\n.xRIfIRB1FQYzXPeI {\n margin: 0;\n padding: 12px;\n border-radius: 6px;\n font-size: 13px;\n line-height: 1.6;\n overflow: auto;\n background: #0d1117;\n color: #c9d1d9;\n font-family: monospace;\n max-height: 400px;\n white-space: pre-wrap;\n word-break: break-word;\n}\n\n/* ── Link ── */\n.Fdjb7OQrUoEC9TE7 {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n background: var(--bg-secondary);\n border: 1px solid var(--border-primary);\n border-radius: 6px;\n font-size: 13px;\n color: var(--link);\n text-decoration: none;\n font-weight: 500;\n transition: background 0.15s;\n}\n\n.Fdjb7OQrUoEC9TE7:hover {\n background: var(--bg-tertiary, var(--bg-secondary));\n border-color: var(--link);\n}\n\n.MPGw8m2NoAVGUlis {\n font-size: 11px;\n opacity: 0.6;\n}\n\n/* ── Empty state ── */\n.CQMnm5XuOUksgiz3 {\n color: var(--text-tertiary);\n font-size: 13px;\n padding: 12px;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/studio/components/artifacts/artifacts.module.css\"],\"names\":[],\"mappings\":\"AAAA,0BAA0B;AAC1B;EACE,WAAW;EACX,iBAAiB;EACjB,sBAAsB;EACtB,eAAe;EACf,aAAa;EACb,uCAAuC;EACvC,kBAAkB;EAClB,6BAA6B;EAC7B,0BAA0B;EAC1B,gBAAgB;EAChB,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,QAAQ;EACR,eAAe;AACjB;;AAEA,iBAAiB;AACjB;EACE,aAAa;EACb,sBAAsB;EACtB,QAAQ;AACV;;AAEA;EACE,iBAAiB;EACjB,+BAA+B;EAC/B,uCAAuC;EACvC,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,mBAAmB;EACnB,QAAQ;EACR,kBAAkB;AACpB;;AAEA;EACE,eAAe;EACf,4BAA4B;EAC5B,sBAAsB;AACxB;;AAEA;EACE,eAAe;EACf,0BAA0B;AAC5B;;AAEA;EACE,eAAe;EACf,4BAA4B;EAC5B,eAAe;EACf,kBAAkB;AACpB;;AAEA,cAAc;AACd;EACE,SAAS;EACT,aAAa;EACb,kBAAkB;EAClB,eAAe;EACf,gBAAgB;EAChB,cAAc;EACd,mBAAmB;EACnB,cAAc;EACd,sBAAsB;EACtB,iBAAiB;EACjB,qBAAqB;EACrB,sBAAsB;AACxB;;AAEA,eAAe;AACf;EACE,oBAAoB;EACpB,mBAAmB;EACnB,QAAQ;EACR,iBAAiB;EACjB,+BAA+B;EAC/B,uCAAuC;EACvC,kBAAkB;EAClB,eAAe;EACf,kBAAkB;EAClB,qBAAqB;EACrB,gBAAgB;EAChB,4BAA4B;AAC9B;;AAEA;EACE,mDAAmD;EACnD,yBAAyB;AAC3B;;AAEA;EACE,eAAe;EACf,YAAY;AACd;;AAEA,sBAAsB;AACtB;EACE,2BAA2B;EAC3B,eAAe;EACf,aAAa;AACf\",\"sourcesContent\":[\"/* ── Markdown editor ── */\\n.textarea {\\n width: 100%;\\n min-height: 200px;\\n font-family: monospace;\\n font-size: 13px;\\n padding: 12px;\\n border: 1px solid var(--border-primary);\\n border-radius: 6px;\\n background: var(--bg-primary);\\n color: var(--text-primary);\\n resize: vertical;\\n box-sizing: border-box;\\n}\\n\\n.editActions {\\n display: flex;\\n gap: 8px;\\n margin-top: 8px;\\n}\\n\\n/* ── Issues ── */\\n.issueList {\\n display: flex;\\n flex-direction: column;\\n gap: 8px;\\n}\\n\\n.issueItem {\\n padding: 8px 12px;\\n background: var(--bg-secondary);\\n border: 1px solid var(--border-primary);\\n border-radius: 6px;\\n}\\n\\n.issueHeader {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n margin-bottom: 4px;\\n}\\n\\n.issueFile {\\n font-size: 12px;\\n color: var(--text-secondary);\\n font-family: monospace;\\n}\\n\\n.issueMessage {\\n font-size: 13px;\\n color: var(--text-primary);\\n}\\n\\n.issueFix {\\n font-size: 12px;\\n color: var(--text-secondary);\\n margin-top: 4px;\\n font-style: italic;\\n}\\n\\n/* ── Log ── */\\n.logPre {\\n margin: 0;\\n padding: 12px;\\n border-radius: 6px;\\n font-size: 13px;\\n line-height: 1.6;\\n overflow: auto;\\n background: #0d1117;\\n color: #c9d1d9;\\n font-family: monospace;\\n max-height: 400px;\\n white-space: pre-wrap;\\n word-break: break-word;\\n}\\n\\n/* ── Link ── */\\n.link {\\n display: inline-flex;\\n align-items: center;\\n gap: 6px;\\n padding: 5px 12px;\\n background: var(--bg-secondary);\\n border: 1px solid var(--border-primary);\\n border-radius: 6px;\\n font-size: 13px;\\n color: var(--link);\\n text-decoration: none;\\n font-weight: 500;\\n transition: background 0.15s;\\n}\\n\\n.link:hover {\\n background: var(--bg-tertiary, var(--bg-secondary));\\n border-color: var(--link);\\n}\\n\\n.linkArrow {\\n font-size: 11px;\\n opacity: 0.6;\\n}\\n\\n/* ── Empty state ── */\\n.empty {\\n color: var(--text-tertiary);\\n font-size: 13px;\\n padding: 12px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport var textarea = `eKkdFRPP08w0ipmt`;\nexport var editActions = `xlFaIxn8H1U2vmZd`;\nexport var issueList = `EflSZ182vBIy0S2M`;\nexport var issueItem = `pie3p6utzf8rTfUu`;\nexport var issueHeader = `Al1WXNwqfC0ju3OY`;\nexport var issueFile = `qUayT4ACFY4Pv93l`;\nexport var issueMessage = `K5oooXXvNFAN7bDb`;\nexport var issueFix = `tArqFztlCu4cPnh5`;\nexport var logPre = `xRIfIRB1FQYzXPeI`;\nexport var link = `Fdjb7OQrUoEC9TE7`;\nexport var linkArrow = `MPGw8m2NoAVGUlis`;\nexport var empty = `CQMnm5XuOUksgiz3`;\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;","\"use strict\";\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;","import { useState } from 'react'\nimport {\n UIModal,\n UIButton,\n UIAlert,\n UITypographyText,\n UITypographyParagraph,\n UITitle,\n UIInputTextArea,\n} from '@kb-labs/sdk/studio'\nimport type { StepRun } from '@kb-labs/workflow-contracts'\n\nconst Text = UITypographyText\nconst Paragraph = UITypographyParagraph\nconst Title = UITitle\nconst TextArea = UIInputTextArea\n\ninterface ApprovalModalProps {\n step: StepRun | null\n runId: string\n open: boolean\n onClose: () => void\n onResolve: (action: 'approve' | 'reject', comment?: string) => Promise<void>\n isLoading?: boolean\n error?: Error | null\n}\n\nexport function ApprovalModal({\n step,\n runId: _runId,\n open,\n onClose,\n onResolve,\n isLoading,\n error,\n}: ApprovalModalProps) {\n const [comment, setComment] = useState('')\n const [pendingAction, setPendingAction] = useState<'approve' | 'reject' | null>(null)\n\n const context = (step?.spec?.with ?? {}) as Record<string, unknown>\n const title = typeof context.title === 'string' ? context.title : step?.name ?? 'Approval Required'\n const instructions = typeof context.instructions === 'string' ? context.instructions : null\n const contextData = typeof context.context === 'object' && context.context !== null\n ? context.context as Record<string, unknown>\n : null\n\n const handleResolve = async (action: 'approve' | 'reject') => {\n setPendingAction(action)\n try {\n await onResolve(action, comment.trim() || undefined)\n setComment('')\n setPendingAction(null)\n } catch {\n setPendingAction(null)\n }\n }\n\n return (\n <UIModal\n open={open}\n title={title}\n width=\"large\"\n maskClosable={false}\n onCancel={onClose}\n footer={null}\n >\n {instructions && (\n <Paragraph style={{ marginBottom: 16 }}>\n <Text type=\"secondary\">{instructions}</Text>\n </Paragraph>\n )}\n\n {contextData && Object.keys(contextData).length > 0 && (\n <div style={{ marginBottom: 16 }}>\n <Title level={5} style={{ marginBottom: 8 }}>Context</Title>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 6 }}>\n {Object.entries(contextData).map(([key, value]) => (\n <div key={key} style={{ display: 'flex', gap: 8 }}>\n <Text strong style={{ minWidth: 100, textTransform: 'capitalize' }}>\n {key.replace(/([A-Z])/g, ' $1').trim()}:\n </Text>\n <Text>{String(value ?? '—')}</Text>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {error && (\n <UIAlert\n variant=\"error\"\n message={error.message}\n style={{ marginBottom: 16 }}\n showIcon\n />\n )}\n\n <div style={{ marginBottom: 16 }}>\n <Title level={5} style={{ marginBottom: 8 }}>Comment (optional)</Title>\n <TextArea\n rows={3}\n placeholder=\"Add a comment for the record...\"\n value={comment}\n onChange={(e) => setComment(e.target.value)}\n disabled={isLoading}\n />\n </div>\n\n <div style={{ display: 'flex', gap: 8, justifyContent: 'flex-end' }}>\n <UIButton\n onClick={onClose}\n disabled={isLoading}\n >\n Cancel\n </UIButton>\n <UIButton\n danger\n onClick={() => void handleResolve('reject')}\n loading={isLoading && pendingAction === 'reject'}\n disabled={isLoading && pendingAction !== 'reject'}\n >\n Reject\n </UIButton>\n <UIButton\n variant=\"primary\"\n onClick={() => void handleResolve('approve')}\n loading={isLoading && pendingAction === 'approve'}\n disabled={isLoading && pendingAction !== 'approve'}\n >\n Approve\n </UIButton>\n </div>\n </UIModal>\n )\n}\n","/**\n * Drawer that shows step details when a node is clicked in PipelineView.\n * Reuses the existing StepPanel logic inline to avoid circular imports.\n */\n\nimport { useMemo, useRef, useEffect } from 'react'\nimport { UIDrawer, UIButton, UITabs, UIJsonViewer, UITypographyText } from '@kb-labs/sdk/studio'\nimport type { UITabItem } from '@kb-labs/sdk/studio'\nimport type { StepRun } from '@kb-labs/workflow-contracts'\nimport type { WorkflowLogEvent } from '@kb-labs/workflow-contracts/rest-api'\n\nconst Text = UITypographyText\n\nconst STATUS_LABEL: Record<string, string> = {\n queued: 'Queued',\n running: 'Running...',\n success: 'Completed',\n failed: 'Failed',\n cancelled: 'Cancelled',\n skipped: 'Skipped',\n waiting_approval: 'Waiting for your decision',\n}\n\nconst STATUS_COLOR: Record<string, string> = {\n queued: 'var(--text-tertiary)',\n running: 'var(--warning)',\n success: 'var(--success)',\n failed: 'var(--error)',\n cancelled: 'var(--text-tertiary)',\n skipped: 'var(--text-tertiary)',\n waiting_approval: 'var(--info)',\n}\n\nfunction formatDuration(ms?: number): string | null {\n if (!ms) {return null}\n if (ms < 1000) {return `${ms}ms`}\n const s = ms / 1000\n if (s < 60) {return `${s.toFixed(1)}s`}\n return `${Math.floor(s / 60)}m ${Math.floor(s % 60)}s`\n}\n\ninterface LogLine { time: string; text: string; stream?: 'stdout' | 'stderr' }\n\n// Strip ANSI escape codes from text\n \nconst ANSI_RE = /\\x1b\\[[0-9;]*[A-Za-z]|\\x1b\\].*?\\x07/g\nfunction stripAnsi(s: string): string { return s.replace(ANSI_RE, '') }\n\nfunction extractLogLines(ev: WorkflowLogEvent): LogLine[] {\n const time = ev.timestamp ? new Date(ev.timestamp).toLocaleTimeString('en-US', { hour12: false }) : ''\n const p = ev.payload as Record<string, unknown> | undefined\n if (!p) {return []}\n\n // Live log.appended events (real-time streaming)\n if (ev.type === 'log.appended') {\n const msg = typeof p.message === 'string' ? stripAnsi(p.message) : ''\n if (!msg) {return []}\n const stream = (p.stream as 'stdout' | 'stderr') ?? 'stdout'\n return [{ time, text: msg, stream }]\n }\n\n const stdout = (p.outputs as Record<string, unknown> | undefined)?.stdout ?? p.stdout\n if (typeof stdout === 'string' && stdout.trim()) {\n return stripAnsi(stdout).trim().split('\\n').map(text => ({ time, text, stream: 'stdout' as const }))\n }\n const stderr = (p.outputs as Record<string, unknown> | undefined)?.stderr ?? p.stderr\n if (typeof stderr === 'string' && stderr.trim()) {\n return stripAnsi(stderr).trim().split('\\n').map(text => ({ time, text, stream: 'stderr' as const }))\n }\n if (typeof p.error === 'string') {return [{ time, text: p.error, stream: 'stderr' }]}\n if (typeof p.message === 'string') {return [{ time, text: p.message }]}\n if (typeof p.line === 'string') {return [{ time, text: p.line }]}\n if (typeof p.text === 'string') {return [{ time, text: p.text }]}\n return []\n}\n\nconst LOG_SKIP_KEYS = new Set(['stdout', 'stderr', 'exitCode', 'ok'])\n\ninterface StepDetailDrawerProps {\n step: StepRun | null\n events: WorkflowLogEvent[]\n open: boolean\n onClose: () => void\n onApprove?: () => void\n}\n\nexport function StepDetailDrawer({ step, events, open, onClose, onApprove }: StepDetailDrawerProps) {\n const sseLines = useMemo(() => events.flatMap(extractLogLines), [events])\n const logRef = useRef<HTMLPreElement>(null)\n\n // Auto-scroll to bottom when new lines arrive\n useEffect(() => {\n const el = logRef.current\n if (!el) {return}\n const isNearBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 80\n if (isNearBottom) {\n el.scrollTop = el.scrollHeight\n }\n }, [sseLines.length])\n\n const pollingLines = useMemo<LogLine[]>(() => {\n if (!step?.outputs || sseLines.length > 0) {return []}\n const lines: LogLine[] = []\n const { stdout, stderr } = step.outputs as { stdout?: unknown; stderr?: unknown }\n if (typeof stdout === 'string' && stdout.trim()) {\n stdout.trim().split('\\n').forEach(text => lines.push({ time: '', text }))\n }\n if (typeof stderr === 'string' && stderr.trim()) {\n stderr.trim().split('\\n').forEach(text => lines.push({ time: '', text }))\n }\n if (lines.length === 0) {\n const keys = Object.keys(step.outputs).filter(k => !LOG_SKIP_KEYS.has(k))\n if (keys.length > 0) {lines.push({ time: '', text: `Output: { ${keys.join(', ')} }` })}\n }\n return lines\n }, [step?.outputs, sseLines.length])\n\n const lines = sseLines.length > 0 ? sseLines : pollingLines\n\n const dataOutputs = useMemo(() => {\n if (!step?.outputs) {return null}\n const filtered: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(step.outputs)) {\n if (!LOG_SKIP_KEYS.has(k)) {filtered[k] = v}\n }\n return Object.keys(filtered).length > 0 ? filtered : null\n }, [step?.outputs])\n\n const hasInputs = step?.spec?.with != null && Object.keys(step.spec.with).length > 0\n const hasError = step?.error != null\n const hasData = dataOutputs !== null\n\n const logContent = (\n <div style={{ fontFamily: 'monospace', fontSize: 12 }}>\n {lines.length > 0 ? (\n <pre ref={logRef} style={{\n margin: 0,\n padding: '8px 12px',\n background: '#0d1117',\n color: '#c9d1d9',\n borderRadius: 4,\n overflow: 'auto',\n maxHeight: 500,\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n lineHeight: 1.6,\n }}>\n {lines.map((l, i) => (\n <span key={i}>\n {l.time && <span style={{ color: 'var(--text-tertiary)', userSelect: 'none', marginRight: 12 }}>{l.time}</span>}\n <span style={l.stream === 'stderr' ? { color: '#f85149' } : undefined}>{l.text}</span>{'\\n'}\n </span>\n ))}\n </pre>\n ) : (\n <Text type=\"secondary\" style={{ fontSize: 12 }}>\n {step?.status === 'running' ? 'Waiting for output...' :\n step?.status === 'queued' ? 'Not started yet' :\n step?.status === 'waiting_approval' ? 'Waiting for approval' :\n 'No output'}\n </Text>\n )}\n </div>\n )\n\n const tabItems: UITabItem[] = [\n { key: 'log', label: 'Log', children: logContent },\n ]\n if (hasData) {tabItems.push({ key: 'data', label: 'Data', children: <UIJsonViewer data={dataOutputs} /> })}\n if (hasInputs) {tabItems.push({ key: 'inputs', label: 'Inputs', children: <UIJsonViewer data={step!.spec!.with} /> })}\n if (hasError) {tabItems.push({ key: 'error', label: 'Error', children: <UIJsonViewer data={step!.error} /> })}\n\n const statusColor = STATUS_COLOR[step?.status ?? 'queued']\n const duration = formatDuration(step?.durationMs)\n\n return (\n <UIDrawer\n open={open}\n onClose={onClose}\n title={\n <div style={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n <span style={{ fontSize: 14, fontWeight: 600 }}>{step?.name ?? ''}</span>\n <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>\n <span style={{ fontSize: 12, color: statusColor, fontWeight: 600 }}>\n {STATUS_LABEL[step?.status ?? 'queued']}\n </span>\n {duration && (\n <span style={{ fontSize: 12, color: 'var(--text-tertiary)' }}>\n {duration}\n </span>\n )}\n </div>\n </div>\n }\n placement=\"right\"\n width={520}\n footer={\n step?.status === 'waiting_approval' && onApprove ? (\n <div style={{ display: 'flex', justifyContent: 'flex-end' }}>\n <UIButton variant=\"primary\" onClick={onApprove}>\n Review &amp; Decide\n </UIButton>\n </div>\n ) : null\n }\n >\n {step && (\n tabItems.length > 1\n ? <UITabs items={tabItems} size=\"small\" defaultActiveKey=\"log\" />\n : logContent\n )}\n </UIDrawer>\n )\n}\n","/**\n * Pipeline visualization.\n * Steps are rows, not cards — clean and scannable.\n * Gate rework: shows decision reason + feedback inline below gate row.\n */\n\nimport { useState, useRef, useEffect } from 'react'\nimport type { WorkflowRun, StepRun } from '@kb-labs/workflow-contracts'\nimport type { WorkflowLogEvent } from '@kb-labs/workflow-contracts/rest-api'\nimport { usePipelineModel } from '../../hooks/use-pipeline-graph'\nimport type { PipelineStep } from '../../hooks/use-pipeline-graph'\nimport { StepDetailDrawer } from './StepDetailDrawer'\n\n// ─── CSS ──────────────────────────────────────────────────────────────────────\n\nconst ANIM_CSS = `\n@keyframes kb-spin { 0% { transform: rotate(0deg) } 100% { transform: rotate(360deg) } }\n@keyframes kb-shimmer { 0% { left: -60% } 100% { left: 120% } }\n`\nlet injected = false\nfunction injectCss() {\n if (injected || typeof document === 'undefined') {return}\n injected = true\n const s = document.createElement('style')\n s.textContent = ANIM_CSS\n document.head.appendChild(s)\n}\n\n// ─── Status ───────────────────────────────────────────────────────────────────\n\nconst S_COLOR: Record<string, string> = {\n queued: 'var(--text-tertiary)',\n running: 'var(--warning)',\n success: 'var(--success)',\n failed: 'var(--error)',\n cancelled: 'var(--text-tertiary)',\n skipped: 'var(--text-tertiary)',\n waiting_approval: 'var(--info)',\n}\n\nconst S_LABEL: Record<string, string> = {\n queued: 'Queued',\n running: 'Running',\n success: 'Done',\n failed: 'Failed',\n cancelled: 'Cancelled',\n skipped: 'Skipped',\n waiting_approval: 'Review',\n}\n\nfunction StatusDot({ status }: { status: string }) {\n injectCss()\n const color = S_COLOR[status] ?? 'var(--text-tertiary)'\n if (status === 'running') {\n return <span style={{\n display: 'inline-block', width: 8, height: 8, flexShrink: 0,\n border: `2px solid ${color}`, borderTopColor: 'transparent',\n borderRadius: '50%', animation: 'kb-spin 0.8s linear infinite',\n }} />\n }\n const filled = status === 'success' || status === 'failed' || status === 'waiting_approval'\n return <span style={{\n display: 'inline-block', width: 8, height: 8, flexShrink: 0,\n borderRadius: '50%',\n background: filled ? color : 'transparent',\n border: `2px solid ${color}`,\n }} />\n}\n\nfunction formatDuration(ms?: number) {\n if (!ms) {return null}\n if (ms < 1000) {return `${ms}ms`}\n const s = ms / 1000\n if (s < 60) {return `${s.toFixed(1)}s`}\n return `${Math.floor(s / 60)}m ${Math.floor(s % 60)}s`\n}\n\n// ─── Phase colors ─────────────────────────────────────────────────────────────\n\nconst PHASE_COLOR: Record<string, string> = {\n Planning: 'var(--info)',\n Implementation: 'var(--success)',\n Quality: 'var(--warning)',\n Delivery: 'var(--link)',\n}\n\n// ─── Gate decision banner ─────────────────────────────────────────────────────\n\ninterface GateOutputs {\n decisionValue?: unknown\n action?: 'continue' | 'fail' | 'restart'\n restartFrom?: string\n iteration?: number\n maxIterations?: number\n maxIterationsReached?: boolean\n}\n\nfunction GateDecisionBanner({ stepRun, targetStepName }: { stepRun: StepRun; targetStepName?: string }) {\n const outputs = stepRun.outputs as GateOutputs | undefined\n const error = stepRun.error as Record<string, unknown> | undefined | null\n\n // Show banner if: outputs have non-continue action, OR step failed (even without outputs)\n const action = outputs?.action ?? (stepRun.status === 'failed' ? 'fail' : undefined)\n const decision = outputs?.decisionValue\n const iteration = outputs?.iteration\n\n if (!action || action === 'continue') {return null}\n\n const isRestart = action === 'restart'\n\n const color = isRestart ? 'var(--warning)' : 'var(--error)'\n const bgColor = isRestart\n ? 'color-mix(in srgb, var(--warning) 6%, var(--bg-secondary))'\n : 'color-mix(in srgb, var(--error) 6%, var(--bg-secondary))'\n\n const errorMsg = typeof error?.message === 'string' ? error.message : null\n const maxIterReached = outputs?.maxIterationsReached\n ?? (errorMsg?.toLowerCase().includes('max iteration') ?? false)\n\n return (\n <div style={{\n margin: '2px 0 4px 18px',\n padding: '8px 12px',\n background: bgColor,\n border: `1px solid color-mix(in srgb, ${color} 25%, transparent)`,\n borderRadius: 5,\n fontSize: 12,\n lineHeight: 1.6,\n }}>\n {/* Header line */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, marginBottom: 4 }}>\n <span style={{ color, fontWeight: 600 }}>\n {isRestart ? '↩ Returned for rework' : '✗ Gate failed'}\n </span>\n {iteration !== undefined && (\n <span style={{\n color: 'var(--text-tertiary)',\n background: 'var(--bg-tertiary)',\n padding: '0 5px', borderRadius: 4, fontSize: 11,\n }}>\n iteration {iteration + 1}\n </span>\n )}\n </div>\n\n {/* Decision value */}\n {decision !== undefined && decision !== null && (\n <div style={{ color: 'var(--text-secondary)' }}>\n <span style={{ color: 'var(--text-tertiary)' }}>Decision: </span>\n <code style={{\n fontSize: 11,\n background: 'var(--bg-tertiary)',\n padding: '0 4px', borderRadius: 3,\n color: color,\n fontFamily: 'monospace',\n }}>\n {String(decision)}\n </code>\n </div>\n )}\n\n {/* Restart target */}\n {isRestart && targetStepName && (\n <div style={{ color: 'var(--text-secondary)', marginTop: 2 }}>\n <span style={{ color: 'var(--text-tertiary)' }}>Restarting from: </span>\n <span style={{ fontWeight: 500 }}>{targetStepName}</span>\n </div>\n )}\n\n {/* Max iterations reached */}\n {maxIterReached && (\n <div style={{ color: 'var(--error)', marginTop: 2 }}>\n Max iterations reached — pipeline stopped\n </div>\n )}\n\n {/* Error message (if not max iter) */}\n {errorMsg && !maxIterReached && (\n <div style={{ color: 'var(--text-secondary)', marginTop: 2, fontStyle: 'italic' }}>\n {errorMsg}\n </div>\n )}\n </div>\n )\n}\n\n// ─── StepRow ─────────────────────────────────────────────────────────────────\n\ninterface StepRowProps {\n step: PipelineStep\n isReworkGate: boolean\n isReworkTarget: boolean\n reworkActive: boolean\n targetStepName?: string\n onClick: () => void\n rowRef?: (el: HTMLDivElement | null) => void\n}\n\nfunction StepRow({ step, isReworkGate, isReworkTarget, reworkActive, targetStepName, onClick, rowRef }: StepRowProps) {\n const { stepRun, stepType, iteration } = step\n const status = stepRun.status\n const isWaiting = status === 'waiting_approval'\n const isFailed = status === 'failed'\n const isRunning = status === 'running'\n const isQueued = status === 'queued'\n const isApproval = stepType === 'approval'\n const isGate = stepType === 'gate'\n\n // Gate outputs for restart detection\n const gateOutputs = isGate ? stepRun.outputs as GateOutputs | undefined : undefined\n const gateAction = gateOutputs?.action\n const showBanner = isGate && (gateAction === 'restart' || gateAction === 'fail' || isFailed)\n\n const highlight = isWaiting\n ? { bg: 'color-mix(in srgb, var(--info) 5%, var(--bg-secondary))', border: 'var(--info)' }\n : isFailed\n ? { bg: 'color-mix(in srgb, var(--error) 5%, var(--bg-secondary))', border: 'var(--error)' }\n : isReworkTarget && reworkActive\n ? { bg: 'color-mix(in srgb, var(--warning) 5%, var(--bg-secondary))', border: 'var(--warning)' }\n : null\n\n return (\n <>\n <div\n ref={rowRef}\n onClick={onClick}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n padding: highlight ? '10px 14px' : '7px 14px',\n marginLeft: isApproval ? 28 : 0,\n borderRadius: 6,\n background: highlight?.bg ?? 'transparent',\n border: highlight ? `1px solid ${highlight.border}` : '1px solid transparent',\n cursor: 'pointer',\n position: 'relative',\n overflow: 'hidden',\n transition: 'background 0.1s',\n }}\n onMouseEnter={e => {\n if (!highlight) {(e.currentTarget as HTMLDivElement).style.background = 'var(--bg-hover)'}\n }}\n onMouseLeave={e => {\n if (!highlight) {(e.currentTarget as HTMLDivElement).style.background = 'transparent'}\n }}\n >\n {isRunning && (\n <div style={{\n position: 'absolute', top: 0, left: 0, height: 2, width: '45%',\n background: 'linear-gradient(90deg, transparent, var(--warning), transparent)',\n animation: 'kb-shimmer 1.4s ease-in-out infinite',\n }} />\n )}\n\n <StatusDot status={status} />\n\n <span style={{\n flex: 1,\n fontSize: 14,\n color: isQueued ? 'var(--text-tertiary)' : 'var(--text-primary)',\n fontWeight: isWaiting || isFailed ? 500 : 400,\n fontStyle: isGate ? 'italic' : 'normal',\n }}>\n {isApproval && <span style={{ color: 'var(--info)', marginRight: 5, fontStyle: 'normal', fontSize: 12 }}>⏸</span>}\n {stepRun.name}\n </span>\n\n <div style={{ display: 'flex', alignItems: 'center', gap: 10, flexShrink: 0 }}>\n {isReworkGate && iteration && (\n <span style={{\n fontSize: 11, fontWeight: 600, color: 'var(--warning)',\n background: 'color-mix(in srgb, var(--warning) 12%, transparent)',\n padding: '1px 7px', borderRadius: 8,\n }}>\n ↩ {iteration.current}/{iteration.max}\n </span>\n )}\n {formatDuration(stepRun.durationMs) && (\n <span style={{ fontSize: 12, color: 'var(--text-tertiary)' }}>\n {formatDuration(stepRun.durationMs)}\n </span>\n )}\n {isWaiting ? (\n <span style={{\n fontSize: 12, fontWeight: 600, color: 'var(--info)',\n background: 'color-mix(in srgb, var(--info) 12%, transparent)',\n padding: '2px 9px', borderRadius: 8,\n }}>\n Review\n </span>\n ) : (\n <span style={{\n fontSize: 12,\n color: S_COLOR[status] ?? 'var(--text-tertiary)',\n minWidth: 44, textAlign: 'right',\n }}>\n {S_LABEL[status] ?? status}\n </span>\n )}\n </div>\n </div>\n\n {/* Gate decision inline — shows why it restarted and where */}\n {showBanner && (\n <GateDecisionBanner stepRun={stepRun} targetStepName={targetStepName} />\n )}\n </>\n )\n}\n\n// ─── ReworkBracket ────────────────────────────────────────────────────────────\n\nfunction ReworkBracket({\n gateEl, targetEl, containerEl, isActive,\n}: {\n gateEl: HTMLDivElement | null\n targetEl: HTMLDivElement | null\n containerEl: HTMLDivElement | null\n isActive: boolean\n}) {\n const [pos, setPos] = useState<{ top: number; height: number } | null>(null)\n useEffect(() => {\n if (!gateEl || !targetEl || !containerEl) {return}\n const measure = () => {\n const cr = containerEl.getBoundingClientRect()\n const gr = gateEl.getBoundingClientRect()\n const tr = targetEl.getBoundingClientRect()\n setPos({\n top: tr.top - cr.top + tr.height / 2,\n height: Math.max(0, gr.top - cr.top + gr.height / 2 - (tr.top - cr.top + tr.height / 2)),\n })\n }\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(containerEl)\n ro.observe(gateEl)\n ro.observe(targetEl)\n return () => ro.disconnect()\n }, [gateEl, targetEl, containerEl])\n if (!pos || pos.height < 8) {return null}\n const color = isActive ? 'var(--warning)' : 'var(--border-primary)'\n return (\n <div style={{ position: 'absolute', left: 0, top: pos.top, width: 8, height: pos.height, pointerEvents: 'none' }}>\n <svg width={8} height={pos.height} overflow=\"visible\">\n <line x1={5} y1={0} x2={5} y2={pos.height}\n stroke={color} strokeWidth={isActive ? 2 : 1.5}\n strokeDasharray={isActive ? undefined : '3 3'} />\n <polygon points=\"2,6 5,0 8,6\" fill={color} />\n </svg>\n </div>\n )\n}\n\n// ─── PipelineView ─────────────────────────────────────────────────────────────\n\ninterface PipelineViewProps {\n run: WorkflowRun\n events: WorkflowLogEvent[]\n onApprove?: (step: StepRun) => void\n}\n\nexport function PipelineView({ run, events, onApprove }: PipelineViewProps) {\n const model = usePipelineModel(run)\n const [selected, setSelected] = useState<StepRun | null>(null)\n const containerRef = useRef<HTMLDivElement | null>(null)\n const rowRefs = useRef<Map<string, HTMLDivElement>>(new Map())\n\n const setRef = (id: string) => (el: HTMLDivElement | null) => {\n if (el) {rowRefs.current.set(id, el)}\n else {rowRefs.current.delete(id)}\n }\n\n if (!model.steps.length) {\n return <div style={{ padding: '24px 0', color: 'var(--text-tertiary)', fontSize: 14 }}>No execution data yet.</div>\n }\n\n const { reworkLoop } = model\n const gateStep = reworkLoop ? model.steps[reworkLoop.gateIndex] : null\n const targetStep = reworkLoop ? model.steps[reworkLoop.targetIndex] : null\n const stepEvents = events.filter(e => e.stepId === selected?.id)\n\n return (\n <div ref={containerRef} style={{ position: 'relative', paddingLeft: 10 }}>\n {reworkLoop && gateStep && targetStep && (\n <ReworkBracket\n gateEl={rowRefs.current.get(gateStep.stepRun.id) ?? null}\n targetEl={rowRefs.current.get(targetStep.stepRun.id) ?? null}\n containerEl={containerRef.current}\n isActive={reworkLoop.isActive}\n />\n )}\n\n {model.phases.map((phase, pi) => {\n const color = PHASE_COLOR[phase.label] ?? 'var(--text-tertiary)'\n const doneCount = phase.steps.filter(s => s.stepRun.status === 'success').length\n const isLast = pi === model.phases.length - 1\n\n return (\n <div key={phase.label} style={{ marginBottom: isLast ? 0 : 20 }}>\n {/* Phase label */}\n <div style={{\n display: 'flex', alignItems: 'center', gap: 8,\n padding: '0 4px', marginBottom: 4,\n }}>\n <div style={{ width: 3, height: 12, background: color, borderRadius: 2, flexShrink: 0 }} />\n <span style={{\n fontSize: 11, fontWeight: 700,\n textTransform: 'uppercase', letterSpacing: '0.09em',\n color,\n }}>\n {phase.label}\n </span>\n <span style={{ fontSize: 11, color: 'var(--text-tertiary)', marginLeft: 4 }}>\n {doneCount}/{phase.steps.length}\n </span>\n </div>\n\n {/* Steps */}\n <div style={{\n borderLeft: `2px solid color-mix(in srgb, ${color} 25%, var(--border-primary))`,\n marginLeft: 5,\n paddingLeft: 12,\n paddingTop: 2,\n paddingBottom: 2,\n }}>\n {phase.steps.map(step => {\n const flatIdx = model.steps.indexOf(step)\n const isGateWithLoop = reworkLoop?.gateIndex === flatIdx\n return (\n <StepRow\n key={step.stepRun.id}\n step={step}\n isReworkGate={isGateWithLoop ?? false}\n isReworkTarget={reworkLoop?.targetIndex === flatIdx}\n reworkActive={reworkLoop?.isActive ?? false}\n targetStepName={isGateWithLoop ? targetStep?.stepRun.name : undefined}\n onClick={() => setSelected(step.stepRun)}\n rowRef={setRef(step.stepRun.id)}\n />\n )\n })}\n </div>\n </div>\n )\n })}\n\n <StepDetailDrawer\n step={selected}\n events={stepEvents}\n open={selected !== null}\n onClose={() => setSelected(null)}\n onApprove={\n selected?.status === 'waiting_approval' && onApprove\n ? () => { onApprove(selected); setSelected(null) }\n : undefined\n }\n />\n </div>\n )\n}\n","import { useState } from 'react'\nimport { UIButton } from '@kb-labs/sdk/studio'\n\ninterface Props {\n data: unknown\n editable?: boolean\n onEdit?: (v: unknown) => void\n}\n\n// ── Styles ───────────────────────────────────────────────────────────────────\n\nconst S = {\n pre: 'background:#f6f8fa;border:1px solid #d0d7de;border-radius:6px;padding:12px;overflow:auto;font-size:12px;line-height:1.5;font-family:monospace;margin:8px 0',\n code: 'background:#f0f0f0;border-radius:3px;padding:1px 4px;font-size:0.9em;font-family:monospace',\n link: 'color:var(--link)',\n h1: 'margin:0 0 12px;font-size:17px;font-weight:700;scroll-margin-top:64px',\n h2: 'margin:16px 0 8px;font-size:15px;font-weight:700;scroll-margin-top:64px',\n h3: 'margin:14px 0 6px;font-size:14px;font-weight:600;scroll-margin-top:64px',\n h4: 'margin:12px 0 4px;font-size:13px;font-weight:600;scroll-margin-top:64px',\n ul: 'margin:6px 0;padding-left:20px',\n ol: 'margin:6px 0;padding-left:20px',\n li: 'margin:2px 0',\n hr: 'border:none;border-top:1px solid var(--border-primary);margin:12px 0',\n p: 'margin:6px 0;line-height:1.6',\n}\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction escapeHtml(s: string): string {\n return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')\n}\n\nfunction slugify(text: string): string {\n return text.toLowerCase().replace(/[^\\w\\s-]/g, '').trim().replace(/\\s+/g, '-')\n}\n\nfunction anchorLink(id: string, text: string): string {\n return `<a href=\"#${id}\" onclick=\"event.preventDefault();document.getElementById('${id}')?.scrollIntoView({behavior:'smooth'})\" style=\"${S.link};cursor:pointer\">${text}</a>`\n}\n\nfunction externalLink(url: string, text: string): string {\n return `<a href=\"${url}\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"${S.link}\">${text}</a>`\n}\n\nfunction heading(level: 1 | 2 | 3 | 4, text: string): string {\n const id = slugify(text)\n const style = S[`h${level}`]\n return `<h${level} id=\"${id}\" style=\"${style}\">${text}</h${level}>`\n}\n\nfunction listItems(block: string, ordered: boolean): string {\n const itemRe = ordered ? /^[ \\t]*\\d+\\. / : /^[ \\t]*[-*+] /\n const items = block.trim().split('\\n')\n .map(line => `<li style=\"${S.li}\">${line.replace(itemRe, '')}</li>`)\n .join('')\n const tag = ordered ? 'ol' : 'ul'\n return `<${tag} style=\"${S[tag]}\">${items}</${tag}>`\n}\n\n// ── Converter ─────────────────────────────────────────────────────────────────\n\nfunction mdToHtml(md: string): string {\n // 1. Stash fenced code blocks (preserve verbatim, skip further processing)\n const codeBlocks: string[] = []\n let html = md.replace(/```[\\w]*\\n?([\\s\\S]*?)```/g, (_, code) => {\n const idx = codeBlocks.length\n codeBlocks.push(`<pre style=\"${S.pre}\">${escapeHtml(code.replace(/\\n$/, ''))}</pre>`)\n return `\\x00CODE${idx}\\x00`\n })\n\n // 2. Escape remaining HTML\n html = escapeHtml(html)\n\n // 3. Inline code\n html = html.replace(/`([^`]+)`/g, (_, c) => `<code style=\"${S.code}\">${c}</code>`)\n\n // 4. Links (decode &amp; back in href, then route anchor vs external)\n html = html.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g, (_, text, rawHref) => {\n const url = rawHref.replace(/&amp;/g, '&')\n return url.startsWith('#') ? anchorLink(url.slice(1), text) : externalLink(url, text)\n })\n\n // 5. Headings (h4 first to avoid partial matches)\n html = html.replace(/^#### (.+)$/gm, (_, t) => heading(4, t))\n html = html.replace(/^### (.+)$/gm, (_, t) => heading(3, t))\n html = html.replace(/^## (.+)$/gm, (_, t) => heading(2, t))\n html = html.replace(/^# (.+)$/gm, (_, t) => heading(1, t))\n\n // 6. Emphasis\n html = html.replace(/\\*\\*\\*(.+?)\\*\\*\\*/g, '<strong><em>$1</em></strong>')\n html = html.replace(/\\*\\*(.+?)\\*\\*/g, '<strong>$1</strong>')\n html = html.replace(/\\*(.+?)\\*/g, '<em>$1</em>')\n\n // 7. Lists\n html = html.replace(/((?:^[ \\t]*[-*+] .+\\n?)+)/gm, block => listItems(block, false))\n html = html.replace(/((?:^[ \\t]*\\d+\\. .+\\n?)+)/gm, block => listItems(block, true))\n\n // 8. Horizontal rule\n html = html.replace(/^---$/gm, `<hr style=\"${S.hr}\"/>`)\n\n // 9. Paragraphs (skip blocks that are already block-level HTML or code placeholders)\n html = html.replace(/\\n{2,}/g, '\\n\\n')\n html = html.split('\\n\\n').map(block => {\n const trimmed = block.trim()\n if (!trimmed) {return ''}\n if (/^(\\x00CODE\\d+\\x00|<(h[1-6]|ul|ol|pre|hr|blockquote))/.test(trimmed)) {return trimmed}\n return `<p style=\"${S.p}\">${trimmed.replace(/\\n/g, '<br/>')}</p>`\n }).join('\\n')\n\n // 10. Restore code blocks\n html = html.replace(/\\x00CODE(\\d+)\\x00/g, (_, i) => codeBlocks[Number(i)] ?? '')\n\n return html\n}\n\n// ── Component ─────────────────────────────────────────────────────────────────\n\nexport function MarkdownViewer({ data, editable, onEdit }: Props) {\n const text = typeof data === 'string' ? data : data == null ? '' : JSON.stringify(data, null, 2)\n const [editing, setEditing] = useState(false)\n const [editValue, setEditValue] = useState(text)\n\n if (editing && editable) {\n return (\n <div>\n <textarea\n value={editValue}\n onChange={e => setEditValue(e.target.value)}\n style={{\n width: '100%', minHeight: 200, fontFamily: 'monospace', fontSize: 13,\n padding: 12, border: '1px solid var(--border-primary)', borderRadius: 6,\n background: 'var(--bg-primary)', color: 'var(--text-primary)',\n resize: 'vertical', boxSizing: 'border-box',\n }}\n />\n <div style={{ display: 'flex', gap: 8, marginTop: 8 }}>\n <UIButton size=\"small\" variant=\"primary\" onClick={() => { onEdit?.(editValue); setEditing(false) }}>Save</UIButton>\n <UIButton size=\"small\" variant=\"default\" onClick={() => { setEditValue(text); setEditing(false) }}>Cancel</UIButton>\n </div>\n </div>\n )\n }\n\n return (\n <div style={{ position: 'relative' }}>\n {editable && (\n <UIButton size=\"small\" variant=\"text\" style={{ float: 'right' }} onClick={() => setEditing(true)}>\n Edit\n </UIButton>\n )}\n <div\n style={{ fontSize: 13, lineHeight: 1.6, color: 'var(--text-primary)' }}\n dangerouslySetInnerHTML={{ __html: mdToHtml(text) }}\n />\n </div>\n )\n}\n","\n import API from \"!../../../../../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__esbuild@0.27.7_/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__esbuild@0.27.7_/node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__esbuild@0.27.7_/node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__esbuild@0.27.7_/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__esbuild@0.27.7_/node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../../node_modules/.pnpm/style-loader@4.0.0_webpack@5.106.1_@swc+core@1.15.24_@swc+helpers@0.5.15__esbuild@0.27.7_/node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../../node_modules/.pnpm/css-loader@7.1.4_@rspack+core@1.7.11_@swc+helpers@0.5.15__webpack@5.106.1_@swc+core@1.15.24_@_hmb6k3cfo4kznxgppeoqzrptau/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./artifacts.module.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../../node_modules/.pnpm/css-loader@7.1.4_@rspack+core@1.7.11_@swc+helpers@0.5.15__webpack@5.106.1_@swc+core@1.15.24_@_hmb6k3cfo4kznxgppeoqzrptau/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./artifacts.module.css\";\n export default content && content.locals ? content.locals : undefined;\n","import { UITag } from '@kb-labs/sdk/studio'\nimport styles from './artifacts.module.css'\n\ninterface Issue {\n file?: string\n line?: number\n severity?: string\n message?: string\n problem?: string\n fix?: string\n}\n\nconst SEVERITY_COLOR: Record<string, string> = {\n blocker: 'error',\n high: 'error',\n medium: 'warning',\n low: 'default',\n info: 'processing',\n}\n\nexport function IssuesViewer({ data }: { data: unknown }) {\n const issues = Array.isArray(data) ? (data as Issue[]) : []\n\n if (!issues.length) {\n return <div className={styles.empty}>No issues found.</div>\n }\n\n return (\n <div className={styles.issueList}>\n {issues.map((issue, i) => {\n const severity = issue.severity ?? 'info'\n const color = SEVERITY_COLOR[severity] ?? 'default'\n return (\n <div key={i} className={styles.issueItem}>\n <div className={styles.issueHeader}>\n <UITag color={color}>{severity}</UITag>\n {issue.file && (\n <span className={styles.issueFile}>\n {issue.file}{issue.line ? `:${issue.line}` : ''}\n </span>\n )}\n </div>\n <div className={styles.issueMessage}>\n {issue.message ?? issue.problem ?? JSON.stringify(issue)}\n </div>\n {issue.fix && (\n <div className={styles.issueFix}>Fix: {issue.fix}</div>\n )}\n </div>\n )\n })}\n </div>\n )\n}\n","import { UITable } from '@kb-labs/sdk/studio'\nimport styles from './artifacts.module.css'\n\nexport function TableViewer({ data }: { data: unknown }) {\n const rows = Array.isArray(data) ? data as Record<string, unknown>[] : []\n\n if (!rows.length) {\n return <div className={styles.empty}>No data.</div>\n }\n\n const columns = Object.keys(rows[0] ?? {}).map(key => ({\n key,\n dataIndex: key,\n title: key,\n }))\n\n return <UITable columns={columns} dataSource={rows} size=\"small\" pagination={false} />\n}\n","import { UIDiffViewer } from '@kb-labs/sdk/studio'\n\nexport function DiffViewer({ data }: { data: unknown }) {\n const text = typeof data === 'string' ? data : data == null ? '' : (JSON.stringify(data, null, 2) ?? '')\n if (!text) {return null}\n return <UIDiffViewer diff={text} maxHeight={500} />\n}\n","import styles from './artifacts.module.css'\n\nexport function LogViewer({ data }: { data: unknown }) {\n const text = typeof data === 'string' ? data : data == null ? '' : (JSON.stringify(data, null, 2) ?? '')\n if (!text) {return null}\n return <pre className={styles.logPre}>{text}</pre>\n}\n","export function LinkViewer({ data, label }: { data: unknown; label?: string }) {\n const url = typeof data === 'string' ? data : null\n\n if (!url) {\n return (\n <span style={{ color: 'var(--text-tertiary)', fontSize: 13, padding: 12 }}>—</span>\n )\n }\n\n return (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n padding: '5px 12px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 6,\n fontSize: 13,\n color: 'var(--link)',\n textDecoration: 'none',\n fontWeight: 500,\n }}\n >\n {label ?? url}\n <span style={{ fontSize: 11, opacity: 0.6 }}>↗</span>\n </a>\n )\n}\n","/**\n * Polymorphic artifact viewer.\n * Routes to the appropriate sub-component based on artifact type.\n * Wrapped in an ErrorBoundary so a broken artifact never crashes the page.\n */\n\nimport { Component } from 'react'\nimport type { ReactNode } from 'react'\nimport { UIJsonViewer } from '@kb-labs/sdk/studio'\nimport { MarkdownViewer } from './MarkdownViewer'\nimport { IssuesViewer } from './IssuesViewer'\nimport { TableViewer } from './TableViewer'\nimport { DiffViewer } from './DiffViewer'\nimport { LogViewer } from './LogViewer'\nimport { LinkViewer } from './LinkViewer'\n\nexport interface ArtifactViewerProps {\n type: 'markdown' | 'issues' | 'table' | 'diff' | 'log' | 'json' | 'link'\n data: unknown\n label?: string\n editable?: boolean\n onEdit?: (newValue: unknown) => void\n}\n\nclass ArtifactErrorBoundary extends Component<{ children: ReactNode; label?: string }, { error: Error | null }> {\n override state = { error: null as Error | null };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static getDerivedStateFromError(error: Error): any { return { error }; }\n override render() {\n if (this.state.error) {\n return (\n <span style={{ color: 'var(--text-tertiary)', fontSize: 12, fontStyle: 'italic' }}>\n {this.props.label ?? 'Artifact'}: render error\n </span>\n )\n }\n return this.props.children\n }\n}\n\nfunction ArtifactViewerInner({ type, data, label, editable, onEdit }: ArtifactViewerProps) {\n if (data == null) {return null}\n if (type === 'link') {return <LinkViewer data={data} label={label} />}\n if (type === 'markdown') {return <MarkdownViewer data={data} editable={editable} onEdit={onEdit} />}\n if (type === 'issues') {return <IssuesViewer data={data} />}\n if (type === 'table') {return <TableViewer data={data} />}\n if (type === 'diff') {return <DiffViewer data={data} />}\n if (type === 'log') {return <LogViewer data={data} />}\n if (type === 'json') {return <UIJsonViewer data={data} />}\n return null\n}\n\nexport function ArtifactViewer(props: ArtifactViewerProps) {\n return (\n <ArtifactErrorBoundary label={props.label}>\n <ArtifactViewerInner {...props} />\n </ArtifactErrorBoundary>\n )\n}\n","/**\n * Dashboard view for a single workflow run.\n * Shows: PhaseProgressBar → Hero block (current step) → Completed steps → Future steps\n */\n\nimport * as React from 'react';\nimport {\n UITypographyText,\n UISpace,\n UIIcon,\n UITag,\n} from '@kb-labs/sdk/studio';\nimport type { WorkflowRun, StepRun, StepArtifact } from '@kb-labs/workflow-contracts';\nimport { PhaseProgressBar, type PhaseStatus } from '../shared/PhaseProgressBar';\nimport { usePipelineModel } from '../../hooks/use-pipeline-graph';\nimport { StatusDot } from '../pipeline/shared';\nimport { ArtifactViewer } from '../artifacts/ArtifactViewer';\n\n// Runtime fields not yet in the schema — accessed via type assertion\ninterface StepRunRuntime extends StepRun {\n progress?: number;\n progressMessage?: string;\n}\n\nfunction getPhaseStatuses(run: WorkflowRun): PhaseStatus[] {\n const model = usePipelineModel(run);\n return 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' : anyActive ? 'active' : 'pending',\n };\n });\n}\n\nfunction flatSteps(run: WorkflowRun): StepRun[] {\n return run.jobs.flatMap((j) => j.steps);\n}\n\nfunction formatDurationMs(ms: number): string {\n if (ms < 1000) { return `${ms}ms`; }\n const s = ms / 1000;\n if (s < 60) { return `${s.toFixed(1)}s`; }\n const m = Math.floor(s / 60);\n const rem = Math.floor(s % 60);\n return `${m}m ${rem}s`;\n}\n\ninterface HeroBlockProps {\n step: StepRun;\n onApprove?: () => void;\n}\n\nfunction HeroBlock({ step, onApprove }: HeroBlockProps) {\n const rt = step as StepRunRuntime;\n const isWaiting = step.status === 'waiting_approval';\n const isRunning = step.status === 'running';\n // artifacts is Record<name, StepArtifact> in contracts\n const artifactsMap = (step.spec?.artifacts) as Record<string, StepArtifact> | undefined;\n const artifacts = artifactsMap ? Object.values(artifactsMap) : [];\n\n return (\n <div style={{\n padding: '20px 24px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 10,\n marginBottom: 'var(--spacing-section)',\n }}>\n {/* Header */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 10, marginBottom: 10 }}>\n <StatusDot status={step.status} />\n <UITypographyText style={{ fontSize: 15, fontWeight: 600, color: 'var(--text-primary)' }}>\n {step.spec?.summary ?? step.name}\n </UITypographyText>\n {step.durationMs && (\n <UITypographyText className=\"typo-caption text-tertiary\" style={{ marginLeft: 'auto' }}>\n {formatDurationMs(step.durationMs)}\n </UITypographyText>\n )}\n </div>\n\n {/* Progress message */}\n {rt.progressMessage && (\n <UITypographyText className=\"typo-description text-secondary\" style={{ marginBottom: 10, display: 'block' }}>\n {rt.progressMessage}\n </UITypographyText>\n )}\n\n {/* Progress bar */}\n {rt.progress != null && (\n <div style={{ marginBottom: 12 }}>\n <div style={{\n height: 6,\n background: 'var(--border-primary)',\n borderRadius: 3,\n overflow: 'hidden',\n }}>\n <div style={{\n height: '100%',\n width: `${rt.progress}%`,\n background: isWaiting ? 'var(--warning)' : 'var(--link)',\n borderRadius: 3,\n transition: 'width 0.3s ease',\n }} />\n </div>\n <UITypographyText className=\"typo-caption text-tertiary\" style={{ marginTop: 4, display: 'block' }}>\n {rt.progress}%\n </UITypographyText>\n </div>\n )}\n\n {/* Artifacts */}\n {artifacts.length > 0 && step.outputs && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n {artifacts.map((artifact, i) => {\n // Resolve dot-path from outputs\n const data = artifact.source.split('.').reduce<unknown>(\n (acc, key) => (acc && typeof acc === 'object' ? (acc as Record<string, unknown>)[key] : undefined),\n step,\n );\n return (\n <div key={i}>\n <UITypographyText className=\"typo-label text-secondary\" style={{ display: 'block', marginBottom: 6 }}>\n {artifact.label}\n </UITypographyText>\n <ArtifactViewer type={artifact.type} data={data} label={artifact.label} />\n </div>\n );\n })}\n </div>\n )}\n\n {/* Approval CTA */}\n {isWaiting && onApprove && (\n <div style={{ marginTop: 14 }}>\n <button\n onClick={onApprove}\n style={{\n padding: '6px 16px',\n background: 'var(--link)',\n color: 'var(--text-inverse)',\n border: 'none',\n borderRadius: 6,\n fontWeight: 600,\n cursor: 'pointer',\n fontSize: 13,\n }}\n >\n Review &amp; Decide\n </button>\n </div>\n )}\n\n {/* Running indicator */}\n {isRunning && !rt.progressMessage && (\n <UISpace className=\"gap-tight\" style={{ marginTop: 6 }}>\n <UIIcon name=\"LoadingOutlined\" spin style={{ color: 'var(--link)', fontSize: 13 }} />\n <UITypographyText className=\"typo-caption text-secondary\">Running...</UITypographyText>\n </UISpace>\n )}\n </div>\n );\n}\n\ninterface DashboardViewProps {\n run: WorkflowRun;\n onApprove?: (step: StepRun) => void;\n}\n\nconst TERMINAL = ['success', 'failed', 'cancelled', 'skipped'];\n\nfunction StatCard({ label, value, color }: { label: string; value: string; color?: string }) {\n return (\n <div style={{\n flex: 1,\n padding: '16px 20px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 8,\n minWidth: 0,\n }}>\n <div style={{ fontSize: 22, fontWeight: 700, color: color ?? 'var(--text-primary)', lineHeight: 1.2 }}>\n {value}\n </div>\n <div style={{ fontSize: 12, color: 'var(--text-tertiary)', marginTop: 4 }}>\n {label}\n </div>\n </div>\n );\n}\n\nexport function DashboardView({ run, onApprove }: DashboardViewProps) {\n const model = usePipelineModel(run);\n const phases = 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 { label: phase.label, status: allDone ? 'done' : anyActive ? 'active' : 'pending' } as PhaseStatus;\n });\n\n const allSteps = flatSteps(run);\n const isTerminal = TERMINAL.includes(run.status);\n\n const currentStep = !isTerminal\n ? allSteps.find((s) => s.status === 'running' || s.status === 'waiting_approval')\n : null;\n const completedSteps = allSteps.filter((s) => s.status === 'success');\n const failedSteps = allSteps.filter((s) => s.status === 'failed');\n const futureSteps = allSteps.filter((s) => s.status === 'queued' || (s.status as string) === 'pending');\n\n // Total duration\n const totalMs = run.startedAt && run.finishedAt\n ? new Date(run.finishedAt).getTime() - new Date(run.startedAt).getTime()\n : null;\n\n // Steps grouped by phase for terminal view\n const stepsByPhase = model.phases.map((phase) => ({\n label: phase.label,\n steps: phase.steps.map((s) => s.stepRun),\n }));\n const ungroupedSteps = model.phases.length === 0 ? allSteps : [];\n\n // Summary artifacts — any completed/failed step with showInSummary: true artifacts\n // Shown both during active runs (for completed steps) and after terminal\n const summaryArtifacts: { step: StepRun; artifact: StepArtifact; data: unknown }[] = [];\n for (const step of allSteps) {\n if (step.status !== 'success' && step.status !== 'failed') {continue;}\n const artifactsMap = (step.spec?.artifacts) as Record<string, StepArtifact> | undefined;\n if (!artifactsMap) {continue;}\n for (const artifact of Object.values(artifactsMap)) {\n if (!artifact.showInSummary) {continue;}\n const data = artifact.source.split('.').reduce<unknown>(\n (acc, key) => (acc && typeof acc === 'object' ? (acc as Record<string, unknown>)[key] : undefined),\n step,\n );\n summaryArtifacts.push({ step, artifact, data });\n }\n }\n\n return (\n <div>\n {/* Phase bar */}\n {phases.length > 0 && (\n <div style={{\n padding: '12px 16px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 8,\n marginBottom: 16,\n }}>\n <PhaseProgressBar phases={phases} />\n </div>\n )}\n\n {/* ── ACTIVE RUN: hero block ── */}\n {currentStep && (\n <HeroBlock\n step={currentStep}\n onApprove={onApprove ? () => onApprove(currentStep) : undefined}\n />\n )}\n\n {/* ── Summary artifacts (showInSummary: true) — shown as steps complete ── */}\n {summaryArtifacts.length > 0 && (() => {\n const links = summaryArtifacts.filter(a => a.artifact.type === 'link');\n const rich = summaryArtifacts.filter(a => a.artifact.type !== 'link');\n return (\n <div style={{ marginBottom: 16, display: 'flex', flexDirection: 'column', gap: 12 }}>\n {/* link artifacts — inline row */}\n {links.length > 0 && (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 8 }}>\n {links.map(({ artifact, data }, i) => (\n <ArtifactViewer key={i} type=\"link\" data={data} label={artifact.label} />\n ))}\n </div>\n )}\n {/* rich artifacts — full-width blocks */}\n {rich.length > 0 && (\n <div style={{\n padding: '16px 20px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 10,\n display: 'flex', flexDirection: 'column', gap: 16,\n }}>\n {rich.map(({ artifact, data }, i) => (\n <div key={i}>\n <UITypographyText className=\"typo-label text-secondary\" style={{ display: 'block', marginBottom: 6 }}>\n {artifact.label}\n </UITypographyText>\n <ArtifactViewer type={artifact.type} data={data} label={artifact.label} />\n </div>\n ))}\n </div>\n )}\n </div>\n );\n })()}\n\n {/* ── TERMINAL RUN: summary stats ── */}\n {isTerminal && (\n <div style={{ display: 'flex', gap: 12, marginBottom: 20, flexWrap: 'wrap' }}>\n <StatCard label=\"Total steps\" value={String(allSteps.length)} />\n <StatCard label=\"Completed\" value={String(completedSteps.length)} color=\"var(--success)\" />\n {failedSteps.length > 0 && (\n <StatCard label=\"Failed\" value={String(failedSteps.length)} color=\"var(--error)\" />\n )}\n {totalMs != null && (\n <StatCard label=\"Duration\" value={formatDurationMs(totalMs)} />\n )}\n </div>\n )}\n\n {/* ── TERMINAL RUN: steps by phase ── */}\n {isTerminal && stepsByPhase.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 20 }}>\n {stepsByPhase.map((phase) => (\n <div key={phase.label}>\n <UITypographyText className=\"typo-label text-secondary\" style={{ display: 'block', marginBottom: 8 }}>\n {phase.label}\n </UITypographyText>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {phase.steps.map((step) => (\n <div key={step.id} style={{\n display: 'flex', alignItems: 'center', gap: 8,\n padding: '7px 12px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 6,\n }}>\n <UIIcon\n name={step.status === 'success' ? 'CheckCircleOutlined' : step.status === 'failed' ? 'CloseCircleOutlined' : 'MinusCircleOutlined'}\n style={{ fontSize: 13, color: step.status === 'success' ? 'var(--success)' : step.status === 'failed' ? 'var(--error)' : 'var(--text-tertiary)', flexShrink: 0 }}\n />\n <UITypographyText className=\"typo-body\" style={{ flex: 1, minWidth: 0 }}>\n {step.spec?.summary ?? step.name}\n </UITypographyText>\n {step.durationMs && (\n <UITypographyText className=\"typo-caption text-tertiary\" style={{ flexShrink: 0 }}>\n {formatDurationMs(step.durationMs)}\n </UITypographyText>\n )}\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* ── TERMINAL RUN: no phases — flat list ── */}\n {isTerminal && ungroupedSteps.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {ungroupedSteps.map((step) => (\n <div key={step.id} style={{\n display: 'flex', alignItems: 'center', gap: 8,\n padding: '7px 12px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 6,\n }}>\n <UIIcon\n name={step.status === 'success' ? 'CheckCircleOutlined' : step.status === 'failed' ? 'CloseCircleOutlined' : 'MinusCircleOutlined'}\n style={{ fontSize: 13, color: step.status === 'success' ? 'var(--success)' : step.status === 'failed' ? 'var(--error)' : 'var(--text-tertiary)', flexShrink: 0 }}\n />\n <UITypographyText className=\"typo-body\" style={{ flex: 1 }}>\n {step.spec?.summary ?? step.name}\n </UITypographyText>\n {step.durationMs && (\n <UITypographyText className=\"typo-caption text-tertiary\">\n {formatDurationMs(step.durationMs)}\n </UITypographyText>\n )}\n </div>\n ))}\n </div>\n )}\n\n {/* ── ACTIVE RUN: completed + upcoming ── */}\n {!isTerminal && completedSteps.length > 0 && (\n <div style={{ marginBottom: 16 }}>\n <UITypographyText className=\"typo-label text-secondary\" style={{ display: 'block', marginBottom: 8 }}>\n Completed ({completedSteps.length})\n </UITypographyText>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {completedSteps.map((step) => (\n <div key={step.id} style={{\n display: 'flex', alignItems: 'center', gap: 8,\n padding: '7px 12px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 6,\n }}>\n <UIIcon name=\"CheckCircleOutlined\" style={{ color: 'var(--success)', fontSize: 13 }} />\n <UITypographyText className=\"typo-body\">{step.spec?.summary ?? step.name}</UITypographyText>\n {step.durationMs && (\n <UITypographyText className=\"typo-caption text-tertiary\" style={{ marginLeft: 'auto' }}>\n {formatDurationMs(step.durationMs)}\n </UITypographyText>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {!isTerminal && futureSteps.length > 0 && (\n <div>\n <UITypographyText className=\"typo-label text-secondary\" style={{ display: 'block', marginBottom: 8 }}>\n Upcoming ({futureSteps.length})\n </UITypographyText>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {futureSteps.map((step) => (\n <div key={step.id} style={{\n display: 'flex', alignItems: 'center', gap: 8,\n padding: '7px 12px',\n border: '1px dashed var(--border-primary)',\n borderRadius: 6,\n opacity: 0.5,\n }}>\n <UIIcon name=\"ClockCircleOutlined\" style={{ color: 'var(--text-tertiary)', fontSize: 13 }} />\n <UITypographyText className=\"typo-body text-secondary\">{step.spec?.summary ?? step.name}</UITypographyText>\n {step.spec?.phase && (\n <UITag style={{ marginLeft: 'auto', opacity: 0.7 }}>{step.spec.phase}</UITag>\n )}\n </div>\n ))}\n </div>\n </div>\n )}\n\n {allSteps.length === 0 && (\n <div style={{ textAlign: 'center', padding: '40px 0' }}>\n <UITypographyText className=\"typo-description text-secondary\">No execution data</UITypographyText>\n </div>\n )}\n </div>\n );\n}\n","/**\n * @module @kb-labs/studio-app/modules/workflows/pages/workflow-run-page\n * Workflow run detail page with live SSE logs, jobs/steps accordion, and approval modal\n */\n\nimport { UIPage, UIPageHeader, UIPageSection } from '@kb-labs/sdk/studio'\nimport { useMemo, useState, useEffect, useRef } from 'react'\nimport { useParams, Link } from 'react-router-dom'\nimport {\n UIButton, UITypographyText,\n UITitle, UIAlert, UIList, UIListItem, UIAccordion, UITabs, UIJsonViewer,\n} from '@kb-labs/sdk/studio'\nimport type { UIAccordionItem, UITabItem } from '@kb-labs/sdk/studio'\nimport { useData, useMutateData, useSSE } from '@kb-labs/sdk/studio'\nimport type { WorkflowRun, StepRun } from '@kb-labs/workflow-contracts'\nimport type { WorkflowLogEvent } from '@kb-labs/workflow-contracts/rest-api'\nimport { WorkflowStatusBadge } from '../components/shared/WorkflowStatusBadge'\nimport { ApprovalModal } from '../components/ApprovalModal'\nimport { PipelineView } from '../components/pipeline/PipelineView'\nimport { DashboardView } from '../components/dashboard/DashboardView'\nimport { ViewModeSelector } from '../components/shared/ViewModeSelector'\n\nconst Text = UITypographyText\nconst Title = UITitle\n\n// --- GitHub Actions style execution log ---\n\nconst STATUS_ICON: Record<string, string> = {\n 'queued': '\\u25CB',\n 'running': '\\u25C9',\n 'success': '\\u2713',\n 'failed': '\\u2717',\n 'cancelled': '\\u2298',\n 'skipped': '\\u2014',\n 'waiting_approval': '\\u23F8',\n}\n\nconst STATUS_COLOR: Record<string, string> = {\n 'queued': '#8b949e',\n 'running': '#d29922',\n 'success': '#3fb950',\n 'failed': '#f85149',\n 'cancelled': '#8b949e',\n 'skipped': '#8b949e',\n 'waiting_approval': '#d29922',\n}\n\nfunction eventTypeToStatus(type: string): string {\n if (type.endsWith('.started')) {return 'running'}\n if (type.endsWith('.succeeded') || type.endsWith('.finished')) {return 'success'}\n if (type.endsWith('.failed')) {return 'failed'}\n if (type.endsWith('.cancelled')) {return 'cancelled'}\n if (type.endsWith('.skipped')) {return 'skipped'}\n if (type.endsWith('.waitingApproval')) {return 'waiting_approval'}\n if (type.endsWith('.queued')) {return 'queued'}\n return 'running'\n}\n\nfunction formatDurationMs(ms: number): string {\n if (ms < 1000) {return `${ms}ms`}\n const s = ms / 1000\n if (s < 60) {return `${s.toFixed(1)}s`}\n const m = Math.floor(s / 60)\n const rem = Math.floor(s % 60)\n return `${m}m ${rem}s`\n}\n\nfunction formatTime(ts?: string): string {\n if (!ts) {return ''}\n try {\n return new Date(ts).toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' })\n } catch { return '' }\n}\n\ninterface LogLine {\n time: string\n text: string\n stream?: 'stdout' | 'stderr'\n}\n\n// Strip ANSI escape codes from text\n \nconst ANSI_RE = /\\x1b\\[[0-9;]*[A-Za-z]|\\x1b\\].*?\\x07/g\nfunction stripAnsi(s: string): string { return s.replace(ANSI_RE, '') }\n\nfunction extractLogLines(ev: WorkflowLogEvent): LogLine[] {\n const time = formatTime(ev.timestamp)\n const payload = ev.payload as Record<string, unknown> | undefined\n if (!payload) {return []}\n\n // Live log.appended events (real-time streaming)\n if (ev.type === 'log.appended') {\n const msg = typeof payload.message === 'string' ? stripAnsi(payload.message) : ''\n if (!msg) {return []}\n const stream = (payload.stream as 'stdout' | 'stderr') ?? 'stdout'\n return [{ time, text: msg, stream }]\n }\n\n if (payload.outputs && typeof payload.outputs === 'object') {\n const outputs = payload.outputs as Record<string, unknown>\n if (typeof outputs.stdout === 'string' && outputs.stdout.trim()) {\n return stripAnsi(outputs.stdout).trim().split('\\n').map(line => ({ time, text: line, stream: 'stdout' as const }))\n }\n }\n if (typeof payload.stdout === 'string' && payload.stdout.trim()) {\n return stripAnsi(payload.stdout).trim().split('\\n').map(line => ({ time, text: line, stream: 'stdout' as const }))\n }\n if (typeof payload.error === 'string') {\n return [{ time, text: payload.error, stream: 'stderr' }]\n }\n if (typeof payload.message === 'string') {\n return [{ time, text: payload.message }]\n }\n if (typeof payload.line === 'string') {\n return [{ time, text: payload.line }]\n }\n if (typeof payload.text === 'string') {\n return [{ time, text: payload.text }]\n }\n const keys = Object.keys(payload).filter(k => !['status', 'jobName', 'durationMs', 'attempt'].includes(k))\n if (keys.length === 0) {return []}\n return [{ time, text: JSON.stringify(payload, null, 2) }]\n}\n\ninterface StepLogGroup {\n stepId: string\n stepName: string\n status: string\n command?: string\n events: WorkflowLogEvent[]\n outputs?: Record<string, unknown>\n error?: Record<string, unknown> | null\n spec?: { name: string; uses?: string; with?: Record<string, unknown> }\n startedAt?: string\n finishedAt?: string\n durationMs?: number\n}\n\ninterface JobLogGroup {\n jobId: string\n jobName: string\n status: string\n steps: StepLogGroup[]\n events: WorkflowLogEvent[]\n startedAt?: string\n finishedAt?: string\n durationMs?: number\n error?: Record<string, unknown> | null\n}\n\nfunction buildLogGroups(events: WorkflowLogEvent[], run: WorkflowRun): JobLogGroup[] {\n const jobMap = new Map<string, JobLogGroup>()\n\n for (const job of run.jobs) {\n const stepGroups: StepLogGroup[] = job.steps.map(s => ({\n stepId: s.id,\n stepName: s.name,\n status: s.status,\n command: (s as any).command,\n events: [],\n outputs: s.outputs ?? undefined,\n error: s.error,\n spec: s.spec,\n startedAt: s.startedAt,\n finishedAt: s.finishedAt,\n durationMs: s.durationMs,\n }))\n jobMap.set(job.id, {\n jobId: job.id,\n jobName: job.jobName,\n status: job.status,\n steps: stepGroups,\n events: [],\n startedAt: job.startedAt,\n finishedAt: job.finishedAt,\n durationMs: job.durationMs,\n error: job.error,\n })\n }\n\n for (const ev of events) {\n if (!ev.jobId) {continue}\n let group = jobMap.get(ev.jobId)\n if (!group) {\n group = {\n jobId: ev.jobId,\n jobName: ev.jobId,\n status: eventTypeToStatus(ev.type),\n steps: [],\n events: [],\n }\n jobMap.set(ev.jobId, group)\n }\n\n if (ev.type.startsWith('job.')) {\n group.status = eventTypeToStatus(ev.type)\n if (ev.payload?.jobName) {group.jobName = String(ev.payload.jobName)}\n if (ev.payload?.durationMs) {group.durationMs = Number(ev.payload.durationMs)}\n }\n\n if (ev.stepId) {\n let step = group.steps.find(s => s.stepId === ev.stepId)\n if (!step) {\n step = { stepId: ev.stepId, stepName: ev.stepId, status: 'queued', events: [] }\n group.steps.push(step)\n }\n step.events.push(ev)\n if (ev.type.startsWith('step.')) {\n step.status = eventTypeToStatus(ev.type)\n }\n } else {\n group.events.push(ev)\n }\n }\n\n return Array.from(jobMap.values())\n}\n\nconst LOG_OUTPUT_KEYS = new Set(['stdout', 'stderr', 'exitCode', 'ok'])\n\nfunction StepPanel({ step, onApprove }: { step: StepLogGroup; onApprove?: () => void }) {\n const sseLines: LogLine[] = step.events.flatMap(extractLogLines)\n const logRef = useRef<HTMLPreElement>(null)\n\n // Auto-scroll to bottom when new lines arrive\n useEffect(() => {\n const el = logRef.current\n if (!el) {return}\n const isNearBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 80\n if (isNearBottom) {\n el.scrollTop = el.scrollHeight\n }\n }, [sseLines.length])\n\n const pollingLines: LogLine[] = useMemo(() => {\n if (sseLines.length > 0) {return []}\n const lines: LogLine[] = []\n if (step.outputs) {\n const stdout = step.outputs.stdout\n const stderr = step.outputs.stderr\n if (typeof stdout === 'string' && stdout.trim()) {\n for (const line of stdout.trim().split('\\n')) {\n lines.push({ time: '', text: line })\n }\n }\n if (typeof stderr === 'string' && stderr.trim()) {\n for (const line of stderr.trim().split('\\n')) {\n lines.push({ time: '', text: line })\n }\n }\n // If no stdout/stderr but has structured data — show compact summary\n if (lines.length === 0) {\n const dataKeys = Object.keys(step.outputs).filter(k => !LOG_OUTPUT_KEYS.has(k))\n if (dataKeys.length > 0) {\n lines.push({ time: '', text: `Completed with output: { ${dataKeys.join(', ')} }` })\n }\n }\n }\n if (step.error) {\n const msg = (step.error as Record<string, unknown>).message\n if (typeof msg === 'string') {\n lines.push({ time: '', text: msg })\n }\n }\n return lines\n }, [step.outputs, step.error, sseLines.length])\n\n const lines = sseLines.length > 0 ? sseLines : pollingLines\n const isWaiting = step.status === 'waiting_approval'\n\n const dataOutputs = useMemo(() => {\n if (!step.outputs) {return null}\n const filtered: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(step.outputs)) {\n if (!LOG_OUTPUT_KEYS.has(k)) {filtered[k] = v}\n }\n return Object.keys(filtered).length > 0 ? filtered : null\n }, [step.outputs])\n\n const hasData = dataOutputs !== null\n const hasInputs = step.spec?.with != null && Object.keys(step.spec.with).length > 0\n const hasError = step.error != null\n const hasTabs = hasData || hasInputs || hasError\n\n const logContent = (\n <div style={{ fontFamily: 'monospace', fontSize: 13 }}>\n {step.command && (\n <div style={{ padding: '4px 12px', color: '#8b949e', fontSize: 12 }}>\n $ {step.command}\n </div>\n )}\n {lines.length > 0 ? (\n <pre ref={logRef} style={{\n margin: 0,\n padding: '8px 12px',\n background: '#0d1117',\n color: '#c9d1d9',\n borderRadius: 4,\n overflow: 'auto',\n maxHeight: 400,\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n lineHeight: 1.6,\n }}>\n {lines.map((l, i) => (\n <span key={i}>\n {l.time && <span style={{ color: '#484f58', userSelect: 'none', marginRight: 12 }}>{l.time}</span>}\n <span style={l.stream === 'stderr' ? { color: '#f85149' } : undefined}>{l.text}</span>\n {'\\n'}\n </span>\n ))}\n </pre>\n ) : (\n <Text type=\"secondary\" style={{ fontSize: 12, padding: '4px 12px', display: 'block' }}>\n {step.status === 'running' ? 'Waiting for output...' :\n step.status === 'queued' ? 'Queued' :\n isWaiting ? 'Waiting for approval' :\n 'No output'}\n </Text>\n )}\n {isWaiting && onApprove && (\n <div style={{ padding: '8px 12px' }}>\n <UIButton size=\"small\" variant=\"primary\" onClick={onApprove}>\n Review &amp; Decide\n </UIButton>\n </div>\n )}\n </div>\n )\n\n if (!hasTabs) {return logContent}\n\n const tabItems: UITabItem[] = [\n { key: 'log', label: 'Log', children: logContent },\n ]\n if (hasData) {\n tabItems.push({ key: 'data', label: 'Data', children: <UIJsonViewer data={dataOutputs} /> })\n }\n if (hasInputs) {\n tabItems.push({ key: 'inputs', label: 'Inputs', children: <UIJsonViewer data={step.spec!.with} /> })\n }\n if (hasError) {\n tabItems.push({ key: 'error', label: 'Error', children: <UIJsonViewer data={step.error} /> })\n }\n\n return <UITabs items={tabItems} size=\"small\" defaultActiveKey=\"log\" />\n}\n\ninterface JobStepLogProps {\n events: WorkflowLogEvent[]\n run: WorkflowRun\n onApprove?: (step: StepRun) => void\n}\n\nfunction JobStepLog({ events, run, onApprove }: JobStepLogProps) {\n const groups = useMemo(() => buildLogGroups(events, run), [events, run])\n\n const stepRunMap = useMemo(() => {\n const map = new Map<string, StepRun>()\n for (const job of run.jobs) {\n for (const step of job.steps) {\n map.set(step.id, step)\n }\n }\n return map\n }, [run])\n\n if (groups.length === 0) {\n return <Text type=\"secondary\">No execution data yet.</Text>\n }\n\n const activeJobKeys = groups\n .filter(g => g.status === 'running' || g.status === 'failed' || g.status === 'waiting_approval')\n .map(g => g.jobId)\n const defaultJobKeys = activeJobKeys.length > 0 ? activeJobKeys : groups.map(g => g.jobId)\n\n const jobItems: UIAccordionItem[] = groups.map(group => {\n const icon = STATUS_ICON[group.status] ?? '?'\n const color = STATUS_COLOR[group.status] ?? '#8b949e'\n const duration = group.durationMs ? formatDurationMs(group.durationMs) : null\n\n const activeStepKeys = group.steps\n .filter(s => s.status === 'running' || s.status === 'failed' || s.status === 'waiting_approval')\n .map(s => s.stepId)\n const defaultStepKeys = activeStepKeys.length > 0\n ? activeStepKeys\n : group.steps.filter(s => s.status !== 'queued').map(s => s.stepId)\n\n const stepItems: UIAccordionItem[] = group.steps.map(step => {\n const sIcon = STATUS_ICON[step.status] ?? '?'\n const sColor = STATUS_COLOR[step.status] ?? '#8b949e'\n const sDuration = step.durationMs ? formatDurationMs(step.durationMs) : null\n return {\n key: step.stepId,\n label: step.stepName,\n extra: (\n <span style={{ display: 'flex', alignItems: 'center', gap: 8, fontSize: 12 }}>\n {sDuration && <span style={{ color: '#8b949e' }}>{sDuration}</span>}\n <span style={{ color: sColor, fontWeight: 600, fontSize: 14 }}>{sIcon}</span>\n </span>\n ),\n children: (\n <StepPanel\n step={step}\n onApprove={\n step.status === 'waiting_approval' && onApprove\n ? () => {\n const sr = stepRunMap.get(step.stepId)\n if (sr) {onApprove(sr)}\n }\n : undefined\n }\n />\n ),\n }\n })\n\n return {\n key: group.jobId,\n label: group.jobName,\n extra: (\n <span style={{ display: 'flex', alignItems: 'center', gap: 8, fontSize: 12 }}>\n {duration && <span style={{ color: '#8b949e' }}>{duration}</span>}\n <span style={{ color, fontWeight: 600, fontSize: 14 }}>{icon}</span>\n </span>\n ),\n children: (\n <>\n {group.error && group.status === 'failed' && (\n <UIAlert\n variant=\"error\"\n message=\"Job failed\"\n description={\n typeof group.error.message === 'string'\n ? group.error.message\n : JSON.stringify(group.error, null, 2)\n }\n showIcon\n style={{ marginBottom: 8 }}\n />\n )}\n {stepItems.length > 0 ? (\n <UIAccordion\n items={stepItems}\n defaultActiveKey={defaultStepKeys}\n size=\"small\"\n ghost\n style={{ background: 'transparent' }}\n />\n ) : (\n <Text type=\"secondary\" style={{ fontSize: 12 }}>No steps.</Text>\n )}\n </>\n ),\n }\n })\n\n return (\n <UIAccordion\n items={jobItems}\n defaultActiveKey={defaultJobKeys}\n size=\"small\"\n style={{ background: 'var(--bg-secondary, #f6f8fa)' }}\n />\n )\n}\n\nexport default function WorkflowRunDetail() {\n const params = useParams<{ runId: string }>()\n const runId = params.runId ?? null\n const { data: runData, isLoading, error, refetch } = useData<{ run: WorkflowRun }>(\n runId ? `/exec/api/v1/runs/${runId}` : '/exec/api/v1/runs/__none__',\n { enabled: !!runId, pollingMs: 3000 },\n )\n const run = runData?.run ?? (runData as unknown as WorkflowRun | undefined)\n const cancelMutation = useMutateData<void, void>(`/exec/api/v1/runs/${runId ?? '__none__'}/cancel`)\n const resolveApproval = useMutateData<\n { runId: string; jobId: string; stepId: string; action: string; comment?: string },\n unknown\n >(`/exec/api/v1/runs/${runId ?? '__none__'}/approvals/resolve`)\n const isRunActive = run != null && !['success', 'failed', 'cancelled', 'skipped'].includes(run.status)\n\n const { events, error: logError, isConnected } = useSSE<WorkflowLogEvent>(\n isRunActive && runId ? `/exec/api/v1/runs/${runId}/events` : null,\n { params: { follow: 1 }, reconnect: true },\n )\n\n const [approvalStep, setApprovalStep] = useState<StepRun | null>(null)\n const [viewMode, setViewMode] = useState<'dashboard' | 'pipeline' | 'engineering'>('dashboard')\n\n const VIEW_MODES = {\n dashboard: { label: 'Dashboard' },\n pipeline: { label: 'Pipeline' },\n engineering: { label: 'Engineering' },\n } as const\n\n useEffect(() => {\n if (logError && isRunActive) {\n void refetch()\n }\n }, [logError, isRunActive, refetch])\n\n const isTerminal = run != null && !isRunActive\n\n const hasPendingApprovals = run?.jobs.some(j =>\n j.steps.some(s => (s.status as string) === 'waiting_approval')\n )\n\n const handleApprovalResolve = async (action: 'approve' | 'reject', comment?: string) => {\n if (!approvalStep || !runId) {return}\n const job = run?.jobs.find(j => j.steps.some(s => s.id === approvalStep.id))\n if (!job) {return}\n await resolveApproval.mutateAsync({\n runId,\n jobId: job.id,\n stepId: approvalStep.id,\n action,\n comment,\n })\n setApprovalStep(null)\n void refetch()\n }\n\n const shortRunId = runId ? `${runId.slice(0, 12)}...` : ''\n\n return (\n <UIPage>\n <UIPageHeader\n title={run?.name ?? `Workflow Run ${shortRunId}`}\n description={run ? `Run ${shortRunId}` : 'Detailed status of the workflow execution'}\n breadcrumbs={[\n { title: 'Home', href: '/' },\n { title: 'Workflows', href: '/workflows' },\n { title: 'Runs', href: '/p/workflows/runs' },\n { title: shortRunId },\n ]}\n actions={\n <div style={{ display: 'flex', gap: 8 }}>\n <UIButton onClick={() => refetch()} disabled={isLoading}>\n Refresh\n </UIButton>\n {run && !isTerminal && (\n <UIButton\n danger\n loading={cancelMutation.isLoading}\n onClick={() => runId && cancelMutation.mutate()}\n >\n Cancel Run\n </UIButton>\n )}\n </div>\n }\n />\n\n {error && <UIAlert variant=\"error\" message=\"Failed to load workflow run\" description={String(error)} closable />}\n\n {hasPendingApprovals && (\n <UIAlert\n variant=\"warning\"\n message=\"Waiting for your approval\"\n description=\"One or more steps require your decision. Expand the step below to review.\"\n showIcon\n style={{ marginBottom: 16 }}\n />\n )}\n\n {isLoading && <UIPageSection><Text>Loading workflow run...</Text></UIPageSection>}\n {!isLoading && !run && !error && <UIPageSection><Text>Workflow run not found.</Text></UIPageSection>}\n {run && (\n <UIPageSection>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 16,\n padding: '12px 16px',\n background: 'var(--bg-secondary)',\n border: '1px solid var(--border-primary)',\n borderRadius: 8,\n flexWrap: 'wrap',\n }}>\n <WorkflowStatusBadge status={run.status} />\n <Link\n to={`/p/workflows/definitions/${encodeURIComponent(run.name)}`}\n style={{ color: 'var(--link)', fontWeight: 500, fontSize: 14 }}\n >\n {run.name}\n </Link>\n <span style={{ color: 'var(--text-tertiary)', fontSize: 13 }}>\n v{run.version}\n </span>\n <span style={{ color: 'var(--text-tertiary)', fontSize: 13 }}>\n by {run.trigger.actor ?? 'unknown'}\n </span>\n {run.startedAt && (\n <span style={{ color: 'var(--text-tertiary)', fontSize: 13, marginLeft: 'auto' }}>\n {new Date(run.startedAt).toLocaleString()}\n </span>\n )}\n {run.result?.summary && (\n <span style={{\n fontSize: 13,\n color: 'var(--text-secondary)',\n borderTop: '1px solid var(--border-primary)',\n paddingTop: 8,\n width: '100%',\n }}>\n {run.result.summary}\n </span>\n )}\n </div>\n </UIPageSection>\n )}\n\n {run && (\n <UIPageSection>\n {/* View toggle */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: 16 }}>\n <Title level={4} style={{ margin: 0 }}>Execution</Title>\n <ViewModeSelector views={VIEW_MODES} current={viewMode} onChange={setViewMode} />\n </div>\n\n {isRunActive && !isConnected && !logError && <UIAlert variant=\"info\" message=\"Connecting to event stream...\" showIcon style={{ marginBottom: 12 }} />}\n {isRunActive && logError && <UIAlert variant=\"error\" message=\"Event stream error\" description={logError.message} style={{ marginBottom: 12 }} />}\n\n {viewMode === 'dashboard' && (\n <DashboardView\n run={run}\n onApprove={(step) => setApprovalStep(step)}\n />\n )}\n {viewMode === 'pipeline' && (\n <PipelineView\n run={run}\n events={events}\n onApprove={(step) => setApprovalStep(step)}\n />\n )}\n {viewMode === 'engineering' && (\n <JobStepLog\n events={events}\n run={run}\n onApprove={(step) => setApprovalStep(step)}\n />\n )}\n </UIPageSection>\n )}\n\n {run?.result && (\n <UIPageSection>\n <Title level={4}>Result Metrics</Title>\n {run.result.metrics ? (\n <UIList\n bordered\n size=\"small\"\n dataSource={Object.entries(run.result.metrics).map(([key, value]) => ({\n key,\n value,\n }))}\n renderItem={({ key, value }) => (\n <UIListItem>\n <Text strong>{key}</Text>\n <span style={{ marginLeft: 8 }}>{String(value ?? '-')}</span>\n </UIListItem>\n )}\n />\n ) : (\n <Text type=\"secondary\">No metrics recorded.</Text>\n )}\n {run.result.error && (\n <UIAlert\n style={{ marginTop: 16 }}\n variant=\"error\"\n message={run.result.error.message}\n description={\n run.result.error.details ? JSON.stringify(run.result.error.details, null, 2) : undefined\n }\n showIcon\n />\n )}\n </UIPageSection>\n )}\n\n <ApprovalModal\n open={approvalStep !== null}\n step={approvalStep}\n runId={runId ?? ''}\n onClose={() => setApprovalStep(null)}\n onResolve={handleApprovalResolve}\n isLoading={resolveApproval.isLoading}\n error={resolveApproval.error instanceof Error ? resolveApproval.error : null}\n />\n </UIPage>\n )\n}\n"],"names":["n","btoa","unescape","encodeURIComponent","JSON","r","i","document","window","e","Error","Text","UITypographyText","Paragraph","UITypographyParagraph","Title","UITitle","TextArea","UIInputTextArea","ApprovalModal","param","_step_spec","step","open","onClose","onResolve","isLoading","error","_useState","comment","setComment","_useState1","pendingAction","setPendingAction","context","title","instructions","contextData","_type_of","handleResolve","action","undefined","UIModal","Object","key","value","String","UIAlert","onChange","UIButton","onClick","STATUS_LABEL","STATUS_COLOR","ANSI_RE","stripAnsi","s","extractLogLines","ev","time","Date","p","_p_outputs","_p_outputs1","_p_stream","msg","stream","stdout","text","stderr","LOG_SKIP_KEYS","Set","StepDetailDrawer","events","onApprove","sseLines","useMemo","logRef","useRef","useEffect","el","pollingLines","lines","_step_outputs","keys","k","dataOutputs","filtered","_iteratorError","v","hasInputs","hasError","hasData","logContent","l","tabItems","UIJsonViewer","statusColor","duration","formatDuration","ms","Math","UIDrawer","UITabs","injected","S_COLOR","S_LABEL","StatusDot","_S_COLOR_status","status","color","filled","PHASE_COLOR","GateDecisionBanner","stepRun","targetStepName","outputs","decision","iteration","isRestart","errorMsg","maxIterReached","StepRow","_S_LABEL_status","isReworkGate","isReworkTarget","reworkActive","rowRef","stepType","isWaiting","isFailed","isRunning","isQueued","isApproval","isGate","gateOutputs","gateAction","highlight","onMouseEnter","onMouseLeave","showBanner","ReworkBracket","gateEl","targetEl","containerEl","isActive","pos","setPos","measure","cr","gr","tr","ro","ResizeObserver","PipelineView","_rowRefs_current_get","_rowRefs_current_get1","run","model","usePipelineModel","selected","setSelected","containerRef","rowRefs","Map","reworkLoop","gateStep","targetStep","stepEvents","phase","pi","_PHASE_COLOR_phase_label","doneCount","isLast","id","flatIdx","isGateWithLoop","S","escapeHtml","heading","level","style","listItems","block","ordered","itemRe","items","line","tag","MarkdownViewer","codeBlocks","html","data","editable","onEdit","editing","setEditing","editValue","setEditValue","md","_","code","idx","c","rawHref","url","t","trimmed","_codeBlocks_Number","Number","SEVERITY_COLOR","IssuesViewer","issues","Array","styles","issue","_issue_severity","_SEVERITY_COLOR_severity","_ref","severity","UITag","TableViewer","_rows_","rows","columns","UITable","DiffViewer","_JSON_stringify","UIDiffViewer","LogViewer","LinkViewer","label","ArtifactErrorBoundary","render","_this_props_label","getDerivedStateFromError","Component","ArtifactViewerInner","type","ArtifactViewer","props","formatDurationMs","m","rem","HeroBlock","_step_spec1","artifactsMap","artifacts","rt","artifact","acc","UISpace","UIIcon","TERMINAL","StatCard","DashboardView","links","rich","phases","allDone","anyActive","allSteps","j","isTerminal","currentStep","completedSteps","failedSteps","futureSteps","totalMs","stepsByPhase","ungroupedSteps","summaryArtifacts","_iteratorError1","PhaseProgressBar","a","STATUS_ICON","eventTypeToStatus","formatTime","ts","payload","_payload_stream","LOG_OUTPUT_KEYS","StepPanel","line1","dataKeys","JobStepLog","groups","buildLogGroups","jobMap","job","stepGroups","_s_outputs","_ev_payload","_ev_payload1","group","stepRunMap","map","activeJobKeys","g","defaultJobKeys","jobItems","_STATUS_ICON_group_status","_STATUS_COLOR_group_status","icon","activeStepKeys","defaultStepKeys","stepItems","_STATUS_ICON_step_status","_STATUS_COLOR_step_status","sIcon","sColor","sDuration","sr","UIAccordion","WorkflowRunDetail","_params_runId","_run_trigger_actor","_run_result","runId","useParams","_useData","runData","refetch","cancelMutation","useMutateData","resolveApproval","isRunActive","_useSSE","logError","isConnected","approvalStep","setApprovalStep","viewMode","setViewMode","hasPendingApprovals","shortRunId","UIPage","UIPageHeader","UIPageSection","WorkflowStatusBadge","Link","ViewModeSelector","UIList","renderItem","UIListItem","_instanceof"],"mappings":"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"}