@echothink-ui/task 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +5 -0
  2. package/dist/components/BackendThinkingChain.d.ts +2 -0
  3. package/dist/components/BlockingReasonPanel.d.ts +2 -0
  4. package/dist/components/DAGEdge.d.ts +2 -0
  5. package/dist/components/DAGLegend.d.ts +2 -0
  6. package/dist/components/DAGNode.d.ts +4 -0
  7. package/dist/components/DecisionRequiredPanel.d.ts +2 -0
  8. package/dist/components/HumanInterventionPanel.d.ts +2 -0
  9. package/dist/components/MobileTaskShell.d.ts +12 -0
  10. package/dist/components/TaskApprovalPanel.d.ts +2 -0
  11. package/dist/components/TaskCard.d.ts +2 -0
  12. package/dist/components/TaskDependencyList.d.ts +2 -0
  13. package/dist/components/TaskDetailPanel.d.ts +2 -0
  14. package/dist/components/TaskHandoffPanel.d.ts +2 -0
  15. package/dist/components/TaskProgressIndicator.d.ts +2 -0
  16. package/dist/components/TaskRetryPanel.d.ts +2 -0
  17. package/dist/components/TaskRunLog.d.ts +2 -0
  18. package/dist/components/TaskStatusBadge.d.ts +2 -0
  19. package/dist/components/TaskTable.d.ts +5 -0
  20. package/dist/components/TaskTimeline.d.ts +2 -0
  21. package/dist/components/TaskWaveDAG.d.ts +2 -0
  22. package/dist/components/TaskWaveHeader.d.ts +2 -0
  23. package/dist/components/TaskWaveTable.d.ts +2 -0
  24. package/dist/components/utils.d.ts +13 -0
  25. package/dist/index.cjs +2434 -0
  26. package/dist/index.cjs.map +1 -0
  27. package/dist/index.css +2402 -0
  28. package/dist/index.css.map +1 -0
  29. package/dist/index.d.ts +27 -0
  30. package/dist/index.js +2388 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/types.d.ts +249 -0
  33. package/package.json +45 -0
  34. package/src/components/BackendThinkingChain.tsx +129 -0
  35. package/src/components/BlockingReasonPanel.tsx +67 -0
  36. package/src/components/DAGEdge.tsx +97 -0
  37. package/src/components/DAGLegend.tsx +86 -0
  38. package/src/components/DAGNode.tsx +103 -0
  39. package/src/components/DecisionRequiredPanel.tsx +166 -0
  40. package/src/components/HumanInterventionPanel.tsx +82 -0
  41. package/src/components/MobileTaskShell.tsx +52 -0
  42. package/src/components/TaskApprovalPanel.tsx +159 -0
  43. package/src/components/TaskCard.tsx +71 -0
  44. package/src/components/TaskDependencyList.test.tsx +54 -0
  45. package/src/components/TaskDependencyList.tsx +105 -0
  46. package/src/components/TaskDetailPanel.test.tsx +49 -0
  47. package/src/components/TaskDetailPanel.tsx +139 -0
  48. package/src/components/TaskHandoffPanel.tsx +125 -0
  49. package/src/components/TaskProgressIndicator.tsx +70 -0
  50. package/src/components/TaskRetryPanel.test.tsx +29 -0
  51. package/src/components/TaskRetryPanel.tsx +103 -0
  52. package/src/components/TaskRunLog.tsx +156 -0
  53. package/src/components/TaskStatusBadge.tsx +29 -0
  54. package/src/components/TaskTable.tsx +294 -0
  55. package/src/components/TaskTimeline.tsx +98 -0
  56. package/src/components/TaskWaveDAG.tsx +202 -0
  57. package/src/components/TaskWaveHeader.tsx +82 -0
  58. package/src/components/TaskWaveTable.tsx +151 -0
  59. package/src/components/css.d.ts +1 -0
  60. package/src/components/utils.ts +116 -0
  61. package/src/index.test.tsx +316 -0
  62. package/src/index.tsx +90 -0
  63. package/src/styles.css +2889 -0
  64. package/src/types.ts +289 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/BackendThinkingChain.tsx","../src/components/utils.ts","../src/components/BlockingReasonPanel.tsx","../src/components/DAGEdge.tsx","../src/components/DAGLegend.tsx","../src/components/DAGNode.tsx","../src/components/DecisionRequiredPanel.tsx","../src/components/HumanInterventionPanel.tsx","../src/components/TaskApprovalPanel.tsx","../src/components/TaskCard.tsx","../src/components/TaskDependencyList.tsx","../src/components/TaskStatusBadge.tsx","../src/components/TaskDetailPanel.tsx","../src/components/TaskTimeline.tsx","../src/components/TaskHandoffPanel.tsx","../src/components/TaskProgressIndicator.tsx","../src/components/TaskRetryPanel.tsx","../src/components/TaskRunLog.tsx","../src/components/TaskTable.tsx","../src/components/TaskWaveDAG.tsx","../src/components/TaskWaveHeader.tsx","../src/components/TaskWaveTable.tsx","../src/components/MobileTaskShell.tsx","../src/index.tsx"],"sourcesContent":["import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { Badge, EmptyState, StatusDot, Tag } from \"@echothink-ui/core\";\nimport type { BackendThinkingStep, BackendThinkingChainProps } from \"../types\";\nimport { formatDuration, labelForStatus } from \"./utils\";\n\nconst STREAMING_STATUSES = new Set<BackendThinkingStep[\"status\"]>([\"running\", \"in-progress\"]);\n\nfunction flattenSteps(steps: BackendThinkingStep[]): BackendThinkingStep[] {\n return steps.flatMap((step) => [step, ...flattenSteps(step.children ?? [])]);\n}\n\nfunction currentStreamingStepId(steps: BackendThinkingStep[]) {\n const flattened = flattenSteps(steps);\n\n for (let index = flattened.length - 1; index >= 0; index -= 1) {\n if (STREAMING_STATUSES.has(flattened[index].status)) {\n return flattened[index].id;\n }\n }\n\n return flattened.at(-1)?.id;\n}\n\nfunction ThinkingStepItem({\n step,\n streamingStepId\n}: {\n step: BackendThinkingStep;\n streamingStepId?: string;\n}) {\n const isStreaming = streamingStepId === step.id;\n const hasChildren = Boolean(step.children?.length);\n const [expanded, setExpanded] = React.useState(true);\n\n return (\n <li\n className={clsx(\n \"eth-task-thinking-chain__item\",\n `eth-task-thinking-chain__item--${step.status}`,\n step.redacted && \"eth-task-thinking-chain__item--redacted\"\n )}\n >\n <span className=\"eth-task-thinking-chain__marker\" aria-hidden=\"true\" />\n <details\n className=\"eth-task-thinking-chain__step\"\n open={expanded}\n onToggle={(event) => {\n setExpanded(event.currentTarget.open);\n }}\n >\n <summary className=\"eth-task-thinking-chain__step-header\">\n <span className=\"eth-task-thinking-chain__disclosure-icon\" aria-hidden=\"true\" />\n <span className=\"eth-task-thinking-chain__step-header-inner\">\n <span className=\"eth-task-thinking-chain__step-heading\">\n <strong className=\"eth-task-thinking-chain__step-title\">\n {step.redacted ? \"Restricted step\" : step.title}\n </strong>\n {hasChildren ? (\n <span className=\"eth-task-thinking-chain__branch-count\">\n {step.children?.length} {step.children?.length === 1 ? \"substep\" : \"substeps\"}\n </span>\n ) : null}\n {isStreaming ? (\n <span className=\"eth-task-thinking-chain__streaming\" aria-label=\"Streaming update\">\n <span className=\"eth-task-thinking-chain__pulse\" aria-hidden=\"true\" />\n Streaming\n </span>\n ) : null}\n </span>\n <span className=\"eth-task-thinking-chain__step-meta\">\n {step.redacted ? <Badge severity=\"warning\">Redacted</Badge> : null}\n <StatusDot status={step.status} label={labelForStatus(step.status)} />\n {step.toolName ? <Tag>{step.toolName}</Tag> : null}\n {step.durationMs != null ? (\n <span className=\"eth-task-thinking-chain__duration\">\n {formatDuration(step.durationMs)}\n </span>\n ) : null}\n </span>\n </span>\n </summary>\n {step.redacted ? (\n <p className=\"eth-task-thinking-chain__redacted\">Details are hidden by policy.</p>\n ) : step.summary ? (\n <p className=\"eth-task-thinking-chain__summary\">{step.summary}</p>\n ) : null}\n {hasChildren ? (\n <ol className=\"eth-task-thinking-chain__children\">\n {step.children?.map((child) => (\n <ThinkingStepItem key={child.id} step={child} streamingStepId={streamingStepId} />\n ))}\n </ol>\n ) : null}\n </details>\n </li>\n );\n}\n\nexport function BackendThinkingChain({\n steps = [],\n streaming,\n className,\n ...props\n}: BackendThinkingChainProps) {\n const streamingStepId = React.useMemo(\n () => (streaming ? currentStreamingStepId(steps) : undefined),\n [steps, streaming]\n );\n\n return (\n <section\n {...props}\n className={clsx(\"eth-task-thinking-chain\", className)}\n aria-live={streaming ? \"polite\" : undefined}\n data-eth-component=\"BackendThinkingChain\"\n >\n {steps.length ? (\n <ol className=\"eth-task-thinking-chain__list\">\n {steps.map((step) => (\n <ThinkingStepItem key={step.id} step={step} streamingStepId={streamingStepId} />\n ))}\n </ol>\n ) : (\n <EmptyState title=\"No backend steps\" />\n )}\n </section>\n );\n}\n","import type { EthOperationalStatus, EthSeverity } from \"@echothink-ui/core\";\nimport { statusLabel } from \"@echothink-ui/core\";\nimport type { RiskLevel, TaskPriority, TaskWave } from \"../types\";\n\nexport function severityForStatus(status: EthOperationalStatus): EthSeverity {\n if (status === \"running\" || status === \"queued\" || status === \"in-progress\") return \"info\";\n if (status === \"blocked\" || status === \"failed\") return \"danger\";\n if (status === \"pending-approval\" || status === \"approval-required\" || status === \"warning\") {\n return \"warning\";\n }\n if (status === \"succeeded\" || status === \"completed\" || status === \"synced\") return \"success\";\n return \"neutral\";\n}\n\nexport function severityForPriority(priority?: TaskPriority): EthSeverity {\n if (priority === \"critical\") return \"danger\";\n if (priority === \"high\") return \"warning\";\n if (priority === \"medium\") return \"info\";\n return \"neutral\";\n}\n\nexport function severityForRisk(riskLevel?: RiskLevel): EthSeverity {\n if (riskLevel === \"critical\" || riskLevel === \"high\") return \"danger\";\n if (riskLevel === \"medium\") return \"warning\";\n if (riskLevel === \"low\") return \"info\";\n return \"neutral\";\n}\n\nexport function labelForStatus(status: EthOperationalStatus) {\n return statusLabel(status);\n}\n\nexport function formatDateTime(value?: string | Date) {\n if (!value) return \"-\";\n const date = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(date.valueOf())) return String(value);\n return new Intl.DateTimeFormat(undefined, {\n dateStyle: \"medium\",\n timeStyle: \"short\"\n }).format(date);\n}\n\nexport function relativeTime(value?: string | Date, now = new Date()) {\n if (!value) return \"\";\n const date = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(date.valueOf())) return \"\";\n const deltaSeconds = Math.round((date.getTime() - now.getTime()) / 1000);\n const units: Array<[Intl.RelativeTimeFormatUnit, number]> = [\n [\"year\", 31536000],\n [\"month\", 2592000],\n [\"week\", 604800],\n [\"day\", 86400],\n [\"hour\", 3600],\n [\"minute\", 60]\n ];\n const formatter = new Intl.RelativeTimeFormat(undefined, { numeric: \"auto\" });\n for (const [unit, seconds] of units) {\n if (Math.abs(deltaSeconds) >= seconds) {\n return formatter.format(Math.round(deltaSeconds / seconds), unit);\n }\n }\n return formatter.format(deltaSeconds, \"second\");\n}\n\nexport function formatDuration(durationMs?: number) {\n if (durationMs == null) return \"-\";\n if (durationMs < 1000) return `${durationMs}ms`;\n const seconds = Math.round(durationMs / 1000);\n if (seconds < 60) return `${seconds}s`;\n const minutes = Math.floor(seconds / 60);\n const remainder = seconds % 60;\n if (minutes < 60) return remainder ? `${minutes}m ${remainder}s` : `${minutes}m`;\n const hours = Math.floor(minutes / 60);\n const minuteRemainder = minutes % 60;\n return minuteRemainder ? `${hours}h ${minuteRemainder}m` : `${hours}h`;\n}\n\nexport function clampProgress(value?: number, total = 100) {\n if (value == null || Number.isNaN(value)) return 0;\n if (total <= 0) return 0;\n const percent = total === 100 ? value : (value / total) * 100;\n return Math.max(0, Math.min(100, Math.round(percent)));\n}\n\nexport function waveProgress(wave?: TaskWave) {\n if (!wave?.totalTasks) return 0;\n const completed = (wave.statuses.completed ?? 0) + (wave.statuses.succeeded ?? 0);\n return clampProgress(completed, wave.totalTasks);\n}\n\nexport function statusColor(status?: EthOperationalStatus) {\n switch (status) {\n case \"completed\":\n case \"succeeded\":\n case \"synced\":\n case \"active\":\n return \"var(--eth-color-success)\";\n case \"running\":\n case \"in-progress\":\n case \"queued\":\n return \"var(--eth-color-info)\";\n case \"blocked\":\n case \"failed\":\n case \"approval-required\":\n return \"var(--eth-color-danger)\";\n case \"pending-approval\":\n case \"warning\":\n return \"var(--eth-color-warning)\";\n default:\n return \"var(--eth-color-border-strong)\";\n }\n}\n\nexport function fallbackId(prefix: string) {\n return `${prefix}-${Math.random().toString(36).slice(2)}`;\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { ActionGroup, Badge, EmptyState, Surface } from \"@echothink-ui/core\";\nimport type { BlockingReasonPanelProps } from \"../types\";\n\nexport function BlockingReasonPanel({\n blockers = [],\n className,\n title = \"Blocking reasons\",\n description,\n severity,\n status,\n ...props\n}: BlockingReasonPanelProps) {\n const hasBlockers = blockers.length > 0;\n\n return (\n <Surface\n {...props}\n className={clsx(\"eth-task-blocking-reason-panel\", className)}\n title={title}\n description={description}\n status={status ?? (hasBlockers ? \"blocked\" : undefined)}\n severity={severity ?? (hasBlockers ? \"danger\" : undefined)}\n data-eth-component=\"BlockingReasonPanel\"\n >\n {hasBlockers ? (\n <ul className=\"eth-task-blocking-reason-panel__list\" aria-label=\"Active blocking reasons\">\n {blockers.map((blocker) => {\n const resolveActions = blocker.resolveAction\n ? [\n {\n ...blocker.resolveAction,\n intent: blocker.resolveAction.intent ?? \"tertiary\"\n }\n ]\n : undefined;\n\n return (\n <li key={blocker.id} className=\"eth-task-blocking-reason-panel__item\">\n <div className=\"eth-task-blocking-reason-panel__content\">\n <strong className=\"eth-task-blocking-reason-panel__reason\">\n {blocker.reason}\n </strong>\n <div className=\"eth-task-blocking-reason-panel__meta\">\n <Badge severity=\"danger\">Blocked</Badge>\n {blocker.ownerActor ? <span>Owner: {blocker.ownerActor}</span> : null}\n </div>\n </div>\n {resolveActions ? (\n <div className=\"eth-task-blocking-reason-panel__actions\">\n <ActionGroup actions={resolveActions} />\n </div>\n ) : null}\n </li>\n );\n })}\n </ul>\n ) : (\n <EmptyState\n title=\"No blocking reasons\"\n description=\"This task can continue without unblock actions.\"\n />\n )}\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport type { DAGEdgeProps } from \"../types\";\nimport { labelForStatus, statusColor } from \"./utils\";\n\nfunction markerIdFromUseId(id: string) {\n return `eth-dag-arrow-${id.replace(/[^a-zA-Z0-9_-]/g, \"\")}`;\n}\n\nexport function DAGEdge({\n from,\n to,\n status,\n label,\n className,\n \"aria-label\": ariaLabel,\n ...props\n}: DAGEdgeProps) {\n const reactId = React.useId();\n const markerId = markerIdFromUseId(reactId);\n const horizontal = Math.abs(to.x - from.x) >= Math.abs(to.y - from.y);\n const controlA = horizontal\n ? { x: (from.x + to.x) / 2, y: from.y }\n : { x: from.x, y: (from.y + to.y) / 2 };\n const controlB = horizontal\n ? { x: (from.x + to.x) / 2, y: to.y }\n : { x: to.x, y: (from.y + to.y) / 2 };\n const d = `M ${from.x} ${from.y} C ${controlA.x} ${controlA.y}, ${controlB.x} ${controlB.y}, ${to.x} ${to.y}`;\n const color = statusColor(status);\n const midpoint = { x: (from.x + to.x) / 2, y: (from.y + to.y) / 2 };\n const labelText = label?.trim();\n const labelWidth = labelText ? Math.max(56, labelText.length * 7 + 20) : 0;\n const labelPosition = horizontal\n ? { x: midpoint.x, y: midpoint.y - 16 }\n : { x: midpoint.x + 44, y: midpoint.y };\n const statusText = status ? labelForStatus(status) : \"Neutral\";\n const accessibleLabel =\n typeof ariaLabel === \"string\" && ariaLabel.trim()\n ? ariaLabel\n : labelText\n ? `${labelText} dependency edge, ${statusText}`\n : `Dependency edge, ${statusText}`;\n\n return (\n <g\n className={clsx(\"eth-dag-edge\", status && `eth-dag-edge--${status}`, className)}\n role=\"group\"\n aria-label={accessibleLabel}\n >\n <defs>\n <marker\n id={markerId}\n markerWidth=\"10\"\n markerHeight=\"10\"\n refX=\"9\"\n refY=\"3\"\n orient=\"auto\"\n markerUnits=\"strokeWidth\"\n >\n <path d=\"M0,0 L0,6 L9,3 z\" fill={color} />\n </marker>\n </defs>\n <path\n {...props}\n d={d}\n fill=\"none\"\n stroke={color}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n markerEnd={`url(#${markerId})`}\n vectorEffect=\"non-scaling-stroke\"\n aria-hidden=\"true\"\n data-eth-component=\"DAGEdge\"\n />\n {labelText ? (\n <g className=\"eth-dag-edge__label\" aria-hidden=\"true\">\n <rect\n x={labelPosition.x - labelWidth / 2}\n y={labelPosition.y - 11}\n width={labelWidth}\n height={22}\n rx={0}\n />\n <text\n x={labelPosition.x}\n y={labelPosition.y}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n >\n {labelText}\n </text>\n </g>\n ) : null}\n </g>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport type { EthOperationalStatus } from \"@echothink-ui/core\";\nimport type { DAGEdgeLegendItem, DAGLegendProps } from \"../types\";\nimport { labelForStatus, statusColor } from \"./utils\";\n\nconst defaultStatuses: EthOperationalStatus[] = [\n \"not-started\",\n \"queued\",\n \"running\",\n \"blocked\",\n \"failed\",\n \"pending-approval\",\n \"completed\"\n];\n\nconst defaultEdgeTypes: DAGEdgeLegendItem[] = [\n { id: \"dependency\", label: \"Dependency\", variant: \"dependency\" },\n { id: \"critical-path\", label: \"Critical path\", status: \"running\", variant: \"critical\" },\n {\n id: \"approval-gate\",\n label: \"Approval gate\",\n status: \"pending-approval\",\n variant: \"conditional\"\n }\n];\n\nfunction colorVariable(color: string) {\n return { \"--eth-dag-legend-color\": color } as React.CSSProperties;\n}\n\nexport function DAGLegend({\n statuses = defaultStatuses,\n edgeTypes = defaultEdgeTypes,\n className,\n \"aria-label\": ariaLabel,\n ...props\n}: DAGLegendProps) {\n return (\n <div\n {...props}\n className={clsx(\"eth-dag-legend\", className)}\n data-eth-component=\"DAGLegend\"\n role=\"group\"\n aria-label={ariaLabel ?? \"DAG legend\"}\n >\n {statuses.length ? (\n <div className=\"eth-dag-legend__group\">\n <span className=\"eth-dag-legend__heading\">Node status</span>\n <ul className=\"eth-dag-legend__list\" aria-label=\"DAG node status legend\">\n {statuses.map((status) => (\n <li key={status} className=\"eth-dag-legend__item\">\n <span\n className={clsx(\"eth-dag-legend__swatch\", `eth-dag-legend__swatch--${status}`)}\n style={colorVariable(statusColor(status))}\n aria-hidden=\"true\"\n />\n <span className=\"eth-dag-legend__label\">{labelForStatus(status)}</span>\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n {edgeTypes.length ? (\n <div className=\"eth-dag-legend__group eth-dag-legend__group--edges\">\n <span className=\"eth-dag-legend__heading\">Edge type</span>\n <ul className=\"eth-dag-legend__list\" aria-label=\"DAG edge type legend\">\n {edgeTypes.map((edgeType) => (\n <li key={edgeType.id} className=\"eth-dag-legend__item\">\n <span\n className={clsx(\n \"eth-dag-legend__edge\",\n `eth-dag-legend__edge--${edgeType.variant ?? \"dependency\"}`\n )}\n style={colorVariable(statusColor(edgeType.status))}\n aria-hidden=\"true\"\n />\n <span className=\"eth-dag-legend__label\">{edgeType.label}</span>\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n </div>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport type { DAGNodeProps } from \"../types\";\nimport { labelForStatus, statusColor } from \"./utils\";\n\nconst nodeWidth = 156;\nconst nodeHeight = 60;\n\nfunction truncateLabel(label: string) {\n return label.length > 20 ? `${label.slice(0, 19)}...` : label;\n}\n\nexport function DAGNode({ node, selected, onSelect, className, ...props }: DAGNodeProps) {\n const statusLabel = labelForStatus(node.status);\n const x = node.x - nodeWidth / 2;\n const y = node.y - nodeHeight / 2;\n const handleSelect = () => onSelect?.(node);\n const interactive = Boolean(onSelect);\n\n return (\n <g\n {...props}\n className={clsx(\n \"eth-dag-node\",\n `eth-dag-node--${node.status}`,\n interactive && \"eth-dag-node--interactive\",\n selected && \"eth-dag-node--selected\",\n className\n )}\n role={interactive ? \"button\" : \"group\"}\n tabIndex={interactive ? 0 : undefined}\n aria-label={`${node.label}, ${statusLabel}`}\n aria-pressed={interactive ? Boolean(selected) : undefined}\n onClick={interactive ? handleSelect : undefined}\n onKeyDown={\n interactive\n ? (event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n handleSelect();\n }\n }\n : undefined\n }\n data-eth-component=\"DAGNode\"\n >\n <title>{`${node.label} - ${statusLabel}`}</title>\n <rect\n className=\"eth-dag-node__selection\"\n x={x - 3}\n y={y - 3}\n width={nodeWidth + 6}\n height={nodeHeight + 6}\n rx={0}\n />\n <rect\n className=\"eth-dag-node__body\"\n x={x}\n y={y}\n width={nodeWidth}\n height={nodeHeight}\n rx={0}\n fill=\"var(--eth-color-layer-01)\"\n />\n <rect\n className=\"eth-dag-node__status-strip\"\n x={x}\n y={y}\n width={4}\n height={nodeHeight}\n fill={statusColor(node.status)}\n />\n <circle className=\"eth-dag-node__port\" cx={x} cy={node.y} r={3} />\n <circle className=\"eth-dag-node__port\" cx={x + nodeWidth} cy={node.y} r={3} />\n <circle\n className=\"eth-dag-node__status-dot\"\n cx={x + 18}\n cy={y + 18}\n r={3.5}\n fill={statusColor(node.status)}\n />\n <text\n x={x + 28}\n y={y + 22}\n textAnchor=\"start\"\n className=\"eth-dag-node__label\"\n >\n {truncateLabel(node.label)}\n </text>\n <text\n x={x + 28}\n y={y + 44}\n textAnchor=\"start\"\n className=\"eth-dag-node__status\"\n >\n {statusLabel}\n </text>\n </g>\n );\n}\n\nexport const DAG_NODE_WIDTH = nodeWidth;\nexport const DAG_NODE_HEIGHT = nodeHeight;\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { InlineNotification, Surface, Tag, type EthAction } from \"@echothink-ui/core\";\nimport type { DecisionOption, DecisionRequiredPanelProps } from \"../types\";\nimport { severityForRisk } from \"./utils\";\n\ninterface ResolvedOption extends DecisionOption {\n action?: EthAction;\n}\n\nfunction optionsFromActions(actions?: EthAction[]): ResolvedOption[] {\n return (\n actions?.map((action) => ({\n id: action.id,\n label: action.label,\n intent: action.intent,\n action\n })) ?? []\n );\n}\n\nfunction riskTitle(riskLevel: DecisionRequiredPanelProps[\"riskLevel\"]) {\n if (!riskLevel) return \"Decision required\";\n return `${riskLevel.charAt(0).toUpperCase()}${riskLevel.slice(1)} risk decision`;\n}\n\nfunction optionIntent(option: ResolvedOption) {\n return option.intent ?? \"secondary\";\n}\n\nexport function DecisionRequiredPanel({\n title,\n summary,\n riskLevel,\n evidence = [],\n options,\n onDecide,\n decidedOptionId,\n className,\n description,\n actions,\n items,\n severity,\n status,\n ...props\n}: DecisionRequiredPanelProps) {\n const titleId = React.useId();\n const evidenceId = React.useId();\n const optionsId = React.useId();\n const resolvedOptions: ResolvedOption[] =\n options?.map((option) => ({ ...option })) ??\n (actions?.length\n ? optionsFromActions(actions)\n : items?.length\n ? items.map((item) => ({\n id: item.id,\n label: String(item.label),\n description: item.description ? String(item.description) : undefined,\n intent: item.status === \"active\" ? \"primary\" : \"secondary\"\n }))\n : []);\n const riskSeverity = riskLevel ? severityForRisk(riskLevel) : (severity ?? \"warning\");\n\n return (\n <Surface\n {...props}\n role=\"region\"\n aria-labelledby={titleId}\n className={clsx(\n \"eth-task-decision-panel\",\n riskLevel && `eth-task-decision-panel--${riskLevel}`,\n className\n )}\n title={<span id={titleId}>{title}</span>}\n severity={riskSeverity === \"neutral\" ? severity : riskSeverity}\n status={status ?? \"approval-required\"}\n data-eth-component=\"DecisionRequiredPanel\"\n >\n <InlineNotification severity={riskSeverity} title={riskTitle(riskLevel)}>\n {description}\n </InlineNotification>\n {summary ? (\n <section className=\"eth-task-decision-panel__summary\" aria-label=\"Decision context\">\n <div className=\"eth-task-decision-panel__section-label\">Decision context</div>\n <div className=\"eth-task-decision-panel__summary-body\">{summary}</div>\n </section>\n ) : null}\n\n {evidence.length ? (\n <section className=\"eth-task-decision-panel__evidence\" aria-labelledby={evidenceId}>\n <div className=\"eth-task-decision-panel__section-header\">\n <h3 id={evidenceId}>Evidence</h3>\n <span>\n {evidence.length} source{evidence.length === 1 ? \"\" : \"s\"}\n </span>\n </div>\n <ul>\n {evidence.map((item) => (\n <li key={item.id}>\n <div className=\"eth-task-decision-panel__evidence-label\">\n {item.href ? (\n <a className=\"eth-task-decision-panel__evidence-link\" href={item.href}>\n {item.label}\n </a>\n ) : (\n <strong>{item.label}</strong>\n )}\n </div>\n {item.preview ? (\n <div className=\"eth-task-decision-panel__evidence-preview\">{item.preview}</div>\n ) : null}\n </li>\n ))}\n </ul>\n </section>\n ) : null}\n\n {resolvedOptions.length ? (\n <section\n className=\"eth-task-decision-panel__options\"\n role=\"group\"\n aria-labelledby={optionsId}\n >\n <div className=\"eth-task-decision-panel__section-header\">\n <h3 id={optionsId}>Decision options</h3>\n <span>{resolvedOptions.length} available</span>\n </div>\n {resolvedOptions.map((option) => (\n <button\n key={option.id}\n type=\"button\"\n className={clsx(\n \"eth-task-decision-panel__option\",\n `eth-task-decision-panel__option--${optionIntent(option)}`\n )}\n disabled={option.action?.disabled}\n aria-pressed={decidedOptionId === option.id}\n onClick={() => {\n option.action?.onSelect?.();\n onDecide?.(option.id);\n }}\n >\n <span className=\"eth-task-decision-panel__option-main\">\n <span className=\"eth-task-decision-panel__option-label\">{option.label}</span>\n {option.description ? (\n <span className=\"eth-task-decision-panel__option-description\">\n {option.description}\n </span>\n ) : null}\n </span>\n <span className=\"eth-task-decision-panel__option-state\">\n {decidedOptionId === option.id ? \"Selected\" : \"Choose\"}\n </span>\n </button>\n ))}\n </section>\n ) : null}\n\n {decidedOptionId ? (\n <div className=\"eth-task-decision-panel__decision\">\n <Tag>Decided: {decidedOptionId}</Tag>\n </div>\n ) : null}\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { ActionGroup, Badge, InlineNotification, Surface } from \"@echothink-ui/core\";\nimport type { EthSeverity } from \"@echothink-ui/core\";\nimport type { HumanInterventionPanelProps } from \"../types\";\n\nfunction urgencySeverity(urgency: HumanInterventionPanelProps[\"urgency\"]): EthSeverity {\n if (urgency === \"high\") return \"danger\";\n if (urgency === \"medium\") return \"warning\";\n return \"info\";\n}\n\nfunction urgencyLabel(urgency: HumanInterventionPanelProps[\"urgency\"]) {\n if (urgency === \"high\") return \"High urgency\";\n if (urgency === \"medium\") return \"Medium urgency\";\n return \"Low urgency\";\n}\n\nexport function HumanInterventionPanel({\n reason,\n affectedTask,\n actions,\n urgency = \"medium\",\n className,\n title = \"Human intervention required\",\n status = \"approval-required\",\n severity,\n role = \"region\",\n \"aria-labelledby\": ariaLabelledBy,\n ...props\n}: HumanInterventionPanelProps) {\n const titleId = React.useId();\n const panelSeverity = severity ?? urgencySeverity(urgency);\n const labelledBy = ariaLabelledBy ?? (title ? titleId : undefined);\n\n return (\n <Surface\n {...props}\n role={role}\n aria-labelledby={labelledBy}\n className={clsx(\"eth-task-human-intervention-panel\", className)}\n title={title ? <span id={titleId}>{title}</span> : undefined}\n status={status}\n severity={panelSeverity}\n data-eth-component=\"HumanInterventionPanel\"\n >\n <InlineNotification severity={panelSeverity} title=\"Intervention requested\">\n {reason ?? \"Review this task and choose the next action before the agent can continue.\"}\n </InlineNotification>\n\n <dl className=\"eth-task-human-intervention-panel__details\" aria-label=\"Intervention details\">\n {affectedTask ? (\n <div>\n <dt>Affected task</dt>\n <dd>\n <span className=\"eth-task-human-intervention-panel__task-title\">\n {affectedTask.title}\n </span>\n <span className=\"eth-task-human-intervention-panel__task-id\">{affectedTask.id}</span>\n </dd>\n </div>\n ) : null}\n <div>\n <dt>Urgency</dt>\n <dd>\n <Badge severity={panelSeverity}>{urgencyLabel(urgency)}</Badge>\n </dd>\n </div>\n </dl>\n\n {actions?.length ? (\n <div\n className=\"eth-task-human-intervention-panel__actions\"\n role=\"group\"\n aria-label=\"Intervention actions\"\n >\n <ActionGroup actions={actions} />\n </div>\n ) : null}\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport { Button, FormField, InlineNotification, Textarea } from \"@echothink-ui/core\";\nimport type { DecisionEvidence, TaskApprovalPanelProps } from \"../types\";\nimport { DecisionRequiredPanel } from \"./DecisionRequiredPanel\";\n\nfunction refEvidence(\n taskRef: React.ReactNode,\n diffRef: React.ReactNode,\n policyRef: React.ReactNode,\n evidence: DecisionEvidence[] = []\n): DecisionEvidence[] {\n const refs: DecisionEvidence[] = [];\n if (taskRef) refs.push({ id: \"task-ref\", label: \"Task reference\", preview: taskRef });\n if (diffRef) refs.push({ id: \"diff-ref\", label: \"Diff reference\", preview: diffRef });\n if (policyRef) refs.push({ id: \"policy-ref\", label: \"Policy reference\", preview: policyRef });\n return [...refs, ...evidence];\n}\n\nfunction stateNotification(state: NonNullable<TaskApprovalPanelProps[\"state\"]>) {\n if (state === \"approved\") {\n return {\n severity: \"success\" as const,\n title: \"Output approved\",\n description: \"The approval has been recorded with the current audit metadata.\"\n };\n }\n\n if (state === \"rejected\") {\n return {\n severity: \"danger\" as const,\n title: \"Output rejected\",\n description: \"The rejection reason and evidence references are retained for review.\"\n };\n }\n\n if (state === \"pending\") {\n return {\n severity: \"info\" as const,\n title: \"Decision pending\",\n description: \"The approval decision is being prepared for audit capture.\"\n };\n }\n\n return null;\n}\n\nexport function TaskApprovalPanel({\n taskRef,\n diffRef,\n policyRef,\n summary,\n evidence,\n onApprove,\n onReject,\n onRequestChanges,\n state = \"idle\",\n title = \"Task approval required\",\n description,\n footer,\n ...props\n}: TaskApprovalPanelProps) {\n const [reason, setReason] = React.useState(\"\");\n const reasonId = React.useId();\n const notification = stateNotification(state);\n const policy = policyRef ?? \"Default task policy\";\n const isPending = state === \"pending\";\n\n return (\n <section className=\"eth-task-approval-panel\" data-eth-component=\"TaskApprovalPanel\">\n <DecisionRequiredPanel\n {...props}\n title={title}\n summary={\n <div className=\"eth-task-approval-panel__body\">\n {summary ? <div className=\"eth-task-approval-panel__summary\">{summary}</div> : null}\n {notification ? (\n <InlineNotification\n className=\"eth-task-approval-panel__state\"\n severity={notification.severity}\n title={notification.title}\n >\n {notification.description}\n </InlineNotification>\n ) : null}\n <FormField\n id={reasonId}\n label=\"Decision reason\"\n helperText=\"Stored with approval audit metadata.\"\n className=\"eth-task-approval-panel__reason\"\n >\n <Textarea\n value={reason}\n rows={4}\n placeholder=\"Summarize the approval rationale, rejection issue, or requested change.\"\n onChange={(event) => setReason(event.currentTarget.value)}\n />\n </FormField>\n <dl className=\"eth-task-approval-panel__audit\">\n <div>\n <dt>Task</dt>\n <dd>{taskRef ?? \"-\"}</dd>\n </div>\n {diffRef ? (\n <div>\n <dt>Diff</dt>\n <dd>{diffRef}</dd>\n </div>\n ) : null}\n <div>\n <dt>Policy</dt>\n <dd>{policy}</dd>\n </div>\n </dl>\n </div>\n }\n description={description ?? \"Review the task output and choose an approval outcome.\"}\n riskLevel=\"high\"\n evidence={refEvidence(taskRef, diffRef, policyRef, evidence)}\n options={[]}\n footer={\n <div className=\"eth-task-approval-panel__footer\">\n <div\n className=\"eth-task-approval-panel__actions\"\n role=\"group\"\n aria-label=\"Approval actions\"\n >\n <Button\n intent=\"success\"\n disabled={isPending || !onApprove}\n aria-pressed={state === \"approved\"}\n onClick={() => onApprove?.(reason)}\n >\n Approve\n </Button>\n <Button\n intent=\"danger\"\n disabled={isPending || !onReject}\n aria-pressed={state === \"rejected\"}\n onClick={() => onReject?.(reason)}\n >\n Reject\n </Button>\n <Button\n intent=\"secondary\"\n disabled={isPending || !onRequestChanges}\n onClick={() => onRequestChanges?.(reason)}\n >\n Request changes\n </Button>\n </div>\n {footer ? (\n <div className=\"eth-task-approval-panel__custom-footer\">{footer}</div>\n ) : null}\n </div>\n }\n />\n </section>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { Badge, Surface, Tag } from \"@echothink-ui/core\";\nimport type { TaskCardProps } from \"../types\";\nimport { formatDateTime, severityForPriority } from \"./utils\";\n\nexport function TaskCard({ task, actions, onSelect, className, ...props }: TaskCardProps) {\n const cardActions = actions?.map((action) => ({\n ...action,\n intent: action.intent ?? \"tertiary\"\n }));\n\n const interactiveProps = onSelect\n ? {\n role: \"button\",\n tabIndex: 0,\n onClick: () => onSelect(task),\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onSelect(task);\n }\n }\n }\n : {};\n\n return (\n <Surface\n {...props}\n {...interactiveProps}\n className={clsx(\"eth-task-card\", onSelect && \"eth-task-card--selectable\", className)}\n density=\"compact\"\n title={task.title}\n subtitle={task.id}\n description={task.description}\n status={task.status}\n actions={cardActions}\n metadata={[\n {\n label: \"Assignee\",\n value: task.assignee ? (\n <span className=\"eth-task-card__assignee\">{task.assignee}</span>\n ) : (\n \"-\"\n )\n },\n {\n label: \"Due\",\n value: formatDateTime(task.dueAt)\n },\n {\n label: \"Priority\",\n value: task.priority ? (\n <Badge severity={severityForPriority(task.priority)}>{task.priority}</Badge>\n ) : (\n \"-\"\n )\n }\n ]}\n data-eth-component=\"TaskCard\"\n >\n {task.tags?.length ? (\n <div className=\"eth-task-card__tags\" aria-label=\"Task tags\">\n {task.tags.map((tag) => (\n <Tag key={tag}>{tag}</Tag>\n ))}\n </div>\n ) : null}\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { Badge, EmptyState } from \"@echothink-ui/core\";\nimport type { TaskDependency, TaskDependencyListProps } from \"../types\";\nimport { TaskStatusBadge } from \"./TaskStatusBadge\";\n\ntype DependencyRelationship = \"blocks\" | \"blocked-by\";\n\nconst groupDescriptions: Record<DependencyRelationship, string> = {\n \"blocked-by\": \"Prerequisite work that must clear before this task can move forward.\",\n blocks: \"Downstream work waiting on this task.\"\n};\n\nfunction taskCountLabel(count: number) {\n return `${count} task${count === 1 ? \"\" : \"s\"}`;\n}\n\nfunction relationshipLabel(relationship: DependencyRelationship) {\n return relationship === \"blocks\" ? \"Dependent\" : \"Prerequisite\";\n}\n\nfunction DependencyGroup({\n title,\n relationship,\n dependencies\n}: {\n title: string;\n relationship: DependencyRelationship;\n dependencies: TaskDependency[];\n}) {\n const headingId = React.useId();\n\n if (!dependencies.length) return null;\n\n return (\n <section className=\"eth-task-dependencies__group\" aria-labelledby={headingId}>\n <div className=\"eth-task-dependencies__group-header\">\n <div className=\"eth-task-dependencies__group-heading\">\n <h4 id={headingId}>{title}</h4>\n <p>{groupDescriptions[relationship]}</p>\n </div>\n <Badge>{taskCountLabel(dependencies.length)}</Badge>\n </div>\n <ul className=\"eth-task-dependencies__list\">\n {dependencies.map((dependency) => (\n <li\n key={dependency.id}\n className={clsx(\n \"eth-task-dependencies__item\",\n `eth-task-dependencies__item--${dependency.status}`\n )}\n data-status={dependency.status}\n >\n <div className=\"eth-task-dependencies__item-main\">\n <span className=\"eth-task-dependencies__relationship\">\n {relationshipLabel(relationship)}\n </span>\n <span className=\"eth-task-dependencies__title\">{dependency.title}</span>\n <span className=\"eth-task-dependencies__id\">{dependency.id}</span>\n </div>\n <TaskStatusBadge status={dependency.status} />\n </li>\n ))}\n </ul>\n </section>\n );\n}\n\nexport function TaskDependencyList({\n dependencies = [],\n blocks = [],\n blockedBy = [],\n emptyTitle = \"No dependencies\",\n className,\n ...props\n}: TaskDependencyListProps) {\n const derivedBlocks = dependencies.filter((dependency) => dependency.relationship === \"blocks\");\n const derivedBlockedBy = dependencies.filter(\n (dependency) => dependency.relationship !== \"blocks\"\n );\n const blockList = blocks.length ? blocks : derivedBlocks;\n const blockedByList = blockedBy.length ? blockedBy : derivedBlockedBy;\n const hasDependencies = blockList.length || blockedByList.length;\n\n return (\n <div\n {...props}\n className={clsx(\"eth-task-dependencies\", className)}\n data-eth-component=\"TaskDependencyList\"\n >\n {hasDependencies ? (\n <>\n <DependencyGroup\n title=\"Blocked by\"\n relationship=\"blocked-by\"\n dependencies={blockedByList}\n />\n <DependencyGroup title=\"Blocks\" relationship=\"blocks\" dependencies={blockList} />\n </>\n ) : (\n <EmptyState title={emptyTitle} />\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { Badge } from \"@echothink-ui/core\";\nimport type { TaskStatusBadgeProps } from \"../types\";\nimport { labelForStatus, severityForStatus } from \"./utils\";\n\nexport function TaskStatusBadge({\n status,\n label,\n className,\n title,\n ...props\n}: TaskStatusBadgeProps) {\n const statusLabel = label ?? labelForStatus(status);\n\n return (\n <Badge\n {...props}\n className={clsx(\"eth-task-status-badge\", `eth-task-status-badge--${status}`, className)}\n data-eth-component=\"TaskStatusBadge\"\n data-status={status}\n severity={severityForStatus(status)}\n title={title ?? statusLabel}\n >\n <span className=\"eth-task-status-badge__indicator\" aria-hidden=\"true\" />\n <span className=\"eth-task-status-badge__label\">{statusLabel}</span>\n </Badge>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { ActionGroup, Badge, EmptyState, Surface } from \"@echothink-ui/core\";\nimport type { TaskDetailPanelProps } from \"../types\";\nimport { TaskDependencyList } from \"./TaskDependencyList\";\nimport { TaskTimeline } from \"./TaskTimeline\";\nimport { TaskStatusBadge } from \"./TaskStatusBadge\";\nimport { formatDateTime, severityForPriority } from \"./utils\";\n\nfunction formatCount(count: number, singular: string, plural = `${singular}s`) {\n return `${count} ${count === 1 ? singular : plural}`;\n}\n\nfunction DetailSection({\n title,\n meta,\n open,\n children,\n className\n}: {\n title: string;\n meta?: React.ReactNode;\n open?: boolean;\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <details open={open} className={clsx(\"eth-task-detail-panel__section\", className)}>\n <summary className=\"eth-task-detail-panel__summary\">\n <span className=\"eth-task-detail-panel__summary-label\">{title}</span>\n {meta ? <span className=\"eth-task-detail-panel__summary-meta\">{meta}</span> : null}\n </summary>\n <div className=\"eth-task-detail-panel__section-body\">{children}</div>\n </details>\n );\n}\n\nexport function TaskDetailPanel({\n task,\n dependencies,\n events,\n actions,\n className,\n title,\n description,\n items,\n ...props\n}: TaskDetailPanelProps) {\n if (!task) {\n return (\n <Surface\n {...props}\n className={clsx(\"eth-task-detail-panel\", className)}\n title={title ?? \"Task detail\"}\n description={description}\n items={items}\n actions={actions}\n data-eth-component=\"TaskDetailPanel\"\n >\n {!items?.length ? <EmptyState title=\"No task selected\" /> : null}\n </Surface>\n );\n }\n\n const resolvedDependencies = dependencies ?? task.dependencies ?? [];\n const resolvedEvents = events ?? task.history ?? [];\n\n return (\n <Surface\n {...props}\n className={clsx(\"eth-task-detail-panel\", className)}\n title={title ?? task.title}\n subtitle={task.id}\n status={task.status}\n data-eth-component=\"TaskDetailPanel\"\n >\n <div className=\"eth-task-detail-panel__stack\">\n <DetailSection title=\"Metadata\" open>\n <dl className=\"eth-meta-grid eth-task-detail-panel__metadata\">\n <div>\n <dt>Status</dt>\n <dd>\n <TaskStatusBadge status={task.status} />\n </dd>\n </div>\n <div>\n <dt>Assignee</dt>\n <dd>{task.assignee ?? \"-\"}</dd>\n </div>\n <div>\n <dt>Due</dt>\n <dd>{formatDateTime(task.dueAt)}</dd>\n </div>\n <div>\n <dt>Priority</dt>\n <dd>\n {task.priority ? (\n <Badge severity={severityForPriority(task.priority)}>{task.priority}</Badge>\n ) : (\n \"-\"\n )}\n </dd>\n </div>\n </dl>\n </DetailSection>\n\n <DetailSection title=\"Description\" open>\n <div className=\"eth-task-detail-panel__description\">\n {task.description ?? description ?? \"No description provided.\"}\n </div>\n </DetailSection>\n\n <DetailSection\n title=\"Dependencies\"\n meta={formatCount(resolvedDependencies.length, \"dependency\", \"dependencies\")}\n open={resolvedDependencies.length > 0}\n >\n <TaskDependencyList dependencies={resolvedDependencies} />\n </DetailSection>\n\n <DetailSection\n title=\"History\"\n meta={formatCount(resolvedEvents.length, \"event\")}\n open={resolvedEvents.length > 0}\n >\n <TaskTimeline events={resolvedEvents} />\n </DetailSection>\n\n {actions?.length ? (\n <DetailSection title=\"Actions\" meta={formatCount(actions.length, \"action\")} open>\n <div className=\"eth-task-detail-panel__actions\">\n <ActionGroup actions={actions} />\n </div>\n </DetailSection>\n ) : null}\n </div>\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { Badge, EmptyState, type EthSeverity } from \"@echothink-ui/core\";\nimport type { TaskTimelineEvent, TaskTimelineProps } from \"../types\";\nimport { formatDateTime } from \"./utils\";\n\nconst eventKindMeta: Record<TaskTimelineEvent[\"kind\"], { label: string; tone: EthSeverity }> = {\n status_change: { label: \"Status\", tone: \"info\" },\n comment: { label: \"Comment\", tone: \"neutral\" },\n assignment: { label: \"Assignment\", tone: \"info\" },\n attachment: { label: \"Attachment\", tone: \"success\" },\n system: { label: \"System\", tone: \"neutral\" }\n};\n\nfunction timestampMeta(value: string | Date) {\n const date = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(date.valueOf())) {\n const fallback = String(value);\n return { dateTime: fallback, label: fallback };\n }\n\n return {\n dateTime: date.toISOString(),\n label: formatDateTime(date)\n };\n}\n\nexport function TaskTimeline({\n events = [],\n className,\n role,\n \"aria-label\": ariaLabel,\n ...props\n}: TaskTimelineProps) {\n if (!events.length) {\n return (\n <div\n {...props}\n className={clsx(\"eth-task-timeline\", className)}\n data-eth-component=\"TaskTimeline\"\n role={role ?? \"region\"}\n aria-label={ariaLabel ?? \"Task timeline\"}\n >\n <EmptyState\n title=\"No task history\"\n description=\"Task activity and state changes appear here.\"\n />\n </div>\n );\n }\n\n return (\n <div\n {...props}\n className={clsx(\"eth-task-timeline\", className)}\n data-eth-component=\"TaskTimeline\"\n role={role ?? \"region\"}\n aria-label={ariaLabel ?? \"Task timeline\"}\n >\n <ol className=\"eth-task-timeline__list\">\n {events.map((event) => {\n const kind = eventKindMeta[event.kind];\n const time = timestampMeta(event.timestamp);\n\n return (\n <li\n key={event.id}\n className={clsx(\n \"eth-task-timeline__event\",\n `eth-task-timeline__event--${event.kind}`\n )}\n data-kind={event.kind}\n >\n <time className=\"eth-task-timeline__time\" dateTime={time.dateTime}>\n {time.label}\n </time>\n <div className=\"eth-task-timeline__rail\" aria-hidden>\n <span className=\"eth-task-timeline__marker\" />\n </div>\n <article className=\"eth-task-timeline__body\">\n <header className=\"eth-task-timeline__event-header\">\n <Badge severity={kind.tone}>{kind.label}</Badge>\n {event.actor ? (\n <span className=\"eth-task-timeline__actor\">By {event.actor}</span>\n ) : null}\n </header>\n <strong className=\"eth-task-timeline__summary\">{event.summary}</strong>\n {event.details ? (\n <p className=\"eth-task-timeline__details\">{event.details}</p>\n ) : null}\n </article>\n </li>\n );\n })}\n </ol>\n </div>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport {\n Badge,\n Button,\n EmptyState,\n FormField,\n Surface,\n Textarea\n} from \"@echothink-ui/core\";\nimport type { TaskHandoffPanelProps } from \"../types\";\n\ntype TaskHandoffAssigneeKind =\n NonNullable<TaskHandoffPanelProps[\"assigneeOptions\"]>[number][\"kind\"];\n\nexport function TaskHandoffPanel({\n assigneeOptions = [],\n currentAssigneeId,\n onHandoff,\n reasonRequired,\n className,\n title = \"Task handoff\",\n description,\n ...props\n}: TaskHandoffPanelProps) {\n const [selectedId, setSelectedId] = React.useState(\n currentAssigneeId ?? assigneeOptions[0]?.id ?? \"\"\n );\n const [reason, setReason] = React.useState(\"\");\n const targetId = React.useId();\n const reasonId = React.useId();\n const trimmedReason = reason.trim();\n const cannotSubmit = !selectedId || (reasonRequired && !trimmedReason);\n\n const submitHandoff = (event?: React.FormEvent) => {\n event?.preventDefault();\n if (cannotSubmit) return;\n onHandoff?.(selectedId, trimmedReason);\n };\n\n const handleReasonKeyDown = (event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if ((event.metaKey || event.ctrlKey) && event.key === \"Enter\") {\n event.preventDefault();\n submitHandoff();\n }\n };\n\n return (\n <Surface\n {...props}\n className={clsx(\"eth-task-handoff-panel\", className)}\n title={title}\n description={description}\n data-eth-component=\"TaskHandoffPanel\"\n >\n {assigneeOptions.length ? (\n <form className=\"eth-task-handoff-panel__body\" onSubmit={submitHandoff}>\n <div className=\"eth-task-handoff-panel__target-field\">\n <p id={targetId} className=\"eth-task-handoff-panel__target-heading\">\n Handoff target\n </p>\n <div\n className=\"eth-task-handoff-panel__list\"\n role=\"group\"\n aria-labelledby={targetId}\n >\n {assigneeOptions.map((option) => (\n <button\n key={option.id}\n type=\"button\"\n aria-label={`Hand off to ${option.label} (${formatAssigneeKind(\n option.kind\n )})`}\n aria-pressed={selectedId === option.id}\n className={clsx(\n \"eth-task-handoff-panel__option\",\n selectedId === option.id && \"eth-task-handoff-panel__option--selected\"\n )}\n onClick={() => setSelectedId(option.id)}\n >\n <span className=\"eth-task-handoff-panel__option-copy\">\n <span className=\"eth-task-handoff-panel__option-label\">{option.label}</span>\n </span>\n <span className=\"eth-task-handoff-panel__option-meta\">\n {selectedId === option.id ? <Badge severity=\"info\">Selected</Badge> : null}\n <Badge severity=\"neutral\">{formatAssigneeKind(option.kind)}</Badge>\n </span>\n </button>\n ))}\n </div>\n </div>\n <FormField\n id={reasonId}\n label=\"Handoff reason\"\n required={reasonRequired}\n className=\"eth-task-handoff-panel__reason-field\"\n helperText={reasonRequired ? \"A reason is required for this handoff.\" : undefined}\n >\n <Textarea\n className=\"eth-task-handoff-panel__reason\"\n name=\"handoff-reason\"\n autoComplete=\"off\"\n placeholder=\"Summarize context, blockers, and the next action...\"\n value={reason}\n rows={3}\n onKeyDown={handleReasonKeyDown}\n onChange={(event) => setReason(event.currentTarget.value)}\n />\n </FormField>\n <div className=\"eth-task-handoff-panel__actions\">\n <Button type=\"submit\" disabled={cannotSubmit}>\n Handoff\n </Button>\n </div>\n </form>\n ) : (\n <EmptyState title=\"No assignees available\" />\n )}\n </Surface>\n );\n}\n\nfunction formatAssigneeKind(kind: TaskHandoffAssigneeKind) {\n return kind.charAt(0).toUpperCase() + kind.slice(1);\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport type { TaskProgressIndicatorProps } from \"../types\";\nimport { clampProgress, labelForStatus } from \"./utils\";\n\nconst currentStepStatuses = new Set([\"active\", \"in-progress\", \"running\"]);\n\nexport function TaskProgressIndicator({\n value,\n total = 100,\n steps,\n label = \"Task progress\",\n className,\n ...props\n}: TaskProgressIndicatorProps) {\n if (steps?.length) {\n return (\n <div\n {...props}\n className={clsx(\"eth-task-progress eth-task-progress--steps\", className)}\n data-eth-component=\"TaskProgressIndicator\"\n >\n <ol className=\"eth-task-progress__steps\" aria-label={label}>\n {steps.map((step, index) => {\n const statusLabel = labelForStatus(step.status);\n const isCurrentStep = currentStepStatuses.has(step.status);\n\n return (\n <li\n key={step.id}\n className={clsx(\n \"eth-task-progress__step\",\n `eth-task-progress__step--${step.status}`\n )}\n aria-current={isCurrentStep ? \"step\" : undefined}\n data-status={step.status}\n >\n <span className=\"eth-task-progress__step-track\" aria-hidden=\"true\">\n <span className=\"eth-task-progress__circle\" />\n {index < steps.length - 1 ? (\n <span className=\"eth-task-progress__connector\" />\n ) : null}\n </span>\n <span className=\"eth-task-progress__step-copy\">\n <span className=\"eth-task-progress__step-label\">{step.label}</span>\n <span className=\"eth-task-progress__step-status\">{statusLabel}</span>\n </span>\n </li>\n );\n })}\n </ol>\n </div>\n );\n }\n\n const progressValue = clampProgress(value, total);\n return (\n <div\n {...props}\n className={clsx(\"eth-task-progress eth-task-progress--bar\", className)}\n data-eth-component=\"TaskProgressIndicator\"\n >\n <div className=\"eth-task-progress__label\">\n <span>{label}</span>\n <strong>{progressValue}%</strong>\n </div>\n <progress value={progressValue} max={100} aria-label={label} />\n </div>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { Button, FormField, InlineNotification, Surface, Textarea } from \"@echothink-ui/core\";\nimport { RetryIcon } from \"@echothink-ui/icons\";\nimport type { TaskRetryPanelProps } from \"../types\";\nimport { formatDuration } from \"./utils\";\n\nconst backoffLabels = {\n exponential: \"Exponential\",\n linear: \"Linear\"\n} as const;\n\nexport function TaskRetryPanel({\n taskRef,\n failureSummary,\n retryPolicy,\n attemptCount = 0,\n onRetry,\n className,\n title = \"Retry failed task\",\n description,\n ...props\n}: TaskRetryPanelProps) {\n const [reason, setReason] = React.useState(\"\");\n const reasonId = React.useId();\n const retriesExhausted = retryPolicy ? attemptCount >= retryPolicy.maxRetries : false;\n const attemptLabel = retryPolicy ? `${attemptCount} / ${retryPolicy.maxRetries}` : attemptCount;\n const backoffLabel = retryPolicy ? backoffLabels[retryPolicy.backoff] : \"-\";\n\n return (\n <Surface\n {...props}\n className={clsx(\"eth-task-retry-panel\", className)}\n title={title}\n description={description}\n severity=\"danger\"\n data-eth-component=\"TaskRetryPanel\"\n >\n <InlineNotification severity=\"danger\" title=\"Task failed\">\n {failureSummary ?? \"The task did not complete successfully.\"}\n </InlineNotification>\n <dl className=\"eth-task-retry-panel__policy\" aria-label=\"Retry policy\">\n <div>\n <dt>Task</dt>\n <dd>{taskRef ?? \"-\"}</dd>\n </div>\n <div\n className={clsx(\n \"eth-task-retry-panel__attempts\",\n retriesExhausted && \"eth-task-retry-panel__attempts--exhausted\"\n )}\n >\n <dt>Attempts</dt>\n <dd>\n <span>{attemptLabel}</span>\n {retriesExhausted ? (\n <span className=\"eth-task-retry-panel__policy-note\">\n Automatic retries exhausted\n </span>\n ) : null}\n </dd>\n </div>\n {retryPolicy ? (\n <>\n <div>\n <dt>Backoff</dt>\n <dd>{backoffLabel}</dd>\n </div>\n <div>\n <dt>Interval</dt>\n <dd>{formatDuration(retryPolicy.intervalMs)}</dd>\n </div>\n </>\n ) : null}\n </dl>\n <div className=\"eth-task-retry-panel__controls\">\n <FormField\n id={reasonId}\n label=\"Retry reason\"\n helperText=\"Stored with retry audit metadata.\"\n className=\"eth-task-retry-panel__reason-field\"\n >\n <Textarea\n value={reason}\n rows={3}\n placeholder=\"Summarize what changed before retrying.\"\n onChange={(event) => setReason(event.currentTarget.value)}\n />\n </FormField>\n <div className=\"eth-task-retry-panel__actions\">\n <Button\n icon={<RetryIcon size={16} />}\n intent=\"primary\"\n onClick={() => onRetry?.(reason)}\n >\n Retry task\n </Button>\n <p>Creates a new attempt and records this reason in the task audit trail.</p>\n </div>\n </div>\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { Badge, Checkbox, EmptyState, IconButton, Surface } from \"@echothink-ui/core\";\nimport { PauseIcon, PlayIcon } from \"@echothink-ui/icons\";\nimport type { TaskRunLogEntry, TaskRunLogProps } from \"../types\";\nimport { formatDateTime } from \"./utils\";\n\nconst logLevels: TaskRunLogEntry[\"level\"][] = [\"error\", \"warn\", \"info\", \"debug\"];\n\nexport function TaskRunLog({\n entries = [],\n streaming,\n onPauseToggle,\n onFilter,\n levelFilter,\n windowSize = 200,\n className,\n title = \"Task run log\",\n description,\n ...props\n}: TaskRunLogProps) {\n const [internalFilter, setInternalFilter] = React.useState<TaskRunLogEntry[\"level\"][]>(logLevels);\n const activeFilter = (levelFilter as TaskRunLogEntry[\"level\"][] | undefined) ?? internalFilter;\n const counts = React.useMemo(\n () =>\n logLevels.reduce(\n (summary, level) => ({\n ...summary,\n [level]: entries.filter((entry) => entry.level === level).length\n }),\n {} as Record<TaskRunLogEntry[\"level\"], number>\n ),\n [entries]\n );\n const visibleEntries = React.useMemo(\n () =>\n entries\n .filter((entry) => activeFilter.includes(entry.level))\n .slice(-windowSize),\n [activeFilter, entries, windowSize]\n );\n\n const toggleLevel = (level: TaskRunLogEntry[\"level\"]) => {\n onFilter?.(level);\n if (!levelFilter) {\n setInternalFilter((current) =>\n current.includes(level)\n ? current.filter((candidate) => candidate !== level)\n : [...current, level]\n );\n }\n };\n const streamLabel = streaming ? \"Streaming\" : \"Paused\";\n\n return (\n <Surface\n {...props}\n className={clsx(\"eth-task-run-log\", className)}\n title={title}\n description={description}\n data-eth-component=\"TaskRunLog\"\n >\n <div className=\"eth-task-run-log__toolbar\" role=\"toolbar\" aria-label=\"Task log controls\">\n <div className=\"eth-task-run-log__stream-state\" aria-live=\"polite\">\n {onPauseToggle ? (\n <IconButton\n label={streaming ? \"Pause log stream\" : \"Resume log stream\"}\n icon={streaming ? <PauseIcon size={16} /> : <PlayIcon size={16} />}\n intent=\"ghost\"\n density=\"compact\"\n onClick={onPauseToggle}\n />\n ) : null}\n <Badge severity={streaming ? \"success\" : \"neutral\"}>{streamLabel}</Badge>\n <span className=\"eth-task-run-log__buffer-count\">\n {visibleEntries.length} of {entries.length} entries\n </span>\n </div>\n <fieldset className=\"eth-task-run-log__filters\">\n <legend>Levels</legend>\n <div className=\"eth-task-run-log__filter-options\">\n {logLevels.map((level) => (\n <Checkbox\n key={level}\n label={level}\n checked={activeFilter.includes(level)}\n onChange={() => toggleLevel(level)}\n />\n ))}\n </div>\n </fieldset>\n </div>\n <dl className=\"eth-task-run-log__summary\" aria-label=\"Task log summary\">\n <div>\n <dt>Buffered</dt>\n <dd>{entries.length}</dd>\n </div>\n <div>\n <dt>Visible</dt>\n <dd>{visibleEntries.length}</dd>\n </div>\n <div>\n <dt>Warnings</dt>\n <dd>{counts.warn}</dd>\n </div>\n <div>\n <dt>Errors</dt>\n <dd>{counts.error}</dd>\n </div>\n </dl>\n {visibleEntries.length ? (\n <div\n className=\"eth-task-run-log__viewport\"\n role=\"log\"\n aria-label=\"Task execution log entries\"\n aria-live={streaming ? \"polite\" : \"off\"}\n aria-relevant=\"additions text\"\n >\n <div className=\"eth-task-run-log__columns\" aria-hidden=\"true\">\n <span>Time</span>\n <span>Level</span>\n <span>Message</span>\n </div>\n {visibleEntries.map((entry) => (\n <div\n key={entry.id}\n className={clsx(\"eth-task-run-log__entry\", `eth-task-run-log__entry--${entry.level}`)}\n >\n <time className=\"eth-task-run-log__time\" dateTime={String(entry.timestamp)}>\n {formatDateTime(entry.timestamp)}\n </time>\n <span\n className={clsx(\n \"eth-task-run-log__level\",\n `eth-task-run-log__level--${entry.level}`\n )}\n >\n {entry.level.toUpperCase()}\n </span>\n <span\n className={clsx(\n \"eth-task-run-log__message\",\n entry.redacted && \"eth-task-run-log__message--redacted\"\n )}\n >\n {entry.redacted ? \"[redacted]\" : entry.message}\n </span>\n </div>\n ))}\n </div>\n ) : (\n <EmptyState title=\"No log entries\" />\n )}\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport {\n ActionGroup,\n Badge,\n EmptyState,\n Select,\n StatusDot,\n type EthOperationalStatus,\n type SelectOption\n} from \"@echothink-ui/core\";\nimport { BulkActionTable, DataTable, type DataColumn } from \"@echothink-ui/data\";\nimport type { Task, TaskPriority, TaskTableProps } from \"../types\";\nimport { TaskStatusBadge } from \"./TaskStatusBadge\";\nimport { formatDateTime, labelForStatus, severityForPriority } from \"./utils\";\n\ntype TaskStatusFilter = EthOperationalStatus | \"all\";\n\nconst statusFilterOrder: EthOperationalStatus[] = [\n \"not-started\",\n \"queued\",\n \"in-progress\",\n \"running\",\n \"approval-required\",\n \"pending-approval\",\n \"blocked\",\n \"failed\",\n \"completed\",\n \"succeeded\",\n \"synced\"\n];\n\nconst priorityLabels: Record<TaskPriority, string> = {\n critical: \"Critical\",\n high: \"High\",\n low: \"Low\",\n medium: \"Medium\"\n};\n\nfunction taskRowsFromItems(items: TaskTableProps[\"items\"]): Task[] {\n return (\n items?.map((item) => ({\n id: item.id,\n title: String(item.label),\n status: item.status ?? \"not-started\"\n })) ?? []\n );\n}\n\nfunction taskTableLabel(title?: React.ReactNode) {\n return typeof title === \"string\" && title.trim() ? `${title} table` : \"Task table\";\n}\n\nfunction priorityCell(priority?: TaskPriority) {\n if (!priority) return <span className=\"eth-task-table__empty-value\">-</span>;\n\n return (\n <Badge\n severity={severityForPriority(priority)}\n className={`eth-task-table__priority eth-task-table__priority--${priority}`}\n >\n {priorityLabels[priority]}\n </Badge>\n );\n}\n\nfunction emptyCell(value?: React.ReactNode) {\n if (value === undefined || value === null || value === \"\") {\n return <span className=\"eth-task-table__empty-value\">-</span>;\n }\n\n return value;\n}\n\nfunction taskStatusOptions(rows: Task[], activeStatus: TaskStatusFilter): SelectOption[] {\n const counts = new Map<EthOperationalStatus, number>();\n for (const task of rows) {\n counts.set(task.status, (counts.get(task.status) ?? 0) + 1);\n }\n\n const activeOperationalStatus = activeStatus === \"all\" ? null : activeStatus;\n const activeStatusWithoutRows = Boolean(\n activeOperationalStatus && !counts.has(activeOperationalStatus)\n );\n const extraStatuses =\n activeOperationalStatus &&\n activeStatusWithoutRows &&\n !statusFilterOrder.includes(activeOperationalStatus)\n ? [activeOperationalStatus]\n : [];\n const sortedStatuses = [\n ...statusFilterOrder.filter(\n (status) =>\n counts.has(status) || (activeStatusWithoutRows && status === activeOperationalStatus)\n ),\n ...Array.from(counts.keys()).filter((status) => !statusFilterOrder.includes(status)),\n ...extraStatuses\n ];\n\n return [\n { value: \"all\", label: `All statuses (${rows.length})` },\n ...sortedStatuses.map((status) => ({\n value: status,\n label: `${labelForStatus(status)} (${counts.get(status) ?? 0})`\n }))\n ];\n}\n\nconst defaultColumns: DataColumn<Task>[] = [\n { key: \"id\", header: \"ID\", width: \"5rem\", sortable: true },\n {\n key: \"title\",\n header: \"Task\",\n width: \"18rem\",\n sortable: true,\n render: (task) => (\n <span className=\"eth-task-table__task\">\n <strong className=\"eth-task-table__task-title\">{task.title}</strong>\n {task.description ? (\n <span className=\"eth-task-table__task-description\">{task.description}</span>\n ) : null}\n </span>\n )\n },\n {\n key: \"status\",\n header: \"Status\",\n width: \"12rem\",\n sortable: true,\n render: (task) => <TaskStatusBadge status={task.status} />\n },\n {\n key: \"priority\",\n header: \"Priority\",\n width: \"8rem\",\n sortable: true,\n render: (task) => priorityCell(task.priority)\n },\n {\n key: \"assignee\",\n header: \"Assignee\",\n width: \"9rem\",\n render: (task) => emptyCell(task.assignee)\n },\n {\n key: \"dueAt\",\n header: \"Due\",\n width: \"13rem\",\n sortable: true,\n render: (task) => (\n <span className={task.dueAt ? \"eth-task-table__date\" : \"eth-task-table__empty-value\"}>\n {formatDateTime(task.dueAt)}\n </span>\n )\n }\n];\n\nexport function TaskTable({\n tasks,\n items,\n density = \"default\",\n selectable,\n selectedRows,\n onSelectionChange,\n rowActions,\n bulkActions,\n columns,\n showFilters,\n statusFilter,\n onStatusFilterChange,\n className,\n title,\n description,\n actions,\n subtitle: _subtitle,\n eyebrow: _eyebrow,\n status: _status,\n severity: _severity,\n loading: _loading,\n empty: _empty,\n error: _error,\n metadata: _metadata,\n footer: _footer,\n \"aria-label\": ariaLabel,\n ...sectionProps\n}: TaskTableProps) {\n const rows = tasks ?? taskRowsFromItems(items);\n const [internalStatusFilter, setInternalStatusFilter] =\n React.useState<TaskStatusFilter>(\"all\");\n const effectiveStatusFilter = statusFilter ?? internalStatusFilter;\n const filterVisible =\n Boolean(showFilters) || statusFilter !== undefined || Boolean(onStatusFilterChange);\n const filteredRows =\n filterVisible && effectiveStatusFilter !== \"all\"\n ? rows.filter((task) => task.status === effectiveStatusFilter)\n : rows;\n const statusOptions = React.useMemo(\n () => taskStatusOptions(rows, effectiveStatusFilter),\n [effectiveStatusFilter, rows]\n );\n const resolvedColumns = columns ?? defaultColumns;\n const label = ariaLabel ?? taskTableLabel(title);\n const emptyTitle = rows.length && filterVisible ? \"No matching tasks\" : (title ?? \"No tasks\");\n const emptyDescription =\n rows.length && filterVisible\n ? \"No tasks match the selected status filter.\"\n : (description ?? \"There are no tasks to display.\");\n const selectEnabled = selectable ?? Boolean(bulkActions?.length);\n const handleStatusFilterChange = (event: React.ChangeEvent<HTMLSelectElement>) => {\n const nextStatus = event.currentTarget.value as TaskStatusFilter;\n if (statusFilter === undefined) setInternalStatusFilter(nextStatus);\n onStatusFilterChange?.(nextStatus);\n };\n\n const table = (\n bulkActions?.length ? (\n <BulkActionTable<Task>\n className={clsx(\"eth-task-table\", className)}\n rows={filteredRows}\n columns={resolvedColumns}\n rowKey=\"id\"\n density={density}\n selectable={selectEnabled}\n selectedRows={selectedRows}\n onSelectionChange={onSelectionChange}\n rowActions={rowActions}\n bulkActions={bulkActions}\n emptyState={<EmptyState title={emptyTitle} description={emptyDescription} />}\n aria-label={label}\n data-eth-component=\"TaskTable\"\n />\n ) : (\n <DataTable<Task>\n className={clsx(\"eth-task-table\", className)}\n rows={filteredRows}\n columns={resolvedColumns}\n rowKey=\"id\"\n density={density}\n selectable={selectable}\n selectedRows={selectedRows}\n onSelectionChange={onSelectionChange}\n rowActions={rowActions}\n emptyState={<EmptyState title={emptyTitle} description={emptyDescription} />}\n aria-label={label}\n data-eth-component=\"TaskTable\"\n />\n )\n );\n const hasHeader = Boolean(title || description || actions?.length);\n\n if (!hasHeader && !filterVisible) return table;\n\n return (\n <section\n {...sectionProps}\n className=\"eth-task-table-shell\"\n aria-label={typeof title === \"string\" ? title : \"Tasks\"}\n >\n {hasHeader ? (\n <header className=\"eth-task-table-shell__header\">\n <div className=\"eth-task-table-shell__heading\">\n {title ? <h2>{title}</h2> : null}\n {description ? <p>{description}</p> : null}\n </div>\n <ActionGroup actions={actions} />\n </header>\n ) : null}\n {filterVisible ? (\n <div className=\"eth-task-table-shell__toolbar\" aria-label=\"Task table filters\">\n <div className=\"eth-task-table-shell__filters\">\n <Select\n className=\"eth-task-table-shell__filter\"\n density=\"compact\"\n labelText=\"Status\"\n options={statusOptions}\n value={effectiveStatusFilter}\n onChange={handleStatusFilterChange}\n />\n </div>\n <span className=\"eth-task-table-shell__summary\">\n {filteredRows.length === rows.length\n ? `${rows.length} ${rows.length === 1 ? \"task\" : \"tasks\"} shown`\n : `${filteredRows.length} of ${rows.length} tasks shown`}\n </span>\n </div>\n ) : null}\n {table}\n </section>\n );\n}\n\nexport function StatusCell({ task }: { task: Task }) {\n return <StatusDot status={task.status} label={labelForStatus(task.status)} />;\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { EmptyState, Surface } from \"@echothink-ui/core\";\nimport type {\n DAGEdgeModel,\n DAGNodeModel,\n PositionedDAGNode,\n TaskWaveDAGProps\n} from \"../types\";\nimport { DAGEdge } from \"./DAGEdge\";\nimport { DAGLegend } from \"./DAGLegend\";\nimport { DAGNode, DAG_NODE_HEIGHT, DAG_NODE_WIDTH } from \"./DAGNode\";\n\nconst rankSpacing = DAG_NODE_WIDTH + 76;\nconst rowSpacing = DAG_NODE_HEIGHT + 48;\nconst originX = DAG_NODE_WIDTH / 2 + 28;\nconst originY = DAG_NODE_HEIGHT / 2 + 48;\nconst framePaddingX = 32;\nconst framePaddingY = 28;\n\ninterface DAGFrame {\n x: number;\n y: number;\n width: number;\n height: number;\n viewBox: string;\n}\n\nfunction layoutNodes(\n nodes: DAGNodeModel[],\n edges: DAGEdgeModel[],\n layout: \"lr\" | \"tb\"\n): PositionedDAGNode[] {\n const ids = new Set(nodes.map((node) => node.id));\n const ranks = new Map(nodes.map((node) => [node.id, 0]));\n const validEdges = edges.filter((edge) => ids.has(edge.from) && ids.has(edge.to));\n\n for (let pass = 0; pass < nodes.length; pass += 1) {\n for (const edge of validEdges) {\n const fromRank = ranks.get(edge.from) ?? 0;\n const toRank = ranks.get(edge.to) ?? 0;\n if (toRank < fromRank + 1) ranks.set(edge.to, fromRank + 1);\n }\n }\n\n const groups = new Map<number, DAGNodeModel[]>();\n for (const node of nodes) {\n const rank = ranks.get(node.id) ?? 0;\n groups.set(rank, [...(groups.get(rank) ?? []), node]);\n }\n\n return nodes.map((node) => {\n if (typeof node.x === \"number\" && typeof node.y === \"number\") {\n return { ...node, x: node.x, y: node.y };\n }\n const rank = ranks.get(node.id) ?? 0;\n const group = groups.get(rank) ?? [];\n const index = group.findIndex((candidate) => candidate.id === node.id);\n const spread = Math.max(0, index) * rowSpacing + originY;\n const ranked = rank * rankSpacing + originX;\n return layout === \"lr\"\n ? { ...node, x: ranked, y: spread }\n : { ...node, x: spread, y: ranked };\n });\n}\n\nfunction frameFor(nodes: PositionedDAGNode[]): DAGFrame {\n if (!nodes.length) {\n return { x: 0, y: 0, width: 640, height: 180, viewBox: \"0 0 640 180\" };\n }\n\n const minX =\n Math.min(...nodes.map((node) => node.x - DAG_NODE_WIDTH / 2)) - framePaddingX;\n const minY =\n Math.min(...nodes.map((node) => node.y - DAG_NODE_HEIGHT / 2)) - framePaddingY;\n const maxX =\n Math.max(...nodes.map((node) => node.x + DAG_NODE_WIDTH / 2)) + framePaddingX;\n const maxY =\n Math.max(...nodes.map((node) => node.y + DAG_NODE_HEIGHT / 2)) + framePaddingY;\n const width = Math.max(360, maxX - minX);\n const height = Math.max(120, maxY - minY);\n\n return { x: minX, y: minY, width, height, viewBox: `${minX} ${minY} ${width} ${height}` };\n}\n\nfunction edgeEndpoints(\n from: PositionedDAGNode,\n to: PositionedDAGNode,\n layout: \"lr\" | \"tb\"\n) {\n if (layout === \"lr\") {\n return {\n from: { x: from.x + DAG_NODE_WIDTH / 2, y: from.y },\n to: { x: to.x - DAG_NODE_WIDTH / 2, y: to.y }\n };\n }\n return {\n from: { x: from.x, y: from.y + DAG_NODE_HEIGHT / 2 },\n to: { x: to.x, y: to.y - DAG_NODE_HEIGHT / 2 }\n };\n}\n\nexport function TaskWaveDAG({\n nodes = [],\n edges = [],\n layout = \"lr\",\n onNodeSelect,\n selectedNodeId,\n className,\n title,\n description,\n ...props\n}: TaskWaveDAGProps) {\n const positionedNodes = React.useMemo(\n () => layoutNodes(nodes, edges, layout),\n [nodes, edges, layout]\n );\n const nodeMap = React.useMemo(\n () => new Map(positionedNodes.map((node) => [node.id, node])),\n [positionedNodes]\n );\n const visibleStatuses = React.useMemo(\n () => Array.from(new Set(positionedNodes.map((node) => node.status))),\n [positionedNodes]\n );\n const graphFrame = React.useMemo(() => frameFor(positionedNodes), [positionedNodes]);\n const graphTitleId = React.useId();\n const graphDescriptionId = React.useId();\n const graphTitle =\n typeof title === \"string\" && title.trim() ? title : \"Task wave dependency graph\";\n const graphDescription = `${positionedNodes.length} nodes and ${edges.length} dependencies. Statuses: ${\n visibleStatuses.map((status) => status.replace(/-/g, \" \")).join(\", \") || \"none\"\n }.`;\n\n return (\n <Surface\n {...props}\n className={clsx(\"eth-task-wave-dag\", className)}\n title={title ?? \"Wave DAG\"}\n description={description}\n data-eth-component=\"TaskWaveDAG\"\n >\n {positionedNodes.length ? (\n <>\n <div className=\"eth-task-wave-dag__viewport\">\n <svg\n className=\"eth-dag\"\n role=\"img\"\n aria-labelledby={graphTitleId}\n aria-describedby={graphDescriptionId}\n viewBox={graphFrame.viewBox}\n >\n <title id={graphTitleId}>{graphTitle}</title>\n <desc id={graphDescriptionId}>{graphDescription}</desc>\n <rect\n className=\"eth-dag__canvas\"\n x={graphFrame.x}\n y={graphFrame.y}\n width={graphFrame.width}\n height={graphFrame.height}\n aria-hidden=\"true\"\n />\n {edges.map((edge, index) => {\n const from = nodeMap.get(edge.from);\n const to = nodeMap.get(edge.to);\n if (!from || !to) return null;\n const endpoints = edgeEndpoints(from, to, layout);\n return (\n <DAGEdge\n key={`${edge.from}-${edge.to}-${index}`}\n from={endpoints.from}\n to={endpoints.to}\n status={edge.status ?? to.status}\n label={edge.label}\n />\n );\n })}\n {positionedNodes.map((node) => (\n <DAGNode\n key={node.id}\n node={node}\n selected={node.id === selectedNodeId}\n onSelect={onNodeSelect}\n />\n ))}\n </svg>\n </div>\n <DAGLegend statuses={visibleStatuses.length ? visibleStatuses : undefined} />\n <ol className=\"eth-task-wave-dag__fallback\">\n {positionedNodes.map((node) => (\n <li key={node.id}>\n {node.label}, {node.status.replace(/-/g, \" \")}\n </li>\n ))}\n </ol>\n </>\n ) : (\n <EmptyState title=\"No DAG nodes\" description=\"Add nodes and edges to render a wave graph.\" />\n )}\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { Badge, Surface } from \"@echothink-ui/core\";\nimport type { EthOperationalStatus } from \"@echothink-ui/core\";\nimport type { TaskWaveHeaderProps } from \"../types\";\nimport { TaskProgressIndicator } from \"./TaskProgressIndicator\";\nimport {\n formatDateTime,\n labelForStatus,\n severityForStatus,\n waveProgress\n} from \"./utils\";\n\nconst statusOrder: EthOperationalStatus[] = [\n \"queued\",\n \"running\",\n \"in-progress\",\n \"pending-approval\",\n \"approval-required\",\n \"blocked\",\n \"failed\",\n \"completed\",\n \"succeeded\"\n];\n\nexport function TaskWaveHeader({\n wave,\n actions,\n className,\n title,\n description,\n ...props\n}: TaskWaveHeaderProps) {\n const progress = waveProgress(wave);\n\n return (\n <Surface\n {...props}\n className={clsx(\"eth-task-wave-header\", className)}\n title={wave?.label ?? title ?? \"Task wave\"}\n subtitle={wave?.id}\n description={description}\n actions={actions}\n data-eth-component=\"TaskWaveHeader\"\n >\n {wave ? (\n <>\n <div className=\"eth-task-wave-header__summary\">\n <strong>{wave.totalTasks} tasks</strong>\n {wave.startedAt ? <span>Started {formatDateTime(wave.startedAt)}</span> : null}\n {wave.eta ? <span>ETA {formatDateTime(wave.eta)}</span> : null}\n </div>\n <TaskProgressIndicator value={progress} label=\"Wave progress\" />\n <div className=\"eth-task-wave-header__counts\" aria-label=\"Task status counts\">\n {statusOrder\n .filter((status) => wave.statuses[status])\n .map((status) => {\n const label = labelForStatus(status);\n const count = wave.statuses[status] ?? 0;\n\n return (\n <Badge\n key={status}\n severity={severityForStatus(status)}\n className={clsx(\n \"eth-task-wave-header__count\",\n `eth-task-wave-header__count--${status}`\n )}\n aria-label={`${label}: ${count}`}\n >\n {label}: <span className=\"eth-task-wave-header__count-value\">{count}</span>\n </Badge>\n );\n })}\n </div>\n </>\n ) : (\n <TaskProgressIndicator value={0} label=\"Wave progress\" />\n )}\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\nimport { Badge, EmptyState, StatusDot, Surface } from \"@echothink-ui/core\";\nimport { DataTable, type DataColumn } from \"@echothink-ui/data\";\nimport type { Task, TaskWaveTableProps } from \"../types\";\nimport { formatDuration, labelForStatus } from \"./utils\";\n\nfunction taskRowsFromItems(items: TaskWaveTableProps[\"items\"]): Task[] {\n return (\n items?.map((item, index) => ({\n id: item.id,\n title: String(item.label),\n status: item.status ?? \"not-started\",\n order: index + 1\n })) ?? []\n );\n}\n\nfunction dependencyCount(task: Task) {\n if (typeof task.dependencyCount === \"number\") return task.dependencyCount;\n if (task.dependencyIds?.length) return task.dependencyIds.length;\n return task.dependencies?.length ?? 0;\n}\n\nfunction EmptyCell() {\n return <span className=\"eth-task-wave-table__empty\">-</span>;\n}\n\nexport function TaskWaveTable({\n wave,\n tasks,\n items,\n onTaskSelect,\n rowActions,\n className,\n title,\n description,\n ..._surfaceProps\n}: TaskWaveTableProps) {\n const rows = tasks ?? taskRowsFromItems(items);\n const columns = React.useMemo<DataColumn<Task>[]>(\n () => [\n {\n key: \"order\",\n header: \"Order\",\n width: \"4.5rem\",\n render: (task, index) => (\n <span className=\"eth-task-wave-table__order\">{task.order ?? index + 1}</span>\n )\n },\n {\n key: \"title\",\n header: \"Task\",\n width: \"22rem\",\n render: (task) =>\n onTaskSelect ? (\n <button\n className=\"eth-task-wave-table__task-button\"\n type=\"button\"\n onClick={() => onTaskSelect(task)}\n >\n <span className=\"eth-task-wave-table__task-title\">{task.title}</span>\n </button>\n ) : (\n <span className=\"eth-task-wave-table__task-title\">{task.title}</span>\n )\n },\n {\n key: \"status\",\n header: \"Status\",\n width: \"12rem\",\n render: (task) => (\n <StatusDot\n className=\"eth-task-wave-table__status\"\n status={task.status}\n label={labelForStatus(task.status)}\n />\n )\n },\n {\n key: \"assignee\",\n header: \"Assignee\",\n width: \"8rem\",\n render: (task) =>\n task.assignee ? (\n <span className=\"eth-task-wave-table__assignee\">{task.assignee}</span>\n ) : (\n <EmptyCell />\n )\n },\n {\n key: \"dependencies\",\n header: \"Dependencies\",\n width: \"7rem\",\n align: \"center\",\n render: (task) => {\n const count = dependencyCount(task);\n return (\n <Badge\n className=\"eth-task-wave-table__dependency-count\"\n severity={count > 0 ? \"info\" : \"neutral\"}\n >\n {count}\n </Badge>\n );\n }\n },\n {\n key: \"durationMs\",\n header: \"Duration\",\n width: \"7rem\",\n render: (task) => (\n <span\n className={clsx(\n \"eth-task-wave-table__duration\",\n task.durationMs == null && \"eth-task-wave-table__empty\"\n )}\n >\n {formatDuration(task.durationMs)}\n </span>\n )\n }\n ],\n [onTaskSelect]\n );\n\n return (\n <Surface\n className={clsx(\"eth-task-wave-table\", className)}\n title={wave?.label ?? title ?? \"Task wave\"}\n subtitle={wave?.id}\n description={description}\n data-eth-component=\"TaskWaveTable\"\n >\n <DataTable<Task>\n aria-label={\n typeof (wave?.label ?? title) === \"string\"\n ? `${wave?.label ?? title} tasks`\n : \"Wave tasks\"\n }\n className=\"eth-task-wave-table__table\"\n rows={rows}\n columns={columns}\n rowKey=\"id\"\n density=\"compact\"\n rowActions={rowActions}\n emptyState={<EmptyState title=\"No wave tasks\" />}\n />\n </Surface>\n );\n}\n","import * as React from \"react\";\nimport clsx from \"clsx\";\n\nexport interface MobileTaskShellProps {\n title?: React.ReactNode;\n subtitle?: React.ReactNode;\n progress?: React.ReactNode;\n main?: React.ReactNode;\n footer?: React.ReactNode;\n identity?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function MobileTaskShell({\n title,\n subtitle,\n progress,\n main,\n footer,\n identity,\n children,\n className\n}: MobileTaskShellProps) {\n const content = main ?? children;\n const hasHeader = title || subtitle || progress;\n const hasFooter = footer || identity;\n\n return (\n <section\n className={clsx(\"eth-mobile-task-shell\", className)}\n data-eth-component=\"MobileTaskShell\"\n >\n {hasHeader ? (\n <header className=\"eth-mobile-task-shell__header\">\n <div className=\"eth-mobile-task-shell__title-block\">\n {title ? <h1 className=\"eth-mobile-task-shell__title\">{title}</h1> : null}\n {subtitle ? <p className=\"eth-mobile-task-shell__subtitle\">{subtitle}</p> : null}\n </div>\n {progress ? <div className=\"eth-mobile-task-shell__progress\">{progress}</div> : null}\n </header>\n ) : null}\n <main className=\"eth-mobile-task-shell__main\">{content}</main>\n {hasFooter ? (\n <footer className=\"eth-mobile-task-shell__footer\">\n {footer ? <div className=\"eth-mobile-task-shell__footer-main\">{footer}</div> : null}\n {identity ? <div className=\"eth-mobile-task-shell__identity\">{identity}</div> : null}\n </footer>\n ) : null}\n </section>\n );\n}\n","import \"./styles.css\";\n\nexport { BackendThinkingChain } from \"./components/BackendThinkingChain\";\nexport { BlockingReasonPanel } from \"./components/BlockingReasonPanel\";\nexport { DAGEdge } from \"./components/DAGEdge\";\nexport { DAGLegend } from \"./components/DAGLegend\";\nexport { DAGNode } from \"./components/DAGNode\";\nexport { DecisionRequiredPanel } from \"./components/DecisionRequiredPanel\";\nexport { HumanInterventionPanel } from \"./components/HumanInterventionPanel\";\nexport { TaskApprovalPanel } from \"./components/TaskApprovalPanel\";\nexport { TaskCard } from \"./components/TaskCard\";\nexport { TaskDependencyList } from \"./components/TaskDependencyList\";\nexport { TaskDetailPanel } from \"./components/TaskDetailPanel\";\nexport { TaskHandoffPanel } from \"./components/TaskHandoffPanel\";\nexport { TaskProgressIndicator } from \"./components/TaskProgressIndicator\";\nexport { TaskRetryPanel } from \"./components/TaskRetryPanel\";\nexport { TaskRunLog } from \"./components/TaskRunLog\";\nexport { TaskStatusBadge } from \"./components/TaskStatusBadge\";\nexport { TaskTable } from \"./components/TaskTable\";\nexport { TaskTimeline } from \"./components/TaskTimeline\";\nexport { TaskWaveDAG } from \"./components/TaskWaveDAG\";\nexport { TaskWaveHeader } from \"./components/TaskWaveHeader\";\nexport { TaskWaveTable } from \"./components/TaskWaveTable\";\nexport { MobileTaskShell } from \"./components/MobileTaskShell\";\nexport type { MobileTaskShellProps } from \"./components/MobileTaskShell\";\nexport type {\n BackendThinkingChainProps,\n BackendThinkingStep,\n BlockingReasonPanelProps,\n DAGEdgeLegendItem,\n DAGEdgeLegendVariant,\n DAGEdgeModel,\n DAGEdgeProps,\n DAGLegendProps,\n DAGNodeModel,\n DAGNodeProps,\n DecisionEvidence,\n DecisionOption,\n DecisionRequiredPanelProps,\n HumanInterventionPanelProps,\n PositionedDAGNode,\n RiskLevel,\n Task,\n TaskApprovalPanelProps,\n TaskCardProps,\n TaskDependency,\n TaskDependencyListProps,\n TaskDetailPanelProps,\n TaskHandoffPanelProps,\n TaskPriority,\n TaskProgressIndicatorProps,\n TaskRetryPanelProps,\n TaskRunLogEntry,\n TaskRunLogProps,\n TaskStatusBadgeProps,\n TaskStep,\n TaskTableProps,\n TaskTimelineEvent,\n TaskTimelineProps,\n TaskWave,\n TaskWaveDAGProps,\n TaskWaveHeaderProps,\n TaskWaveTableProps\n} from \"./types\";\n\nexport const TaskComponentNames = [\n \"TaskCard\",\n \"TaskTable\",\n \"TaskDetailPanel\",\n \"TaskStatusBadge\",\n \"TaskProgressIndicator\",\n \"TaskDependencyList\",\n \"TaskTimeline\",\n \"TaskWaveTable\",\n \"TaskWaveHeader\",\n \"TaskWaveDAG\",\n \"DAGNode\",\n \"DAGEdge\",\n \"DAGLegend\",\n \"TaskApprovalPanel\",\n \"DecisionRequiredPanel\",\n \"BackendThinkingChain\",\n \"HumanInterventionPanel\",\n \"BlockingReasonPanel\",\n \"TaskHandoffPanel\",\n \"TaskRunLog\",\n \"TaskRetryPanel\",\n \"MobileTaskShell\"\n] as const;\nexport type TaskComponentName = (typeof TaskComponentNames)[number];\n"],"mappings":"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","names":["clsx","Badge","EmptyState","jsx","jsxs","React","clsx","jsx","jsxs","clsx","clsx","jsx","jsxs","clsx","clsx","jsx","jsxs","statusLabel","clsx","React","clsx","Surface","Tag","jsx","jsxs","Surface","clsx","Tag","React","clsx","ActionGroup","Badge","InlineNotification","Surface","jsx","jsxs","React","InlineNotification","jsx","jsxs","InlineNotification","clsx","Badge","Surface","Tag","jsx","Surface","clsx","Badge","Tag","React","clsx","Badge","EmptyState","clsx","Badge","jsx","jsxs","statusLabel","Badge","clsx","jsx","jsxs","Badge","clsx","EmptyState","clsx","ActionGroup","Badge","EmptyState","Surface","clsx","Badge","EmptyState","jsx","jsxs","clsx","EmptyState","Badge","jsx","jsxs","clsx","Surface","EmptyState","Badge","ActionGroup","React","clsx","Badge","Button","EmptyState","FormField","Surface","Textarea","jsx","jsxs","clsx","jsx","jsxs","clsx","statusLabel","React","clsx","Button","FormField","InlineNotification","Surface","Textarea","Fragment","jsx","jsxs","Surface","clsx","InlineNotification","FormField","Textarea","Button","React","clsx","Badge","EmptyState","Surface","jsx","jsxs","Surface","clsx","Badge","EmptyState","React","clsx","ActionGroup","Badge","EmptyState","StatusDot","jsx","jsxs","Badge","clsx","EmptyState","ActionGroup","React","clsx","EmptyState","Surface","Fragment","jsx","jsxs","Surface","clsx","EmptyState","clsx","Badge","Surface","Fragment","jsx","jsxs","Surface","clsx","Badge","React","clsx","Badge","EmptyState","StatusDot","Surface","DataTable","jsx","taskRowsFromItems","StatusDot","Badge","clsx","Surface","DataTable","EmptyState","clsx","jsx","jsxs"]}
