@flexkit/studio 0.2.11 → 0.2.12

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 (40) hide show
  1. package/dist/{chat-page-3YSJP7FC.js → chat-page-EKOGKEFR.js} +3 -3
  2. package/dist/{chat-page-3YSJP7FC.js.map → chat-page-EKOGKEFR.js.map} +1 -1
  3. package/dist/{chunk-OI6GA6PE.js → chunk-6YOVF2AD.js} +3 -3
  4. package/dist/{chunk-OI6GA6PE.js.map → chunk-6YOVF2AD.js.map} +1 -1
  5. package/dist/{chunk-YODWX4WT.js → chunk-7IHEL6LU.js} +2 -2
  6. package/dist/{chunk-YODWX4WT.js.map → chunk-7IHEL6LU.js.map} +1 -1
  7. package/dist/{chunk-7JSGAY3E.js → chunk-BOXFB6E6.js} +2 -2
  8. package/dist/{chunk-7JSGAY3E.js.map → chunk-BOXFB6E6.js.map} +1 -1
  9. package/dist/{chunk-TPLL535V.js → chunk-C47FNPLK.js} +3 -3
  10. package/dist/{chunk-TPLL535V.js.map → chunk-C47FNPLK.js.map} +1 -1
  11. package/dist/{chunk-GDTOP4MU.js → chunk-EWBEPYML.js} +3 -3
  12. package/dist/{chunk-GDTOP4MU.js.map → chunk-EWBEPYML.js.map} +1 -1
  13. package/dist/{chunk-22DXYOXX.js → chunk-F2DHCPWW.js} +2 -2
  14. package/dist/{chunk-22DXYOXX.js.map → chunk-F2DHCPWW.js.map} +1 -1
  15. package/dist/{chunk-YSMRXGVX.js → chunk-OFJOZMCR.js} +2 -2
  16. package/dist/{chunk-YSMRXGVX.js.map → chunk-OFJOZMCR.js.map} +1 -1
  17. package/dist/chunk-QQSI7BPK.js +8 -0
  18. package/dist/chunk-QQSI7BPK.js.map +1 -0
  19. package/dist/index.js +1 -1
  20. package/dist/{list-N5WCJSJC.js → list-DOTORSUC.js} +2 -2
  21. package/dist/{list-N5WCJSJC.js.map → list-DOTORSUC.js.map} +1 -1
  22. package/dist/{pages-65QNO7ME.js → pages-ILAXYS2J.js} +3 -3
  23. package/dist/{pages-65QNO7ME.js.map → pages-ILAXYS2J.js.map} +1 -1
  24. package/dist/{plugin-pages-F5K745MZ.js → plugin-pages-RKJRHKNL.js} +2 -2
  25. package/dist/{plugin-pages-F5K745MZ.js.map → plugin-pages-RKJRHKNL.js.map} +1 -1
  26. package/dist/{root-DK5C7DYH.js → root-76YQTZUI.js} +2 -2
  27. package/dist/{root-DK5C7DYH.js.map → root-76YQTZUI.js.map} +1 -1
  28. package/dist/{root-MMAJEVBH.js → root-A4VHAEK5.js} +3 -3
  29. package/dist/{root-MMAJEVBH.js.map → root-A4VHAEK5.js.map} +1 -1
  30. package/dist/{root-4E3YUTQU.js → root-JB3NZZNZ.js} +3 -3
  31. package/dist/{root-4E3YUTQU.js.map → root-JB3NZZNZ.js.map} +1 -1
  32. package/dist/{root-WYRLSQPK.js → root-RE3ZNXQ3.js} +2 -2
  33. package/dist/{root-WYRLSQPK.js.map → root-RE3ZNXQ3.js.map} +1 -1
  34. package/dist/{search-EK4XBDGL.js → search-WUO6VWKU.js} +2 -2
  35. package/dist/{search-EK4XBDGL.js.map → search-WUO6VWKU.js.map} +1 -1
  36. package/dist/{skills-pages-O35YZMMC.js → skills-pages-POKCFHOL.js} +2 -2
  37. package/dist/{skills-pages-O35YZMMC.js.map → skills-pages-POKCFHOL.js.map} +1 -1
  38. package/package.json +3 -3
  39. package/dist/chunk-B4WSTNZ3.js +0 -8
  40. package/dist/chunk-B4WSTNZ3.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/apps/ai/approvals-count.ts","../src/apps/ai/schema-deploy-watch.ts","../src/apps/ai/approval-card.tsx","../src/apps/ai/status-label.ts","../src/apps/ai/approval-parts.ts","../src/apps/ai/question-parts.ts","../src/apps/ai/agent/attachments.tsx","../src/apps/ai/agent/monitor-parts.tsx","../src/apps/ai/agent/plugin-connect-state.ts","../src/apps/ai/agent/plugin-connect-card.tsx","../src/apps/ai/resumable-stream.ts","../src/apps/ai/question-card.tsx","../src/apps/ai/replay.tsx"],"names":["useRevalidateApprovalsCount","currentProjectId","useConfig","mutate","useSWRConfig","useCallback","known","key","paths","POLL_INTERVAL_MS","POLL_LIMIT","watching","urlFetcher","approvalUrl","response","settleSchemaDeployment","approval","projectId","revalidate","revalidateProjectSchema","watchSchemaDeployment","approvalId","fetchApproval","sleep","ms","resolve","load","attempt","APPROVAL_STATUS_STYLES","ApprovalStatusBadge","status","jsx","Badge","formatCellValue","value","DiffCell","after","before","beforeText","afterText","jsxs","MoveRightIcon","getOperationTitle","operation","entity","count","OperationPreviewTable","contextColumns","column","Table","TableHeader","TableRow","TableHead","TableBody","row","index","TableCell","columns","OperationDocuments","operations","plugin","chat","title","getChatPluginAction","segments","toolName","pluginName","action","app","letter","query","connection","account","getChatActionTitle","pluginAction","SchemaRowsTable","isSet","shownColumns","getSchemaOperationTitle","SchemaChangePreview","preview","summary","TriangleAlertIcon","change","warning","isSameApprovalSnapshot","left","right","useApprovalDecision","api","initialApproval","onDecided","setApproval","useState","prevInitialApproval","setPrevInitialApproval","errorMessage","setErrorMessage","isDeciding","startDecideTransition","useTransition","isRejectDialogOpen","setIsRejectDialogOpen","isStale","setIsStale","rejectReason","setRejectReason","revalidateApprovalsCount","applyResult","nextApproval","decide","approved","automationEdits","force","reason","remember","result","message","error","ApprovalDecisionActions","allowRemember","askForRejectionReason","variant","isHeader","buttonClassName","buttonSize","setRemember","rememberId","useId","Fragment","Button","LoaderCircle","CheckIcon","XIcon","Checkbox","checked","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","Textarea","event","DialogFooter","ArrowRightIcon","NOTIFY_RULE_LABELS","describeVisibility","proposal","AutomationProposalView","instructions","isPending","onInstructionsChange","instructionsId","created","rows","Link","AutomationChangeView","settings","field","block","AutomationDecisionActions","trimmed","edits","PlayIcon","ApprovalCardBody","automationInstructions","onAutomationInstructionsChange","formatDistance","format","ApprovalCard","setAutomationInstructions","ApprovalDrawer","onClose","DrawerModal","JEV_APPROVAL_REASON_PREFIX","TOOL_ALLOW_RULE_REASON_PREFIX","ROLLING_STATUS_PART_TYPES","isRollingStatusPartType","type","getPartData","part","isJevAutoApproved","truncateLabel","text","maxLength","cut","lastSpace","stripInlineMarkdown","getCommittedReasoningText","lastNewline","lastSentence","sentenceEnd","match","boundary","getReasoningStatusLabel","options","lines","line","last","candidate","plain","humanizeToolName","tool","getRollingStatusLabel","data","AGENT_INTERNAL_ERROR_PART_TYPES","getRollingStatusError","isHiddenReplayPart","getPlanStatusLabel","current","step","getLiveStatusLabel","messageHasPendingMutationApproval","settlePendingMutationApprovals","decided","changed","parts","getMutationApprovalIds","approvalIds","pendingOnly","getPendingMutationApprovalIds","messageHasPendingUserQuestion","createQuestionDrafts","questions","toggleQuestionOption","question","draft","label","item","setQuestionOther","other","getQuestionAnswers","drafts","answers","formatQuestionAnswer","answer","ATTACHMENT_MAX_BYTES","ATTACHMENTS_MAX_PER_MESSAGE","SUPPORTED_EXTENSIONS","SUPPORTED_UNNAMED_TYPES","ATTACHMENT_ACCEPT","extension","getExtension","filename","dotIndex","getAttachmentValidationError","file","readComposerFile","blob","useAttachmentUploads","onError","attachments","usePromptInputController","entriesRef","useRef","setVersion","bump","removeRef","onErrorRef","useEffect","currentIds","fileId","entry","controller","nativeFile","validationError","uploaded","isUploading","fileIds","attachment","isImageMediaType","mediaType","ImagePreviewDialog","image","open","DialogClose","ChipRemoveButton","onRemove","ImageThumbnail","onOpen","sizeClassName","Spinner","getFileTypeLabel","subtype","FileChip","href","content","FileIcon","chipClassName","ComposerAttachments","uploads","usePromptInputAttachments","setPreview","getAttachmentsFromParts","MessageAttachments","images","files","getMonitorEventData","MonitorEventCard","hidden","RadarIcon","MonitorChips","chatId","onTurnIntoAutomation","sending","useSWR","fetcher","stopping","setStopping","monitors","stop","monitor","toast","Tooltip","TooltipTrigger","BotIcon","TooltipContent","chatConnection","primaries","scopePermitted","canManage","scope","getPluginConnectState","connectionId","broken","connected","scopes","PluginConnectContext","createContext","SCOPE_OPTIONS","PluginLogo","name","src","size","ConsentDialog","busy","logoUrl","onContinue","onOpenChange","setScope","promises","promise","PluginConnectCard","pluginId","useMemo","createApiClient","base","detailKey","revalidateKey","useContext","consentOpen","setConsentOpen","connecting","setConnecting","connectingRef","failure","setFailure","CircleAlertIcon","state","reconnect","authorize","connectPluginPopup","detail","PluginConnectedNotice","PlugIcon","getPluginConnectedData","LegacyStreamError","PermanentStreamError","createResumableUiStream","url","signal","onState","wake","fetchStream","retryMs","cursor","failures","bridge","writer","local","abort","wait","done","timer","pump","reader","partial","complete","end","frame","pipeJsonRender","SETTLED_LABELS","OptionButton","description","multiSelect","onClick","selected","QuestionInput","disabled","onChange","option","Input","SettledQuestion","QuestionCard","setDrafts","settled","setSettled","submitting","setSubmitting","shown","submit","itemIndex","LazyRunSpecPart","lazy","module","RunSpecPart","props","Suspense","useProjectApi","MAX_STREAM_ATTEMPTS","STREAM_RETRY_DELAY_MS","REPLAY_RENDER_INTERVAL_MS","JSON_RENDER_SPEC_PART_TYPE","RunReplayActionsContext","ChatApprovalContext","delay","isAbortError","hasRenderableParts","getMarkerIds","messages","markerIds","splitSessionMessages","chunkIndex","flush","useSessionMessages","isTerminalRunStatus","shouldPauseStreamForApproval","latestMessage","recordStatus","suppressApprovalPause","useRunStream","streamApi","legacy","setLegacy","fallback","useLegacyRunStream","setMessage","setStatus","optionsRef","wakeRef","resumeToken","latest","stream","next","readUIMessageStream","decidedApprovalsRef","suppressApprovalPauseRef","streamApiRef","messageRef","streamChanged","abortController","rebuildFloor","nextMessage","startIndexSeparator","consumeOnce","sawFinish","chunkStream","parseJsonEventStream","uiMessageChunkSchema","messageStream","throttleTimer","caughtUp","flushLatestMessage","consume","loadTimeout","toMutationApprovalPartData","isCodeFenceOnlyText","MidTurnMessagePart","CornerDownRightIcon","MessagePart","partIndex","ToolErrorLine","otherPart","TextPart","GenerateFilesPart","RunArtifactPart","ToolDeliveryPart","RunSummaryPart","ToolMessage","ToolHeader","StatusIcon","XCircleIcon","AutoApprovedCallPart","MutationApprovalPart","UserQuestionPart","BulkGraphqlActionPart","nextPart","UnknownDataPart","MessageResponse","SHIMMER_PERIOD_MS","RollingStatusText","phaseOriginRef","getPhaseDelayMs","transition","setTransition","STATUS_LABEL_MIN_DWELL_MS","useStableStatusLabel","minDwellMs","displayed","setDisplayed","shownAtRef","pendingRef","timeoutId","TurnStatusLine","visible","stableLabel","children","className","isError","loading","StatusToolPart","icon","lastInProgress","generated","generating","CloudUploadIcon","path","isDone","previewUrl","downloadUrl","bytes","formatBytes","FileTextIcon","getArtifactLabel","DownloadIcon","LinkIcon","providerLabel","MessageSquareIcon","SendIcon","CheckCircle2Icon","CircleSlashIcon","replayActions","isChat","previousApprovalStatusRef","isValidating","latestData","approvalStatus","approvedSchemaChange","previousStatus","handleDecided","body","ShieldIcon","DatabaseZapIcon","plural","MessageCircleQuestionIcon","ShieldCheckIcon","progress","sizeBytes","kilobytes"],"mappings":"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","file":"chunk-B4WSTNZ3.js","sourcesContent":["import { useCallback } from 'react';\nimport { useSWRConfig } from 'swr';\nimport { useConfig } from '../../core/config/config-context';\nimport { paths } from './api';\nimport type { AutomationApprovals } from './types';\n\n/**\n * The sidebar badges (Approvals and Activity) poll only every 30 seconds.\n * Pages that learn earlier that the counts changed (a run pausing for\n * approval, a decision, the inbox loading) call this so they update at once.\n */\nexport function useRevalidateApprovalsCount(): (_known?: AutomationApprovals) => void {\n const { currentProjectId } = useConfig();\n const { mutate } = useSWRConfig();\n\n return useCallback(\n (known?: AutomationApprovals) => {\n if (!currentProjectId) {\n return;\n }\n\n const key = paths(currentProjectId).approvalsCount;\n\n // A fresh inbox response carries the count already; show it before the refetch lands.\n void (known ? mutate(key, known, { revalidate: true }) : mutate(key));\n void mutate(paths(currentProjectId).activitySummary());\n },\n [currentProjectId, mutate]\n );\n}\n","import { revalidateProjectSchema } from '../../core/config/use-project-schemas';\nimport type { AutomationApproval } from './types';\n\nconst POLL_INTERVAL_MS = 5_000;\nconst POLL_LIMIT = 150;\nconst watching = new Set<string>();\n\n/** `null` = transient failure (keep polling); `'missing'` = the approval does not exist (stop). */\nexport type ApprovalFetcher = () => Promise<AutomationApproval | 'missing' | null>;\n\nfunction urlFetcher(approvalUrl: string): ApprovalFetcher {\n return async () => {\n const response = await fetch(approvalUrl, { credentials: 'include', mode: 'cors' });\n\n if (response.status === 404) {\n return 'missing';\n }\n\n if (!response.ok) {\n return null;\n }\n\n const body = (await response.json()) as { approval?: AutomationApproval };\n\n return body.approval ?? 'missing';\n };\n}\n\n/**\n * Decides whether a watch is still needed: `true` to keep polling, `false`\n * once the deployment settled (schema refreshed when it succeeded).\n */\nexport function settleSchemaDeployment(\n approval: AutomationApproval | null,\n projectId: string,\n revalidate: (_projectId: string) => Promise<unknown> = revalidateProjectSchema\n): boolean {\n if (!approval || approval.kind !== 'schema' || approval.status !== 'approved' || approval.error) {\n return false;\n }\n\n if (approval.executedAt) {\n void revalidate(projectId);\n\n return false;\n }\n\n return true;\n}\n\n/**\n * After a schema change is approved the deployment runs server-side for a\n * while. This keeps polling the approval, independently of which component\n * approved it (chat card or inbox drawer) and of navigation inside the\n * Studio, and refetches the project schema once the deployment completed.\n */\nexport function watchSchemaDeployment({\n approvalId,\n approvalUrl,\n fetchApproval,\n projectId,\n revalidate = revalidateProjectSchema,\n sleep = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms)),\n}: {\n approvalId: string;\n /** GET endpoint returning `{ approval }`; required unless `fetchApproval` is given. */\n approvalUrl?: string;\n fetchApproval?: ApprovalFetcher;\n projectId: string;\n revalidate?: (_projectId: string) => Promise<unknown>;\n sleep?: (_ms: number) => Promise<void>;\n}): void {\n const key = `${projectId}:${approvalId}`;\n const load = fetchApproval ?? (approvalUrl ? urlFetcher(approvalUrl) : null);\n\n if (!load || watching.has(key)) {\n return;\n }\n\n watching.add(key);\n\n void (async () => {\n try {\n for (let attempt = 0; attempt < POLL_LIMIT; attempt += 1) {\n let approval: AutomationApproval | 'missing' | null = null;\n\n try {\n approval = await load();\n } catch {\n approval = null;\n }\n\n if (approval === 'missing') {\n return;\n }\n\n // A transient fetch failure (network blip, 5xx) keeps the watch alive.\n if (approval !== null && !settleSchemaDeployment(approval, projectId, revalidate)) {\n return;\n }\n\n await sleep(POLL_INTERVAL_MS);\n }\n } finally {\n watching.delete(key);\n }\n })();\n}\n","import type { JSX } from 'react';\nimport { useId, useState, useTransition } from 'react';\nimport { format, formatDistance } from 'date-fns';\nimport { ArrowRightIcon, CheckIcon, LoaderCircle, MoveRightIcon, PlayIcon, TriangleAlertIcon, XIcon } from 'lucide-react';\nimport { Link } from 'react-router-dom';\nimport {\n Badge,\n Button,\n Checkbox,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DrawerModal,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n Textarea,\n} from '../../ui';\nimport { paths, type ApiClient } from './api';\nimport { useRevalidateApprovalsCount } from './approvals-count';\nimport { watchSchemaDeployment } from './schema-deploy-watch';\nimport type {\n AutomationApproval,\n AutomationApprovalOperation,\n AutomationApprovalPreviewOperation,\n AutomationApprovalStatus,\n AutomationChangePreview,\n AutomationNotifyRule,\n AutomationProposalPreview,\n} from './types';\n\nconst APPROVAL_STATUS_STYLES: { [status in AutomationApprovalStatus]: string } = {\n approved: 'fk:bg-success/20 fk:text-success',\n cancelled: 'fk:bg-secondary fk:text-secondary-foreground',\n expired: 'fk:bg-secondary fk:text-secondary-foreground',\n pending: 'fk:bg-amber-500/20 fk:text-amber-600',\n rejected: 'fk:bg-destructive/15 fk:text-destructive',\n};\n\nexport function ApprovalStatusBadge({ status }: { status: AutomationApprovalStatus }): JSX.Element {\n return (\n <Badge\n className={`fk:border-none fk:h-4.75 fk:text-[0.6875rem] fk:leading-4.5 fk:tracking-wide ${APPROVAL_STATUS_STYLES[status]}`}\n variant=\"secondary\"\n >\n {status}\n </Badge>\n );\n}\n\nfunction formatCellValue(value: unknown): string {\n if (value === null || value === undefined) {\n return '—';\n }\n\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n\n return String(value);\n}\n\nfunction DiffCell({ after, before }: { after: unknown; before: unknown }): JSX.Element {\n const beforeText = formatCellValue(before);\n const afterText = formatCellValue(after);\n\n if (beforeText === afterText) {\n return <span className=\"fk:text-muted-foreground\">{beforeText}</span>;\n }\n\n return (\n <span className=\"fk:inline-flex fk:flex-wrap fk:items-center fk:gap-1.5\">\n <span className=\"fk:rounded fk:bg-destructive/10 fk:px-1 fk:text-destructive fk:line-through fk:corner-squircle\">{beforeText}</span>\n <MoveRightIcon className=\"fk:size-3 fk:shrink-0 fk:text-muted-foreground\" />\n <span className=\"fk:rounded fk:bg-success/15 fk:px-1 fk:text-success fk:corner-squircle\">{afterText}</span>\n </span>\n );\n}\n\nfunction getOperationTitle(operation: AutomationApprovalPreviewOperation): string {\n const entity = operation.entity ?? 'entities';\n const count = operation.affectedCount !== null ? ` · ${operation.affectedCount.toString()} affected` : '';\n\n if (operation.kind === 'create') {\n return `Create ${entity}${count}`;\n }\n\n if (operation.kind === 'update') {\n return `Update ${entity}${count}`;\n }\n\n if (operation.kind === 'delete') {\n return `Delete ${entity}${count}`;\n }\n\n return `Mutation on ${entity}${count}`;\n}\n\nfunction OperationPreviewTable({ operation }: { operation: AutomationApprovalPreviewOperation }): JSX.Element | null {\n if (operation.rows.length === 0) {\n return null;\n }\n\n const contextColumns = (operation.contextColumns ?? []).filter((column) => column !== '_id');\n\n if (operation.kind === 'delete') {\n return (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Records to delete</TableHead>\n {contextColumns.map((column) => (\n <TableHead key={column}>{column}</TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {operation.rows.map((row, index) => (\n <TableRow className=\"fk:bg-destructive/5\" key={row.id ?? index.toString()}>\n <TableCell className=\"fk:font-mono fk:text-xs fk:text-destructive\">\n {row.id ?? formatCellValue(row.before?._id)}\n </TableCell>\n {contextColumns.map((column) => (\n <TableCell className=\"fk:text-xs fk:text-muted-foreground\" key={column}>\n {formatCellValue(row.before?.[column])}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n );\n }\n\n const columns = operation.columns.filter((column) => column !== '_id' && !contextColumns.includes(column));\n\n return (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>ID</TableHead>\n {contextColumns.map((column) => (\n <TableHead key={column}>{column}</TableHead>\n ))}\n {columns.map((column) => (\n <TableHead key={column}>{column}</TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {operation.rows.map((row, index) => (\n <TableRow key={row.id ?? index.toString()}>\n <TableCell className=\"fk:font-mono fk:text-xs fk:text-muted-foreground\">{row.id ?? '—'}</TableCell>\n {contextColumns.map((column) => (\n <TableCell className=\"fk:max-w-72 fk:text-xs fk:text-muted-foreground\" key={column}>\n <span className=\"fk:line-clamp-3\">{formatCellValue(row.before?.[column])}</span>\n </TableCell>\n ))}\n {columns.map((column) => (\n <TableCell className=\"fk:text-xs\" key={column}>\n {operation.kind === 'create' ? (\n <span className=\"fk:rounded fk:bg-success/15 fk:px-1 fk:text-success fk:corner-squircle\">\n {formatCellValue(row.after?.[column])}\n </span>\n ) : (\n <DiffCell after={row.after?.[column]} before={row.before?.[column]} />\n )}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n );\n}\n\nfunction OperationDocuments({\n operations,\n plugin,\n chat,\n title,\n}: {\n operations: AutomationApprovalOperation[];\n plugin: boolean;\n chat: boolean;\n title?: string;\n}): JSX.Element {\n return (\n <details className=\"fk:rounded-md fk:border fk:border-border fk:corner-squircle\">\n <summary className=\"fk:cursor-pointer fk:px-3 fk:py-2 fk:text-xs fk:font-medium fk:text-muted-foreground\">\n {title ?? (chat ? 'Action details' : plugin ? 'Plugin tool and arguments' : `GraphQL documents (${operations.length})`)}\n </summary>\n <div className=\"fk:space-y-3 fk:border-t fk:border-border fk:p-3\">\n {operations.map((operation, index) => (\n <div className=\"fk:space-y-2\" key={index.toString()}>\n <pre className=\"fk:overflow-x-auto fk:rounded-md fk:bg-muted fk:p-3 fk:text-xs fk:corner-squircle\">{operation.query}</pre>\n {operation.variables && Object.keys(operation.variables).length > 0 ? (\n <pre className=\"fk:overflow-x-auto fk:rounded-md fk:bg-muted/60 fk:p-3 fk:text-xs fk:corner-squircle\">\n {JSON.stringify(operation.variables, null, 2)}\n </pre>\n ) : null}\n </div>\n ))}\n </div>\n </details>\n );\n}\n\nfunction getChatPluginAction(\n approval: AutomationApproval\n): { action: string; app: string; account?: string; scope?: 'project' | 'personal' } | null {\n if (approval.kind !== 'plugin') {\n return null;\n }\n\n const toolPath = approval.operations[0]?.query.split('\\n')[0]?.trim();\n const segments = toolPath?.split('/');\n const toolName = segments?.at(-1);\n const pluginName = segments?.[0];\n\n if (!toolName || !pluginName || segments?.length < 2) {\n return null;\n }\n\n const action = toolName\n .replace(/([a-z])([A-Z])/g, '$1 $2')\n .replace(/[_-]+/g, ' ')\n .toLowerCase();\n const app = pluginName.replace(/[_-]+/g, ' ').replace(/\\b\\w/g, (letter) => letter.toUpperCase());\n const query = approval.operations[0]?.query ?? '';\n const connection = /^Connection:\\s*(Project|Personal)\\s+—\\s+(.+)$/m.exec(query);\n\n if (connection?.[1] && connection[2]) {\n return {\n action,\n app,\n account: connection[2].trim(),\n scope: connection[1] === 'Project' ? 'project' : 'personal',\n };\n }\n\n // Older approvals only carried the account email.\n const account = /^Connection:.*?([^\\s<>]+@[^\\s<>]+)\\s*$/m.exec(query)?.[1];\n\n return { action, app, account };\n}\n\nfunction getChatActionTitle(approval: AutomationApproval): string {\n const pluginAction = getChatPluginAction(approval);\n\n if (pluginAction) {\n return `${pluginAction.action.charAt(0).toUpperCase()}${pluginAction.action.slice(1)} in ${pluginAction.app}`;\n }\n\n if (approval.kind === 'exec') {\n return 'Run a sandbox command';\n }\n\n if (approval.kind === 'schema') {\n return approval.operationsSummary.replace(/^Schema: /, '');\n }\n\n if (approval.kind === 'automation' && approval.preview?.automation) {\n return `Create the automation “${approval.preview.automation.name}”`;\n }\n\n if (approval.kind === 'automation' && approval.preview?.automationChange) {\n return `Change the automation “${approval.preview.automationChange.name}”`;\n }\n\n return approval.kind === 'plugin' ? 'Use a connected app' : approval.operationsSummary;\n}\n\n\nfunction SchemaRowsTable({ operation }: { operation: AutomationApprovalPreviewOperation }): JSX.Element | null {\n if (operation.rows.length === 0) {\n return null;\n }\n\n const isSet = (value: unknown): boolean => value !== null && value !== undefined && value !== false;\n // Hide columns no row sets; in a change table also hide columns no row changes.\n const shownColumns = operation.columns.filter((column) => {\n const anySet = operation.rows.some((row) => isSet(row.before?.[column]) || isSet(row.after?.[column]));\n\n if (!anySet) return false;\n if (operation.kind !== 'update') return true;\n\n return operation.rows.some((row) => formatCellValue(row.before?.[column]) !== formatCellValue(row.after?.[column]));\n });\n\n return (\n <div className=\"fk:overflow-x-auto fk:rounded-md fk:border fk:border-border fk:corner-squircle\">\n <Table className=\"fk:text-xs\">\n <TableHeader>\n <TableRow>\n <TableHead className=\"fk:h-8\">{operation.entity === 'scopes' || operation.entity === 'spaces' || operation.entity === 'studio' ? 'Setting' : 'Attribute'}</TableHead>\n {shownColumns.map((column) => (\n <TableHead className=\"fk:h-8\" key={column}>\n {column}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {operation.rows.map((row, index) => (\n <TableRow key={row.id ?? index.toString()}>\n <TableCell className=\"fk:py-1.5 fk:font-mono fk:text-[0.7rem]\">\n {operation.kind === 'delete' ? <span className=\"fk:line-through fk:text-destructive\">{row.id}</span> : row.id}\n {operation.kind === 'update' && row.before === null ? (\n <Badge className=\"fk:ml-2\" variant=\"secondary\">\n new\n </Badge>\n ) : null}\n {operation.kind === 'update' && row.after === null ? (\n <Badge className=\"fk:ml-2\" variant=\"destructive\">\n removed\n </Badge>\n ) : null}\n </TableCell>\n {shownColumns.map((column) => (\n <TableCell className=\"fk:py-1.5\" key={column}>\n {operation.kind === 'create' ? (\n <span>{formatCellValue(row.after?.[column])}</span>\n ) : operation.kind === 'delete' ? (\n <span className=\"fk:text-muted-foreground\">{formatCellValue(row.before?.[column])}</span>\n ) : (\n <DiffCell after={row.after?.[column]} before={row.before?.[column]} />\n )}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n );\n}\n\nfunction getSchemaOperationTitle(operation: AutomationApprovalPreviewOperation): string {\n const entity = operation.entity ?? 'schema';\n\n if (entity === 'scopes' || entity === 'spaces' || entity === 'studio') {\n return `Change ${entity === 'studio' ? 'Studio settings' : entity}`;\n }\n\n if (operation.kind === 'create') {\n return `Add entity ${entity} · ${operation.rows.length.toString()} attribute${operation.rows.length === 1 ? '' : 's'}`;\n }\n\n if (operation.kind === 'delete') {\n return `Remove entity ${entity}`;\n }\n\n return `Change entity ${entity}`;\n}\n\n/** Review card body for agent-proposed schema deployments. */\nfunction SchemaChangePreview({ preview }: { preview: NonNullable<AutomationApproval['preview']> }): JSX.Element {\n const summary = preview.schema;\n\n return (\n <div className=\"fk:space-y-4\">\n {summary && summary.breakingChanges.length > 0 ? (\n <div className=\"fk:rounded-md fk:border fk:border-destructive/30 fk:bg-destructive/5 fk:p-3 fk:text-sm fk:corner-squircle\">\n <div className=\"fk:mb-1 fk:flex fk:items-center fk:gap-2 fk:font-medium fk:text-destructive\">\n <TriangleAlertIcon className=\"fk:size-4\" />\n Breaking changes: existing data becomes inaccessible\n </div>\n <ul className=\"fk:list-disc fk:pl-5 fk:text-destructive\">\n {summary.breakingChanges.map((change) => (\n <li key={change}>{change}</li>\n ))}\n </ul>\n </div>\n ) : null}\n {summary && summary.warnings.length > 0 ? (\n <div className=\"fk:rounded-md fk:border fk:border-amber-500/40 fk:bg-amber-500/10 fk:p-3 fk:text-sm fk:corner-squircle\">\n <ul className=\"fk:list-disc fk:pl-5\">\n {summary.warnings.map((warning) => (\n <li key={warning}>{warning}</li>\n ))}\n </ul>\n </div>\n ) : null}\n {preview.operations.map((operation, index) => (\n <div className=\"fk:space-y-2\" key={`${operation.entity ?? ''}-${index.toString()}`}>\n <div className={`fk:text-sm fk:font-medium ${operation.kind === 'delete' ? 'fk:text-destructive' : ''}`}>\n {getSchemaOperationTitle(operation)}\n </div>\n <SchemaRowsTable operation={operation} />\n </div>\n ))}\n {preview.operations.length === 0 ? (\n <div className=\"fk:rounded-md fk:border fk:border-dashed fk:p-3 fk:text-xs fk:text-muted-foreground fk:corner-squircle\">\n No visible entity changes. Review the operations below.\n </div>\n ) : null}\n </div>\n );\n}\n\n/** Fields the card syncs from parent props; ignores object identity from SWR. */\nfunction isSameApprovalSnapshot(left: AutomationApproval, right: AutomationApproval): boolean {\n return (\n left.id === right.id &&\n left.status === right.status &&\n left.decidedAt === right.decidedAt &&\n left.decidedBy === right.decidedBy &&\n left.executedAt === right.executedAt &&\n left.error === right.error &&\n left.reason === right.reason &&\n left.expiresAt === right.expiresAt &&\n left.operationsSummary === right.operationsSummary &&\n left.affectedCount === right.affectedCount &&\n JSON.stringify(left.preview) === JSON.stringify(right.preview)\n );\n}\n\ninterface DecideOptions {\n approved: boolean;\n /** For a proposed automation: edited instructions and whether to run it once now. */\n automationEdits?: { instructions?: string; runOnce?: boolean };\n force?: boolean;\n reason?: string;\n remember?: boolean;\n}\n\nfunction useApprovalDecision({\n api,\n approval: initialApproval,\n onDecided,\n}: {\n api: ApiClient;\n approval: AutomationApproval;\n onDecided?: (_approval: AutomationApproval) => void;\n}): {\n approval: AutomationApproval;\n decide: (_options: DecideOptions) => void;\n errorMessage: string;\n isDeciding: boolean;\n isPending: boolean;\n isRejectDialogOpen: boolean;\n isStale: boolean;\n rejectReason: string;\n setIsRejectDialogOpen: (_open: boolean) => void;\n setRejectReason: (_reason: string) => void;\n} {\n const [approval, setApproval] = useState(initialApproval);\n // Keep local state for decide() responses, but adopt fresher parent data when\n // list polling / SWR revalidation replaces the prop with meaningfully new\n // data (e.g. refreshed preview while still pending). Never regress a local\n // decision back to pending — mutate/revalidation can briefly return stale\n // pending rows. Do not clear isStale here: a reference-only revalidation\n // must not drop the stale-preview banner / \"Approve anyway\" (force) path.\n const [prevInitialApproval, setPrevInitialApproval] = useState(initialApproval);\n const [errorMessage, setErrorMessage] = useState('');\n const [isDeciding, startDecideTransition] = useTransition();\n const [isRejectDialogOpen, setIsRejectDialogOpen] = useState(false);\n const [isStale, setIsStale] = useState(false);\n const [rejectReason, setRejectReason] = useState('');\n const revalidateApprovalsCount = useRevalidateApprovalsCount();\n\n if (initialApproval !== prevInitialApproval) {\n setPrevInitialApproval(initialApproval);\n\n if (!isSameApprovalSnapshot(initialApproval, prevInitialApproval)) {\n const wouldRegressDecision =\n approval.id === initialApproval.id && approval.status !== 'pending' && initialApproval.status === 'pending';\n\n if (!wouldRegressDecision) {\n setApproval(initialApproval);\n }\n }\n }\n\n function applyResult(nextApproval: AutomationApproval): void {\n setApproval(nextApproval);\n // The sidebar badge counts pending approvals; a decision changes it now.\n revalidateApprovalsCount();\n\n // An approved schema change deploys in the background; refresh the\n // project schema when it lands, wherever the approval came from.\n if (nextApproval.kind === 'schema' && nextApproval.status === 'approved') {\n watchSchemaDeployment({\n approvalId: nextApproval.id,\n approvalUrl: paths(nextApproval.projectId).approval(nextApproval.id),\n projectId: nextApproval.projectId,\n });\n }\n\n onDecided?.(nextApproval);\n }\n\n function decide({ approved, automationEdits, force = false, reason, remember = false }: DecideOptions): void {\n startDecideTransition(async () => {\n setErrorMessage('');\n\n try {\n const result = await api.decideApproval(approval.id, {\n approved,\n ...(automationEdits ? { automationEdits } : {}),\n force,\n reason,\n remember,\n });\n\n if (result.errorCode === 'stale_preview') {\n setIsStale(true);\n\n if (result.approval) {\n setApproval(result.approval);\n }\n\n return;\n }\n\n setIsStale(false);\n setIsRejectDialogOpen(false);\n\n if (result.approval) {\n applyResult(result.approval);\n } else if (result.success) {\n // Successful decide omitted the payload — exit pending using the\n // decision we just submitted (the server accepted it).\n applyResult({\n ...approval,\n decidedAt: approval.decidedAt ?? new Date().toISOString(),\n reason: reason ?? approval.reason,\n status: approved ? 'approved' : 'rejected',\n });\n } else if (result.errorCode === 'already_decided') {\n // Never invent a status from the click — the real decision may differ.\n // Ask the parent to revalidate so the true approval can load.\n onDecided?.(approval);\n }\n\n // When already_decided includes an approval, the badge reflects truth.\n // Otherwise surface the server message (including already_decided\n // without a payload). errorMessage may be omitted on some 400 bodies.\n if (!result.success && (result.errorCode !== 'already_decided' || !result.approval)) {\n const message = Array.isArray(result.errorMessage) ? result.errorMessage.join(', ') : result.errorMessage;\n\n setErrorMessage(message || 'Failed to submit the decision.');\n }\n } catch (error) {\n setErrorMessage(error instanceof Error ? error.message : 'Failed to submit the decision.');\n }\n });\n }\n\n return {\n approval,\n decide,\n errorMessage,\n isDeciding,\n isPending: approval.status === 'pending',\n isRejectDialogOpen,\n isStale,\n rejectReason,\n setIsRejectDialogOpen,\n setRejectReason,\n };\n}\n\nfunction ApprovalDecisionActions({\n allowRemember = false,\n askForRejectionReason,\n decide,\n isDeciding,\n isRejectDialogOpen,\n isStale,\n rejectReason,\n setIsRejectDialogOpen,\n setRejectReason,\n variant,\n}: {\n /** Offer \"always allow this tool for this automation\" alongside Approve. */\n allowRemember?: boolean;\n askForRejectionReason: boolean;\n decide: (_options: { approved: boolean; force?: boolean; reason?: string; remember?: boolean }) => void;\n isDeciding: boolean;\n isRejectDialogOpen: boolean;\n isStale: boolean;\n rejectReason: string;\n setIsRejectDialogOpen: (_open: boolean) => void;\n setRejectReason: (_reason: string) => void;\n variant: 'header' | 'inline';\n}): JSX.Element {\n const isHeader = variant === 'header';\n const buttonClassName = isHeader ? 'fk:px-8 fk:min-w-32' : undefined;\n const buttonSize = isHeader ? 'default' : 'sm';\n const [remember, setRemember] = useState(false);\n const rememberId = useId();\n\n return (\n <>\n <div className=\"fk:flex fk:flex-nowrap fk:items-center fk:gap-2\">\n <Button\n className={buttonClassName}\n disabled={isDeciding}\n size={buttonSize}\n onClick={() => decide({ approved: true, force: isStale, remember: allowRemember && remember })}\n >\n {isDeciding ? <LoaderCircle className=\"fk:size-4 fk:animate-spin\" /> : <CheckIcon className=\"fk:size-4\" />}\n {isStale ? 'Approve anyway' : 'Approve'}\n </Button>\n <Button\n className={buttonClassName}\n disabled={isDeciding}\n size={buttonSize}\n variant=\"outline\"\n onClick={() => {\n if (askForRejectionReason) {\n setRejectReason('');\n setIsRejectDialogOpen(true);\n } else {\n decide({ approved: false });\n }\n }}\n >\n <XIcon className=\"fk:size-4\" />\n Reject\n </Button>\n {allowRemember ? (\n <label\n className=\"fk:ml-1 fk:flex fk:cursor-pointer fk:items-center fk:gap-1.5 fk:whitespace-nowrap fk:text-xs fk:text-muted-foreground\"\n htmlFor={rememberId}\n >\n <Checkbox checked={remember} id={rememberId} onCheckedChange={(checked) => setRemember(checked === true)} />\n Always allow this tool for this automation\n </label>\n ) : null}\n </div>\n\n {askForRejectionReason ? (\n <Dialog open={isRejectDialogOpen} onOpenChange={setIsRejectDialogOpen}>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Reject this proposal?</DialogTitle>\n <DialogDescription>\n The mutation will not be executed. The agent receives your reason and can adapt its plan.\n </DialogDescription>\n </DialogHeader>\n <Textarea\n placeholder=\"Optional reason for the agent...\"\n value={rejectReason}\n onChange={(event) => setRejectReason(event.target.value)}\n />\n <DialogFooter>\n <Button disabled={isDeciding} size=\"sm\" variant=\"outline\" onClick={() => setIsRejectDialogOpen(false)}>\n Cancel\n </Button>\n <Button\n disabled={isDeciding}\n size=\"sm\"\n variant=\"destructive\"\n onClick={() => decide({ approved: false, reason: rejectReason.trim() || undefined })}\n >\n {isDeciding ? (\n <LoaderCircle className=\"fk:size-4 fk:animate-spin\" />\n ) : (\n <ArrowRightIcon className=\"fk:size-4\" />\n )}\n Reject proposal\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n ) : null}\n </>\n );\n}\n\nconst NOTIFY_RULE_LABELS: { [rule in AutomationNotifyRule]: string } = {\n always: 'Every finished run',\n failures: 'Failures only',\n never: 'Never',\n when_flagged: 'Results that need attention',\n};\n\nfunction describeVisibility(proposal: AutomationProposalPreview): string {\n if (proposal.visibility === 'personal') {\n return 'Only you';\n }\n\n return proposal.visibility === 'space' ? `Space: ${proposal.spaceLabel ?? 'unknown'}` : 'Everyone in the project';\n}\n\n/** What a chat-proposed automation will be, with the instructions editable while it waits for a decision. */\nfunction AutomationProposalView({\n approval,\n instructions,\n isPending,\n proposal,\n onInstructionsChange,\n}: {\n approval: AutomationApproval;\n instructions: string;\n isPending: boolean;\n proposal: AutomationProposalPreview;\n onInstructionsChange?: (_instructions: string) => void;\n}): JSX.Element {\n const instructionsId = useId();\n const created = approval.createdAutomation ?? null;\n const rows: { label: string; value: string }[] = [\n ...(proposal.replacesMonitor ? [{ label: 'Replaces', value: `The monitor “${proposal.replacesMonitor}”, which stops once this exists` }] : []),\n { label: 'Runs', value: proposal.triggers.join('\\n') },\n { label: 'Visible to', value: describeVisibility(proposal) },\n {\n label: 'Data changes',\n value: proposal.mutationPolicy === 'auto_approve' ? 'Applied without review' : 'Wait for approval',\n },\n {\n label: 'Notifications',\n value: `${NOTIFY_RULE_LABELS[proposal.notifyRule]}${proposal.notifyCreator ? ', to you' : ''}${\n proposal.subscribers.length > 0 ? ` and ${proposal.subscribers.join(', ')}` : ''\n }`,\n },\n ...(proposal.plugins.length > 0\n ? [\n {\n label: 'Plugins',\n value: proposal.plugins\n .map((plugin) =>\n [\n plugin.account ? `${plugin.name} as ${plugin.account}` : plugin.name,\n plugin.deliveryChannels.length > 0 ? `posting to ${plugin.deliveryChannels.join(', ')}` : '',\n ]\n .filter(Boolean)\n .join(', ')\n )\n .join('\\n'),\n },\n ]\n : []),\n ...(proposal.skills.length > 0 ? [{ label: 'Skills', value: proposal.skills.join(', ') }] : []),\n ...(proposal.customTools.length > 0 ? [{ label: 'Custom tools', value: proposal.customTools.join(', ') }] : []),\n { label: 'Model', value: proposal.modelLabel },\n ];\n\n return (\n <div className=\"fk:space-y-4\">\n {proposal.mutationPolicy === 'auto_approve' ? (\n <div\n className=\"fk:flex fk:items-start fk:gap-2 fk:rounded-md fk:border fk:border-amber-500/40 fk:bg-amber-500/10 fk:p-3 fk:text-sm fk:corner-squircle\"\n role=\"status\"\n >\n <TriangleAlertIcon className=\"fk:mt-0.5 fk:size-4 fk:shrink-0 fk:text-amber-600\" />\n <span>\n Every run will change data{proposal.plugins.length > 0 ? ' and call these plugins' : ''} without asking\n anyone first. Reject and ask for review if that is not what you want.\n </span>\n </div>\n ) : null}\n <dl className=\"fk:grid fk:grid-cols-[max-content_1fr] fk:gap-x-4 fk:gap-y-1.5 fk:text-sm\">\n {rows.map((row) => (\n <div className=\"fk:contents\" key={row.label}>\n <dt className=\"fk:text-muted-foreground\">{row.label}</dt>\n <dd className=\"fk:whitespace-pre-line\">{row.value}</dd>\n </div>\n ))}\n </dl>\n <div className=\"fk:space-y-1.5\">\n <label className=\"fk:text-sm fk:font-medium\" htmlFor={instructionsId}>\n Instructions\n </label>\n {isPending && onInstructionsChange ? (\n <>\n <p className=\"fk:text-xs fk:text-muted-foreground\">\n The automation never sees this chat, so these instructions are all it has to go on. Edit them before\n creating it.\n </p>\n <Textarea\n className=\"fk:min-h-40 fk:text-sm\"\n id={instructionsId}\n value={instructions}\n onChange={(event) => onInstructionsChange(event.target.value)}\n />\n </>\n ) : (\n <p className=\"fk:whitespace-pre-wrap fk:rounded-md fk:border fk:p-3 fk:text-sm fk:corner-squircle\" id={instructionsId}>\n {instructions}\n </p>\n )}\n </div>\n {created ? (\n <div className=\"fk:flex fk:flex-wrap fk:gap-2\">\n <Button asChild size=\"sm\" variant=\"outline\">\n <Link to={`/${approval.projectId}/ai/automations/${created.automationId}`}>Open the automation</Link>\n </Button>\n {created.runId ? (\n <Button asChild size=\"sm\" variant=\"ghost\">\n <Link to={`/${approval.projectId}/ai/automations/${created.automationId}/runs/${created.runId}`}>\n View its first run\n </Link>\n </Button>\n ) : null}\n </div>\n ) : null}\n </div>\n );\n}\n\n/** What changes on an existing automation: each changed setting before and after. */\nfunction AutomationChangeView({ approval, change }: { approval: AutomationApproval; change: AutomationChangePreview }): JSX.Element {\n const settings = change.changes.filter((field) => field.field !== 'instructions');\n const instructions = change.changes.find((field) => field.field === 'instructions');\n\n return (\n <div className=\"fk:space-y-4\">\n {settings.length > 0 ? (\n <dl className=\"fk:grid fk:grid-cols-[max-content_1fr] fk:gap-x-4 fk:gap-y-2 fk:text-sm\">\n {settings.map((field) => (\n <div className=\"fk:contents\" key={field.field}>\n <dt className=\"fk:text-muted-foreground\">{field.label}</dt>\n <dd className=\"fk:space-y-0.5\">\n <div className=\"fk:whitespace-pre-line fk:text-muted-foreground fk:line-through\">{field.before}</div>\n <div className=\"fk:whitespace-pre-line\">{field.after}</div>\n </dd>\n </div>\n ))}\n </dl>\n ) : null}\n {instructions ? (\n <div className=\"fk:grid fk:gap-3 fk:md:grid-cols-2\">\n {[\n { label: 'Current instructions', muted: true, text: instructions.before },\n { label: 'New instructions', muted: false, text: instructions.after },\n ].map((block) => (\n <div className=\"fk:min-w-0 fk:space-y-1.5\" key={block.label}>\n <div className=\"fk:text-sm fk:font-medium\">{block.label}</div>\n <p\n className={`fk:whitespace-pre-wrap fk:rounded-md fk:border fk:p-3 fk:text-sm fk:corner-squircle${block.muted ? ' fk:text-muted-foreground' : ''}`}\n >\n {block.text}\n </p>\n </div>\n ))}\n </div>\n ) : null}\n <Button asChild size=\"sm\" variant=\"outline\">\n <Link to={`/${approval.projectId}/ai/automations/${change.automationId}`}>Open the automation</Link>\n </Button>\n </div>\n );\n}\n\n/** Create, Create and run once now, Reject: the decisions on a proposed automation. */\nfunction AutomationDecisionActions({\n decide,\n instructions,\n isDeciding,\n proposal,\n}: {\n decide: (_options: DecideOptions) => void;\n instructions: string;\n isDeciding: boolean;\n proposal: AutomationProposalPreview;\n}): JSX.Element {\n const trimmed = instructions.trim();\n const edits = trimmed !== proposal.instructions.trim() ? { instructions: trimmed } : {};\n\n return (\n <div className=\"fk:flex fk:flex-wrap fk:items-center fk:gap-2\">\n <Button\n disabled={isDeciding || trimmed.length === 0}\n size=\"sm\"\n variant={proposal.runOnceAfterCreate ? 'outline' : 'default'}\n onClick={() => decide({ approved: true, automationEdits: { ...edits, runOnce: false } })}\n >\n {isDeciding ? <LoaderCircle className=\"fk:size-4 fk:animate-spin\" /> : <CheckIcon className=\"fk:size-4\" />}\n Create\n </Button>\n <Button\n disabled={isDeciding || trimmed.length === 0}\n size=\"sm\"\n variant={proposal.runOnceAfterCreate ? 'default' : 'outline'}\n onClick={() => decide({ approved: true, automationEdits: { ...edits, runOnce: true } })}\n >\n <PlayIcon className=\"fk:size-4\" />\n Create and run once now\n </Button>\n <Button disabled={isDeciding} size=\"sm\" variant=\"outline\" onClick={() => decide({ approved: false })}>\n <XIcon className=\"fk:size-4\" />\n Reject\n </Button>\n </div>\n );\n}\n\nfunction ApprovalCardBody({\n approval,\n automationInstructions,\n chat,\n errorMessage,\n isPending,\n isStale,\n onAutomationInstructionsChange,\n}: {\n approval: AutomationApproval;\n /** The proposed automation's instructions as the approver edits them. */\n automationInstructions?: string;\n chat: boolean;\n errorMessage: string;\n isPending: boolean;\n isStale: boolean;\n onAutomationInstructionsChange?: (_instructions: string) => void;\n}): JSX.Element {\n const { preview } = approval;\n const pluginAction = chat ? getChatPluginAction(approval) : null;\n\n return (\n // min-w-0 lets the card shrink inside flex/grid parents (e.g. DrawerModal)\n // so wide preview tables scroll inside their own container instead of\n // stretching the layout.\n <div className=\"fk:min-w-0 fk:max-w-full fk:space-y-4\">\n <div className=\"fk:flex fk:flex-wrap fk:items-center fk:gap-2\">\n <ApprovalStatusBadge status={approval.status} />\n {approval.kind === 'schema' ? <Badge variant=\"outline\">Schema change</Badge> : null}\n {approval.kind === 'automation' ? (\n <Badge variant=\"outline\">{preview?.automationChange ? 'Automation change' : 'New automation'}</Badge>\n ) : null}\n <span className=\"fk:text-sm fk:font-medium\">\n {chat ? getChatActionTitle(approval) : approval.operationsSummary}\n </span>\n </div>\n <div className=\"fk:text-xs fk:text-muted-foreground\">\n {approval.automationName ? `${approval.automationName} · ` : ''}\n requested {formatDistance(new Date(approval.requestedAt), new Date(), { addSuffix: true })}\n {isPending ? ` · expires ${formatDistance(new Date(approval.expiresAt), new Date(), { addSuffix: true })}` : ''}\n {approval.decidedAt ? ` · decided ${format(new Date(approval.decidedAt), 'PPpp')}` : ''}\n </div>\n\n {isStale ? (\n <div className=\"fk:flex fk:items-start fk:gap-2 fk:rounded-md fk:border fk:border-amber-500/40 fk:bg-amber-500/10 fk:p-3 fk:text-sm fk:corner-squircle\">\n <TriangleAlertIcon className=\"fk:mt-0.5 fk:size-4 fk:shrink-0 fk:text-amber-600\" />\n <span>\n The affected data changed since this proposal was created. The preview below has been refreshed — review it\n and approve again to proceed.\n </span>\n </div>\n ) : null}\n\n {approval.kind === 'automation' && preview?.automation ? (\n <AutomationProposalView\n approval={approval}\n instructions={automationInstructions ?? preview.automation.instructions}\n isPending={isPending}\n proposal={preview.automation}\n onInstructionsChange={onAutomationInstructionsChange}\n />\n ) : approval.kind === 'automation' && preview?.automationChange ? (\n <AutomationChangeView approval={approval} change={preview.automationChange} />\n ) : approval.kind === 'schema' && preview ? (\n <SchemaChangePreview preview={preview} />\n ) : preview && preview.operations.length > 0 ? (\n <div className=\"fk:space-y-4\">\n {preview.operations.map((operation, index) => (\n <div className=\"fk:space-y-2\" key={index.toString()}>\n <div className=\"fk:text-sm fk:font-medium\">{getOperationTitle(operation)}</div>\n {operation.kind === 'delete' && operation.affectedCount !== null ? (\n <div className=\"fk:rounded-md fk:border fk:border-destructive/30 fk:bg-destructive/5 fk:p-3 fk:text-sm fk:text-destructive fk:corner-squircle\">\n {operation.affectedCount.toString()} record{operation.affectedCount === 1 ? '' : 's'} will be\n permanently deleted.\n </div>\n ) : null}\n <OperationPreviewTable operation={operation} />\n {operation.truncated ? (\n <div className=\"fk:text-xs fk:text-muted-foreground\">\n Preview limited to the first {operation.rows.length.toString()} rows.\n </div>\n ) : null}\n </div>\n ))}\n </div>\n ) : (\n <div className=\"fk:rounded-md fk:border fk:border-dashed fk:p-3 fk:text-xs fk:text-muted-foreground fk:corner-squircle\">\n {chat\n ? pluginAction\n ? `This action uses ${pluginAction.scope === 'project' ? \"the project's\" : 'your'} ${pluginAction.app} account${pluginAction.account ? ` (${pluginAction.account})` : ''}. Check the details before deciding.`\n : 'The assistant wants to make this change. Check the details before deciding.'\n : approval.kind === 'plugin'\n ? 'Review the account, tool, and arguments before allowing this external call.'\n : approval.kind === 'exec'\n ? 'This command runs inside the run\\'s ephemeral sandbox but may send data out or reach other hosts. Review the command line before allowing it.'\n : 'No structured preview is available for this proposal. Review the raw GraphQL documents below.'}\n </div>\n )}\n\n {approval.kind === 'automation' ? null : (\n <OperationDocuments\n chat={chat}\n operations={approval.operations}\n plugin={approval.kind === 'plugin' || approval.kind === 'exec'}\n title={approval.kind === 'exec' ? 'Command and options' : approval.kind === 'schema' ? 'Operations' : undefined}\n />\n )}\n\n {approval.reason ? (\n <div className=\"fk:text-sm\">\n <span className=\"fk:font-medium\">Reason:</span> {approval.reason}\n </div>\n ) : null}\n {approval.error ? (\n <div className=\"fk:rounded-md fk:border fk:border-destructive/30 fk:bg-destructive/5 fk:p-3 fk:text-sm fk:corner-squircle\">\n Execution failed: {approval.error}\n </div>\n ) : null}\n {approval.executedAt && !approval.error ? (\n <div className=\"fk:flex fk:items-center fk:gap-2 fk:text-sm fk:text-success\">\n <CheckIcon className=\"fk:size-4\" />\n Executed {format(new Date(approval.executedAt), 'PPpp')}\n </div>\n ) : null}\n {errorMessage ? <div className=\"fk:text-sm fk:text-destructive\">{errorMessage}</div> : null}\n </div>\n );\n}\n\nexport function ApprovalCard({\n api,\n approval: initialApproval,\n chat,\n onDecided,\n}: {\n api: ApiClient;\n approval: AutomationApproval;\n chat: boolean;\n onDecided?: (_approval: AutomationApproval) => void;\n}): JSX.Element {\n const {\n approval,\n decide,\n errorMessage,\n isDeciding,\n isPending,\n isRejectDialogOpen,\n isStale,\n rejectReason,\n setIsRejectDialogOpen,\n setRejectReason,\n } = useApprovalDecision({ api, approval: initialApproval, onDecided });\n const proposal = approval.kind === 'automation' ? (approval.preview?.automation ?? null) : null;\n const [automationInstructions, setAutomationInstructions] = useState(proposal?.instructions ?? '');\n\n return (\n <>\n <ApprovalCardBody\n approval={approval}\n automationInstructions={proposal ? automationInstructions : undefined}\n chat={chat}\n errorMessage={errorMessage}\n isPending={isPending}\n isStale={isStale}\n onAutomationInstructionsChange={proposal ? setAutomationInstructions : undefined}\n />\n {isPending && proposal ? (\n <div className=\"fk:mt-4\">\n <AutomationDecisionActions\n decide={decide}\n instructions={automationInstructions}\n isDeciding={isDeciding}\n proposal={proposal}\n />\n </div>\n ) : isPending ? (\n <div className=\"fk:mt-4\">\n <ApprovalDecisionActions\n allowRemember={!chat && approval.kind === 'plugin' && Boolean(approval.automationId)}\n askForRejectionReason={!chat}\n decide={decide}\n isDeciding={isDeciding}\n isRejectDialogOpen={isRejectDialogOpen}\n isStale={isStale}\n rejectReason={rejectReason}\n setIsRejectDialogOpen={setIsRejectDialogOpen}\n setRejectReason={setRejectReason}\n variant=\"inline\"\n />\n </div>\n ) : null}\n </>\n );\n}\n\nexport function ApprovalDrawer({\n api,\n approval: initialApproval,\n onClose,\n onDecided,\n}: {\n api: ApiClient;\n approval: AutomationApproval;\n onClose: () => void;\n onDecided?: (_approval: AutomationApproval) => void;\n}): JSX.Element {\n const {\n approval,\n decide,\n errorMessage,\n isDeciding,\n isPending,\n isRejectDialogOpen,\n isStale,\n rejectReason,\n setIsRejectDialogOpen,\n setRejectReason,\n } = useApprovalDecision({ api, approval: initialApproval, onDecided });\n const proposal = approval.kind === 'automation' ? (approval.preview?.automation ?? null) : null;\n const [automationInstructions, setAutomationInstructions] = useState(proposal?.instructions ?? '');\n\n return (\n <DrawerModal\n actions={\n isPending && proposal ? (\n <AutomationDecisionActions\n decide={decide}\n instructions={automationInstructions}\n isDeciding={isDeciding}\n proposal={proposal}\n />\n ) : isPending ? (\n <ApprovalDecisionActions\n allowRemember={approval.kind === 'plugin' && Boolean(approval.automationId)}\n askForRejectionReason\n decide={decide}\n isDeciding={isDeciding}\n isRejectDialogOpen={isRejectDialogOpen}\n isStale={isStale}\n rejectReason={rejectReason}\n setIsRejectDialogOpen={setIsRejectDialogOpen}\n setRejectReason={setRejectReason}\n variant=\"header\"\n />\n ) : null\n }\n depth={0}\n isFocused\n onClose={onClose}\n title={proposal ? 'Automation proposal' : approval.preview?.automationChange ? 'Automation change' : 'Mutation proposal'}\n >\n <ApprovalCardBody\n approval={approval}\n automationInstructions={proposal ? automationInstructions : undefined}\n chat={false}\n errorMessage={errorMessage}\n isPending={isPending}\n isStale={isStale}\n onAutomationInstructionsChange={proposal ? setAutomationInstructions : undefined}\n />\n </DrawerModal>\n );\n}\n","/**\n * Pure helpers behind the transient status line shown while an agent turn or\n * automation run is in flight. Kept free of React and UI imports so the\n * label heuristics can be unit-tested in isolation.\n */\nimport type { ReplayDataParts, ReplayMessage, ReplayMessagePart } from './replay';\n\nexport const STATUS_LABEL_MAX_LENGTH = 72;\n\nexport const JEV_APPROVAL_REASON_PREFIX = 'Approved by Flexkit Jev policy';\nexport const TOOL_ALLOW_RULE_REASON_PREFIX = 'Approved by automation tool allow rule';\n\nconst ROLLING_STATUS_PART_TYPES = new Set<string>([\n 'data-create-sandbox',\n 'data-execute-graphql',\n 'data-export-records',\n 'data-load-skill',\n 'data-plan',\n 'data-plugin-call',\n 'data-run-command',\n 'data-search-schema',\n 'data-update-memory',\n 'data-validate-graphql',\n 'data-web-search',\n]);\n\n/**\n * These tool events are surfaced as a single transient status line while the\n * call is in flight (see `RollingStatusText`) instead of persistent cards.\n */\nexport function isRollingStatusPartType(type: string): boolean {\n return ROLLING_STATUS_PART_TYPES.has(type);\n}\n\nexport function getPartData<T>(part: ReplayMessagePart): T {\n return (part as { data: T }).data;\n}\n\n/** Plugin calls cleared without asking anyone (Jev or an allow rule): the replay shows nothing for them. */\nexport function isJevAutoApproved(message: ReplayDataParts['mutation-approval']): boolean {\n return (\n !message.decidedBy &&\n Boolean(\n message.reason?.startsWith(JEV_APPROVAL_REASON_PREFIX) || message.reason?.startsWith(TOOL_ALLOW_RULE_REASON_PREFIX)\n )\n );\n}\n\nexport function truncateLabel(text: string, maxLength = STATUS_LABEL_MAX_LENGTH): string {\n const trimmed = text.trim();\n\n if (trimmed.length <= maxLength) {\n return trimmed;\n }\n\n const cut = trimmed.slice(0, maxLength);\n const lastSpace = cut.lastIndexOf(' ');\n const wordBoundary = lastSpace >= Math.floor(maxLength * 0.6) ? cut.slice(0, lastSpace) : cut;\n\n return `${wordBoundary.trimEnd()}…`;\n}\n\nexport function stripInlineMarkdown(text: string): string {\n return text\n .replace(/^#{1,6}\\s+/, '')\n .replace(/^(?:[-*+]|\\d+[.)])\\s+/, '')\n .replace(/!?\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1')\n .replace(/(\\*\\*|__)(.*?)\\1/g, '$2')\n .replace(/(\\*|_)(.*?)\\1/g, '$2')\n .replace(/`([^`]*)`/g, '$1')\n .replace(/[*_`#>]/g, '')\n .replace(/\\s+/g, ' ')\n .trim()\n .replace(/[.:]+$/, '');\n}\n\n/**\n * The prefix of a streaming reasoning text that will not change anymore: up to\n * the later of the last line break and the last sentence terminator followed\n * by whitespace. Empty when no boundary has been reached yet.\n */\nexport function getCommittedReasoningText(text: string): string {\n const lastNewline = text.lastIndexOf('\\n');\n let lastSentence = -1;\n const sentenceEnd = /[.!?](?=\\s)/g;\n let match: RegExpExecArray | null;\n\n while ((match = sentenceEnd.exec(text)) !== null) {\n lastSentence = match.index;\n }\n\n const boundary = Math.max(lastNewline, lastSentence);\n\n if (boundary < 0) {\n return '';\n }\n\n return text.slice(0, boundary + 1);\n}\n\n/**\n * One-line label for a reasoning part: the heading or first sentence of the\n * latest committed paragraph. Updates only at line/sentence boundaries so the\n * status line does not flicker on every token.\n */\nexport function getReasoningStatusLabel(text: string, options: { streaming: boolean }): string | null {\n const committed = options.streaming ? getCommittedReasoningText(text) : text;\n const lines = committed\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean);\n const last = lines[lines.length - 1];\n\n if (!last) {\n return null;\n }\n\n const heading = /^\\*\\*(.+?)\\*\\*:?$/.exec(last)?.[1] ?? /^#{1,6}\\s+(.+)$/.exec(last)?.[1];\n const candidate = heading ?? /^(.+?[.!?])(?:\\s|$)/.exec(last)?.[1] ?? last;\n const plain = stripInlineMarkdown(candidate);\n\n if (!plain || /^reasoning$/i.test(plain)) {\n return null;\n }\n\n return truncateLabel(plain);\n}\n\nfunction humanizeToolName(tool: string): string {\n return tool.replace(/[_-]+/g, ' ').trim();\n}\n\n/** Gerund label for a rolling-status part, or null once the call concluded. */\nexport function getRollingStatusLabel(part: ReplayMessagePart): string | null {\n if (part.type === 'data-load-skill') {\n const data = getPartData<ReplayDataParts['load-skill']>(part);\n\n if (data.status !== 'loading') {\n return null;\n }\n\n return data.skillName ? truncateLabel(`Loading skill \"${data.skillName}\"`) : 'Loading skill';\n }\n\n if (part.type === 'data-search-schema') {\n const data = getPartData<ReplayDataParts['search-schema']>(part);\n\n return data.status === 'loading' ? 'Searching schema' : null;\n }\n\n if (part.type === 'data-validate-graphql') {\n const data = getPartData<ReplayDataParts['validate-graphql']>(part);\n\n return data.status === 'loading' ? 'Validating GraphQL query' : null;\n }\n\n if (part.type === 'data-execute-graphql') {\n const data = getPartData<ReplayDataParts['execute-graphql']>(part);\n\n if (data.status !== 'loading') {\n return null;\n }\n\n return data.operationType === 'mutation' ? 'Executing GraphQL mutation' : 'Executing GraphQL query';\n }\n\n if (part.type === 'data-export-records') {\n const data = getPartData<ReplayDataParts['export-records']>(part);\n\n if (data.status !== 'loading') {\n return null;\n }\n\n return data.rowCount > 0 ? `Exporting records (${data.rowCount.toLocaleString('en-US')} so far)` : 'Exporting records';\n }\n\n if (part.type === 'data-update-memory') {\n const data = getPartData<ReplayDataParts['update-memory']>(part);\n\n return data.status === 'loading' ? 'Updating memory' : null;\n }\n\n if (part.type === 'data-web-search') {\n const data = getPartData<ReplayDataParts['web-search']>(part);\n\n if (data.status !== 'loading') {\n return null;\n }\n\n return data.query ? truncateLabel(`Searching the web for \"${data.query}\"`) : 'Searching the web';\n }\n\n if (part.type === 'data-run-command') {\n const data = getPartData<ReplayDataParts['run-command']>(part);\n\n if (!['executing', 'running', 'waiting'].includes(data.status)) {\n return null;\n }\n\n return truncateLabel(`Running ${[data.command, ...data.args].join(' ')}`);\n }\n\n if (part.type === 'data-create-sandbox') {\n const data = getPartData<ReplayDataParts['create-sandbox']>(part);\n\n return data.status === 'loading' ? 'Creating sandbox' : null;\n }\n\n if (part.type === 'data-plugin-call') {\n const data = getPartData<ReplayDataParts['plugin-call']>(part);\n\n if (data.status !== 'loading') {\n return null;\n }\n\n return truncateLabel(`Calling ${data.pluginId}: ${humanizeToolName(data.tool)}`);\n }\n\n if (part.type === 'data-subtask') {\n const data = getPartData<ReplayDataParts['subtask']>(part);\n\n return data.status === 'running' ? truncateLabel(`Running subtask: ${data.title}`) : null;\n }\n\n return null;\n}\n\n/** Error text for a failed rolling-status part, or null when it did not fail. */\n/**\n * Schema lookups and GraphQL validation or query failures are the agent's own\n * missteps: it reads the error and corrects the next call. Showing them would\n * only tell the user about a problem they cannot act on.\n */\nconst AGENT_INTERNAL_ERROR_PART_TYPES = new Set<string>(['data-execute-graphql', 'data-search-schema', 'data-validate-graphql']);\n\nexport function getRollingStatusError(part: ReplayMessagePart): string | null {\n if (!isRollingStatusPartType(part.type) || part.type === 'data-plan' || AGENT_INTERNAL_ERROR_PART_TYPES.has(part.type)) {\n return null;\n }\n\n const data = getPartData<{ status: string; error?: { message?: string } } & { [key: string]: unknown }>(part);\n\n if (data.status !== 'error') {\n return null;\n }\n\n if (data.error?.message) {\n return data.error.message;\n }\n\n switch (part.type) {\n case 'data-web-search':\n return 'Failed to search the web';\n case 'data-run-command':\n return `Command failed: ${String(data.command ?? '')}`.trim();\n case 'data-create-sandbox':\n return 'Failed to create sandbox';\n case 'data-load-skill':\n return 'Failed to load skill';\n case 'data-update-memory':\n return 'Failed to update memory';\n case 'data-plugin-call':\n return `Plugin call failed: ${String(data.pluginId ?? '')}: ${humanizeToolName(String(data.tool ?? ''))}`;\n default:\n return 'The tool call failed';\n }\n}\n\n/**\n * Parts that never render in the conversation: they either feed the transient\n * status line, are internal bookkeeping, or were cleared without anyone being\n * asked. Failed calls stay visible so the user learns what went wrong.\n */\nexport function isHiddenReplayPart(part: ReplayMessagePart): boolean {\n if (part.type === 'step-start' || part.type === 'reasoning') {\n return true;\n }\n\n if (isRollingStatusPartType(part.type)) {\n return getRollingStatusError(part) === null;\n }\n\n if (part.type === 'data-mutation-approval') {\n const data = getPartData<ReplayDataParts['mutation-approval']>(part);\n\n return isJevAutoApproved(data) && data.status !== 'error';\n }\n\n return false;\n}\n\n/**\n * Label describing what the agent is doing right now, derived from the tail\n * of the stream: streaming reasoning, a pending approval, or an in-flight\n * tool call. Null when nothing specific is known (callers show \"Thinking\").\n */\n/** \"Step 2 of 5: Fetch threads\" from the latest plan part, if one has an in-progress step. */\nexport function getPlanStatusLabel(message: ReplayMessage | undefined): string | null {\n if (!message) {\n return null;\n }\n\n for (let index = message.parts.length - 1; index >= 0; index--) {\n const part = message.parts[index];\n\n if (part?.type !== 'data-plan') {\n continue;\n }\n\n const data = getPartData<ReplayDataParts['plan']>(part);\n const current = data.steps.findIndex((step) => step.status === 'in_progress');\n\n if (current < 0) {\n return null;\n }\n\n return truncateLabel(`Step ${(current + 1).toString()} of ${data.steps.length.toString()}: ${data.steps[current]!.step}`);\n }\n\n return null;\n}\n\nexport function getLiveStatusLabel(message: ReplayMessage | undefined): string | null {\n if (!message) {\n return null;\n }\n\n for (let index = message.parts.length - 1; index >= 0; index--) {\n const part = message.parts[index];\n\n if (!part || part.type === 'step-start') {\n continue;\n }\n\n if (part.type === 'reasoning') {\n if (part.state === 'streaming') {\n return getReasoningStatusLabel(part.text, { streaming: true }) ?? getPlanStatusLabel(message);\n }\n\n return getPlanStatusLabel(message);\n }\n\n if (part.type === 'data-mutation-approval') {\n const data = getPartData<ReplayDataParts['mutation-approval']>(part);\n\n return data.status === 'pending' ? 'Awaiting approval' : getPlanStatusLabel(message);\n }\n\n if (part.type === 'data-user-question') {\n const data = getPartData<ReplayDataParts['user-question']>(part);\n\n return data.status === 'pending' ? 'Waiting for your answer' : getPlanStatusLabel(message);\n }\n\n if (part.type === 'text') {\n return null;\n }\n\n // A tool label beats the plan step while the tool runs; the plan fills the gaps.\n return getRollingStatusLabel(part) ?? getPlanStatusLabel(message);\n }\n\n return null;\n}\n","import type { AutomationApprovalStatus } from '@flexkit/agent-protocol';\nimport type { ReplayDataParts, ReplayMessage } from './replay';\nimport { getPartData } from './status-label';\n\n/** Decisions this client made or observed, by approval id, before the stream caught up. */\nexport type DecidedApprovals = { [approvalId: string]: AutomationApprovalStatus };\n\nexport function messageHasPendingMutationApproval(message: ReplayMessage | undefined): boolean {\n if (!message) {\n return false;\n }\n\n return message.parts.some((part) => {\n if (part.type !== 'data-mutation-approval') {\n return false;\n }\n\n return getPartData<ReplayDataParts['mutation-approval']>(part).status === 'pending';\n });\n}\n\n/**\n * Once the run record says execution resumed, a `pending` approval part in\n * the in-memory replay is stale. Parts whose decision this client knows are\n * patched to that status so the card stays mounted; unknown ones are dropped\n * until the rebuilt stream delivers their real status.\n */\nexport function settlePendingMutationApprovals(message: ReplayMessage, decided: DecidedApprovals = {}): ReplayMessage {\n let changed = false;\n const parts: ReplayMessage['parts'] = [];\n\n for (const part of message.parts) {\n if (part.type !== 'data-mutation-approval') {\n parts.push(part);\n continue;\n }\n\n const data = getPartData<ReplayDataParts['mutation-approval']>(part);\n\n if (data.status !== 'pending') {\n parts.push(part);\n continue;\n }\n\n changed = true;\n const status = decided[data.approvalId];\n\n if (status && status !== 'pending') {\n parts.push({ ...part, data: { ...data, status } } as typeof part);\n }\n }\n\n return changed ? { ...message, parts } : message;\n}\n\nexport function getMutationApprovalIds(\n message: ReplayMessage | undefined,\n options?: { pendingOnly?: boolean }\n): string[] {\n if (!message) {\n return [];\n }\n\n const approvalIds: string[] = [];\n const pendingOnly = options?.pendingOnly ?? false;\n\n for (const part of message.parts) {\n if (part.type !== 'data-mutation-approval') {\n continue;\n }\n\n const data = getPartData<ReplayDataParts['mutation-approval']>(part);\n\n if (pendingOnly && data.status !== 'pending') {\n continue;\n }\n\n approvalIds.push(data.approvalId);\n }\n\n return approvalIds;\n}\n\nexport function getPendingMutationApprovalIds(message: ReplayMessage | undefined): string[] {\n return getMutationApprovalIds(message, { pendingOnly: true });\n}\n","import type { ReplayDataParts, ReplayMessage } from './replay';\nimport { getPartData } from './status-label';\nimport type { AgentChatQuestionAnswer } from './types';\n\nexport type UserQuestionData = ReplayDataParts['user-question'];\nexport type UserQuestionItem = UserQuestionData['questions'][number];\n\n/** What the user has picked so far for one question; `other` is their own words. */\nexport interface QuestionDraft {\n other: string;\n selected: string[];\n}\n\nexport function messageHasPendingUserQuestion(message: ReplayMessage | undefined): boolean {\n return Boolean(\n message?.parts.some(\n (part) => part.type === 'data-user-question' && getPartData<UserQuestionData>(part).status === 'pending'\n )\n );\n}\n\nexport function createQuestionDrafts(questions: UserQuestionItem[]): QuestionDraft[] {\n return questions.map(() => ({ other: '', selected: [] }));\n}\n\n/**\n * Picking an option: a single-select question keeps only that option and\n * drops typed text (both are one answer); a multi-select one toggles it.\n */\nexport function toggleQuestionOption(question: UserQuestionItem, draft: QuestionDraft, label: string): QuestionDraft {\n if (!question.multiSelect) {\n return { other: '', selected: [label] };\n }\n\n return {\n ...draft,\n selected: draft.selected.includes(label) ? draft.selected.filter((item) => item !== label) : [...draft.selected, label],\n };\n}\n\n/** Typing an own answer: for a single-select question it replaces the picked option. */\nexport function setQuestionOther(question: UserQuestionItem, draft: QuestionDraft, other: string): QuestionDraft {\n return question.multiSelect ? { ...draft, other } : { other, selected: other.trim() ? [] : draft.selected };\n}\n\n/** The answers to send, or null while a question has neither an option nor own words. */\nexport function getQuestionAnswers(drafts: QuestionDraft[]): AgentChatQuestionAnswer[] | null {\n const answers: AgentChatQuestionAnswer[] = [];\n\n for (const draft of drafts) {\n const other = draft.other.trim();\n\n if (draft.selected.length === 0 && !other) {\n return null;\n }\n\n answers.push(other ? { other, selected: draft.selected } : { selected: draft.selected });\n }\n\n return answers;\n}\n\n/** One line per answered question, e.g. \"CSV, with headers\". */\nexport function formatQuestionAnswer(answer: AgentChatQuestionAnswer | undefined): string {\n if (!answer) {\n return '—';\n }\n\n return [...answer.selected, ...(answer.other ? [`“${answer.other}”`] : [])].join(', ') || '—';\n}\n","import type { JSX } from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { FileIcon, XIcon } from 'lucide-react';\nimport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogTitle,\n Spinner,\n usePromptInputAttachments,\n usePromptInputController,\n} from '../../../ui';\nimport type { ApiClient } from '../api';\nimport type { AgentChatAttachment, AgentChatPart } from '../types';\n\n/** Mirrors the platform limits so invalid files are rejected before upload. */\nexport const ATTACHMENT_MAX_BYTES = 20 * 1024 * 1024;\nexport const ATTACHMENTS_MAX_PER_MESSAGE = 10;\n\nconst SUPPORTED_EXTENSIONS = new Set([\n 'css',\n 'csv',\n 'gif',\n 'gql',\n 'graphql',\n 'htm',\n 'html',\n 'jpeg',\n 'jpg',\n 'js',\n 'json',\n 'jsx',\n 'log',\n 'markdown',\n 'md',\n 'mjs',\n 'ndjson',\n 'pdf',\n 'png',\n 'py',\n 'sql',\n 'ts',\n 'tsv',\n 'tsx',\n 'txt',\n 'webp',\n 'xml',\n 'yaml',\n 'yml',\n]);\n\nconst SUPPORTED_UNNAMED_TYPES = new Set(['application/pdf', 'image/gif', 'image/jpeg', 'image/png', 'image/webp']);\n\n/** Comma-separated `accept` value for the file picker. */\nexport const ATTACHMENT_ACCEPT = [\n ...[...SUPPORTED_EXTENSIONS].map((extension) => `.${extension}`),\n ...SUPPORTED_UNNAMED_TYPES,\n].join(',');\n\nfunction getExtension(filename: string): string {\n const dotIndex = filename.lastIndexOf('.');\n\n return dotIndex <= 0 ? '' : filename.slice(dotIndex + 1).toLowerCase();\n}\n\n/** Why a file cannot be attached, or null when it can. */\nexport function getAttachmentValidationError(file: { name: string; size: number; type: string }): string | null {\n const extension = getExtension(file.name);\n const supported = extension ? SUPPORTED_EXTENSIONS.has(extension) : SUPPORTED_UNNAMED_TYPES.has(file.type);\n\n if (!supported) {\n return `\"${file.name}\" is not supported. Attach images, PDFs, or text files.`;\n }\n\n if (file.size === 0) {\n return `\"${file.name}\" is empty.`;\n }\n\n if (file.size > ATTACHMENT_MAX_BYTES) {\n return `\"${file.name}\" exceeds the ${String(Math.round(ATTACHMENT_MAX_BYTES / (1024 * 1024)))} MB limit.`;\n }\n\n return null;\n}\n\ntype UploadStatus = 'uploading' | 'done' | 'error';\n\ninterface UploadEntry {\n attachment?: AgentChatAttachment;\n controller: AbortController;\n status: UploadStatus;\n}\n\nexport interface AttachmentUploads {\n /** Uploaded attachments for the given composer file ids, in the same order. */\n getUploaded: (_fileIds: string[]) => AgentChatAttachment[];\n isUploading: boolean;\n /** Whether the composer file with this id is still uploading. */\n isUploadingFile: (_fileId: string) => boolean;\n}\n\nasync function readComposerFile(file: { filename?: string; mediaType?: string; url: string }): Promise<File> {\n const response = await fetch(file.url);\n const blob = await response.blob();\n\n return new File([blob], file.filename ?? 'file', { type: file.mediaType || blob.type });\n}\n\n/**\n * Uploads every file added to the composer as soon as it appears, so the\n * message can be sent as soon as the user is done typing. Files that fail\n * validation or are refused by the platform (unsupported type, size, daily\n * cap, restricted project) are removed again with an explanation.\n */\nexport function useAttachmentUploads(api: ApiClient, onError: (_message: string) => void): AttachmentUploads {\n const { attachments } = usePromptInputController();\n const entriesRef = useRef<{ [fileId: string]: UploadEntry }>({});\n const [, setVersion] = useState(0);\n const bump = useCallback(() => setVersion((current) => current + 1), []);\n const removeRef = useRef(attachments.remove);\n removeRef.current = attachments.remove;\n const onErrorRef = useRef(onError);\n onErrorRef.current = onError;\n\n useEffect(() => {\n const currentIds = new Set(attachments.files.map((file) => file.id));\n\n // Abort and forget uploads whose file was removed from the composer.\n for (const [fileId, entry] of Object.entries(entriesRef.current)) {\n if (!currentIds.has(fileId)) {\n entry.controller.abort();\n delete entriesRef.current[fileId];\n }\n }\n\n for (const file of attachments.files) {\n if (entriesRef.current[file.id]) {\n continue;\n }\n\n const controller = new AbortController();\n const entry: UploadEntry = { controller, status: 'uploading' };\n entriesRef.current[file.id] = entry;\n\n void (async () => {\n try {\n const nativeFile = await readComposerFile(file);\n const validationError = getAttachmentValidationError(nativeFile);\n\n if (validationError) {\n throw new Error(validationError);\n }\n\n const uploaded = await api.uploadAgentChatAttachment(nativeFile, controller.signal);\n\n if (controller.signal.aborted) {\n return;\n }\n\n entry.attachment = uploaded;\n entry.status = 'done';\n } catch (error) {\n if (controller.signal.aborted) {\n return;\n }\n\n entry.status = 'error';\n delete entriesRef.current[file.id];\n removeRef.current(file.id);\n onErrorRef.current(error instanceof Error ? error.message : 'The file could not be uploaded.');\n } finally {\n bump();\n }\n })();\n }\n\n bump();\n }, [api, attachments.files, bump]);\n\n const isUploading = Object.values(entriesRef.current).some((entry) => entry.status === 'uploading');\n\n return {\n getUploaded: (fileIds) =>\n fileIds\n .map((fileId) => entriesRef.current[fileId]?.attachment)\n .filter((attachment): attachment is AgentChatAttachment => Boolean(attachment)),\n isUploading,\n isUploadingFile: (fileId) => entriesRef.current[fileId]?.status === 'uploading',\n };\n}\n\ninterface PreviewableImage {\n filename: string;\n url: string;\n}\n\nfunction isImageMediaType(mediaType: string | undefined): boolean {\n return Boolean(mediaType?.startsWith('image/'));\n}\n\n/**\n * Fullscreen view of one image attachment. The image is centred and grows to\n * fill the viewport but never beyond its intrinsic size.\n */\nfunction ImagePreviewDialog({\n image,\n onClose,\n}: {\n image: PreviewableImage | null;\n onClose: () => void;\n}): JSX.Element {\n return (\n <Dialog onOpenChange={(open) => (open ? undefined : onClose())} open={image !== null}>\n <DialogContent\n className=\"fk:h-dvh fk:w-dvw fk:max-w-none fk:sm:max-w-none fk:rounded-none fk:border-0 fk:bg-black/90 fk:p-4 fk:shadow-none fk:flex fk:items-center fk:justify-center fk:corner-squircle\"\n showCloseButton={false}\n >\n <DialogTitle className=\"fk:sr-only\">{image?.filename ?? 'Image preview'}</DialogTitle>\n {image ? (\n <img\n alt={image.filename}\n className=\"fk:block fk:h-auto fk:w-auto fk:max-h-full fk:max-w-full fk:object-contain\"\n src={image.url}\n />\n ) : null}\n <DialogClose\n aria-label=\"Close preview\"\n className=\"fk:absolute fk:top-4 fk:right-4 fk:flex fk:size-9 fk:items-center fk:justify-center fk:rounded-full fk:bg-white/10 fk:text-white fk:transition-colors fk:hover:bg-white/20 fk:focus-visible:outline-none fk:focus-visible:ring-2 fk:focus-visible:ring-white/60 fk:corner-squircle\"\n >\n <XIcon className=\"fk:size-5\" />\n </DialogClose>\n </DialogContent>\n </Dialog>\n );\n}\n\n/** Small round \"×\" pinned to the top-right corner of a chip. */\nfunction ChipRemoveButton({ label, onRemove }: { label: string; onRemove: () => void }): JSX.Element {\n return (\n <button\n aria-label={label}\n className=\"fk:absolute fk:top-1 fk:right-1 fk:z-10 fk:flex fk:size-5 fk:items-center fk:justify-center fk:rounded-full fk:border fk:border-border fk:bg-background fk:text-foreground fk:shadow-sm fk:transition-colors fk:hover:bg-accent fk:focus-visible:outline-none fk:focus-visible:ring-2 fk:focus-visible:ring-ring fk:corner-squircle\"\n onClick={(event) => {\n event.stopPropagation();\n onRemove();\n }}\n type=\"button\"\n >\n <XIcon className=\"fk:size-3\" />\n </button>\n );\n}\n\n/** Square image thumbnail that opens the fullscreen preview when clicked. */\nfunction ImageThumbnail({\n image,\n isUploading = false,\n onOpen,\n onRemove,\n sizeClassName,\n}: {\n image: PreviewableImage;\n isUploading?: boolean;\n onOpen: () => void;\n onRemove?: () => void;\n sizeClassName: string;\n}): JSX.Element {\n return (\n <div className={`fk:relative fk:shrink-0 fk:overflow-hidden fk:rounded-xl fk:bg-muted ${sizeClassName} fk:corner-squircle`}>\n <button\n aria-label={`Preview ${image.filename}`}\n className=\"fk:block fk:size-full fk:cursor-zoom-in fk:focus-visible:outline-none fk:focus-visible:ring-2 fk:focus-visible:ring-ring\"\n onClick={onOpen}\n type=\"button\"\n >\n <img alt={image.filename} className=\"fk:size-full fk:object-cover\" src={image.url} />\n </button>\n {isUploading ? (\n <div className=\"fk:pointer-events-none fk:absolute fk:inset-0 fk:flex fk:items-center fk:justify-center fk:bg-background/60\">\n <Spinner className=\"fk:size-4\" />\n </div>\n ) : null}\n {onRemove ? <ChipRemoveButton label={`Remove ${image.filename}`} onRemove={onRemove} /> : null}\n </div>\n );\n}\n\n/** Uppercase type label for a file chip, e.g. `NDJSON` or `PDF`. */\nfunction getFileTypeLabel(filename: string, mediaType: string | undefined): string {\n const extension = getExtension(filename);\n\n if (extension) {\n return extension.toUpperCase();\n }\n\n const subtype = mediaType?.split('/')[1]?.split('+')[0];\n\n return subtype ? subtype.toUpperCase() : 'FILE';\n}\n\n/** Card-style chip for non-image files: icon tile, filename, and type. */\nfunction FileChip({\n file,\n href,\n isUploading = false,\n onRemove,\n}: {\n file: { filename: string; mediaType?: string };\n href?: string;\n isUploading?: boolean;\n onRemove?: () => void;\n}): JSX.Element {\n const content = (\n <>\n <div className=\"fk:flex fk:size-10 fk:shrink-0 fk:items-center fk:justify-center fk:rounded-lg fk:bg-muted fk:text-muted-foreground fk:corner-squircle\">\n {isUploading ? <Spinner className=\"fk:size-4\" /> : <FileIcon className=\"fk:size-5\" />}\n </div>\n <div className=\"fk:min-w-0 fk:pr-4 fk:text-left\">\n <div className=\"fk:truncate fk:text-sm fk:font-medium fk:text-foreground\">{file.filename}</div>\n <div className=\"fk:truncate fk:text-xs fk:text-muted-foreground\">{getFileTypeLabel(file.filename, file.mediaType)}</div>\n </div>\n </>\n );\n const chipClassName =\n 'fk:flex fk:h-14 fk:max-w-64 fk:items-center fk:gap-2.5 fk:rounded-xl fk:border fk:border-border fk:bg-background fk:px-2 fk:corner-squircle';\n\n return (\n <div className=\"fk:relative fk:shrink-0\">\n {href ? (\n <a\n className={`${chipClassName} fk:transition-colors fk:hover:bg-accent/50 fk:focus-visible:outline-none fk:focus-visible:ring-2 fk:focus-visible:ring-ring`}\n href={href}\n rel=\"noreferrer\"\n target=\"_blank\"\n >\n {content}\n </a>\n ) : (\n <div className={chipClassName}>{content}</div>\n )}\n {onRemove ? <ChipRemoveButton label={`Remove ${file.filename}`} onRemove={onRemove} /> : null}\n </div>\n );\n}\n\n/**\n * Attachment chips shown above the composer textarea while drafting: images\n * as bare thumbnails, other files as labelled chips.\n */\nexport function ComposerAttachments({ uploads }: { uploads: AttachmentUploads }): JSX.Element | null {\n const attachments = usePromptInputAttachments();\n const [preview, setPreview] = useState<PreviewableImage | null>(null);\n\n if (attachments.files.length === 0) {\n return null;\n }\n\n return (\n <>\n <div className=\"fk:flex fk:flex-wrap fk:items-center fk:gap-2\">\n {attachments.files.map((file) => {\n if (isImageMediaType(file.mediaType) && file.url) {\n const image = { filename: file.filename ?? 'Image', url: file.url };\n\n return (\n <ImageThumbnail\n image={image}\n isUploading={uploads.isUploadingFile(file.id)}\n key={file.id}\n onOpen={() => setPreview(image)}\n onRemove={() => attachments.remove(file.id)}\n sizeClassName=\"fk:size-14\"\n />\n );\n }\n\n return (\n <FileChip\n file={{ filename: file.filename ?? 'file', mediaType: file.mediaType }}\n isUploading={uploads.isUploadingFile(file.id)}\n key={file.id}\n onRemove={() => attachments.remove(file.id)}\n />\n );\n })}\n </div>\n <ImagePreviewDialog image={preview} onClose={() => setPreview(null)} />\n </>\n );\n}\n\n/** Attachments of a persisted user message, read from its `file` parts. */\nexport function getAttachmentsFromParts(parts: AgentChatPart[] | null | undefined): AgentChatAttachment[] {\n if (!Array.isArray(parts)) {\n return [];\n }\n\n return parts\n .filter((part) => part.type === 'file' && typeof part.url === 'string')\n .map((part) => ({\n filename: part.filename ?? 'file',\n mediaType: part.mediaType ?? 'application/octet-stream',\n sizeBytes: part.sizeBytes ?? 0,\n url: part.url ?? '',\n }));\n}\n\n/** Attachments rendered with a sent user message: image thumbnails plus file chips. */\nexport function MessageAttachments({ attachments }: { attachments: AgentChatAttachment[] }): JSX.Element | null {\n const [preview, setPreview] = useState<PreviewableImage | null>(null);\n\n if (attachments.length === 0) {\n return null;\n }\n\n const images = attachments.filter((attachment) => isImageMediaType(attachment.mediaType));\n const files = attachments.filter((attachment) => !isImageMediaType(attachment.mediaType));\n\n return (\n <div className=\"fk:flex fk:flex-col fk:items-end fk:gap-2\">\n {images.length > 0 ? (\n <div className=\"fk:flex fk:flex-wrap fk:justify-end fk:gap-2\">\n {images.map((attachment) => (\n <ImageThumbnail\n image={attachment}\n key={attachment.url}\n onOpen={() => setPreview(attachment)}\n sizeClassName=\"fk:size-24\"\n />\n ))}\n </div>\n ) : null}\n <ImagePreviewDialog image={preview} onClose={() => setPreview(null)} />\n {files.length > 0 ? (\n <div className=\"fk:flex fk:flex-wrap fk:justify-end fk:gap-2\">\n {files.map((attachment) => (\n <FileChip file={attachment} href={attachment.url} key={attachment.url} />\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n","import type { JSX } from 'react';\nimport { useState } from 'react';\nimport { formatDistance } from 'date-fns';\nimport { BotIcon, RadarIcon, XIcon } from 'lucide-react';\nimport useSWR from 'swr';\nimport { Button, Tooltip, TooltipContent, TooltipTrigger, toast } from '../../../ui';\nimport { fetcher, paths, type ApiClient } from '../api';\nimport type { AgentChatDetail, AgentChatMessage, AgentChatMonitor } from '../types';\n\n/** A batch of one monitor's events, as stored on its `monitor_event` message. */\nexport interface MonitorEventData {\n description: string;\n events: Array<{ createdAt: string; id: string; summary: string }>;\n monitorId: string;\n total: number;\n}\n\nexport function getMonitorEventData(message: Pick<AgentChatMessage, 'parts'>): MonitorEventData | null {\n const part = (Array.isArray(message.parts) ? message.parts : []).find((item) => item.type === 'data-monitor-event');\n\n return part && typeof part.data === 'object' && part.data !== null ? (part.data as MonitorEventData) : null;\n}\n\n/**\n * What a chat monitor delivered. It sits where a user message would, but was\n * sent by the monitor, so it reads as a notice rather than a bubble.\n */\nexport function MonitorEventCard({ data, error }: { data: MonitorEventData; error?: string | null }): JSX.Element {\n const hidden = data.total - data.events.length;\n\n return (\n <div className=\"fk:mr-auto fk:w-full fk:max-w-[85%] fk:space-y-1.5 fk:rounded-lg fk:border fk:border-border fk:bg-muted/40 fk:px-3.5 fk:py-2.5 fk:text-sm fk:corner-squircle\">\n <div className=\"fk:flex fk:items-center fk:gap-2 fk:text-xs fk:text-muted-foreground\">\n <RadarIcon className=\"fk:size-3.5 fk:shrink-0\" />\n <span className=\"fk:truncate\">Monitor · {data.description}</span>\n </div>\n <ul className=\"fk:space-y-0.5\">\n {data.events.map((event) => (\n <li key={event.id}>{event.summary}</li>\n ))}\n {hidden > 0 ? <li className=\"fk:text-muted-foreground\">…and {hidden.toString()} more</li> : null}\n </ul>\n {error ? <p className=\"fk:text-xs fk:text-destructive\">{error}</p> : null}\n </div>\n );\n}\n\n/**\n * \"Watching: … · expires in 20 hours · Turn into automation · Stop\" above the\n * composer, one per active monitor. A job monitor ends with its job, so it\n * cannot become an automation.\n */\nexport function MonitorChips({\n api,\n chatId,\n onTurnIntoAutomation,\n projectId,\n sending = false,\n}: {\n api: ApiClient;\n chatId: string;\n /** Asks the agent in the chat to propose an automation that replaces the monitor. */\n onTurnIntoAutomation?: (_monitor: AgentChatMonitor) => void;\n projectId: string;\n /** A message is being sent; Turn into automation waits for it. */\n sending?: boolean;\n}): JSX.Element | null {\n // Shares the chat page's cached detail (same key); no request of its own.\n const { data, mutate } = useSWR<AgentChatDetail>(paths(projectId).agentChat(chatId), fetcher, { revalidateOnMount: false });\n const [stopping, setStopping] = useState<string | null>(null);\n const monitors = data?.monitors ?? [];\n\n if (monitors.length === 0) {\n return null;\n }\n\n async function stop(monitor: AgentChatMonitor): Promise<void> {\n setStopping(monitor.id);\n\n try {\n await api.stopAgentChatMonitor(chatId, monitor.id);\n await mutate();\n } catch {\n toast.error('Unable to stop the monitor.');\n } finally {\n setStopping(null);\n }\n }\n\n return (\n <div className=\"fk:mx-auto fk:mb-2 fk:flex fk:max-w-4xl fk:flex-wrap fk:gap-2\">\n {monitors.map((monitor) => (\n <div\n className=\"fk:flex fk:max-w-full fk:items-center fk:gap-2 fk:rounded-full fk:border fk:border-border fk:py-1 fk:pl-3 fk:pr-1 fk:text-xs fk:text-muted-foreground\"\n key={monitor.id}\n >\n <RadarIcon className=\"fk:size-3.5 fk:shrink-0 fk:animate-pulse\" />\n <span className=\"fk:truncate\">\n Watching: {monitor.description} · expires {formatDistance(new Date(monitor.expiresAt), new Date(), { addSuffix: true })}\n </span>\n {onTurnIntoAutomation && monitor.sourceType && monitor.sourceType !== 'job' ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n aria-label={`Turn ${monitor.description} into an automation`}\n className=\"fk:size-6 fk:rounded-full\"\n disabled={sending}\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => onTurnIntoAutomation(monitor)}\n >\n <BotIcon className=\"fk:size-3.5\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Turn into automation</TooltipContent>\n </Tooltip>\n ) : null}\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n aria-label={`Stop watching ${monitor.description}`}\n className=\"fk:size-6 fk:rounded-full\"\n disabled={stopping === monitor.id}\n size=\"icon\"\n variant=\"ghost\"\n onClick={() => void stop(monitor)}\n >\n <XIcon className=\"fk:size-3.5\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Stop watching</TooltipContent>\n </Tooltip>\n </div>\n ))}\n </div>\n );\n}\n","import type { MarketplacePlugin, PluginConnection, PluginScope } from '../plugin-types';\n\n/** What the chat's connect card offers, from the plugin's current connections and the viewer's rights. */\nexport type PluginConnectState =\n | { kind: 'connected'; connection: PluginConnection }\n | { kind: 'reconnect'; connection: PluginConnection }\n | { kind: 'connect'; scopes: PluginScope[] }\n | { kind: 'disabled' }\n | { kind: 'not_permitted' };\n\n/** The account chat uses: the personal primary wins over the project primary. */\nfunction chatConnection(plugin: MarketplacePlugin): PluginConnection | null {\n const primaries = plugin.connections.filter(\n (connection) => connection.isPrimary && connection.status === 'connected'\n );\n\n return (\n primaries.find((connection) => connection.scope === 'personal') ??\n primaries.find((connection) => connection.scope === 'project') ??\n null\n );\n}\n\n/** Same rule as the Marketplace: personal needs the project to allow it, project needs an owner or developer. */\nfunction scopePermitted(plugin: MarketplacePlugin, canManage: boolean, scope: PluginScope): boolean {\n return scope === 'personal' ? plugin.allowPersonal : canManage;\n}\n\n/**\n * `connectionId` is the account the agent asked to reconnect, if any. A card\n * stays truthful after the fact: once the account works again (here or in the\n * Marketplace) it shows as connected.\n */\nexport function getPluginConnectState(\n plugin: MarketplacePlugin,\n canManage: boolean,\n connectionId?: string\n): PluginConnectState {\n if (!plugin.enabled) {\n return { kind: 'disabled' };\n }\n\n const broken = connectionId\n ? plugin.connections.find((connection) => connection.id === connectionId && connection.status === 'needs_auth')\n : undefined;\n\n if (broken) {\n return scopePermitted(plugin, canManage, broken.scope)\n ? { kind: 'reconnect', connection: broken }\n : { kind: 'not_permitted' };\n }\n\n const connected = chatConnection(plugin);\n\n if (connected) {\n return { kind: 'connected', connection: connected };\n }\n\n const scopes = plugin.scopes.filter((scope) => scopePermitted(plugin, canManage, scope));\n\n return scopes.length > 0 ? { kind: 'connect', scopes } : { kind: 'not_permitted' };\n}\n","import type { JSX } from 'react';\nimport { createContext, useContext, useMemo, useRef, useState } from 'react';\nimport { CheckIcon, CircleAlertIcon, LoaderCircle, PlugIcon } from 'lucide-react';\nimport useSWR, { useSWRConfig } from 'swr';\nimport { useConfig } from '../../../core/config/config-context';\nimport { Button, Dialog, DialogContent, DialogDescription, DialogTitle } from '../../../ui';\nimport { createApiClient, fetcher } from '../api';\nimport { connectPluginPopup } from '../plugin-oauth';\nimport type { PluginDetail, PluginScope } from '../plugin-types';\nimport { getPluginConnectState } from './plugin-connect-state';\n\n/** Lets a connect card hand a finished connection back to the chat, which continues in a new turn. */\nexport const PluginConnectContext = createContext<{ onConnected: (_pluginId: string) => Promise<void> } | null>(null);\n\n/** On a `plugin_connected` message. */\nexport interface PluginConnectedData {\n accountName?: string;\n pluginId: string;\n pluginName: string;\n scope: PluginScope;\n}\n\nconst SCOPE_OPTIONS: { [scope in PluginScope]: { description: string; title: string } } = {\n personal: { description: 'Only you can use this connection in this project.', title: 'Personal' },\n project: { description: 'Shared with project members who can use this plugin.', title: 'Project' },\n};\n\nfunction PluginLogo({ name, src, size }: { name: string; size: 'md' | 'lg'; src: string }): JSX.Element {\n return (\n <span\n className={`fk:flex fk:shrink-0 fk:items-center fk:justify-center fk:rounded-xl fk:bg-muted fk:corner-squircle ${\n size === 'lg' ? 'fk:size-16 fk:p-3' : 'fk:size-11 fk:p-2'\n }`}\n >\n <img alt={name} className=\"fk:size-full fk:object-contain\" src={src} />\n </span>\n );\n}\n\nfunction ConsentDialog({\n busy,\n logoUrl,\n name,\n onContinue,\n onOpenChange,\n open,\n scopes,\n}: {\n busy: boolean;\n logoUrl: string;\n name: string;\n onContinue: (_scope: PluginScope) => void;\n onOpenChange: (_open: boolean) => void;\n open: boolean;\n scopes: PluginScope[];\n}): JSX.Element {\n // Like the Marketplace, no scope is preselected when both are offered.\n const [scope, setScope] = useState<PluginScope | null>(scopes.length === 1 ? (scopes[0] ?? null) : null);\n const promises = [\n { description: 'Flexkit never sees your password.', title: `Sign in securely to your ${name} account` },\n {\n description: `The agent only gets the access you approve on ${name}'s sign-in page.`,\n title: 'You decide what the agent can do',\n },\n { description: `Remove the connection to ${name} at any time.`, title: 'You stay in control' },\n ];\n\n return (\n <Dialog onOpenChange={onOpenChange} open={open}>\n <DialogContent className=\"fk:sm:max-w-md\">\n <div className=\"fk:flex fk:flex-col fk:items-center fk:gap-3 fk:pt-2 fk:text-center\">\n <PluginLogo name={name} size=\"lg\" src={logoUrl} />\n <DialogTitle className=\"fk:text-xl\">Connect to {name}</DialogTitle>\n <DialogDescription>Let the Flexkit agent access and use {name} on your behalf.</DialogDescription>\n </div>\n <ul className=\"fk:space-y-3 fk:rounded-xl fk:bg-muted/60 fk:p-4 fk:corner-squircle\">\n {promises.map((promise) => (\n <li className=\"fk:flex fk:gap-3\" key={promise.title}>\n <CheckIcon className=\"fk:mt-0.5 fk:size-4 fk:shrink-0\" />\n <span>\n <span className=\"fk:block fk:text-sm fk:font-medium\">{promise.title}</span>\n <span className=\"fk:block fk:text-sm fk:text-muted-foreground\">{promise.description}</span>\n </span>\n </li>\n ))}\n </ul>\n {scopes.length > 1 ? (\n <div className=\"fk:space-y-1.5\" role=\"radiogroup\" aria-label=\"Connection\">\n {scopes.map((item) => (\n <button\n aria-checked={scope === item}\n className={`fk:flex fk:w-full fk:flex-col fk:rounded-lg fk:border fk:px-3 fk:py-2 fk:text-left fk:corner-squircle ${\n scope === item ? 'fk:border-primary fk:bg-primary/5' : 'fk:border-border fk:hover:bg-muted/60'\n }`}\n key={item}\n onClick={() => setScope(item)}\n role=\"radio\"\n type=\"button\"\n >\n <span className=\"fk:text-sm fk:font-medium\">{SCOPE_OPTIONS[item].title}</span>\n <span className=\"fk:text-xs fk:text-muted-foreground\">{SCOPE_OPTIONS[item].description}</span>\n </button>\n ))}\n </div>\n ) : null}\n <p className=\"fk:text-center fk:text-xs fk:text-muted-foreground\">\n You can manage connections anytime in AI → Marketplace.\n </p>\n <Button className=\"fk:w-full\" disabled={busy || !scope} onClick={() => scope && onContinue(scope)} type=\"button\">\n Continue\n </Button>\n </DialogContent>\n </Dialog>\n );\n}\n\n/**\n * The card a plugin setup tool shows in the chat: Authorize opens the consent\n * dialog, Continue the provider's sign-in popup. A finished connection is\n * handed to the chat, which continues in a new turn with the plugin's tools.\n */\nexport function PluginConnectCard({\n connectionId,\n pluginId,\n}: {\n connectionId?: string;\n pluginId: string;\n}): JSX.Element {\n const { currentProjectId } = useConfig();\n const api = useMemo(() => (currentProjectId ? createApiClient(currentProjectId) : null), [currentProjectId]);\n const base = currentProjectId ? `/api/flexkit/${currentProjectId}` : null;\n const detailKey = base ? `${base}/plugins/${encodeURIComponent(pluginId)}` : null;\n const { data, error, mutate } = useSWR<PluginDetail>(detailKey, fetcher);\n const { mutate: revalidateKey } = useSWRConfig();\n const chat = useContext(PluginConnectContext);\n const [consentOpen, setConsentOpen] = useState(false);\n const [connecting, setConnecting] = useState(false);\n // State updates land after the next render; a double click must not start a second popup.\n const connectingRef = useRef(false);\n const [failure, setFailure] = useState<{ message: string; scope: PluginScope } | null>(null);\n\n if (!data) {\n return (\n <div className=\"fk:flex fk:items-center fk:gap-2 fk:rounded-2xl fk:border fk:border-border fk:p-4 fk:text-sm fk:text-muted-foreground fk:corner-squircle\">\n {error ? <CircleAlertIcon className=\"fk:size-4\" /> : <LoaderCircle className=\"fk:size-4 fk:animate-spin\" />}\n {error ? `${pluginId} could not be loaded.` : `Loading ${pluginId}…`}\n </div>\n );\n }\n\n const { plugin } = data;\n const state = getPluginConnectState(plugin, data.canManage, connectionId);\n const reconnect = state.kind === 'reconnect' ? state.connection : null;\n\n // Called straight from a click: browsers only allow the popup there.\n function authorize(scope: PluginScope): void {\n if (!api || connectingRef.current) {\n return;\n }\n\n connectingRef.current = true;\n setConsentOpen(false);\n setConnecting(true);\n setFailure(null);\n\n connectPluginPopup(api, pluginId, scope, reconnect ? { connectionId: reconnect.id } : undefined)\n .then(\n () => {\n // Refreshing the card is best-effort: the connection succeeded either\n // way, and the chat continues with it (reporting its own errors).\n mutate().catch(() => undefined);\n\n if (base) {\n revalidateKey(`${base}/plugins`).catch(() => undefined);\n }\n\n void chat?.onConnected(pluginId);\n },\n (reason: unknown) => {\n const detail = reason instanceof Error ? reason.message : '';\n\n setFailure({\n message: /popups|different account/i.test(detail) ? detail : `${plugin.name} authorization didn't finish`,\n scope,\n });\n }\n )\n .finally(() => {\n connectingRef.current = false;\n setConnecting(false);\n });\n }\n\n let status: JSX.Element | null = null;\n let action: JSX.Element | null = null;\n\n if (state.kind === 'connected') {\n status = (\n <span className=\"fk:flex fk:items-center fk:gap-1.5 fk:text-sm fk:text-muted-foreground\">\n <CheckIcon className=\"fk:size-4 fk:text-green-700\" />\n Connected · {state.connection.displayName}\n </span>\n );\n } else if (state.kind === 'disabled') {\n status = (\n <span className=\"fk:text-sm fk:text-muted-foreground\">An owner turned {plugin.name} off for this project.</span>\n );\n } else if (state.kind === 'not_permitted') {\n status = (\n <span className=\"fk:text-sm fk:text-muted-foreground\">\n Ask a project owner or developer to connect {plugin.name}.\n </span>\n );\n } else if (failure) {\n status = (\n <span className=\"fk:flex fk:items-center fk:gap-1.5 fk:text-sm fk:text-muted-foreground\">\n <CircleAlertIcon className=\"fk:size-4 fk:shrink-0 fk:text-amber-600\" />\n {failure.message}\n </span>\n );\n action = (\n <Button\n disabled={connecting}\n onClick={() => authorize(failure.scope)}\n size=\"sm\"\n type=\"button\"\n variant=\"secondary\"\n >\n Retry\n </Button>\n );\n } else {\n action = (\n <Button\n disabled={connecting}\n onClick={() => (reconnect ? authorize(reconnect.scope) : setConsentOpen(true))}\n size=\"sm\"\n type=\"button\"\n >\n {connecting ? <LoaderCircle className=\"fk:size-3.5 fk:animate-spin\" /> : null}\n {reconnect ? 'Reconnect' : 'Authorize'}\n </Button>\n );\n }\n\n return (\n <div className=\"fk:space-y-2\">\n <div className=\"fk:space-y-3 fk:rounded-2xl fk:border fk:border-border fk:bg-background fk:p-4 fk:corner-squircle\">\n <div className=\"fk:flex fk:items-center fk:gap-3\">\n <PluginLogo name={plugin.name} size=\"md\" src={plugin.logoUrl} />\n <div className=\"fk:min-w-0 fk:flex-1\">\n <div className=\"fk:truncate fk:font-medium\">{plugin.name}</div>\n <div className=\"fk:truncate fk:text-sm fk:text-muted-foreground\">\n {reconnect\n ? `Sign in again so the agent can keep using ${plugin.name}`\n : `Let the Flexkit agent use ${plugin.name}`}\n </div>\n </div>\n {action && !failure ? action : null}\n </div>\n {status ? (\n <div className=\"fk:flex fk:items-center fk:justify-between fk:gap-3\">\n {status}\n {failure ? action : null}\n </div>\n ) : null}\n </div>\n {state.kind === 'connect' || state.kind === 'reconnect' ? (\n <p className=\"fk:px-1 fk:text-xs fk:text-muted-foreground\">\n Plugin actions follow your project's approval rules. Disconnect any time in AI → Marketplace.\n </p>\n ) : null}\n {state.kind === 'connect' ? (\n <ConsentDialog\n busy={connecting}\n logoUrl={plugin.logoUrl}\n name={plugin.name}\n onContinue={authorize}\n onOpenChange={setConsentOpen}\n open={consentOpen}\n scopes={state.scopes}\n />\n ) : null}\n </div>\n );\n}\n\n/** Where a `plugin_connected` message sits: a short notice, not a user bubble. */\nexport function PluginConnectedNotice({\n data,\n error,\n label,\n}: {\n data: PluginConnectedData;\n error?: string | null;\n /** Set while the message waits for the running turn, like other follow-ups. */\n label?: string | null;\n}): JSX.Element {\n return (\n <div className=\"fk:mr-auto fk:flex fk:max-w-[85%] fk:flex-wrap fk:items-center fk:gap-x-2 fk:gap-y-1 fk:text-sm fk:text-muted-foreground\">\n <PlugIcon className=\"fk:size-3.5 fk:shrink-0\" />\n <span>\n Connected <span className=\"fk:font-medium fk:text-foreground\">{data.pluginName}</span>\n {data.accountName ? ` · ${data.accountName}` : ''}\n </span>\n {label ? <span className=\"fk:text-xs\">· {label}</span> : null}\n {error ? <span className=\"fk:text-xs fk:text-destructive\">{error}</span> : null}\n </div>\n );\n}\n\nexport function getPluginConnectedData(parts: unknown): PluginConnectedData | null {\n const part = (Array.isArray(parts) ? (parts as Array<{ data?: unknown; type?: string }>) : []).find(\n (item) => item.type === 'data-plugin-connected'\n );\n\n return part && typeof part.data === 'object' && part.data !== null ? (part.data as PluginConnectedData) : null;\n}\n","import type { UIMessageChunk } from 'ai';\nimport { pipeJsonRender } from '@json-render/core';\n\nexport class LegacyStreamError extends Error {}\nclass PermanentStreamError extends Error {}\ntype State = { terminal: boolean; paused: boolean };\n\n/** Cursor and parser state have the same lifetime. Neither is reused alone.\n * A remount deliberately starts at zero; reconnects reuse both. */\nexport function createResumableUiStream({\n url,\n signal,\n state,\n onState,\n wake,\n fetchStream = fetch,\n retryMs = 2000,\n}: {\n url: string;\n signal: AbortSignal;\n state: () => State;\n onState: (status: 'streaming' | 'paused' | 'finished' | 'unavailable') => void;\n /** A `wake` event here ends the current pause or retry wait so `state` is re-read at once. */\n wake?: EventTarget;\n fetchStream?: typeof fetch;\n retryMs?: number;\n}): ReadableStream<UIMessageChunk> {\n let cursor = 0;\n let failures = 0;\n const bridge = new TransformStream<UIMessageChunk, UIMessageChunk>();\n const writer = bridge.writable.getWriter();\n const local = new AbortController();\n void writer.closed.catch((error) => local.abort(error));\n const abort = () => {\n local.abort(signal.reason);\n void writer.abort(signal.reason).catch(() => undefined);\n };\n signal.addEventListener('abort', abort, { once: true });\n if (signal.aborted) abort();\n const wait = () =>\n new Promise<void>((resolve) => {\n const done = () => {\n clearTimeout(timer);\n local.signal.removeEventListener('abort', done);\n wake?.removeEventListener('wake', done);\n resolve();\n };\n const timer = setTimeout(done, retryMs);\n local.signal.addEventListener('abort', done, { once: true });\n wake?.addEventListener('wake', done, { once: true });\n if (local.signal.aborted) done();\n });\n\n async function pump() {\n try {\n await writer.write({ type: 'start' });\n while (!local.signal.aborted) {\n try {\n const response = await fetchStream(`${url}${url.includes('?') ? '&' : '?'}wire=2&startIndex=${cursor}`, {\n credentials: 'include',\n signal: local.signal,\n });\n if (response.status === 404) {\n onState('unavailable');\n await writer.close();\n return;\n }\n if (response.status === 401 || response.status === 403)\n throw new PermanentStreamError('Stream access denied');\n if (!response.ok || !response.body) throw new Error(`Stream request failed: ${response.status}`);\n if (response.headers.get('x-flexkit-stream-version') !== '2') {\n await response.body.cancel();\n throw new LegacyStreamError('Backend uses legacy replay');\n }\n onState('streaming');\n const reader = response.body.pipeThrough(new TextDecoderStream()).getReader();\n let partial = '';\n let complete = false;\n try {\n while (!local.signal.aborted) {\n const { value, done } = await reader.read();\n if (done) break;\n partial += value;\n let end: number;\n while ((end = partial.indexOf('\\n')) >= 0) {\n const line = partial.slice(0, end);\n partial = partial.slice(end + 1);\n if (!line) continue;\n const frame = JSON.parse(line) as { index: number; chunk: UIMessageChunk | null };\n if (!Number.isSafeInteger(frame.index) || frame.index < 0) throw new Error('Invalid replay cursor');\n if (frame.index < cursor) continue; // Retry duplicates never enter the parser.\n if (frame.index !== cursor) throw new Error('Replay cursor gap');\n if (frame.chunk) await writer.write(frame.chunk);\n cursor = frame.index + 1;\n failures = 0;\n if (\n frame.chunk?.type === 'finish' &&\n (frame.chunk.messageMetadata as { flexkitTerminal?: boolean } | undefined)?.flexkitTerminal\n )\n complete = true;\n }\n if (partial.length > 2_000_000) throw new Error('Oversized replay frame');\n if (complete) break;\n }\n } finally {\n await reader.cancel().catch(() => undefined);\n reader.releaseLock();\n }\n if (complete || (state().terminal && !partial)) {\n await writer.write({ type: 'finish' });\n await writer.close();\n onState('finished');\n return;\n }\n } catch (error) {\n if (\n local.signal.aborted ||\n error instanceof LegacyStreamError ||\n error instanceof PermanentStreamError ||\n ++failures >= 5\n )\n throw error;\n // Keep the same parser and last accepted cursor after a dropped or\n // truncated HTTP response. No partial frame advances the cursor.\n }\n do {\n onState(state().paused ? 'paused' : 'streaming');\n await wait();\n } while (!local.signal.aborted && state().paused && !state().terminal);\n }\n } catch (error) {\n await writer.abort(error).catch(() => undefined);\n } finally {\n signal.removeEventListener('abort', abort);\n writer.releaseLock();\n }\n }\n void pump(); // Lifetime owned by the returned stream and the abort signal.\n return pipeJsonRender(bridge.readable) as ReadableStream<UIMessageChunk>;\n}\n","import type { JSX } from 'react';\nimport { useState } from 'react';\nimport { CheckIcon, LoaderCircle } from 'lucide-react';\nimport { Badge, Button, Input } from '../../ui';\nimport {\n createQuestionDrafts,\n formatQuestionAnswer,\n getQuestionAnswers,\n setQuestionOther,\n toggleQuestionOption,\n type QuestionDraft,\n type UserQuestionData,\n type UserQuestionItem,\n} from './question-parts';\nimport type { AgentChatQuestion, AgentChatQuestionResponse } from './types';\n\nconst SETTLED_LABELS: { [status in Exclude<UserQuestionData['status'], 'answered'>]: string } = {\n // A pending card that cannot be answered here (outside the live turn) waits like a stopped one.\n pending: 'Waiting for an answer.',\n cancelled: 'The turn was stopped before you answered.',\n dismissed: 'You skipped these questions.',\n expired: 'Nobody answered in time.',\n};\n\nexport type AnswerQuestion = (_questionId: string, _response: AgentChatQuestionResponse) => Promise<AgentChatQuestion | null>;\n\nfunction OptionButton({\n description,\n label,\n multiSelect,\n onClick,\n selected,\n}: {\n description: string;\n label: string;\n multiSelect: boolean;\n onClick: () => void;\n selected: boolean;\n}): JSX.Element {\n return (\n <button\n aria-checked={selected}\n className={`fk:flex fk:w-full fk:items-start fk:gap-2.5 fk:rounded-lg fk:border fk:px-3 fk:py-2 fk:text-left fk:transition-colors fk:corner-squircle ${\n selected ? 'fk:border-primary fk:bg-primary/5' : 'fk:border-border fk:hover:bg-muted/60'\n }`}\n onClick={onClick}\n role={multiSelect ? 'checkbox' : 'radio'}\n type=\"button\"\n >\n <span\n className={`fk:mt-0.5 fk:flex fk:size-4 fk:shrink-0 fk:items-center fk:justify-center fk:border ${\n multiSelect ? 'fk:rounded-sm' : 'fk:rounded-full'\n } ${selected ? 'fk:border-primary fk:bg-primary fk:text-primary-foreground' : 'fk:border-muted-foreground/50'}`}\n >\n {selected ? <CheckIcon className=\"fk:size-3\" /> : null}\n </span>\n <span className=\"fk:min-w-0\">\n <span className=\"fk:block fk:text-sm fk:font-medium\">{label}</span>\n {description ? <span className=\"fk:block fk:text-xs fk:text-muted-foreground\">{description}</span> : null}\n </span>\n </button>\n );\n}\n\nfunction QuestionInput({\n disabled,\n draft,\n onChange,\n question,\n}: {\n disabled: boolean;\n draft: QuestionDraft;\n onChange: (_draft: QuestionDraft) => void;\n question: UserQuestionItem;\n}): JSX.Element {\n return (\n <fieldset className=\"fk:space-y-2\" disabled={disabled}>\n <legend className=\"fk:mb-2 fk:flex fk:flex-wrap fk:items-center fk:gap-2\">\n <Badge variant=\"outline\">{question.header}</Badge>\n <span className=\"fk:text-sm fk:font-medium\">{question.question}</span>\n {question.multiSelect ? <span className=\"fk:text-xs fk:text-muted-foreground\">Pick any</span> : null}\n </legend>\n <div className=\"fk:space-y-1.5\" role={question.multiSelect ? 'group' : 'radiogroup'}>\n {question.options.map((option) => (\n <OptionButton\n description={option.description}\n key={option.label}\n label={option.label}\n multiSelect={question.multiSelect}\n onClick={() => onChange(toggleQuestionOption(question, draft, option.label))}\n selected={draft.selected.includes(option.label)}\n />\n ))}\n <Input\n aria-label={`Your own answer to: ${question.question}`}\n className=\"fk:h-9\"\n maxLength={4000}\n onChange={(event) => onChange(setQuestionOther(question, draft, event.target.value))}\n placeholder=\"Other — type your own answer\"\n value={draft.other}\n />\n </div>\n </fieldset>\n );\n}\n\nfunction SettledQuestion({ data }: { data: UserQuestionData }): JSX.Element {\n if (data.status === 'answered' && data.message !== undefined) {\n return (\n <div className=\"fk:space-y-1\">\n <p className=\"fk:text-xs fk:text-muted-foreground\">{data.questions.map((question) => question.question).join(' · ')}</p>\n <p className=\"fk:text-sm\">\n You replied: <span className=\"fk:whitespace-pre-wrap\">“{data.message}”</span>\n </p>\n </div>\n );\n }\n\n if (data.status !== 'answered') {\n return (\n <div className=\"fk:space-y-1\">\n <p className=\"fk:text-xs fk:text-muted-foreground\">{data.questions.map((question) => question.question).join(' · ')}</p>\n <p className=\"fk:text-sm fk:text-muted-foreground\">{SETTLED_LABELS[data.status]}</p>\n </div>\n );\n }\n\n return (\n <dl className=\"fk:space-y-1.5\">\n {data.questions.map((question, index) => (\n <div className=\"fk:flex fk:flex-wrap fk:items-baseline fk:gap-x-2\" key={index}>\n <dt className=\"fk:text-xs fk:text-muted-foreground\">{question.question}</dt>\n <dd className=\"fk:text-sm fk:font-medium\">{formatQuestionAnswer(data.answers?.[index])}</dd>\n </div>\n ))}\n </dl>\n );\n}\n\n/**\n * The questions the chat agent asked. Pending ones take answers (options,\n * own words, or a skip); settled ones show what happened. `answer` is absent\n * outside a live chat turn, where nothing can be answered.\n */\nexport function QuestionCard({ answer, data }: { answer?: AnswerQuestion; data: UserQuestionData }): JSX.Element {\n const [drafts, setDrafts] = useState<QuestionDraft[]>(() => createQuestionDrafts(data.questions));\n const [settled, setSettled] = useState<UserQuestionData | null>(null);\n const [submitting, setSubmitting] = useState<'answer' | 'dismiss' | null>(null);\n const [errorMessage, setErrorMessage] = useState('');\n // The stream catches up after the workflow wakes; until then the card shows what this client sent.\n const shown = data.status === 'pending' && settled ? settled : data;\n\n if (shown.status !== 'pending' || !answer) {\n return <SettledQuestion data={shown} />;\n }\n\n const answers = getQuestionAnswers(drafts);\n\n async function submit(response: AgentChatQuestionResponse): Promise<void> {\n if (!answer) {\n return;\n }\n\n setSubmitting(response.action);\n setErrorMessage('');\n\n try {\n const question = await answer(data.questionId, response);\n\n if (question) {\n setSettled({\n ...(question.answers ? { answers: question.answers } : {}),\n ...(question.message !== null ? { message: question.message } : {}),\n questionId: question.id,\n questions: question.questions,\n status: question.status,\n });\n }\n } catch (error) {\n setErrorMessage(error instanceof Error ? error.message : 'Could not send the answer.');\n } finally {\n setSubmitting(null);\n }\n }\n\n return (\n <form\n className=\"fk:space-y-5\"\n onSubmit={(event) => {\n event.preventDefault();\n\n if (answers) {\n void submit({ action: 'answer', answers });\n }\n }}\n >\n {data.questions.map((question, index) => (\n <QuestionInput\n disabled={submitting !== null}\n draft={drafts[index] ?? { other: '', selected: [] }}\n key={index}\n onChange={(draft) => setDrafts((current) => current.map((item, itemIndex) => (itemIndex === index ? draft : item)))}\n question={question}\n />\n ))}\n {errorMessage ? <p className=\"fk:text-xs fk:text-destructive\">{errorMessage}</p> : null}\n <div className=\"fk:flex fk:flex-wrap fk:items-center fk:gap-2\">\n <Button disabled={!answers || submitting !== null} size=\"sm\" type=\"submit\">\n {submitting === 'answer' ? <LoaderCircle className=\"fk:size-3.5 fk:animate-spin\" /> : null}\n Submit\n </Button>\n <Button\n disabled={submitting !== null}\n onClick={() => void submit({ action: 'dismiss' })}\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n >\n {submitting === 'dismiss' ? <LoaderCircle className=\"fk:size-3.5 fk:animate-spin\" /> : null}\n Skip\n </Button>\n <span className=\"fk:text-xs fk:text-muted-foreground\">or reply in the chat</span>\n </div>\n </form>\n );\n}\n","import { createResumableUiStream, LegacyStreamError } from './resumable-stream';\nimport type { JSX } from 'react';\nimport type { TextUIPart, UIMessage, UIMessageChunk } from 'ai';\nimport { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { parseJsonEventStream, readUIMessageStream, uiMessageChunkSchema } from 'ai';\nimport {\n BotIcon,\n CheckCircle2Icon,\n CheckIcon,\n CircleSlashIcon,\n CloudUploadIcon,\n DatabaseZapIcon,\n DownloadIcon,\n LinkIcon,\n FileTextIcon,\n LoaderCircle,\n MessageCircleQuestionIcon,\n MessageSquareIcon,\n SendIcon,\n ShieldCheckIcon,\n ShieldIcon,\n XCircleIcon,\n XIcon,\n CornerDownRightIcon,\n} from 'lucide-react';\nimport { useConfig } from '../../core/config/config-context';\nimport { Button, MessageResponse } from '../../ui';\nimport useSWR from 'swr';\nimport { createApiClient, fetcher, paths } from './api';\nimport { ApprovalCard } from './approval-card';\nimport {\n type DecidedApprovals,\n messageHasPendingMutationApproval,\n settlePendingMutationApprovals,\n} from './approval-parts';\nimport { type AnswerQuestion, QuestionCard } from './question-card';\nimport { messageHasPendingUserQuestion } from './question-parts';\n\nexport {\n getMutationApprovalIds,\n getPendingMutationApprovalIds,\n messageHasPendingMutationApproval,\n} from './approval-parts';\nexport { messageHasPendingUserQuestion } from './question-parts';\nexport type { DecidedApprovals } from './approval-parts';\nimport { lazy, Suspense } from 'react';\nconst LazyRunSpecPart = lazy(() => import('./spec-renderer').then((module) => ({ default: module.RunSpecPart })));\nfunction RunSpecPart(props: React.ComponentProps<typeof LazyRunSpecPart>) {\n return (\n <Suspense fallback={null}>\n <LazyRunSpecPart {...props} />\n </Suspense>\n );\n}\nimport {\n getPartData,\n getRollingStatusError,\n isHiddenReplayPart,\n isJevAutoApproved,\n isRollingStatusPartType,\n} from './status-label';\nimport type { DataPart } from '@flexkit/agent-protocol';\nimport type { AutomationApproval, AutomationRun } from './types';\nimport { watchSchemaDeployment } from './schema-deploy-watch';\nimport { MessageAttachments } from './agent/attachments';\nimport { MonitorEventCard } from './agent/monitor-parts';\nimport { PluginConnectCard } from './agent/plugin-connect-card';\n\nexport {\n getLiveStatusLabel,\n getPartData,\n getRollingStatusError,\n isHiddenReplayPart,\n isRollingStatusPartType,\n} from './status-label';\n\nexport function useProjectApi(): { api: ReturnType<typeof createApiClient> | null; projectId: string | undefined } {\n const { currentProjectId } = useConfig();\n const api = useMemo(() => (currentProjectId ? createApiClient(currentProjectId) : null), [currentProjectId]);\n\n return { api, projectId: currentProjectId };\n}\n\nexport interface ReplayMetadata {\n model?: string;\n}\n\n/**\n * Parts streamed by the platform, derived from the shared protocol schema; the\n * index signature keeps `UIMessage` happy with parts this build does not know.\n */\nexport interface ReplayDataParts extends DataPart {\n [key: string]: unknown;\n}\n\ninterface ReplayTools {\n [key: string]: {\n input: unknown;\n output: unknown | undefined;\n };\n}\n\nexport type ReplayMessage = UIMessage<ReplayMetadata, ReplayDataParts, ReplayTools>;\nexport type ReplayMessagePart = ReplayMessage['parts'][number];\nexport type RunStreamStatus = 'streaming' | 'paused' | 'finished' | 'error' | 'unavailable';\n/** The persisted record status backing a stream (automation run or chat turn). */\nexport type RunRecordStatus = AutomationRun['status'];\ntype ConsumeOnceResult = 'finished' | 'incomplete' | 'unavailable';\n\nconst MAX_STREAM_ATTEMPTS = 5;\nexport const STREAM_RETRY_DELAY_MS = 2000;\nconst REPLAY_RENDER_INTERVAL_MS = 120;\nconst JSON_RENDER_SPEC_PART_TYPE = 'data-spec';\n\nexport interface RunReplayActions {\n /** A proposal was decided here or seen decided elsewhere; `status` lets the replay keep its card mounted. */\n onApprovalDecided: (_approvalId?: string, _status?: AutomationApproval['status']) => void;\n /** Answers a question the live chat turn waits on, then resumes the stream; absent where nothing can be answered. */\n answerQuestion?: AnswerQuestion;\n}\n\nexport const RunReplayActionsContext = createContext<RunReplayActions | null>(null);\nexport const ChatApprovalContext = createContext(false);\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => window.setTimeout(resolve, ms));\n}\n\nfunction isAbortError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n\n return error.name === 'AbortError' || error.message.toLowerCase().includes('aborted');\n}\n\nfunction hasRenderableParts(parts: ReplayMessagePart[]): boolean {\n return parts.some((part) => !isHiddenReplayPart(part));\n}\n\nfunction getMarkerIds(messages: ReplayMessage[]): Set<string> {\n const markerIds = new Set<string>();\n\n for (const message of messages) {\n for (const part of message.parts) {\n if (part.type === 'data-user-message' && part.id) {\n markerIds.add(part.id);\n }\n }\n }\n\n return markerIds;\n}\n\nfunction splitSessionMessages(messages: ReplayMessage[]): ReplayMessage[] {\n const markerIds = getMarkerIds(messages);\n const result: ReplayMessage[] = [];\n\n for (const message of messages) {\n if (message.role === 'user') {\n if (!markerIds.has(message.id)) {\n result.push(message);\n }\n\n continue;\n }\n\n if (message.role !== 'assistant') {\n result.push(message);\n\n continue;\n }\n\n let parts: ReplayMessagePart[] = [];\n let chunkIndex = 0;\n\n const flush = (): void => {\n if (hasRenderableParts(parts)) {\n result.push({ ...message, id: `${message.id}-${chunkIndex.toString()}`, parts });\n }\n\n chunkIndex++;\n parts = [];\n };\n\n for (const part of message.parts) {\n if (part.type === 'data-user-message') {\n const data = getPartData<ReplayDataParts['user-message']>(part);\n\n flush();\n result.push({\n id: part.id ?? crypto.randomUUID(),\n parts: data.parts as ReplayMessagePart[],\n role: 'user',\n });\n\n continue;\n }\n\n parts.push(part);\n }\n\n flush();\n }\n\n return result;\n}\n\nexport function useSessionMessages(messages: ReplayMessage[]): ReplayMessage[] {\n return useMemo(() => splitSessionMessages(messages), [messages]);\n}\n\nexport function isTerminalRunStatus(status: RunRecordStatus | null | undefined): boolean {\n return status === 'success' || status === 'failed' || status === 'cancelled' || status === 'skipped';\n}\n\nfunction shouldPauseStreamForApproval({\n latestMessage,\n recordStatus,\n suppressApprovalPause,\n}: {\n latestMessage: ReplayMessage | undefined;\n recordStatus: RunRecordStatus | null | undefined;\n suppressApprovalPause: boolean;\n}): boolean {\n if (isTerminalRunStatus(recordStatus)) {\n return false;\n }\n\n // After a local approval decision the run/stream can still look suspended\n // until the workflow hook resumes — keep reconnecting in that case.\n if (suppressApprovalPause) {\n return false;\n }\n\n // The run record is authoritative once execution has resumed. A stale\n // pending data-mutation-approval part can linger in the replay until the\n // next workflow step writes an updated status.\n if (recordStatus === 'running') {\n return false;\n }\n\n if (recordStatus === 'awaiting_approval') {\n return true;\n }\n\n // Fall back to the stream part when the run record hasn't caught up yet.\n return messageHasPendingMutationApproval(latestMessage) || messageHasPendingUserQuestion(latestMessage);\n}\n\n/** A single UI parser remains alive across approval waits and reconnects. */\nexport function useRunStream(\n streamApi: string,\n options?: {\n decidedApprovals?: DecidedApprovals;\n recordStatus?: RunRecordStatus | null;\n resumeToken?: number;\n suppressApprovalPause?: boolean;\n }\n): { message: ReplayMessage | undefined; status: RunStreamStatus } {\n const [legacy, setLegacy] = useState(false);\n const fallback = useLegacyRunStream(legacy ? streamApi : '', options);\n const [message, setMessage] = useState<ReplayMessage>();\n const [status, setStatus] = useState<RunStreamStatus>('streaming');\n const optionsRef = useRef(options);\n optionsRef.current = options;\n const wakeRef = useRef<EventTarget | null>(null);\n if (!wakeRef.current) wakeRef.current = new EventTarget();\n const wake = wakeRef.current;\n // A local approval decision bumps resumeToken after setting\n // suppressApprovalPause; re-read the pause state now rather than after the\n // retry delay, so the run resumes as soon as the user decides.\n const resumeToken = options?.resumeToken;\n useEffect(() => {\n wake.dispatchEvent(new Event('wake'));\n }, [resumeToken, wake]);\n useEffect(() => {\n setLegacy(false);\n setMessage(undefined);\n if (!streamApi) {\n setStatus('unavailable');\n return;\n }\n const abort = new AbortController();\n let timer: ReturnType<typeof setTimeout> | undefined;\n let latest: ReplayMessage | undefined;\n const flush = () => {\n timer = undefined;\n if (latest && !abort.signal.aborted) setMessage({ ...latest });\n };\n const stream = createResumableUiStream({\n url: streamApi,\n signal: abort.signal,\n state: () => ({\n terminal: isTerminalRunStatus(optionsRef.current?.recordStatus),\n paused: shouldPauseStreamForApproval({\n latestMessage: latest,\n recordStatus: optionsRef.current?.recordStatus,\n suppressApprovalPause: optionsRef.current?.suppressApprovalPause ?? false,\n }),\n }),\n onState: (next) => {\n if (!abort.signal.aborted) setStatus(next);\n },\n wake,\n });\n void (async () => {\n try {\n for await (const current of readUIMessageStream<ReplayMessage>({ stream, terminateOnError: true })) {\n latest = current;\n if (!timer) timer = setTimeout(flush, REPLAY_RENDER_INTERVAL_MS);\n }\n flush();\n } catch (error) {\n if (abort.signal.aborted) return;\n if (error instanceof LegacyStreamError) setLegacy(true);\n else {\n console.error('Run stream error', error);\n setStatus('error');\n }\n }\n })();\n return () => {\n abort.abort();\n if (timer) clearTimeout(timer);\n };\n }, [streamApi, wake]);\n if (legacy) return fallback;\n return {\n message: message ? settlePendingMutationApprovals(message, options?.decidedApprovals ?? {}) : undefined,\n status,\n };\n}\n\nfunction useLegacyRunStream(\n streamApi: string,\n options?: {\n /** Decisions known to this client, applied to stale pending parts while the stream rebuilds. */\n decidedApprovals?: DecidedApprovals;\n recordStatus?: RunRecordStatus | null;\n resumeToken?: number;\n suppressApprovalPause?: boolean;\n }\n): {\n message: ReplayMessage | undefined;\n status: RunStreamStatus;\n} {\n const [message, setMessage] = useState<ReplayMessage>();\n const [status, setStatus] = useState<RunStreamStatus>('streaming');\n const recordStatus = options?.recordStatus;\n const resumeToken = options?.resumeToken ?? 0;\n const decidedApprovalsRef = useRef(options?.decidedApprovals ?? {});\n decidedApprovalsRef.current = options?.decidedApprovals ?? {};\n // Read via ref so clearing the post-decide suppress window does not abort a\n // healthy reconnect the way resetting resumeToken would.\n const suppressApprovalPauseRef = useRef(options?.suppressApprovalPause ?? false);\n suppressApprovalPauseRef.current = options?.suppressApprovalPause ?? false;\n const streamApiRef = useRef(streamApi);\n const messageRef = useRef(message);\n messageRef.current = message;\n\n useEffect(() => {\n const streamChanged = streamApiRef.current !== streamApi;\n streamApiRef.current = streamApi;\n\n if (!streamApi) {\n setMessage(undefined);\n setStatus('unavailable');\n\n return;\n }\n\n const abortController = new AbortController();\n // Approval resume and record-status updates restart this effect (they bump\n // resumeToken / recordStatus) but the stream identity is unchanged. Keep\n // the in-memory replay while consumeOnce rebuilds from startIndex=0.\n let latestMessage: ReplayMessage | undefined = streamChanged ? undefined : messageRef.current;\n // While the same stream rebuilds from startIndex=0 the partial replay has\n // fewer parts than what is on screen; keep showing the previous message\n // until the rebuild catches up so cards do not blink out and back.\n const rebuildFloor = streamChanged ? 0 : (latestMessage?.parts.length ?? 0);\n\n if (streamChanged) {\n setMessage(undefined);\n } else if (latestMessage && (recordStatus === 'running' || isTerminalRunStatus(recordStatus))) {\n // Pending data-mutation-approval parts are stale once the run record\n // says execution has resumed. Chat and run UIs treat those parts as\n // still awaiting approval until consumeOnce rebuilds from startIndex=0.\n const nextMessage = settlePendingMutationApprovals(latestMessage, decidedApprovalsRef.current);\n\n if (nextMessage !== latestMessage) {\n latestMessage = nextMessage;\n setMessage(nextMessage);\n }\n }\n\n setStatus('streaming');\n\n // The chat stream URL already carries a workflowRunId query parameter.\n const startIndexSeparator = streamApi.includes('?') ? '&' : '?';\n\n const consumeOnce = async (): Promise<ConsumeOnceResult> => {\n const response = await fetch(`${streamApi}${startIndexSeparator}startIndex=0`, {\n credentials: 'include',\n signal: abortController.signal,\n });\n\n if (response.status === 404) {\n return 'unavailable';\n }\n\n if (!response.ok || !response.body) {\n throw new Error(`Failed to fetch the run stream (status ${response.status.toString()})`);\n }\n\n let sawFinish = false;\n const parsedStream = parseJsonEventStream({ schema: uiMessageChunkSchema, stream: response.body });\n type ParsedChunk = typeof parsedStream extends ReadableStream<infer T> ? T : never;\n\n const chunkStream = parsedStream.pipeThrough(\n new TransformStream<ParsedChunk, UIMessageChunk>({\n transform: (result, controller) => {\n if (!result.success) {\n throw result.error;\n }\n\n if (result.value.type === 'finish') {\n sawFinish = true;\n }\n\n controller.enqueue(result.value);\n },\n })\n );\n\n const messageStream = readUIMessageStream<ReplayMessage>({\n onError: (error) => {\n // Unmounting aborts the fetch on purpose; only a real chunk error is worth a log.\n if (abortController.signal.aborted) {\n return;\n }\n\n console.error('Run stream chunk error', error);\n },\n stream: chunkStream,\n });\n\n // Rendering after every chunk makes long replays (thousands of chunks,\n // e.g. large streamed tool inputs) re-render the whole message tree per\n // chunk and freeze the page. Throttle to one trailing update per\n // interval, with a guaranteed final flush after the stream ends.\n let throttleTimer: number | null = null;\n\n let caughtUp = rebuildFloor === 0;\n const flushLatestMessage = (force = false): void => {\n if (abortController.signal.aborted || !latestMessage) {\n return;\n }\n\n if (!caughtUp) {\n caughtUp = force || latestMessage.parts.length >= rebuildFloor;\n\n if (!caughtUp) {\n return;\n }\n }\n\n setMessage({ ...latestMessage });\n };\n\n try {\n for await (const current of messageStream) {\n if (abortController.signal.aborted) {\n break;\n }\n\n latestMessage = current;\n\n if (throttleTimer === null) {\n throttleTimer = window.setTimeout(() => {\n throttleTimer = null;\n flushLatestMessage();\n }, REPLAY_RENDER_INTERVAL_MS);\n }\n }\n } finally {\n if (throttleTimer !== null) {\n window.clearTimeout(throttleTimer);\n throttleTimer = null;\n }\n\n flushLatestMessage(true);\n }\n\n return sawFinish ? 'finished' : 'incomplete';\n };\n\n const consume = async (): Promise<void> => {\n let attempt = 0;\n\n while (!abortController.signal.aborted) {\n if (attempt > 0) {\n await delay(STREAM_RETRY_DELAY_MS);\n }\n\n try {\n const result = await consumeOnce();\n\n if (abortController.signal.aborted) {\n return;\n }\n\n if (result === 'unavailable') {\n setStatus('unavailable');\n\n return;\n }\n\n // The stream route wraps every readable session with a finish chunk,\n // including sessions that close while the durable workflow continues.\n // Only the run record can confirm that the run itself finished.\n if (result === 'finished' && isTerminalRunStatus(recordStatus)) {\n setStatus('finished');\n\n return;\n }\n\n // The run record is authoritative once it reaches a terminal status.\n // Without this, a lingering post-decide suppress flag would reconnect\n // forever when the replay never emits a finish chunk.\n if (isTerminalRunStatus(recordStatus)) {\n setStatus('finished');\n\n return;\n }\n\n // Workflow hooks close the readable without a finish chunk while the\n // run is suspended on a mutation approval. Pause instead of treating\n // that as an error or a perpetual \"Running...\" state.\n if (\n shouldPauseStreamForApproval({\n latestMessage,\n recordStatus,\n suppressApprovalPause: suppressApprovalPauseRef.current,\n })\n ) {\n setStatus('paused');\n\n return;\n }\n\n // Keep reconnecting while the run is active, or right after a local\n // approval decision while the workflow is still waking up.\n const shouldKeepRetrying = recordStatus === 'running' || suppressApprovalPauseRef.current;\n\n if (!shouldKeepRetrying && attempt >= MAX_STREAM_ATTEMPTS - 1) {\n setStatus('error');\n\n return;\n }\n } catch (error) {\n if (abortController.signal.aborted || isAbortError(error)) {\n return;\n }\n\n console.error('Run stream error', error);\n\n if (isTerminalRunStatus(recordStatus)) {\n setStatus('finished');\n\n return;\n }\n\n const shouldKeepRetrying = recordStatus === 'running' || suppressApprovalPauseRef.current;\n\n if (!shouldKeepRetrying && attempt >= MAX_STREAM_ATTEMPTS - 1) {\n setStatus('error');\n\n return;\n }\n }\n\n attempt += 1;\n }\n };\n\n const loadTimeout = window.setTimeout(() => {\n void consume();\n }, 0);\n\n return () => {\n window.clearTimeout(loadTimeout);\n abortController.abort('Run replay unmounted');\n };\n }, [recordStatus, resumeToken, streamApi]);\n\n return { message, status };\n}\n\nexport function toMutationApprovalPartData(approval: AutomationApproval): ReplayDataParts['mutation-approval'] {\n return {\n affectedCount: approval.affectedCount,\n approvalId: approval.id,\n decidedBy: approval.decidedBy ?? undefined,\n operationsSummary: approval.operationsSummary,\n reason: approval.reason ?? undefined,\n status: approval.status,\n };\n}\n\n/**\n * Models sometimes wrap json-render patch lines in a Markdown code fence\n * despite instructions. The patch lines are consumed by the spec pipeline,\n * leaving stray fence-only text parts behind; those are never meaningful.\n */\nexport function isCodeFenceOnlyText(text: string): boolean {\n const trimmed = text.trim();\n\n if (!trimmed) {\n return false;\n }\n\n return trimmed.split('\\n').every((line) => /^`{3,}[\\w-]*$/.test(line.trim()));\n}\n\n/**\n * A message the user sent while the agent was working, shown inside the\n * reply at the point the agent received it.\n */\nfunction MidTurnMessagePart({\n attachments,\n text,\n}: {\n attachments: ReplayDataParts['mid-turn-message']['attachments'];\n text: string;\n}): JSX.Element {\n return (\n <div className=\"fk:ml-auto fk:flex fk:w-fit fk:max-w-[70%] fk:flex-col fk:items-end fk:gap-1\">\n <MessageAttachments attachments={attachments} />\n {text.trim() ? (\n <div className=\"fk:whitespace-pre-wrap fk:rounded-xl fk:bg-muted fk:dark:bg-white/20 fk:px-3.5 fk:py-2 fk:text-base fk:corner-squircle\">\n {text}\n </div>\n ) : null}\n <span className=\"fk:inline-flex fk:items-center fk:gap-1 fk:text-xs fk:text-muted-foreground\">\n <CornerDownRightIcon className=\"fk:size-3 fk:shrink-0\" />\n Added while the agent was working\n </span>\n </div>\n );\n}\n\nexport function MessagePart({\n api,\n part,\n partIndex,\n parts,\n}: {\n api: ReturnType<typeof createApiClient>;\n part: ReplayMessagePart;\n partIndex: number;\n parts: ReplayMessagePart[];\n}): JSX.Element | null {\n // Reasoning, step markers, in-flight tool calls, and Jev-cleared plugin\n // calls only feed the transient status line; nothing to show here.\n if (isHiddenReplayPart(part)) {\n return null;\n }\n\n // A rolling-status call that is not hidden has failed.\n if (isRollingStatusPartType(part.type)) {\n const error = getRollingStatusError(part);\n\n return error ? <ToolErrorLine message={error} /> : null;\n }\n\n if (part.type === 'text') {\n const isStrayFence =\n isCodeFenceOnlyText(part.text) && parts.some((otherPart) => otherPart.type === JSON_RENDER_SPEC_PART_TYPE);\n\n return isStrayFence ? null : <TextPart part={part} />;\n }\n\n if (part.type === 'data-generating-files') {\n return <GenerateFilesPart message={getPartData<ReplayDataParts['generating-files']>(part)} />;\n }\n\n if (part.type === 'data-run-artifact') {\n return <RunArtifactPart api={api} message={getPartData<ReplayDataParts['run-artifact']>(part)} />;\n }\n\n if (part.type === 'data-tool-delivery') {\n return <ToolDeliveryPart message={getPartData<ReplayDataParts['tool-delivery']>(part)} />;\n }\n\n if (part.type === 'data-run-summary') {\n return <RunSummaryPart message={getPartData<ReplayDataParts['run-summary']>(part)} />;\n }\n\n if (part.type === 'data-subtask') {\n const data = getPartData<ReplayDataParts['subtask']>(part);\n const message =\n data.status === 'running'\n ? `Running \"${data.title}\"`\n : data.status === 'done'\n ? `Completed \"${data.title}\"${typeof data.stepsUsed === 'number' ? ` in ${data.stepsUsed.toString()} steps` : ''}`\n : `\"${data.title}\" failed: ${data.error?.message ?? 'unknown error'}`;\n\n return (\n <ToolMessage>\n <ToolHeader>\n <BotIcon className=\"fk:size-3.5\" />\n Subtask\n </ToolHeader>\n <div className=\"fk:relative fk:min-h-5 fk:pl-6\">\n <span className=\"fk:absolute fk:left-0 fk:top-0\">\n <StatusIcon isError={data.status === 'error'} loading={data.status === 'running'} />\n </span>\n <span className=\"fk:text-xs\">{message}</span>\n {data.resultPreview ? (\n <p className=\"fk:mt-1 fk:text-xs fk:text-muted-foreground\">{data.resultPreview}</p>\n ) : null}\n </div>\n </ToolMessage>\n );\n }\n\n if (part.type === 'data-mid-turn-message') {\n const data = getPartData<ReplayDataParts['mid-turn-message']>(part);\n\n // A monitor, not the user, sent it while the agent was working.\n if (data.monitorEvent) {\n return <MonitorEventCard data={data.monitorEvent} />;\n }\n\n return <MidTurnMessagePart attachments={data.attachments} text={data.text} />;\n }\n\n if (part.type === 'data-context-compaction') {\n const data = getPartData<ReplayDataParts['context-compaction']>(part);\n\n return (\n <p className=\"fk:text-xs fk:text-muted-foreground\">\n Earlier messages ({data.summarizedMessageCount.toString()}) were summarized to keep this conversation within the\n model&apos;s context. Details may need to be re-fetched.\n </p>\n );\n }\n\n if (part.type === 'data-plugin-connection') {\n const data = getPartData<ReplayDataParts['plugin-connection']>(part);\n\n return <PluginConnectCard connectionId={data.connectionId} pluginId={data.pluginId} />;\n }\n\n // Rendered by the chat page under the latest reply, where the composer is in reach.\n if (part.type === 'data-suggested-prompt') {\n return null;\n }\n\n if (part.type === 'data-turn-error') {\n const data = getPartData<ReplayDataParts['turn-error']>(part);\n\n return (\n <ToolMessage className=\"fk:border-red-700/40\">\n <ToolHeader>\n <XCircleIcon className=\"fk:size-3.5 fk:text-red-700\" />\n <span>Turn failed</span>\n </ToolHeader>\n <p className=\"fk:whitespace-pre-wrap fk:text-xs\">{data.message}</p>\n </ToolMessage>\n );\n }\n\n if (part.type === 'data-mutation-approval') {\n const approval = getPartData<ReplayDataParts['mutation-approval']>(part);\n\n return isJevAutoApproved(approval) ? (\n <AutoApprovedCallPart message={approval} />\n ) : (\n <MutationApprovalPart api={api} message={approval} />\n );\n }\n\n if (part.type === 'data-user-question') {\n return <UserQuestionPart data={getPartData<ReplayDataParts['user-question']>(part)} />;\n }\n\n if (part.type === 'data-bulk-graphql-action') {\n return <BulkGraphqlActionPart message={getPartData<ReplayDataParts['bulk-graphql-action']>(part)} />;\n }\n\n if (part.type === JSON_RENDER_SPEC_PART_TYPE) {\n const nextSpecPart = parts.slice(partIndex + 1).find((nextPart) => nextPart.type === JSON_RENDER_SPEC_PART_TYPE);\n\n if (nextSpecPart) {\n return null;\n }\n\n return <RunSpecPart parts={parts} />;\n }\n\n if (part.type.startsWith('data-')) {\n return <UnknownDataPart part={part} />;\n }\n\n return null;\n}\n\nfunction TextPart({ part }: { part: TextUIPart }): JSX.Element {\n return (\n <MessageResponse\n className=\"fk:min-w-0 fk:max-w-full fk:overflow-x-auto fk:text-base fk:leading-relaxed fk:text-foreground\"\n isAnimating={part.state === 'streaming'}\n >\n {part.text}\n </MessageResponse>\n );\n}\n\n/** Compact inline error row for a failed tool call or turn. */\nexport function ToolErrorLine({ message }: { message: string }): JSX.Element {\n return (\n <div className=\"fk:flex fk:items-start fk:gap-2 fk:rounded-xl fk:border fk:border-red-700/40 fk:bg-destructive/5 fk:px-3.5 fk:py-3 fk:text-sm fk:corner-squircle\">\n <XCircleIcon className=\"fk:mt-0.5 fk:size-3.5 fk:shrink-0 fk:text-red-700\" />\n <span className=\"fk:whitespace-pre-wrap fk:text-xs\">{message}</span>\n </div>\n );\n}\n\n/** Period of the `fk:shimmer-duration-1000` utility, used to keep the phase across label swaps. */\nconst SHIMMER_PERIOD_MS = 1000;\n\n/**\n * Single-line shimmering status indicator that swaps its text with a rolling\n * transition: the previous label exits through the top while the new one\n * enters from the bottom of an overflow-hidden line.\n */\nexport function RollingStatusText({ text }: { text: string }): JSX.Element {\n // The shimmer utility restarts its animation whenever the keyed label span\n // remounts. A negative delay anchored to one origin resumes it in phase.\n const phaseOriginRef = useRef<number>(typeof performance === 'undefined' ? 0 : performance.now());\n const getPhaseDelayMs = (): number => {\n const now = typeof performance === 'undefined' ? 0 : performance.now();\n\n return -((now - phaseOriginRef.current) % SHIMMER_PERIOD_MS);\n };\n const [transition, setTransition] = useState<{\n current: string;\n currentDelayMs: number;\n key: number;\n previous: string | null;\n previousDelayMs: number;\n }>({\n current: text,\n currentDelayMs: 0,\n key: 0,\n previous: null,\n previousDelayMs: 0,\n });\n\n useEffect(() => {\n setTransition((state) => {\n if (state.current === text) {\n return state;\n }\n\n return {\n current: text,\n currentDelayMs: getPhaseDelayMs(),\n key: state.key + 1,\n previous: state.current,\n previousDelayMs: state.currentDelayMs,\n };\n });\n }, [text]);\n\n // The shimmer utility (background-clip: text) sets `animation` itself, so\n // the roll transforms live on wrapper spans to avoid overriding it.\n return (\n <span className=\"fk:relative fk:block fk:h-5 fk:min-w-0 fk:flex-1 fk:overflow-hidden\">\n {transition.previous ? (\n <span\n aria-hidden\n className=\"fk:absolute fk:inset-x-0 fk:top-0 fk:block fk:animate-roll-up-out\"\n key={`previous-${transition.key.toString()}`}\n >\n <span\n className=\"fk:block fk:truncate fk:shimmer fk:shimmer-duration-1000\"\n style={{ animationDelay: `${transition.previousDelayMs.toString()}ms` }}\n >\n {transition.previous}\n </span>\n </span>\n ) : null}\n <span\n className={transition.previous ? 'fk:block fk:animate-roll-up-in' : 'fk:block'}\n key={`current-${transition.key.toString()}`}\n role=\"status\"\n >\n <span\n className=\"fk:block fk:truncate fk:shimmer fk:shimmer-duration-1000\"\n style={{ animationDelay: `${transition.currentDelayMs.toString()}ms` }}\n >\n {transition.current}\n </span>\n </span>\n </span>\n );\n}\n\nconst STATUS_LABEL_MIN_DWELL_MS = 1000;\n\n/**\n * Holds each displayed label for at least `minDwellMs` so a burst of label\n * changes (e.g. a reasoning heading followed by its first sentence) still\n * reads as distinct rolls. The latest pending label wins once the window\n * elapses; A → B → A inside the window collapses to no change.\n */\nexport function useStableStatusLabel(label: string, options?: { minDwellMs?: number }): string {\n const minDwellMs = options?.minDwellMs ?? STATUS_LABEL_MIN_DWELL_MS;\n const [displayed, setDisplayed] = useState(label);\n const shownAtRef = useRef(Date.now());\n const pendingRef = useRef(label);\n pendingRef.current = label;\n\n useEffect(() => {\n if (label === displayed) {\n return;\n }\n\n const wait = Math.max(0, minDwellMs - (Date.now() - shownAtRef.current));\n const timeoutId = window.setTimeout(() => {\n shownAtRef.current = Date.now();\n setDisplayed(pendingRef.current);\n }, wait);\n\n return () => {\n window.clearTimeout(timeoutId);\n };\n }, [displayed, label, minDwellMs]);\n\n return displayed;\n}\n\nexport interface TurnStatus {\n label: string;\n visible: boolean;\n}\n\n/**\n * The one transient status slot of an in-flight turn or run. It keeps its\n * height for the whole turn and only fades while response text streams, so\n * the conversation never shifts when the label appears or disappears.\n * Parents unmount it once the turn reached a terminal state.\n */\nexport function TurnStatusLine({ label, visible }: TurnStatus): JSX.Element {\n const stableLabel = useStableStatusLabel(label);\n\n return (\n <div\n aria-hidden={!visible}\n className={`fk:flex fk:h-9 fk:items-center fk:text-sm fk:text-muted-foreground fk:transition-[opacity,visibility] fk:duration-200 ${\n visible ? 'fk:visible fk:opacity-100' : 'fk:invisible fk:opacity-0'\n }`}\n >\n <RollingStatusText text={stableLabel} />\n </div>\n );\n}\n\nexport function ToolMessage({\n children,\n className = '',\n}: {\n children: React.ReactNode;\n className?: string;\n}): JSX.Element {\n return (\n <div\n className={`fk:min-w-0 fk:max-w-full fk:overflow-x-auto fk:rounded-xl fk:border fk:border-border fk:bg-background fk:px-3.5 fk:py-3 fk:text-sm ${className} fk:corner-squircle`}\n >\n {children}\n </div>\n );\n}\n\nexport function ToolHeader({ children }: { children: React.ReactNode }): JSX.Element {\n return <div className=\"fk:flex fk:items-center fk:gap-2 fk:font-medium fk:text-muted-foreground\">{children}</div>;\n}\n\nfunction StatusIcon({ isError, loading }: { isError?: boolean; loading?: boolean }): JSX.Element {\n if (loading) {\n return <LoaderCircle className=\"fk:size-4 fk:animate-spin\" />;\n }\n\n if (isError) {\n return <XIcon className=\"fk:size-4 fk:text-red-700\" />;\n }\n\n return <CheckIcon className=\"fk:size-4\" />;\n}\n\nexport function StatusToolPart({\n error,\n icon,\n loading,\n message,\n title,\n}: {\n error?: string;\n icon: React.ReactNode;\n loading: boolean;\n message: string;\n title: string;\n}): JSX.Element {\n return (\n <ToolMessage>\n <ToolHeader>\n {icon}\n {title}\n </ToolHeader>\n <div className=\"fk:relative fk:min-h-5 fk:pl-6\">\n <span className=\"fk:absolute fk:left-0 fk:top-0\">\n <StatusIcon isError={Boolean(error)} loading={loading} />\n </span>\n <span className=\"fk:text-xs\">{message}</span>\n </div>\n </ToolMessage>\n );\n}\n\nfunction GenerateFilesPart({ message }: { message: ReplayDataParts['generating-files'] }): JSX.Element {\n const lastInProgress = ['error', 'uploading', 'generating'].includes(message.status);\n const generated = lastInProgress ? message.paths.slice(0, message.paths.length - 1) : message.paths;\n const generating = lastInProgress ? (message.paths[message.paths.length - 1] ?? '') : null;\n\n return (\n <ToolMessage>\n <ToolHeader>\n <CloudUploadIcon className=\"fk:size-3.5\" />\n <span>{message.status === 'done' ? 'Uploaded files' : 'Generating files'}</span>\n </ToolHeader>\n <div className=\"fk:space-y-1 fk:text-sm\">\n {generated.map((path, index) => (\n <div className=\"fk:flex fk:items-center fk:gap-2\" key={`${path}-${index.toString()}`}>\n <CheckIcon className=\"fk:size-4\" />\n <span className=\"fk:whitespace-pre-wrap\">{path}</span>\n </div>\n ))}\n {typeof generating === 'string' ? (\n <div className=\"fk:flex fk:items-center fk:gap-2\">\n <StatusIcon isError={message.status === 'error'} loading={message.status !== 'error'} />\n <span>{message.status === 'error' ? (message.error?.message ?? generating) : generating}</span>\n </div>\n ) : null}\n </div>\n </ToolMessage>\n );\n}\n\nexport function RunArtifactPart({\n api,\n message,\n}: {\n api: ReturnType<typeof createApiClient>;\n message: ReplayDataParts['run-artifact'];\n}): JSX.Element {\n const isDone = message.status === 'done' && message.artifactId;\n const previewUrl = isDone ? api.getArtifactUrl(message.artifactId ?? '') : '';\n const downloadUrl = isDone ? api.getArtifactUrl(message.artifactId ?? '', { download: true }) : '';\n const bytes = formatBytes(message.sizeBytes);\n\n return (\n <ToolMessage>\n <ToolHeader>\n <FileTextIcon className=\"fk:size-3.5\" />\n {message.kind === 'csv' || message.kind === 'json'\n ? 'Exported file'\n : message.status === 'done'\n ? 'Published artifact'\n : 'Publishing artifact'}\n </ToolHeader>\n <div className=\"fk:relative fk:min-h-5 fk:pl-6\">\n <span className=\"fk:absolute fk:left-0 fk:top-0\">\n <StatusIcon isError={message.status === 'error'} loading={message.status === 'uploading'} />\n </span>\n <div className=\"fk:min-w-0 fk:space-y-2\">\n <div className=\"fk:min-w-0\">\n <div className=\"fk:truncate fk:font-medium\">{message.filename}</div>\n <div className=\"fk:text-xs fk:text-muted-foreground\">\n {message.status === 'uploading' && 'Uploading to artifacts'}\n {message.status === 'done' && [getArtifactLabel(message), bytes].filter(Boolean).join(' · ')}\n {message.status === 'error' && (message.error?.message ?? 'Failed to publish artifact')}\n </div>\n </div>\n {isDone ? (\n <div className=\"fk:flex fk:flex-wrap fk:gap-2\">\n {/* Browsers download a CSV instead of showing it, so only Download makes sense. */}\n {message.kind === 'csv' ? null : (\n <Button asChild size=\"sm\" variant=\"outline\">\n <a href={previewUrl} rel=\"noreferrer\" target=\"_blank\">\n Preview\n </a>\n </Button>\n )}\n <Button asChild size=\"sm\" variant=\"outline\">\n <a href={downloadUrl}>\n <DownloadIcon className=\"fk:size-3\" />\n Download\n </a>\n </Button>\n {message.url ? (\n <Button asChild size=\"sm\" variant=\"outline\">\n <a href={message.url} rel=\"noreferrer\" target=\"_blank\">\n <LinkIcon className=\"fk:size-3\" />\n Permanent link\n </a>\n </Button>\n ) : null}\n </div>\n ) : null}\n </div>\n </div>\n </ToolMessage>\n );\n}\n\nfunction ToolDeliveryPart({ message }: { message: ReplayDataParts['tool-delivery'] }): JSX.Element {\n const providerLabel = message.provider === 'slack' ? 'Slack' : 'Microsoft Teams';\n const icon =\n message.provider === 'slack' ? <MessageSquareIcon className=\"fk:size-3.5\" /> : <SendIcon className=\"fk:size-3.5\" />;\n\n return (\n <StatusToolPart\n error={message.error?.message}\n icon={icon}\n loading={message.status === 'loading'}\n message={\n message.status === 'error'\n ? (message.error?.message ?? `Failed to send result to ${message.channelName}`)\n : `${message.status === 'done' ? 'Sent' : 'Sending'} result to ${message.channelName}`\n }\n title={`${providerLabel} Delivery`}\n />\n );\n}\n\nfunction RunSummaryPart({ message }: { message: ReplayDataParts['run-summary'] }): JSX.Element {\n const icon =\n message.status === 'success' ? (\n <CheckCircle2Icon className=\"fk:size-3.5 fk:text-green-700\" />\n ) : message.status === 'skipped' ? (\n <CircleSlashIcon className=\"fk:size-3.5\" />\n ) : (\n <XCircleIcon className=\"fk:size-3.5 fk:text-red-700\" />\n );\n const title =\n message.status === 'success' ? 'Run completed' : message.status === 'skipped' ? 'Run skipped' : 'Run failed';\n\n return (\n <ToolMessage className={message.status === 'failed' ? 'fk:border-red-700/40' : 'fk:border-green-700/40'}>\n <ToolHeader>\n {icon}\n <span>{title}</span>\n </ToolHeader>\n {message.status === 'failed' ? <p className=\"fk:whitespace-pre-wrap fk:text-xs\">{message.summary}</p> : null}\n </ToolMessage>\n );\n}\n\ninterface ApprovalResponse {\n approval: AutomationApproval;\n}\n\nexport function MutationApprovalPart({\n api,\n message,\n}: {\n api: ReturnType<typeof createApiClient>;\n message: ReplayDataParts['mutation-approval'];\n}): JSX.Element {\n const { projectId } = useProjectApi();\n const replayActions = useContext(RunReplayActionsContext);\n const isChat = useContext(ChatApprovalContext);\n const previousApprovalStatusRef = useRef<AutomationApproval['status'] | undefined>(undefined);\n // Poll while the stream still says pending so a decision from the Approvals\n // inbox / another tab updates this card. RunReplay refreshes the run record\n // on the same interval but does not touch this approval fetch.\n const { data, error, isValidating, mutate } = useSWR<ApprovalResponse>(\n projectId ? paths(projectId).approval(message.approvalId) : null,\n fetcher,\n {\n refreshInterval: (latestData) => {\n if (message.status !== 'pending') {\n return 0;\n }\n\n if (latestData?.approval?.status && latestData.approval.status !== 'pending') {\n return 0;\n }\n\n return STREAM_RETRY_DELAY_MS;\n },\n }\n );\n const approvalStatus = data?.approval?.status;\n const isPending = (approvalStatus ?? message.status) === 'pending';\n const approvedSchemaChange = data?.approval?.kind === 'schema' && data.approval.status === 'approved';\n\n // A schema change approved here or elsewhere deploys in the background:\n // watch it so the navbar and Desk pick up the new entities without a reload.\n useEffect(() => {\n if (!approvedSchemaChange || !projectId) {\n return;\n }\n\n watchSchemaDeployment({\n approvalId: message.approvalId,\n approvalUrl: paths(projectId).approval(message.approvalId),\n projectId,\n });\n }, [approvedSchemaChange, message.approvalId, projectId]);\n\n // The stream part changes when the proposal is decided or executed; refresh\n // the full approval (preview, result, error) from the API when that happens.\n useEffect(() => {\n void mutate();\n }, [message.status, mutate]);\n\n // When polling discovers an external decide while the replay part is still\n // pending, reconnect the stream the same way a local decide does. Only a\n // pending -> decided transition observed while mounted counts: a card that\n // mounts with an already-decided approval (e.g. right after a reconnect\n // remounted it) must not trigger another reconnect, or it would loop.\n useEffect(() => {\n const previousStatus = previousApprovalStatusRef.current;\n previousApprovalStatusRef.current = approvalStatus;\n\n if (message.status !== 'pending' || !approvalStatus || approvalStatus === 'pending') {\n return;\n }\n\n if (previousStatus !== 'pending') {\n return;\n }\n\n replayActions?.onApprovalDecided(data?.approval?.id ?? message.approvalId, approvalStatus);\n }, [approvalStatus, data?.approval?.id, message.approvalId, message.status, replayActions]);\n\n function handleDecided(nextApproval: AutomationApproval): void {\n // Keep the external-decide effect from bumping resumeToken again after a\n // local decide already reconnected the stream.\n if (nextApproval.status !== 'pending') {\n previousApprovalStatusRef.current = nextApproval.status;\n }\n\n void mutate();\n // Revalidate the run record and reconnect the workflow stream so the page\n // reflects resumed execution instead of a stale awaiting_approval/error state.\n replayActions?.onApprovalDecided(nextApproval.id, nextApproval.status);\n }\n\n let body: JSX.Element;\n\n if (data?.approval) {\n body = (\n <ApprovalCard\n api={api}\n approval={data.approval}\n chat={isChat}\n key={data.approval.status}\n onDecided={handleDecided}\n />\n );\n } else if (error && !isValidating) {\n const detail = error instanceof Error && error.message ? error.message : 'Request failed';\n\n body = (\n <div className=\"fk:space-y-2\">\n <p className=\"fk:text-xs fk:text-destructive\">\n Failed to load proposal {message.operationsSummary}: {detail}\n </p>\n <Button size=\"sm\" variant=\"outline\" onClick={() => void mutate()}>\n Retry\n </Button>\n </div>\n );\n } else {\n body = (\n <div className=\"fk:flex fk:items-center fk:gap-2 fk:text-xs fk:text-muted-foreground\">\n <LoaderCircle className=\"fk:size-3.5 fk:animate-spin\" />\n <span>Loading proposal {message.operationsSummary}...</span>\n </div>\n );\n }\n\n return (\n <ToolMessage>\n <ToolHeader>\n {isChat ? <ShieldIcon className=\"fk:size-3.5\" /> : <DatabaseZapIcon className=\"fk:size-3.5\" />}\n {isChat ? 'Approval request' : 'Mutation approval'}\n {isPending ? <LoaderCircle className=\"fk:ml-1 fk:size-3.5 fk:animate-spin\" /> : null}\n </ToolHeader>\n <div className=\"fk:mt-2\">{body}</div>\n {message.status === 'error' && message.error ? (\n <p className=\"fk:mt-2 fk:text-xs fk:text-destructive\">{message.error.message}</p>\n ) : null}\n </ToolMessage>\n );\n}\n\nfunction UserQuestionPart({ data }: { data: ReplayDataParts['user-question'] }): JSX.Element {\n const replayActions = useContext(RunReplayActionsContext);\n const plural = data.questions.length > 1;\n\n return (\n <ToolMessage>\n <ToolHeader>\n <MessageCircleQuestionIcon className=\"fk:size-3.5\" />\n {data.status === 'pending' ? (plural ? 'The agent has questions' : 'The agent has a question') : plural ? 'Questions' : 'Question'}\n </ToolHeader>\n <div className=\"fk:mt-3\">\n {/* Keyed by status so a settled stream part replaces the card's local state. */}\n <QuestionCard answer={replayActions?.answerQuestion} data={data} key={data.status} />\n </div>\n </ToolMessage>\n );\n}\n\n/** Only reached for a Jev-cleared call that failed; successful ones are hidden. */\nfunction AutoApprovedCallPart({ message }: { message: ReplayDataParts['mutation-approval'] }): JSX.Element {\n const summary = message.operationsSummary.replace(/^Call /, '');\n\n return (\n <StatusToolPart\n error={message.status === 'error' ? (message.error?.message ?? 'The call failed.') : undefined}\n icon={<ShieldCheckIcon className=\"fk:size-3.5\" />}\n loading={false}\n message={\n message.status === 'error'\n ? `${summary}: ${message.error?.message ?? 'The call failed.'}`\n : `${summary} · Auto-approved by Jev`\n }\n title=\"Plugin call\"\n />\n );\n}\n\nfunction BulkGraphqlActionPart({ message }: { message: ReplayDataParts['bulk-graphql-action'] }): JSX.Element {\n const progress = [\n typeof message.processedItems === 'number' ? `${message.processedItems.toString()} processed` : '',\n typeof message.changedItems === 'number' ? `${message.changedItems.toString()} changed` : '',\n typeof message.failedItems === 'number' ? `${message.failedItems.toString()} failed` : '',\n typeof message.totalItems === 'number' ? `${message.totalItems.toString()} total` : '',\n ].filter(Boolean);\n\n return (\n <StatusToolPart\n error={message.error?.message}\n icon={<DatabaseZapIcon className=\"fk:size-3.5\" />}\n loading={message.status === 'loading' || message.status === 'running'}\n message={\n message.status === 'error'\n ? (message.error?.message ?? `Failed bulk ${message.operationName}`)\n : `${message.status === 'done' ? 'Completed' : 'Running'} ${message.operationName}${\n progress.length > 0 ? ` (${progress.join(', ')})` : ''\n }`\n }\n title=\"Bulk GraphQL action\"\n />\n );\n}\n\nfunction UnknownDataPart({ part }: { part: ReplayMessagePart }): JSX.Element {\n return (\n <ToolMessage className=\"fk:bg-muted/30\">\n <ToolHeader>\n <CheckCircle2Icon className=\"fk:size-3.5\" />\n {part.type.replace(/^data-/, '').replaceAll('-', ' ')}\n </ToolHeader>\n <p className=\"fk:text-xs fk:text-muted-foreground\">\n This run emitted a structured event that is not yet rendered by Studio.\n </p>\n </ToolMessage>\n );\n}\n\nfunction formatBytes(sizeBytes?: number): string {\n if (typeof sizeBytes !== 'number') {\n return '';\n }\n\n if (sizeBytes < 1024) {\n return `${sizeBytes.toString()} B`;\n }\n\n const kilobytes = sizeBytes / 1024;\n\n if (kilobytes < 1024) {\n return `${kilobytes.toFixed(1)} KB`;\n }\n\n return `${(kilobytes / 1024).toFixed(1)} MB`;\n}\n\nfunction getArtifactLabel(message: ReplayDataParts['run-artifact']): string {\n if (message.kind === 'pdf') {\n return 'PDF artifact';\n }\n\n if (message.kind === 'html') {\n return 'HTML artifact';\n }\n\n if (message.kind === 'csv') {\n return 'CSV file';\n }\n\n if (message.kind === 'json') {\n return 'JSON file';\n }\n\n return 'Artifact';\n}\n\n"]}