@@ -0,0 +1,249 @@
1
+ import type * as React from "react";
2
+ import type { EthAction, EthDensity, EthIntent, EthOperationalStatus, SurfaceComponentProps } from "@echothink-ui/core";
3
+ import type { BulkAction, DataColumn } from "@echothink-ui/data";
4
+ export type TaskPriority = "low" | "medium" | "high" | "critical";
5
+ export interface TaskDependency extends Record<string, unknown> {
6
+ id: string;
7
+ title: string;
8
+ status: EthOperationalStatus;
9
+ relationship?: "blocks" | "blocked-by";
10
+ }
11
+ export interface TaskTimelineEvent extends Record<string, unknown> {
12
+ id: string;
13
+ timestamp: string | Date;
14
+ actor?: string;
15
+ kind: "status_change" | "comment" | "assignment" | "attachment" | "system";
16
+ summary: React.ReactNode;
17
+ details?: React.ReactNode;
18
+ }
19
+ export interface Task extends Record<string, unknown> {
20
+ id: string;
21
+ title: string;
22
+ assignee?: React.ReactNode;
23
+ dueAt?: string | Date;
24
+ status: EthOperationalStatus;
25
+ priority?: TaskPriority;
26
+ tags?: string[];
27
+ description?: React.ReactNode;
28
+ dependencies?: TaskDependency[];
29
+ history?: TaskTimelineEvent[];
30
+ order?: number;
31
+ durationMs?: number;
32
+ dependencyIds?: string[];
33
+ dependencyCount?: number;
34
+ }
35
+ export interface TaskWave extends Record<string, unknown> {
36
+ id: string;
37
+ label: string;
38
+ totalTasks: number;
39
+ statuses: Partial<Record<EthOperationalStatus, number>>;
40
+ startedAt?: string | Date;
41
+ eta?: string | Date;
42
+ }
43
+ export interface TaskStep {
44
+ id: string;
45
+ label: string;
46
+ status: EthOperationalStatus;
47
+ }
48
+ export interface DAGNodeModel extends Record<string, unknown> {
49
+ id: string;
50
+ label: string;
51
+ status: EthOperationalStatus;
52
+ x?: number;
53
+ y?: number;
54
+ }
55
+ export interface PositionedDAGNode extends DAGNodeModel {
56
+ x: number;
57
+ y: number;
58
+ }
59
+ export interface DAGEdgeModel extends Record<string, unknown> {
60
+ from: string;
61
+ to: string;
62
+ status?: EthOperationalStatus;
63
+ label?: string;
64
+ }
65
+ export type DAGEdgeLegendVariant = "dependency" | "critical" | "conditional";
66
+ export interface DAGEdgeLegendItem {
67
+ id: string;
68
+ label: React.ReactNode;
69
+ status?: EthOperationalStatus;
70
+ variant?: DAGEdgeLegendVariant;
71
+ }
72
+ export interface DecisionEvidence {
73
+ id: string;
74
+ label: string;
75
+ href?: string;
76
+ preview?: React.ReactNode;
77
+ }
78
+ export interface DecisionOption {
79
+ id: string;
80
+ label: string;
81
+ intent?: EthIntent;
82
+ description?: string;
83
+ }
84
+ export type RiskLevel = "low" | "medium" | "high" | "critical";
85
+ export interface BackendThinkingStep {
86
+ id: string;
87
+ title: string;
88
+ status: EthOperationalStatus;
89
+ summary?: string;
90
+ toolName?: string;
91
+ durationMs?: number;
92
+ redacted?: boolean;
93
+ children?: BackendThinkingStep[];
94
+ }
95
+ export interface TaskRunLogEntry extends Record<string, unknown> {
96
+ id: string;
97
+ timestamp: string | Date;
98
+ level: "info" | "warn" | "error" | "debug";
99
+ message: string;
100
+ redacted?: boolean;
101
+ }
102
+ export interface TaskCardProps extends Omit<React.HTMLAttributes<HTMLElement>, "title" | "onSelect"> {
103
+ task: Task;
104
+ actions?: EthAction[];
105
+ onSelect?: (task: Task) => void;
106
+ }
107
+ export interface TaskTableProps extends Omit<SurfaceComponentProps, "children"> {
108
+ tasks?: Task[];
109
+ density?: EthDensity;
110
+ selectable?: boolean;
111
+ selectedRows?: React.Key[];
112
+ onSelectionChange?: (keys: React.Key[]) => void;
113
+ rowActions?: (task: Task) => EthAction[];
114
+ bulkActions?: BulkAction<Task>[];
115
+ columns?: DataColumn<Task>[];
116
+ showFilters?: boolean;
117
+ statusFilter?: EthOperationalStatus | "all";
118
+ onStatusFilterChange?: (status: EthOperationalStatus | "all") => void;
119
+ }
120
+ export interface TaskDetailPanelProps extends Omit<SurfaceComponentProps, "children"> {
121
+ task?: Task;
122
+ dependencies?: TaskDependency[];
123
+ events?: TaskTimelineEvent[];
124
+ actions?: EthAction[];
125
+ }
126
+ export interface TaskStatusBadgeProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "children"> {
127
+ status: EthOperationalStatus;
128
+ label?: string;
129
+ }
130
+ export interface TaskProgressIndicatorProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children"> {
131
+ value?: number;
132
+ total?: number;
133
+ steps?: TaskStep[];
134
+ label?: string;
135
+ }
136
+ export interface TaskDependencyListProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children"> {
137
+ dependencies?: TaskDependency[];
138
+ blocks?: TaskDependency[];
139
+ blockedBy?: TaskDependency[];
140
+ emptyTitle?: React.ReactNode;
141
+ }
142
+ export interface TaskTimelineProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children"> {
143
+ events?: TaskTimelineEvent[];
144
+ }
145
+ export interface TaskWaveHeaderProps extends Omit<SurfaceComponentProps, "children"> {
146
+ wave?: TaskWave;
147
+ actions?: EthAction[];
148
+ }
149
+ export interface TaskWaveTableProps extends Omit<SurfaceComponentProps, "children"> {
150
+ wave?: TaskWave;
151
+ tasks?: Task[];
152
+ onTaskSelect?: (task: Task) => void;
153
+ rowActions?: (task: Task) => EthAction[];
154
+ }
155
+ export interface TaskWaveDAGProps extends Omit<SurfaceComponentProps, "children"> {
156
+ nodes?: DAGNodeModel[];
157
+ edges?: DAGEdgeModel[];
158
+ layout?: "lr" | "tb";
159
+ onNodeSelect?: (node: DAGNodeModel) => void;
160
+ selectedNodeId?: string;
161
+ }
162
+ export interface DAGNodeProps extends Omit<React.SVGAttributes<SVGGElement>, "children" | "onSelect"> {
163
+ node: PositionedDAGNode;
164
+ selected?: boolean;
165
+ onSelect?: (node: PositionedDAGNode) => void;
166
+ }
167
+ export interface DAGEdgeProps extends Omit<React.SVGAttributes<SVGPathElement>, "from" | "to"> {
168
+ from: {
169
+ x: number;
170
+ y: number;
171
+ };
172
+ to: {
173
+ x: number;
174
+ y: number;
175
+ };
176
+ status?: EthOperationalStatus;
177
+ label?: string;
178
+ }
179
+ export interface DAGLegendProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children"> {
180
+ statuses?: EthOperationalStatus[];
181
+ edgeTypes?: DAGEdgeLegendItem[];
182
+ }
183
+ export interface DecisionRequiredPanelProps extends Omit<SurfaceComponentProps, "children"> {
184
+ title: React.ReactNode;
185
+ summary?: React.ReactNode;
186
+ riskLevel?: RiskLevel;
187
+ evidence?: DecisionEvidence[];
188
+ options?: DecisionOption[];
189
+ onDecide?: (optionId: string) => void;
190
+ decidedOptionId?: string;
191
+ }
192
+ export interface TaskApprovalPanelProps extends Omit<SurfaceComponentProps, "children"> {
193
+ taskRef?: React.ReactNode;
194
+ diffRef?: React.ReactNode;
195
+ policyRef?: React.ReactNode;
196
+ summary?: React.ReactNode;
197
+ evidence?: DecisionEvidence[];
198
+ onApprove?: (reason: string) => void;
199
+ onReject?: (reason: string) => void;
200
+ onRequestChanges?: (reason: string) => void;
201
+ state?: "idle" | "pending" | "approved" | "rejected";
202
+ }
203
+ export interface BackendThinkingChainProps extends Omit<React.HTMLAttributes<HTMLElement>, "children"> {
204
+ steps?: BackendThinkingStep[];
205
+ streaming?: boolean;
206
+ }
207
+ export interface HumanInterventionPanelProps extends Omit<SurfaceComponentProps, "children"> {
208
+ reason?: React.ReactNode;
209
+ affectedTask?: Pick<Task, "id" | "title">;
210
+ actions?: EthAction[];
211
+ urgency?: "low" | "medium" | "high";
212
+ }
213
+ export interface BlockingReasonPanelProps extends Omit<SurfaceComponentProps, "children"> {
214
+ blockers?: Array<{
215
+ id: string;
216
+ reason: React.ReactNode;
217
+ ownerActor?: string;
218
+ resolveAction?: EthAction;
219
+ }>;
220
+ }
221
+ export interface TaskHandoffPanelProps extends Omit<SurfaceComponentProps, "children"> {
222
+ assigneeOptions?: Array<{
223
+ id: string;
224
+ label: string;
225
+ kind: "user" | "team" | "agent";
226
+ }>;
227
+ currentAssigneeId?: string;
228
+ onHandoff?: (toId: string, reason: string) => void;
229
+ reasonRequired?: boolean;
230
+ }
231
+ export interface TaskRunLogProps extends Omit<SurfaceComponentProps, "children"> {
232
+ entries?: TaskRunLogEntry[];
233
+ streaming?: boolean;
234
+ onPauseToggle?: () => void;
235
+ onFilter?: (level: TaskRunLogEntry["level"]) => void;
236
+ levelFilter?: string[];
237
+ windowSize?: number;
238
+ }
239
+ export interface TaskRetryPanelProps extends Omit<SurfaceComponentProps, "children"> {
240
+ taskRef?: React.ReactNode;
241
+ failureSummary?: React.ReactNode;
242
+ retryPolicy?: {
243
+ maxRetries: number;
244
+ backoff: "linear" | "exponential";
245
+ intervalMs: number;
246
+ };
247
+ attemptCount?: number;
248
+ onRetry?: (reason: string) => void;
249
+ }