@arbidocs/blocks 0.5.125 → 0.5.126
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ClippingMediaViewer-ZFEX5A3U.cjs → ClippingMediaViewer-47BAXNLO.cjs} +10 -11
- package/dist/ClippingMediaViewer-47BAXNLO.cjs.map +1 -0
- package/dist/{ClippingPdfViewer-3LRTEPHV.cjs → ClippingPdfViewer-D5BYHEAH.cjs} +16 -14
- package/dist/ClippingPdfViewer-D5BYHEAH.cjs.map +1 -0
- package/dist/{ConnectedCallDock-XJOYVVAH.cjs → ConnectedCallDock-733O5M36.cjs} +11 -11
- package/dist/{ConnectedCallDock-XJOYVVAH.cjs.map → ConnectedCallDock-733O5M36.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-CUDYAPQK.cjs → ConnectedCallRoom-TAUGSRGV.cjs} +11 -11
- package/dist/{ConnectedCallRoom-CUDYAPQK.cjs.map → ConnectedCallRoom-TAUGSRGV.cjs.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-7QQ55JIO.cjs → ConnectedNativeDocxComparison-HDE522YC.cjs} +12 -12
- package/dist/{ConnectedNativeDocxComparison-7QQ55JIO.cjs.map → ConnectedNativeDocxComparison-HDE522YC.cjs.map} +1 -1
- package/dist/{ConnectedPresentation-L32JPRFI.cjs → ConnectedPresentation-SI3L77J4.cjs} +36 -37
- package/dist/ConnectedPresentation-SI3L77J4.cjs.map +1 -0
- package/dist/{ConnectedProductionSetDialog-4EAY6KAZ.cjs → ConnectedProductionSetDialog-LHB4VQWC.cjs} +3 -3
- package/dist/{ConnectedProductionSetDialog-4EAY6KAZ.cjs.map → ConnectedProductionSetDialog-LHB4VQWC.cjs.map} +1 -1
- package/dist/{ConnectedSlidesTab-P7GGNUTO.cjs → ConnectedSlidesTab-JSPU6EY5.cjs} +39 -45
- package/dist/ConnectedSlidesTab-JSPU6EY5.cjs.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-7NJ3N52V.cjs → ConnectedStreamedWordArtifact-4FHPOAFZ.cjs} +12 -12
- package/dist/{ConnectedStreamedWordArtifact-7NJ3N52V.cjs.map → ConnectedStreamedWordArtifact-4FHPOAFZ.cjs.map} +1 -1
- package/dist/{DocumentReviewCard-BFPOFQXI.cjs → DocumentReviewCard-BDNXP3D4.cjs} +16 -16
- package/dist/{DocumentReviewCard-BFPOFQXI.cjs.map → DocumentReviewCard-BDNXP3D4.cjs.map} +1 -1
- package/dist/{FilesViewerDialog-MHUVEZ7M.cjs → FilesViewerDialog-WQRNSKWM.cjs} +32 -33
- package/dist/FilesViewerDialog-WQRNSKWM.cjs.map +1 -0
- package/dist/{NativeDocxEditor-SIRYPMBN.cjs → NativeDocxEditor-SUDULUN3.cjs} +6 -6
- package/dist/{NativeDocxEditor-SIRYPMBN.cjs.map → NativeDocxEditor-SUDULUN3.cjs.map} +1 -1
- package/dist/{SpotlightStrip-ED22UYTM.cjs → SpotlightStrip-QQ2WUI32.cjs} +28 -29
- package/dist/SpotlightStrip-QQ2WUI32.cjs.map +1 -0
- package/dist/{WorkspaceTableView-MIFYXV3G.cjs → WorkspaceTableView-3XYAV4BV.cjs} +8 -8
- package/dist/{WorkspaceTableView-MIFYXV3G.cjs.map → WorkspaceTableView-3XYAV4BV.cjs.map} +1 -1
- package/dist/agents/index.cjs +215 -215
- package/dist/ai-IEIR7SC2.cjs +4 -4
- package/dist/auth/index.cjs +1 -1
- package/dist/calls/index.cjs +4 -4
- package/dist/chat/index.cjs +6 -6
- package/dist/{chunk-ZZZITHGK.cjs → chunk-26SFI2BH.cjs} +16 -3
- package/dist/chunk-26SFI2BH.cjs.map +1 -0
- package/dist/{chunk-CQ2RJYE2.cjs → chunk-3IH55CDE.cjs} +3 -3
- package/dist/{chunk-CQ2RJYE2.cjs.map → chunk-3IH55CDE.cjs.map} +1 -1
- package/dist/{chunk-NG2EE7HR.cjs → chunk-463QM764.cjs} +3 -3
- package/dist/{chunk-NG2EE7HR.cjs.map → chunk-463QM764.cjs.map} +1 -1
- package/dist/{chunk-7RJZIPLE.cjs → chunk-4KEQ62SL.cjs} +33 -33
- package/dist/{chunk-7RJZIPLE.cjs.map → chunk-4KEQ62SL.cjs.map} +1 -1
- package/dist/{chunk-AS6QZETU.cjs → chunk-5QERK4PK.cjs} +35 -35
- package/dist/{chunk-AS6QZETU.cjs.map → chunk-5QERK4PK.cjs.map} +1 -1
- package/dist/{chunk-UA7HOLAZ.cjs → chunk-6B4CCDDB.cjs} +5 -5
- package/dist/{chunk-UA7HOLAZ.cjs.map → chunk-6B4CCDDB.cjs.map} +1 -1
- package/dist/{chunk-AISYXX4M.cjs → chunk-7NLO7ASW.cjs} +4 -4
- package/dist/{chunk-AISYXX4M.cjs.map → chunk-7NLO7ASW.cjs.map} +1 -1
- package/dist/{chunk-QIK7E6VF.cjs → chunk-7PN3YENO.cjs} +4 -4
- package/dist/{chunk-QIK7E6VF.cjs.map → chunk-7PN3YENO.cjs.map} +1 -1
- package/dist/{chunk-JY7UUZQG.cjs → chunk-7Q46YAX4.cjs} +74 -71
- package/dist/chunk-7Q46YAX4.cjs.map +1 -0
- package/dist/{chunk-J3FFSEKO.cjs → chunk-ADDQKZ5I.cjs} +4 -4
- package/dist/{chunk-J3FFSEKO.cjs.map → chunk-ADDQKZ5I.cjs.map} +1 -1
- package/dist/{chunk-L6HTZIBD.cjs → chunk-ALK3PUUB.cjs} +3 -3
- package/dist/{chunk-L6HTZIBD.cjs.map → chunk-ALK3PUUB.cjs.map} +1 -1
- package/dist/{chunk-3ZZZO4F7.cjs → chunk-BY3QA3S5.cjs} +9 -9
- package/dist/{chunk-3ZZZO4F7.cjs.map → chunk-BY3QA3S5.cjs.map} +1 -1
- package/dist/{chunk-BLIO3B7Z.cjs → chunk-CMPHJRVV.cjs} +3 -3
- package/dist/{chunk-BLIO3B7Z.cjs.map → chunk-CMPHJRVV.cjs.map} +1 -1
- package/dist/{chunk-3UP32FM3.cjs → chunk-CQQQIZU4.cjs} +5 -5
- package/dist/{chunk-3UP32FM3.cjs.map → chunk-CQQQIZU4.cjs.map} +1 -1
- package/dist/{chunk-YOEP3I4V.cjs → chunk-E3L5DB5F.cjs} +5 -5
- package/dist/{chunk-YOEP3I4V.cjs.map → chunk-E3L5DB5F.cjs.map} +1 -1
- package/dist/{chunk-6JMW3IJ2.cjs → chunk-FB3JXSQT.cjs} +103 -100
- package/dist/chunk-FB3JXSQT.cjs.map +1 -0
- package/dist/{chunk-YVO6Z5BS.cjs → chunk-FGOJBOZX.cjs} +10 -10
- package/dist/{chunk-YVO6Z5BS.cjs.map → chunk-FGOJBOZX.cjs.map} +1 -1
- package/dist/{chunk-2K6IMIVL.cjs → chunk-GNZAH6UI.cjs} +3 -3
- package/dist/{chunk-2K6IMIVL.cjs.map → chunk-GNZAH6UI.cjs.map} +1 -1
- package/dist/{chunk-B3R62764.cjs → chunk-I4X72WUT.cjs} +6 -6
- package/dist/{chunk-B3R62764.cjs.map → chunk-I4X72WUT.cjs.map} +1 -1
- package/dist/{chunk-ORNLCBNE.cjs → chunk-JVEDKKNO.cjs} +43 -4
- package/dist/chunk-JVEDKKNO.cjs.map +1 -0
- package/dist/{chunk-UUENH4BJ.cjs → chunk-KXIRVKCJ.cjs} +3 -3
- package/dist/{chunk-UUENH4BJ.cjs.map → chunk-KXIRVKCJ.cjs.map} +1 -1
- package/dist/{chunk-PWBRE7JA.cjs → chunk-LOB2ATS5.cjs} +24 -11
- package/dist/chunk-LOB2ATS5.cjs.map +1 -0
- package/dist/{chunk-ENOPKX7E.cjs → chunk-LXM5QXII.cjs} +3 -3
- package/dist/{chunk-ENOPKX7E.cjs.map → chunk-LXM5QXII.cjs.map} +1 -1
- package/dist/{chunk-PSB64T43.cjs → chunk-MLA2BJ2Y.cjs} +28 -28
- package/dist/{chunk-PSB64T43.cjs.map → chunk-MLA2BJ2Y.cjs.map} +1 -1
- package/dist/chunk-OALQGO5C.cjs +18 -0
- package/dist/{chunk-IRGRMJPP.cjs.map → chunk-OALQGO5C.cjs.map} +1 -1
- package/dist/{chunk-OGK377NL.cjs → chunk-OHHKBURG.cjs} +33 -33
- package/dist/{chunk-OGK377NL.cjs.map → chunk-OHHKBURG.cjs.map} +1 -1
- package/dist/{chunk-GAMRVB3I.cjs → chunk-Q6N5D3R5.cjs} +32 -7
- package/dist/chunk-Q6N5D3R5.cjs.map +1 -0
- package/dist/{chunk-4LP5MJGQ.cjs → chunk-QG2U2JGX.cjs} +4 -4
- package/dist/{chunk-4LP5MJGQ.cjs.map → chunk-QG2U2JGX.cjs.map} +1 -1
- package/dist/{chunk-MVXHTAJ4.cjs → chunk-QWVUBTW3.cjs} +9 -9
- package/dist/{chunk-MVXHTAJ4.cjs.map → chunk-QWVUBTW3.cjs.map} +1 -1
- package/dist/{chunk-OHWHYVKG.cjs → chunk-T73BHNQX.cjs} +3 -3
- package/dist/{chunk-OHWHYVKG.cjs.map → chunk-T73BHNQX.cjs.map} +1 -1
- package/dist/{chunk-ADPRIBSH.cjs → chunk-X7ALF4MP.cjs} +7 -7
- package/dist/{chunk-ADPRIBSH.cjs.map → chunk-X7ALF4MP.cjs.map} +1 -1
- package/dist/{chunk-PVJ5ODDB.cjs → chunk-XNB27POJ.cjs} +4 -4
- package/dist/{chunk-PVJ5ODDB.cjs.map → chunk-XNB27POJ.cjs.map} +1 -1
- package/dist/{chunk-TSFNLY3K.cjs → chunk-ZCU72Q76.cjs} +192 -166
- package/dist/chunk-ZCU72Q76.cjs.map +1 -0
- package/dist/connect/docx.cjs +16 -16
- package/dist/connect/index.cjs +1062 -1027
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/viewer.cjs +25 -26
- package/dist/connection/ai.d.ts +1 -0
- package/dist/connection/docx/ConnectedNativeDocxEditor.js +4 -5
- package/dist/connection/docx/ConnectedNativeDocxEditor.js.map +2 -2
- package/dist/connection/docx/save-native-version.d.ts +3 -0
- package/dist/connection/docx/save-native-version.js +19 -0
- package/dist/connection/docx/save-native-version.js.map +7 -0
- package/dist/connection/presentation/ClippingPdfViewer.js +8 -5
- package/dist/connection/presentation/ClippingPdfViewer.js.map +2 -2
- package/dist/connection/presentation/ConnectedSlidesTab.js +8 -13
- package/dist/connection/presentation/ConnectedSlidesTab.js.map +2 -2
- package/dist/connection/presentation/usePresentationController.js +24 -15
- package/dist/connection/presentation/usePresentationController.js.map +2 -2
- package/dist/connection/presentation/usePresentationFiles.d.ts +2 -1
- package/dist/connection/presentation/usePresentationFiles.js +15 -6
- package/dist/connection/presentation/usePresentationFiles.js.map +2 -2
- package/dist/connection/search/ConnectedSearchPage.d.ts +0 -11
- package/dist/connection/search/ConnectedSearchPage.js +3 -0
- package/dist/connection/search/ConnectedSearchPage.js.map +2 -2
- package/dist/connection/search/SearchResultRows.js +75 -43
- package/dist/connection/search/SearchResultRows.js.map +2 -2
- package/dist/connection/viewer/CleanViewControl.d.ts +3 -1
- package/dist/connection/viewer/CleanViewControl.js +5 -1
- package/dist/connection/viewer/CleanViewControl.js.map +2 -2
- package/dist/connection/viewer/ConnectedDocumentViewer.js +1 -1
- package/dist/connection/viewer/ConnectedDocumentViewer.js.map +2 -2
- package/dist/connection/viewer/useCleanView.d.ts +1 -1
- package/dist/connection/viewer/useCleanView.js +2 -2
- package/dist/connection/viewer/useCleanView.js.map +2 -2
- package/dist/connection/viewer/useViewedDocument.d.ts +1 -0
- package/dist/document-tools/index.cjs +20 -20
- package/dist/docx/NativeDocxEditor.d.ts +2 -1
- package/dist/docx/NativeDocxEditor.js +30 -5
- package/dist/docx/NativeDocxEditor.js.map +2 -2
- package/dist/docx/index.cjs +38 -38
- package/dist/embed/index.cjs +19 -19
- package/dist/facts/index.cjs +64 -64
- package/dist/files/index.cjs +223 -223
- package/dist/index.cjs +523 -523
- package/dist/presentation/ClipCaptureOverlay.js +14 -1
- package/dist/presentation/ClipCaptureOverlay.js.map +2 -2
- package/dist/presentation/ClipImage.js +7 -4
- package/dist/presentation/ClipImage.js.map +2 -2
- package/dist/presentation/ClipTray.js +11 -7
- package/dist/presentation/ClipTray.js.map +2 -2
- package/dist/presentation/SlidesEditor.js +6 -2
- package/dist/presentation/SlidesEditor.js.map +2 -2
- package/dist/presentation/store.d.ts +2 -0
- package/dist/presentation/store.js +15 -0
- package/dist/presentation/store.js.map +3 -3
- package/dist/settings/index.cjs +146 -146
- package/dist/site/index.cjs +6 -6
- package/dist/studio/index.cjs +10 -10
- package/dist/workflow-canvas/index.cjs +33 -33
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/dist/ClippingMediaViewer-ZFEX5A3U.cjs.map +0 -1
- package/dist/ClippingPdfViewer-3LRTEPHV.cjs.map +0 -1
- package/dist/ConnectedPresentation-L32JPRFI.cjs.map +0 -1
- package/dist/ConnectedSlidesTab-P7GGNUTO.cjs.map +0 -1
- package/dist/FilesViewerDialog-MHUVEZ7M.cjs.map +0 -1
- package/dist/SpotlightStrip-ED22UYTM.cjs.map +0 -1
- package/dist/chunk-6JMW3IJ2.cjs.map +0 -1
- package/dist/chunk-GAMRVB3I.cjs.map +0 -1
- package/dist/chunk-GFUOCGY6.cjs +0 -32
- package/dist/chunk-GFUOCGY6.cjs.map +0 -1
- package/dist/chunk-IRGRMJPP.cjs +0 -18
- package/dist/chunk-JY7UUZQG.cjs.map +0 -1
- package/dist/chunk-ORNLCBNE.cjs.map +0 -1
- package/dist/chunk-PWBRE7JA.cjs.map +0 -1
- package/dist/chunk-TSFNLY3K.cjs.map +0 -1
- package/dist/chunk-ZZZITHGK.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/agents/workflows/scopeRender.tsx","../src/agents/workflows/skillMarkdown.ts","../src/agents/workflows/useWorkflowView.ts","../src/agents/workflows/stepWindow.ts","../src/agents/workflows/StepBarFrame.tsx","../src/agents/workflows/StepParts.tsx","../src/agents/workflows/WorkflowStepBar.tsx","../src/agents/workflows/WorkflowRunner.tsx","../src/agents/workflows/launchRequest.ts","../src/agents/workflows/WorkflowStepAction.tsx","../src/agents/workflows/requiredLabels.ts","../src/agents/definitions/AgentCard.tsx","../src/agents/definitions/AgentGallery.tsx","../src/agents/definitions/AgentEditorParts.tsx","../src/agents/definitions/AgentCreator.tsx","../src/agents/definitions/persona.ts","../src/agents/definitions/defaults.ts","../src/agents/definitions/AgentConnectInstructions.tsx","../src/agents/definitions/agentTasks.ts","../src/agents/skills/SkillForms.tsx","../src/agents/skills/SkillParts.tsx","../src/agents/skills/SkillBrowserParts.tsx","../src/agents/skills/skillFiles.ts","../src/agents/skills/skillImport.ts","../src/agents/skills/skillLibrary.ts","../src/agents/skills/SkillLibraryDetail.tsx","../src/agents/tasks/TaskPlan.tsx","../src/agents/tasks/elapsed.ts","../src/agents/tasks/UploadTaskItem.tsx","../src/agents/tasks/UploadTaskList.tsx","../src/agents/tasks/RecurrenceBuilder.tsx","../src/agents/tasks/taskLabels.ts","../src/agents/tasks/TaskOutputsCell.tsx","../src/agents/tasks/TaskMoveDialog.tsx","../src/agents/tasks/TaskStatusPill.tsx","../src/agents/tasks/taskColumns.tsx","../src/agents/tasks/taskRows.ts","../src/agents/tasks/taskTableLabels.ts","../src/agents/tasks/TaskRowMenu.tsx","../src/agents/tasks/gridWidth.ts","../src/agents/tasks/TaskTable.tsx","../src/agents/tasks/ThreadStatusLine.tsx","../src/agents/tasks/ConversationListView.tsx","../src/agents/tasks/PillSelect.tsx","../src/agents/tasks/DueDateMenu.tsx","../src/agents/tasks/NewThreadDialog.tsx","../src/agents/tasks/TaskActivityTimeline.tsx","../src/agents/tasks/TaskActivityDialog.tsx","../src/agents/tasks/WorkflowRunStatus.tsx","../src/agents/tasks/WorkflowThreadStrip.tsx","../src/agents/tasks/TaskRunsDialog.tsx","../src/agents/tasks/taskComposerTypes.ts","../src/agents/tasks/WorkflowComposer.tsx","../src/agents/tasks/TaskComposer.tsx","../src/agents/tasks/ConversationTurnSpeaker.tsx","../src/agents/tasks/TaskEmptyState.tsx","../src/agents/config/TupleArrayField.tsx","../src/agents/config/schema-utils.ts","../src/agents/config/ConfigField.tsx","../src/agents/config/ConfigForm.tsx","../src/agents/runs/AgentBar.tsx","../src/agents/approvals/ConsentPage.tsx","../src/agents/approvals/ConsentParts.tsx","../src/agents/approvals/AuthorizeAgentParts.tsx"],"names":["jsx","ScopePicker","isWorkflowScope","fieldToFrontmatter","workflowFromFrontmatter","isRunFinished","useState","useRef","useEffect","useCallback","nextAction","act","validateStep","useMemo","stepPhase","failedUpstream","canAssign","assigneeName","runFieldsOf","useElementSize","jsxs","cn","StepBadgeMark","Fragment","Popover","PopoverTrigger","PopoverContent","ChevronLeft","ChevronRight","ProgressChevron","StepChip","ProgressChevronBar","Loader2","splitDocRef","FileText","UserRound","CornerUpLeft","sendBackTargets","Button","Textarea","ShieldCheck","formatDate","MessageSquare","shownValue","Check","Hourglass","Clock","PenLine","X","ExternalLink","Mail","Table2","stepKindOf","STEP_KIND_ICONS","DEFAULT_STEP_KIND_LABELS","stepLevels","waitingDocuments","Card","CheckCircle2","stepDependencies","SchemaForm","UploadDropzone","reviewInstructions","ArrowLeft","ArrowRight","AlertTriangle","RotateCw","GitBranch","isPersonStep","openDialog","closeDialog","useDialogProps","stepFields","DropdownMenu","DropdownMenuTrigger","MoreHorizontal","DropdownMenuContent","DropdownMenuItem","defaultInputs","validateInputs","workflowSteps","formatCount","goalProgress","testIdOr","ActionLink","Eye","ClipboardList","Pencil","Copy","Trash2","EmptyState","Bot","Sparkles","Plus","Label","Wand2","useControllableState","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","Input","FoldSection","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Globe","Terminal","Telescope","ListChecks","ImageIcon","Brain","useBlocksEnvironment","LayoutGrid","List","unzip","strFromU8","mergeSkillWorkflows","isSharedSkill","ACTION","Play","Lock","Download","Badge","Slider","formatElapsed","minutes","SkipForward","FileX","StatusIcon","parseRRule","DEFAULT_RECURRENCE","buildRRule","WEEKDAYS","CornerDownRight","CircleDashed","ToneBadge","AlertCircle","KeyRound","RotateCcw","CheckCheck","History","ListPlus","DropdownMenuSeparator","PersonPill","ChevronDown","Workflow","SharingEntity","ChevronsUpDown","ChevronsDownUp","ListTodo","GridView","SelectionBar","SelectionBarAction","Hand","CircleCheck","useIsPhone","EntityChip","CellHoverIcon","useAssistantCopy","TabHeader","FilterInput","EntityPill","Command","CommandInput","CommandList","CommandEmpty","CommandItem","assistantCopy","EMPTY_NEW_THREAD","hasTaskFields","ModalHeader","Switch","VisibilityToggle","CalendarClock","UserRoundCog","Square","MessageSquareReply","Phone","Disc","Flag","BellRing","ArrowUpRight","eventWaitingDocuments","waitingForDocumentsText","DEFAULT_STEP_DOCUMENT_LABELS","DEFAULT_STEP_RECORD_LABELS","CornerLeftUp","PopoverClose","stepDocuments","StepDocumentCards","StepRecord","StepDocumentButton","Zap","MessagesSquare","workflowRunStatusLabel","GLYPH","deriveWorkflowName","DialogClose","AddFilesFirst","id","formatDue","ARBI_MARK_SRC","UserEntity","value","memo","Collapsible","CollapsibleTrigger","CollapsibleContent","ChevronUp","Pause","Activity","forwardRef","AgentBarIconButton","MoreVertical","formatRole","MultiSelect"],"mappings":"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","file":"chunk-3UP32FM3.cjs","sourcesContent":["import type { ReactNode } from 'react'\nimport { ScopePicker } from '../../home/ScopePicker'\nimport type { WorkflowScopeSource } from './WorkflowConfigDialog'\nimport type { WorkflowDefinition, WorkflowField, WorkflowInputs, WorkflowScope } from './types'\nimport { isWorkflowScope } from './workflow'\n\n/** The folder/label picker over the workspace's files: what a `scope` field renders by default. */\nexport function defaultScopeRenderer(\n scopeSource: WorkflowScopeSource | undefined\n):\n | ((\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode)\n | undefined {\n if (!scopeSource) return undefined\n return function renderScope(_field, value, onChange) {\n return (\n <ScopePicker\n folders={scopeSource.folders}\n unfiledCount={scopeSource.unfiledCount}\n labels={scopeSource.labels}\n totalCount={scopeSource.totalCount}\n matchedCount={scopeSource.countMatching(value)}\n scope={value}\n onScopeChange={onChange}\n />\n )\n }\n}\n\n/**\n * The inputs with every `scope` field resolved to explicit file ids (`documents`), so what is sent says\n * exactly which files a run is bound to. The folders and labels stay, for showing the pick again.\n */\nexport function resolveScopeInputs(\n workflow: Pick<WorkflowDefinition, 'inputs'>,\n inputs: WorkflowInputs,\n scopeSource: Pick<WorkflowScopeSource, 'resolveDocuments'> | undefined\n): WorkflowInputs {\n if (!scopeSource?.resolveDocuments) return inputs\n const next: WorkflowInputs = { ...inputs }\n for (const field of workflow.inputs) {\n if (field.type !== 'scope') continue\n const raw = inputs[field.name]\n const scope: WorkflowScope = isWorkflowScope(raw) ? raw : { folders: [], labels: [] }\n next[field.name] = { ...scope, documents: scopeSource.resolveDocuments(scope) }\n }\n return next\n}\n","/**\n * A skill's form and prompt as SKILL.md text and back: how a built-in becomes a skill of the user's\n * own (\"Make a copy\"). A skill is one step; a flow of steps is a workflow (`toPlanSteps`).\n *\n * The frontmatter is the line-based `key: value` form the backend parser reads. `inputs` is one\n * line of JSON (valid YAML flow style): the backend ignores keys it does not know, and\n * `workflowFromSkillMarkdown` reads it back.\n */\n\nimport type { WorkflowDefinition } from './types'\nimport { fieldToFrontmatter, workflowFromFrontmatter } from './workflow'\n\nconst JSON_KEYS = new Set(['inputs'])\n\nconst oneLine = (text: string): string => text.replace(/\\s*\\n\\s*/g, ' ').trim()\n\n/** A skill slug: lowercase letters, digits and hyphens (what the backend accepts). */\nexport const skillSlug = (raw: string): string => raw.toLowerCase().replace(/[^a-z0-9-]/g, '')\n\n/** SKILL.md text for a prompt workflow: frontmatter (name, description, form) then the prompt. */\nexport function workflowToSkillMarkdown(workflow: WorkflowDefinition): string {\n const { run } = workflow\n if (run.kind !== 'prompt') throw new Error('Only skills that start a chat can be copied')\n const lines = [\n '---',\n `name: ${skillSlug(workflow.id)}`,\n `description: ${oneLine(workflow.description)}`,\n ]\n if (workflow.icon) lines.push(`icon: ${workflow.icon}`)\n if (workflow.landing !== 'chat') lines.push(`landing: ${workflow.landing}`)\n if (workflow.requiresFiles) lines.push('requires_files: true')\n if (workflow.inputs.length > 0) {\n lines.push(`inputs: ${JSON.stringify(workflow.inputs.map(fieldToFrontmatter))}`)\n }\n lines.push('---', '', run.promptTemplate.trim(), '')\n return lines.join('\\n')\n}\n\n/** Read a SKILL.md back into a workflow (the inverse of `workflowToSkillMarkdown`). */\nexport function workflowFromSkillMarkdown(id: string, text: string): WorkflowDefinition {\n const match = /^---\\n([\\s\\S]*?)\\n---\\n?([\\s\\S]*)$/.exec(text)\n const frontmatter: Record<string, unknown> = {}\n const body = match ? match[2] : text\n for (const line of (match ? match[1] : '').split('\\n')) {\n const i = line.indexOf(':')\n if (i < 1) continue\n const key = line.slice(0, i).trim()\n const value = line.slice(i + 1).trim()\n if (JSON_KEYS.has(key)) {\n try {\n frontmatter[key] = JSON.parse(value)\n } catch {\n // A hand-written YAML list: this reader only understands the JSON line.\n }\n } else if (value === 'true' || value === 'false') frontmatter[key] = value === 'true'\n else frontmatter[key] = value\n }\n return workflowFromFrontmatter(id, frontmatter, body)\n}\n","/**\n * The screen side of a stepped run: which step is in view, form problems, and what the primary\n * button does. The run itself happens elsewhere (the thread on the server, `useWorkflowThread`, or\n * the builder's preview): this hook gets each step's state and the host's actions, so every host\n * shows a run the same way (`WorkflowRunner`).\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport {\n assigneeName,\n canAssign,\n failedUpstream,\n isRunFinished,\n nextAction,\n runFieldsOf,\n stepPhase,\n validateStep,\n type WorkflowNextAction,\n type WorkflowStepPhase,\n} from './run'\nimport type {\n WorkflowErrors,\n WorkflowInputValue,\n WorkflowInputs,\n WorkflowStep,\n WorkflowStepState,\n} from './types'\n\nexport interface UseWorkflowViewOptions {\n steps: WorkflowStep[]\n /** Each step's state (missing = pending). */\n states: Record<string, WorkflowStepState>\n inputs: WorkflowInputs\n setInput: (name: string, value: WorkflowInputValue) => void\n /** Finish a person's step (a form, an upload, a review's approval). A throw keeps the user on it. */\n complete: (step: WorkflowStep) => Promise<void>\n /** Give up on a step so what waits for it can go on. */\n skip: (stepId: string) => Promise<void>\n /** Run a failed agent step again. */\n retry?: (stepId: string) => Promise<void>\n /**\n * Start the run's ready agent or action step when nothing else will (`needsStart`): create the\n * run's thread, or ask the server to run it again. Absent = the host's runs start by themselves.\n */\n start?: () => Promise<void>\n /** No run is under way to start a ready agent or action step (see `start`). */\n needsStart?: boolean\n /** Why the run could not start or go on, as the server said (shown on a step not started). */\n runError?: string | null\n /** A form step whose inputs can no longer change (committed, or recorded on the thread). */\n isLocked?: (stepId: string) => boolean\n /**\n * Whether `states` are known yet (a run opened later: its thread's log has arrived). Until then\n * the view waits to open the run where it is, instead of at its first step. Default true.\n */\n loaded?: boolean\n /** Send the work back from a ready step to an earlier one, with a note. */\n sendBack?: (stepId: string, to: string, note?: string) => Promise<void>\n /** A signer refuses a signature step, with a note. */\n decline?: (stepId: string, note?: string) => Promise<void>\n /** A member's name by id (`usr-…` / `agt-…`): assignees and signers are shown by name. */\n nameOf?: (id: string) => string | undefined\n}\n\n/** What `WorkflowRunner` shows and does. */\nexport interface WorkflowRunView {\n steps: WorkflowStep[]\n /** The step in view; `undefined` once the run's completion is shown. */\n step: WorkflowStep | undefined\n current: string | null\n isComplete: boolean\n inputs: WorkflowInputs\n setInput: (name: string, value: WorkflowInputValue) => void\n stateOf: (stepId: string) => WorkflowStepState | undefined\n phaseOf: (stepId: string) => WorkflowStepPhase\n /** The steps `stepId` waits for that failed (still, or skipped after failing). */\n failedUpstreamOf: (stepId: string) => ReturnType<typeof failedUpstream>\n isLocked: (stepId: string) => boolean\n /** The form step in view's problems, shown once moving on was attempted. */\n errors: WorkflowErrors\n /** An action is under way (completing, skipping). */\n busy: boolean\n actionError: string | null\n /** Some agent step is running. */\n isRunning: boolean\n /** A ready agent or action step starts only when the person starts it (`action` is `start`). */\n needsStart: boolean\n /** Why the run could not start or go on, as the server said. */\n runError: string | null\n action: WorkflowNextAction\n canBack: boolean\n next: () => Promise<void>\n back: () => void\n /** View a step (one further down the plan too: it can be skipped from there). */\n goTo: (stepId: string) => void\n skip: (stepId: string) => Promise<void>\n retry?: (stepId: string) => Promise<void>\n /** Send the work back from `stepId` to `to` (it is then in view). Absent = not offered. */\n sendBack?: (stepId: string, to: string, note?: string) => Promise<void>\n /** Decline a signature step. Absent = not offered. */\n decline?: (stepId: string, note?: string) => Promise<void>\n /** A member's name by id. */\n nameOf?: (id: string) => string | undefined\n /** Who a step is for, in words (a person step, a signature, an email), if anyone. */\n assigneeOf: (stepId: string) => string | undefined\n /** Show the run from the start again (a host that starts a new run resets its own state). */\n restart: () => void\n}\n\nconst errorMessage = (e: unknown): string =>\n e instanceof Error ? e.message : typeof e === 'string' ? e : 'Something went wrong.'\n\n/** The first step that is not finished yet: where a run opens. */\nfunction firstOpen(\n steps: WorkflowStep[],\n states: Record<string, WorkflowStepState>\n): string | null {\n const open = steps.find((s) => !['done', 'skipped'].includes(states[s.id]?.status ?? 'pending'))\n return open?.id ?? (steps.length && isRunFinished(steps, states) ? null : (steps[0]?.id ?? null))\n}\n\nexport function useWorkflowView(options: UseWorkflowViewOptions): WorkflowRunView {\n const { steps, states, inputs, setInput, loaded = true } = options\n const [current, setCurrent] = useState<string | null>(() => firstOpen(steps, states))\n const [showErrors, setShowErrors] = useState(false)\n const [busy, setBusy] = useState(false)\n const [actionError, setActionError] = useState<string | null>(null)\n const optionsRef = useRef(options)\n optionsRef.current = options\n\n // A run loaded after the first render (its steps or its thread's log arrived) opens where it is:\n // its current step, or its completion when every step has finished.\n const placed = useRef(steps.length > 0 && loaded)\n useEffect(() => {\n if (placed.current || steps.length === 0 || !loaded) return\n placed.current = true\n setCurrent(firstOpen(steps, states))\n }, [steps, states, loaded])\n\n const step = steps.find((s) => s.id === current)\n const following = useCallback(\n (id: string | null): string | null => {\n const i = steps.findIndex((s) => s.id === id)\n return steps[i + 1]?.id ?? null\n },\n [steps]\n )\n // Where to go once the step in view is finished (completed or skipped): the next one still to\n // do, else simply the next one. The step just finished counts as finished whatever the states\n // say yet (they may not have caught up).\n const onward = useCallback(\n (id: string): string | null => {\n const { steps: s, states: st } = optionsRef.current\n const i = s.findIndex((x) => x.id === id)\n const open = s\n .slice(i + 1)\n .find((x) => !['done', 'skipped'].includes(st[x.id]?.status ?? 'pending'))\n return open?.id ?? following(id)\n },\n [following]\n )\n const actionOptions = useCallback(\n (o: UseWorkflowViewOptions) => ({\n needsStart: !!o.start && !!o.needsStart,\n canRetry: !!o.retry,\n }),\n []\n )\n const action: WorkflowNextAction = busy\n ? 'wait'\n : nextAction(steps, states, current, actionOptions(options))\n\n const next = useCallback(async () => {\n const { steps: s, states: st, inputs: values } = optionsRef.current\n const at = s.find((x) => x.id === current)\n const act = nextAction(s, st, current, actionOptions(optionsRef.current))\n if (!at || act === 'wait' || busy) return\n setActionError(null)\n if (act === 'finish') return setCurrent(null)\n if (act === 'move') return setCurrent(following(current))\n setBusy(true)\n try {\n // Starting or retrying keeps the step in view: it is what runs now.\n if (act === 'start' || act === 'retry') {\n await (act === 'start' ? optionsRef.current.start?.() : optionsRef.current.retry?.(at.id))\n return\n }\n if (Object.keys(validateStep(at, values)).length > 0) {\n setShowErrors(true)\n return\n }\n await optionsRef.current.complete(at)\n setShowErrors(false)\n setCurrent(onward(at.id) ?? current)\n } catch (e) {\n setActionError(errorMessage(e))\n } finally {\n setBusy(false)\n }\n }, [current, busy, following, onward, actionOptions])\n\n const goTo = useCallback((stepId: string) => {\n setShowErrors(false)\n setActionError(null)\n setCurrent(stepId)\n }, [])\n\n const index = steps.findIndex((s) => s.id === current)\n const back = useCallback(() => {\n const i = steps.findIndex((s) => s.id === current)\n const to = i < 0 ? steps[steps.length - 1] : steps[i - 1]\n if (to) goTo(to.id)\n }, [steps, current, goTo])\n\n const act = useCallback(\n (fn: ((id: string) => Promise<void>) | undefined) =>\n fn &&\n (async (stepId: string) => {\n setBusy(true)\n setActionError(null)\n try {\n await fn(stepId)\n } catch (e) {\n setActionError(errorMessage(e))\n } finally {\n setBusy(false)\n }\n }),\n []\n )\n // A skip moves the view on the way completing does (when it was the step in view).\n const currentRef = useRef(current)\n currentRef.current = current\n const skip = useMemo(\n () =>\n act(async (id) => {\n await optionsRef.current.skip(id)\n if (currentRef.current !== id) return\n setShowErrors(false)\n setCurrent(onward(id) ?? id)\n }) as (id: string) => Promise<void>,\n [act, onward]\n )\n const retry = useMemo(\n () =>\n options.retry ? act((id) => optionsRef.current.retry?.(id) ?? Promise.resolve()) : undefined,\n // Only whether the host offers retry matters here.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [act, !!options.retry]\n )\n\n const sendBack = useMemo(\n () =>\n options.sendBack\n ? async (stepId: string, to: string, note?: string) => {\n setBusy(true)\n setActionError(null)\n try {\n await optionsRef.current.sendBack?.(stepId, to, note)\n setShowErrors(false)\n setCurrent(to)\n } catch (e) {\n setActionError(errorMessage(e))\n } finally {\n setBusy(false)\n }\n }\n : undefined,\n // Only whether the host offers it matters here.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [!!options.sendBack]\n )\n const declineWithNote = useMemo(\n () =>\n options.decline\n ? async (stepId: string, note?: string) => {\n setBusy(true)\n setActionError(null)\n try {\n await optionsRef.current.decline?.(stepId, note)\n } catch (e) {\n setActionError(errorMessage(e))\n } finally {\n setBusy(false)\n }\n }\n : undefined,\n // Only whether the host offers it matters here.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [!!options.decline]\n )\n\n const isLocked = useCallback(\n (stepId: string) => optionsRef.current.isLocked?.(stepId) ?? false,\n []\n )\n\n return {\n steps,\n step,\n current,\n isComplete: current === null,\n inputs,\n setInput,\n stateOf: (id) => states[id],\n phaseOf: (id) => stepPhase(steps, states, id),\n failedUpstreamOf: (id) => failedUpstream(steps, states, id),\n isLocked,\n errors: showErrors && step && !isLocked(step.id) ? validateStep(step, inputs) : {},\n busy,\n actionError,\n isRunning: Object.values(states).some((s) => s.status === 'running'),\n needsStart: !!options.start && !!options.needsStart,\n runError: options.runError ?? null,\n action,\n canBack: (current === null || index > 0) && !busy,\n next,\n back,\n goTo,\n skip,\n retry,\n sendBack,\n decline: declineWithNote,\n nameOf: options.nameOf,\n assigneeOf: (id) => {\n const s = steps.find((x) => x.id === id)\n if (!s || !canAssign(s)) return undefined\n return assigneeName(s.assignee, {\n nameOf: options.nameOf,\n inputs,\n fields: runFieldsOf(steps),\n announcedTo: states[id]?.announcedTo,\n })\n },\n restart: () => {\n setShowErrors(false)\n setActionError(null)\n setCurrent(steps[0]?.id ?? null)\n },\n }\n}\n","/**\n * What a step bar shows of a run: a window of a few levels of the graph (`stepLevels`) around the\n * step in view — previous, current, next — with how many steps it hides on either side, each\n * parallel level collapsed to one primary step plus the rest, and the running and failed steps the\n * window does not show (so work that is still going on, or broke, is never out of sight). Pure: both bars\n * (`WorkflowStepBar` in a runner, `WorkflowThreadStrip` on a thread) render from it.\n */\n\nimport type { WorkflowStepPhase } from './run'\n\n/** A step label's widest before it is cut (px): 20rem; the step in view's is wider (26rem). */\nexport const LABEL_MAX_PX = 320\n/** About one character of a label (12px text). */\nconst CHAR_PX = 6.5\n/**\n * A bar segment's chevron (`ProgressChevron`, `blocks.css`): its padding past the point (10px\n * deep) and the notch, and how far it slides under the segment before it (the point's depth less\n * the 2px hairline between them).\n */\nexport const CHEVRON_SIDES_PX = 10 + 4 + (10 + 6)\nexport const CHEVRON_OVERLAP_PX = 10 - 2\n/** A step's chip on its segment: badge, gap and padding. */\nconst CHIP_CHROME_PX = 20 + 6 + 8\n/** A level's room beyond its label: its chip and its segment, flush with the one before. */\nexport const LEVEL_CHROME_PX = CHIP_CHROME_PX + CHEVRON_SIDES_PX - CHEVRON_OVERLAP_PX\n/** A parallel level's \"+N\" chip. */\nconst GROUP_CHIP_PX = 32\n\n/**\n * The room a level needs to show its name uncut (up to `LABEL_MAX_PX`): a bar shows a flow whole\n * only when every level has this, so names are never squeezed for the sake of showing it all.\n */\nexport function levelRoomPx(titles: string[]): number {\n const label = Math.max(0, ...titles.map((t) => Math.min(LABEL_MAX_PX, t.length * CHAR_PX)))\n return Math.ceil(label + LEVEL_CHROME_PX + (titles.length > 1 ? GROUP_CHIP_PX : 0))\n}\n\n/** A step as far as the window is concerned. */\nexport interface StepWindowStep {\n id: string\n}\n\n/** One level of the graph: a step, or steps that run side by side (a parallel group). */\nexport interface StepWindowLevel<T extends StepWindowStep> {\n index: number\n steps: T[]\n /** The step the bar shows for the level: the running one, else the one in view, else … */\n primary: T\n /** The level's other steps, behind a \"+N\" chip. */\n others: T[]\n /** Where the level stands relative to the step in view. */\n role: 'previous' | 'current' | 'next' | 'other'\n}\n\nexport interface StepWindow<T extends StepWindowStep> {\n levels: StepWindowLevel<T>[]\n /** The levels in the window, in order. */\n visible: StepWindowLevel<T>[]\n /** The window's first level and the one after its last. */\n start: number\n end: number\n /** The level of the step in view. */\n currentLevel: number\n /** Steps in the levels before and after the window. */\n hiddenBefore: number\n hiddenAfter: number\n canBack: boolean\n canForward: boolean\n /** Running steps the bar does not show: outside the window, or collapsed in a group. */\n runningHidden: T[]\n /** Failed steps the bar does not show, likewise: a failure is always in sight. */\n failedHidden: T[]\n /** 1-based position of the step in view among all steps, and how many there are. */\n position: number\n total: number\n}\n\nexport interface StepWindowOptions<T extends StepWindowStep> {\n levels: T[][]\n phaseOf: (id: string) => WorkflowStepPhase\n /** The step in view; none (or unknown) = the step the run is at (`activeStepId`). */\n current?: string | null\n /** The window's first level, as the arrows moved it; none = around the step in view. */\n start?: number | null\n /** How many levels the window shows (3: previous, current, next). */\n span?: number\n}\n\n/** Where a person's attention goes first in a level, after a running step and the one in view. */\nconst ATTENTION: WorkflowStepPhase[] = ['waiting', 'failed', 'ready']\n\n/**\n * The step a run is at, when nothing else says which step is in view: a running one, else one\n * waiting on someone, else one that failed, else one ready to do, else the last one.\n */\nexport function activeStepId<T extends StepWindowStep>(\n levels: T[][],\n phaseOf: (id: string) => WorkflowStepPhase\n): string | undefined {\n const all = levels.flat()\n for (const phase of ['running', ...ATTENTION] as WorkflowStepPhase[]) {\n const hit = all.find((s) => phaseOf(s.id) === phase)\n if (hit) return hit.id\n }\n return all[all.length - 1]?.id\n}\n\nfunction primaryOf<T extends StepWindowStep>(\n steps: T[],\n phaseOf: (id: string) => WorkflowStepPhase,\n current: string | undefined\n): T {\n return (\n steps.find((s) => phaseOf(s.id) === 'running') ??\n steps.find((s) => s.id === current) ??\n ATTENTION.map((p) => steps.find((s) => phaseOf(s.id) === p)).find(Boolean) ??\n steps[0]\n )\n}\n\nexport function stepWindow<T extends StepWindowStep>({\n levels: raw,\n phaseOf,\n current,\n start: requested,\n span = 3,\n}: StepWindowOptions<T>): StepWindow<T> {\n const levelsIn = raw.filter((l) => l.length > 0)\n const known = current && levelsIn.some((l) => l.some((s) => s.id === current))\n const at = known ? (current as string) : activeStepId(levelsIn, phaseOf)\n const currentLevel = Math.max(\n 0,\n levelsIn.findIndex((l) => l.some((s) => s.id === at))\n )\n const n = levelsIn.length\n const size = Math.max(1, Math.min(span, n))\n const maxStart = Math.max(0, n - size)\n // Around the step in view: one level before it when the window has room for three, else it\n // leads (narrow: current and next). Clamped, so the window is always full.\n const auto = currentLevel - (size >= 3 ? 1 : 0)\n const start = Math.min(maxStart, Math.max(0, requested ?? auto))\n const end = start + size\n\n const levels: StepWindowLevel<T>[] = levelsIn.map((steps, index) => {\n const primary = primaryOf(steps, phaseOf, at)\n return {\n index,\n steps,\n primary,\n others: steps.filter((s) => s !== primary),\n role:\n index === currentLevel\n ? 'current'\n : index === currentLevel - 1\n ? 'previous'\n : index === currentLevel + 1\n ? 'next'\n : 'other',\n }\n })\n const visible = levels.slice(start, end)\n const count = (ls: StepWindowLevel<T>[]) => ls.reduce((sum, l) => sum + l.steps.length, 0)\n const shown = new Set(visible.map((l) => l.primary.id))\n const all = levelsIn.flat()\n return {\n levels,\n visible,\n start,\n end,\n currentLevel,\n hiddenBefore: count(levels.slice(0, start)),\n hiddenAfter: count(levels.slice(end)),\n canBack: start > 0,\n canForward: end < n,\n runningHidden: all.filter((s) => phaseOf(s.id) === 'running' && !shown.has(s.id)),\n failedHidden: all.filter((s) => phaseOf(s.id) === 'failed' && !shown.has(s.id)),\n position: Math.max(1, all.findIndex((s) => s.id === at) + 1),\n total: all.length,\n }\n}\n","/**\n * The frame both step bars share (`WorkflowStepBar` in a runner, `WorkflowThreadStrip` on a\n * thread): `‹ … [previous] [CURRENT] [next] … ›`, from `stepWindow`. Each visible level shows one\n * step by name (its pill is the host's), a parallel level adds a \"+N\" chip that lists the group,\n * \"…\" on either side lists every step, and every running step the window does not show gets a\n * \"Working: <title>\" pill at the end, every failed one a \"Failed: <title>\" pill. The bar is a nav landmark; ←/→ (Home/End) move the window.\n * It reads as one progress bar (`ProgressChevronBar`): every level is a chevron segment, flush with\n * the next, its fill saying its phase in its kind's colour; the \"…\" counters and the host's\n * `leading` / `trailing` are segments of the same bar, a group's \"+N\" sits on its level's segment,\n * and the \"Working\" / \"Failed\" pills are segments of a short bar of their own after it. Steps keep\n * the builder canvas's chips (`StepChip`: kind icon, phase badge), drawn on their segment.\n */\n\nimport { useEffect, useRef, useState, type KeyboardEvent, type ReactNode } from 'react'\nimport { ChevronLeft, ChevronRight, Loader2 } from 'lucide-react'\nimport { cn, Popover, PopoverContent, PopoverTrigger } from '@arbidocs/react/ui'\nimport { useElementSize } from '../../lib/useElementSize'\nimport type { WorkflowStepPhase } from './run'\nimport { StepBadgeMark, StepChip } from './StepChip'\nimport { ProgressChevron, ProgressChevronBar } from './ProgressChevron'\nimport {\n CHEVRON_OVERLAP_PX,\n CHEVRON_SIDES_PX,\n levelRoomPx,\n stepWindow,\n type StepWindow,\n type StepWindowLevel,\n type StepWindowStep,\n} from './stepWindow'\n\nexport interface StepBarLabels {\n nav: string\n back: string\n forward: string\n /** The \"…\" before the window; `{count}` is replaced. */\n hiddenBefore: string\n /** The \"…\" after the window; `{count}` is replaced. */\n hiddenAfter: string\n /** The full list's heading; `{position}` and `{total}` are replaced. */\n position: string\n /** A parallel group's chip; `{count}` is replaced. */\n parallel: string\n inParallel: string\n /** A running step out of view; `{title}` is replaced. */\n working: string\n /** Several more running out of view; `{count}` is replaced. */\n moreWorking: string\n /** A failed step out of view; `{title}` is replaced. */\n failedStep: string\n /** A step that waits for someone; `{name}` is replaced. */\n waitingFor: string\n phases: Record<WorkflowStepPhase, string>\n}\n\nexport const DEFAULT_STEP_BAR_LABELS: StepBarLabels = {\n nav: 'Workflow steps',\n back: 'Earlier steps',\n forward: 'Later steps',\n hiddenBefore: '{count} earlier steps',\n hiddenAfter: '{count} later steps',\n position: 'Step {position} of {total}',\n parallel: '{count} more in parallel',\n inParallel: 'In parallel',\n working: 'Working: {title}',\n moreWorking: '+{count} working',\n failedStep: 'Failed: {title}',\n waitingFor: 'Waiting for {name}',\n phases: {\n blocked: 'Not started',\n ready: 'To do',\n running: 'Working',\n waiting: 'Waiting',\n done: 'Done',\n skipped: 'Skipped',\n failed: 'Failed',\n },\n}\n\n/**\n * A label is the full title, cut with an ellipsis only when very long (in full in `title`) or when\n * the bar is out of room — connectors give up their room first. Its widest is `LABEL_MAX_PX`\n * (20rem).\n */\nexport const STEP_LABEL = 'min-w-[2.5rem] truncate'\nexport const STEP_LABEL_MAX = 'max-w-[20rem]'\n/**\n * The step in view's label: wider (26rem), and the last to give up room (what is around it shrinks\n * a million times harder, so it is not cut while anything else on its chip or the bar can still\n * give). Its chip already has two lines (the kind above the name), so it is cut, not wrapped.\n */\nexport const STEP_LABEL_CURRENT = 'block min-w-[2.5rem] max-w-[26rem] truncate'\n/**\n * What follows a name on its pill (\"Waiting for …\"): cut before the name is. Flex shares a shortage\n * in proportion, so the factor is huge: even a sliver taken from the name would show an ellipsis.\n */\nexport const STEP_EXTRA = 'min-w-[3rem] shrink-[1000000] truncate font-normal opacity-80'\n\nconst fill = (template: string, values: Record<string, string | number>) =>\n Object.entries(values).reduce((s, [k, v]) => s.replace(`{${k}}`, String(v)), template)\n\n/** A step in the frame's lists: its title, for naming it. */\nexport interface StepBarStep extends StepWindowStep {\n title: string\n}\n\nexport interface StepBarFrameProps<T extends StepBarStep> {\n levels: T[][]\n phaseOf: (id: string) => WorkflowStepPhase\n /** The step in view (none = where the run is). */\n current?: string | null\n /** Go to a step: from a group, the full list or a \"Working\" pill. */\n onSelect: (id: string) => void\n /** The pill of a level's primary step (a button or a popover trigger). */\n renderStep: (step: T, level: StepWindowLevel<T>, win: StepWindow<T>, narrow: boolean) => ReactNode\n /** What follows a level's pill (signals it raised…). */\n renderAfter?: (level: StepWindowLevel<T>) => ReactNode\n /** Before the steps / after them: shown while the window is at that end. */\n leading?: ReactNode\n trailing?: ReactNode\n /**\n * Room the bar needs beyond the levels' names: always (a wider step in view), and for `leading`\n * and `trailing` while the window reaches that end. A window is only as wide as fits with it.\n */\n reservePx?: { always?: number; leading?: number; trailing?: number }\n /** Steps that cannot be gone to (the completion marker). */\n isSelectable?: (id: string) => boolean\n icon?: (step: T) => ReactNode\n /** A step's kind (`agent`, `review`…), for its colour; none = neutral. */\n kindOf?: (step: T) => string\n disabled?: boolean\n /**\n * The most levels the window shows, however wide the bar (3: previous, current and next, the\n * rest behind \"…N\"). Absent: as many as have room for their names, the whole flow when it fits.\n */\n maxSpan?: number\n labels?: Partial<StepBarLabels>\n tid: (suffix: string) => string\n className?: string\n}\n\n/** Below this width the window shows two levels: the current one and the next. */\nconst NARROW_PX = 560\n/** The ‹ › arrows, and a \"…N\" counter's segment on a side that hides steps. */\nconst ARROWS_PX = 56\nconst HIDDEN_PX = 28 + CHEVRON_SIDES_PX - CHEVRON_OVERLAP_PX\n\nexport function StepBarFrame<T extends StepBarStep>({\n levels,\n phaseOf,\n current,\n onSelect,\n renderStep,\n renderAfter,\n leading,\n trailing,\n reservePx = {},\n isSelectable = () => true,\n icon,\n kindOf = () => 'adhoc',\n disabled,\n maxSpan,\n labels,\n tid,\n className,\n}: StepBarFrameProps<T>) {\n const l = { ...DEFAULT_STEP_BAR_LABELS, ...labels }\n const box = useRef<HTMLElement>(null)\n const { width } = useElementSize(box)\n const narrow = width > 0 && width < NARROW_PX\n // The arrows' window start; none = around the step in view. A new step in view re-centres it.\n const [start, setStart] = useState<number | null>(null)\n useEffect(() => setStart(null), [current])\n // Narrow: the step in view alone, with a \"3/12\" counter. Wider: as many levels around it as have\n // room for their names uncut — the whole flow when it all fits — down to the step in view alone.\n const roomOf = (lv: T[]) => levelRoomPx(lv.map((s) => s.title))\n const fits = (k: number) => {\n const w = stepWindow({ levels, phaseOf, current, start, span: k })\n const reserve =\n (reservePx.always ?? 0) +\n (w.start === 0 ? (reservePx.leading ?? 0) : 0) +\n (w.canForward ? 0 : (reservePx.trailing ?? 0)) +\n ARROWS_PX +\n (w.hiddenBefore ? HIDDEN_PX : 0) +\n (w.hiddenAfter ? HIDDEN_PX : 0)\n return width - reserve >= w.visible.reduce((sum, lv) => sum + roomOf(lv.steps), 0)\n }\n // Not measured yet (no layout): previous, current and next.\n const most = Math.max(1, maxSpan ?? levels.length)\n let span = width > 0 ? 1 : Math.min(3, most)\n if (!narrow && width > 0)\n for (let k = Math.min(levels.length, most); k > 1; k--)\n if (fits(k)) {\n span = k\n break\n }\n const win = stepWindow({ levels, phaseOf, current, start, span })\n const [listOpen, setListOpen] = useState<'before' | 'after' | null>(null)\n\n const move = (to: number) => setStart(Math.max(0, Math.min(win.levels.length - 1, to)))\n // Moved from the keyboard: the focus goes to the window's first step, so it never stays on a\n // step the window has scrolled away from.\n const keyMoved = useRef(false)\n useEffect(() => {\n if (!keyMoved.current) return\n keyMoved.current = false\n box.current?.querySelector<HTMLElement>('[data-role] button')?.focus()\n }, [win.start])\n const select = (id: string) => {\n setListOpen(null)\n setStart(null)\n onSelect(id)\n }\n const onKeyDown = (e: KeyboardEvent<HTMLElement>) => {\n // Popovers are portalled but their keys bubble here through React: only the bar's own.\n if (!box.current?.contains(e.target as Node)) return\n const to =\n e.key === 'ArrowLeft'\n ? win.start - 1\n : e.key === 'ArrowRight'\n ? win.start + 1\n : e.key === 'Home'\n ? 0\n : e.key === 'End'\n ? win.levels.length\n : null\n if (to === null) return\n e.preventDefault()\n keyMoved.current = true\n move(to)\n }\n\n const row = (s: T, isCurrent: boolean) => {\n const phase = phaseOf(s.id)\n const selectable = isSelectable(s.id)\n return (\n <button\n key={s.id}\n type=\"button\"\n disabled={!selectable || disabled}\n onClick={() => select(s.id)}\n aria-current={isCurrent ? 'step' : undefined}\n className={cn(\n `wf-kind-${kindOf(s)}`,\n 'flex w-full min-w-0 items-center gap-2 rounded-md px-2 py-1 text-left text-xs hover:bg-accent disabled:cursor-default disabled:hover:bg-transparent',\n isCurrent && 'bg-accent font-semibold'\n )}\n data-phase={phase}\n data-testid={tid(`list-step-${s.id}`)}\n >\n <span\n className={cn(\n 'wf-badge flex size-5 shrink-0 items-center justify-center rounded-md [&_svg]:size-3',\n phase === 'done' && 'bg-[hsl(var(--wf-accent))] text-card',\n phase === 'blocked' && 'opacity-60'\n )}\n aria-hidden\n >\n <StepBadgeMark phase={phase} icon={icon?.(s)} />\n </span>\n <span className=\"min-w-0 flex-1 truncate\" title={s.title}>\n {s.title}\n </span>\n <span className=\"shrink-0 text-[10px] font-normal text-muted-foreground\">\n {l.phases[phase]}\n </span>\n </button>\n )\n }\n const at = win.levels[win.currentLevel]\n const atId = at && (at.steps.find((s) => s.id === current) ?? at.primary).id\n\n // The full list opens at the step in view, focused (a 40-step list starts where you are).\n const focusCurrent = (e: Event) => {\n const el = (e.currentTarget as HTMLElement | null)?.querySelector<HTMLElement>(\n '[aria-current=\"step\"]'\n )\n if (!el) return\n e.preventDefault()\n el.focus()\n el.scrollIntoView?.({ block: 'nearest' })\n }\n // A list of steps: all of them (the narrow counter), or those a \"…N\" hides on its side.\n const stepList = (side?: 'before' | 'after') => (\n <>\n <p className=\"px-2 py-1 text-[11px] font-medium text-muted-foreground\">\n {side\n ? fill(side === 'before' ? l.hiddenBefore : l.hiddenAfter, {\n count: side === 'before' ? win.hiddenBefore : win.hiddenAfter,\n })\n : fill(l.position, { position: win.position, total: win.total })}\n </p>\n <ol>\n {(side === 'before'\n ? win.levels.slice(0, win.start)\n : side === 'after'\n ? win.levels.slice(win.end)\n : win.levels\n ).map((level) => (\n <li\n key={level.index}\n className={cn(level.steps.length > 1 && 'my-0.5 border-l-2 border-border pl-1')}\n >\n {level.steps.length > 1 && (\n <p className=\"px-2 text-[10px] uppercase tracking-wide text-muted-foreground\">\n {l.inParallel}\n </p>\n )}\n {level.steps.map((s) => row(s, s.id === atId))}\n </li>\n ))}\n </ol>\n </>\n )\n\n // \"…\": how many steps the window hides on that side; it opens the whole list.\n // Narrow, one counter (\"3/12\") after the steps stands for both.\n const overflow = (side: 'before' | 'after', count: number) =>\n narrow && side === 'before' ? null : narrow && side === 'after' ? (\n win.hiddenBefore + win.hiddenAfter > 0 ? (\n <Popover open={listOpen === side} onOpenChange={(o) => setListOpen(o ? side : null)}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"wf-chip-addon flex shrink-0 items-center rounded-full px-1.5 py-1 text-[11px] tabular-nums text-muted-foreground hover:bg-accent hover:text-foreground\"\n aria-label={fill(l.position, { position: win.position, total: win.total })}\n title={fill(l.position, { position: win.position, total: win.total })}\n data-testid={tid('steps-count')}\n >\n {win.position}/{win.total}\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"end\"\n className=\"max-h-[min(24rem,70vh)] w-72 overflow-y-auto p-1\"\n onOpenAutoFocus={focusCurrent}\n data-testid={tid('all-steps')}\n >\n {stepList()}\n </PopoverContent>\n </Popover>\n ) : null\n ) : count > 0 ? (\n <Popover open={listOpen === side} onOpenChange={(o) => setListOpen(o ? side : null)}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"wf-chip-addon flex shrink-0 items-center gap-0.5 rounded-full px-1.5 py-1 text-xs text-muted-foreground hover:bg-accent hover:text-foreground\"\n aria-label={fill(side === 'before' ? l.hiddenBefore : l.hiddenAfter, { count })}\n title={fill(side === 'before' ? l.hiddenBefore : l.hiddenAfter, { count })}\n data-testid={tid(`hidden-${side}`)}\n >\n <span aria-hidden>…</span>\n <span className=\"tabular-nums\">{count}</span>\n </button>\n </PopoverTrigger>\n <PopoverContent\n align={side === 'before' ? 'start' : 'end'}\n className=\"max-h-[min(24rem,70vh)] w-80 overflow-y-auto p-1\"\n onOpenAutoFocus={focusCurrent}\n data-testid={tid('all-steps')}\n >\n {stepList(side)}\n </PopoverContent>\n </Popover>\n ) : null\n\n const arrow = (dir: 'back' | 'forward') => {\n const can = dir === 'back' ? win.canBack : win.canForward\n const Icon = dir === 'back' ? ChevronLeft : ChevronRight\n return (\n <button\n type=\"button\"\n onClick={() => move(win.start + (dir === 'back' ? -1 : 1))}\n disabled={!can}\n aria-label={dir === 'back' ? l.back : l.forward}\n title={dir === 'back' ? l.back : l.forward}\n className=\"flex size-6 shrink-0 items-center justify-center rounded-full text-muted-foreground hover:bg-accent hover:text-foreground disabled:pointer-events-none disabled:opacity-30\"\n data-testid={tid(`steps-${dir}`)}\n >\n <Icon className=\"size-4\" />\n </button>\n )\n }\n\n const running = win.runningHidden\n const outOfViewChip = (s: T, kind: 'working' | 'failedStep') => (\n <ProgressChevron\n key={s.id}\n kind={kindOf(s)}\n phase={kind === 'working' ? 'running' : 'failed'}\n className=\"min-w-0 shrink\"\n >\n <StepChip\n kind={kindOf(s)}\n phase={kind === 'working' ? 'running' : 'failed'}\n label={fill(l[kind], { title: s.title })}\n labelClassName={narrow ? 'sr-only' : 'truncate'}\n onClick={() => select(s.id)}\n className=\"max-w-[14rem] shrink\"\n title={fill(l[kind], { title: s.title })}\n data-testid={tid(`${kind === 'working' ? 'working' : 'failed'}-${s.id}`)}\n />\n </ProgressChevron>\n )\n // The \"…\" counters and the host's ends are segments of the bar too.\n const segment = (node: ReactNode, key: string, kind?: string) =>\n node ? (\n <ProgressChevron key={key} kind={kind} className=\"shrink-0\">\n {node}\n </ProgressChevron>\n ) : null\n\n return (\n <nav\n ref={box}\n aria-label={l.nav}\n onKeyDown={onKeyDown}\n className={cn('flex min-w-0 items-center gap-1', className)}\n data-testid={tid('steps')}\n data-narrow={narrow || undefined}\n >\n {arrow('back')}\n <ProgressChevronBar complete={!win.canForward} className=\"min-w-0 flex-[1_1_auto]\">\n {win.start === 0 && segment(leading, 'leading', 'start')}\n {segment(overflow('before', win.hiddenBefore), 'hidden-before')}\n {win.visible.map((level) => (\n <ProgressChevron\n key={level.steps.map((s) => s.id).join('+')}\n kind={kindOf(level.primary)}\n phase={phaseOf(level.primary.id)}\n current={level.index === win.currentLevel}\n // Each level is a segment as wide as its name, the bar's spare room shared among them.\n // Short of room, the \"Working\" pills give theirs first, then the other levels' names,\n // then what follows the current name (\"Waiting for …\"), and only then is the current\n // name cut — never below a readable start. Flex shares a shortage in proportion, so\n // the other levels shrink a million times harder: even a sliver taken from the current\n // name would show an ellipsis. (The current level keeps a factor of 1: factors summing\n // under 1 would leave part of the shortage unabsorbed.)\n className={cn(\n 'min-w-[5.5rem] grow basis-auto',\n level.index === win.currentLevel ? 'shrink' : 'shrink-[1000000]'\n )}\n data-role={level.role}\n >\n {renderStep(level.primary, level, win, narrow)}\n {level.others.length > 0 && (\n <GroupChip\n level={level}\n label={fill(l.parallel, { count: level.others.length })}\n heading={l.inParallel}\n row={(s) => row(s, s.id === atId)}\n tid={tid}\n />\n )}\n {renderAfter?.(level)}\n </ProgressChevron>\n ))}\n {segment(overflow('after', win.hiddenAfter), 'hidden-after')}\n {!win.canForward && segment(trailing, 'trailing')}\n </ProgressChevronBar>\n {arrow('forward')}\n {running.length > 0 && (\n <ProgressChevronBar\n className={cn('shrink-[1000]', !narrow && 'min-w-[6.5rem]')}\n data-testid={tid('working')}\n >\n {(running.length > 2 ? running.slice(0, 1) : running).map((s) =>\n outOfViewChip(s, 'working')\n )}\n {running.length > 2 && (\n <ProgressChevron phase=\"running\" className=\"shrink-0\">\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"wf-chip-addon flex shrink-0 items-center gap-1 rounded-lg border border-border bg-card px-2 py-1 text-xs text-muted-foreground hover:text-foreground\"\n data-testid={tid('working-more')}\n >\n <Loader2 className=\"size-3.5 animate-spin\" />\n {fill(l.moreWorking, { count: running.length - 1 })}\n </button>\n </PopoverTrigger>\n <PopoverContent align=\"end\" className=\"w-72 p-1\">\n {running.slice(1).map((s) => row(s, false))}\n </PopoverContent>\n </Popover>\n </ProgressChevron>\n )}\n </ProgressChevronBar>\n )}\n {win.failedHidden.length > 0 && (\n <ProgressChevronBar\n className={cn('shrink-[1000]', !narrow && 'min-w-[6.5rem]')}\n data-testid={tid('failed')}\n >\n {win.failedHidden.map((s) => outOfViewChip(s, 'failedStep'))}\n </ProgressChevronBar>\n )}\n </nav>\n )\n}\n\n/** \"+N\": the rest of a parallel level, listed on demand. */\nfunction GroupChip<T extends StepBarStep>({\n level,\n label,\n heading,\n row,\n tid,\n}: {\n level: StepWindowLevel<T>\n label: string\n heading: string\n row: (s: T) => ReactNode\n tid: (suffix: string) => string\n}) {\n return (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"wf-chip-addon shrink-0 rounded-md border border-border bg-card px-1.5 py-0.5 text-[11px] font-medium tabular-nums text-muted-foreground shadow-sm hover:text-foreground\"\n aria-label={label}\n title={label}\n data-testid={tid(`group-${level.steps[0].id}`)}\n >\n +{level.others.length}\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className=\"w-72 p-1\"\n data-testid={tid(`group-${level.steps[0].id}-list`)}\n >\n <p className=\"px-2 py-1 text-[11px] font-medium text-muted-foreground\">{heading}</p>\n {level.steps.map(row)}\n </PopoverContent>\n </Popover>\n )\n}\n","/**\n * The runner's step parts beyond a form, an upload and an agent's answer: an action step (a\n * signature, an email draft, a tabular review), a review's fields, its send-back and what it\n * approved, the \"Waiting for <person>\" line, and \"Open in Editor\" for a tracked-changes version.\n * Everything that leaves the runner (opening a document, mail, a grid, the sign flow) goes through\n * the host's `WorkflowRunnerActions`.\n */\n\nimport { useState, type ReactNode } from 'react'\nimport {\n Check,\n Clock,\n CornerUpLeft,\n ExternalLink,\n FileText,\n Hourglass,\n Loader2,\n Mail,\n MessageSquare,\n PenLine,\n ShieldCheck,\n Table2,\n UserRound,\n X,\n} from 'lucide-react'\nimport { Button, Textarea, cn } from '@arbidocs/react/ui'\nimport { sendBackTargets, splitDocRef } from './run'\nimport { formatDate, shownValue } from './StepDocuments'\nimport type { WorkflowRunView } from './useWorkflowView'\nimport type {\n WorkflowActionStep,\n WorkflowAgentStep,\n WorkflowReviewStep,\n WorkflowStepState,\n} from './types'\n\n/** Where the runner hands off to the host. Each is optional: absent, its button is not shown. */\nexport interface WorkflowRunnerActions {\n /** Open a document, or one version of it (`doc-…@v3`). */\n openDocument?: (ref: string) => void\n /** Open the document of a signature step to sign it (the signer's turn). */\n sign?: (step: WorkflowActionStep, state: WorkflowStepState) => void\n /** Open an email step's draft in native mail. */\n openDraft?: (draftId: string, mailbox?: string) => void\n /** Open a finished tabular review's grid: its columns (labels) over its documents. */\n openReview?: (tags: string[], documents: string[]) => void\n /** Open a tracked-changes version in the Word editor, to accept or reject the changes. */\n openRedline?: (ref: string) => void\n /** Show a step's answer where it is in the thread. */\n openMessage?: (messageId: string) => void\n /** The person on screen (`usr-…`): a signature offers \"Open and sign\" to its signers only. */\n me?: string\n}\n\nexport interface WorkflowStepPartsLabels {\n waitingFor: string\n sendBack: string\n sendBackTo: string\n sendBackNote: string\n cancel: string\n sentBackHere: string\n approvedBy: string\n approvedAt: string\n approvedWhat: string\n viewAnswer: string\n fieldsHeading: string\n signers: string\n signed: string\n notSigned: string\n openAndSign: string\n decline: string\n declineNote: string\n declineConfirm: string\n declined: string\n signedVersion: string\n preparingSign: string\n expires: string\n preparingDraft: string\n draftReady: string\n openDraft: string\n emailSent: string\n reviewRunning: string\n reviewDone: string\n openReview: string\n openInEditor: string\n redlineHint: string\n someone: string\n}\n\nexport const DEFAULT_WORKFLOW_STEP_PARTS_LABELS: WorkflowStepPartsLabels = {\n waitingFor: 'Waiting for {name}',\n sendBack: 'Send back',\n sendBackTo: 'Send back to',\n sendBackNote: 'What needs to change? (optional)',\n cancel: 'Cancel',\n sentBackHere: 'This step was sent back to be done again.',\n approvedBy: 'Approved by {name}',\n approvedAt: '{date}',\n approvedWhat: 'What was approved',\n viewAnswer: 'View the answer',\n fieldsHeading: 'Recorded with the approval',\n signers: 'Signers',\n signed: 'Signed',\n notSigned: 'Not signed yet',\n openAndSign: 'Open and sign',\n decline: 'Decline',\n declineNote: 'Why are you declining? (optional)',\n declineConfirm: 'Decline to sign',\n declined: 'Declined by {name}.',\n signedVersion: 'Open the signed version',\n preparingSign: 'Preparing the signature request…',\n expires: 'Expires {date}',\n preparingDraft: 'Preparing the draft…',\n draftReady: 'The draft is ready in native mail. Check it, send it, then mark it as sent.',\n openDraft: 'Open draft',\n emailSent: 'Sent.',\n reviewRunning: 'Reviewing the documents…',\n reviewDone: 'Reviewed {docs} documents in {cols} columns.',\n openReview: 'Open the review',\n openInEditor: 'Open in Editor',\n redlineHint: 'The edits are tracked changes: accept or reject each one in Word.',\n someone: 'someone',\n}\n\nconst docName = (ref: string, nameOfDoc?: (id: string) => string | undefined) => {\n const { id, version } = splitDocRef(ref)\n const name = nameOfDoc?.(id) ?? id\n return version ? `${name} · v${version}` : name\n}\n\n/** A document version as a chip, opening it when the host can. */\nfunction DocChip({\n docRef,\n actions,\n nameOfDoc,\n testId,\n}: {\n docRef: string\n actions?: WorkflowRunnerActions\n nameOfDoc?: (id: string) => string | undefined\n testId?: string\n}) {\n const label = docName(docRef, nameOfDoc)\n const cls =\n 'inline-flex max-w-full items-center gap-1 rounded-md border border-border px-1.5 py-0.5 text-xs'\n return actions?.openDocument ? (\n <button\n type=\"button\"\n onClick={() => actions.openDocument?.(docRef)}\n className={cn(cls, 'hover:border-primary/40 hover:text-primary')}\n title={docRef}\n data-testid={testId}\n >\n <FileText className=\"size-3 shrink-0\" /> <span className=\"truncate\">{label}</span>\n </button>\n ) : (\n <span className={cls} title={docRef} data-testid={testId}>\n <FileText className=\"size-3 shrink-0\" /> <span className=\"truncate\">{label}</span>\n </span>\n )\n}\n\n/** \"Waiting for Sophie Lindqvist\" on a step a person has to do. */\nexport function AssigneeLine({\n run,\n stepId,\n l,\n testId,\n}: {\n run: WorkflowRunView\n stepId: string\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const name = run.assigneeOf(stepId)\n const phase = run.phaseOf(stepId)\n if (!name || !['ready', 'waiting', 'blocked'].includes(phase)) return null\n return (\n <p\n className=\"flex items-center gap-1.5 text-xs text-muted-foreground\"\n data-testid={`${testId}-assignee`}\n >\n <UserRound className=\"size-3.5\" /> {l.waitingFor.replace('{name}', name)}\n </p>\n )\n}\n\n/** A step reopened by a send-back says so. */\nexport function SentBackNote({\n state,\n l,\n testId,\n}: {\n state: WorkflowStepState | undefined\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n if (!state?.sentBack) return null\n return (\n <p\n className=\"flex items-center gap-1.5 rounded-md bg-amber-500/10 px-2 py-1 text-xs text-amber-700 dark:text-amber-300\"\n data-testid={`${testId}-sent-back`}\n >\n <CornerUpLeft className=\"size-3.5\" /> {l.sentBackHere}\n </p>\n )\n}\n\n/** \"Send back\" on a ready step: pick the earlier step to redo and say what needs to change. */\nexport function SendBackControl({\n run,\n step,\n l,\n testId,\n}: {\n run: WorkflowRunView\n step: WorkflowReviewStep\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const states = Object.fromEntries(\n run.steps.map((s) => [s.id, run.stateOf(s.id) ?? { status: 'pending' as const }])\n )\n const targets = sendBackTargets(run.steps, states, step.id)\n const [open, setOpen] = useState(false)\n const [to, setTo] = useState(targets[0]?.id ?? '')\n const [note, setNote] = useState('')\n if (!run.sendBack || run.phaseOf(step.id) !== 'ready' || targets.length === 0) return null\n if (!open)\n return (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setOpen(true)}\n disabled={run.busy}\n data-testid={`${testId}-send-back`}\n >\n <CornerUpLeft className=\"size-4\" /> {l.sendBack}\n </Button>\n )\n const target = targets.some((t) => t.id === to) ? to : targets[0].id\n return (\n <div\n className=\"space-y-2 rounded-md border border-border p-3\"\n data-testid={`${testId}-send-back-form`}\n >\n <label className=\"block space-y-1 text-xs font-medium\">\n {l.sendBackTo}\n <select\n className=\"flex h-8 w-full rounded-md border border-input bg-background px-2 text-sm\"\n value={target}\n onChange={(e) => setTo(e.target.value)}\n data-testid={`${testId}-send-back-to`}\n >\n {targets.map((t) => (\n <option key={t.id} value={t.id}>\n {t.title}\n </option>\n ))}\n </select>\n </label>\n <Textarea\n rows={3}\n value={note}\n placeholder={l.sendBackNote}\n aria-label={l.sendBackNote}\n onChange={(e) => setNote(e.target.value)}\n data-testid={`${testId}-send-back-note`}\n />\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setOpen(false)}>\n {l.cancel}\n </Button>\n <Button\n size=\"sm\"\n disabled={run.busy}\n onClick={() => void run.sendBack?.(step.id, target, note.trim() || undefined)}\n data-testid={`${testId}-send-back-confirm`}\n >\n <CornerUpLeft className=\"size-4\" /> {l.sendBack}\n </Button>\n </div>\n </div>\n )\n}\n\n/** What a completed review recorded: who approved, the answers and versions, the fields. */\nexport function ApprovalEvidence({\n run,\n step,\n actions,\n nameOfDoc,\n l,\n testId,\n}: {\n run: WorkflowRunView\n step: WorkflowReviewStep\n actions?: WorkflowRunnerActions\n nameOfDoc?: (id: string) => string | undefined\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const state = run.stateOf(step.id)\n if (state?.status !== 'done') return null\n const approver = state.by ? (run.nameOf?.(state.by) ?? l.someone) : undefined\n const evidence = state.approved ?? []\n const titleOf = (id: string) => run.steps.find((s) => s.id === id)?.title ?? id\n return (\n <div className=\"space-y-2 rounded-md bg-muted/40 p-3\" data-testid={`${testId}-evidence`}>\n <p className=\"flex flex-wrap items-center gap-1.5 text-sm font-medium\">\n <ShieldCheck className=\"size-4 text-primary\" />\n {approver ? l.approvedBy.replace('{name}', approver) : null}\n {state.at && (\n <span className=\"text-xs font-normal text-muted-foreground\">\n {l.approvedAt.replace('{date}', formatDate(state.at))}\n </span>\n )}\n </p>\n {evidence.length > 0 && (\n <div className=\"space-y-1.5\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {l.approvedWhat}\n </p>\n {evidence.map((e) => (\n <div\n key={e.step}\n className=\"flex flex-wrap items-center gap-1.5 text-xs\"\n data-testid={`${testId}-evidence-${e.step}`}\n >\n <span className=\"font-medium\">{titleOf(e.step)}</span>\n {e.response_id &&\n (actions?.openMessage ? (\n <button\n type=\"button\"\n onClick={() => actions.openMessage?.(e.response_id as string)}\n className=\"inline-flex items-center gap-1 text-primary hover:underline\"\n data-testid={`${testId}-evidence-${e.step}-answer`}\n >\n <MessageSquare className=\"size-3\" /> {l.viewAnswer}\n </button>\n ) : null)}\n {(e.documents ?? []).map((d) => (\n <DocChip key={d} docRef={d} actions={actions} nameOfDoc={nameOfDoc} />\n ))}\n </div>\n ))}\n </div>\n )}\n {(step.fields ?? []).length > 0 && (\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5 text-xs\">\n {(step.fields ?? []).map((f) => (\n <div key={f.name} className=\"contents\">\n <dt className=\"text-muted-foreground\">{f.label}</dt>\n <dd data-testid={`${testId}-evidence-field-${f.name}`}>\n {shownValue(run.inputs[f.name], f, run.nameOf)}\n </dd>\n </div>\n ))}\n </dl>\n )}\n </div>\n )\n}\n\n/** \"Open in Editor\" for an agent step that edited a document with tracked changes. */\nexport function RedlineOpen({\n step,\n state,\n actions,\n l,\n testId,\n}: {\n step: WorkflowAgentStep\n state: WorkflowStepState | undefined\n actions?: WorkflowRunnerActions\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const version = state?.status === 'done' ? state.documents?.[0] : undefined\n if (!step.editDocument || !version || !actions?.openRedline) return null\n return (\n <div className=\"flex flex-wrap items-center gap-2\" data-testid={`${testId}-redline`}>\n <Button\n size=\"sm\"\n onClick={() => actions.openRedline?.(version)}\n data-testid={`${testId}-open-word`}\n >\n <FileText className=\"size-4\" /> {l.openInEditor}\n </Button>\n <span className=\"text-xs text-muted-foreground\">{l.redlineHint}</span>\n </div>\n )\n}\n\n/** A platform action step: where it is, and what its person can do now. */\nexport function ActionStepBody({\n step,\n run,\n actions,\n nameOfDoc,\n heading,\n l,\n testId,\n}: {\n step: WorkflowActionStep\n run: WorkflowRunView\n actions?: WorkflowRunnerActions\n nameOfDoc?: (id: string) => string | undefined\n heading: ReactNode\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const state = run.stateOf(step.id)\n const phase = run.phaseOf(step.id)\n // On its way: running, or ready with a run under way to start it (else it waits for Start).\n const underWay = phase === 'running' || (phase === 'ready' && !run.needsStart)\n const name = (id: string) => run.nameOf?.(id) ?? id\n const [declining, setDeclining] = useState(false)\n const [note, setNote] = useState('')\n const a = step.action\n const working = (text: string) => (\n <p\n className=\"flex items-center gap-2 text-sm text-muted-foreground\"\n data-testid={`${testId}-working`}\n >\n <Loader2 className=\"size-4 animate-spin\" /> {text}\n </p>\n )\n\n let body: ReactNode = null\n if (a.type === 'sign') {\n const waiting = state?.waiting\n const signers = waiting?.signers ?? []\n const signed = new Set(waiting?.signed ?? [])\n const mine = !actions?.me || (signers.includes(actions.me) && !signed.has(actions.me))\n const signedRef = state?.status === 'done' ? state.documents?.[0] : undefined\n body = (\n <>\n {underWay && working(l.preparingSign)}\n {phase === 'waiting' && waiting?.doc_ext_id && (\n <DocChip\n docRef={`${waiting.doc_ext_id}${waiting.version ? `@v${waiting.version}` : ''}`}\n actions={actions}\n nameOfDoc={nameOfDoc}\n testId={`${testId}-document`}\n />\n )}\n {signers.length > 0 && (\n <div className=\"space-y-1\" data-testid={`${testId}-signers`}>\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {l.signers}\n </p>\n {signers.map((id) => (\n <p\n key={id}\n className=\"flex items-center gap-2 text-sm\"\n data-signed={signed.has(id) || undefined}\n data-testid={`${testId}-signer-${id}`}\n >\n {signed.has(id) ? (\n <Check className=\"size-3.5 text-primary\" />\n ) : (\n <Hourglass className=\"size-3.5 text-muted-foreground\" />\n )}\n <span className=\"font-medium\">{name(id)}</span>\n <span className=\"text-xs text-muted-foreground\">\n {signed.has(id) ? l.signed : l.notSigned}\n </span>\n </p>\n ))}\n </div>\n )}\n {waiting?.expires_at && phase === 'waiting' && (\n <p className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Clock className=\"size-3.5\" />{' '}\n {l.expires.replace('{date}', formatDate(waiting.expires_at))}\n </p>\n )}\n {phase === 'waiting' && mine && !declining && (\n <div className=\"flex flex-wrap gap-2\">\n {actions?.sign && state && (\n <Button\n size=\"sm\"\n onClick={() => actions.sign?.(step, state)}\n data-testid={`${testId}-open-sign`}\n >\n <PenLine className=\"size-4\" /> {l.openAndSign}\n </Button>\n )}\n {run.decline && (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => setDeclining(true)}\n data-testid={`${testId}-decline`}\n >\n <X className=\"size-4\" /> {l.decline}\n </Button>\n )}\n </div>\n )}\n {declining && (\n <div className=\"space-y-2\" data-testid={`${testId}-decline-form`}>\n <Textarea\n rows={2}\n value={note}\n placeholder={l.declineNote}\n aria-label={l.declineNote}\n onChange={(e) => setNote(e.target.value)}\n data-testid={`${testId}-decline-note`}\n />\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setDeclining(false)}>\n {l.cancel}\n </Button>\n <Button\n size=\"sm\"\n variant=\"destructive\"\n disabled={run.busy}\n onClick={async () => {\n await run.decline?.(step.id, note.trim() || undefined)\n setDeclining(false)\n }}\n data-testid={`${testId}-decline-confirm`}\n >\n {l.declineConfirm}\n </Button>\n </div>\n </div>\n )}\n {phase === 'failed' && state?.declinedBy && (\n <p className=\"text-sm text-destructive\" data-testid={`${testId}-declined`}>\n {l.declined.replace('{name}', name(state.declinedBy))}\n </p>\n )}\n {signedRef && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {actions?.openDocument ? (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => actions.openDocument?.(signedRef)}\n data-testid={`${testId}-signed-version`}\n >\n <ExternalLink className=\"size-4\" /> {l.signedVersion}\n </Button>\n ) : (\n <DocChip docRef={signedRef} nameOfDoc={nameOfDoc} />\n )}\n </div>\n )}\n </>\n )\n } else if (a.type === 'email_draft') {\n const draftId =\n state?.waiting?.draft_id ??\n (typeof state?.output?.draft_id === 'string' ? state.output.draft_id : undefined)\n body = (\n <>\n {underWay && working(l.preparingDraft)}\n {phase === 'waiting' && <p className=\"text-sm text-muted-foreground\">{l.draftReady}</p>}\n {phase === 'done' && (\n <p className=\"flex items-center gap-1.5 text-sm\" data-testid={`${testId}-sent`}>\n <Check className=\"size-4 text-primary\" /> {l.emailSent}\n </p>\n )}\n {draftId && actions?.openDraft && phase !== 'done' && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => actions.openDraft?.(draftId, state?.waiting?.mailbox)}\n data-testid={`${testId}-open-draft`}\n >\n <Mail className=\"size-4\" /> {l.openDraft}\n </Button>\n )}\n </>\n )\n } else {\n const tags = (state?.output?.tag_ext_ids as string[] | undefined) ?? a.tags\n const docs = (state?.output?.doc_ext_ids as string[] | undefined) ?? []\n body = (\n <>\n {underWay && working(l.reviewRunning)}\n {phase === 'done' && (\n <>\n <p className=\"text-sm text-muted-foreground\" data-testid={`${testId}-reviewed`}>\n {l.reviewDone\n .replace('{docs}', String(docs.length))\n .replace('{cols}', String(tags.length))}\n </p>\n {actions?.openReview && (\n <Button\n size=\"sm\"\n onClick={() => actions.openReview?.(tags, docs)}\n data-testid={`${testId}-open-review`}\n >\n <Table2 className=\"size-4\" /> {l.openReview}\n </Button>\n )}\n </>\n )}\n </>\n )\n }\n\n return (\n <div className=\"space-y-3\">\n {heading}\n <SentBackNote state={state} l={l} testId={testId} />\n <AssigneeLine run={run} stepId={step.id} l={l} testId={testId} />\n {body}\n {phase === 'failed' && !state?.declinedBy && (\n <p className=\"text-sm text-destructive\" data-testid={`${testId}-failed`}>\n {state?.error || ''}\n </p>\n )}\n </div>\n )\n}\n","/**\n * The run's stepper: where you are, what is done, what is next and what is still running. It\n * names the previous, current and next steps of the graph (`StepBarFrame` over `stepLevels`); the\n * rest is a click away (‹ ›, \"…\"), a parallel level is one step plus a \"+N\" chip, and a running\n * step out of view shows as \"Working: <title>\". The run's completion is the last step.\n */\n\nimport type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport type { WorkflowStepPhase } from './run'\nimport type { WorkflowRunView } from './useWorkflowView'\nimport type { WorkflowStep } from './types'\nimport {\n DEFAULT_STEP_BAR_LABELS,\n STEP_EXTRA,\n STEP_LABEL,\n STEP_LABEL_MAX,\n STEP_LABEL_CURRENT,\n StepBarFrame,\n type StepBarLabels,\n} from './StepBarFrame'\nimport { StepChip } from './StepChip'\nimport { DEFAULT_STEP_KIND_LABELS, STEP_KIND_ICONS, stepKindOf } from './stepKinds'\n\n/** The completion marker's id in the bar (not a step of the plan). */\nconst DONE = '__done'\n\nexport interface WorkflowStepBarProps {\n run: WorkflowRunView\n levels: WorkflowStep[][]\n doneTitle: string\n doneIcon?: ReactNode\n icon: (key?: string) => ReactNode\n tid: (suffix: string) => string\n labels?: Partial<StepBarLabels>\n}\n\nexport function WorkflowStepBar({\n run,\n levels,\n doneTitle,\n doneIcon,\n icon,\n tid,\n labels,\n}: WorkflowStepBarProps) {\n const l = { ...DEFAULT_STEP_BAR_LABELS, ...labels }\n const done = { id: DONE, title: doneTitle } as WorkflowStep\n const phaseOf = (id: string): WorkflowStepPhase =>\n id === DONE ? (run.isComplete ? 'done' : 'blocked') : run.phaseOf(id)\n const current = run.isComplete ? DONE : run.current\n\n const pill = (s: WorkflowStep) => {\n const phase = phaseOf(s.id)\n const isCurrent = s.id === current\n // Who it waits for, on a step that is theirs to do now.\n const assignee = ['ready', 'waiting'].includes(phase) ? run.assigneeOf(s.id) : undefined\n const waiting = assignee ? l.waitingFor.replace('{name}', assignee) : undefined\n // A failure says why on the pill's tooltip (and so does a step skipped after failing).\n const state = s.id === DONE ? undefined : run.stateOf(s.id)\n const failure =\n (phase === 'failed' || state?.skippedAfterFailure) && state?.error\n ? `${l.phases.failed}: ${state.error}`\n : undefined\n const title = [s.title, waiting, failure].filter(Boolean).join(' · ')\n const name = `${title} (${l.phases[phase]})`\n if (s.id === DONE)\n return (\n <StepChip\n inert\n kind=\"start\"\n phase={run.isComplete ? 'done' : 'ready'}\n icon={doneIcon}\n label={doneTitle}\n labelClassName={cn(STEP_LABEL, STEP_LABEL_MAX)}\n current={isCurrent}\n aria-label={name}\n title={doneTitle}\n data-testid={tid('step-done')}\n />\n )\n const kind = stepKindOf(s)\n const KindIcon = STEP_KIND_ICONS[kind]\n return (\n <StepChip\n kind={kind}\n phase={phase}\n icon={icon(s.icon) ?? <KindIcon />}\n label={s.title}\n current={isCurrent}\n heading={DEFAULT_STEP_KIND_LABELS[kind]}\n labelClassName={isCurrent ? STEP_LABEL_CURRENT : cn(STEP_LABEL, STEP_LABEL_MAX)}\n labelTestId={tid(`step-${s.id}-label`)}\n onClick={() => run.goTo(s.id)}\n disabled={run.busy}\n className=\"disabled:cursor-default\"\n aria-label={name}\n title={title}\n data-testid={tid(`step-${s.id}`)}\n >\n {assignee && isCurrent && (\n <span\n className={cn(STEP_EXTRA, 'max-w-[12rem]')}\n data-testid={tid(`step-${s.id}-assignee`)}\n >\n · {waiting}\n </span>\n )}\n </StepChip>\n )\n }\n\n return (\n <StepBarFrame\n levels={[...levels, [done]]}\n phaseOf={phaseOf}\n current={current}\n onSelect={(id) => id !== DONE && run.goTo(id)}\n isSelectable={(id) => id !== DONE}\n renderStep={(s) => pill(s)}\n icon={(s) => (s.id === DONE ? doneIcon : icon(s.icon))}\n kindOf={(s) => (s.id === DONE ? 'start' : stepKindOf(s))}\n disabled={run.busy}\n labels={labels}\n tid={tid}\n className=\"w-full\"\n />\n )\n}\n","/**\n * A stepped workflow run, end to end: the stepper, the step in view (a form, an upload, an agent\n * step or a review) and moving on. The stepper lays the graph out by depth: a sequence is one row,\n * steps side by side stack in a column. The run comes from `useWorkflowThread` (a thread on the\n * server) or `useWorkflowPreview`; wording and the agent output's rendering come from the host.\n */\n\nimport { useEffect, useRef, useState, type ReactNode } from 'react'\nimport {\n AlertTriangle,\n ArrowLeft,\n ArrowRight,\n Check,\n CheckCircle2,\n FileText,\n GitBranch,\n Hourglass,\n Loader2,\n RotateCw,\n X,\n} from 'lucide-react'\nimport { Button, Card, cn } from '@arbidocs/react/ui'\nimport { UploadDropzone } from '../../files/UploadDropzone'\nimport { SchemaForm, type SchemaFormProps } from './SchemaForm'\nimport {\n isPersonStep,\n reviewInstructions,\n splitDocRef,\n stepDependencies,\n stepLevels,\n waitingDocuments,\n} from './run'\nimport { WorkflowStepBar } from './WorkflowStepBar'\nimport {\n ActionStepBody,\n ApprovalEvidence,\n AssigneeLine,\n DEFAULT_WORKFLOW_STEP_PARTS_LABELS,\n RedlineOpen,\n SendBackControl,\n SentBackNote,\n type WorkflowRunnerActions,\n type WorkflowStepPartsLabels,\n} from './StepParts'\nimport type { WorkflowRunView } from './useWorkflowView'\nimport type {\n WorkflowAgentStep,\n WorkflowDefinition,\n WorkflowReviewStep,\n WorkflowStep,\n WorkflowStepState,\n WorkflowUploadStep,\n} from './types'\n\nexport interface WorkflowRunnerLabels {\n back: string\n next: string\n /** Skips the step in view (any unfinished step: the plan guides the thread, it does not hold it). */\n skipStep: string\n finish: string\n approve: string\n working: string\n /** An agent step under way: `{step}` is its title, `{elapsed}` how long it has run (m:ss). */\n stepWorking: string\n /** An agent step about to start (the run will pick it up). */\n starting: string\n /** The primary button on a ready agent or action step nothing has started (no run under way). */\n start: string\n /** A ready agent or action step not started yet, waiting for Start. */\n notStarted: string\n retry: string\n failed: string\n /** A step waiting on one that failed; `{step}` is its title, `{error}` why it failed. */\n upstreamFailed: string\n /** A step going on without one that failed and was skipped; `{step}` and `{error}` as above. */\n upstreamSkippedAfterFailure: string\n /** A skipped step that had failed; `{error}` is why. */\n skippedAfterFailure: string\n /** A step whose dependencies have not finished; `{steps}` is replaced with their titles. */\n blocked: string\n awaitingReview: string\n approved: string\n skipped: string\n /** An agent step that runs off the main line and delivers its result to it. */\n branch: string\n /** The default finish heading (the workflow's `completion.title` wins). */\n complete: string\n restart: string\n /** The upload step's list of what else the workspace holds (folded); `{count}` is replaced. */\n filesHeading: string\n /** The upload step's list of the files added on it in this run; `{count}` is replaced. */\n addedHeading: string\n noFiles: string\n /** A file's processing status on the upload step. */\n fileReading: string\n fileReady: string\n fileFailed: string\n /** Continue on an upload step while its files are read; `{current}` and `{count}` are replaced. */\n readingFiles: string\n /** Continue on an upload step while its files are sent; `{count}` is replaced (more than one). */\n uploadingFiles: string\n uploadingFile: string\n /** Continue while the host is uploading files it does not list one by one. */\n uploadingAny: string\n /** Continue on an upload step with files that did not upload; `{count}` is replaced (more than one). */\n uploadsFailed: string\n uploadFailed: string\n /** A file's row while it is sent, and when it did not upload (its error follows). */\n fileUploading: string\n fileUploadFailed: string\n retryUpload: string\n removeUpload: string\n /**\n * An agent step waiting for documents to finish processing before its turn starts; `{count}` is\n * replaced (more than one).\n */\n waitingForDocuments: string\n waitingForDocument: string\n /** The primary button on an email step waiting to be sent. */\n markSent: string\n}\n\nexport const DEFAULT_WORKFLOW_RUNNER_LABELS: WorkflowRunnerLabels = {\n back: 'Back',\n next: 'Continue',\n skipStep: 'Skip this step',\n finish: 'Finish',\n approve: 'Approve',\n working: 'Working…',\n stepWorking: '{step}… {elapsed}',\n starting: 'Starting…',\n start: 'Start',\n notStarted: 'Not started yet. Press Start to run this step.',\n retry: 'Retry',\n failed: 'This step did not finish.',\n upstreamFailed: '“{step}” failed{error}. Retry it before this step can go on.',\n upstreamSkippedAfterFailure:\n '“{step}” failed{error} and was skipped: this step goes on without its result.',\n skippedAfterFailure: 'Skipped after it failed{error}.',\n blocked: 'Starts after {steps}.',\n awaitingReview: 'Waiting for approval.',\n approved: 'Approved.',\n skipped: 'Skipped.',\n branch: 'Runs alongside; its result joins the thread',\n complete: 'Done',\n restart: 'Start again',\n filesHeading: 'Already in the workspace ({count})',\n addedHeading: 'Added for this step ({count})',\n noFiles: 'No files yet.',\n fileReading: 'Reading…',\n fileReady: 'Ready',\n fileFailed: 'Could not be read',\n readingFiles: 'Reading {current} of {count} files…',\n uploadingFiles: 'Uploading {count} files…',\n uploadingFile: 'Uploading 1 file…',\n uploadingAny: 'Uploading…',\n uploadsFailed: 'Retry or remove the {count} files that did not upload',\n uploadFailed: 'Retry or remove the file that did not upload',\n fileUploading: 'Uploading…',\n fileUploadFailed: 'Did not upload',\n retryUpload: 'Retry',\n removeUpload: 'Remove',\n waitingForDocuments: 'Waiting for {count} documents to finish processing',\n waitingForDocument: 'Waiting for 1 document to finish processing',\n markSent: 'Mark as sent',\n}\n\n/** A file the upload step lists (what is in the run's workspace). */\nexport interface WorkflowRunnerFile {\n id: string\n name: string\n /**\n * Where it is: still being sent (`uploading`; no document yet), not sent (`upload-failed`, with\n * `error`), being read (`processing`), `ready`, or not readable (`failed`). Absent = not known.\n */\n status?: 'uploading' | 'upload-failed' | 'processing' | 'ready' | 'failed'\n /** Why it did not upload (`upload-failed`). */\n error?: string\n /** The upload step it was added on in this run (listed first there, and holds it while read). */\n addedFor?: string\n}\n\nexport interface WorkflowRunnerProps extends Pick<SchemaFormProps, 'renderIcon' | 'people'> {\n workflow: WorkflowDefinition\n run: WorkflowRunView\n /** An agent step's output (its answer, a drafted document). */\n renderAgentOutput: (step: WorkflowAgentStep, state: WorkflowStepState | undefined) => ReactNode\n /** A review's extras while it waits (e.g. who to ask). */\n renderReview?: (step: WorkflowReviewStep) => ReactNode\n /** Upload step: the host performs the upload into the run's workspace. */\n onUpload?: (files: File[], step: WorkflowUploadStep) => void | Promise<void>\n /**\n * The host is uploading files (the step cannot be completed until they are back). A host that\n * lists them one by one (`files` with `uploading` / `upload-failed`) need not set it.\n */\n uploading?: boolean\n /** What the run's workspace holds, listed on the upload step. */\n files?: WorkflowRunnerFile[]\n /** A file that did not upload: send it again. Absent: no retry. */\n onRetryUpload?: (file: WorkflowRunnerFile) => void\n /** A file that did not upload: drop it, so the step can go on without it. */\n onRemoveUpload?: (file: WorkflowRunnerFile) => void\n /** Replaces the finish screen. */\n renderComplete?: (run: WorkflowRunView) => ReactNode\n /** Leave out the stepper (the host shows it elsewhere, e.g. above the run's thread). */\n hideStepBar?: boolean\n /** A narrow panel beside a thread: tighter cards, the full width they are given. */\n compact?: boolean\n /** Where the runner hands off to the host: documents, the sign flow, mail, a review grid. */\n actions?: WorkflowRunnerActions\n /** A document's name by id (chips show it instead of the id). */\n nameOfDoc?: (id: string) => string | undefined\n labels?: Partial<WorkflowRunnerLabels>\n /** The wording of action steps, assignees, send-backs and approvals. */\n partsLabels?: Partial<WorkflowStepPartsLabels>\n /**\n * Test ids: `<prefix>-step-<id>` (pill), `<prefix>-<id>` (body), `<prefix>-field-<name>`,\n * `<prefix>-next` / `-back`, `<prefix>-done`.\n */\n testIdPrefix?: string\n className?: string\n}\n\nexport function WorkflowRunner({\n workflow,\n run,\n renderAgentOutput,\n renderReview,\n onUpload,\n uploading = false,\n files,\n onRetryUpload,\n onRemoveUpload,\n renderComplete,\n renderIcon,\n people,\n actions,\n nameOfDoc,\n hideStepBar,\n compact,\n labels,\n partsLabels,\n testIdPrefix = 'workflow-run',\n className,\n}: WorkflowRunnerProps) {\n const l = { ...DEFAULT_WORKFLOW_RUNNER_LABELS, ...labels }\n const pl = { ...DEFAULT_WORKFLOW_STEP_PARTS_LABELS, ...partsLabels }\n // A step's card: a readable column on its own, the panel's width beside a thread.\n const box = compact ? 'p-4' : 'max-w-2xl p-6'\n const { steps, step, isComplete, action } = run\n const completion = workflow.run.kind === 'steps' ? workflow.run.completion : undefined\n const tid = (suffix: string) => `${testIdPrefix}-${suffix}`\n const levels = stepLevels(steps)\n const icon = (key?: string) => (key && renderIcon ? renderIcon(key) : undefined)\n\n // An upload step's files are read before the run goes on (it can still be skipped).\n const added = step?.kind === 'upload' ? (files ?? []).filter((f) => f.addedFor === step.id) : []\n const unread = added.filter((f) => f.status === 'processing').length\n const reading = action === 'complete' && unread > 0\n // Nor does it go on while its files are being sent: completing records the files it took, and a\n // file still on its way has no document yet. One that did not upload is retried or removed first.\n const sending = added.filter((f) => f.status === 'uploading').length\n const unsent = added.filter((f) => f.status === 'upload-failed').length\n const uploadHold = step?.kind === 'upload' && (sending > 0 || uploading || unsent > 0)\n\n // An agent step whose turn waits for documents to finish processing is on its way, too.\n const docsWait = !!step && waitingDocuments(run.stateOf(step.id)).length > 0\n\n const nextLabel = sending\n ? sending === 1\n ? l.uploadingFile\n : l.uploadingFiles.replace('{count}', String(sending))\n : uploadHold && uploading\n ? l.uploadingAny\n : uploadHold\n ? unsent === 1\n ? l.uploadFailed\n : l.uploadsFailed.replace('{count}', String(unsent))\n : reading\n ? l.readingFiles\n .replace('{current}', String(Math.min(added.length - unread + 1, added.length)))\n .replace('{count}', String(added.length))\n : action === 'start'\n ? l.start\n : action === 'retry'\n ? l.retry\n : action === 'finish'\n ? l.finish\n : action === 'complete' && step?.kind === 'review'\n ? l.approve\n : action === 'complete' && step?.kind === 'action'\n ? l.markSent\n : action === 'wait' && (run.isRunning || run.busy || docsWait)\n ? l.working\n : ((step && !run.isLocked(step.id) ? step.nextLabel : undefined) ?? l.next)\n\n return (\n <div className={cn(compact ? 'space-y-3' : 'space-y-6', className)} data-testid={testIdPrefix}>\n {!hideStepBar && (\n <WorkflowStepBar\n run={run}\n levels={levels}\n doneTitle={completion?.title ?? l.complete}\n doneIcon={icon(completion?.icon)}\n icon={icon}\n tid={tid}\n />\n )}\n\n {isComplete ? (\n (renderComplete?.(run) ?? (\n <Card className=\"mx-auto max-w-lg p-8 text-center\" data-testid={tid('done')}>\n <CheckCircle2 className=\"mx-auto size-12 text-primary\" />\n <h2 className=\"mt-4 text-xl font-semibold\">{completion?.title ?? l.complete}</h2>\n {completion?.description && (\n <p className=\"mt-1 text-sm text-muted-foreground\">{completion.description}</p>\n )}\n <Button\n variant=\"outline\"\n className=\"mt-6\"\n onClick={run.restart}\n data-testid={tid('restart')}\n >\n {l.restart}\n </Button>\n </Card>\n ))\n ) : step ? (\n <div key={step.id} className=\"space-y-3\">\n <StepNotices run={run} step={step} l={l} tid={tid} />\n {run.phaseOf(step.id) === 'blocked' ? (\n <Card className={cn(box, 'p-6')} data-testid={tid(step.id)}>\n <p className=\"text-sm text-muted-foreground\" data-testid={tid(`${step.id}-blocked`)}>\n {l.blocked.replace(\n '{steps}',\n stepDependencies(steps, step.id)\n .map((d) => steps.find((s) => s.id === d)?.title ?? d)\n .join(', ')\n )}\n </p>\n </Card>\n ) : step.kind === 'form' ? (\n <Card className={cn(box, 'space-y-4')} data-testid={tid(step.id)}>\n <StepHeading step={step} icon={icon(step.icon)} testId={tid(`${step.id}-title`)} />\n <SentBackNote state={run.stateOf(step.id)} l={pl} testId={tid(step.id)} />\n <AssigneeLine run={run} stepId={step.id} l={pl} testId={tid(step.id)} />\n <fieldset disabled={run.isLocked(step.id)} className=\"contents\">\n <SchemaForm\n fields={step.inputs}\n values={run.inputs}\n onChange={run.setInput}\n errors={run.errors}\n renderIcon={renderIcon}\n people={people}\n onEnterSubmit={() => void run.next()}\n testIdPrefix={tid('field')}\n />\n </fieldset>\n {run.actionError && (\n <p className=\"text-sm text-destructive\" data-testid={tid('action-error')}>\n {run.actionError}\n </p>\n )}\n </Card>\n ) : step.kind === 'upload' ? (\n <Card className={cn(box, 'space-y-4')} data-testid={tid(step.id)}>\n <SentBackNote state={run.stateOf(step.id)} l={pl} testId={tid(step.id)} />\n <AssigneeLine run={run} stepId={step.id} l={pl} testId={tid(step.id)} />\n <>\n <UploadDropzone\n onFiles={(picked) => void onUpload?.(picked, step)}\n uploading={uploading}\n disabled={!onUpload}\n accept={step.accept}\n title={step.title}\n description={step.description}\n hint={step.hint}\n testId={tid(`${step.id}-drop`)}\n />\n {files && (\n <UploadFiles\n onRetry={onRetryUpload}\n onRemove={onRemoveUpload}\n added={added}\n others={files.filter((f) => f.addedFor !== step.id)}\n l={l}\n testId={tid(`${step.id}-files`)}\n />\n )}\n </>\n {run.actionError && <p className=\"text-sm text-destructive\">{run.actionError}</p>}\n </Card>\n ) : step.kind === 'review' ? (\n <Card className={cn(box, 'space-y-4')} data-testid={tid(step.id)}>\n <StepHeading step={step} icon={icon(step.icon)} />\n <SentBackNote state={run.stateOf(step.id)} l={pl} testId={tid(step.id)} />\n <p className=\"whitespace-pre-line text-sm text-muted-foreground\">\n {reviewInstructions(step, run.inputs)}\n </p>\n <AssigneeLine run={run} stepId={step.id} l={pl} testId={tid(step.id)} />\n {/* A recorded approval says who approved below; without one, the status says it. */}\n {!(run.phaseOf(step.id) === 'done' && run.stateOf(step.id)?.by) && (\n <p className=\"text-sm\" data-testid={tid(`${step.id}-status`)}>\n {run.phaseOf(step.id) === 'done'\n ? l.approved\n : run.phaseOf(step.id) === 'skipped'\n ? l.skipped\n : l.awaitingReview}\n </p>\n )}\n {(step.fields ?? []).length > 0 && run.phaseOf(step.id) === 'ready' && (\n <SchemaForm\n fields={step.fields ?? []}\n values={run.inputs}\n onChange={run.setInput}\n errors={run.errors}\n renderIcon={renderIcon}\n people={people}\n testIdPrefix={tid('field')}\n />\n )}\n <ApprovalEvidence\n run={run}\n step={step}\n actions={actions}\n nameOfDoc={nameOfDoc}\n l={pl}\n testId={tid(step.id)}\n />\n {run.phaseOf(step.id) === 'ready' && renderReview?.(step)}\n <SendBackControl run={run} step={step} l={pl} testId={tid(step.id)} />\n {run.actionError && <p className=\"text-sm text-destructive\">{run.actionError}</p>}\n </Card>\n ) : step.kind === 'action' ? (\n <Card className={cn(box, 'space-y-4')} data-testid={tid(step.id)}>\n <ActionStepBody\n step={step}\n run={run}\n actions={actions}\n nameOfDoc={nameOfDoc}\n heading={<StepHeading step={step} icon={icon(step.icon)} />}\n l={pl}\n testId={tid(step.id)}\n />\n {run.actionError && <p className=\"text-sm text-destructive\">{run.actionError}</p>}\n </Card>\n ) : (\n <AgentStepBody\n step={step}\n run={run}\n renderAgentOutput={renderAgentOutput}\n icon={icon(step.icon)}\n compact={compact}\n nameOfDoc={nameOfDoc}\n extra={\n <>\n <SentBackNote state={run.stateOf(step.id)} l={pl} testId={tid(step.id)} />\n <RedlineOpen\n step={step}\n state={run.stateOf(step.id)}\n actions={actions}\n l={pl}\n testId={tid(step.id)}\n />\n </>\n }\n l={l}\n tid={tid}\n />\n )}\n </div>\n ) : null}\n\n {!isComplete && (\n <div\n className={cn(\n 'flex items-center justify-between border-t border-border pt-4',\n compact && 'flex-wrap gap-2 pt-3'\n )}\n >\n <Button\n variant=\"ghost\"\n onClick={run.back}\n disabled={!run.canBack}\n data-testid={tid('back')}\n >\n <ArrowLeft className=\"size-4\" /> {l.back}\n </Button>\n <div\n className={cn('flex items-center gap-2', compact && 'ml-auto flex-wrap justify-end')}\n >\n {step &&\n // A step that commits (creates the matter, starts the thread) is what the run stands on.\n !step.commit &&\n ['ready', 'blocked', 'failed'].includes(run.phaseOf(step.id)) && (\n <Button\n variant=\"ghost\"\n onClick={() => void run.skip(step.id)}\n disabled={run.busy}\n data-testid={tid('skip-step')}\n >\n {l.skipStep}\n </Button>\n )}\n <Button\n onClick={() => void run.next()}\n disabled={action === 'wait' || reading || uploadHold}\n data-testid={tid('next')}\n >\n {nextLabel}\n {reading ||\n (uploadHold && unsent === 0) ||\n (action === 'wait' && (run.isRunning || run.busy || docsWait)) ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <ArrowRight className=\"size-4\" />\n )}\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n}\n\n/** What the upload step lists: this step's files first, with their status; the rest folded. */\nfunction UploadFiles({\n added,\n others,\n onRetry,\n onRemove,\n l,\n testId,\n}: {\n added: WorkflowRunnerFile[]\n others: WorkflowRunnerFile[]\n onRetry?: (file: WorkflowRunnerFile) => void\n onRemove?: (file: WorkflowRunnerFile) => void\n l: WorkflowRunnerLabels\n testId: string\n}) {\n const heading = 'text-xs font-semibold uppercase tracking-wide text-muted-foreground'\n const row = (f: WorkflowRunnerFile) => (\n <div\n key={f.id}\n className=\"flex items-center gap-2 text-sm text-muted-foreground\"\n data-status={f.status}\n data-testid={`${testId}-file-${f.id}`}\n >\n <FileText className=\"size-3.5 shrink-0 text-primary\" />\n <span className=\"min-w-0 flex-1 truncate\" title={f.name}>\n {f.name}\n </span>\n {f.status === 'uploading' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs\">\n <Loader2 className=\"size-3 animate-spin\" /> {l.fileUploading}\n </span>\n )}\n {f.status === 'upload-failed' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs text-destructive\" role=\"alert\">\n <AlertTriangle className=\"size-3\" /> {l.fileUploadFailed}\n {f.error ? `: ${f.error}` : ''}\n {onRetry && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-2\"\n onClick={() => onRetry(f)}\n data-testid={`${testId}-file-${f.id}-retry`}\n >\n <RotateCw className=\"size-3\" /> {l.retryUpload}\n </Button>\n )}\n {onRemove && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-2\"\n onClick={() => onRemove(f)}\n data-testid={`${testId}-file-${f.id}-remove`}\n >\n <X className=\"size-3\" /> {l.removeUpload}\n </Button>\n )}\n </span>\n )}\n {f.status === 'processing' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs\">\n <Loader2 className=\"size-3 animate-spin\" /> {l.fileReading}\n </span>\n )}\n {f.status === 'ready' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs text-primary\">\n <Check className=\"size-3\" /> {l.fileReady}\n </span>\n )}\n {f.status === 'failed' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs text-destructive\">\n <AlertTriangle className=\"size-3\" /> {l.fileFailed}\n </span>\n )}\n </div>\n )\n return (\n <div className=\"space-y-3\" data-testid={testId}>\n {added.length > 0 && (\n <div className=\"space-y-1\" data-testid={`${testId}-added`}>\n <p className={heading}>{l.addedHeading.replace('{count}', String(added.length))}</p>\n {added.map(row)}\n </div>\n )}\n {added.length === 0 && others.length === 0 && (\n <p className=\"text-sm text-muted-foreground\">{l.noFiles}</p>\n )}\n {others.length > 0 && (\n <details className=\"space-y-1\" data-testid={`${testId}-others`}>\n <summary className={cn(heading, 'cursor-pointer select-none')}>\n {l.filesHeading.replace('{count}', String(others.length))}\n </summary>\n <div className=\"mt-1 max-h-48 space-y-1 overflow-y-auto\">{others.map(row)}</div>\n </details>\n )}\n </div>\n )\n}\n\nfunction StepHeading({\n step,\n icon,\n testId,\n}: {\n step: WorkflowStep\n icon?: ReactNode\n testId?: string\n}) {\n return (\n <div className=\"min-w-0\">\n <p className=\"flex items-center gap-2 text-sm font-medium\" data-testid={testId}>\n {icon && (\n <span className=\"flex size-4 items-center justify-center text-primary [&_svg]:size-4\">\n {icon}\n </span>\n )}\n {step.title}\n </p>\n {step.description && <p className=\"mt-1 text-xs text-muted-foreground\">{step.description}</p>}\n </div>\n )\n}\n\n/** m:ss (h:mm:ss past an hour). */\nexport function formatElapsed(ms: number): string {\n const total = Math.max(0, Math.floor(ms / 1000))\n const h = Math.floor(total / 3600)\n const m = Math.floor((total % 3600) / 60)\n const sec = String(total % 60).padStart(2, '0')\n return h ? `${h}:${String(m).padStart(2, '0')}:${sec}` : `${m}:${sec}`\n}\n\n/** \"<title>… 0:42\": the running step and how long it has run, ticking. */\nfunction StepWorking({ title, since, label }: { title: string; since?: string; label: string }) {\n // Without the server's start time, from when this screen first saw it running.\n const seen = useRef(Date.now())\n const start = (since && Date.parse(since)) || seen.current\n const [now, setNow] = useState(() => Date.now())\n useEffect(() => {\n const t = setInterval(() => setNow(Date.now()), 1000)\n return () => clearInterval(t)\n }, [])\n return (\n <span>{label.replace('{step}', title).replace('{elapsed}', formatElapsed(now - start))}</span>\n )\n}\n\nfunction AgentStepBody({\n step,\n run,\n renderAgentOutput,\n icon,\n extra,\n compact,\n nameOfDoc,\n l,\n tid,\n}: {\n step: WorkflowAgentStep\n run: WorkflowRunView\n renderAgentOutput: WorkflowRunnerProps['renderAgentOutput']\n icon?: ReactNode\n /** Under the status: a send-back note, \"Open in Editor\". */\n extra?: ReactNode\n compact?: boolean\n nameOfDoc?: (id: string) => string | undefined\n l: WorkflowRunnerLabels\n tid: (suffix: string) => string\n}) {\n const state = run.stateOf(step.id)\n const phase = run.phaseOf(step.id)\n // Waiting for documents to finish processing (named when the runner knows them).\n const pending = waitingDocuments(state)\n const pendingNames = pending.flatMap((ref) => nameOfDoc?.(splitDocRef(ref).id) ?? [])\n const header = (\n <div className=\"flex items-start justify-between gap-3\">\n <StepHeading step={step} icon={icon} />\n {phase === 'failed' && (\n <div className=\"flex shrink-0 items-center gap-2\">\n {run.retry && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => void run.retry?.(step.id)}\n disabled={run.busy}\n data-testid={tid(`${step.id}-retry`)}\n >\n <RotateCw className=\"size-4\" /> {l.retry}\n </Button>\n )}\n </div>\n )}\n </div>\n )\n const status = (\n <div className=\"space-y-1\">\n {step.branch && (\n <p className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <GitBranch className=\"size-3.5\" /> {l.branch}\n </p>\n )}\n {(phase === 'running' || (phase === 'ready' && !run.needsStart)) && !state?.text && (\n <p\n className=\"flex items-center gap-2 text-sm text-muted-foreground\"\n data-testid={tid(`${step.id}-working`)}\n >\n <Loader2 className=\"size-4 animate-spin\" />{' '}\n {phase === 'ready' ? (\n l.starting\n ) : (\n <StepWorking title={step.title} since={state?.startedAt} label={l.stepWorking} />\n )}\n </p>\n )}\n {pending.length > 0 && (\n <div\n className=\"space-y-0.5 text-sm text-muted-foreground\"\n data-testid={tid(`${step.id}-waiting-documents`)}\n >\n <p className=\"flex items-center gap-2\">\n <Hourglass className=\"size-4\" />\n {pending.length === 1\n ? l.waitingForDocument\n : l.waitingForDocuments.replace('{count}', String(pending.length))}\n </p>\n {pendingNames.length > 0 && <p className=\"pl-6 text-xs\">{pendingNames.join(', ')}</p>}\n </div>\n )}\n {phase === 'failed' && (\n <p className=\"text-sm text-destructive\" data-testid={tid(`${step.id}-failed`)}>\n {state?.error || l.failed}\n </p>\n )}\n {phase === 'skipped' && (\n <p className=\"text-sm text-muted-foreground\" data-testid={tid(`${step.id}-skipped`)}>\n {state?.skippedAfterFailure\n ? l.skippedAfterFailure.replace('{error}', state.error ? `: ${state.error}` : '')\n : l.skipped}\n </p>\n )}\n {extra}\n </div>\n )\n\n if (step.output === 'artifact' && !compact) {\n return (\n <div\n className=\"grid gap-4 lg:grid-cols-[minmax(0,18rem)_minmax(0,1fr)]\"\n data-testid={tid(step.id)}\n >\n <Card className=\"h-fit space-y-3 p-5\">\n {header}\n {status}\n </Card>\n <div className=\"min-w-0\">{renderAgentOutput(step, state)}</div>\n </div>\n )\n }\n return (\n <Card className={cn('space-y-3', compact ? 'p-4' : 'p-6')} data-testid={tid(step.id)}>\n {header}\n {status}\n {renderAgentOutput(step, state)}\n </Card>\n )\n}\n\n/**\n * What the step in view must say before anything else: that it has not started and why (a ready\n * agent or action step no run is under way for), and every step it waits for that failed — still\n * failed (it is blocked until that is retried) or skipped after failing (it goes on without it).\n */\nfunction StepNotices({\n run,\n step,\n l,\n tid,\n}: {\n run: WorkflowRunView\n step: WorkflowStep\n l: WorkflowRunnerLabels\n tid: (suffix: string) => string\n}) {\n const notStarted = !isPersonStep(step) && run.needsStart && run.phaseOf(step.id) === 'ready'\n const failed = run.failedUpstreamOf(step.id)\n if (!notStarted && failed.length === 0) return null\n const why = (error?: string | null) => (error ? `: ${error}` : '')\n return (\n <div className=\"space-y-2\" data-testid={tid(`${step.id}-notices`)}>\n {notStarted && (\n <p\n className={cn(\n 'flex items-start gap-2 text-sm',\n run.runError ? 'text-destructive' : 'text-muted-foreground'\n )}\n data-testid={tid(`${step.id}-not-started`)}\n >\n {run.runError && <AlertTriangle className=\"mt-0.5 size-4 shrink-0\" />}\n {run.runError || l.notStarted}\n </p>\n )}\n {failed.map(({ step: s, state }) => (\n <p\n key={s.id}\n className={cn(\n 'flex items-start gap-2 rounded-md border px-3 py-2 text-sm',\n state.status === 'failed'\n ? 'border-destructive/40 text-destructive'\n : 'border-amber-500/40 text-amber-700 dark:text-amber-300'\n )}\n data-testid={tid(`${step.id}-upstream-${s.id}`)}\n >\n <AlertTriangle className=\"mt-0.5 size-4 shrink-0\" />\n {(state.status === 'failed' ? l.upstreamFailed : l.upstreamSkippedAfterFailure)\n .replace('{step}', s.title)\n .replace('{error}', why(state.error))}\n </p>\n ))}\n </div>\n )\n}\n","/**\n * The workflow a surface asked to start, until the launch host takes it: any surface calls\n * `openWorkflowLaunch` (a document's \"Translate\", a file menu's \"Run workflow\"); the launch host\n * mounted once in the shell (`WorkflowLaunchHost`, the `workflowLaunch` global dialog) opens the\n * one config dialog for it, prefilled, or starts it at once.\n */\nimport { closeDialog, openDialog, useDialogProps } from '../../provider/dialog-registry'\nimport type { WorkflowInputs, WorkflowLanding, WorkflowScope } from './types'\nimport type { WorkflowContext } from './workflow'\n\n/**\n * A request to start a workflow with some inputs preset. `inputs` set fields by name; `context`\n * (files in view, selected text, an image) fills the fields that declare they accept it; `scope`\n * sets the workflow's file field. `landing` overrides where the run lands. With `autoStart` a\n * request whose inputs are complete starts without asking (the dialog opens otherwise).\n */\nexport interface WorkflowLaunchRequest {\n workflowId: string\n inputs?: WorkflowInputs\n context?: WorkflowContext\n scope?: WorkflowScope\n landing?: WorkflowLanding\n autoStart?: boolean\n}\n\n/** Ask for a workflow to start (the launch host opens its dialog, or starts it). */\nexport function openWorkflowLaunch(next: WorkflowLaunchRequest): void {\n openDialog('workflowLaunch', next)\n}\n\n/** The launch host took the request (or it was dismissed). */\nexport function closeWorkflowLaunch(): void {\n closeDialog('workflowLaunch')\n}\n\n/** The open launch request, or null. */\nexport function useWorkflowLaunchRequest(): WorkflowLaunchRequest | null {\n return useDialogProps('workflowLaunch')\n}\n","/**\n * A person's step of a workflow run, done from the thread's top bar: fill in a form, upload the\n * step's files (or say they are added), approve a review (with its fields) or send the work back, sign or decline a\n * signature, open and mark an email draft as sent, open a finished review or a tracked-changes\n * version. Whoever does it is recorded on the step.\n */\nimport { useRef, useState } from 'react'\nimport { AlertTriangle, Check, Loader2, MoreHorizontal, RotateCw, X } from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n Textarea,\n} from '@arbidocs/react/ui'\nimport { UploadDropzone } from '../../files/UploadDropzone'\nimport { SchemaForm } from './SchemaForm'\nimport { defaultInputs, validateInputs } from './workflow'\nimport { sendBackTargets, stepFields, type WorkflowStepPhase } from './run'\nimport {\n type WorkflowInputs,\n type WorkflowStep,\n type WorkflowStepState,\n type WorkflowUploadStep,\n} from './types'\n\nexport interface WorkflowStepActionProps {\n step: WorkflowStep\n phase: WorkflowStepPhase\n /** Every step of the run and its state (a send-back offers the earlier ones). */\n steps: WorkflowStep[]\n states: Record<string, WorkflowStepState>\n /** The run's inputs so far (a form opens with them). */\n inputs: WorkflowInputs\n /** The person on screen: a signature is theirs to sign when they are a pending signer. */\n me?: string\n nameOf?: (id: string) => string | undefined\n /** Done; an upload step names the documents added on it (`onUpload`). */\n onComplete: (inputs?: WorkflowInputs, documents?: string[]) => Promise<unknown>\n /**\n * Sends an upload step's files (to the run's workspace) and resolves with their document ids.\n * With it the step is an upload, done with exactly the files added here; without it the step\n * is only marked as done (\"Files are added\").\n */\n onUpload?: (files: File[]) => Promise<string[]>\n onSendBack?: (to: string, note?: string) => Promise<unknown>\n onDecline?: (note?: string) => Promise<unknown>\n onOpenDocument?: (documentId: string) => void\n onOpenDraft?: (draftId: string) => void\n onOpenReview?: (tags: string[], documents: string[]) => void\n}\n\nconst LABELS: Record<string, string> = {\n form: 'Fill in',\n upload: 'Files are added',\n review: 'Approve',\n}\n\nconst asForm = (step: WorkflowStep) => ({\n id: step.id,\n title: step.title,\n description: '',\n inputs: stepFields(step),\n run: { kind: 'operation' as const },\n landing: 'chat' as const,\n})\n\nexport function WorkflowStepAction({\n step,\n phase,\n steps,\n states,\n inputs,\n me,\n nameOf,\n onComplete,\n onUpload,\n onSendBack,\n onDecline,\n onOpenDocument,\n onOpenDraft,\n onOpenReview,\n}: WorkflowStepActionProps) {\n if (step.kind === 'upload' && phase === 'ready' && onUpload)\n return <UploadStepAction step={step} onUpload={onUpload} onComplete={onComplete} />\n return (\n <StepAction\n {...{ step, phase, steps, states, inputs, me, nameOf, onComplete, onSendBack, onDecline }}\n {...{ onOpenDocument, onOpenDraft, onOpenReview }}\n />\n )\n}\n\ninterface UploadedFile {\n key: number\n file: File\n status: 'uploading' | 'added' | 'failed'\n documents: string[]\n error?: string\n}\n\nconst FILE_STATUS: Record<UploadedFile['status'], string> = {\n uploading: 'Uploading',\n added: 'Added',\n failed: 'Failed',\n}\n\n/**\n * An upload step done from the bar: the drop zone is its action, each file is listed as it\n * uploads (or with why it did not, to try again or remove), and Done records exactly the\n * documents added here. Files already in the workspace (added in the chat, say) complete it from\n * its \"…\" menu.\n */\nfunction UploadStepAction({\n step,\n onUpload,\n onComplete,\n}: {\n step: WorkflowUploadStep\n onUpload: (files: File[]) => Promise<string[]>\n onComplete: WorkflowStepActionProps['onComplete']\n}) {\n const [files, setFiles] = useState<UploadedFile[]>([])\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const seq = useRef(0)\n const tid = `workflow-step-action-${step.id}`\n const uploading = files.some((f) => f.status === 'uploading')\n const documents = files.flatMap((f) => f.documents)\n const settle = (key: number, patch: Partial<UploadedFile>) =>\n setFiles((all) => all.map((f) => (f.key === key ? { ...f, ...patch } : f)))\n const send = (key: number, file: File) =>\n onUpload([file]).then(\n (ids) => settle(key, { status: 'added', documents: ids, error: undefined }),\n (e: unknown) =>\n settle(key, {\n status: 'failed',\n error: e instanceof Error && e.message ? e.message : 'Upload failed',\n })\n )\n const add = (picked: File[]) => {\n const batch = picked.map((file) => ({\n key: ++seq.current,\n file,\n status: 'uploading' as const,\n documents: [],\n }))\n setFiles((all) => [...all, ...batch])\n for (const f of batch) void send(f.key, f.file)\n }\n const retry = (f: UploadedFile) => {\n settle(f.key, { status: 'uploading', error: undefined })\n void send(f.key, f.file)\n }\n const remove = (key: number) => setFiles((all) => all.filter((f) => f.key !== key))\n const complete = async (docs?: string[]) => {\n setBusy(true)\n setError(null)\n try {\n await onComplete(undefined, docs)\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Could not do that')\n } finally {\n setBusy(false)\n }\n }\n return (\n <div className=\"space-y-2 p-1\" data-testid={tid}>\n <UploadDropzone\n onFiles={add}\n accept={step.accept}\n hint={step.hint}\n disabled={busy}\n className=\"py-4\"\n testId={`${tid}-drop`}\n />\n <ul aria-live=\"polite\" className=\"space-y-0.5 text-xs\" data-testid={`${tid}-added`}>\n {files.map((f) => (\n <li key={f.key} className=\"flex items-center gap-1.5\">\n {f.status === 'uploading' ? (\n <Loader2 className=\"size-3 shrink-0 animate-spin text-muted-foreground\" aria-hidden />\n ) : f.status === 'added' ? (\n <Check className=\"size-3 shrink-0 text-success\" aria-hidden />\n ) : (\n <AlertTriangle className=\"size-3 shrink-0 text-destructive\" aria-hidden />\n )}\n <span className=\"sr-only\">{FILE_STATUS[f.status]}:</span>\n <span className=\"min-w-0 truncate\">{f.file.name}</span>\n {f.status === 'failed' && (\n <>\n <span className=\"min-w-0 truncate text-destructive\">{f.error}</span>\n <span className=\"ml-auto flex shrink-0 gap-0.5\">\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-6\"\n aria-label={`Retry ${f.file.name}`}\n disabled={busy}\n onClick={() => retry(f)}\n >\n <RotateCw className=\"size-3\" aria-hidden />\n </Button>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-6\"\n aria-label={`Remove ${f.file.name}`}\n onClick={() => remove(f.key)}\n >\n <X className=\"size-3\" aria-hidden />\n </Button>\n </span>\n </>\n )}\n </li>\n ))}\n </ul>\n <div className=\"flex gap-1\">\n <Button\n size=\"sm\"\n className=\"flex-1\"\n disabled={busy || uploading || !documents.length}\n onClick={() => void complete(documents)}\n data-testid={`${tid}-done`}\n >\n Done\n </Button>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"px-2\"\n disabled={busy || uploading}\n aria-label=\"More for this step\"\n data-testid={`${tid}-more`}\n >\n <MoreHorizontal className=\"size-4\" aria-hidden />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {/* Files added elsewhere (the chat): the server picks the step's files. */}\n <DropdownMenuItem onSelect={() => void complete()} data-testid={`${tid}-already-added`}>\n Files are already added\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n {error && (\n <p role=\"alert\" className=\"text-xs text-destructive\">\n {error}\n </p>\n )}\n </div>\n )\n}\n\nfunction StepAction({\n step,\n phase,\n steps,\n states,\n inputs,\n me,\n nameOf,\n onComplete,\n onSendBack,\n onDecline,\n onOpenDocument,\n onOpenDraft,\n onOpenReview,\n}: Omit<WorkflowStepActionProps, 'onUpload'>) {\n const fields = stepFields(step)\n const [values, setValues] = useState<WorkflowInputs>(() =>\n fields.length ? { ...defaultInputs(asForm(step)), ...inputs } : {}\n )\n const [open, setOpen] = useState<'form' | 'send-back' | 'decline' | null>(null)\n const [note, setNote] = useState('')\n const targets = sendBackTargets(steps, states, step.id)\n const [to, setTo] = useState(targets[0]?.id ?? '')\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const state = states[step.id]\n const tid = `workflow-step-action-${step.id}`\n\n const run = async (fn: () => unknown) => {\n setBusy(true)\n setError(null)\n try {\n await fn()\n setOpen(null)\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Could not do that')\n } finally {\n setBusy(false)\n }\n }\n const errorLine = error && <p className=\"text-xs text-destructive\">{error}</p>\n\n // A finished tabular review opens its grid. (A finished step's documents — a signed version, a\n // tracked-changes version, a draft — are the step's document cards, above.)\n if (phase === 'done') {\n const tags = state?.output?.tag_ext_ids as string[] | undefined\n const docs = (state?.output?.doc_ext_ids as string[] | undefined) ?? []\n return step.kind === 'action' &&\n step.action.type === 'tabular_review' &&\n onOpenReview &&\n tags ? (\n <div className=\"p-1\">\n <Button\n size=\"sm\"\n className=\"w-full\"\n onClick={() => onOpenReview(tags, docs)}\n data-testid={`${tid}-open-review`}\n >\n Open the review\n </Button>\n </div>\n ) : null\n }\n\n if (step.kind === 'action') {\n const waiting = state?.waiting\n if (phase !== 'waiting') return null\n if (step.action.type === 'email_draft')\n return (\n <div className=\"space-y-1 p-1\" data-testid={tid}>\n {waiting?.draft_id && onOpenDraft && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"w-full\"\n onClick={() => onOpenDraft(waiting.draft_id as string)}\n data-testid={`${tid}-open-draft`}\n >\n Open draft\n </Button>\n )}\n <Button\n size=\"sm\"\n className=\"w-full\"\n disabled={busy}\n onClick={() => void run(() => onComplete())}\n data-testid={`${tid}-mark-sent`}\n >\n Mark as sent\n </Button>\n {errorLine}\n </div>\n )\n if (step.action.type === 'sign') {\n const signers = waiting?.signers ?? []\n const signed = waiting?.signed ?? []\n const mine = !!me && signers.includes(me) && !signed.includes(me)\n return (\n <div className=\"space-y-1 p-1\" data-testid={tid}>\n {signers.map((id) => (\n <p\n key={id}\n className=\"flex justify-between gap-2 text-xs\"\n data-testid={`${tid}-signer-${id}`}\n >\n <span className=\"truncate\">{nameOf?.(id) ?? id}</span>\n <span className=\"text-muted-foreground\">\n {signed.includes(id) ? 'Signed' : 'Not signed yet'}\n </span>\n </p>\n ))}\n {mine && waiting?.doc_ext_id && onOpenDocument && (\n <Button\n size=\"sm\"\n className=\"w-full\"\n onClick={() => onOpenDocument(waiting.doc_ext_id as string)}\n data-testid={`${tid}-sign`}\n >\n Open and sign\n </Button>\n )}\n {mine && onDecline && open !== 'decline' && (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"w-full\"\n onClick={() => setOpen('decline')}\n data-testid={`${tid}-decline`}\n >\n Decline\n </Button>\n )}\n {open === 'decline' && (\n <>\n <Textarea\n rows={2}\n value={note}\n placeholder=\"Why are you declining? (optional)\"\n onChange={(e) => setNote(e.target.value)}\n data-testid={`${tid}-decline-note`}\n />\n <Button\n size=\"sm\"\n variant=\"destructive\"\n className=\"w-full\"\n disabled={busy}\n onClick={() => void run(() => onDecline?.(note.trim() || undefined))}\n data-testid={`${tid}-decline-confirm`}\n >\n Decline to sign\n </Button>\n </>\n )}\n {errorLine}\n </div>\n )\n }\n return null\n }\n\n if (phase !== 'ready' || step.kind === 'agent') return null\n\n if (open === 'send-back') {\n const target = targets.some((t) => t.id === to) ? to : (targets[0]?.id ?? '')\n return (\n <div className=\"space-y-2 p-1\" data-testid={`${tid}-send-back-form`}>\n <select\n className=\"flex h-8 w-full rounded-md border border-input bg-background px-2 text-xs\"\n value={target}\n onChange={(e) => setTo(e.target.value)}\n aria-label=\"Send back to\"\n data-testid={`${tid}-send-back-to`}\n >\n {targets.map((t) => (\n <option key={t.id} value={t.id}>\n {t.title}\n </option>\n ))}\n </select>\n <Textarea\n rows={2}\n value={note}\n placeholder=\"What needs to change? (optional)\"\n onChange={(e) => setNote(e.target.value)}\n data-testid={`${tid}-send-back-note`}\n />\n <Button\n size=\"sm\"\n className=\"w-full\"\n disabled={busy || !target}\n onClick={() => void run(() => onSendBack?.(target, note.trim() || undefined))}\n data-testid={`${tid}-send-back-confirm`}\n >\n Send back\n </Button>\n {errorLine}\n </div>\n )\n }\n\n if (fields.length && open === 'form') {\n const errors = validateInputs(asForm(step), values)\n return (\n <div className=\"space-y-2 p-1\" data-testid={tid}>\n <SchemaForm\n fields={fields}\n values={values}\n onChange={(name, value) => setValues((v) => ({ ...v, [name]: value }))}\n testIdPrefix={`workflow-step-${step.id}-field`}\n />\n {errorLine}\n <Button\n size=\"sm\"\n className=\"w-full\"\n disabled={busy || Object.keys(errors).length > 0}\n onClick={() =>\n void run(() =>\n onComplete(\n Object.fromEntries(\n fields.flatMap((f) =>\n step.kind === 'form' || (values[f.name] !== undefined && values[f.name] !== '')\n ? [[f.name, values[f.name] ?? '']]\n : []\n )\n )\n )\n )\n }\n data-testid={`${tid}-submit`}\n >\n {step.kind === 'review' ? 'Approve' : 'Done'}\n </Button>\n </div>\n )\n }\n return (\n <div className=\"space-y-1 p-1\">\n <Button\n size=\"sm\"\n className=\"w-full\"\n disabled={busy}\n onClick={() => (fields.length ? setOpen('form') : void run(() => onComplete()))}\n data-testid={tid}\n >\n {LABELS[step.kind] ?? 'Done'}\n </Button>\n {step.kind === 'review' && onSendBack && targets.length > 0 && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"w-full\"\n disabled={busy}\n onClick={() => setOpen('send-back')}\n data-testid={`${tid}-send-back`}\n >\n Send back\n </Button>\n )}\n {errorLine}\n </div>\n )\n}\n","/**\n * The labels (tags) a workflow needs in the workspace it runs in: a tabular review's columns, each\n * with the instruction the review fills it by. A workflow declares them (`requiredLabels`) and its\n * steps name them by key (`labelRef('privilege')`); before the run starts the runner finds each one\n * in the run's workspace by name, creates the ones missing, and puts their ids into the steps\n * (`withLabelIds`). Pure: the runner (`ConnectedWorkflowRunner`) does the requests.\n */\n\nimport { workflowSteps } from './run'\nimport type { WorkflowDefinition, WorkflowRequiredLabel, WorkflowStep } from './types'\n\nconst PREFIX = 'label:'\n\n/** A step's reference to a required label (a tabular review's `tags`), swapped for its id. */\nexport const labelRef = (key: string) => `${PREFIX}${key}`\n\n/** The key a reference names, or `undefined` for a plain id. */\nexport function labelRefKey(ref: string): string | undefined {\n return ref.startsWith(PREFIX) ? ref.slice(PREFIX.length) : undefined\n}\n\n/** The labels a workflow needs (none: `[]`). */\nexport function requiredLabelsOf(workflow: WorkflowDefinition): WorkflowRequiredLabel[] {\n return workflow.requiredLabels ?? []\n}\n\n/** Required-label references a workflow's steps make that `ids` does not resolve. */\nexport function unresolvedLabelRefs(\n workflow: WorkflowDefinition,\n ids: Record<string, string> = {}\n): string[] {\n return workflowSteps(workflow).flatMap((step) =>\n step.kind === 'action' && step.action.type === 'tabular_review'\n ? step.action.tags.filter((t) => {\n const key = labelRefKey(t)\n return key !== undefined && !ids[key]\n })\n : []\n )\n}\n\n/** The workflow with each required-label reference swapped for the label's id (by key). */\nexport function withLabelIds(\n workflow: WorkflowDefinition,\n ids: Record<string, string>\n): WorkflowDefinition {\n if (workflow.run.kind !== 'steps' || !Object.keys(ids).length) return workflow\n let changed = false\n const steps = workflow.run.steps.map((step): WorkflowStep => {\n if (step.kind !== 'action' || step.action.type !== 'tabular_review') return step\n const tags = step.action.tags.map((t) => ids[labelRefKey(t) ?? ''] ?? t)\n if (tags.every((t, i) => t === (step.action as { tags: string[] }).tags[i])) return step\n changed = true\n return { ...step, action: { ...step.action, tags } }\n })\n return changed ? { ...workflow, run: { ...workflow.run, steps } } : workflow\n}\n\n/** A label as the workspace lists it. */\nexport interface ExistingLabel {\n external_id: string\n name: string\n /** The tag's kind (absent: a label). Only labels and annotations can be a review's column. */\n kind?: string | null\n created_at?: string | null\n}\n\nconst COLUMN_KINDS = new Set(['label', 'annotation'])\nconst norm = (name: string) => name.trim().toLowerCase()\n\n/**\n * Which required labels the workspace already has (their ids by key) and which are missing. Only\n * label and annotation tags count (a newer issue or search tag of the same name never captures a\n * column); the same name in the same case wins over the same name in another case, and of several\n * the oldest wins, so a run keeps finding the column it made first.\n */\nexport function matchRequiredLabels(\n required: readonly WorkflowRequiredLabel[],\n existing: readonly ExistingLabel[]\n): { ids: Record<string, string>; missing: WorkflowRequiredLabel[] } {\n const oldestFirst = existing\n .filter((t) => COLUMN_KINDS.has(t.kind ?? 'label'))\n .map((t, i) => ({ t, i }))\n .sort((a, b) => (a.t.created_at ?? '').localeCompare(b.t.created_at ?? '') || a.i - b.i)\n .map(({ t }) => t)\n const ids: Record<string, string> = {}\n const missing: WorkflowRequiredLabel[] = []\n for (const label of required) {\n const name = label.name.trim()\n const found =\n oldestFirst.find((t) => t.name.trim() === name) ??\n oldestFirst.find((t) => norm(t.name) === norm(name))\n if (found) ids[label.key] = found.external_id\n else missing.push(label)\n }\n return { ids, missing }\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { ClipboardList, Copy, Eye, Pencil, Trash2 } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { ActionLink } from '../../components/ActionLink'\nimport { testIdOr } from '../../chat/test-id'\nimport { formatCount } from '../../lib/format'\n\nexport interface AgentCardLabels {\n running: string\n /** Pulse indicator aria-label. */\n runningIndicator: string\n /** Chip text; receives the running count. */\n runningCount: (count: number) => string\n /** Chip text; receives the task count (0 -> none yet). */\n taskCount: (count: number) => string\n goalMet: (met: number, total: number) => string\n watch: string\n assignTask: string\n edit: string\n copyAddress: string\n deleteAgent: (name: string) => string\n}\n\nexport const DEFAULT_AGENT_CARD_LABELS: AgentCardLabels = {\n running: 'Running',\n runningIndicator: 'Running',\n runningCount: (count) => `${count} running`,\n taskCount: (count) =>\n count > 0 ? formatCount(count, { one: 'task', other: 'tasks' }) : 'no tasks yet',\n goalMet: (met, total) => `✓ ${met}/${total} met`,\n watch: 'Watch',\n assignTask: 'Assign task',\n edit: 'Edit',\n copyAddress: 'Copy address',\n deleteAgent: (name) => `Delete agent ${name}`,\n}\n\nexport interface AgentCardTestIds {\n root: string\n watch: string\n assignTask: string\n edit: string\n copyAddress: string\n delete: string\n}\n\nexport interface AgentCardProps {\n /** Display name; also the key in the test ids (`agent-card-{name}`, `agent-edit-{name}`...). */\n name: string\n /** The agent's avatar (the app supplies its entity avatar). */\n avatar: ReactNode\n /** Tasks currently running for this agent; shows a pulse + chip when > 0. */\n runningCount: number\n /** All tasks assigned to this agent. */\n taskCount: number\n /** Extra content under the chips (the app shows what the agent can access). */\n details?: ReactNode\n /** Criteria progress of the agent's most recent goal task. */\n goalProgress?: { met: number; total: number } | null\n /** When set, a Watch action opens the live run. */\n onWatch?: () => void\n /** Each action is optional: the button is omitted when its handler is absent. */\n onAssignTask?: () => void\n onEdit?: () => void\n /** When set, a ghost \"Copy address\" action copies the agent's address (it is not shown raw). */\n onCopyAddress?: () => void\n onDelete?: () => void\n /**\n * Destination of the agent; the name becomes a real link. `onSelect` fires on a plain click\n * (modified clicks go to the browser).\n */\n href?: string\n onSelect?: () => void\n labels?: Partial<AgentCardLabels>\n /** Overrides for the default `agent-card-{name}` / `agent-watch-run-{name}` ... ids. */\n testIds?: Partial<AgentCardTestIds>\n testId?: string\n className?: string\n}\n\nconst ACTION = 'h-9 gap-1.5 px-2 text-sm pointer-coarse:h-11'\n\n/** One agent in the gallery: avatar, live task chips, and Watch / Assign task / Edit / Delete. */\nexport function AgentCard({\n name,\n avatar,\n runningCount,\n taskCount,\n goalProgress,\n details,\n onWatch,\n onAssignTask,\n onEdit,\n onCopyAddress,\n onDelete,\n href,\n onSelect,\n labels,\n testIds,\n testId,\n className,\n ...rest\n}: AgentCardProps & Omit<HTMLAttributes<HTMLDivElement>, keyof AgentCardProps>) {\n const l = { ...DEFAULT_AGENT_CARD_LABELS, ...labels }\n return (\n <div\n {...rest}\n className={cn('rounded-lg bg-muted p-4', className)}\n data-testid={testIdOr(testId ?? testIds?.root, { testId: `agent-card-${name}` })}\n data-slot=\"agent-card\"\n >\n <div className=\"flex items-start gap-3\">\n <div className=\"relative shrink-0\">\n {avatar}\n {runningCount > 0 && (\n <span\n className=\"absolute -right-0.5 -top-0.5 size-2.5 rounded-full bg-ai-ink\"\n role=\"img\"\n aria-label={l.runningIndicator}\n >\n <span className=\"absolute inset-0 animate-ping rounded-full bg-ai-ink opacity-60\" />\n </span>\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n {href ? (\n <ActionLink\n href={href}\n onSelect={onSelect}\n className=\"block max-w-full truncate text-left font-medium hover:underline\"\n >\n {name}\n </ActionLink>\n ) : (\n <p className=\"truncate font-medium\">{name}</p>\n )}\n <div className=\"mt-1.5 flex flex-wrap gap-1 text-xs text-muted-foreground\">\n {runningCount > 0 ? (\n <span className=\"rounded-full bg-ai-soft px-2 py-px text-ai-ink\">\n {l.runningCount(runningCount)}\n </span>\n ) : (\n <span className=\"rounded-full bg-background px-2 py-px\">\n {l.taskCount(taskCount)}\n </span>\n )}\n {goalProgress && (\n <span className=\"rounded-full bg-background px-2 py-px\">\n {l.goalMet(goalProgress.met, goalProgress.total)}\n </span>\n )}\n </div>\n {details}\n </div>\n </div>\n\n <div className=\"mt-3 flex flex-wrap items-center gap-1 pt-1\">\n {onWatch && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(ACTION, 'text-ai-ink hover:text-ai-ink')}\n onClick={onWatch}\n data-testid={testIdOr(testIds?.watch, { testId: `agent-watch-run-${name}` })}\n >\n <Eye size={14} /> {l.watch}\n </Button>\n )}\n {onAssignTask && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={ACTION}\n onClick={onAssignTask}\n data-testid={testIdOr(testIds?.assignTask, { testId: `agent-assign-task-${name}` })}\n >\n <ClipboardList size={14} /> {l.assignTask}\n </Button>\n )}\n {onEdit && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={ACTION}\n onClick={onEdit}\n data-testid={testIdOr(testIds?.edit, { testId: `agent-edit-${name}` })}\n >\n <Pencil size={14} /> {l.edit}\n </Button>\n )}\n {onCopyAddress && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(ACTION, 'text-muted-foreground')}\n onClick={onCopyAddress}\n data-testid={testIdOr(testIds?.copyAddress, { testId: `agent-copy-address-${name}` })}\n >\n <Copy size={14} /> {l.copyAddress}\n </Button>\n )}\n {onDelete && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(ACTION, 'ml-auto text-muted-foreground hover:text-red-text')}\n onClick={onDelete}\n aria-label={l.deleteAgent(name)}\n data-testid={testIdOr(testIds?.delete, { testId: `agent-delete-${name}` })}\n >\n <Trash2 size={14} />\n </Button>\n )}\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Bot, Plus, Sparkles } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { EmptyState } from '../../components/EmptyState'\n\nexport interface AgentGalleryLabels {\n /** Intro line next to the New agent button. */\n description: string\n emptyTitle: string\n emptyDescription: string\n emptyCta: string\n newAgent: string\n}\n\nexport const DEFAULT_AGENT_GALLERY_LABELS: AgentGalleryLabels = {\n description: 'Personas that work for you, on demand.',\n emptyTitle: 'Create your first agent',\n emptyDescription:\n 'Describe a persona, pick its tools, generate an avatar, then hand it work from an agent card and watch it converge.',\n emptyCta: 'Create an agent',\n newAgent: 'New agent',\n}\n\nexport interface AgentGalleryTestIds {\n emptyCta: string\n createButton: string\n gallery: string\n}\n\nexport interface AgentGalleryProps {\n /** Number of agents; 0 shows the first-run empty state instead of the grid. */\n count: number\n onCreate: () => void\n /** The AgentCard children. */\n children?: ReactNode\n /** Intro line next to the New agent button (wins over `labels.description`). */\n description?: string\n labels?: Partial<AgentGalleryLabels>\n testIds?: Partial<AgentGalleryTestIds>\n className?: string\n}\n\n/** Agents grid with an intro row + New agent action, or a first-run empty state. */\nexport function AgentGallery({\n count,\n onCreate,\n children,\n description,\n labels,\n testIds,\n className,\n}: AgentGalleryProps) {\n const l = { ...DEFAULT_AGENT_GALLERY_LABELS, ...labels }\n if (count === 0) {\n return (\n <div className={cn('mt-8', className)}>\n <EmptyState\n className=\"rounded-lg border-0 bg-muted\"\n icon={Bot}\n title={l.emptyTitle}\n description={l.emptyDescription}\n action={\n <Button\n onClick={onCreate}\n className=\"gap-1.5\"\n data-testid={testIdOr(testIds?.emptyCta, { testId: 'agent-empty-cta' })}\n >\n <Sparkles size={16} /> {l.emptyCta}\n </Button>\n }\n />\n </div>\n )\n }\n return (\n <div className={className}>\n <div className=\"mb-4 flex flex-wrap items-center justify-between gap-x-3 gap-y-2\">\n <p className=\"min-w-0 text-sm text-muted-foreground\">{description ?? l.description}</p>\n <Button\n size=\"sm\"\n onClick={onCreate}\n className=\"h-8 gap-1.5 pointer-coarse:h-11\"\n data-testid={testIdOr(testIds?.createButton, { testId: 'agent-create-button' })}\n >\n <Plus size={16} /> {l.newAgent}\n </Button>\n </div>\n <div\n className=\"grid grid-cols-[repeat(auto-fill,minmax(16rem,1fr))] gap-4\"\n data-testid={testIdOr(testIds?.gallery, { testId: 'agent-gallery' })}\n data-slot=\"agent-gallery\"\n >\n {children}\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Bot, Loader2, Wand2, type LucideIcon } from 'lucide-react'\nimport { Button, Label, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface CapabilityTileProps {\n label: string\n description: string\n icon: LucideIcon\n selected: boolean\n onToggle: () => void\n testId?: string\n className?: string\n}\n\n/** Toggle tile for one agent capability (tool). Selected = accent tone, `aria-pressed`. */\nexport function CapabilityTile({\n label,\n description,\n icon: Icon,\n selected,\n onToggle,\n testId,\n className,\n}: CapabilityTileProps) {\n return (\n <button\n type=\"button\"\n onClick={onToggle}\n aria-pressed={selected}\n data-testid={testId}\n data-slot=\"capability-tile\"\n className={cn(\n 'flex flex-col items-start gap-1 rounded-lg p-3 text-left transition-colors pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n selected\n ? 'bg-accent text-accent-foreground ring-1 ring-inset ring-primary/30'\n : 'bg-muted hover:bg-accent/60',\n className\n )}\n >\n <Icon size={16} className={selected ? 'text-accent-foreground' : 'text-muted-foreground'} />\n <span className=\"text-xs font-medium leading-tight\">{label}</span>\n <span className=\"text-xs leading-tight text-muted-foreground\">{description}</span>\n </button>\n )\n}\n\n/** Responsive grid wrapper for CapabilityTile children. */\nexport function CapabilityGrid({\n children,\n testId,\n className,\n}: {\n children: ReactNode\n testId?: string\n className?: string\n}) {\n return (\n <div\n className={cn('grid grid-cols-2 gap-2 sm:grid-cols-4', className)}\n data-testid={testIdOr(testId, { testId: 'agent-capabilities' })}\n >\n {children}\n </div>\n )\n}\n\nexport interface AgentTypeOption<T extends string> {\n value: T\n title: string\n description: string\n}\n\nexport interface AgentTypeSelectorLabels {\n agentType: string\n}\n\nexport const DEFAULT_AGENT_TYPE_SELECTOR_LABELS: AgentTypeSelectorLabels = {\n agentType: 'Agent type',\n}\n\nexport interface AgentTypeSelectorProps<T extends string> {\n value: T\n onChange: (value: T) => void\n options: AgentTypeOption<T>[]\n /** Group label (wins over `labels.agentType`). */\n label?: string\n labels?: Partial<AgentTypeSelectorLabels>\n /** Root id; options use `agent-type-{value}` unless `optionTestId` is given. */\n testId?: string\n optionTestId?: (value: T) => string\n}\n\n/** Radio-style choice cards (e.g. built-in vs external agent). Test ids: `agent-type-{value}`. */\nexport function AgentTypeSelector<T extends string>({\n value,\n onChange,\n options,\n label,\n labels,\n testId,\n optionTestId,\n}: AgentTypeSelectorProps<T>) {\n const l = { ...DEFAULT_AGENT_TYPE_SELECTOR_LABELS, ...labels }\n return (\n <div className=\"space-y-1.5\" data-testid={testIdOr(testId, { testId: 'agent-type-selector' })}>\n <Label>{label ?? l.agentType}</Label>\n <div className=\"grid grid-cols-2 gap-2\">\n {options.map((opt) => (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => onChange(opt.value)}\n aria-pressed={value === opt.value}\n data-testid={testIdOr(optionTestId?.(opt.value), { testId: `agent-type-${opt.value}` })}\n className={cn(\n 'rounded-lg p-3 text-left transition-colors pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n value === opt.value\n ? 'bg-accent text-accent-foreground ring-1 ring-inset ring-primary/30'\n : 'bg-muted hover:bg-accent/60'\n )}\n >\n <div className=\"text-sm font-medium\">{opt.title}</div>\n <div className=\"mt-0.5 text-xs text-muted-foreground\">{opt.description}</div>\n </button>\n ))}\n </div>\n </div>\n )\n}\n\nexport interface AgentAvatarFieldLabels {\n painting: string\n generate: string\n regenerate: string\n}\n\nexport const DEFAULT_AGENT_AVATAR_FIELD_LABELS: AgentAvatarFieldLabels = {\n painting: 'Painting…',\n generate: 'Generate avatar',\n regenerate: 'Regenerate',\n}\n\nexport interface AgentAvatarFieldTestIds {\n preview: string\n generate: string\n}\n\nexport interface AgentAvatarFieldProps {\n /** Image URL of the current avatar. */\n picture?: string | null\n isBusy: boolean\n /** Generate is disabled until the agent can exist (e.g. a valid name). */\n canGenerate: boolean\n onGenerate: () => void\n labels?: Partial<AgentAvatarFieldLabels>\n testIds?: Partial<AgentAvatarFieldTestIds>\n}\n\n/** Avatar preview with a deliberate Generate / Regenerate action. */\nexport function AgentAvatarField({\n picture,\n isBusy,\n canGenerate,\n onGenerate,\n labels,\n testIds,\n}: AgentAvatarFieldProps) {\n const l = { ...DEFAULT_AGENT_AVATAR_FIELD_LABELS, ...labels }\n return (\n <div className=\"flex flex-col items-center gap-2\" data-slot=\"agent-avatar-field\">\n <div\n className=\"flex size-24 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-muted\"\n data-testid={testIdOr(testIds?.preview, { testId: 'agent-avatar-preview' })}\n >\n {isBusy ? (\n <div className=\"flex flex-col items-center gap-1 text-ai-ink\">\n <Loader2 className=\"size-7 animate-spin\" />\n <span className=\"text-xs\">{l.painting}</span>\n </div>\n ) : picture ? (\n <img src={picture} alt=\"\" className=\"size-full object-cover\" />\n ) : (\n <Bot className=\"size-10 text-ai-ink/70\" />\n )}\n </div>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 gap-1 px-2 text-xs pointer-coarse:h-11\"\n disabled={isBusy || !canGenerate}\n onClick={onGenerate}\n data-testid={testIdOr(testIds?.generate, { testId: 'agent-avatar-generate' })}\n >\n <Wand2 size={12} /> {picture ? l.regenerate : l.generate}\n </Button>\n </div>\n )\n}\n","import { useEffect, useMemo, useState, type ReactNode } from 'react'\nimport { Loader2, Sparkles, X, type LucideIcon } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Textarea,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { FoldSection } from '../../home/FoldSection'\nimport { useControllableState } from '../../lib/useControllableState'\nimport { AgentTypeSelector, CapabilityGrid, CapabilityTile } from './AgentEditorParts'\nimport type { AgentTypeOption } from './AgentEditorParts'\n\n/** One thing an agent can be allowed to do (a tool toggle). */\nexport interface AgentCapability {\n key: string\n label: string\n description: string\n icon: LucideIcon\n}\n\n/** A starting point: a plain description plus the capabilities that go with it. */\nexport interface AgentTemplate {\n id: string\n title: string\n description: string\n /** Becomes the agent's persona text. */\n persona: string\n /** Capability keys switched on. */\n capabilities: string[]\n}\n\nexport interface AgentCreatorValues {\n name: string\n persona: string\n capabilities: Record<string, boolean>\n modelName: string\n type: string\n /** Workspaces the agent may read (ids). Empty = none: isolation is the default. */\n workspaceIds: string[]\n}\n\nexport interface AgentCreatorLabels {\n titleNew: string\n titleEdit: (name: string) => string\n descriptionNew: string\n descriptionEdit: string\n describe: string\n describePlaceholder: string\n describeHint: string\n startFrom: string\n summaryHeading: string\n /** \"Can search the web, run code.\" */\n summaryCan: (list: string) => string\n /** \"Cannot generate images.\" */\n summaryCannot: (list: string) => string\n summaryNone: string\n summaryModel: (model: string) => string\n summaryModelAuto: string\n /** \"Reads workspaces A and B.\" */\n summaryWorkspaces: (list: string) => string\n summaryNoWorkspaces: string\n /** \"Will be called research-assistant.\" */\n summaryName: (name: string) => string\n workspaceAccess: string\n workspaceAccessHint: string\n workspaceAlready: string\n /** Accessible name of the revoke button next to an already-granted workspace. */\n revokeWorkspace: (workspaceName: string) => string\n noWorkspacesToGrant: string\n name: string\n nameHint: string\n nameInvalid: string\n advanced: string\n capabilities: string\n /** One line under the Tools heading. */\n toolsHint: string\n /** Button in the summary that opens Advanced. */\n summaryChange: string\n model: string\n modelAuto: string\n cancel: string\n create: string\n save: string\n saving: string\n}\n\nexport const DEFAULT_AGENT_CREATOR_LABELS: AgentCreatorLabels = {\n titleNew: 'New agent',\n titleEdit: (name) => `Edit ${name}`,\n descriptionNew: 'Say what this agent is for. Everything else follows from that.',\n descriptionEdit: 'Change what this agent is for, or fine-tune it under Advanced.',\n describe: 'What should it do?',\n describePlaceholder: 'e.g. Reads new files each morning and tells me what changed, with sources.',\n describeHint: 'This becomes the agent’s persona and shapes every answer.',\n startFrom: 'Or start from',\n summaryHeading: 'What it can do (its tools)',\n summaryCan: (list) => `Can ${list}.`,\n summaryCannot: (list) => `Cannot ${list}.`,\n summaryNone: 'It can read your files and answer. Nothing else is switched on yet.',\n summaryModel: (model) => `Uses ${model}.`,\n summaryModelAuto: 'Uses the default model.',\n summaryWorkspaces: (list) => `Can read ${list}.`,\n summaryNoWorkspaces: 'Cannot read any workspace yet. Give it access under Advanced.',\n summaryName: (name) => `Will be called ${name}.`,\n workspaceAccess: 'Workspace access',\n workspaceAccessHint:\n 'Each workspace stays separate. The agent can only read the ones you tick here.',\n workspaceAlready: 'Already has access',\n revokeWorkspace: (name) => `Remove access to ${name}`,\n noWorkspacesToGrant: 'You have no workspaces yet.',\n name: 'Name',\n nameHint: 'Letters, digits, - and _ only; must start with a letter or digit.',\n nameInvalid: 'Letters, digits, - and _ only; must start with a letter or digit.',\n advanced: 'Advanced',\n capabilities: 'Tools',\n toolsHint:\n 'Tools are switches on this agent: what it may do on its own, such as search the web or run code. Change them any time.',\n summaryChange: 'Change tools',\n model: 'Model',\n modelAuto: 'Automatic',\n cancel: 'Cancel',\n create: 'Create agent',\n save: 'Save changes',\n saving: 'Saving…',\n}\n\nconst NAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9_-]*$/\nconst FILLER = new Set([\n 'a',\n 'an',\n 'the',\n 'who',\n 'that',\n 'which',\n 'to',\n 'for',\n 'and',\n 'of',\n 'i',\n 'my',\n])\n\n/** A valid agent name from the description: its first few meaningful words, dashed. */\nexport function deriveAgentName(description: string): string {\n const words = description\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, ' ')\n .split(/\\s+/)\n .filter((w) => w && !FILLER.has(w))\n .slice(0, 3)\n return words.join('-').slice(0, 64)\n}\n\nexport const isValidAgentName = (name: string): boolean => NAME_RE.test(name) && name.length <= 64\n\nconst joinList = (items: string[]): string =>\n items.length <= 2\n ? items.join(' and ')\n : `${items.slice(0, -1).join(', ')} and ${items[items.length - 1]}`\n\n/** The plain-language \"can / cannot\" sentence for a capability selection. Pure; labels are data. */\nexport function summarizeCapabilities(\n capabilities: AgentCapability[],\n enabled: Record<string, boolean>,\n modelName: string,\n labels: Pick<\n AgentCreatorLabels,\n 'summaryCan' | 'summaryCannot' | 'summaryNone' | 'summaryModel' | 'summaryModelAuto'\n > = DEFAULT_AGENT_CREATOR_LABELS\n): string[] {\n const on = capabilities.filter((c) => enabled[c.key]).map((c) => c.label.toLowerCase())\n const off = capabilities.filter((c) => !enabled[c.key]).map((c) => c.label.toLowerCase())\n const lines: string[] = []\n if (on.length === 0) lines.push(labels.summaryNone)\n else {\n lines.push(labels.summaryCan(joinList(on)))\n if (off.length > 0) lines.push(labels.summaryCannot(joinList(off)))\n }\n lines.push(modelName ? labels.summaryModel(modelName) : labels.summaryModelAuto)\n return lines\n}\n\n/** The full plain-language summary: abilities, model, workspace access and the agent's name. */\nexport function summarizeAgent(\n capabilities: AgentCapability[],\n values: Pick<AgentCreatorValues, 'capabilities' | 'modelName' | 'workspaceIds' | 'name'>,\n workspaces: Array<{ id: string; name: string }>,\n labels: AgentCreatorLabels = DEFAULT_AGENT_CREATOR_LABELS\n): string[] {\n const lines = summarizeCapabilities(capabilities, values.capabilities, values.modelName, labels)\n const names = workspaces.filter((w) => values.workspaceIds.includes(w.id)).map((w) => w.name)\n lines.push(\n names.length > 0 ? labels.summaryWorkspaces(joinList(names)) : labels.summaryNoWorkspaces\n )\n if (values.name) lines.push(labels.summaryName(values.name))\n return lines\n}\n\nexport interface AgentCreatorProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n isEdit?: boolean\n /** Name shown in the edit title. */\n agentName?: string\n capabilities: AgentCapability[]\n templates?: AgentTemplate[]\n models?: string[]\n /** The user's workspaces, for the explicit access list. */\n workspaces?: Array<{ id: string; name: string }>\n /**\n * Workspaces the agent can already read: shown ticked and fixed. Without `onRevokeWorkspace`\n * they cannot be undone here; with it each gets a remove button.\n */\n grantedWorkspaceIds?: string[]\n /** Take back a granted workspace (the host revokes, then refreshes `grantedWorkspaceIds`). */\n onRevokeWorkspace?: (workspaceId: string) => void\n /** The workspace whose revoke is in flight; its button is disabled. */\n revokingWorkspaceId?: string\n /** One-click avatar (or anything that sits beside the name). */\n avatar?: ReactNode | ((values: AgentCreatorValues) => ReactNode)\n types?: AgentTypeOption<string>[]\n /** Controlled values; omit to let the dialog hold them (seeded by `initialValues`). */\n values?: AgentCreatorValues\n initialValues?: Partial<AgentCreatorValues>\n onValuesChange?: (values: AgentCreatorValues) => void\n /** Avatar field, skills/tool pickers or anything else, folded under Advanced. */\n advanced?: ReactNode | ((values: AgentCreatorValues) => ReactNode)\n isSaving?: boolean\n onSubmit: (values: AgentCreatorValues) => void\n labels?: Partial<AgentCreatorLabels>\n testId?: string\n}\n\nconst BLANK: AgentCreatorValues = {\n name: '',\n persona: '',\n capabilities: {},\n modelName: '',\n type: 'builtin',\n workspaceIds: [],\n}\n\n/**\n * Create or edit an agent from a plain description. Templates pre-fill the description and the\n * capabilities, a live sentence says what the agent can and cannot do, and the knobs (capability\n * toggles, model, type, avatar, pickers) are folded under Advanced.\n */\nexport function AgentCreator({\n open,\n onOpenChange,\n isEdit = false,\n agentName,\n capabilities,\n templates = [],\n models = [],\n workspaces = [],\n grantedWorkspaceIds = [],\n onRevokeWorkspace,\n revokingWorkspaceId,\n avatar,\n types,\n values: valuesProp,\n initialValues,\n onValuesChange,\n advanced,\n isSaving,\n onSubmit,\n labels,\n testId,\n}: AgentCreatorProps) {\n const l = { ...DEFAULT_AGENT_CREATOR_LABELS, ...labels }\n const seed = useMemo<AgentCreatorValues>(\n () => ({ ...BLANK, ...initialValues }),\n // Seeded once per open.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [open]\n )\n const [values, setValues] = useControllableState<AgentCreatorValues>(\n valuesProp,\n seed,\n onValuesChange\n )\n const [advancedOpen, setAdvancedOpen] = useState(false)\n // Until the user edits the name it follows the description.\n const [nameTouched, setNameTouched] = useState(false)\n useEffect(() => {\n if (open) {\n if (valuesProp === undefined) setValues(seed)\n setAdvancedOpen(false)\n setNameTouched(Boolean(seed.name))\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const id = testIdOr(testId, { testId: 'agent-creator' })\n const name = values.name\n const nameValid = isValidAgentName(name)\n const canSubmit = (isEdit || nameValid) && !isSaving\n\n const patch = (next: Partial<AgentCreatorValues>) => setValues({ ...values, ...next })\n\n const setPersona = (persona: string) =>\n patch({ persona, ...(!isEdit && !nameTouched ? { name: deriveAgentName(persona) } : {}) })\n\n const applyTemplate = (t: AgentTemplate) =>\n patch({\n persona: t.persona,\n capabilities: Object.fromEntries(\n capabilities.map((c) => [c.key, t.capabilities.includes(c.key)])\n ),\n ...(!isEdit && !nameTouched ? { name: deriveAgentName(t.persona) } : {}),\n })\n\n const summary = summarizeAgent(capabilities, values, workspaces, l)\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"sheet\"\n className=\"max-h-[calc(100dvh-2rem)] overflow-y-auto sm:max-w-xl\"\n data-testid={id}\n >\n <DialogHeader>\n <DialogTitle>{isEdit ? l.titleEdit(agentName ?? name) : l.titleNew}</DialogTitle>\n <DialogDescription>{isEdit ? l.descriptionEdit : l.descriptionNew}</DialogDescription>\n </DialogHeader>\n\n <form\n className=\"flex flex-col gap-5\"\n onSubmit={(event) => {\n event.preventDefault()\n if (canSubmit) onSubmit(values)\n }}\n >\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"agent-creator-describe\">{l.describe}</Label>\n <Textarea\n id=\"agent-creator-describe\"\n data-testid={`${id}-describe`}\n value={values.persona}\n placeholder={l.describePlaceholder}\n rows={4}\n autoFocus\n onChange={(e) => setPersona(e.target.value)}\n />\n <p className=\"text-xs text-muted-foreground\">{l.describeHint}</p>\n </div>\n\n {!isEdit && templates.length > 0 && (\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-templates`}>\n <Label>{l.startFrom}</Label>\n <div className=\"flex flex-wrap gap-2\">\n {templates.map((t) => (\n <button\n key={t.id}\n type=\"button\"\n title={t.description}\n onClick={() => applyTemplate(t)}\n data-testid={`${id}-template-${t.id}`}\n className={cn(\n 'rounded-full border border-border px-3 py-1.5 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11 [&:hover]:bg-accent'\n )}\n >\n {t.title}\n </button>\n ))}\n </div>\n </div>\n )}\n\n <div\n className=\"rounded-lg bg-muted p-3 text-sm\"\n data-testid={`${id}-summary`}\n aria-live=\"polite\"\n >\n <div className=\"mb-1 flex items-center gap-1.5 text-xs font-medium text-muted-foreground\">\n <Sparkles className=\"size-4 text-ai-ink\" aria-hidden=\"true\" />\n {l.summaryHeading}\n </div>\n {summary.map((line) => (\n <p key={line}>{line}</p>\n ))}\n <button\n type=\"button\"\n onClick={() => setAdvancedOpen(true)}\n data-testid={`${id}-summary-change`}\n className=\"mt-1 text-xs font-medium text-primary underline-offset-2 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11\"\n >\n {l.summaryChange}\n </button>\n </div>\n\n <div className=\"flex items-end gap-4\">\n {typeof avatar === 'function' ? avatar(values) : avatar}\n {!isEdit && (\n <div className=\"flex min-w-0 flex-1 flex-col gap-1.5\">\n <Label htmlFor=\"agent-creator-name\">{l.name}</Label>\n <Input\n id=\"agent-creator-name\"\n data-testid={`${id}-name`}\n value={name}\n placeholder=\"research-assistant\"\n aria-invalid={name !== '' && !nameValid ? true : undefined}\n onChange={(e) => {\n setNameTouched(true)\n patch({ name: e.target.value })\n }}\n />\n {name !== '' && !nameValid && (\n <p className=\"text-xs text-destructive\">{l.nameInvalid}</p>\n )}\n </div>\n )}\n </div>\n\n <FoldSection\n label={l.advanced}\n open={advancedOpen}\n onOpenChange={setAdvancedOpen}\n testId={`${id}-advanced-toggle`}\n >\n <div className=\"flex flex-col gap-4\">\n {!isEdit && types && types.length > 0 && (\n <AgentTypeSelector\n value={values.type}\n onChange={(type) => patch({ type })}\n options={types}\n testId={`${id}-type`}\n optionTestId={(value) => `${id}-type-${value}`}\n />\n )}\n <div className=\"flex flex-col gap-2\">\n <Label>{l.capabilities}</Label>\n <p className=\"text-xs text-muted-foreground\">{l.toolsHint}</p>\n <CapabilityGrid testId={`${id}-capabilities`}>\n {capabilities.map((c) => (\n <CapabilityTile\n key={c.key}\n label={c.label}\n description={c.description}\n icon={c.icon}\n selected={Boolean(values.capabilities[c.key])}\n onToggle={() =>\n patch({\n capabilities: {\n ...values.capabilities,\n [c.key]: !values.capabilities[c.key],\n },\n })\n }\n testId={`${id}-cap-${c.key}`}\n />\n ))}\n </CapabilityGrid>\n </div>\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-workspaces`}>\n <Label>{l.workspaceAccess}</Label>\n <p className=\"text-xs text-muted-foreground\">{l.workspaceAccessHint}</p>\n {workspaces.length === 0 ? (\n <p className=\"text-xs text-muted-foreground\">{l.noWorkspacesToGrant}</p>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {workspaces.map((w) => {\n const already = grantedWorkspaceIds.includes(w.id)\n const on = already || values.workspaceIds.includes(w.id)\n return (\n <span key={w.id} className=\"inline-flex items-center gap-1\">\n <button\n type=\"button\"\n role=\"checkbox\"\n aria-checked={on}\n disabled={already}\n title={already ? l.workspaceAlready : undefined}\n data-testid={`${id}-workspace-${w.id}`}\n onClick={() =>\n patch({\n workspaceIds: on\n ? values.workspaceIds.filter((x) => x !== w.id)\n : [...values.workspaceIds, w.id],\n })\n }\n className={cn(\n 'rounded-md border px-3 py-1.5 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-60 pointer-coarse:min-h-11',\n on\n ? 'border-primary bg-primary/10 text-primary'\n : 'border-border [&:hover:not(:disabled)]:bg-accent'\n )}\n >\n {w.name}\n </button>\n {already && onRevokeWorkspace && (\n <button\n type=\"button\"\n aria-label={l.revokeWorkspace(w.name)}\n title={l.revokeWorkspace(w.name)}\n disabled={revokingWorkspaceId === w.id}\n data-testid={`${id}-workspace-${w.id}-revoke`}\n onClick={() => onRevokeWorkspace(w.id)}\n className=\"flex size-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50 pointer-coarse:size-11\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n )}\n </span>\n )\n })}\n </div>\n )}\n </div>\n {models.length > 0 && (\n <div className=\"flex flex-col gap-1.5\">\n <Label>{l.model}</Label>\n <Select\n value={values.modelName || '__auto__'}\n onValueChange={(v) => patch({ modelName: v === '__auto__' ? '' : v })}\n >\n <SelectTrigger data-testid={`${id}-model`} className=\"pointer-coarse:min-h-11\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__auto__\">{l.modelAuto}</SelectItem>\n {models.map((m) => (\n <SelectItem key={m} value={m}>\n {m}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n {typeof advanced === 'function' ? advanced(values) : advanced}\n </div>\n </FoldSection>\n\n <div className=\"flex flex-col-reverse sm:flex-row sm:justify-end gap-2 border-t border-border pt-3\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={() => onOpenChange(false)}\n data-testid={`${id}-cancel`}\n className=\"pointer-coarse:min-h-11\"\n >\n {l.cancel}\n </Button>\n <Button\n type=\"submit\"\n disabled={!canSubmit}\n data-testid={`${id}-submit`}\n className=\"gap-1.5 pointer-coarse:min-h-11\"\n >\n {isSaving ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Sparkles className=\"size-4\" />\n )}\n {isSaving ? l.saving : isEdit ? l.save : l.create}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","import type { AgentCreatorValues } from './AgentCreator'\n\n/**\n * The saved persona tells the agent its own name: \"You are Reviewer, an AI agent. <description>\".\n * {@link stripPersonaPreamble} takes the preamble off again so the editor shows only what the user wrote.\n */\nexport function composePersona(name: string, description: string): string {\n const body = description.trim()\n const preamble = `You are ${name}, an AI agent.`\n return body ? `${preamble} ${body}` : preamble\n}\n\n/** The description the user wrote, without the preamble {@link composePersona} adds. */\nexport function stripPersonaPreamble(persona: string): string {\n return persona.replace(/^You are .+?, an AI agent\\.\\s*/, '').trim()\n}\n\n/**\n * The `Agents` config section an {@link AgentCreatorValues} form stands for: the persona, the model\n * when one is picked, and one boolean per capability key. Pass it as `sections.Agents` to\n * `useSaveAgentConfig` from `@arbidocs/react`.\n */\nexport function agentCreatorToConfigSection(\n values: Pick<AgentCreatorValues, 'name' | 'persona' | 'modelName' | 'capabilities'>,\n capabilityKeys: string[]\n): Record<string, unknown> {\n return {\n PERSONA: composePersona(values.name, values.persona),\n ...(values.modelName ? { AGENT_MODEL_NAME: values.modelName } : {}),\n ...Object.fromEntries(capabilityKeys.map((k) => [k, !!values.capabilities[k]])),\n }\n}\n\n/** The form values an existing agent's `Agents` config section opens as (edit mode). */\nexport function agentConfigSectionToValues(\n section: Record<string, unknown> | undefined,\n capabilityKeys: string[]\n): Pick<AgentCreatorValues, 'persona' | 'modelName' | 'capabilities'> {\n const s = section ?? {}\n return {\n persona: stripPersonaPreamble(String(s.PERSONA ?? '')),\n modelName: String(s.AGENT_MODEL_NAME ?? ''),\n capabilities: Object.fromEntries(capabilityKeys.map((k) => [k, Boolean(s[k])])),\n }\n}\n","/**\n * The agent creator's standard choices: the headline tool switches an agent can hold (all in its\n * config's `Agents` section), generic starting points, and how it runs. A host may pass its own\n * (a firm's templates, its own wording).\n */\n\nimport {\n Brain,\n FileText,\n Globe,\n ImageIcon,\n ListChecks,\n Telescope,\n Terminal,\n Wand2,\n} from 'lucide-react'\nimport type { AgentCapability, AgentTemplate } from './AgentCreator'\nimport type { AgentTypeOption } from './AgentEditorParts'\n\nexport const DEFAULT_AGENT_CAPABILITIES: AgentCapability[] = [\n {\n key: 'WEB_SEARCH_ENABLED',\n label: 'Web search',\n description: 'Current facts, cited sources',\n icon: Globe,\n },\n {\n key: 'RUN_CODE_ENABLED',\n label: 'Run code',\n description: 'Exact numbers, real computation',\n icon: Terminal,\n },\n {\n key: 'DEEP_RESEARCH_ENABLED',\n label: 'Deep research',\n description: 'Multi-source investigations',\n icon: Telescope,\n },\n {\n key: 'PLANNING_ENABLED',\n label: 'Planning',\n description: 'Plans complex work first',\n icon: ListChecks,\n },\n {\n key: 'ARTIFACTS_ENABLED',\n label: 'Documents',\n description: 'Drafts and edits documents',\n icon: FileText,\n },\n {\n key: 'IMAGE_ENABLED',\n label: 'Images',\n description: 'Generates and edits images',\n icon: ImageIcon,\n },\n { key: 'FACTS_ENABLED', label: 'Memory', description: 'Remembers across sessions', icon: Brain },\n { key: 'SKILLS_ENABLED', label: 'Skills', description: 'May follow your skills', icon: Wand2 },\n]\n\n/**\n * Generic starting points. Domain wording belongs to a deployment, not to the kit. Every template keeps\n * Documents (`ARTIFACTS_ENABLED`) on, as the server's default does: an agent drafts documents unless its\n * owner switches that off.\n */\nexport const DEFAULT_AGENT_TEMPLATES: AgentTemplate[] = [\n {\n id: 'researcher',\n title: 'Researcher',\n description: 'Looks things up and cites its sources',\n persona:\n 'Researches a question thoroughly, reads the best sources, and cites every claim. Says plainly when something could not be confirmed.',\n capabilities: [\n 'WEB_SEARCH_ENABLED',\n 'DEEP_RESEARCH_ENABLED',\n 'PLANNING_ENABLED',\n 'ARTIFACTS_ENABLED',\n ],\n },\n {\n id: 'analyst',\n title: 'Analyst',\n description: 'Works through numbers and data',\n persona:\n 'Works through data carefully, checks its arithmetic by running code, and explains how it reached each figure.',\n capabilities: ['RUN_CODE_ENABLED', 'PLANNING_ENABLED', 'ARTIFACTS_ENABLED'],\n },\n {\n id: 'note-taker',\n title: 'Note taker',\n description: 'Keeps notes and remembers context',\n persona:\n 'Keeps concise notes, remembers what matters between sessions, and drafts clean summaries on request.',\n capabilities: ['FACTS_ENABLED', 'ARTIFACTS_ENABLED'],\n },\n {\n id: 'blank',\n title: 'Blank',\n description: 'Start from scratch',\n persona: '',\n capabilities: ['ARTIFACTS_ENABLED'],\n },\n]\n\n/** Where an agent runs: on ARBI, or an external runtime connected from the user's machine. */\nexport const DEFAULT_AGENT_TYPES: AgentTypeOption<string>[] = [\n {\n value: 'builtin',\n title: 'Built-in',\n description: 'Runs on ARBI’s servers — woken by tasks and messages.',\n },\n {\n value: 'external',\n title: 'External',\n description: 'Connect a Claude or OpenClaw runtime from your machine.',\n },\n]\n","/**\n * The copy-paste setup for connecting an EXTERNAL runtime (Claude CLI or OpenClaw) as an agent:\n * install the CLI, point it at this deployment, sign in as the agent (email + its one-time signing\n * key), start the listener for the chosen runtime. Only the last line differs between runtimes.\n */\n\nimport { useCallback, useMemo, useState } from 'react'\nimport { Check, Copy } from 'lucide-react'\nimport { Button, Label } from '@arbidocs/react/ui'\nimport { useBlocksEnvironment } from '../../provider/environment'\n\ntype AgentBackend = 'claude' | 'openclaw'\n\nexport interface AgentConnectInstructionsProps {\n /** The agent's login email (from the create response). */\n email: string\n /** Server-minted signing key, returned exactly once at creation. */\n signingKey: string\n}\n\nexport function AgentConnectInstructions({ email, signingKey }: AgentConnectInstructionsProps) {\n const { notify, runtimeConfig } = useBlocksEnvironment()\n const [agentBackend, setAgentBackend] = useState<AgentBackend>('claude')\n const [copied, setCopied] = useState(false)\n\n // Pre-filled with the literal email and key, so it pastes onto any machine as it is.\n const setupScript = useMemo(\n () =>\n [\n 'npm install -g @arbidocs/cli',\n `arbi config set-url https://${runtimeConfig.deploymentDomain}`,\n `arbi login --email ${email} --signing-key ${signingKey}`,\n `arbi listen --agent ${agentBackend}`,\n ].join('\\n'),\n [email, signingKey, agentBackend, runtimeConfig.deploymentDomain]\n )\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(setupScript)\n setCopied(true)\n notify('Setup commands copied', 'success')\n setTimeout(() => setCopied(false), 2000)\n } catch {\n notify('Failed to copy', 'error')\n }\n }, [setupScript, notify])\n\n return (\n <div\n className=\"space-y-2 rounded-lg border border-yellow-border bg-yellow-bg/60 p-3\"\n data-testid=\"agent-connect-instructions\"\n >\n <div className=\"flex items-center justify-between gap-3\">\n <p className=\"text-sm font-medium\">Connect it — run on the agent machine:</p>\n <div className=\"flex items-center gap-2\">\n <Label htmlFor=\"agent-backend\" className=\"text-xs text-muted-foreground\">\n Runtime\n </Label>\n <select\n id=\"agent-backend\"\n value={agentBackend}\n onChange={(e) => setAgentBackend(e.target.value as AgentBackend)}\n className=\"h-7 rounded-md border border-input bg-background px-2 text-xs\"\n data-testid=\"agent-backend-select\"\n >\n <option value=\"claude\">claude</option>\n <option value=\"openclaw\">openclaw</option>\n </select>\n </div>\n </div>\n <pre\n className=\"select-all whitespace-pre-wrap break-all rounded-md bg-muted p-3 text-xs font-mono leading-relaxed\"\n data-testid=\"agent-setup-script\"\n >\n {setupScript}\n </pre>\n <div className=\"flex items-center justify-between gap-2\">\n <p className=\"text-xs text-muted-foreground\">\n The signing key is shown only once — copy it now. It cannot be recovered.\n </p>\n <Button variant=\"outline\" size=\"sm\" onClick={handleCopy} className=\"shrink-0\">\n {copied ? <Check className=\"mr-2 h-4 w-4\" /> : <Copy className=\"mr-2 h-4 w-4\" />}\n Copy\n </Button>\n </div>\n </div>\n )\n}\n","/** Tasks per assigned agent, retaining server order for latest-goal/watch presentation. */\nexport function groupAgentTasks<T extends { agent_ext_id?: string | null }>(\n tasks: readonly T[]\n): Map<string, T[]> {\n const grouped = new Map<string, T[]>()\n for (const task of tasks) {\n if (!task.agent_ext_id) continue\n const assigned = grouped.get(task.agent_ext_id)\n if (assigned) assigned.push(task)\n else grouped.set(task.agent_ext_id, [task])\n }\n return grouped\n}\n","import { useState, type ReactNode } from 'react'\nimport { Wand2 } from 'lucide-react'\nimport { Button, Input, Label, Textarea } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface SkillGenerateFormLabels {\n title: string\n hint: string\n placeholder: string\n generate: string\n writeManually: string\n}\n\nexport const DEFAULT_SKILL_GENERATE_FORM_LABELS: SkillGenerateFormLabels = {\n title: 'Generate with AI',\n hint: 'Describe what the skill should do. The assistant drafts it in chat, then you can edit it here.',\n placeholder: 'e.g. Summarize a contract into key obligations, dates, and parties',\n generate: 'Generate with AI',\n writeManually: '…or write it manually',\n}\n\nexport interface SkillGenerateFormTestIds {\n description: string\n generate: string\n writeManually: string\n}\n\nexport interface SkillGenerateFormProps {\n /** Describe what the skill should do; the app routes it to the agent. */\n onGenerate: (description: string) => void\n /** Escape hatch to the blank editor. */\n onManual: () => void\n /** Icon on the generate button. */\n icon?: ReactNode\n labels?: Partial<SkillGenerateFormLabels>\n testIds?: Partial<SkillGenerateFormTestIds>\n}\n\n/** AI-first skill creation: describe it, or write it manually. */\nexport function SkillGenerateForm({\n onGenerate,\n onManual,\n icon,\n labels,\n testIds,\n}: SkillGenerateFormProps) {\n const l = { ...DEFAULT_SKILL_GENERATE_FORM_LABELS, ...labels }\n const [desc, setDesc] = useState('')\n return (\n <div className=\"flex flex-1 flex-col gap-4 overflow-y-auto p-4\" data-slot=\"skill-generate-form\">\n <div className=\"rounded-lg bg-muted p-4\">\n <div className=\"mb-1 flex items-center gap-2\">\n <Wand2 className=\"size-4 text-primary\" />\n <span className=\"text-sm font-medium\">{l.title}</span>\n </div>\n <p className=\"mb-3 text-xs text-muted-foreground\">{l.hint}</p>\n <Textarea\n value={desc}\n onChange={(e) => setDesc(e.target.value)}\n rows={4}\n placeholder={l.placeholder}\n data-testid={testIdOr(testIds?.description, { testId: 'skills-panel-ai-desc' })}\n />\n <div className=\"mt-3 flex justify-end\">\n <Button\n size=\"sm\"\n disabled={!desc.trim()}\n onClick={() => onGenerate(desc.trim())}\n data-testid={testIdOr(testIds?.generate, { testId: 'skills-panel-ai-generate' })}\n >\n {icon && <span className=\"mr-1 [&>svg]:size-4\">{icon}</span>}\n {l.generate}\n </Button>\n </div>\n </div>\n <button\n type=\"button\"\n className=\"self-start text-sm text-muted-foreground underline-offset-2 hover:text-foreground hover:underline pointer-coarse:min-h-11\"\n onClick={onManual}\n data-testid={testIdOr(testIds?.writeManually, { testId: 'skills-panel-write-manually' })}\n >\n {l.writeManually}\n </button>\n </div>\n )\n}\n\nexport interface SkillEditFormLabels {\n name: string\n namePlaceholder: string\n /** Receives the typed name (empty when nothing is typed yet). */\n invokedAs: (name: string) => ReactNode\n description: string\n descriptionPlaceholder: string\n instructions: string\n cancel: string\n saving: string\n saveChanges: string\n create: string\n}\n\nexport const DEFAULT_SKILL_EDIT_FORM_LABELS: SkillEditFormLabels = {\n name: 'Name',\n namePlaceholder: 'contract-summary',\n invokedAs: (name) => (\n <>\n Invoked as <span className=\"font-mono\">/{name || 'skill-name'}</span>\n </>\n ),\n description: 'Description',\n descriptionPlaceholder: 'What it does and when to use it',\n instructions: 'Instructions',\n cancel: 'Cancel',\n saving: 'Saving…',\n saveChanges: 'Save changes',\n create: 'Create skill',\n}\n\nexport interface SkillEditFormTestIds {\n name: string\n description: string\n save: string\n}\n\nexport interface SkillEditFormProps {\n name: string\n onNameChange: (name: string) => void\n /** Existing skills cannot be renamed. */\n isNameLocked?: boolean\n nameError?: string | null\n description: string\n onDescriptionChange: (description: string) => void\n /** The instructions editor (the app supplies its markdown editor). */\n editor: ReactNode\n isSaving?: boolean\n isEditing: boolean\n onSave: () => void\n onCancel: () => void\n labels?: Partial<SkillEditFormLabels>\n testIds?: Partial<SkillEditFormTestIds>\n}\n\nconst FIELD_LABEL = 'text-xs font-semibold uppercase tracking-wide text-muted-foreground'\n\n/** Skill editor chrome: name + description + editor slot + Cancel / Save footer. */\nexport function SkillEditForm({\n name,\n onNameChange,\n isNameLocked,\n nameError,\n description,\n onDescriptionChange,\n editor,\n isSaving,\n isEditing,\n onSave,\n onCancel,\n labels,\n testIds,\n}: SkillEditFormProps) {\n const l = { ...DEFAULT_SKILL_EDIT_FORM_LABELS, ...labels }\n return (\n <div className=\"flex h-full min-h-0 flex-col\" data-slot=\"skill-edit-form\">\n <div className=\"flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto p-4\">\n <div>\n <Label htmlFor=\"sp-name\" className={FIELD_LABEL}>\n {l.name}\n </Label>\n <Input\n id=\"sp-name\"\n value={name}\n disabled={isNameLocked}\n placeholder={l.namePlaceholder}\n onChange={(e) => onNameChange(e.target.value)}\n className=\"mt-1\"\n data-testid={testIdOr(testIds?.name, { testId: 'skills-panel-edit-name' })}\n />\n <p className=\"mt-1 text-xs text-muted-foreground\">{l.invokedAs(name)}</p>\n {nameError && <p className=\"mt-1 text-xs text-destructive\">{nameError}</p>}\n </div>\n <div>\n <Label htmlFor=\"sp-desc\" className={FIELD_LABEL}>\n {l.description}\n </Label>\n <Input\n id=\"sp-desc\"\n value={description}\n placeholder={l.descriptionPlaceholder}\n onChange={(e) => onDescriptionChange(e.target.value)}\n className=\"mt-1\"\n data-testid={testIdOr(testIds?.description, { testId: 'skills-panel-edit-desc' })}\n />\n </div>\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <Label className={`${FIELD_LABEL} mb-1`}>{l.instructions}</Label>\n <div className=\"min-h-[240px] flex-1 overflow-hidden rounded-md border border-border\">\n {editor}\n </div>\n </div>\n </div>\n <div className=\"flex flex-col-reverse sm:flex-row sm:justify-end gap-2 border-t border-border px-4 py-3\">\n <Button variant=\"outline\" size=\"sm\" onClick={onCancel}>\n {l.cancel}\n </Button>\n <Button\n size=\"sm\"\n onClick={onSave}\n disabled={isSaving}\n data-testid={testIdOr(testIds?.save, { testId: 'skills-panel-edit-save' })}\n >\n {isSaving ? l.saving : isEditing ? l.saveChanges : l.create}\n </Button>\n </div>\n </div>\n )\n}\n","/** Activate a role=\"button\" row with Enter/Space, ignoring keys that bubble from inner controls. */\nexport function activateOnKey(handler: () => void) {\n return (e: React.KeyboardEvent<HTMLElement>) => {\n if (e.target !== e.currentTarget) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handler()\n }\n }\n}\n","import type { ReactNode } from 'react'\nimport { LayoutGrid, List } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { activateOnKey } from './SkillParts'\n\n/* ------------------------------ filter chips ------------------------------ */\n\nexport interface SkillFilterOption {\n id: string\n label: string\n /** How many skills this filter would show. */\n count?: number\n}\n\nexport interface SkillFilterChipsProps {\n options: SkillFilterOption[]\n value: string\n onChange: (id: string) => void\n /** Accessible name of the group. */\n label: string\n /** Chip ids are `<prefix>-<option id>`. */\n testIdPrefix?: string\n className?: string\n}\n\n/** A single-choice row of filter chips (a radio group): 44px targets on touch, wraps on phones. */\nexport function SkillFilterChips({\n options,\n value,\n onChange,\n label,\n testIdPrefix = 'skills-filter',\n className,\n}: SkillFilterChipsProps) {\n return (\n <div\n role=\"radiogroup\"\n aria-label={label}\n className={cn('flex flex-wrap gap-2', className)}\n data-slot=\"skill-filter-chips\"\n >\n {options.map((option) => {\n const selected = option.id === value\n return (\n <button\n key={option.id}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n onClick={() => onChange(option.id)}\n data-testid={`${testIdPrefix}-${option.id}`}\n className={cn(\n 'inline-flex min-h-8 items-center gap-1.5 rounded-full border px-3 text-sm transition-colors pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n selected\n ? 'border-primary bg-primary/10 text-foreground'\n : 'border-border bg-background text-muted-foreground [&:hover]:bg-muted'\n )}\n >\n {option.label}\n {option.count !== undefined && (\n <span className=\"text-xs text-muted-foreground\">{option.count}</span>\n )}\n </button>\n )\n })}\n </div>\n )\n}\n\n/* ------------------------------- view toggle ------------------------------ */\n\nexport type SkillBrowserView = 'gallery' | 'list'\n\nexport interface SkillViewToggleLabels {\n group: string\n gallery: string\n list: string\n}\n\nexport const DEFAULT_SKILL_VIEW_TOGGLE_LABELS: SkillViewToggleLabels = {\n group: 'View',\n gallery: 'Gallery',\n list: 'List',\n}\n\nexport interface SkillViewToggleProps {\n value: SkillBrowserView\n onChange: (view: SkillBrowserView) => void\n labels?: Partial<SkillViewToggleLabels>\n testId?: string\n}\n\n/** Gallery / list switch. */\nexport function SkillViewToggle({ value, onChange, labels, testId }: SkillViewToggleProps) {\n const l = { ...DEFAULT_SKILL_VIEW_TOGGLE_LABELS, ...labels }\n const item = (view: SkillBrowserView, label: string, icon: ReactNode) => (\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={value === view}\n aria-label={label}\n title={label}\n onClick={() => onChange(view)}\n data-testid={`${testId ?? 'skills-view-toggle'}-${view}`}\n className={cn(\n 'flex size-8 items-center justify-center rounded-md pointer-coarse:size-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n value === view ? 'bg-background text-foreground shadow-sm' : 'text-muted-foreground'\n )}\n >\n {icon}\n </button>\n )\n return (\n <div\n role=\"radiogroup\"\n aria-label={l.group}\n className=\"inline-flex shrink-0 gap-0.5 rounded-lg bg-muted p-0.5\"\n data-testid={testId ?? 'skills-view-toggle'}\n >\n {item('gallery', l.gallery, <LayoutGrid className=\"size-4\" />)}\n {item('list', l.list, <List className=\"size-4\" />)}\n </div>\n )\n}\n\n/* --------------------------------- tile ----------------------------------- */\n\nexport interface SkillTileProps {\n name: string\n description: string\n /** Where it comes from: \"Built in\", \"Yours\", \"Shared\". */\n sourceLabel: string\n /** Shown as a small pill when it is not plain instructions. */\n type?: string\n icon?: ReactNode\n layout: SkillBrowserView\n selected?: boolean\n onSelect: () => void\n testId?: string\n}\n\n/** One skill in the gallery (a card) or the list (a row). Selecting it opens its detail. */\nexport function SkillTile({\n name,\n description,\n sourceLabel,\n type,\n icon,\n layout,\n selected,\n onSelect,\n testId,\n}: SkillTileProps) {\n const isRow = layout === 'list'\n return (\n <div\n role=\"button\"\n tabIndex={0}\n aria-pressed={selected}\n onClick={onSelect}\n onKeyDown={activateOnKey(onSelect)}\n data-testid={testId ?? `skill-tile-${name}`}\n data-skill-name={name}\n data-slot=\"skill-tile\"\n className={cn(\n 'flex cursor-pointer rounded-lg border p-3 text-left transition-colors pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n isRow ? 'items-center gap-3' : 'h-full flex-col gap-2',\n selected ? 'border-primary bg-primary/5' : 'border-transparent bg-muted [&:hover]:bg-accent'\n )}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n {icon && <span className=\"shrink-0 text-ai-ink [&>svg]:size-5\">{icon}</span>}\n <span className=\"min-w-0 truncate text-sm font-semibold text-foreground\">{name}</span>\n </div>\n <p\n className={cn(\n 'min-w-0 text-sm text-muted-foreground',\n isRow ? 'flex-1 truncate max-sm:hidden' : 'line-clamp-3'\n )}\n >\n {description}\n </p>\n <div className={cn('flex shrink-0 items-center gap-1.5', isRow && 'ml-auto')}>\n {type && type !== 'markdown' && (\n <span className=\"rounded bg-background px-1.5 py-0.5 text-xs uppercase tracking-wide text-muted-foreground\">\n {type}\n </span>\n )}\n <span className=\"rounded bg-background px-1.5 py-0.5 text-xs text-muted-foreground\">\n {sourceLabel}\n </span>\n </div>\n </div>\n )\n}\n\n/* -------------------------------- detail ---------------------------------- */\n\nexport interface SkillDetailProps {\n title: string\n sourceLabel: string\n description: string\n icon?: ReactNode\n /** A line under the title (\"Your copy is used instead of the original\"). */\n notice?: ReactNode\n /** Sections: the form it asks for, the instructions. */\n children?: ReactNode\n /** The action buttons, as a toolbar. */\n actions?: ReactNode\n testId?: string\n}\n\n/** The detail pane of one skill: a header, sections and a sticky action bar. */\nexport function SkillDetail({\n title,\n sourceLabel,\n description,\n icon,\n notice,\n children,\n actions,\n testId,\n}: SkillDetailProps) {\n return (\n <section\n className=\"flex min-h-0 flex-1 flex-col\"\n data-testid={testId ?? 'skill-detail'}\n data-slot=\"skill-detail\"\n aria-label={title}\n >\n <div className=\"min-h-0 flex-1 space-y-4 overflow-y-auto p-4\">\n <header className=\"space-y-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n {icon && <span className=\"text-ai-ink [&>svg]:size-5\">{icon}</span>}\n <h3 className=\"text-base font-semibold text-foreground\">{title}</h3>\n <span className=\"rounded bg-muted px-1.5 py-0.5 text-xs text-muted-foreground\">\n {sourceLabel}\n </span>\n </div>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n {notice && <p className=\"text-sm text-foreground\">{notice}</p>}\n </header>\n {children}\n </div>\n {actions && (\n <div\n className=\"flex flex-wrap gap-2 border-t border-border bg-background p-3\"\n data-slot=\"skill-detail-actions\"\n >\n {actions}\n </div>\n )}\n </section>\n )\n}\n\n/** A titled block inside the detail pane. */\nexport function SkillDetailSection({\n title,\n children,\n testId,\n}: {\n title: string\n children: ReactNode\n testId?: string\n}) {\n return (\n <div className=\"space-y-1.5\" data-testid={testId}>\n <h4 className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {title}\n </h4>\n {children}\n </div>\n )\n}\n","/**\n * Skill files: the SKILL.md frontmatter parser / serializer.\n *\n * Mirrors the backend parser at\n * `ARBI/src/core/instruments/skills.py::parse_skill_frontmatter` exactly so\n * that SKILL.md files created by this UI round-trip through the backend skill\n * loader without surprises.\n *\n * Backend rules we replicate:\n * - Frontmatter is delimited by a leading `---` and a closing `---`.\n * - It is parsed line-by-line (NOT a real YAML parser): each line is split\n * on the first `:`, key is lowercased, value is trimmed.\n * - `name` / `description` are metadata.\n * - `model` (string), `temperature` (float 0..2), `agent` (truthy string),\n * `tools` (comma-separated -> list), `type` (alias-mapped) are config.\n * - Skill type is detected from frontmatter `type`, then filename extension,\n * then shebang. Default is `markdown`.\n * - Main file is `SKILL.md` / `skill.{py,sh,js,ts}` (case-insensitive) or\n * `{skill-name}.{ext}` (stem matches the skill folder name).\n *\n * A skill's slug is `skillSlug` (`re.sub(r\"[^a-z0-9-]\", \"\", name.lower())`).\n */\n\nexport type SkillType = 'markdown' | 'python' | 'shell' | 'javascript' | 'typescript'\n\nexport const SKILL_TYPES: SkillType[] = ['markdown', 'python', 'shell', 'javascript', 'typescript']\n\n/** Canonical primary file name for a skill (Claude-Code compatible). */\nexport const SKILL_MAIN_FILENAME = 'SKILL.md'\n\nexport interface ParsedSkill {\n /** Skill body with frontmatter removed (trimmed, matches backend). */\n content: string\n name: string\n description: string\n skillType: SkillType\n config: {\n model?: string\n temperature?: number\n agent?: boolean\n tools?: string[]\n }\n}\n\nconst MAIN_NAMES = new Set(['skill.md', 'skill.py', 'skill.sh', 'skill.js', 'skill.ts'])\n\n/**\n * Mirrors backend `_is_main_file`: a filename is the skill's primary entry\n * point if it's `SKILL.md`/`skill.{ext}` (case-insensitive) or its stem\n * equals the skill folder name.\n */\nexport function isMainSkillFile(filename: string, skillName: string): boolean {\n const lower = filename.toLowerCase()\n if (MAIN_NAMES.has(lower)) return true\n const stem = lower.includes('.') ? lower.slice(0, lower.lastIndexOf('.')) : lower\n return stem === skillName\n}\n\n/** Mirrors backend `_detect_type_from_content` (filename ext, then shebang). */\nfunction detectTypeFromContent(content: string, filename: string): SkillType {\n if (filename) {\n const lower = filename.toLowerCase()\n if (lower.endsWith('.py')) return 'python'\n if (lower.endsWith('.sh')) return 'shell'\n if (lower.endsWith('.js')) return 'javascript'\n if (lower.endsWith('.ts')) return 'typescript'\n }\n if (content) {\n const firstLine = content.split('\\n', 1)[0].trim()\n if (firstLine.startsWith('#!')) {\n if (firstLine.includes('python')) return 'python'\n if (firstLine.includes('bash') || firstLine.includes('/sh')) return 'shell'\n if (firstLine.includes('ts-node')) return 'typescript'\n if (firstLine.includes('node')) return 'javascript'\n }\n }\n return 'markdown'\n}\n\n/**\n * Parse skill frontmatter. Behaviourally equivalent to the backend\n * `parse_skill_frontmatter`.\n */\nexport function parseSkillFrontmatter(raw: string, filename = ''): ParsedSkill {\n const config: ParsedSkill['config'] = {}\n let name = ''\n let description = ''\n let skillType: SkillType = 'markdown'\n\n if (!raw.startsWith('---')) {\n return {\n content: raw,\n name,\n description,\n config,\n skillType: detectTypeFromContent(raw, filename),\n }\n }\n\n const end = raw.indexOf('---', 3)\n if (end === -1) {\n return {\n content: raw,\n name,\n description,\n config,\n skillType: detectTypeFromContent(raw, filename),\n }\n }\n\n const frontmatter = raw.slice(3, end).trim()\n const body = raw.slice(end + 3).trim()\n\n for (const rawLine of frontmatter.split('\\n')) {\n const line = rawLine.trim()\n if (!line || !line.includes(':')) continue\n const idx = line.indexOf(':')\n const key = line.slice(0, idx).trim().toLowerCase()\n const value = line.slice(idx + 1).trim()\n\n if (key === 'name' && value) {\n name = value\n } else if (key === 'description' && value) {\n description = value\n } else if (key === 'model' && value) {\n config.model = value\n } else if (key === 'temperature') {\n const t = Number.parseFloat(value)\n if (!Number.isNaN(t) && t >= 0 && t <= 2) config.temperature = t\n } else if (key === 'agent') {\n config.agent = ['true', 'yes', '1'].includes(value.toLowerCase())\n } else if (key === 'tools' && value) {\n config.tools = value\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean)\n } else if (key === 'type' && value) {\n const v = value.toLowerCase()\n if (v === 'python' || v === 'py') skillType = 'python'\n else if (v === 'shell' || v === 'sh' || v === 'bash') skillType = 'shell'\n else if (v === 'javascript' || v === 'js' || v === 'node') skillType = 'javascript'\n else if (v === 'typescript' || v === 'ts') skillType = 'typescript'\n }\n }\n\n if (skillType === 'markdown') {\n skillType = detectTypeFromContent(body, filename)\n }\n\n return { content: body, name, description, config, skillType }\n}\n\n/**\n * Serialize a skill back to a SKILL.md string. The output is intentionally in\n * the simple `key: value` form the backend's line-based parser expects:\n * - `tools` is written as a comma-separated string (`tools: a, b`) because\n * the backend splits on `,` — a YAML list would NOT round-trip.\n * - `type` is only emitted when not `markdown` (markdown is the default and\n * needs no annotation).\n * - `name` / `description` are always written (metadata, Claude Code compatible).\n */\nexport function serializeSkill(input: {\n name: string\n description: string\n body: string\n type?: SkillType\n}): string {\n const lines: string[] = ['---', `name: ${input.name}`, `description: ${input.description}`]\n if (input.type && input.type !== 'markdown') {\n lines.push(`type: ${input.type}`)\n }\n lines.push('---', '', input.body.trim(), '')\n return lines.join('\\n')\n}\n","/**\n * Skill import: turn a `.md` or `.zip` someone gave you (a file, or a link to one) into the upload\n * entries `{ folder, fileName, content }` of the skill storage contract:\n *\n * - `.md` → one `skills/{slug}/SKILL.md`. The slug is the frontmatter `name`, else the file name.\n * - `.zip` → every file under `skills/{slug}/<relpath>`, subpaths kept. The slug is the archive's\n * single top-level folder, else the main file's frontmatter `name`, else the archive\n * name. The main file is renamed `SKILL.md`.\n *\n * Junk entries (`__MACOSX/`, dotfiles, folders) are skipped. The upload itself is\n * `useUploadSkillFiles` (`@arbidocs/react`).\n */\n\nimport { strFromU8, unzip, type Unzipped } from 'fflate'\nimport { skillSlug } from '../workflows/skillMarkdown'\nimport { isMainSkillFile, parseSkillFrontmatter, SKILL_MAIN_FILENAME } from './skillFiles'\n\nconst SKILL_FOLDER_PREFIX = 'skills/'\n\nexport interface SkillUploadEntry {\n folder: string\n fileName: string\n content: string\n}\n\nexport interface SkillImportResult {\n slug: string\n entries: SkillUploadEntry[]\n}\n\n/** A file read out of an archive: its path inside it (forward slashes) and its text. */\nexport interface SkillArchiveEntry {\n path: string\n text: string\n}\n\n/** Strip a trailing extension from a file name (last dot only). */\nfunction stripExt(name: string): string {\n const i = name.lastIndexOf('.')\n return i > 0 ? name.slice(0, i) : name\n}\n\n/** True for entries that are never imported (OS junk, dotfiles, folders). */\nfunction isJunkPath(path: string): boolean {\n if (path.endsWith('/')) return true\n const parts = path.split('/')\n if (parts.some((p) => p === '__MACOSX')) return true\n return parts[parts.length - 1].startsWith('.')\n}\n\nfunction folderFor(slug: string, relDir: string): string {\n const root = `${SKILL_FOLDER_PREFIX}${slug}`\n return relDir ? `${root}/${relDir}` : root\n}\n\n/** One Markdown skill. Slug: the frontmatter `name`, else the file name. */\nexport function importMarkdownSkill(fileName: string, text: string): SkillImportResult {\n const parsed = parseSkillFrontmatter(text, fileName)\n const slug = skillSlug(parsed.name) || skillSlug(stripExt(fileName))\n if (!slug) {\n throw new Error(\n 'Could not derive a skill name. Add a `name:` to the frontmatter or rename the file.'\n )\n }\n return {\n slug,\n entries: [{ folder: folderFor(slug, ''), fileName: SKILL_MAIN_FILENAME, content: text }],\n }\n}\n\n/** The single common top-level folder of an archive, if there is one. */\nfunction commonTopDir(paths: string[]): string | null {\n const tops = new Set<string>()\n for (const p of paths) {\n const idx = p.indexOf('/')\n if (idx === -1) return null // a file at the archive root: no wrapper\n tops.add(p.slice(0, idx))\n }\n return tops.size === 1 ? [...tops][0] : null\n}\n\n/** The upload entries of an archive's files (already read). */\nexport function buildZipSkillImport(\n archiveName: string,\n rawEntries: SkillArchiveEntry[]\n): SkillImportResult {\n const entries = rawEntries.filter((e) => e.path && !isJunkPath(e.path))\n if (entries.length === 0) throw new Error('The archive contains no importable skill files.')\n\n const top = commonTopDir(entries.map((e) => e.path))\n const rel = (p: string): string => (top ? p.slice(top.length + 1) : p)\n\n // The slug: the top-level folder, else the main file's frontmatter, else the archive's name.\n let slug = top ? skillSlug(top) : ''\n if (!slug) {\n const mainGuess =\n entries.find((e) => {\n const r = rel(e.path)\n return !r.includes('/') && isMainSkillFile(r, '__never__')\n }) ?? entries.find((e) => !rel(e.path).includes('/'))\n if (mainGuess) slug = skillSlug(parseSkillFrontmatter(mainGuess.text, rel(mainGuess.path)).name)\n }\n if (!slug) slug = skillSlug(stripExt(archiveName))\n if (!slug) throw new Error('Could not derive a skill name from the archive.')\n\n const rootFiles = entries.filter((e) => !rel(e.path).includes('/'))\n const mainEntry =\n rootFiles.find((e) => isMainSkillFile(rel(e.path), slug)) ??\n (rootFiles.length === 1 ? rootFiles[0] : undefined)\n\n return {\n slug,\n entries: entries.map((e) => {\n const r = rel(e.path)\n const lastSlash = r.lastIndexOf('/')\n return {\n folder: folderFor(slug, lastSlash === -1 ? '' : r.slice(0, lastSlash)),\n fileName:\n mainEntry && e.path === mainEntry.path\n ? SKILL_MAIN_FILENAME\n : lastSlash === -1\n ? r\n : r.slice(lastSlash + 1),\n content: e.text,\n }\n }),\n }\n}\n\n/** The files of a `.zip` (off the main thread where the browser allows it). */\nexport async function readSkillArchive(file: Blob): Promise<SkillArchiveEntry[]> {\n const data = new Uint8Array(await file.arrayBuffer())\n let files: Unzipped\n try {\n files = await new Promise<Unzipped>((resolve, reject) =>\n unzip(data, { filter: (f) => !isJunkPath(f.name) }, (err, out) =>\n err ? reject(err) : resolve(out)\n )\n )\n } catch {\n throw new Error('The archive is empty or could not be read.')\n }\n const entries = Object.entries(files).map(([path, bytes]) => ({ path, text: strFromU8(bytes) }))\n if (entries.length === 0) throw new Error('The archive is empty or could not be read.')\n return entries\n}\n\n/** A skill from a file: `.md` / `.markdown`, or a `.zip`. Throws for anything else. */\nexport async function importSkillFile(file: File): Promise<SkillImportResult> {\n const lower = file.name.toLowerCase()\n if (lower.endsWith('.zip')) return buildZipSkillImport(file.name, await readSkillArchive(file))\n if (lower.endsWith('.md') || lower.endsWith('.markdown')) {\n return importMarkdownSkill(file.name, await file.text())\n }\n throw new Error('Unsupported file type. Choose a .md skill or a .zip archive.')\n}\n\n/** A skill from a link: its text, named after the last part of the path. */\nexport async function importSkillFromUrl(url: string): Promise<SkillImportResult> {\n let parsed: URL\n try {\n parsed = new URL(url.trim())\n } catch {\n throw new Error('That does not look like a link.')\n }\n const response = await fetch(parsed.toString())\n if (!response.ok) throw new Error(`Could not open the link (${response.status}).`)\n const text = await response.text()\n const last = parsed.pathname.split('/').filter(Boolean).pop() ?? 'skill'\n return importMarkdownSkill(last.includes('.') ? last : `${last}.md`, text)\n}\n","/**\n * The skills library's one list: the host's built-in skills (its own definitions), the user's own\n * and the ones other people shared, each with where it comes from. Pure, so the filters and the\n * \"your copy replaces the original\" rule are testable without a backend.\n */\n\nimport { isSharedSkill } from '@arbidocs/sdk/browser'\nimport type { WorkflowDefinition, WorkflowFieldType } from '../workflows/types'\nimport { mergeSkillWorkflows, type SkillListing } from '../workflows/workflow'\n\nexport type SkillSource = 'builtin' | 'mine' | 'shared'\n\n/** A skill as the skills list returns it, with what the library reads of it. */\nexport interface LibrarySkillListing extends SkillListing {\n skill_type?: string | null\n is_owner?: boolean | null\n /** Its main file (SKILL.md); a built-in has none. */\n doc_ext_id?: string | null\n}\n\nexport interface LibrarySkill {\n /** The slug: how it is typed after a slash, and what a copy keeps. */\n slug: string\n title: string\n description: string\n source: SkillSource\n /** `markdown` (plain instructions), `python`, ... */\n type: string\n /** Yours and shared with everyone (`isSharedSkill`): saving it again keeps it shared. */\n isShared: boolean\n /** Yours, and it has the same name as a built-in one: yours is used instead. */\n replacesBuiltin: boolean\n workflow: WorkflowDefinition\n /** Its main file; absent for a built-in. */\n docExtId?: string\n}\n\nexport const SKILL_SOURCE_LABELS: Record<SkillSource, string> = {\n builtin: 'Built in',\n mine: 'Yours',\n shared: 'Shared',\n}\n\n/** What a kind of skill is called to a reader. */\nexport const SKILL_TYPE_LABELS: Record<string, string> = {\n markdown: 'Instructions',\n python: 'Python',\n shell: 'Shell',\n javascript: 'JavaScript',\n typescript: 'TypeScript',\n}\n\nexport const SKILL_FIELD_TYPE_LABELS: Record<WorkflowFieldType, string> = {\n text: 'Short answer',\n longtext: 'Free text',\n boolean: 'Yes or no',\n select: 'A choice',\n number: 'A number',\n date: 'A date',\n scope: 'Which files',\n documents: 'Pick files',\n person: 'A person',\n}\n\n/**\n * @param builtins the host's built-in skills (prompt workflows with their own forms)\n * @param listings the skills list (yours, shared, and the deployment's built-ins)\n */\nexport function buildLibrarySkills(\n builtins: WorkflowDefinition[],\n listings: LibrarySkillListing[]\n): LibrarySkill[] {\n const { host, skills } = mergeSkillWorkflows(builtins, listings)\n const builtinIds = new Set(builtins.map((w) => w.id))\n const stored = new Map(listings.filter((s) => s.doc_ext_id).map((s) => [s.slug, s]))\n return [...host, ...skills].flatMap((workflow): LibrarySkill[] => {\n if (workflow.run.kind !== 'prompt') return []\n const listing = stored.get(workflow.id)\n if (!listing?.doc_ext_id) {\n if (!builtinIds.has(workflow.id)) return []\n return [\n {\n slug: workflow.id,\n title: workflow.title,\n description: workflow.description,\n source: 'builtin',\n type: 'markdown',\n isShared: false,\n replacesBuiltin: false,\n workflow,\n },\n ]\n }\n const mine = listing.is_owner ?? true\n return [\n {\n slug: workflow.id,\n title: workflow.title,\n description: listing.description || workflow.description,\n source: mine ? 'mine' : 'shared',\n type: listing.skill_type ?? 'markdown',\n isShared: isSharedSkill(listing),\n replacesBuiltin: mine && builtinIds.has(listing.slug),\n workflow,\n docExtId: listing.doc_ext_id,\n },\n ]\n })\n}\n\nexport interface SkillFilters {\n query: string\n source: SkillSource | 'all'\n type: string\n}\n\nexport function filterLibrarySkills(skills: LibrarySkill[], f: SkillFilters): LibrarySkill[] {\n const q = f.query.trim().toLowerCase()\n return skills\n .filter((s) => f.source === 'all' || s.source === f.source)\n .filter((s) => f.type === 'all' || s.type === f.type)\n .filter(\n (s) =>\n !q ||\n s.title.toLowerCase().includes(q) ||\n s.slug.toLowerCase().includes(q) ||\n s.description.toLowerCase().includes(q)\n )\n}\n","/**\n * One skill of the library, in full: what it does, what it will ask you, its instructions, and what\n * you can do with it. Everything is plain words: Run, Make a copy, Share with everyone, Export,\n * Delete.\n */\n\nimport type { ReactNode } from 'react'\nimport { Copy, Download, Globe, Lock, Pencil, Play, Trash2 } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { SkillDetail, SkillDetailSection } from './SkillBrowserParts'\nimport {\n SKILL_FIELD_TYPE_LABELS,\n SKILL_SOURCE_LABELS,\n SKILL_TYPE_LABELS,\n type LibrarySkill,\n} from './skillLibrary'\n\nexport interface SkillLibraryActions {\n onRun: () => void\n onCopy: () => void\n onEdit: () => void\n onToggleShare: () => void\n onExport: () => void\n onDelete: () => void\n isBusy: boolean\n}\n\nexport interface SkillLibraryDetailProps {\n skill: LibrarySkill\n /** Its instructions (a stored skill's are read on demand). */\n instructions: string\n /** The instructions are still being read. */\n isLoading?: boolean\n actions: SkillLibraryActions\n icon?: ReactNode\n}\n\nconst ACTION = 'pointer-coarse:min-h-11'\n\nexport function SkillLibraryDetail({\n skill,\n instructions,\n isLoading,\n actions,\n icon,\n}: SkillLibraryDetailProps) {\n const fields = skill.workflow.inputs\n const isOwner = skill.source === 'mine'\n const canCopy = skill.source !== 'mine'\n\n const notice = skill.replacesBuiltin\n ? 'Your copy is used instead of the original; delete it to go back.'\n : skill.isShared\n ? 'Shared with everyone.'\n : undefined\n\n return (\n <SkillDetail\n title={skill.title}\n sourceLabel={SKILL_SOURCE_LABELS[skill.source]}\n description={skill.description}\n icon={icon}\n notice={notice}\n testId=\"skill-detail\"\n actions={\n <>\n <Button onClick={actions.onRun} className={ACTION} data-testid=\"skill-run\">\n <Play className=\"mr-1.5 size-4\" />\n Run\n </Button>\n {canCopy && (\n <Button\n variant=\"outline\"\n onClick={actions.onCopy}\n disabled={actions.isBusy}\n className={ACTION}\n data-testid=\"skill-copy\"\n >\n <Copy className=\"mr-1.5 size-4\" />\n Make a copy\n </Button>\n )}\n {isOwner && (\n <Button\n variant=\"outline\"\n onClick={actions.onEdit}\n className={ACTION}\n data-testid=\"skill-edit\"\n >\n <Pencil className=\"mr-1.5 size-4\" />\n Edit\n </Button>\n )}\n {isOwner && (\n <Button\n variant=\"outline\"\n onClick={actions.onToggleShare}\n disabled={actions.isBusy}\n className={ACTION}\n data-testid=\"skill-share\"\n >\n {skill.isShared ? (\n <Lock className=\"mr-1.5 size-4\" />\n ) : (\n <Globe className=\"mr-1.5 size-4\" />\n )}\n {skill.isShared ? 'Make private' : 'Share with everyone'}\n </Button>\n )}\n <Button\n variant=\"outline\"\n onClick={actions.onExport}\n className={ACTION}\n data-testid=\"skill-export\"\n >\n <Download className=\"mr-1.5 size-4\" />\n Export\n </Button>\n {isOwner && (\n <Button\n variant=\"ghost\"\n onClick={actions.onDelete}\n disabled={actions.isBusy}\n className={`${ACTION} ml-auto text-destructive`}\n data-testid=\"skill-delete\"\n >\n <Trash2 className=\"mr-1.5 size-4\" />\n Delete\n </Button>\n )}\n </>\n }\n >\n <SkillDetailSection title=\"What it asks you\" testId=\"skill-inputs\">\n {fields.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">Nothing: it starts right away.</p>\n ) : (\n <ul className=\"space-y-1 text-sm\">\n {fields.map((field) => (\n <li key={field.name} className=\"flex flex-wrap items-baseline gap-x-2\">\n <span className=\"font-medium\">{field.label}</span>\n <span className=\"text-xs text-muted-foreground\">\n {SKILL_FIELD_TYPE_LABELS[field.type]}\n {field.required ? '' : ', optional'}\n </span>\n </li>\n ))}\n </ul>\n )}\n </SkillDetailSection>\n <SkillDetailSection\n title={\n skill.type === 'markdown'\n ? 'Instructions'\n : `Instructions (${SKILL_TYPE_LABELS[skill.type] ?? skill.type})`\n }\n >\n {isLoading ? (\n <p className=\"text-sm text-muted-foreground\">Loading…</p>\n ) : (\n <pre\n className=\"max-h-72 overflow-auto whitespace-pre-wrap break-words rounded-md bg-muted p-3 font-mono text-xs\"\n tabIndex={0}\n aria-label=\"Instructions\"\n data-testid=\"skill-instructions\"\n >\n {instructions || 'No instructions.'}\n </pre>\n )}\n {!isOwner && (\n <p className=\"text-xs text-muted-foreground\">\n You can read these. Make a copy to change them.\n </p>\n )}\n </SkillDetailSection>\n </SkillDetail>\n )\n}\n","import { ListChecks, Loader2, Plus, Sparkles, Trash2 } from 'lucide-react'\nimport { Badge, Button, Label, Slider, Textarea } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface TaskPlanCriterionView {\n id: string\n text: string\n}\n\n/** Reviewable definition-of-done for a goal task. Extra fields on the caller's type are preserved. */\nexport interface TaskPlanView {\n goal: string\n criteria: TaskPlanCriterionView[]\n max_passes: number\n documents: string[]\n}\n\n/** Fixed strings of the goal-plan editor. */\nexport interface TaskPlanLabels {\n emptyTitle: string\n emptyBody: string\n drafting: string\n generate: string\n needWorkspace: string\n needObjective: string\n goalTask: string\n /** \"scoped to {workspace}\" prefix. */\n scopedTo: string\n redraft: string\n removePlan: string\n goal: string\n goalPlaceholder: string\n checklist: string\n /** e.g. \"3 criteria\". */\n criteriaCount: (count: number) => string\n add: string\n noCriteria: string\n criterionPlaceholder: string\n removeCriterion: (n: number) => string\n retryBudget: string\n /** e.g. \"up to 3 passes\". */\n passes: (count: number) => string\n passesHelp: string\n workingDocuments: string\n workingDocumentsHelp: string\n}\n\nexport const DEFAULT_TASK_PLAN_LABELS: TaskPlanLabels = {\n emptyTitle: 'Draft a plan to review',\n emptyBody:\n 'The assistant writes a short checklist of what its work must cover. You can edit it, and it checks its own draft against it before handing it to you.',\n drafting: 'Drafting plan…',\n generate: 'Draft a plan',\n needWorkspace: 'Open a workspace to plan: the checklist is encrypted under its key.',\n needObjective: 'Say what the assistant should do first: the plan is drafted from it.',\n goalTask: 'Drafted for your review',\n scopedTo: 'for',\n redraft: 'Redraft',\n removePlan: 'Remove plan',\n goal: 'Objective',\n goalPlaceholder: 'What should the finished work achieve?',\n checklist: 'The draft must',\n criteriaCount: (count) => `${count} ${count === 1 ? 'criterion' : 'criteria'}`,\n add: 'Add',\n noCriteria: 'Nothing yet. Add at least one thing the draft must cover.',\n criterionPlaceholder: 'Something specific you can check…',\n removeCriterion: (n) => `Remove item ${n}`,\n retryBudget: 'Revision rounds',\n passes: (count) => `up to ${count} ${count === 1 ? 'round' : 'rounds'}`,\n passesHelp: 'How many times the assistant may revise its own draft before it hands it over.',\n workingDocuments: 'Documents it will use',\n workingDocumentsHelp: 'The plan limits the assistant to these documents.',\n}\n\nexport interface TaskPlanTestIds {\n generate: string\n editor: string\n regenerate: string\n remove: string\n goal: string\n addCriterion: string\n criteria: string\n passes: string\n documents: string\n /** Per criterion index (default `task-plan-criterion-{idx}`). */\n criterion: (idx: number) => string\n /** Per criterion index (default `task-plan-remove-criterion-{idx}`). */\n removeCriterionButton: (idx: number) => string\n}\n\nexport interface TaskPlanProps<P extends TaskPlanView> {\n /** The current plan, or null when the task has no plan yet. */\n plan: P | null\n /** Called with the edited plan, or null when the plan is removed. */\n onChange: (plan: P | null) => void\n /** Draft a plan from the objective. */\n onGenerate: () => void\n isGenerating: boolean\n /** The active workspace the plan is scoped to (null: none open, so generating is disabled). */\n workspaceName: string | null\n /** The objective the planner drafts from (the task's prompt). */\n objective: string\n /** Document id → file name, so the plan shows names instead of ids. */\n documentNames?: Record<string, string>\n testIds?: Partial<TaskPlanTestIds>\n labels?: Partial<TaskPlanLabels>\n}\n\n/** Stable, collision-free criterion ids (c1, c2, ...) by high-water mark, independent of order. */\nexport function nextCriterionId(criteria: TaskPlanCriterionView[]): string {\n const max = criteria.reduce((m, c) => {\n const n = Number(/^c(\\d+)$/.exec(c.id)?.[1] ?? 0)\n return Number.isFinite(n) && n > m ? n : m\n }, 0)\n return `c${max + 1}`\n}\n\n/**\n * Goal-plan editor: empty-state pitch with a single Generate action, or (with a plan) goal,\n * acceptance checklist, retry budget and working documents.\n */\nexport function TaskPlan<P extends TaskPlanView>({\n plan,\n onChange,\n onGenerate,\n isGenerating,\n workspaceName,\n objective,\n documentNames,\n testIds,\n labels,\n}: TaskPlanProps<P>) {\n const l = { ...DEFAULT_TASK_PLAN_LABELS, ...labels }\n const canGenerate = !!workspaceName && !!objective.trim() && !isGenerating\n\n if (!plan) {\n return (\n <div\n className=\"flex flex-col gap-3 rounded-lg bg-muted p-4 sm:flex-row sm:items-center sm:justify-between\"\n data-slot=\"task-plan-empty\"\n >\n <div className=\"flex min-w-0 items-start gap-3\">\n <ListChecks className=\"mt-0.5 size-5 shrink-0 text-muted-foreground\" aria-hidden />\n <div className=\"space-y-0.5\">\n <p className=\"text-sm font-medium\">{l.emptyTitle}</p>\n <p className=\"max-w-md text-xs text-muted-foreground\">{l.emptyBody}</p>\n {!workspaceName ? (\n <p className=\"text-xs text-muted-foreground\">{l.needWorkspace}</p>\n ) : !objective.trim() ? (\n <p className=\"text-xs text-muted-foreground\">{l.needObjective}</p>\n ) : null}\n </div>\n </div>\n <Button\n type=\"button\"\n onClick={onGenerate}\n disabled={!canGenerate}\n className=\"shrink-0\"\n data-testid={testIdOr(testIds?.generate, { testId: 'task-plan-generate' })}\n >\n {isGenerating ? (\n <>\n <Loader2 className=\"size-4 animate-spin\" />\n {l.drafting}\n </>\n ) : (\n <>\n <Sparkles className=\"size-4\" />\n {l.generate}\n </>\n )}\n </Button>\n </div>\n )\n }\n\n const patch = (fields: Partial<TaskPlanView>) => onChange({ ...plan, ...fields })\n const setCriterion = (idx: number, text: string) =>\n patch({ criteria: plan.criteria.map((c, i) => (i === idx ? { ...c, text } : c)) })\n const addCriterion = () =>\n patch({ criteria: [...plan.criteria, { id: nextCriterionId(plan.criteria), text: '' }] })\n const removeCriterion = (idx: number) =>\n patch({ criteria: plan.criteria.filter((_, i) => i !== idx) })\n\n const count = plan.criteria.length\n return (\n <div\n className=\"space-y-5\"\n data-testid={testIdOr(testIds?.editor, { testId: 'task-plan-editor' })}\n data-slot=\"task-plan\"\n >\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge variant=\"default\" className=\"gap-1\">\n <ListChecks className=\"size-3.5\" />\n {l.goalTask}\n </Badge>\n {workspaceName && (\n <span className=\"truncate text-xs text-muted-foreground\">\n {l.scopedTo} <span className=\"font-medium\">{workspaceName}</span>\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={onGenerate}\n disabled={!canGenerate}\n data-testid={testIdOr(testIds?.regenerate, { testId: 'task-plan-regenerate' })}\n >\n {isGenerating ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Sparkles className=\"size-4\" />\n )}\n {l.redraft}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onChange(null)}\n data-testid={testIdOr(testIds?.remove, { testId: 'task-plan-remove' })}\n >\n {l.removePlan}\n </Button>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-plan-goal\">{l.goal}</Label>\n <Textarea\n id=\"task-plan-goal\"\n value={plan.goal}\n onChange={(e) => patch({ goal: e.target.value })}\n placeholder={l.goalPlaceholder}\n rows={2}\n data-testid={testIdOr(testIds?.goal, { testId: 'task-plan-goal' })}\n />\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label>\n {l.checklist}\n <span className=\"ml-1.5 text-xs font-normal text-muted-foreground\">\n {l.criteriaCount(count)}\n </span>\n </Label>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={addCriterion}\n data-testid={testIdOr(testIds?.addCriterion, { testId: 'task-plan-add-criterion' })}\n >\n <Plus className=\"size-4\" />\n {l.add}\n </Button>\n </div>\n\n {count === 0 ? (\n <p className=\"py-2 text-sm text-muted-foreground\">{l.noCriteria}</p>\n ) : (\n <ul\n className=\"space-y-2\"\n data-testid={testIdOr(testIds?.criteria, { testId: 'task-plan-criteria' })}\n >\n {plan.criteria.map((c, idx) => (\n <li key={c.id} className=\"flex items-start gap-2\">\n <span className=\"mt-1.5 flex size-6 shrink-0 select-none items-center justify-center rounded-full bg-muted text-xs font-medium text-muted-foreground\">\n {idx + 1}\n </span>\n <Textarea\n value={c.text}\n rows={2}\n onChange={(e) => setCriterion(idx, e.target.value)}\n placeholder={l.criterionPlaceholder}\n className=\"field-sizing-content min-h-[3.25rem] resize-none\"\n data-testid={testIdOr(testIds?.criterion?.(idx), {\n testId: `task-plan-criterion-${idx}`,\n })}\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"mt-0.5 shrink-0 text-muted-foreground hover:text-destructive pointer-coarse:size-11\"\n onClick={() => removeCriterion(idx)}\n aria-label={l.removeCriterion(idx + 1)}\n data-testid={testIdOr(testIds?.removeCriterionButton?.(idx), {\n testId: `task-plan-remove-criterion-${idx}`,\n })}\n >\n <Trash2 className=\"size-4\" />\n </Button>\n </li>\n ))}\n </ul>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-plan-passes\">\n {l.retryBudget}\n <span className=\"ml-1.5 text-xs font-normal text-muted-foreground\">\n {l.passes(plan.max_passes)}\n </span>\n </Label>\n <Slider\n id=\"task-plan-passes\"\n min={1}\n max={8}\n step={1}\n value={[plan.max_passes]}\n onValueChange={([v]) => patch({ max_passes: v })}\n data-testid={testIdOr(testIds?.passes, { testId: 'task-plan-passes' })}\n />\n <p className=\"text-xs text-muted-foreground\">{l.passesHelp}</p>\n </div>\n\n {plan.documents.length > 0 && (\n <div className=\"space-y-2\">\n <Label>{l.workingDocuments}</Label>\n <div\n className=\"flex flex-wrap gap-1.5\"\n data-testid={testIdOr(testIds?.documents, { testId: 'task-plan-documents' })}\n >\n {plan.documents.map((d) => (\n <Badge key={d} variant=\"secondary\" className=\"text-xs\" title={d}>\n {documentNames?.[d] ?? d}\n </Badge>\n ))}\n </div>\n <p className=\"text-xs text-muted-foreground\">{l.workingDocumentsHelp}</p>\n </div>\n )}\n </div>\n )\n}\n","/** Compact elapsed time: 123ms, 5s, 2m 30s, 1h 15m. */\nexport function formatElapsed(startTime: number, endTime?: number): string {\n const elapsedMs = (endTime || Date.now()) - startTime\n if (elapsedMs < 1000) return `${Math.round(elapsedMs)}ms`\n if (elapsedMs < 60000) return `${Math.round(elapsedMs / 1000)}s`\n if (elapsedMs < 3600000) {\n const minutes = Math.floor(elapsedMs / 60000)\n const seconds = Math.round((elapsedMs % 60000) / 1000)\n return seconds > 0 ? `${minutes}m ${seconds}s` : `${minutes}m`\n }\n const hours = Math.floor(elapsedMs / 3600000)\n const minutes = Math.round((elapsedMs % 3600000) / 60000)\n return minutes > 0 ? `${hours}h ${minutes}m` : `${hours}h`\n}\n","import { useEffect, useState, type ReactNode } from 'react'\nimport { AlertTriangle, Check, FileX, Loader2, SkipForward, X, type LucideIcon } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { formatElapsed } from './elapsed'\n\nconst ACTIVE_STATUSES = new Set(['parsing', 'encrypting', 'indexing', 'analysing'])\nconst RUNNING_STATUSES = new Set(['queued', ...ACTIVE_STATUSES])\n\ninterface StatusTone {\n text: string\n bar: string\n Icon: LucideIcon\n}\n\nconst TONES: Record<string, StatusTone> = {\n completed: { text: 'text-green-text', bar: 'bg-green-text/90', Icon: Check },\n failed: { text: 'text-red-text', bar: 'bg-red-text/90', Icon: X },\n parsing: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n encrypting: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n indexing: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n analysing: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n queued: { text: 'text-yellow-text', bar: 'bg-yellow-text/90', Icon: Loader2 },\n skipped: { text: 'text-gray-text', bar: 'bg-gray-text/90', Icon: SkipForward },\n empty: { text: 'text-yellow-text', bar: 'bg-yellow-text/90', Icon: FileX },\n 'low-content': { text: 'text-yellow-text', bar: 'bg-yellow-text/90', Icon: AlertTriangle },\n}\nconst DEFAULT_TONE: StatusTone = { text: 'text-gray-text', bar: 'bg-blue-text/90', Icon: Loader2 }\n\nexport interface UploadTaskItemLabels {\n /** Delete action text (failed rows). */\n delete: string\n /** Delete action tooltip. */\n deleteTitle: string\n /** aria-label of the progress bar. */\n progress: (fileName: string) => string\n /** Status line text; the default capitalises the raw status. */\n status: (status: string, percent: number) => string\n}\n\nexport const DEFAULT_UPLOAD_TASK_ITEM_LABELS: UploadTaskItemLabels = {\n delete: 'Delete',\n deleteTitle: 'Delete file',\n progress: (fileName) => `${fileName} progress`,\n status: (status, percent) => `${status.charAt(0).toUpperCase() + status.slice(1)} - ${percent}%`,\n}\n\n/** Per-row test ids derived from the task id (defaults `task-item-{id}`, ...). */\nexport interface UploadTaskItemTestIds {\n item: (taskId: string) => string\n fileName: (taskId: string) => string\n progressBar: (taskId: string) => string\n status: (taskId: string) => string\n delete: (taskId: string) => string\n}\n\nexport interface UploadTaskItemProps {\n taskId: string\n fileName: string\n /** queued | parsing | encrypting | indexing | analysing | completed | failed | skipped | empty | low-content */\n status: string\n /** 0-1 fraction or 0-100 percentage. */\n progress: number\n startTime?: number\n endTime?: number\n /** File-type icon for the row (the app maps the extension). */\n fileIcon?: ReactNode\n /** Shown as a Delete action on failed tasks. */\n onDelete?: (taskId: string) => void\n testIds?: Partial<UploadTaskItemTestIds>\n labels?: Partial<UploadTaskItemLabels>\n className?: string\n}\n\n/** One document-processing row: status icon, file, progress bar, status text + elapsed time. */\nexport function UploadTaskItem({\n taskId,\n fileName,\n status,\n progress,\n startTime,\n endTime,\n fileIcon,\n onDelete,\n testIds,\n labels,\n className,\n}: UploadTaskItemProps) {\n const l = { ...DEFAULT_UPLOAD_TASK_ITEM_LABELS, ...labels }\n const [elapsed, setElapsed] = useState('')\n\n useEffect(() => {\n if (!startTime) {\n setElapsed('')\n return\n }\n if (RUNNING_STATUSES.has(status)) {\n const tick = () => setElapsed(formatElapsed(startTime))\n tick()\n const interval = setInterval(tick, 1000)\n return () => clearInterval(interval)\n }\n setElapsed(formatElapsed(startTime, endTime))\n }, [startTime, endTime, status])\n\n const percent = progress > 1 ? progress : progress * 100\n const tone = TONES[status] ?? DEFAULT_TONE\n const StatusIcon = tone.Icon\n\n return (\n <div\n className={cn(\n 'mb-2 w-full max-w-full overflow-hidden rounded-md bg-muted p-2 box-border',\n className\n )}\n data-testid={testIdOr(testIds?.item?.(taskId), { testId: `task-item-${taskId}` })}\n data-slot=\"upload-task-item\"\n >\n <div className=\"mb-1 flex w-full max-w-full items-center gap-2 overflow-hidden\">\n <div className={cn('shrink-0', tone.text)}>\n <StatusIcon className={cn('size-4', ACTIVE_STATUSES.has(status) && 'animate-spin')} />\n </div>\n {fileIcon && <div className=\"shrink-0\">{fileIcon}</div>}\n <div\n className=\"min-w-0 flex-1 truncate text-sm font-medium\"\n title={fileName}\n data-testid={testIdOr(testIds?.fileName?.(taskId), { testId: `task-filename-${taskId}` })}\n >\n {fileName}\n </div>\n </div>\n\n <div\n className=\"mb-1 h-2 w-full max-w-full overflow-hidden rounded-md bg-background\"\n data-testid={testIdOr(testIds?.progressBar?.(taskId), {\n testId: `task-progress-bar-${taskId}`,\n })}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(percent)}\n aria-label={l.progress(fileName)}\n >\n <div\n className={cn('h-2 rounded-md transition-all duration-300 ease-in-out', tone.bar)}\n style={{ width: `${percent}%` }}\n />\n </div>\n\n <div className=\"flex w-full max-w-full items-center justify-between overflow-hidden text-sm\">\n <span\n className=\"truncate text-gray-text\"\n data-testid={testIdOr(testIds?.status?.(taskId), { testId: `task-status-${taskId}` })}\n >\n {l.status(status, Math.round(percent))}\n {elapsed && <span className=\"ml-2 text-muted-foreground\">({elapsed})</span>}\n </span>\n\n {status === 'failed' && onDelete && (\n <button\n type=\"button\"\n onClick={() => onDelete(taskId)}\n className=\"shrink-0 text-sm text-red-text hover:text-red-text/80 pointer-coarse:min-h-11 pointer-coarse:px-3\"\n title={l.deleteTitle}\n data-testid={testIdOr(testIds?.delete?.(taskId), { testId: `delete-task-${taskId}` })}\n >\n {l.delete}\n </button>\n )}\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { UploadTaskItem, type UploadTaskItemLabels } from './UploadTaskItem'\n\nexport interface UploadTaskView {\n fileName: string\n status: string\n progress: number\n startTime?: number\n endTime?: number\n}\n\nexport interface UploadTaskListProps {\n tasks: Record<string, UploadTaskView>\n /** Include only matching tasks. */\n filter?: (taskId: string, task: UploadTaskView) => boolean\n title?: string\n onDelete?: (taskId: string) => void\n /** File-type icon per file name. */\n renderFileIcon?: (fileName: string) => ReactNode\n testIds?: Partial<{ root: string; title: string }>\n labels?: Partial<UploadTaskListLabels>\n /** Labels forwarded to every row. */\n itemLabels?: Partial<UploadTaskItemLabels>\n className?: string\n}\n\nexport interface UploadTaskListLabels {\n title: string\n}\n\nexport const DEFAULT_UPLOAD_TASK_LIST_LABELS: UploadTaskListLabels = {\n title: 'Active Tasks',\n}\n\nexport function UploadTaskList({\n tasks,\n filter,\n title,\n onDelete,\n renderFileIcon,\n testIds,\n labels,\n itemLabels,\n className,\n}: UploadTaskListProps) {\n const l = { ...DEFAULT_UPLOAD_TASK_LIST_LABELS, ...labels }\n const heading = title ?? l.title\n const safeTasks = typeof tasks === 'object' && tasks !== null ? tasks : {}\n let entries = Object.entries(safeTasks)\n if (filter) entries = entries.filter(([id, task]) => filter(id, task))\n\n // Nothing to list: the section around it says so.\n if (entries.length === 0) return null\n\n return (\n <div\n data-testid={testIdOr(testIds?.root, { testId: 'task-status-list' })}\n data-slot=\"upload-task-list\"\n className={cn('box-border w-full max-w-full', className)}\n >\n {heading && (\n <h3\n className=\"mb-2 truncate text-sm font-semibold\"\n data-testid={testIdOr(testIds?.title, { testId: 'task-list-title' })}\n >\n {heading}\n </h3>\n )}\n <div className=\"box-border w-full max-w-full overflow-hidden\">\n {entries.map(([taskId, task]) => (\n <UploadTaskItem\n key={taskId}\n taskId={taskId}\n fileName={task.fileName}\n status={task.status}\n progress={task.progress}\n startTime={task.startTime}\n endTime={task.endTime}\n fileIcon={renderFileIcon?.(task.fileName)}\n onDelete={onDelete}\n labels={itemLabels}\n className=\"box-border max-w-full\"\n />\n ))}\n </div>\n </div>\n )\n}\n","/**\n * Friendly recurrence builder for a recurring Task. Generates an RRULE from a\n * frequency + time (+ weekdays / day-of-month) and offers a collapsible\n * \"Advanced\" field for hand-writing any RRULE the presets can't express.\n */\nimport { useEffect, useState } from 'react'\nimport {\n Button,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n cn,\n} from '@arbidocs/react/ui'\nimport {\n buildRRule,\n DEFAULT_RECURRENCE,\n parseRRule,\n type RecurrenceFrequency,\n type RecurrencePreset,\n type Weekday,\n WEEKDAYS,\n} from './rrule'\nimport { testIdOr } from '../../chat/test-id'\n\n/** Fixed strings of the recurrence builder. */\nexport interface RecurrenceBuilderLabels {\n rruleLabel: string\n rrulePlaceholder: string\n backToSimple: string\n repeat: string\n daily: string\n weekly: string\n monthly: string\n onDay: string\n at: string\n on: string\n advanced: string\n /** Single-letter weekday chips. */\n weekdayShort: Record<Weekday, string>\n}\n\nexport const DEFAULT_RECURRENCE_BUILDER_LABELS: RecurrenceBuilderLabels = {\n rruleLabel: 'Custom schedule (iCalendar rule)',\n rrulePlaceholder: 'FREQ=WEEKLY;BYDAY=MO;BYHOUR=8',\n backToSimple: '← Back to simple',\n repeat: 'Repeat',\n daily: 'Daily',\n weekly: 'Weekly',\n monthly: 'Monthly',\n onDay: 'On day',\n at: 'At',\n on: 'On',\n advanced: 'Custom schedule…',\n weekdayShort: { MO: 'M', TU: 'T', WE: 'W', TH: 'T', FR: 'F', SA: 'S', SU: 'S' },\n}\n\nexport interface RecurrenceBuilderTestIds {\n rruleRaw: string\n simple: string\n builder: string\n frequency: string\n monthDay: string\n time: string\n advanced: string\n /** Per weekday chip (default `task-weekday-{MO..SU}`). */\n weekday: (day: Weekday) => string\n}\n\nexport interface RecurrenceBuilderProps {\n rrule: string\n onChange: (rrule: string) => void\n testIds?: Partial<RecurrenceBuilderTestIds>\n labels?: Partial<RecurrenceBuilderLabels>\n}\n\nconst pad2 = (n: number) => String(n).padStart(2, '0')\n\nexport function RecurrenceBuilder({ rrule, onChange, testIds, labels }: RecurrenceBuilderProps) {\n const l = { ...DEFAULT_RECURRENCE_BUILDER_LABELS, ...labels }\n // Advanced when there's a rule we can't represent in the preset builder.\n const [advanced, setAdvanced] = useState(() => !!rrule && parseRRule(rrule) === null)\n const [preset, setPreset] = useState<RecurrencePreset>(\n () => parseRRule(rrule) ?? DEFAULT_RECURRENCE\n )\n\n // Seed the parent with a valid default rule on first mount when empty.\n useEffect(() => {\n if (!rrule) onChange(buildRRule(DEFAULT_RECURRENCE))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const update = (next: RecurrencePreset) => {\n setPreset(next)\n onChange(buildRRule(next))\n }\n\n const toggleWeekday = (day: Weekday) => {\n const has = preset.weekdays.includes(day)\n const weekdays = has ? preset.weekdays.filter((d) => d !== day) : [...preset.weekdays, day]\n update({ ...preset, weekdays: weekdays.length > 0 ? weekdays : preset.weekdays })\n }\n\n const onTimeChange = (value: string) => {\n const [h, m] = value.split(':').map(Number)\n if (Number.isInteger(h) && Number.isInteger(m)) update({ ...preset, hour: h, minute: m })\n }\n\n if (advanced) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-rrule-raw\">{l.rruleLabel}</Label>\n <Input\n id=\"task-rrule-raw\"\n value={rrule}\n onChange={(e) => onChange(e.target.value)}\n placeholder={l.rrulePlaceholder}\n data-testid={testIdOr(testIds?.rruleRaw, { testId: 'task-rrule-raw' })}\n />\n <button\n type=\"button\"\n className=\"text-sm text-muted-foreground hover:text-foreground\"\n onClick={() => {\n const parsed = parseRRule(rrule)\n setPreset(parsed ?? DEFAULT_RECURRENCE)\n if (!parsed) onChange(buildRRule(DEFAULT_RECURRENCE))\n setAdvanced(false)\n }}\n data-testid={testIdOr(testIds?.simple, { testId: 'task-recurrence-simple' })}\n >\n {l.backToSimple}\n </button>\n </div>\n )\n }\n\n return (\n <div\n className=\"space-y-3\"\n data-testid={testIdOr(testIds?.builder, { testId: 'task-recurrence-builder' })}\n >\n <div className=\"flex items-end gap-3\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-frequency\">{l.repeat}</Label>\n <Select\n value={preset.frequency}\n onValueChange={(v) => update({ ...preset, frequency: v as RecurrenceFrequency })}\n >\n <SelectTrigger\n id=\"task-frequency\"\n className=\"w-[140px]\"\n data-testid={testIdOr(testIds?.frequency, { testId: 'task-frequency' })}\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"daily\">{l.daily}</SelectItem>\n <SelectItem value=\"weekly\">{l.weekly}</SelectItem>\n <SelectItem value=\"monthly\">{l.monthly}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {preset.frequency === 'monthly' && (\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-monthday\">{l.onDay}</Label>\n <Input\n id=\"task-monthday\"\n type=\"number\"\n min={1}\n max={31}\n className=\"w-20\"\n value={preset.monthDay}\n onChange={(e) => {\n const d = Math.min(31, Math.max(1, Number(e.target.value) || 1))\n update({ ...preset, monthDay: d })\n }}\n data-testid={testIdOr(testIds?.monthDay, { testId: 'task-monthday' })}\n />\n </div>\n )}\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-time\">{l.at}</Label>\n <Input\n id=\"task-time\"\n type=\"time\"\n className=\"w-28\"\n value={`${pad2(preset.hour)}:${pad2(preset.minute)}`}\n onChange={(e) => onTimeChange(e.target.value)}\n data-testid={testIdOr(testIds?.time, { testId: 'task-time' })}\n />\n </div>\n </div>\n\n {preset.frequency === 'weekly' && (\n <div className=\"space-y-2\">\n <Label>{l.on}</Label>\n <div className=\"flex gap-1\">\n {WEEKDAYS.map((day) => (\n <Button\n key={day}\n type=\"button\"\n size=\"icon\"\n variant={preset.weekdays.includes(day) ? 'default' : 'outline'}\n className={cn('h-8 w-8 rounded-full text-xs')}\n onClick={() => toggleWeekday(day)}\n data-testid={testIdOr(testIds?.weekday?.(day), { testId: `task-weekday-${day}` })}\n aria-pressed={preset.weekdays.includes(day)}\n >\n {l.weekdayShort[day]}\n </Button>\n ))}\n </div>\n </div>\n )}\n\n <button\n type=\"button\"\n className=\"text-sm text-muted-foreground hover:text-foreground\"\n onClick={() => setAdvanced(true)}\n data-testid={testIdOr(testIds?.advanced, { testId: 'task-recurrence-advanced' })}\n >\n {l.advanced}\n </button>\n </div>\n )\n}\n","import type { Tone } from '../../components/tones'\n\n/**\n * What starts a workflow: a moment (`one_time`), a repeating schedule (`recurring`), a notification\n * (`event`), another conversation finishing (`after`), or nothing but someone pressing Run (`on_demand`).\n */\nexport type WorkflowTriggerType = 'one_time' | 'recurring' | 'event' | 'after' | 'on_demand'\n\n/**\n * Where a task (a conversation with a status) is. Agents do the work; only a person marks it `done`.\n * - `todo`: open, nothing automated pending (a finished run leaves the task here).\n * - `generating`: an agent run is in flight.\n * - `done`: a person marked it done.\n * - `chat`: no status at all: a plain conversation, listed beside the tasks.\n */\nexport type TaskStatusKey = 'todo' | 'generating' | 'done' | 'chat'\n\nexport const TRIGGER_LABELS: Record<WorkflowTriggerType, string> = {\n one_time: 'One-time',\n recurring: 'Recurring',\n event: 'Event',\n after: 'After a task',\n on_demand: 'On demand',\n}\n\nexport const STATUS_LABELS: Record<TaskStatusKey, string> = {\n todo: 'To do',\n generating: 'Generating',\n done: 'Done',\n chat: 'Chat',\n}\n\n/** The order sections appear in the list: work in progress first, finished work last. */\nexport const STATUS_ORDER: readonly TaskStatusKey[] = ['generating', 'todo', 'done', 'chat']\n\nexport const STATUS_TONE: Record<TaskStatusKey, Tone> = {\n todo: 'neutral',\n generating: 'ai',\n done: 'success',\n chat: 'neutral',\n}\n\n/**\n * A status string from the API narrowed to the known set. No status is a plain chat; anything else\n * unexpected reads as a to-do.\n */\nexport function asTaskStatus(status: string | null | undefined): TaskStatusKey {\n if (!status) return 'chat'\n return (STATUS_ORDER as readonly string[]).includes(status) ? (status as TaskStatusKey) : 'todo'\n}\n\n/** The goal-state fields the list reads from a goal task's last run. */\nexport interface TaskGoalState {\n done?: boolean\n criteria_met?: number\n criteria_total?: number\n}\n\n/**\n * Goal progress from a goal task's last run (its `/goal` gate verdict), or null when the task\n * has no goal state yet.\n */\nexport function goalProgress(task: { goal_state?: unknown }): {\n met: number\n total: number\n done: boolean\n} | null {\n const gs = task.goal_state as TaskGoalState | null | undefined\n if (!gs || gs.criteria_total == null) return null\n return { met: gs.criteria_met ?? 0, total: gs.criteria_total, done: gs.done === true }\n}\n","import { FileText } from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\n/** A document a task produced, as the Outputs cell needs it. */\nexport interface TaskOutput {\n id: string\n name: string\n}\n\nexport interface TaskOutputsCellLabels {\n none: string\n /** Menu trigger's accessible name. */\n open: (count: number) => string\n /** \"+2\" next to the first file name. */\n more: (count: number) => string\n}\n\nexport const DEFAULT_TASK_OUTPUTS_CELL_LABELS: TaskOutputsCellLabels = {\n none: '—',\n open: (count) => `${count} ${count === 1 ? 'output' : 'outputs'}`,\n more: (count) => `+${count}`,\n}\n\nexport interface TaskOutputsCellProps {\n /** Task id: keys the test ids (`task-outputs-{id}`, `task-output-{id}-{docId}`). */\n id: string\n outputs?: readonly TaskOutput[]\n onOpen: (documentId: string) => void\n testId?: string\n labels?: Partial<TaskOutputsCellLabels>\n}\n\n/** The documents a task generated: the first file name and a count, with a menu that opens each. */\nexport function TaskOutputsCell({ id, outputs, onOpen, testId, labels }: TaskOutputsCellProps) {\n const l = { ...DEFAULT_TASK_OUTPUTS_CELL_LABELS, ...labels }\n const base = testIdOr(testId, { testId: `task-outputs-${id}` })\n if (!outputs || outputs.length === 0) {\n return (\n <span className=\"text-xs text-muted-foreground\" data-testid={base} data-state=\"none\">\n {l.none}\n </span>\n )\n }\n const [first] = outputs\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 max-w-full gap-1.5 px-2 text-xs\"\n aria-label={l.open(outputs.length)}\n data-testid={base}\n data-count={outputs.length}\n >\n <FileText className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{first.name}</span>\n {outputs.length > 1 && (\n <span className=\"shrink-0 text-muted-foreground\">{l.more(outputs.length - 1)}</span>\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {outputs.map((o) => (\n <DropdownMenuItem\n key={o.id}\n onSelect={() => onOpen(o.id)}\n data-testid={`task-output-${id}-${o.id}`}\n >\n <FileText className=\"mr-2 size-4\" aria-hidden />\n <span className=\"truncate\">{o.name}</span>\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","import { useState } from 'react'\nimport { CornerDownRight } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n Input,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface TaskMoveOption {\n id: string\n label: string\n}\n\nexport interface TaskMoveDialogLabels {\n title: string\n none: string\n search: string\n empty: string\n cancel: string\n}\n\nexport interface TaskMoveDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** Where the task can go (the host excludes the task itself and its descendants). */\n options: TaskMoveOption[]\n /** The task's current parent, marked in the list. */\n currentParentId?: string | null\n /** `null` moves the task to the top level. */\n onPick: (parentId: string | null) => void\n labels: TaskMoveDialogLabels\n testId?: string\n}\n\n/** A parent picker: choose the task another task becomes a sub-task of, or the top level. */\nexport function TaskMoveDialog({\n open,\n onOpenChange,\n options,\n currentParentId,\n onPick,\n labels,\n testId,\n}: TaskMoveDialogProps) {\n const [query, setQuery] = useState('')\n const id = testIdOr(testId, { testId: 'task-move' })\n const q = query.trim().toLowerCase()\n const shown = q ? options.filter((o) => o.label.toLowerCase().includes(q)) : options\n const pick = (parentId: string | null) => {\n onPick(parentId)\n onOpenChange(false)\n }\n return (\n <Dialog\n open={open}\n onOpenChange={(next) => {\n if (!next) setQuery('')\n onOpenChange(next)\n }}\n >\n <DialogContent presentation=\"sheet\" className=\"max-h-[80dvh] sm:max-w-md\" data-testid={id}>\n <DialogHeader>\n <DialogTitle>{labels.title}</DialogTitle>\n <DialogDescription className=\"sr-only\">{labels.title}</DialogDescription>\n </DialogHeader>\n <Input\n value={query}\n placeholder={labels.search}\n aria-label={labels.search}\n onChange={(e) => setQuery(e.target.value)}\n data-testid={`${id}-search`}\n />\n <ul\n className=\"flex max-h-[50dvh] flex-col gap-1 overflow-y-auto\"\n data-testid={`${id}-list`}\n >\n {!q && (\n <li>\n <Button\n variant=\"ghost\"\n className=\"h-9 w-full justify-start gap-2 pointer-coarse:h-11\"\n disabled={!currentParentId}\n onClick={() => pick(null)}\n data-testid={`${id}-none`}\n >\n {labels.none}\n </Button>\n </li>\n )}\n {shown.map((o) => (\n <li key={o.id}>\n <Button\n variant=\"ghost\"\n className=\"h-9 w-full justify-start gap-2 pointer-coarse:h-11\"\n disabled={o.id === currentParentId}\n onClick={() => pick(o.id)}\n data-testid={`${id}-option-${o.id}`}\n >\n <CornerDownRight className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{o.label}</span>\n </Button>\n </li>\n ))}\n {shown.length === 0 && (\n <li className=\"px-2 py-4 text-center text-sm text-muted-foreground\">{labels.empty}</li>\n )}\n </ul>\n <div className=\"flex justify-end\">\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n {labels.cancel}\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n","import { useEffect, useState } from 'react'\nimport { AlertCircle, Check, CircleDashed, Loader2, MessageSquare } from 'lucide-react'\nimport { ToneBadge } from '../../components/ToneBadge'\nimport { testIdOr } from '../../chat/test-id'\nimport { formatElapsed } from './elapsed'\nimport { STATUS_LABELS, STATUS_TONE, asTaskStatus, type TaskStatusKey } from './taskLabels'\n\nexport interface TaskStatusPillLabels {\n waitingForAccess: string\n lastRunFailed: string\n /** The visible word beside the status when the last run failed. */\n failed: string\n}\n\nexport const DEFAULT_TASK_STATUS_PILL_LABELS: TaskStatusPillLabels = {\n waitingForAccess: 'Waiting for access',\n lastRunFailed: 'Last run failed',\n failed: 'Failed',\n}\n\nexport interface TaskStatusPillProps {\n /** Task id: keys the test id (`task-status-{id}`). */\n id: string\n status: string | null | undefined\n /** When the in-flight run started (ISO); a generating pill shows a live elapsed time. */\n runStartedAt?: string | null\n /** The last run's error, shown as a danger dot with the message on hover. */\n lastError?: string | null\n /** A run is waiting for the owner to grant workspace access. */\n awaitingAccess?: boolean\n testId?: string\n labels?: Partial<TaskStatusPillLabels>\n /** Tooltip with the latest step (\"To do · 2 min ago\"). */\n hint?: string\n}\n\nconst ICON = 'size-3'\n\nfunction StatusIcon({ status }: { status: TaskStatusKey }) {\n switch (status) {\n case 'generating':\n return <Loader2 className={`${ICON} animate-spin`} aria-hidden />\n case 'done':\n return <Check className={ICON} aria-hidden />\n case 'chat':\n return <MessageSquare className={ICON} aria-hidden />\n default:\n return <CircleDashed className={ICON} aria-hidden />\n }\n}\n\n/** Ticks once a second while mounted, so a generating pill's elapsed time stays live. */\nfunction useNow(active: boolean): number {\n const [now, setNow] = useState(() => Date.now())\n useEffect(() => {\n if (!active) return\n const timer = setInterval(() => setNow(Date.now()), 1000)\n return () => clearInterval(timer)\n }, [active])\n return now\n}\n\n/** A task's workflow status as one tinted pill: To do, Generating (live), Done. */\nexport function TaskStatusPill({\n id,\n status,\n runStartedAt,\n lastError,\n awaitingAccess = false,\n testId,\n labels,\n hint,\n}: TaskStatusPillProps) {\n const l = { ...DEFAULT_TASK_STATUS_PILL_LABELS, ...labels }\n const key = asTaskStatus(status)\n const generating = key === 'generating'\n const now = useNow(generating && Boolean(runStartedAt))\n const started = runStartedAt ? Date.parse(runStartedAt) : NaN\n\n let text: string = STATUS_LABELS[key]\n let tone = STATUS_TONE[key]\n if (awaitingAccess) {\n text = l.waitingForAccess\n tone = 'danger'\n }\n const elapsed = generating && !Number.isNaN(started) ? formatElapsed(started, now) : null\n\n return (\n <span className=\"inline-flex items-center gap-1.5\" data-slot=\"task-status\" title={hint}>\n <ToneBadge\n tone={tone}\n icon={<StatusIcon status={key} />}\n data-status={key}\n data-testid={testIdOr(testId, { testId: `task-status-${id}` })}\n >\n {text}\n {elapsed && <span className=\"tabular-nums opacity-70\">· {elapsed}</span>}\n </ToneBadge>\n {lastError && !generating && (\n <span\n role=\"img\"\n aria-label={l.lastRunFailed}\n title={`${l.lastRunFailed}: ${lastError}`}\n className=\"inline-flex shrink-0 items-center gap-1 text-xs font-medium text-red-text\"\n data-testid={`task-error-${id}`}\n >\n <AlertCircle className=\"size-3.5\" aria-hidden />\n {l.failed}\n </span>\n )}\n </span>\n )\n}\n","/**\n * Column definitions for the tasks grid. Every column has an\n * explicit `colId` (AG Grid persists column state by id: see CLAUDE.md). The table supplies behaviour and\n * the cells that need it through slots; the structure, widths and headers live here. The slots must be\n * stable functions (the table keeps the latest handlers behind them) so the definitions are built once\n * and the grid never refreshes its columns on a selection or expand.\n *\n * Every conversation is a task: Owner (who has the next step), due, shared, thread link,\n * status, outputs. Rows are `TaskGridRow`s: a task plus where it sits in the sub-task tree, so the\n * order is the tree's. A column's header still shows and reports the sort, but the grid's own sort is\n * a no-op (`keepOrder`): that would tear sub-tasks away from their parent, so the table sorts within\n * each level instead (see `buildTaskRows`).\n */\nimport type { ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport type { TaskGridRow, TaskListRow } from './taskRows'\nimport type { TaskListLabels } from './taskTableLabels'\n\n/** The actions column's width: Allow access and the menu (the widest row). */\nexport const ACTIONS_WIDTH = 160\nconst NARROW_ACTIONS_WIDTH = 56\n\nexport const TASK_COLUMN_ORDER = [\n 'name',\n 'owner',\n 'due',\n 'status',\n 'outputs',\n 'shared',\n 'actions',\n] as const\n\nexport interface CreateTaskColumnsOptions<T extends TaskListRow> {\n labels: TaskListLabels\n renderName: (row: TaskGridRow<T>) => ReactNode\n /** Who has the next step. */\n renderOwner: (row: TaskGridRow<T>) => ReactNode\n renderDue: (row: TaskGridRow<T>) => ReactNode\n renderShared: (row: TaskGridRow<T>) => ReactNode\n /** The documents the task generated. */\n renderOutputs: (row: TaskGridRow<T>) => ReactNode\n /** A phone-width grid: the actions column is just the menu. */\n narrow?: boolean\n /** Whether the Outputs column is shown: only worth the room once some task has outputs. */\n showOutputs?: boolean\n renderStatus: (row: TaskGridRow<T>) => ReactNode\n /** Who is in the thread (Threads view). */\n renderActions: (row: TaskGridRow<T>) => ReactNode\n /** Plain text of the owner cell, for sorting, filters and the clipboard. */\n getOwnerName: (row: TaskGridRow<T>) => string\n}\n\n/** Grid-side comparator that keeps the table's order: the table sorts each level itself. */\nconst keepOrder = () => 0\n\n/** Columns the user can sort by, per view. */\nexport type SortableTaskColumn = 'name' | 'owner' | 'due' | 'status' | 'updated' | 'messages'\n\n/** The cell renderer for a slot: a missing row (AG Grid's loading shell) renders nothing. */\nfunction cell<T extends TaskListRow>(render: (row: TaskGridRow<T>) => ReactNode) {\n return (params: ICellRendererParams<TaskGridRow<T>>): ReactNode =>\n params.data ? render(params.data) : null\n}\n\nexport function createTaskColumns<T extends TaskListRow>(\n o: CreateTaskColumnsOptions<T>\n): ColDef<TaskGridRow<T>>[] {\n const l = o.labels\n const sortable = {\n sortable: true,\n comparator: keepOrder,\n sortingOrder: ['asc' as const, 'desc' as const, null],\n }\n const base: Partial<ColDef<TaskGridRow<T>>> = {\n sortable: false,\n suppressMovable: true,\n // Keyboard focus lands on the name cell only (arrow keys expand and collapse sub-tasks there).\n suppressNavigable: true,\n cellStyle: { display: 'flex', alignItems: 'center' },\n }\n const name: ColDef<TaskGridRow<T>> = {\n ...base,\n colId: 'name',\n ...sortable,\n suppressNavigable: false,\n headerName: l.colTask,\n flex: 3,\n minWidth: 200,\n cellRenderer: cell(o.renderName),\n }\n const shared: ColDef<TaskGridRow<T>> = {\n ...base,\n colId: 'shared',\n headerName: l.colShared,\n headerTooltip: l.shared,\n width: 120,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'center' },\n valueGetter: (p) => p.data?.task.is_shared ?? false,\n cellRenderer: cell(o.renderShared),\n }\n const actions = (): ColDef<TaskGridRow<T>> => ({\n ...base,\n colId: 'actions',\n headerName: '',\n // Always in view, even if the rest has to scroll.\n pinned: 'right',\n lockPinned: true,\n width: o.narrow ? NARROW_ACTIONS_WIDTH : ACTIONS_WIDTH,\n minWidth: NARROW_ACTIONS_WIDTH,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'flex-end' },\n cellRenderer: cell(o.renderActions),\n })\n\n // Left to right: the title, who has the next step, when, how it stands, then who sees it and the\n // thread link, with the actions (Approve included) last, at the right edge.\n return [\n name,\n {\n ...base,\n colId: 'owner',\n ...sortable,\n headerName: l.colOwner,\n headerTooltip: l.ownerHint,\n flex: 1.4,\n minWidth: 150,\n valueGetter: (p) => (p.data ? o.getOwnerName(p.data) : ''),\n cellRenderer: cell(o.renderOwner),\n },\n {\n ...base,\n colId: 'due',\n ...sortable,\n headerName: l.colDue,\n flex: 1,\n minWidth: 140,\n valueGetter: (p) => p.data?.task.due_at ?? '',\n cellRenderer: cell(o.renderDue),\n },\n {\n ...base,\n colId: 'status',\n ...sortable,\n headerName: l.colStatus,\n // Wide enough for \"Generating\" and \"Waiting for access\" in full, with the elapsed time.\n flex: 1.3,\n minWidth: 170,\n valueGetter: (p) => p.data?.task.status ?? '',\n cellRenderer: cell(o.renderStatus),\n },\n ...(o.showOutputs\n ? [\n {\n ...base,\n colId: 'outputs',\n headerName: l.colOutputs,\n flex: 1.2,\n minWidth: 130,\n cellRenderer: cell(o.renderOutputs),\n } as ColDef<TaskGridRow<T>>,\n ]\n : []),\n shared,\n actions(),\n ]\n}\n","import { STATUS_ORDER, asTaskStatus, type TaskStatusKey } from './taskLabels'\n\n/**\n * The deepest a task may nest, counting the top-level task as level 1 (a task, its sub-tasks, their\n * sub-tasks, and so on). The table indents no further than the last level, and \"Move to…\" offers\n * only parents that keep the moved subtree within it. The backend is asked to enforce the same cap.\n */\nexport const MAX_TASK_DEPTH = 5\n\n/**\n * The fields of a task the table reads. A task is a conversation with a `status`\n * (`GET /v1/conversation/list`); callers' richer conversation types are accepted as-is, and the\n * host keeps only the rows whose `status` is set (a chat has none).\n */\nexport interface TaskListRow {\n external_id: string\n /** The conversation title; null until a run (which holds the key) names it. */\n title?: string | null\n description?: string | null\n /** `todo | generating | done`; null for a plain chat. */\n status?: string | null\n in_progress?: boolean | null\n run_started_at?: string | null\n due_at?: string | null\n last_error?: string | null\n /** Set while a run waits for the owner to grant access. */\n pending_auth_request_id?: string | null\n goal_state?: unknown\n /** Shared with the workspace's members (false = private to its owner). */\n is_shared?: boolean | null\n /** False for a teammate's shared task: they can finish it, but not run, share or delete it. */\n is_owner?: boolean | null\n /** The person who created the task (it is assigned to them when no agent works on it). */\n owner_ext_id?: string | null\n /** The task this is a sub-task of. */\n parent_conversation_ext_id?: string | null\n /** The workflow that created it, if any. */\n workflow_ext_id?: string | null\n /** The agent that prepares the work (none for a plain to-do). */\n agent_ext_id?: string | null\n /** Work for the default assistant need not have a named agent. */\n has_agent_action?: boolean\n skill_ref?: string | null\n /** Who started the thread. */\n created_by_ext_id?: string | null\n message_count?: number | null\n updated_at?: string | null\n}\n\n/**\n * Who owns a task: the person who created it (never the agent that did the work). They are notified\n * when its run finishes.\n */\nexport const ownerExtId = (task: TaskListRow): string | null =>\n task.owner_ext_id || task.created_by_ext_id || null\n\n/** A plain to-do (no agent, no skill): nothing to run, a person just marks it done. */\nexport const isPlainTodo = (task: TaskListRow): boolean =>\n !task.agent_ext_id && !task.has_agent_action && !task.skill_ref\n\nexport type TaskFilter = 'all' | TaskStatusKey\n\n/** One line of the table: a task, how deep it sits under its parent and what its children add up to. */\nexport interface TaskGridRow<T extends TaskListRow> {\n external_id: string\n task: T\n depth: number\n /** Present when the task has sub-tasks (all of them, whatever the filter shows). */\n childStats?: { done: number; total: number }\n expanded: boolean\n parentId: string | null\n /** Number of siblings shown at this level, and this row's 1-based place among them. */\n setSize: number\n posInSet: number\n /** Shown only as the ancestor of a match (the filter or search did not select it itself). */\n context: boolean\n}\n\n/** The parent/child index of a task list. A parent that is not in the list (hidden, deleted) is ignored. */\nexport interface TaskTree<T extends TaskListRow> {\n byId: Map<string, T>\n kids: Map<string, T[]>\n parentOf: Map<string, string>\n}\n\nexport function indexTasks<T extends TaskListRow>(tasks: T[]): TaskTree<T> {\n const byId = new Map(tasks.map((t) => [t.external_id, t]))\n const kids = new Map<string, T[]>()\n const parentOf = new Map<string, string>()\n for (const task of tasks) {\n const parent = task.parent_conversation_ext_id\n if (parent && parent !== task.external_id && byId.has(parent)) {\n parentOf.set(task.external_id, parent)\n const list = kids.get(parent)\n if (list) list.push(task)\n else kids.set(parent, [task])\n }\n }\n return { byId, kids, parentOf }\n}\n\n/** Every task below `id`, at any depth (collapsed or filtered out included), without repeats. */\nexport function descendantIds<T extends TaskListRow>(tree: TaskTree<T>, id: string): string[] {\n const out: string[] = []\n const seen = new Set<string>([id])\n const stack = [id]\n while (stack.length) {\n for (const child of tree.kids.get(stack.pop() as string) ?? []) {\n if (seen.has(child.external_id)) continue\n seen.add(child.external_id)\n out.push(child.external_id)\n stack.push(child.external_id)\n }\n }\n return out\n}\n\n/** 1 for a task with no children, 2 for one with children, and so on. */\nfunction subtreeLevels<T extends TaskListRow>(\n tree: TaskTree<T>,\n id: string,\n seen = new Set<string>()\n): number {\n if (seen.has(id)) return 0\n const next = new Set(seen).add(id)\n let deepest = 0\n for (const child of tree.kids.get(id) ?? []) {\n deepest = Math.max(deepest, subtreeLevels(tree, child.external_id, next))\n }\n return 1 + deepest\n}\n\n/** The level of a task: 1 for a top-level task. */\nfunction levelOf<T extends TaskListRow>(tree: TaskTree<T>, id: string): number {\n let level = 1\n const seen = new Set<string>([id])\n for (let at = tree.parentOf.get(id); at && !seen.has(at); at = tree.parentOf.get(at)) {\n seen.add(at)\n level += 1\n }\n return level\n}\n\n/**\n * The tasks `task` can be moved under: any other task that is not one of its own descendants and\n * keeps the moved subtree within {@link MAX_TASK_DEPTH}.\n */\nexport function moveTargets<T extends TaskListRow>(tasks: T[], task: T): T[] {\n const tree = indexTasks(tasks)\n const banned = new Set([task.external_id, ...descendantIds(tree, task.external_id)])\n const height = subtreeLevels(tree, task.external_id)\n return tasks.filter(\n (t) => !banned.has(t.external_id) && levelOf(tree, t.external_id) + height <= MAX_TASK_DEPTH\n )\n}\n\ninterface TreeNode<T extends TaskListRow> {\n task: T\n depth: number\n context: boolean\n children: TreeNode<T>[]\n}\n\nexport interface BuildTaskRowsOptions<T extends TaskListRow> {\n /** Case-insensitive text matched against the title and description. */\n query?: string\n /** The text shown for a task (defaults to its title): what the search reads. */\n titleOf?: (task: T) => string\n /**\n * Rows built last time, by id. A row whose task, depth, place and counts are unchanged is reused\n * (same object), so the grid only refreshes the rows that really changed. Updated in place.\n */\n cache?: Map<string, TaskGridRow<T>>\n}\n\nconst sameStats = (a: TaskGridRow<never>['childStats'], b: TaskGridRow<never>['childStats']) =>\n a === b || (a !== undefined && b !== undefined && a.done === b.done && a.total === b.total)\n\n/**\n * The table's lines, in order. The full view is the sub-task forest grouped by the status of each root\n * (what an agent is generating first, then to-dos, and finally what is done). A\n * status filter or a search keeps every match together with its ancestors, which show as `context`\n * rows rather than leaving their children orphaned. A task whose parent is not in the list (not\n * visible, or deleted) is top-level, and a collapsed task hides its sub-tasks.\n *\n * With `compare` (the user sorted a column) tasks are sorted within their own level: roots among roots\n * (no longer grouped by status) and each task's sub-tasks among themselves, so a sub-task never leaves\n * its parent. AG Grid cannot do this itself without its Enterprise tree data.\n */\nexport function buildTaskRows<T extends TaskListRow>(\n tasks: T[],\n filter: TaskFilter,\n collapsed: ReadonlySet<string>,\n compare?: (a: T, b: T) => number,\n options: BuildTaskRowsOptions<T> = {}\n): TaskGridRow<T>[] {\n const tree = indexTasks(tasks)\n const { kids, parentOf } = tree\n const sorted = (list: T[]): T[] => (compare ? [...list].sort(compare) : list)\n const query = options.query?.trim().toLowerCase() ?? ''\n const titleOf = options.titleOf ?? ((t: T) => t.title ?? '')\n\n // With a filter or a search only the matches and their ancestors are shown.\n let included: Set<string> | null = null\n let matched: Set<string> | null = null\n if (filter !== 'all' || query) {\n matched = new Set()\n included = new Set()\n for (const task of tasks) {\n const statusOk = filter === 'all' || asTaskStatus(task.status) === filter\n const textOk =\n !query || `${titleOf(task)} ${task.description ?? ''}`.toLowerCase().includes(query)\n if (!statusOk || !textOk) continue\n matched.add(task.external_id)\n for (\n let at: string | undefined = task.external_id;\n at && !included.has(at);\n at = parentOf.get(at)\n ) {\n included.add(at)\n }\n }\n }\n const shown = (list: T[]): T[] =>\n included ? list.filter((t) => (included as Set<string>).has(t.external_id)) : list\n\n const build = (task: T, depth: number, seen: Set<string>): TreeNode<T> => {\n const nextSeen = new Set(seen).add(task.external_id)\n return {\n task,\n depth,\n context: matched ? !matched.has(task.external_id) : false,\n children: sorted(shown(kids.get(task.external_id) ?? []))\n .filter((child) => !nextSeen.has(child.external_id))\n .map((child) => build(child, depth + 1, nextSeen)),\n }\n }\n\n // Without a sort the sections are the statuses; with one there is a single section in sorted order.\n const sections = new Map<TaskStatusKey | 'sorted', TreeNode<T>[]>([\n ...STATUS_ORDER.map((s) => [s, []] as [TaskStatusKey, TreeNode<T>[]]),\n ['sorted', []],\n ])\n const sectionOf = (task: T): TaskStatusKey | 'sorted' =>\n compare ? 'sorted' : asTaskStatus(task.status)\n const roots = tasks.filter((t) => !parentOf.has(t.external_id))\n for (const task of sorted(shown(roots))) {\n sections.get(sectionOf(task))?.push(build(task, 0, new Set()))\n }\n\n const cache = options.cache\n const used = new Set<string>()\n const rows: TaskGridRow<T>[] = []\n const walk = (node: TreeNode<T>, parentId: string | null, setSize: number, posInSet: number) => {\n const id = node.task.external_id\n const expanded = !collapsed.has(id)\n const all = kids.get(id)\n const childStats = all\n ? { done: all.filter((c) => asTaskStatus(c.status) === 'done').length, total: all.length }\n : undefined\n let row: TaskGridRow<T> = {\n external_id: id,\n task: node.task,\n depth: node.depth,\n childStats,\n expanded,\n parentId,\n setSize,\n posInSet,\n context: node.context,\n }\n const prev = cache?.get(id)\n if (\n prev &&\n prev.task === row.task &&\n prev.depth === row.depth &&\n prev.expanded === row.expanded &&\n prev.parentId === row.parentId &&\n prev.setSize === row.setSize &&\n prev.posInSet === row.posInSet &&\n prev.context === row.context &&\n sameStats(prev.childStats, row.childStats)\n ) {\n row = prev\n }\n used.add(id)\n cache?.set(id, row)\n rows.push(row)\n if (expanded) {\n node.children.forEach((child, i) => walk(child, id, node.children.length, i + 1))\n }\n }\n const ordered = [...STATUS_ORDER, 'sorted' as const].flatMap((s) => sections.get(s) ?? [])\n ordered.forEach((node, i) => walk(node, null, ordered.length, i + 1))\n if (cache) for (const id of [...cache.keys()]) if (!used.has(id)) cache.delete(id)\n return rows\n}\n","import type { TaskStatusKey } from './taskLabels'\n\nexport interface TaskListLabels {\n agent: string\n filterAll: string\n emptyTitle: string\n emptyMessage: string\n noMatches: string\n due: (when: string) => string\n overdue: (when: string) => string\n colTask: string\n colOwner: string\n ownerHint: string\n colOutputs: string\n preparedBy: (agentName: string) => string\n colDue: string\n colStatus: string\n me: string\n someone: string\n noDue: string\n colShared: string\n shared: string\n sharedOwnerOnly: string\n deleteOwnerOnly: string\n goalMet: (met: number, total: number) => string\n subtasksDone: (done: number, total: number) => string\n expandSubtasks: string\n collapseSubtasks: string\n selectAll: string\n selectTask: (name: string) => string\n markDone: string\n reopen: string\n markDoneMany: string\n markDoneManyHint: string\n deleteMany: string\n moveTo: string\n untitled: string\n fromWorkflow: (workflowName: string) => string\n searchLabel: string\n searchPlaceholder: string\n expandAll: string\n collapseAll: string\n moveToTitle: (taskName: string) => string\n moveToNone: string\n moveToSearch: string\n moveToEmpty: string\n moveToCancel: string\n subtasksSelected: (count: number) => string\n addSubtask: string\n edit: string\n rename: string\n delete: string\n grantAccess: string\n allowAccess: string\n moreActions: string\n activity: string\n /** Status tooltip: the latest step and how long ago. */\n statusHint: (status: string, ago: string) => string\n status: Partial<Record<TaskStatusKey, string>>\n}\n\nexport const DEFAULT_TASK_LIST_LABELS: TaskListLabels = {\n filterAll: 'All',\n emptyTitle: 'No tasks yet',\n emptyMessage:\n 'Use New to add one: just type what you need, or add a due date. Automations that create tasks live on the Workflows page. You always decide when a task is done.',\n noMatches: 'No tasks match.',\n due: (when) => when,\n overdue: (when) => `${when} · overdue`,\n agent: 'Agent',\n colTask: 'Task',\n colOwner: 'Owner',\n ownerHint: 'Who created the task. They are notified when its run finishes.',\n colOutputs: 'Outputs',\n preparedBy: (agent) => `Prepared by ${agent}`,\n colDue: 'Due',\n colStatus: 'Status',\n me: 'Me',\n someone: 'Someone',\n noDue: '—',\n colShared: 'Sharing',\n shared: 'Shared with the workspace',\n sharedOwnerOnly: 'Only the creator can change who can see this',\n deleteOwnerOnly: 'Only the creator or workspace owner can delete this',\n goalMet: (met, total) => `${met}/${total} met`,\n subtasksDone: (done, total) => `${done}/${total} sub-tasks done`,\n expandSubtasks: 'Show sub-tasks',\n collapseSubtasks: 'Hide sub-tasks',\n selectAll: 'Select all tasks',\n selectTask: (name) => `Select ${name}`,\n markDone: 'Mark done',\n reopen: 'Reopen',\n markDoneMany: 'Mark done',\n markDoneManyHint: 'Marks the selected tasks done.',\n deleteMany: 'Delete',\n moveTo: 'Move to…',\n untitled: 'Untitled task',\n fromWorkflow: (name) => `From “${name}”`,\n searchLabel: 'Search tasks',\n searchPlaceholder: 'Search tasks…',\n expandAll: 'Expand all',\n collapseAll: 'Collapse all',\n moveToTitle: (name) => `Move “${name}” to…`,\n moveToNone: 'No parent (top level)',\n moveToSearch: 'Search tasks…',\n moveToEmpty: 'No task to move it under.',\n moveToCancel: 'Cancel',\n subtasksSelected: (count) => `${count} ${count === 1 ? 'sub-task' : 'sub-tasks'} included`,\n addSubtask: 'Add sub-task',\n edit: 'Edit',\n rename: 'Rename',\n delete: 'Delete',\n grantAccess: 'Allow access and continue',\n allowAccess: 'Allow access',\n moreActions: 'More actions',\n activity: 'Activity',\n statusHint: (status, ago) => `${status} · ${ago}`,\n status: {},\n}\n","import { useState } from 'react'\nimport {\n CheckCheck,\n KeyRound,\n CornerDownRight,\n ListPlus,\n MoreHorizontal,\n History,\n Pencil,\n RotateCcw,\n Trash2,\n} from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@arbidocs/react/ui'\nimport { isPlainTodo, type TaskListRow } from './taskRows'\nimport type { TaskStatusKey } from './taskLabels'\nimport type { TaskListLabels } from './taskTableLabels'\n\nexport interface TaskRowMenuProps {\n task: TaskListRow\n status: TaskStatusKey\n busy: boolean\n /** The viewer owns the task: only they delete it, grant its agent access, or change who sees it. */\n isOwner: boolean\n /** The viewer may change who sees it and delete it: its creator, or an owner of the workspace. */\n canAdmin: boolean\n /** The viewer can edit it: its owner, or an editor of the workspace a shared task sits in. */\n canEdit: boolean\n labels: TaskListLabels\n /** Explicit completion permission; otherwise follows the existing edit permission. */\n canMarkDone?: boolean\n /** Hide when the containing view already offers a reopen control. */\n canReopen?: boolean\n selected?: boolean\n onToggleSelected?: () => void\n onMarkDone: () => void\n onReopen: () => void\n onAddSubtask?: () => void\n onEdit: () => void\n onDelete?: () => void\n onMoveTo?: () => void\n onNotify?: () => void\n /** Open the task's activity timeline. */\n onToggleShared?: () => void\n onOpenActivity?: () => void\n /** Present only when a run is waiting for access. */\n onGrantAccess?: () => void\n}\n\nexport function TaskRowMenu({\n task,\n status,\n busy,\n isOwner,\n canAdmin,\n canEdit,\n labels,\n canMarkDone = canEdit,\n canReopen = canEdit,\n selected = false,\n onToggleSelected,\n onMarkDone,\n onReopen,\n onAddSubtask,\n onEdit,\n onDelete,\n onMoveTo,\n onOpenActivity,\n onToggleShared,\n onGrantAccess,\n}: TaskRowMenuProps) {\n const [open, setOpen] = useState(false)\n const id = task.external_id\n // An editor can do everything but delete and grant access (the owner's). A guest only reads.\n // A plain chat is not run, finished or reopened: it can be renamed, moved and deleted.\n const isChat = status === 'chat'\n const done = status === 'done'\n return (\n <DropdownMenu open={open} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 pointer-coarse:size-11\"\n aria-label={labels.moreActions}\n data-testid={`task-menu-${id}`}\n >\n <MoreHorizontal className=\"size-4\" aria-hidden />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {onToggleSelected && (\n <DropdownMenuItem onSelect={onToggleSelected} data-testid={`task-select-${id}`}>\n {selected ? 'Deselect task' : 'Select task'}\n </DropdownMenuItem>\n )}\n {isOwner && onGrantAccess && task.pending_auth_request_id && (\n <DropdownMenuItem\n onSelect={onGrantAccess}\n data-testid={`task-grant-${id}`}\n className=\"text-destructive\"\n >\n <KeyRound className=\"mr-2 size-4\" aria-hidden />\n {labels.grantAccess}\n </DropdownMenuItem>\n )}\n {isChat || !canEdit\n ? null\n : done\n ? canReopen && (\n <DropdownMenuItem\n disabled={busy}\n onSelect={onReopen}\n data-testid={`task-reopen-${id}`}\n >\n <RotateCcw className=\"mr-2 size-4\" aria-hidden />\n {labels.reopen}\n </DropdownMenuItem>\n )\n : canMarkDone && (\n <DropdownMenuItem\n disabled={busy}\n onSelect={onMarkDone}\n data-testid={`task-mark-done-${id}`}\n >\n <CheckCheck className=\"mr-2 size-4\" aria-hidden />\n {labels.markDone}\n </DropdownMenuItem>\n )}\n {!isChat && onOpenActivity && (\n <DropdownMenuItem onSelect={onOpenActivity} data-testid={`task-activity-${id}`}>\n <History className=\"mr-2 size-4\" aria-hidden />\n {labels.activity}\n </DropdownMenuItem>\n )}\n {isOwner && onToggleShared && (\n <DropdownMenuItem disabled={busy} onSelect={onToggleShared}>\n {task.is_shared ? 'Make private' : 'Share with workspace'}\n </DropdownMenuItem>\n )}\n {canEdit && onAddSubtask && (\n <DropdownMenuItem onSelect={onAddSubtask} data-testid={`task-add-subtask-${id}`}>\n <ListPlus className=\"mr-2 size-4\" aria-hidden />\n {labels.addSubtask}\n </DropdownMenuItem>\n )}\n {canEdit && onMoveTo && (\n <DropdownMenuItem onSelect={onMoveTo} data-testid={`task-move-${id}`}>\n <CornerDownRight className=\"mr-2 size-4\" aria-hidden />\n {labels.moveTo}\n </DropdownMenuItem>\n )}\n {canEdit && (\n <DropdownMenuItem onSelect={onEdit} data-testid={`task-edit-${id}`}>\n <Pencil className=\"mr-2 size-4\" aria-hidden />\n {isChat ? labels.rename : labels.edit}\n </DropdownMenuItem>\n )}\n {canEdit && onDelete && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n disabled={busy || !canAdmin}\n onSelect={onDelete}\n title={canAdmin ? undefined : labels.deleteOwnerOnly}\n className=\"text-destructive focus:text-destructive\"\n data-testid={`task-delete-${id}`}\n >\n <Trash2 className=\"mr-2 size-4\" aria-hidden />\n {labels.delete}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","/**\n * Drop the least useful columns as a grid gets narrower, so the actions column (Approve, Run, the menu)\n * is never pushed off the edge. Each rule keeps its column while the grid is at least `minWidth` wide.\n */\nimport type { GridApi } from 'ag-grid-community'\n\nexport interface ColumnWidthRule {\n colId: string\n /** The narrowest grid (px) that still shows the column. */\n minWidth: number\n}\n\nexport function applyColumnWidthRules(\n api: Pick<GridApi, 'getColumn' | 'setColumnsVisible'>,\n gridWidth: number,\n rules: readonly ColumnWidthRule[]\n): void {\n for (const rule of rules) {\n if (api.getColumn(rule.colId)) api.setColumnsVisible([rule.colId], gridWidth >= rule.minWidth)\n }\n}\n","import { useEffect, useMemo, useRef, useState } from 'react'\nimport type { CellKeyDownEvent, GridApi, GridOptions } from 'ag-grid-community'\nimport {\n ChevronDown,\n ChevronRight,\n ChevronsDownUp,\n ChevronsUpDown,\n CheckCheck,\n KeyRound,\n ListTodo,\n Trash2,\n Workflow,\n} from 'lucide-react'\nimport { Button, Input, cn, SharingEntity } from '@arbidocs/react/ui'\nimport { EmptyState } from '../../components/EmptyState'\nimport { ToneBadge } from '../../components/ToneBadge'\nimport { GridView } from '../../files/GridView'\nimport { SelectionBar, SelectionBarAction } from '../../files/SelectionBar'\nimport { testIdOr } from '../../chat/test-id'\nimport { PersonPill, type TaskPerson } from './PersonPill'\nimport { TaskOutputsCell, type TaskOutput, type TaskOutputsCellLabels } from './TaskOutputsCell'\nimport { TaskMoveDialog } from './TaskMoveDialog'\nimport { TaskRowMenu } from './TaskRowMenu'\nimport {\n DEFAULT_TASK_STATUS_PILL_LABELS,\n TaskStatusPill,\n type TaskStatusPillLabels,\n} from './TaskStatusPill'\nimport { createTaskColumns, type SortableTaskColumn } from './taskColumns'\nimport { applyColumnWidthRules, type ColumnWidthRule } from './gridWidth'\nimport { STATUS_LABELS, STATUS_ORDER, asTaskStatus, goalProgress } from './taskLabels'\nimport {\n buildTaskRows,\n ownerExtId,\n descendantIds,\n indexTasks,\n isPlainTodo,\n moveTargets,\n type TaskFilter,\n type TaskGridRow,\n type TaskListRow,\n} from './taskRows'\nimport { DEFAULT_TASK_LIST_LABELS, type TaskListLabels } from './taskTableLabels'\n\nexport interface TaskTableProps<T extends TaskListRow> {\n /** The workspace's tasks: the conversations that have a status (the host drops plain chats). */\n tasks: T[]\n isLoading?: boolean\n /** Friendly display of an ISO timestamp. */\n formatDate: (iso: string) => string\n /** Open the task's thread (its conversation). */\n onOpenThread: (conversationId: string, task: T) => void\n /** A person marks a task done / reopens a finished one. */\n onMarkDone: (task: T) => void\n onReopen: (task: T) => void\n /** People in the workspace, by id: names the Owner column. */\n people?: { id: string; label: string }[]\n /** Agent names by id, for the Assigned to column (falls back to \"Agent\"). */\n agentNames?: Record<string, string>\n /** Workflow names by id: names a task whose title the run has not generated yet, and its origin chip. */\n workflowNames?: Record<string, string>\n /** Share a task with the workspace or make it private (the shared/private toggle appears with it). */\n onToggleShared?: (task: T, shouldShare: boolean) => void\n onEdit: (task: T) => void\n onDelete: (task: T) => void\n /** Start a new task that is a child of this one. */\n onAddSubtask?: (task: T) => void\n /** Re-parent a task (`null` = top level). With it, the row menu offers \"Move to…\". */\n onMove?: (task: T, parentId: string | null) => void\n /** Bulk actions on the selected rows (the selection bar shows only the ones provided). */\n onMarkDoneMany?: (tasks: T[]) => void\n onDeleteMany?: (tasks: T[]) => void\n /** When set, a run waiting for access shows a one-click \"allow access\" action. */\n onGrantAccess?: (task: T) => void\n /** Task id with a request in flight: its row disables its actions. */\n busyId?: string | null\n /** Text from outside the table (a topbar filter) that narrows the rows like the search box does. */\n filterText?: string\n /**\n * The viewer edits the workspace (owner or collaborator): a row they do not own is always shared, and\n * they may then edit, run, move, mark done and add sub-tasks to it. The share toggle, Delete and Allow\n * access stay with the row's owner. A guest leaves this off and only reads.\n */\n canEditShared?: boolean\n /** The viewer owns the workspace: with a row's creator, the only one who deletes it. Who can see it stays the creator's alone. */\n isWorkspaceOwner?: boolean\n /** Saved column state key (AG Grid persists by it). */\n gridId?: string\n labels?: Partial<TaskListLabels>\n testId?: string\n statusPillLabels?: Partial<TaskStatusPillLabels>\n /** Generated documents per task id (latest versions only); a task with none shows a dash. */\n outputsByTask?: Record<string, readonly TaskOutput[]>\n /** Open one generated document (Tasks view's Outputs column). */\n onOpenOutput?: (documentId: string, task: T) => void\n outputsLabels?: Partial<TaskOutputsCellLabels>\n /** Open a task's activity timeline (row menu: \"Activity\"). */\n onOpenActivity?: (task: T) => void\n /** \"2 min ago\" for the status tooltip; without it the tooltip is left out. */\n formatRelative?: (iso: string) => string\n}\n\nconst ROW_HEIGHT = 56\n/** Taller on a phone, where the status sits under the title. */\nconst NARROW_ROW_HEIGHT = 76\n/** Sub-tasks stop indenting after this depth (the table stays readable at any nesting). */\nconst MAX_INDENT_DEPTH = 4\n/** Above this many rows the grid stops animating row changes. */\nconst ANIMATE_ROWS_UP_TO = 500\n\n/** Below this grid width the table is one column and a menu. */\nconst NARROW_GRID = 640\n\n/** What goes first as the grid narrows (the grid is the page minus the sidebar). */\nconst WIDTH_RULES: readonly ColumnWidthRule[] = [\n { colId: 'shared', minWidth: 1050 },\n { colId: 'due', minWidth: 850 },\n { colId: 'outputs', minWidth: 930 },\n { colId: 'owner', minWidth: 730 },\n { colId: 'status', minWidth: NARROW_GRID },\n]\n\ntype Row<T extends TaskListRow> = TaskGridRow<T>\n\n/** The tooltip on the status pill: the latest step and how long ago. */\nfunction statusHint<T extends TaskListRow>(\n task: T,\n ctx: {\n props: TaskTableProps<T>\n l: TaskListLabels\n }\n): string | undefined {\n const { props: p, l } = ctx\n if (!p.formatRelative || !task.updated_at) return undefined\n const key = asTaskStatus(task.status)\n const pill = { ...DEFAULT_TASK_STATUS_PILL_LABELS, ...p.statusPillLabels }\n const label = task.pending_auth_request_id ? pill.waitingForAccess : STATUS_LABELS[key]\n return l.statusHint(label, p.formatRelative(task.updated_at))\n}\n\n/**\n * The tasks of a workspace as a person's work list, in the same grid as every other list in the app:\n * what an agent is generating first, then to-dos and, last, what is done.\n * Sub-tasks sit indented under their parent. Rows are selected with the grid's checkboxes (shift-click\n * for a range; ticking a parent ticks its sub-tasks) and acted on from the selection bar. Agents prepare\n * work; only a person closes it.\n */\nexport function TaskTable<T extends TaskListRow>(props: TaskTableProps<T>) {\n const { tasks: allTasks, isLoading, busyId, testId } = props\n const l: TaskListLabels = {\n ...DEFAULT_TASK_LIST_LABELS,\n ...props.labels,\n status: { ...STATUS_LABELS, ...props.labels?.status },\n }\n const [filter, setFilter] = useState<TaskFilter>('all')\n const [query, setQuery] = useState('')\n const [collapsed, setCollapsed] = useState<Set<string>>(new Set())\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set())\n const [sort, setSort] = useState<{ colId: SortableTaskColumn; dir: 'asc' | 'desc' } | null>(null)\n const [moving, setMoving] = useState<T | null>(null)\n const tasks = allTasks\n const apiRef = useRef<GridApi<Row<T>> | null>(null)\n // A phone-width grid: one column and a menu, the status under the title (see onGridSizeChanged).\n const [narrow, setNarrow] = useState(false)\n const rowCache = useRef(new Map<string, Row<T>>())\n\n const tree = useMemo(() => indexTasks(tasks), [tasks])\n const peopleNames = useMemo(\n () => new Map((props.people ?? []).map((p) => [p.id, p.label])),\n [props.people]\n )\n /** What a task is called: its title, else the workflow that made it, else \"Untitled\". */\n const nameOf = (task: T): string =>\n task.title?.trim() ||\n (task.workflow_ext_id && props.workflowNames?.[task.workflow_ext_id]) ||\n l.untitled\n /** Who owns the task: its creator. */\n const owner = (task: T): TaskPerson => {\n const id = ownerExtId(task)\n const mine = task.is_owner !== false\n return {\n id,\n label: mine ? l.me : ((id && peopleNames.get(id)) ?? l.someone),\n isMe: mine,\n }\n }\n /** Who started a thread. */\n const starter = (task: T): TaskPerson => {\n const id = task.created_by_ext_id ?? task.owner_ext_id\n const mine = task.is_owner !== false\n return {\n id,\n label: mine ? l.me : ((id && peopleNames.get(id)) ?? l.someone),\n isMe: mine,\n }\n }\n const renderPerson = (person: TaskPerson) => <PersonPill person={person} />\n\n const q = (query.trim() || (props.filterText ?? '').trim()).toLowerCase()\n const counts = useMemo(() => {\n const map = new Map<string, number>(STATUS_ORDER.map((s) => [s, 0]))\n let all = 0\n for (const task of tasks) {\n const text = `${nameOf(task)} ${task.description ?? ''}`.toLowerCase()\n if (q && !text.includes(q)) continue\n all += 1\n const s = asTaskStatus(task.status)\n map.set(s, (map.get(s) ?? 0) + 1)\n }\n map.set('all', all)\n return map\n // nameOf reads the labels and workflow names the table was given.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tasks, q, props.workflowNames, l.untitled])\n\n const compare = useMemo(() => {\n if (!sort) return undefined\n // A sort key is computed once per task, not once per comparison.\n const keys = new Map<T, string | number>()\n const compute = (t: T): string | number => {\n switch (sort.colId) {\n case 'name':\n return nameOf(t).toLowerCase()\n case 'owner':\n return owner(t).label.toLowerCase()\n case 'updated':\n return t.updated_at ? Date.parse(t.updated_at) : 0\n case 'messages':\n return t.message_count ?? 0\n case 'due':\n return t.due_at ? Date.parse(t.due_at) : Number.POSITIVE_INFINITY\n default:\n return STATUS_ORDER.indexOf(asTaskStatus(t.status))\n }\n }\n const key = (t: T): string | number => {\n let k = keys.get(t)\n if (k === undefined) {\n k = compute(t)\n keys.set(t, k)\n }\n return k\n }\n const sign = sort.dir === 'asc' ? 1 : -1\n return (a: T, b: T) => {\n const [x, y] = [key(a), key(b)]\n if (typeof x === 'number' && typeof y === 'number') return (x - y) * sign\n return String(x).localeCompare(String(y)) * sign\n }\n // The name lookups close over the people, agents and workflows the table was given.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n sort,\n peopleNames,\n props.agentNames,\n props.workflowNames,\n l.me,\n l.agent,\n l.someone,\n l.untitled,\n ])\n\n const rows = useMemo(\n () =>\n buildTaskRows(tasks, filter, collapsed, compare, {\n query: query.trim() || props.filterText,\n titleOf: nameOf,\n cache: rowCache.current,\n }),\n // nameOf reads the labels and workflow names the table was given.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [tasks, filter, collapsed, compare, query, props.filterText, props.workflowNames, l.untitled]\n )\n\n // Selection lives here (the grid mirrors it), so a parent can carry its sub-tasks with it, even\n // the collapsed or filtered-out ones the grid does not show.\n const selectedRows = useMemo(\n () => rows.filter((r) => selectedIds.has(r.external_id)),\n [rows, selectedIds]\n )\n const selectedTasks = useMemo(\n () => tasks.filter((t) => selectedIds.has(t.external_id)),\n [tasks, selectedIds]\n )\n const subtasksIncluded = useMemo(\n () =>\n selectedTasks.filter((t) => {\n const parent = tree.parentOf.get(t.external_id)\n return parent !== undefined && selectedIds.has(parent)\n }).length,\n [selectedTasks, selectedIds, tree]\n )\n // Only a task is marked done: a plain chat has no status to finish.\n const markable = selectedTasks.filter(\n (t) =>\n t.status != null &&\n (t.is_owner !== false || props.canEditShared) &&\n isPlainTodo(t) &&\n asTaskStatus(t.status) !== 'done'\n )\n const deletable = selectedTasks.filter((t) => t.is_owner !== false || props.isWorkspaceOwner)\n\n const rowsRef = useRef(rows)\n rowsRef.current = rows\n const handleSelectionChange = (picked: Row<T>[]) => {\n const visible = new Set(rowsRef.current.map((r) => r.external_id))\n const pickedIds = new Set(picked.map((r) => r.external_id))\n setSelectedIds((prev) => {\n const added = [...pickedIds].filter((id) => !prev.has(id))\n const removed = [...prev].filter((id) => visible.has(id) && !pickedIds.has(id))\n if (added.length === 0 && removed.length === 0) return prev\n const next = new Set(prev)\n const nested = true\n for (const id of added) {\n next.add(id)\n if (nested) for (const d of descendantIds(tree, id)) next.add(d)\n }\n for (const id of removed) {\n next.delete(id)\n if (!nested) continue\n for (const d of descendantIds(tree, id)) next.delete(d)\n // A parent is no longer fully selected once one of its sub-tasks is not.\n for (let at = tree.parentOf.get(id); at; at = tree.parentOf.get(at)) next.delete(at)\n }\n return next\n })\n }\n\n const setExpanded = (id: string, expanded: boolean) =>\n setCollapsed((prev) => {\n if (prev.has(id) === !expanded) return prev\n const next = new Set(prev)\n if (expanded) next.delete(id)\n else next.add(id)\n return next\n })\n const expandAll = () => setCollapsed(new Set())\n const collapseAll = () => setCollapsed(new Set(tree.kids.keys()))\n\n // The column definitions are built once. Their cells read the latest props and lookups through\n // this ref, so a selection, a filter or an expand never makes the grid rebuild its columns.\n const latest = useRef({ props, l, owner, starter, renderPerson, nameOf, setExpanded, narrow })\n latest.current = { props, l, owner, starter, renderPerson, nameOf, setExpanded, narrow }\n\n // The Outputs column earns its room once some task has produced something.\n const showOutputs = Object.values(props.outputsByTask ?? {}).some((o) => o.length > 0)\n const columnDefs = useMemo(\n () =>\n createTaskColumns<T>({\n narrow,\n labels: l,\n getOwnerName: (row) => latest.current.owner(row.task).label,\n renderName: (row) => {\n const { l: lb, props: p, nameOf: name } = latest.current\n const { task, depth, childStats, expanded } = row\n const id = task.external_id\n const status = asTaskStatus(task.status)\n const goal = goalProgress(task)\n const workflowName = task.workflow_ext_id ? p.workflowNames?.[task.workflow_ext_id] : null\n return (\n <div\n className=\"flex min-w-0 flex-1 items-center gap-1.5\"\n style={\n depth > 0\n ? { paddingLeft: `${Math.min(depth, MAX_INDENT_DEPTH) * 1.5}rem` }\n : undefined\n }\n data-depth={depth}\n aria-level={depth + 1}\n aria-setsize={row.setSize}\n aria-posinset={row.posInSet}\n data-context={row.context || undefined}\n >\n {childStats ? (\n <button\n type=\"button\"\n onClick={() => latest.current.setExpanded(id, !expanded)}\n aria-expanded={expanded}\n aria-label={expanded ? lb.collapseSubtasks : lb.expandSubtasks}\n className=\"flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n data-testid={`task-expand-${id}`}\n >\n {expanded ? (\n <ChevronDown className=\"size-4\" aria-hidden />\n ) : (\n <ChevronRight className=\"size-4\" aria-hidden />\n )}\n </button>\n ) : depth > 0 ? (\n <span className=\"size-5 shrink-0\" aria-hidden />\n ) : null}\n <div className=\"min-w-0 flex-1 leading-tight\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => latest.current.props.onOpenThread(id, task)}\n // The agent that prepared the work is not a column: it is named here, on hover.\n title={\n task.agent_ext_id\n ? lb.preparedBy(p.agentNames?.[task.agent_ext_id] || lb.agent)\n : undefined\n }\n className={cn(\n // The title has priority: it keeps at least 12 characters before it ellipsises.\n 'min-w-[12ch] truncate text-left text-sm font-medium hover:underline focus-visible:underline focus-visible:outline-none',\n status === 'done' && 'text-muted-foreground line-through'\n )}\n data-testid={`task-name-${id}`}\n >\n {name(task)}\n </button>\n {goal && (\n <ToneBadge\n tone={goal.done ? 'success' : 'neutral'}\n data-testid={`task-goal-progress-${id}`}\n >\n {goal.done ? '✓ ' : ''}\n {lb.goalMet(goal.met, goal.total)}\n </ToneBadge>\n )}\n </div>\n {/* A phone has no Status column: the status sits under the title. */}\n {latest.current.narrow && (\n <div className=\"pt-0.5\">\n <TaskStatusPill\n id={id}\n status={status}\n runStartedAt={task.run_started_at}\n lastError={task.last_error}\n awaitingAccess={Boolean(task.pending_auth_request_id)}\n labels={p.statusPillLabels}\n />\n </div>\n )}\n {/* Second line: what it is (or where it came from) and the sub-task count, which never\n squeezes the title above it. */}\n {(task.description || workflowName || childStats) && (\n <div className=\"flex min-w-0 items-center gap-2 text-xs text-muted-foreground\">\n {task.description ? (\n <p className=\"min-w-0 truncate\">{task.description}</p>\n ) : workflowName ? (\n <span\n className=\"inline-flex min-w-0 items-center gap-1.5\"\n data-testid={`task-workflow-${id}`}\n >\n <Workflow className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{lb.fromWorkflow(workflowName)}</span>\n </span>\n ) : null}\n {childStats && (\n <span\n className=\"shrink-0 tabular-nums\"\n data-testid={`task-subtask-progress-${id}`}\n >\n {lb.subtasksDone(childStats.done, childStats.total)}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n )\n },\n // Who has the next step: the person pill, with the \"Me\" treatment. A plain chat is its starter's.\n renderOwner: (row) => (\n <span data-testid={`task-owner-${row.external_id}`} className=\"flex min-w-0\">\n {latest.current.renderPerson(\n row.task.status ? latest.current.owner(row.task) : latest.current.starter(row.task)\n )}\n </span>\n ),\n renderDue: (row) => {\n const { l: lb, props: p } = latest.current\n const { task } = row\n const dueMs = task.due_at ? Date.parse(task.due_at) : NaN\n const overdue =\n asTaskStatus(task.status) !== 'done' && !Number.isNaN(dueMs) && dueMs < Date.now()\n return (\n <span\n className={cn(\n 'truncate text-sm',\n overdue ? 'font-medium text-red-text' : 'text-muted-foreground'\n )}\n data-testid={`task-due-${task.external_id}`}\n data-overdue={overdue}\n >\n {task.due_at\n ? overdue\n ? lb.overdue(p.formatDate(task.due_at))\n : lb.due(p.formatDate(task.due_at))\n : lb.noDue}\n </span>\n )\n },\n renderShared: (row) => {\n const { l: lb, props: p } = latest.current\n const { task } = row\n // A teammate cannot change the owner's visibility choice.\n if (!p.onToggleShared) return null\n return (\n <SharingEntity\n shared={task.is_shared ?? false}\n onToggle={(shouldShare) => latest.current.props.onToggleShared?.(task, shouldShare)}\n disabled={task.is_owner === false}\n disabledTooltip={lb.sharedOwnerOnly}\n tooltipActive=\"Shared with this workspace — click to make private\"\n tooltipInactive=\"Only you can see this — click to share with this workspace\"\n data-testid={`task-shared-${task.external_id}`}\n />\n )\n },\n showOutputs,\n renderOutputs: (row) => (\n <TaskOutputsCell\n id={row.external_id}\n outputs={latest.current.props.outputsByTask?.[row.external_id]}\n onOpen={(docId) => latest.current.props.onOpenOutput?.(docId, row.task)}\n labels={latest.current.props.outputsLabels}\n />\n ),\n renderStatus: (row) => (\n <TaskStatusPill\n id={row.external_id}\n status={asTaskStatus(row.task.status)}\n runStartedAt={row.task.run_started_at}\n lastError={row.task.last_error}\n awaitingAccess={Boolean(row.task.pending_auth_request_id)}\n labels={latest.current.props.statusPillLabels}\n hint={statusHint(row.task, latest.current)}\n />\n ),\n renderActions: (row) => {\n const { l: lb, props: p } = latest.current\n const { task } = row\n const id = task.external_id\n const status = asTaskStatus(task.status)\n const busy = p.busyId === id\n const isOwner = task.is_owner !== false\n const canEdit = isOwner || Boolean(p.canEditShared)\n const canAdmin = isOwner || Boolean(p.isWorkspaceOwner)\n return (\n <div className=\"flex items-center justify-end gap-2\">\n {!latest.current.narrow &&\n isOwner &&\n task.pending_auth_request_id &&\n p.onGrantAccess && (\n <Button\n size=\"sm\"\n className=\"h-8 gap-1.5 pointer-coarse:h-11\"\n onClick={() => p.onGrantAccess?.(task)}\n data-testid={`task-allow-access-${id}`}\n >\n <KeyRound className=\"size-3.5\" aria-hidden />\n {lb.allowAccess}\n </Button>\n )}\n <TaskRowMenu\n task={task}\n status={status}\n busy={busy}\n isOwner={isOwner}\n canAdmin={canAdmin}\n canEdit={canEdit}\n labels={lb}\n onMarkDone={() => p.onMarkDone(task)}\n onReopen={() => p.onReopen(task)}\n onAddSubtask={p.onAddSubtask ? () => p.onAddSubtask?.(task) : undefined}\n onMoveTo={p.onMove ? () => setMoving(task) : undefined}\n onEdit={() => p.onEdit(task)}\n onDelete={() => p.onDelete(task)}\n onOpenActivity={p.onOpenActivity ? () => p.onOpenActivity?.(task) : undefined}\n onGrantAccess={p.onGrantAccess ? () => p.onGrantAccess?.(task) : undefined}\n />\n </div>\n )\n },\n }),\n // Stable on purpose: only the header texts rebuild the columns (see `latest`).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n l.colTask,\n l.colOwner,\n l.colDue,\n l.colStatus,\n l.colShared,\n l.colOutputs,\n l.shared,\n showOutputs,\n narrow,\n ]\n )\n\n // Cells read their data through `latest`, so a change in the lookups they draw from (people, agents,\n // workflow names, the row in flight) redraws the cells once, rather than on every interaction.\n useEffect(() => {\n apiRef.current?.refreshCells({ force: true })\n }, [\n busyId,\n props.people,\n props.agentNames,\n props.workflowNames,\n props.outputsByTask,\n props.labels,\n props.canEditShared,\n props.isWorkspaceOwner,\n narrow,\n ])\n\n const animate = rows.length <= ANIMATE_ROWS_UP_TO\n const gridOptions = useMemo<Partial<GridOptions<Row<T>>>>(\n () => ({\n suppressClickEdit: true,\n // Keyboard focus lives on the name column only (the others are not navigable): ArrowRight\n // opens a task's sub-tasks and ArrowLeft closes them, or steps up to the parent.\n suppressCellFocus: false,\n suppressColumnVirtualisation: true,\n animateRows: animate,\n getRowClass: (p) => (p.data?.context ? 'opacity-60' : undefined),\n // The grid shows and reports the sort; the table orders each level (see buildTaskRows).\n onSortChanged: (event) => {\n const sorted = event.api.getColumnState().find((c) => c.sort)\n setSort(\n sorted?.colId\n ? { colId: sorted.colId as SortableTaskColumn, dir: sorted.sort ?? 'asc' }\n : null\n )\n },\n onGridSizeChanged: (event) => {\n applyColumnWidthRules(event.api, event.clientWidth, WIDTH_RULES)\n setNarrow(event.clientWidth < NARROW_GRID)\n },\n onCellKeyDown: (event: CellKeyDownEvent<Row<T>>) => {\n const row = event.data\n const key = (event.event as KeyboardEvent | null)?.key\n if (!row || event.column.getColId() !== 'name') return\n if (key === 'ArrowRight' && row.childStats && !row.expanded) {\n event.event?.preventDefault()\n latest.current.setExpanded(row.external_id, true)\n } else if (key === 'ArrowLeft') {\n if (row.childStats && row.expanded) {\n event.event?.preventDefault()\n latest.current.setExpanded(row.external_id, false)\n } else if (row.parentId) {\n event.event?.preventDefault()\n const parent = event.api.getRowNode(row.parentId)\n if (parent?.rowIndex != null) {\n event.api.ensureIndexVisible(parent.rowIndex)\n event.api.setFocusedCell(parent.rowIndex, 'name')\n }\n }\n }\n },\n }),\n [animate]\n )\n\n const clearSelection = () => setSelectedIds(new Set())\n // A Chat chip only once there is a plain chat, so the chips add up to All.\n const filterKeys = (['all', ...STATUS_ORDER] as TaskFilter[]).filter(\n (key) => key !== 'chat' || (counts.get(key) ?? 0) > 0\n )\n const hasChildren = tree.kids.size > 0\n\n return (\n <div\n className=\"flex min-h-0 flex-1 flex-col gap-3\"\n data-testid={testIdOr(testId, { testId: 'task-list' })}\n >\n <div className=\"flex flex-wrap items-center gap-2\">\n <div role=\"tablist\" aria-label=\"Filter tasks\" className=\"flex flex-wrap gap-1.5\">\n {filterKeys.map((key) => {\n const count = counts.get(key) ?? 0\n const isSelected = filter === key\n return (\n <button\n key={key}\n type=\"button\"\n role=\"tab\"\n aria-selected={isSelected}\n onClick={() => setFilter(key)}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full border px-3 py-1 text-xs font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11',\n isSelected\n ? 'border-primary bg-primary/10 text-primary'\n : 'border-border text-muted-foreground hover:bg-accent'\n )}\n data-testid={`task-filter-${key}`}\n >\n {key === 'all' ? l.filterAll : l.status[key]}\n <span className=\"tabular-nums opacity-70\">{count}</span>\n </button>\n )\n })}\n </div>\n <Input\n type=\"search\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={l.searchPlaceholder}\n aria-label={l.searchLabel}\n className=\"h-8 max-w-56 text-xs pointer-coarse:h-11\"\n data-testid=\"task-search\"\n />\n {hasChildren && (\n <div className=\"ml-auto flex gap-1\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1.5 text-xs pointer-coarse:h-11\"\n onClick={expandAll}\n data-testid=\"task-expand-all\"\n >\n <ChevronsUpDown className=\"size-3.5\" aria-hidden />\n {l.expandAll}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1.5 text-xs pointer-coarse:h-11\"\n onClick={collapseAll}\n data-testid=\"task-collapse-all\"\n >\n <ChevronsDownUp className=\"size-3.5\" aria-hidden />\n {l.collapseAll}\n </Button>\n </div>\n )}\n </div>\n {tasks.length === 0 && !isLoading ? (\n <EmptyState\n icon={ListTodo}\n title={l.emptyTitle}\n description={l.emptyMessage}\n testId=\"task-list-empty\"\n />\n ) : (\n <div className=\"min-h-0 flex-1\">\n <GridView<Row<T>>\n testId=\"task-grid\"\n gridId={props.gridId ?? 'tasks-grid-v4'}\n items={rows}\n columnDefs={columnDefs}\n getItemId={(row) => row.external_id}\n getRowTestId={(row) => `task-row-${row.external_id}`}\n isLoading={isLoading}\n showEmpty={rows.length === 0}\n emptyState={{ title: l.noMatches }}\n rowHeight={narrow ? NARROW_ROW_HEIGHT : ROW_HEIGHT}\n height=\"100%\"\n onGridReady={({ api }) => {\n apiRef.current = api\n }}\n selection={{\n mode: 'multiple',\n controlled: true,\n selected: selectedRows,\n onSelectionChange: handleSelectionChange,\n }}\n gridOptions={gridOptions}\n />\n </div>\n )}\n <SelectionBar\n count={selectedTasks.length}\n onClear={clearSelection}\n status={\n selectedTasks.length > 0 && subtasksIncluded > 0 ? (\n <span className=\"text-xs text-muted-foreground\" data-testid=\"task-selection-subtasks\">\n {l.subtasksSelected(subtasksIncluded)}\n </span>\n ) : undefined\n }\n >\n {(isCompact) => (\n <>\n {props.onMarkDoneMany && (\n <SelectionBarAction\n icon={CheckCheck}\n label={l.markDoneMany}\n onClick={() => {\n props.onMarkDoneMany?.(markable)\n clearSelection()\n }}\n disabled={markable.length === 0}\n isCompact={isCompact}\n tooltip={l.markDoneManyHint}\n testId=\"task-bulk-done\"\n />\n )}\n {props.onDeleteMany && (\n <SelectionBarAction\n icon={Trash2}\n label={l.deleteMany}\n onClick={() => {\n props.onDeleteMany?.(deletable)\n clearSelection()\n }}\n disabled={deletable.length === 0}\n isCompact={isCompact}\n className=\"border-red-border text-red-text hover:bg-red-bg hover:text-red-text\"\n testId=\"task-bulk-delete\"\n />\n )}\n </>\n )}\n </SelectionBar>\n {moving && props.onMove && (\n <TaskMoveDialog\n open\n onOpenChange={(open) => !open && setMoving(null)}\n options={moveTargets(tasks, moving).map((t) => ({ id: t.external_id, label: nameOf(t) }))}\n currentParentId={moving.parent_conversation_ext_id}\n onPick={(parentId) => props.onMove?.(moving, parentId)}\n labels={{\n title: l.moveToTitle(nameOf(moving)),\n none: l.moveToNone,\n search: l.moveToSearch,\n empty: l.moveToEmpty,\n cancel: l.moveToCancel,\n }}\n />\n )}\n </div>\n )\n}\n","/**\n * Where a thread stands, in one word and one look for every row of a list — a plain chat, a to-do,\n * a workflow run — as a list of agents says it: Generating, Needs you, Up next, Ready, To do,\n * Done, Failed. An icon and the word in the state's colour, then what it is about (the next step).\n */\n\nimport type { ReactNode } from 'react'\nimport {\n AlertCircle,\n CheckCheck,\n CircleCheck,\n CircleDashed,\n Clock,\n Hand,\n KeyRound,\n Loader2,\n} from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport type ThreadState =\n 'generating' | 'needs' | 'next' | 'ready' | 'todo' | 'done' | 'failed' | 'queued' | 'access'\n\nexport interface ThreadStateLabels {\n generating: string\n /** `{name}` is replaced (\"you\", a person). */\n needs: string\n next: string\n ready: string\n todo: string\n done: string\n failed: string\n queued: string\n access: string\n}\n\nexport const DEFAULT_THREAD_STATE_LABELS: ThreadStateLabels = {\n generating: 'Generating',\n needs: 'Needs {name}',\n next: 'Up next',\n ready: 'Ready',\n todo: 'To do',\n done: 'Done',\n failed: 'Failed',\n queued: 'Queued',\n access: 'Needs access',\n}\n\nconst LOOK: Record<ThreadState, { icon: ReactNode; className: string }> = {\n generating: {\n icon: <Loader2 className=\"animate-spin\" />,\n className: 'text-amber-700 dark:text-amber-300',\n },\n needs: { icon: <Hand />, className: 'text-orange-700 dark:text-orange-300' },\n next: { icon: <Clock />, className: 'text-muted-foreground' },\n ready: { icon: <CircleCheck />, className: 'text-emerald-700 dark:text-emerald-400' },\n todo: { icon: <CircleDashed />, className: 'text-muted-foreground' },\n done: { icon: <CheckCheck />, className: 'text-muted-foreground' },\n failed: { icon: <AlertCircle />, className: 'text-red-text' },\n queued: { icon: <Clock />, className: 'text-amber-700 dark:text-amber-300' },\n access: { icon: <KeyRound />, className: 'text-red-text' },\n}\n\nexport interface ThreadStatusLineProps {\n state: ThreadState\n /** Who a `needs` state waits for (\"you\", a name). */\n name?: string\n /** What it is about, after the word (the next step's title). */\n detail?: string\n labels?: Partial<ThreadStateLabels>\n className?: string\n testId?: string\n}\n\nexport function ThreadStatusLine({\n state,\n name = 'you',\n detail,\n labels,\n className,\n testId,\n}: ThreadStatusLineProps) {\n const l = { ...DEFAULT_THREAD_STATE_LABELS, ...labels }\n const { icon, className: tone } = LOOK[state]\n const word = l[state].replace('{name}', name)\n return (\n <span\n className={cn('flex min-w-0 items-center gap-1.5 text-xs leading-tight', className)}\n title={detail ? `${word} · ${detail}` : word}\n data-state={state}\n data-testid={testId}\n >\n <span className={cn('flex shrink-0 [&_svg]:size-3.5', tone)} aria-hidden>\n {icon}\n </span>\n <span className={cn('shrink-0 font-medium', tone)}>{word}</span>\n {detail && <span className=\"min-w-0 truncate text-foreground\">· {detail}</span>}\n </span>\n )\n}\n","import { SharingEntity } from '@arbidocs/react/ui'\nimport { useAssistantCopy } from '@arbidocs/react/shell'\nimport { useMemo, useRef, useState, type ReactNode } from 'react'\nimport { MessageSquare } from 'lucide-react'\nimport { ThreadStatusLine } from './ThreadStatusLine'\nimport { EntityChip } from '../../components/EntityChip'\nimport { CellHoverIcon } from '../../files/cells/HoverIconCell'\nimport type { ColDef, ICellRendererParams, ValueGetterParams } from 'ag-grid-community'\nimport { GridView } from '../../files/GridView'\nimport { SelectionBar } from '../../files/SelectionBar'\nimport { TabHeader } from '../../shell/TabHeader'\nimport { FilterInput } from '../../shell/FilterInput'\nimport { useIsPhone } from '../../lib/use-media-query'\n\n/** Only fields on the conversation object: no message or participant fetches. */\nexport interface ConversationListRow {\n external_id: string\n title?: string | null\n created_at?: string | null\n updated_at?: string | null\n created_by_ext_id?: string | null\n assistant_mode?: string | null\n message_count?: number | null\n is_shared?: boolean | null\n is_owner?: boolean | null\n status?: string | null\n in_progress?: boolean | null\n last_message_role?: string | null\n last_message_updated_at?: string | null\n last_message_actor?: {\n external_id: string\n given_name: string\n family_name?: string | null\n picture?: string | null\n parent_ext_id?: string | null\n } | null\n last_message_status?: string | null\n /** Set when the thread is a call's meeting chat. */\n meeting_call_ext_id?: string | null\n}\n\nexport interface ConversationListViewProps<T extends ConversationListRow> {\n conversations: T[]\n isLoading?: boolean\n visibilityFilters?: { me: 'include' | 'exclude' | null; workspace: 'include' | 'exclude' | null }\n doneFilter?: 'include' | 'exclude' | null\n /** \"Meetings\": only (include) or no (exclude) meeting threads. */\n meetingFilter?: 'include' | 'exclude' | null\n filterText?: string\n /** Below the list: the launcher that starts a new thread from here. */\n footer?: ReactNode\n showHeader?: boolean\n formatDate: (iso: string) => string\n renderThread?: (conversation: T) => ReactNode\n renderBy?: (conversation: T) => ReactNode\n renderStatus?: (conversation: T) => ReactNode\n renderLabels?: (conversation: T) => ReactNode\n labelText?: (conversation: T) => string\n onOpen: (conversation: T) => void\n onRename: (conversation: T) => void\n onDelete: (conversation: T) => void\n canEditShared?: boolean\n isWorkspaceOwner?: boolean\n selectionActions?: (selected: T[], compact: boolean, clear: () => void) => ReactNode\n}\n\n/** Shared title/label filtering and latest-activity ordering for the header and grid. */\nexport function filterConversationRows<T extends ConversationListRow>(\n conversations: T[],\n query: string,\n labelText?: (row: T) => string,\n doneFilter: 'include' | 'exclude' | null = 'exclude',\n visibilityFilters?: { me: 'include' | 'exclude' | null; workspace: 'include' | 'exclude' | null },\n meetingFilter: 'include' | 'exclude' | null = null\n): T[] {\n const q = query.trim().toLowerCase()\n return [...conversations]\n .sort(\n (a, b) =>\n (Date.parse(b.last_message_updated_at || b.updated_at || b.created_at || '') || 0) -\n (Date.parse(a.last_message_updated_at || a.updated_at || a.created_at || '') || 0)\n )\n .filter((row) =>\n doneFilter === 'exclude'\n ? row.status !== 'done'\n : doneFilter === 'include'\n ? row.status === 'done'\n : true\n )\n .filter((row) => {\n const state = row.is_shared ? visibilityFilters?.workspace : visibilityFilters?.me\n const hasIncluded =\n visibilityFilters?.me === 'include' || visibilityFilters?.workspace === 'include'\n return state !== 'exclude' && (!hasIncluded || state === 'include')\n })\n .filter((row) =>\n meetingFilter === 'include'\n ? !!row.meeting_call_ext_id\n : meetingFilter === 'exclude'\n ? !row.meeting_call_ext_id\n : true\n )\n .filter((row) => !q || `${row.title ?? ''} ${labelText?.(row) ?? ''}`.toLowerCase().includes(q))\n}\n\n/** Conversation history ordered by activity, including conversations attached to work. */\nexport function ConversationListView<T extends ConversationListRow>(\n p: ConversationListViewProps<T>\n) {\n const liveProps = useRef(p)\n liveProps.current = p\n const [query, setQuery] = useState('')\n const [selected, setSelected] = useState<Set<string>>(new Set())\n const q = `${query} ${p.filterText ?? ''}`.trim().toLowerCase()\n // On a phone the thread name and labels stay; the other columns are hidden. Labels get a fixed\n // width there so the grid overflows and scrolls sideways instead of squeezing them into the edge.\n const isPhone = useIsPhone()\n const rows = useMemo(\n () =>\n filterConversationRows(\n p.conversations,\n q,\n p.labelText,\n p.doneFilter,\n p.visibilityFilters,\n p.meetingFilter\n ),\n [p.conversations, q, p.labelText, p.doneFilter, p.visibilityFilters, p.meetingFilter]\n )\n const selectedRows = p.conversations.filter((c) => selected.has(c.external_id))\n const hasLabels = p.conversations.some((c) => !!p.labelText?.(c))\n const columns = useMemo<ColDef<T>[]>(\n () => [\n {\n colId: 'name',\n headerName: 'Thread',\n flex: 2,\n minWidth: 200,\n valueGetter: ({ data }) => data?.title?.trim() || 'Untitled thread',\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data && (\n <div className=\"group flex h-full min-w-0 items-center gap-2\">\n <SharingEntity\n shared={data.is_shared ?? false}\n variant=\"icon\"\n data-testid={`thread-sharing-${data.external_id}`}\n />\n <div className=\"min-w-0\">\n {liveProps.current.renderThread ? (\n liveProps.current.renderThread(data)\n ) : (\n <EntityChip\n icon={<MessageSquare className=\"size-4\" aria-hidden />}\n label={data.title?.trim() || 'Untitled thread'}\n pillTooltip=\"Open conversation\"\n labelMaxWidth=\"max-w-full\"\n onClick={() => liveProps.current.onOpen(data)}\n testId={`thread-open-${data.external_id}`}\n />\n )}\n </div>\n {/* How long it is, beside its name (not a column of its own). */}\n {(data.message_count ?? 0) > 0 && (\n <span\n className=\"inline-flex h-5 shrink-0 items-center gap-0.5 self-center rounded-full bg-muted px-1.5 text-[10px] font-medium leading-none tabular-nums text-muted-foreground\"\n title={`${data.message_count} ${data.message_count === 1 ? 'message' : 'messages'}`}\n data-testid={`thread-messages-${data.external_id}`}\n >\n <MessageSquare className=\"size-3\" aria-hidden />\n {data.message_count}\n </span>\n )}\n {(data.is_owner !== false || liveProps.current.canEditShared) && (\n <button\n type=\"button\"\n aria-label={`Rename ${data.title?.trim() || 'Untitled thread'}`}\n onClick={() => liveProps.current.onRename(data)}\n data-testid={`thread-rename-${data.external_id}`}\n className=\"shrink-0 pointer-coarse:flex pointer-coarse:size-11 pointer-coarse:items-center pointer-coarse:justify-center\"\n >\n <CellHoverIcon />\n </button>\n )}\n </div>\n ),\n },\n // Labels only when a thread has some (an empty column only takes the names' room), and never\n // on a phone, where the status is what a row must say.\n ...(liveProps.current.renderLabels && hasLabels && !isPhone\n ? [\n {\n colId: 'labels',\n headerName: 'Labels',\n flex: 0.5,\n minWidth: 100,\n valueGetter: ({ data }: ValueGetterParams<T>) =>\n data ? (liveProps.current.labelText?.(data) ?? '') : '',\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data && liveProps.current.renderLabels?.(data),\n },\n ]\n : []),\n {\n colId: 'status',\n headerName: 'Status',\n width: isPhone ? 170 : 240,\n valueGetter: ({ data }) => data?.status,\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data &&\n (liveProps.current.renderStatus ? (\n liveProps.current.renderStatus(data)\n ) : (\n <ThreadStatusLine\n state={data.status === 'done' ? 'done' : data.status === 'todo' ? 'todo' : 'ready'}\n />\n )),\n },\n // Who spoke last (their face) and when: the two read together, at the row's end.\n ...(liveProps.current.renderBy\n ? [\n {\n colId: 'by',\n headerName: 'By',\n width: 64,\n hide: isPhone,\n sortable: false,\n resizable: false,\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data && liveProps.current.renderBy?.(data),\n },\n ]\n : []),\n {\n colId: 'activity',\n initialSort: 'desc',\n headerName: 'Updated',\n width: 128,\n hide: isPhone,\n valueGetter: ({ data }) =>\n data?.last_message_updated_at || data?.updated_at || data?.created_at || '',\n valueFormatter: ({ value }) => (value ? liveProps.current.formatDate(value) : '—'),\n cellClass: 'flex items-center text-xs text-muted-foreground/80',\n },\n ],\n [\n Boolean(p.renderThread),\n Boolean(p.renderLabels),\n Boolean(p.renderBy),\n Boolean(p.renderStatus),\n isPhone,\n hasLabels,\n ]\n )\n // Every cell's content sits in the middle of its row (a two-line title makes rows taller).\n const assistant = useAssistantCopy()\n const centred = useMemo(\n () => columns.map((c) => ({ cellClass: 'flex items-center', ...c })),\n [columns]\n )\n return (\n <div className=\"flex min-h-0 flex-1 flex-col\" data-testid=\"conversation-list-view\">\n {p.showHeader !== false && (\n <TabHeader\n testId=\"threads-tab-header\"\n tabs={[\n {\n id: 'threads',\n label: '',\n count: rows.length,\n countIcon: <MessageSquare className=\"size-3.5\" />,\n countPlacement: 'leading',\n presentation: 'count',\n hasActiveFilters: !!q,\n },\n ]}\n activeTabId=\"threads\"\n onTabChange={() => {}}\n firstTabContent={\n <FilterInput\n value={query}\n hideFieldPicker\n ariaLabel=\"Search threads\"\n onChange={setQuery}\n fields={['text']}\n onFieldsChange={() => {}}\n labels={{\n placeholder: 'Find a thread…',\n fieldNames: { text: 'Thread' },\n }}\n className=\"w-44 max-w-[40vw]\"\n />\n }\n />\n )}\n <div className=\"min-h-0 flex-1\">\n <GridView<T>\n testId=\"threads-grid\"\n items={rows}\n columnDefs={centred}\n getItemId={(row) => row.external_id}\n getRowTestId={(row) => `thread-row-${row.external_id}`}\n onRowClick={p.onOpen}\n height=\"100%\"\n isLoading={p.isLoading}\n loadingMessage=\"Loading threads…\"\n emptyState={{\n title: q ? 'No threads match' : 'No conversations yet',\n message: p.footer ? assistant.emptyThreadsComposer : assistant.emptyThreadsNewTask,\n }}\n selection={\n p.selectionActions\n ? {\n mode: 'multiple',\n controlled: true,\n selected: selectedRows,\n onSelectionChange: (items) =>\n setSelected(new Set(items.map((item) => item.external_id))),\n }\n : undefined\n }\n gridOptions={{\n suppressClickEdit: true,\n onCellKeyDown: (event) => {\n if (\n (event.event as KeyboardEvent | undefined)?.key === 'Enter' &&\n 'column' in event &&\n event.column.getColId() === 'name' &&\n event.data\n )\n p.onOpen(event.data)\n },\n }}\n />\n </div>\n {p.footer}\n {/* Above the footer's composer dock (z-40), which sits in the same place. */}\n {p.selectionActions && (\n <SelectionBar\n className=\"z-50\"\n count={selectedRows.length}\n onClear={() => setSelected(new Set())}\n >\n {(compact) => p.selectionActions?.(selectedRows, compact, () => setSelected(new Set()))}\n </SelectionBar>\n )}\n </div>\n )\n}\n","import { useState, type ReactNode } from 'react'\nimport { Check, ChevronDown } from 'lucide-react'\nimport {\n Command,\n CommandEmpty,\n CommandInput,\n CommandItem,\n CommandList,\n EntityPill,\n Popover,\n PopoverContent,\n PopoverTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface PillOption {\n id: string\n label: string\n /** Small line after the label in the list (e.g. a role). */\n description?: string\n /** Glyph before the label in the list and, when chosen, on the pill. */\n icon?: ReactNode\n}\n\nexport interface PillSelectLabels {\n /** The search box placeholder. */\n search: string\n /** Shown when the search matches nothing. */\n empty: string\n}\n\nexport const DEFAULT_PILL_SELECT_LABELS: PillSelectLabels = {\n search: 'Search…',\n empty: 'No match.',\n}\n\nexport interface PillSelectProps {\n /** The pill's glyph when nothing (or an option without its own icon) is chosen. */\n icon: ReactNode\n /** Names the property on the pill: \"Sign-off: Me\". */\n prefix: string\n /** The chosen option id; `''` is the \"none\" entry when `noneOption` is set. */\n value: string\n options: PillOption[]\n onChange: (id: string) => void\n /** Adds an entry that clears the choice (id `''`), e.g. \"Me\" or \"Nothing\". */\n noneOption?: PillOption\n /** Show a search box (for long lists such as people or tasks). */\n searchable?: boolean\n disabled?: boolean\n testId?: string\n labels?: Partial<PillSelectLabels>\n className?: string\n}\n\n/**\n * A property as a pill that opens a list, like every other entity reference in the app: the pill shows\n * `Prefix: choice`, the popover lists the options (searchable when long), one is chosen and it closes.\n */\nexport function PillSelect({\n icon,\n prefix,\n value,\n options,\n onChange,\n noneOption,\n searchable = false,\n disabled = false,\n testId,\n labels,\n className,\n}: PillSelectProps) {\n const l = { ...DEFAULT_PILL_SELECT_LABELS, ...labels }\n const [open, setOpen] = useState(false)\n const all = noneOption ? [noneOption, ...options] : options\n const chosen = all.find((o) => o.id === value)\n const id = testIdOr(testId, { testId: 'pill-select' })\n\n const choose = (next: string) => {\n onChange(next)\n setOpen(false)\n }\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild disabled={disabled}>\n <EntityPill\n icon={chosen?.icon ?? icon}\n label={`${prefix}: ${chosen?.label ?? ''}`.replace(/: $/, '')}\n secondaryText={<ChevronDown className=\"size-3\" aria-hidden />}\n size=\"sm\"\n disabled={disabled}\n labelMaxWidth=\"max-w-[220px]\"\n className={cn('h-7 pointer-coarse:min-h-11', className)}\n data-testid={id}\n />\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-64 p-0\" data-testid={`${id}-list`}>\n <Command>\n {searchable && <CommandInput placeholder={l.search} data-testid={`${id}-search`} />}\n <CommandList>\n <CommandEmpty>{l.empty}</CommandEmpty>\n {all.map((o) => (\n <CommandItem\n key={o.id || '__none__'}\n value={`${o.label} ${o.description ?? ''}`}\n onSelect={() => choose(o.id)}\n data-testid={`${id}-option-${o.id || 'none'}`}\n >\n <span className=\"mr-2 flex size-4 shrink-0 items-center justify-center\">\n {o.icon}\n </span>\n <span className=\"min-w-0 flex-1 truncate\">{o.label}</span>\n {o.description && (\n <span className=\"ml-2 shrink-0 text-xs text-muted-foreground\">\n {o.description}\n </span>\n )}\n {o.id === value && <Check className=\"ml-2 size-4 shrink-0\" aria-hidden />}\n </CommandItem>\n ))}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n )\n}\n","import { X } from 'lucide-react'\nimport { Button, Input, Label } from '@arbidocs/react/ui'\n\ninterface DueDateMenuLabels {\n today: string\n tomorrow: string\n nextMonday: string\n inAWeek: string\n pick: string\n clear: string\n}\n\nconst DEFAULT_DUE_DATE_MENU_LABELS: DueDateMenuLabels = {\n today: 'Today',\n tomorrow: 'Tomorrow',\n nextMonday: 'Next Monday',\n inAWeek: 'In a week',\n pick: 'Or pick a date and time',\n clear: 'Clear date',\n}\n\n/** The end of the working day, which a quick choice means. */\nconst END_OF_DAY_HOUR = 17\n\nconst pad = (n: number) => String(n).padStart(2, '0')\n\n/** A date as the `datetime-local` value the form holds: \"2026-10-12T17:00\" (local time). */\nexport function toLocalInput(date: Date): string {\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}`\n}\n\nexport interface DuePreset {\n id: 'today' | 'tomorrow' | 'nextMonday' | 'inAWeek'\n value: string\n}\n\n/**\n * The quick choices, each at the end of the working day. \"Today\" is left out once that time has passed.\n * `now` is a parameter so the choices are testable.\n */\nexport function duePresets(now: Date = new Date()): DuePreset[] {\n const at = (daysAhead: number) => {\n const d = new Date(now)\n d.setDate(d.getDate() + daysAhead)\n d.setHours(END_OF_DAY_HOUR, 0, 0, 0)\n return d\n }\n const untilMonday = (8 - now.getDay()) % 7 || 7\n const presets: DuePreset[] = []\n if (now.getHours() < END_OF_DAY_HOUR) presets.push({ id: 'today', value: toLocalInput(at(0)) })\n presets.push(\n { id: 'tomorrow', value: toLocalInput(at(1)) },\n { id: 'nextMonday', value: toLocalInput(at(untilMonday)) },\n { id: 'inAWeek', value: toLocalInput(at(7)) }\n )\n return presets\n}\n\ninterface DueDateMenuProps {\n value: string\n onChange: (value: string) => void\n /** Keys the input's id and test ids. */\n id: string\n /** The accessible name of the date input. */\n label: string\n labels?: Partial<DueDateMenuLabels>\n}\n\n/** The body of a due-date popover: quick choices first, the exact date and time for the rest. */\nexport function DueDateMenu({ value, onChange, id, label, labels }: DueDateMenuProps) {\n const l = { ...DEFAULT_DUE_DATE_MENU_LABELS, ...labels }\n return (\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-menu`}>\n <div className=\"flex flex-wrap gap-1.5\">\n {duePresets().map((preset) => (\n <Button\n key={preset.id}\n type=\"button\"\n variant={value === preset.value ? 'secondary' : 'outline'}\n size=\"sm\"\n className=\"h-8 pointer-coarse:h-11\"\n onClick={() => onChange(preset.value)}\n data-testid={`${id}-preset-${preset.id}`}\n >\n {l[preset.id]}\n </Button>\n ))}\n </div>\n <div className=\"flex items-center gap-2\">\n <Label htmlFor={`${id}-input`} className=\"sr-only\">\n {label}\n </Label>\n <Input\n id={`${id}-input`}\n type=\"datetime-local\"\n aria-label={l.pick}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n data-testid={id}\n />\n {value && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n aria-label={l.clear}\n onClick={() => onChange('')}\n >\n <X className=\"size-4\" aria-hidden />\n </Button>\n )}\n </div>\n </div>\n )\n}\n","import { DueDateMenu } from './DueDateMenu'\nimport { useMemo, useState } from 'react'\nimport { CalendarClock, ChevronDown, CornerDownRight, Loader2, X } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n EntityPill,\n Input,\n Label,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Textarea,\n Switch,\n VisibilityToggle,\n cn,\n} from '@arbidocs/react/ui'\nimport { assistantCopy, useAssistantCopy } from '@arbidocs/react/shell'\nimport { testIdOr } from '../../chat/test-id'\nimport { ModalHeader } from '../../settings/ModalScaffold'\nimport { PillSelect, type PillOption } from './PillSelect'\nimport type { TaskOption } from './taskComposerTypes'\nimport { EMPTY_NEW_THREAD, hasTaskFields, type NewThreadValues } from './taskRequest'\n\nexport interface NewThreadDialogLabels {\n title: string\n description: string\n promptLabel: string\n promptPlaceholder: string\n titleLabel: string\n titlePlaceholder: string\n visibility: string\n taskDetails: string\n /** Under the prompt: which files the assistant can use. */\n files: (count: number) => string\n taskDetailsHint: string\n due: string\n dueNone: string\n dueClear: string\n parentTask: string\n parentTaskNone: string\n search: string\n empty: string\n cancel: string\n createTask: string\n /** The switch under the prompt, and the button when it is off. */\n assistantStart: string\n assistantStartHint: string\n addTodo: string\n saving: string\n}\n\n/** ARBI's own phrases (the defaults below). */\nconst ARBI = assistantCopy()\n\nexport const DEFAULT_NEW_THREAD_DIALOG_LABELS: NewThreadDialogLabels = {\n title: 'New',\n description:\n 'Ask for anything, like a normal chat: the assistant gets on it. Add a due date if it matters.',\n promptLabel: 'What do you want to ask or get done?',\n promptPlaceholder: 'Ask a question, or describe what needs doing…',\n titleLabel: 'Title',\n titlePlaceholder: 'Made from your prompt unless you write one',\n visibility: 'Shared with',\n taskDetails: 'Task details',\n files: (count) =>\n count === 0\n ? 'No files in this workspace yet: answers come from general knowledge.'\n : `Can use the ${count} file${count === 1 ? '' : 's'} in this workspace.`,\n taskDetailsHint: 'Optional.',\n due: 'Due',\n dueNone: 'No date',\n dueClear: 'Clear date',\n parentTask: 'Part of',\n parentTaskNone: 'Nothing (top-level)',\n search: 'Search…',\n empty: 'No match.',\n cancel: 'Cancel',\n createTask: ARBI.startWith,\n assistantStart: 'Assistant starts on it now',\n assistantStartHint: 'Switch off to just keep track of it as a to-do.',\n addTodo: 'Add to-do',\n saving: 'Creating…',\n}\n\nexport interface NewThreadDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** Tasks this can be a sub-task of. Omit or leave empty to hide the field. */\n tasks?: TaskOption[]\n initialValues?: Partial<NewThreadValues>\n /** How many files the assistant will be able to use; omit to say nothing. */\n fileCount?: number\n isPending?: boolean\n onSubmit: (values: NewThreadValues) => void | Promise<void>\n labels?: Partial<NewThreadDialogLabels>\n testId?: string\n}\n\nconst GLYPH = 'size-3.5 shrink-0'\n\n/** A datetime-local value as \"Fri 14 Oct, 09:00\"; the raw value if it is not a date. */\nfunction formatDue(local: string): string {\n const d = new Date(local)\n if (Number.isNaN(d.getTime())) return local\n return d.toLocaleString(undefined, {\n weekday: 'short',\n day: 'numeric',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n })\n}\n\n/**\n * \"New task\": the one way to start something. Type the prompt (what to ask or get done) and who sees it (the\n * workspace, by default); the title is made from the prompt. Every ask is a task: the details (due date,\n * parent, a title of your own) are optional and folded away.\n */\nexport function NewThreadDialog({\n open,\n onOpenChange,\n tasks = [],\n initialValues,\n fileCount,\n isPending,\n onSubmit,\n labels,\n testId,\n}: NewThreadDialogProps) {\n const assistant = useAssistantCopy()\n const l: NewThreadDialogLabels = {\n ...DEFAULT_NEW_THREAD_DIALOG_LABELS,\n createTask: assistant.startWith,\n ...labels,\n }\n const seed = useMemo(\n () => ({ ...EMPTY_NEW_THREAD, ...initialValues }),\n // Seeded once per open.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [open]\n )\n const [values, setValues] = useState<NewThreadValues>(seed)\n const [detailsOpen, setDetailsOpen] = useState(hasTaskFields(seed))\n const [submitError, setSubmitError] = useState<string | null>(null)\n\n const id = testIdOr(testId, { testId: 'new-thread' })\n const set = <K extends keyof NewThreadValues>(key: K, value: NewThreadValues[K]) =>\n setValues((v) => ({ ...v, [key]: value }))\n const canSubmit = values.prompt.trim() !== '' && !isPending\n const pillLabels = { search: l.search, empty: l.empty }\n const taskOptions: PillOption[] = tasks.map((t) => ({\n id: t.id,\n label: t.name,\n icon: <CornerDownRight className={GLYPH} aria-hidden />,\n }))\n\n return (\n <Dialog modal={false} open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"right\"\n onInteractOutside={(event) => event.preventDefault()}\n className=\"flex flex-col overflow-hidden p-0\"\n data-testid={id}\n >\n <ModalHeader>\n <DialogTitle>{l.title}</DialogTitle>\n <DialogDescription className=\"sr-only\">{l.description}</DialogDescription>\n </ModalHeader>\n <form\n className=\"flex min-h-0 flex-1 flex-col\"\n onSubmit={async (event) => {\n event.preventDefault()\n if (!canSubmit) return\n setSubmitError(null)\n try {\n await onSubmit(values)\n setValues(EMPTY_NEW_THREAD)\n setDetailsOpen(false)\n } catch (error) {\n setSubmitError(error instanceof Error ? error.message : 'Could not create the thread')\n }\n }}\n >\n <div className=\"flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto px-6 pb-4\">\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"new-thread-prompt\" className=\"sr-only\">\n {l.promptLabel}\n </Label>\n <Textarea\n id=\"new-thread-prompt\"\n value={values.prompt}\n placeholder={l.promptPlaceholder}\n rows={4}\n onChange={(e) => set('prompt', e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey) && canSubmit) onSubmit(values)\n }}\n autoFocus\n className=\"min-h-24 text-base\"\n data-testid={`${id}-prompt`}\n />\n <label className=\"flex items-center gap-2 text-sm\" data-testid={`${id}-assistant`}>\n <Switch\n checked={values.assistant}\n onCheckedChange={(on) => set('assistant', on)}\n data-testid={`${id}-assistant-switch`}\n />\n <span>{l.assistantStart}</span>\n <span className=\"text-xs text-muted-foreground\">{l.assistantStartHint}</span>\n </label>\n {fileCount !== undefined && values.assistant && (\n <p className=\"text-xs text-muted-foreground\" data-testid={`${id}-files`}>\n {l.files(fileCount)}\n </p>\n )}\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <VisibilityToggle\n items={{ shared: values.shared }}\n onToggle={(share) => set('shared', share)}\n label={l.visibility}\n presentation=\"select\"\n data-testid={`${id}-visibility`}\n />\n </div>\n\n <section className=\"flex flex-col gap-3\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1 self-start px-2 pointer-coarse:h-11\"\n onClick={() => setDetailsOpen((v) => !v)}\n aria-expanded={detailsOpen}\n data-testid={`${id}-details-toggle`}\n >\n {l.taskDetails}\n <ChevronDown\n className={cn('size-3.5 transition-transform', detailsOpen && 'rotate-180')}\n aria-hidden\n />\n </Button>\n {detailsOpen && (\n <div className=\"flex flex-col gap-3\" data-testid={`${id}-details`}>\n <p className=\"text-xs text-muted-foreground\">{l.taskDetailsHint}</p>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Popover>\n <PopoverTrigger asChild>\n <EntityPill\n icon={<CalendarClock className={GLYPH} aria-hidden />}\n label={`${l.due}: ${values.dueAt ? formatDue(values.dueAt) : l.dueNone}`}\n secondaryText={<ChevronDown className=\"size-3\" aria-hidden />}\n size=\"sm\"\n className=\"h-7 pointer-coarse:min-h-11\"\n data-testid={`${id}-due-pill`}\n />\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-auto p-2\">\n <DueDateMenu\n id={`${id}-due`}\n label={l.due}\n value={values.dueAt}\n onChange={(v) => set('dueAt', v)}\n labels={{ clear: l.dueClear }}\n />\n </PopoverContent>\n </Popover>\n {tasks.length > 0 && (\n <PillSelect\n icon={<CornerDownRight className={GLYPH} aria-hidden />}\n prefix={l.parentTask}\n value={values.parentId}\n options={taskOptions}\n noneOption={{ id: '', label: l.parentTaskNone }}\n onChange={(v) => set('parentId', v)}\n searchable\n labels={pillLabels}\n testId={`${id}-parent`}\n />\n )}\n </div>\n <Label htmlFor=\"new-thread-title\" className=\"sr-only\">\n {l.titleLabel}\n </Label>\n <Input\n id=\"new-thread-title\"\n value={values.title}\n placeholder={l.titlePlaceholder}\n onChange={(e) => set('title', e.target.value)}\n data-testid={`${id}-title`}\n />\n </div>\n )}\n </section>\n </div>\n {submitError && (\n <p role=\"alert\" className=\"px-6 pb-2 text-sm text-destructive\">\n {submitError}\n </p>\n )}\n <div className=\"flex flex-col-reverse gap-2 border-t border-border px-6 py-3 sm:flex-row sm:justify-end\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n data-testid={`${id}-cancel`}\n className=\"pointer-coarse:min-h-11\"\n >\n {l.cancel}\n </Button>\n <Button\n type=\"submit\"\n disabled={!canSubmit}\n data-testid={`${id}-submit`}\n className=\"gap-1.5 pointer-coarse:min-h-11\"\n >\n {isPending && <Loader2 className=\"size-4 animate-spin\" />}\n {isPending ? l.saving : !values.assistant ? l.addTodo : l.createTask}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","import type { ReactNode } from 'react'\nimport { eventWaitingDocuments, waitingForDocumentsText } from '../workflows/run'\nimport {\n AlertTriangle,\n ArrowUpRight,\n CheckCircle2,\n Flag,\n KeyRound,\n Lock,\n MessageSquareReply,\n Phone,\n Disc,\n Play,\n RotateCcw,\n Sparkles,\n Square,\n UserRoundCog,\n BellRing,\n CornerUpLeft,\n Hourglass,\n PenLine,\n} from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport type TaskActivityKind =\n | 'created'\n | 'run_started'\n | 'awaiting_access'\n | 'access_granted'\n | 'done'\n | 'reopened'\n | 'failed'\n | 'participant_joined'\n | 'assistant_responded'\n | 'assistant_stopped'\n | 'artifact_created'\n | 'artifact_edited'\n | 'document_added'\n | 'document_removed'\n | 'notified'\n /** A thread call (its log card): `call_ext_id`, `started_by`, `invited`, … `ended_at`, `joined`. */\n | 'call'\n /** A stopped call recording (its Recording card): `call_ext_id`, `recording_ext_id`, … */\n | 'recording'\n // A workflow step's progress (detail.step names it).\n | 'step_started'\n | 'step_done'\n | 'step_skipped'\n | 'step_failed'\n // An action step waits on its people (detail.waiting), moves on (a signer signed), a person\n // sent the work back (detail.to), a step's person was told or reminded.\n | 'step_waiting'\n | 'step_progress'\n | 'step_sent_back'\n | 'step_ready'\n | 'step_reminded'\n // A step raised a signal (detail.step, detail.signal), and the linked thread it started\n // (detail.conversation_ext_id, detail.workflow_ext_id).\n | 'step_signal'\n | 'linked_run'\n\n/** One event of a task's history, as the backend returns it (oldest first). */\nexport interface TaskActivityEvent {\n external_id: string\n kind: TaskActivityKind\n actor_ext_id?: string | null\n /** Who a notification went to. */\n to_ext_id?: string | null\n /** `run_id`, `agent_ext_id`, `as_user`, `from_workflow`, `error`. */\n detail?: Record<string, unknown> | null\n created_at: string\n}\n\nexport interface TaskActivityLabels {\n title: string\n empty: string\n loading: string\n error: string\n close: string\n created: string\n createdFromWorkflow: string\n runStarted: string\n runStartedBy: (agentName: string) => string\n awaitingAccess: string\n accessGranted: string\n done: string\n reopened: string\n failed: string\n failureLine: (error: string) => string\n /** The actor is not known (a system step). */\n system: string\n}\n\nexport const DEFAULT_TASK_ACTIVITY_LABELS: TaskActivityLabels = {\n title: 'Activity',\n empty: 'Nothing has happened yet.',\n loading: 'Loading activity…',\n error: 'Could not load the activity.',\n close: 'Close',\n created: 'Created',\n createdFromWorkflow: 'Created from a workflow',\n runStarted: 'Run started',\n runStartedBy: (agent) => `Run started by ${agent}`,\n awaitingAccess: 'Waiting for access',\n accessGranted: 'Access granted',\n done: 'Marked done',\n reopened: 'Reopened',\n failed: 'Run failed',\n failureLine: (error) => error,\n system: 'System',\n}\n\nconst ICONS: Record<TaskActivityKind, ReactNode> = {\n created: <Sparkles className=\"size-3.5\" aria-hidden />,\n run_started: <Play className=\"size-3.5\" aria-hidden />,\n awaiting_access: <Lock className=\"size-3.5\" aria-hidden />,\n access_granted: <KeyRound className=\"size-3.5\" aria-hidden />,\n done: <CheckCircle2 className=\"size-3.5\" aria-hidden />,\n reopened: <RotateCcw className=\"size-3.5\" aria-hidden />,\n failed: <AlertTriangle className=\"size-3.5\" aria-hidden />,\n participant_joined: <UserRoundCog className=\"size-3.5\" aria-hidden />,\n assistant_responded: <Sparkles className=\"size-3.5\" aria-hidden />,\n assistant_stopped: <Square className=\"size-3.5\" aria-hidden />,\n artifact_created: <Sparkles className=\"size-3.5\" aria-hidden />,\n artifact_edited: <MessageSquareReply className=\"size-3.5\" aria-hidden />,\n document_added: <Sparkles className=\"size-3.5\" aria-hidden />,\n document_removed: <AlertTriangle className=\"size-3.5\" aria-hidden />,\n notified: <UserRoundCog className=\"size-3.5\" aria-hidden />,\n call: <Phone className=\"size-3.5\" aria-hidden />,\n recording: <Disc className=\"size-3.5\" aria-hidden />,\n step_started: <Play className=\"size-3.5\" aria-hidden />,\n step_done: <CheckCircle2 className=\"size-3.5\" aria-hidden />,\n step_skipped: <RotateCcw className=\"size-3.5\" aria-hidden />,\n step_failed: <AlertTriangle className=\"size-3.5\" aria-hidden />,\n step_signal: <Flag className=\"size-3.5\" aria-hidden />,\n step_waiting: <Hourglass className=\"size-3.5\" aria-hidden />,\n step_progress: <PenLine className=\"size-3.5\" aria-hidden />,\n step_sent_back: <CornerUpLeft className=\"size-3.5\" aria-hidden />,\n step_ready: <BellRing className=\"size-3.5\" aria-hidden />,\n step_reminded: <BellRing className=\"size-3.5\" aria-hidden />,\n linked_run: <ArrowUpRight className=\"size-3.5\" aria-hidden />,\n}\n\nconst asString = (v: unknown): string | null => (typeof v === 'string' && v.trim() ? v : null)\n\n/** A short line for an error: the first line, cut at a readable length. */\nfunction summarizeError(error: string): string {\n const first = error.split('\\n')[0].trim()\n return first.length > 160 ? `${first.slice(0, 157)}…` : first\n}\n\n/**\n * The one-line headline of a thread event (\"Marked done\", \"Step failed\"), without its actor. Shared\n * by the task timeline and the workspace activity feed so a kind reads the same in both.\n */\nexport function taskActivityHeadline(\n e: Pick<TaskActivityEvent, 'kind' | 'detail'>,\n labels: TaskActivityLabels = DEFAULT_TASK_ACTIVITY_LABELS,\n agentName?: (agentExtId: string) => string | undefined\n): string {\n const l = labels\n const detail = e.detail ?? {}\n const agentId = asString(detail.agent_ext_id)\n const agent = agentId ? agentName?.(agentId) : undefined\n switch (e.kind) {\n case 'participant_joined':\n return 'Joined the conversation'\n case 'assistant_responded':\n return 'Responded'\n case 'assistant_stopped':\n return 'Stopped'\n case 'artifact_created':\n return 'Created a document'\n case 'artifact_edited':\n return 'Edited a document'\n case 'document_added':\n return 'Added a document'\n case 'document_removed':\n return 'Removed a document'\n case 'notified':\n return 'Sent a notification'\n case 'call':\n return detail.ended_at ? 'Call ended' : 'Started a call'\n case 'recording':\n return 'Recorded the call'\n case 'step_started':\n return 'Step started'\n case 'step_done':\n return 'Step done'\n case 'step_skipped':\n return 'Step skipped'\n case 'step_waiting': {\n const documents = eventWaitingDocuments(detail)\n return documents ? waitingForDocumentsText(documents.length) : 'Waiting on people'\n }\n case 'step_progress': {\n const documents = eventWaitingDocuments(detail)\n return documents\n ? waitingForDocumentsText(documents.length)\n : detail.signed\n ? 'Signed'\n : 'Step moved on'\n }\n case 'step_sent_back':\n return 'Sent the work back'\n case 'step_ready':\n return 'Told whose turn it is'\n case 'step_reminded':\n return 'Sent a reminder'\n case 'step_signal':\n return `Signalled “${asString(detail.signal) ?? 'a signal'}”`\n case 'linked_run':\n return `Started a linked workflow on “${asString(detail.signal) ?? 'a signal'}”`\n case 'step_failed':\n return 'Step failed'\n case 'created':\n return detail.from_workflow ? l.createdFromWorkflow : l.created\n case 'run_started':\n return agent ? l.runStartedBy(agent) : l.runStarted\n case 'awaiting_access':\n return l.awaitingAccess\n case 'access_granted':\n return l.accessGranted\n case 'done':\n return l.done\n case 'reopened':\n return l.reopened\n case 'failed':\n return l.failed\n default:\n // A kind added on the server after this build: say something rather than nothing.\n return String(e.kind).replace(/_/g, ' ')\n }\n}\n\nexport interface TaskActivityTimelineProps {\n events: readonly TaskActivityEvent[]\n /** Draw a person (an id, or none for a system step). */\n renderPerson: (id: string | null | undefined) => ReactNode\n /** An agent's display name by id. */\n agentName?: (agentExtId: string) => string | undefined\n /** \"2 min ago\". */\n formatRelative: (iso: string) => string\n /** The exact time, shown on hover. */\n formatExact: (iso: string) => string\n labels?: Partial<TaskActivityLabels>\n testId?: string\n}\n\n/** A task's history as a vertical timeline, oldest first, one entry per event. */\nexport function TaskActivityTimeline({\n events,\n renderPerson,\n agentName,\n formatRelative,\n formatExact,\n labels,\n testId,\n}: TaskActivityTimelineProps) {\n const l = { ...DEFAULT_TASK_ACTIVITY_LABELS, ...labels }\n const base = testIdOr(testId, { testId: 'task-activity' })\n\n const describe = (e: TaskActivityEvent): { headline: ReactNode; extra?: ReactNode } => {\n const headline = taskActivityHeadline(e, l, agentName)\n const error = asString(e.detail?.error)\n if (e.kind === 'step_failed' && error)\n return { headline, extra: l.failureLine(summarizeError(error)) }\n if (e.kind === 'failed' && error)\n return {\n headline,\n extra: (\n <p className=\"text-xs text-destructive\" data-testid={`${base}-error-${e.external_id}`}>\n {l.failureLine(summarizeError(error))}\n </p>\n ),\n }\n return { headline }\n }\n\n return (\n <ol className=\"flex flex-col\" data-testid={`${base}-list`}>\n {events.map((e, i) => {\n const { headline, extra } = describe(e)\n const last = i === events.length - 1\n return (\n <li\n key={e.external_id}\n className=\"relative flex gap-3 pb-4 last:pb-0\"\n data-testid={`${base}-entry-${e.external_id}`}\n data-kind={e.kind}\n >\n {!last && (\n <span className=\"absolute left-3 top-6 -ml-px h-[calc(100%-1.5rem)] w-px bg-border\" />\n )}\n <span\n className={cn(\n 'z-10 flex size-6 shrink-0 items-center justify-center rounded-full border bg-background',\n e.kind === 'failed' ? 'text-destructive' : 'text-muted-foreground'\n )}\n data-testid={`${base}-icon-${e.external_id}`}\n >\n {ICONS[e.kind]}\n </span>\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-1 text-sm\">\n {e.actor_ext_id ? (\n <span className=\"inline-flex\" data-testid={`${base}-actor-${e.external_id}`}>\n {renderPerson(e.actor_ext_id)}\n </span>\n ) : (\n <span className=\"text-muted-foreground\">{l.system}</span>\n )}\n <span className=\"font-medium\">{headline}</span>\n <time\n dateTime={e.created_at}\n title={formatExact(e.created_at)}\n className=\"ml-auto text-xs text-muted-foreground\"\n data-testid={`${base}-time-${e.external_id}`}\n >\n {formatRelative(e.created_at)}\n </time>\n </div>\n {extra}\n </div>\n </li>\n )\n })}\n </ol>\n )\n}\n","import { useCallback } from 'react'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport {\n DEFAULT_TASK_ACTIVITY_LABELS,\n TaskActivityTimeline,\n type TaskActivityEvent,\n type TaskActivityLabels,\n type TaskActivityTimelineProps,\n} from './TaskActivityTimeline'\n\nexport interface TaskActivityDialogProps extends Omit<\n TaskActivityTimelineProps,\n 'events' | 'labels' | 'testId'\n> {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** The task's name, shown under the title. */\n taskName: string\n events: readonly TaskActivityEvent[] | undefined\n isLoading?: boolean\n isError?: boolean\n labels?: Partial<TaskActivityLabels>\n testId?: string\n}\n\n/** The task's history in a dialog: newest at the bottom, scrolled into view as events arrive. */\nexport function TaskActivityDialog({\n open,\n onOpenChange,\n taskName,\n events,\n isLoading,\n isError,\n labels,\n testId,\n ...timeline\n}: TaskActivityDialogProps) {\n const l = { ...DEFAULT_TASK_ACTIVITY_LABELS, ...labels }\n const id = testIdOr(testId, { testId: 'task-activity' })\n const count = events?.length ?? 0\n // Scroll the newest entry into view when the dialog opens and whenever an event arrives.\n const scrollToEnd = useCallback(\n (el: HTMLDivElement | null) => {\n if (count >= 0) el?.scrollIntoView?.({ block: 'end' })\n },\n [count]\n )\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent presentation=\"sheet\" className=\"max-h-[80dvh] sm:max-w-lg\" data-testid={id}>\n <DialogHeader>\n <DialogTitle>{l.title}</DialogTitle>\n <DialogDescription className=\"truncate\">{taskName}</DialogDescription>\n </DialogHeader>\n <div className=\"max-h-[55dvh] overflow-y-auto pr-1\" data-testid={`${id}-scroll`}>\n {isLoading && !events ? (\n <p className=\"text-sm text-muted-foreground\">{l.loading}</p>\n ) : isError && !events ? (\n <p className=\"text-sm text-destructive\">{l.error}</p>\n ) : count === 0 ? (\n <p className=\"text-sm text-muted-foreground\">{l.empty}</p>\n ) : (\n <TaskActivityTimeline events={events ?? []} labels={labels} testId={id} {...timeline} />\n )}\n <div ref={scrollToEnd} />\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n","/**\n * Where a workflow run is, in a line of a list (the threads list's status), on two lines. First a\n * track with one segment per step in its kind's colour — filled once done, pulsing while it runs,\n * outlined while still to come — centred on the step the run is at, with \"…\" where a long run has\n * more before or after. Then where it stands, in words, about the NEXT step (what happens now):\n * Generating, Needs you, Up next, Failed — or Ready once every step is done (Done once a person\n * marked it so). The thread bar's chips in miniature, so a list of runs reads like a list of agents.\n */\n\nimport { cn } from '@arbidocs/react/ui'\nimport { isRunFinished, stepLevels, stepPhase, type WorkflowStepPhase } from '../workflows/run'\nimport { activeStepId } from '../workflows/stepWindow'\nimport { stepKindOf } from '../workflows/stepKinds'\nimport type { WorkflowStep, WorkflowStepState } from '../workflows/types'\nimport { ThreadStatusLine, type ThreadState, type ThreadStateLabels } from './ThreadStatusLine'\n\nexport interface WorkflowRunStatusLabels extends ThreadStateLabels {\n /** A finished run's detail; `{count}` is replaced. */\n allDone: string\n}\n\nexport const DEFAULT_WORKFLOW_RUN_STATUS_LABELS: Partial<WorkflowRunStatusLabels> = {\n allDone: 'all {count} steps done',\n}\n\nexport interface WorkflowRunStatusProps {\n steps: WorkflowStep[]\n /** Each step's state (from `stepStatesFromActivity`). */\n states: Record<string, WorkflowStepState>\n /** Who a step is for, in words (`assigneeName`): a person's step \"needs\" them. */\n assigneeOf?: (step: WorkflowStep) => string | undefined\n labels?: Partial<WorkflowRunStatusLabels>\n /** The states are still loading: the track shows the steps only, with no position yet. */\n isLoading?: boolean\n /** The thread's own status (To do / Done), which a person sets: a finished run marked done is Done. */\n workStatus?: string | null\n /** The most steps the track shows; a longer run is trimmed around the step it is at. */\n maxSegments?: number\n className?: string\n testId?: string\n}\n\nconst SEGMENT: Record<WorkflowStepPhase, string> = {\n done: 'bg-[hsl(var(--wf-accent))]',\n running: 'bg-[hsl(var(--wf-accent))] animate-pulse',\n waiting: 'bg-[hsl(var(--wf-accent)/0.3)] ring-1 ring-inset ring-[hsl(var(--wf-accent))]',\n failed: 'bg-destructive',\n skipped: 'ring-1 ring-inset ring-muted-foreground/40',\n ready: 'ring-1 ring-inset ring-[hsl(var(--wf-accent)/0.7)]',\n blocked: 'ring-1 ring-inset ring-[hsl(var(--wf-accent)/0.7)]',\n}\n\nexport function WorkflowRunStatus({\n steps,\n states,\n assigneeOf,\n labels,\n isLoading,\n workStatus,\n maxSegments = 7,\n className,\n testId = 'workflow-run-status',\n}: WorkflowRunStatusProps) {\n const l = { ...DEFAULT_WORKFLOW_RUN_STATUS_LABELS, ...labels }\n const ordered = stepLevels(steps).flat()\n const phaseOf = (id: string): WorkflowStepPhase =>\n isLoading ? 'blocked' : stepPhase(steps, states, id)\n const finished = !isLoading && isRunFinished(steps, states)\n // The step the run is at: the next one to happen (running, waiting on someone, or to do).\n const atId = finished || isLoading ? undefined : activeStepId(stepLevels(steps), phaseOf)\n const at = ordered.find((s) => s.id === atId)\n const phase = at ? phaseOf(at.id) : 'done'\n const assignee = at && ['ready', 'waiting'].includes(phase) ? assigneeOf?.(at) : undefined\n\n const state: ThreadState = finished\n ? workStatus === 'done'\n ? 'done'\n : 'ready'\n : phase === 'running'\n ? 'generating'\n : phase === 'failed'\n ? 'failed'\n : assignee\n ? 'needs'\n : 'next'\n const detail = at\n ? at.title\n : finished\n ? (l.allDone ?? '').replace('{count}', String(ordered.length))\n : undefined\n\n // The track's window: centred on the step the run is at (the last one once finished).\n const n = ordered.length\n const size = Math.min(maxSegments, n)\n const centre = at ? ordered.indexOf(at) : n - 1\n const start = Math.max(0, Math.min(n - size, centre - Math.floor(size / 2)))\n const shown = ordered.slice(start, start + size)\n const ellipsis = (side: string) => (\n <span\n className=\"px-0.5 text-[10px] leading-none text-muted-foreground\"\n data-testid={`${testId}-more-${side}`}\n >\n …\n </span>\n )\n\n return (\n <div\n className={cn('flex min-w-0 flex-col justify-center gap-1', className)}\n data-testid={testId}\n data-phase={phase}\n >\n <span className=\"flex items-center gap-0.5\" aria-hidden>\n {start > 0 && ellipsis('before')}\n {shown.map((s) => (\n <span\n key={s.id}\n className={cn(\n `wf-kind-${stepKindOf(s)}`,\n 'h-1.5 w-3 shrink-0 rounded-full',\n SEGMENT[phaseOf(s.id)],\n s.id === atId && 'w-5'\n )}\n title={s.title}\n data-phase={phaseOf(s.id)}\n />\n ))}\n {start + size < n && ellipsis('after')}\n </span>\n {isLoading ? (\n <span className=\"text-xs leading-tight\"> </span>\n ) : (\n <ThreadStatusLine\n state={state}\n name={assignee}\n detail={detail}\n labels={labels}\n testId={`${testId}-line`}\n />\n )}\n </div>\n )\n}\n","/**\n * The top bar of a thread that runs a workflow, in the builder canvas's own look (`StepChip`: each\n * kind of step in its colour, the start as the canvas's start pill): where the run is — the previous, current and next\n * steps by name, the rest behind ‹ › and \"…\", parallel steps as a \"+N\" chip, and every running step\n * out of view as \"Working: <title>\" (`StepBarFrame`, the same model as the runner's stepper) — with\n * everything that actually happened in the thread attached to the step it happened\n * during — the assistant's turns, a draft sent back, people's messages and edits, notifications.\n * Each step shows who acted during it (their faces, and how many entries); what happened before the\n * first step sits on the start pill, and what happened after the last on an \"After\" chip — each a\n * segment of the same chevron bar as the steps.\n * Linked runs show too: a signal a step raised and the linked thread it started (after the step),\n * and, for a thread a signal started, \"Started by <step> in <thread>\" (before the steps).\n * A thread without a workflow shows `TaskFlow` instead.\n */\n\nimport { useState, type ReactNode } from 'react'\nimport { ArrowUpRight, CornerLeftUp, CornerUpLeft, Flag, MessagesSquare, Zap } from 'lucide-react'\nimport { cn, Popover, PopoverClose, PopoverContent, PopoverTrigger } from '@arbidocs/react/ui'\nimport {\n isRunFinished,\n splitDocRef,\n stepLevels,\n stepPhase,\n waitingDocuments,\n waitingForDocumentsText,\n type WorkflowStepPhase,\n} from '../workflows/run'\nimport {\n STEP_LABEL,\n STEP_LABEL_MAX,\n STEP_LABEL_CURRENT,\n DEFAULT_STEP_BAR_LABELS,\n StepBarFrame,\n type StepBarLabels,\n} from '../workflows/StepBarFrame'\nimport { StepChip } from '../workflows/StepChip'\nimport {\n DEFAULT_STEP_KIND_LABELS,\n STEP_KIND_ICONS,\n stepKindOf,\n type WorkflowStepKind,\n} from '../workflows/stepKinds'\nimport { activeStepId } from '../workflows/stepWindow'\nimport {\n DEFAULT_STEP_DOCUMENT_LABELS,\n DEFAULT_STEP_RECORD_LABELS,\n StepDocumentButton,\n StepDocumentCards,\n StepRecord,\n stepDocuments,\n type StepDocumentLabels,\n type StepRecordLabels,\n} from '../workflows/StepDocuments'\nimport type { WorkflowStep, WorkflowStepState } from '../workflows/types'\nimport type { TaskFlowItem } from './TaskFlow'\n\n/** An activity entry, with what the strip needs to place it. */\nexport interface WorkflowThreadItem extends TaskFlowItem {\n /** The activity kind (`step_started`, `assistant_responded`, …). */\n kind?: string\n /** For a step event: the step it is about. */\n step?: string\n}\n\nexport interface GroupedThreadActivity<T> {\n before: T[]\n byStep: Record<string, T[]>\n after: T[]\n}\n\nconst STEP_KINDS = new Set([\n 'step_started',\n 'step_waiting',\n 'step_done',\n 'step_skipped',\n 'step_failed',\n])\n\n/**\n * Place each activity entry (oldest first): an entry belongs to the step whose event came last\n * before it — or, once that step has finished, to the step the run now waits on (the first one not\n * finished). Entries before any step event come before the steps, and entries once every step has\n * finished come after them. Step events themselves are the steps' own status, not entries.\n */\nexport function groupThreadActivity<T extends { kind?: string; step?: string }>(\n steps: WorkflowStep[],\n items: readonly T[]\n): GroupedThreadActivity<T> {\n const out: GroupedThreadActivity<T> = { before: [], byStep: {}, after: [] }\n const states: Record<string, WorkflowStepState> = {}\n let current: string | undefined\n for (const item of items) {\n if (item.kind && STEP_KINDS.has(item.kind) && item.step) {\n current = item.step\n states[item.step] = {\n status:\n item.kind === 'step_started'\n ? 'running'\n : item.kind === 'step_waiting'\n ? 'waiting'\n : item.kind === 'step_done'\n ? 'done'\n : item.kind === 'step_skipped'\n ? 'skipped'\n : 'failed',\n }\n continue\n }\n if (current === undefined) out.before.push(item)\n else if (isRunFinished(steps, states)) out.after.push(item)\n else {\n // Once the last step to move has finished, what follows is about the step the run waits on.\n const status = states[current]?.status\n const at =\n status === 'done' || status === 'skipped'\n ? (steps.find((s) => !['done', 'skipped'].includes(states[s.id]?.status ?? ''))?.id ??\n current)\n : current\n ;(out.byStep[at] ??= []).push(item)\n }\n }\n return out\n}\n\nexport interface WorkflowThreadStripLabels {\n /** The popover heading of a step's entries; `{count}` is replaced. */\n happened: string\n /** What the count on a step is; `{count}` is replaced. */\n updates: string\n nothingYet: string\n skip: string\n /** A linked run's origin; `{step}` and `{thread}` are replaced. */\n startedBy: string\n /** A raised signal's tooltip; `{signal}` is replaced. */\n signalled: string\n /** A linked thread's tooltip; `{signal}` is replaced. */\n linkedRun: string\n /** A step that waits for someone; `{name}` is replaced. */\n waitingFor: string\n /** A step the work was sent back to. */\n sentBack: string\n /** The start pill: the run began. */\n started: string\n /** The chip of what happened once every step had finished. */\n after: string\n /** The start pill's list, and the \"After\" chip's. */\n beforeSteps: string\n afterSteps: string\n /** Each kind's name, on the step in view. */\n kinds: Record<WorkflowStepKind, string>\n documents: StepDocumentLabels\n record: StepRecordLabels\n}\n\nexport const DEFAULT_WORKFLOW_THREAD_STRIP_LABELS: WorkflowThreadStripLabels = {\n happened: '{count} in this step',\n updates: '{count} updates in this step',\n nothingYet: 'Nothing here yet.',\n skip: 'Skip this step',\n startedBy: 'Started by {step} in {thread}',\n signalled: 'This step signalled “{signal}”',\n linkedRun: 'Started on “{signal}”: open its thread',\n waitingFor: 'Waiting for {name}',\n sentBack: 'Sent back to be done again',\n started: 'Started',\n after: 'After',\n beforeSteps: 'Before the first step',\n afterSteps: 'After the last step',\n kinds: DEFAULT_STEP_KIND_LABELS,\n documents: DEFAULT_STEP_DOCUMENT_LABELS,\n record: DEFAULT_STEP_RECORD_LABELS,\n}\n\n/** A linked thread a signal started, as the host names it. */\nexport interface WorkflowThreadLinkedRun {\n id: string\n /** The thread's title, or its workflow's name. */\n label: string\n onSelect?: () => void\n}\n\n/** A signal one of the run's steps raised, and the linked threads it started. */\nexport interface WorkflowThreadSignal {\n step: string\n signal: string\n runs: WorkflowThreadLinkedRun[]\n}\n\n/** Where a linked run came from: the step and the parent thread whose signal started it. */\nexport interface WorkflowThreadOrigin {\n stepTitle: string\n threadTitle: string\n signal?: string\n onSelect?: () => void\n}\n\nexport interface WorkflowThreadStripProps {\n steps: WorkflowStep[]\n /** Each step's state (from `stepStatesFromActivity`). */\n states: Record<string, WorkflowStepState>\n /** The thread's activity, oldest first, as `TaskFlow` items with their kind (and step). */\n items: readonly WorkflowThreadItem[]\n renderIcon?: (key: string) => ReactNode\n /**\n * Skip a step (any unfinished one that is not running: the plan guides the thread, it does not\n * hold it). Absent = no skipping here.\n */\n onSkip?: (stepId: string) => void\n /** The host's action for a person's step (fill in the form, approve…), shown in its popover. */\n renderStepAction?: (step: WorkflowStep, phase: WorkflowStepPhase) => ReactNode\n /** Signals the steps raised and the linked threads they started (`linkedRunsFromActivity`). */\n signals?: readonly WorkflowThreadSignal[]\n /** For a thread a signal started: where it came from. */\n startedBy?: WorkflowThreadOrigin\n /** Who a step is for, in words (`assigneeName`): shown on the step while it waits for them. */\n assigneeOf?: (step: WorkflowStep) => string | undefined\n /**\n * The documents: a step's popover leads with the versions it drafted, or for an approval the\n * versions it approves (`stepDocuments`), named by `nameOfDoc` and opened by `onOpenDocument`.\n */\n nameOfDoc?: (id: string) => string | undefined\n onOpenDocument?: (ref: string) => void\n /** The run's answers (`skill_inputs`) and people's names: a finished step shows what it recorded. */\n inputs?: Record<string, unknown>\n nameOf?: (id: string) => string | undefined\n labels?: Partial<WorkflowThreadStripLabels>\n /** The bar's own wording (arrows, \"…\", \"Working: <title>\", status words). */\n barLabels?: Partial<StepBarLabels>\n /** The most levels the bar shows at once (`StepBarFrame`'s `maxSpan`). Absent: as many as fit. */\n maxSpan?: number\n /**\n * The step in view, when the host keeps it (a runner's current step); absent: the strip's own\n * pick, else where the run is.\n */\n current?: string | null\n /** A step was gone to on the strip (its chip opened, or picked from a list). */\n onSelectStep?: (stepId: string) => void\n className?: string\n}\n\n/** \"Started by <step> in <thread>\": a linked run's way back to the thread that started it. */\nexport function WorkflowThreadStartedBy({\n origin,\n labels,\n}: {\n origin: WorkflowThreadOrigin\n labels?: Partial<WorkflowThreadStripLabels>\n}) {\n const l = { ...DEFAULT_WORKFLOW_THREAD_STRIP_LABELS, ...labels }\n const text = l.startedBy\n .replace('{step}', origin.stepTitle)\n .replace('{thread}', origin.threadTitle)\n const className =\n 'flex max-w-64 shrink-0 items-center gap-1 truncate rounded-full border border-border px-2 py-0.5 text-[11px] text-muted-foreground'\n const content = (\n <>\n <CornerLeftUp className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{text}</span>\n </>\n )\n return origin.onSelect ? (\n <button\n type=\"button\"\n onClick={origin.onSelect}\n title={origin.signal ? `${text} (${origin.signal})` : text}\n className={cn(className, 'hover:border-primary/40 hover:text-primary')}\n data-testid=\"workflow-thread-started-by\"\n >\n {content}\n </button>\n ) : (\n <span className={className} title={text} data-testid=\"workflow-thread-started-by\">\n {content}\n </span>\n )\n}\n\n/** A raised signal after its step, with the linked threads it started. */\nfunction SignalPill({ signal, l }: { signal: WorkflowThreadSignal; l: WorkflowThreadStripLabels }) {\n return (\n <span\n className=\"flex shrink-0 items-center gap-1 rounded-full border border-amber-500/40 bg-amber-500/10 px-1.5 py-0.5 text-[11px] text-amber-700 dark:text-amber-300\"\n title={l.signalled.replace('{signal}', signal.signal)}\n data-testid={`workflow-thread-signal-${signal.step}-${signal.signal}`}\n >\n <Flag className=\"size-3 shrink-0\" />\n <span className=\"font-mono\">{signal.signal}</span>\n {signal.runs.map((run) => (\n <button\n key={run.id}\n type=\"button\"\n onClick={run.onSelect}\n disabled={!run.onSelect}\n title={l.linkedRun.replace('{signal}', signal.signal)}\n className=\"flex max-w-40 items-center gap-0.5 truncate rounded-full bg-background/80 px-1.5 text-foreground hover:text-primary disabled:cursor-default\"\n data-testid={`workflow-thread-linked-${run.id}`}\n >\n <ArrowUpRight className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{run.label}</span>\n </button>\n ))}\n </span>\n )\n}\n\nfunction Entry({ item }: { item: WorkflowThreadItem }) {\n const content = (\n <>\n <span className=\"shrink-0\">{item.avatar}</span>\n <span className=\"min-w-0 text-left\">\n <span className=\"block max-w-40 truncate text-[11px] font-medium leading-tight\">\n {item.label}\n </span>\n <span\n className=\"block text-[10px] leading-tight text-muted-foreground\"\n title={item.exactTime}\n >\n {item.time}\n </span>\n </span>\n </>\n )\n // Going to what happened closes the popover it is listed in.\n return item.onSelect ? (\n <PopoverClose asChild>\n <button\n type=\"button\"\n onClick={item.onSelect}\n className=\"flex w-full items-center gap-1.5 rounded-md px-1 py-0.5 hover:bg-accent\"\n data-testid={`thread-flow-${item.id}`}\n >\n {content}\n </button>\n </PopoverClose>\n ) : (\n <span className=\"flex items-center gap-1.5 px-1 py-0.5\" data-testid={`thread-flow-${item.id}`}>\n {content}\n </span>\n )\n}\n\n/** The room a step's faces take on its chip, and its document button beside it. */\nconst BEADS_PX = 32\nconst DOC_BUTTON_PX = 34\n\n/** Who acted in these entries: each face once (latest last), then how many entries there are. */\nfunction Beads({ items, label }: { items: readonly WorkflowThreadItem[]; label: string }) {\n if (!items.length) return null\n const faces = new Map<string, ReactNode>()\n for (const item of items) {\n const key = item.actor ?? item.id\n faces.delete(key)\n faces.set(key, item.avatar)\n }\n const shown = [...faces.entries()].slice(-3)\n return (\n <span\n className=\"flex shrink-0 items-center gap-1\"\n title={label.replace('{count}', String(items.length))}\n >\n <span className=\"wf-beads [&_svg]:size-4\" aria-hidden>\n {shown.map(([key, avatar]) => (\n <span key={key}>{avatar}</span>\n ))}\n </span>\n <span className=\"text-[10px] font-normal tabular-nums text-muted-foreground\" aria-hidden>\n {items.length}\n </span>\n <span className=\"sr-only\">{label.replace('{count}', String(items.length))}</span>\n </span>\n )\n}\n\n/** A popover's heading, as the chip that opened it: the kind's badge, its name and the title. */\nfunction PopoverHeading({\n kind,\n icon,\n overline,\n title,\n}: {\n kind: string\n icon: ReactNode\n overline: string\n title: string\n}) {\n return (\n <div className={cn(`wf-kind-${kind}`, 'flex items-center gap-2 px-1 pb-1')}>\n <span className=\"wf-badge flex size-7 shrink-0 items-center justify-center rounded-md [&_svg]:size-4\">\n {icon}\n </span>\n <span className=\"min-w-0\">\n <span className=\"wf-kind-text block truncate text-[10px] font-semibold uppercase tracking-wider\">\n {overline}\n </span>\n <span className=\"block truncate text-sm font-semibold leading-snug\">{title}</span>\n </span>\n </div>\n )\n}\n\n/** A chip for entries outside the steps (the start, after the end), listing them on demand. */\nfunction EntriesChip({\n kind,\n icon,\n label,\n items,\n extra,\n heading,\n testId,\n}: {\n kind: 'start' | 'adhoc'\n icon: ReactNode\n label: string\n items: readonly WorkflowThreadItem[]\n extra?: ReactNode\n heading: string\n testId: string\n}) {\n const latest = items.at(-1)\n return (\n <Popover>\n <PopoverTrigger asChild>\n <StepChip\n kind={kind}\n phase=\"ready\"\n icon={icon}\n label={label}\n labelClassName=\"max-w-40 truncate\"\n title={latest ? `${label} · ${latest.label} · ${latest.time}` : label}\n className=\"shrink-0\"\n data-testid={testId}\n >\n <Beads items={items} label={heading} />\n </StepChip>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-72 space-y-1 p-2\" data-testid={`${testId}-menu`}>\n <PopoverHeading kind={kind} icon={icon} overline={heading} title={label} />\n {extra}\n {items.map((item) => (\n <Entry key={item.id} item={item} />\n ))}\n </PopoverContent>\n </Popover>\n )\n}\n\nexport function WorkflowThreadStrip({\n steps,\n states,\n items,\n renderIcon,\n onSkip,\n renderStepAction,\n signals = [],\n startedBy,\n assigneeOf,\n nameOfDoc,\n onOpenDocument,\n inputs = {},\n nameOf,\n labels,\n barLabels,\n maxSpan,\n current,\n onSelectStep,\n className,\n}: WorkflowThreadStripProps) {\n const l = { ...DEFAULT_WORKFLOW_THREAD_STRIP_LABELS, ...labels }\n const barL = { ...DEFAULT_STEP_BAR_LABELS, ...barLabels }\n const grouped = groupThreadActivity(steps, items)\n // A signal from a step the plan no longer names still shows, after the steps.\n const strays = signals.filter((s) => !steps.some((step) => step.id === s.step))\n // The step a person went to (from a group, the list, a \"Working\" pill); none = where the run is.\n // A host that keeps the step in view (`current`) is told (`onSelectStep`) and decides.\n const [picked, setPicked] = useState<string | null>(null)\n const selected = current !== undefined ? current : picked\n const setSelected = (id: string) => {\n setPicked(id)\n onSelectStep?.(id)\n }\n // The step whose popover (what happened in it, its action) is open.\n const [open, setOpen] = useState<string | null>(null)\n const phaseOf = (id: string) => stepPhase(steps, states, id)\n const iconOf = (step: WorkflowStep) =>\n step.icon && renderIcon ? renderIcon(step.icon) : undefined\n // The host's icon for a step, else its kind's (as on the canvas).\n const glyphOf = (step: WorkflowStep) => {\n const KindIcon = STEP_KIND_ICONS[stepKindOf(step)]\n return iconOf(step) ?? <KindIcon />\n }\n\n const waitingOf = (id: string) => {\n const step = steps.find((s) => s.id === id)\n const phase = phaseOf(id)\n const documents = waitingDocuments(states[id])\n if (documents.length) return waitingForDocumentsText(documents.length)\n const name = step && (phase === 'ready' || phase === 'waiting') ? assigneeOf?.(step) : undefined\n return name ? l.waitingFor.replace('{name}', name) : undefined\n }\n\n const pill = (step: WorkflowStep, isCurrent: boolean) => {\n const phase = phaseOf(step.id)\n const happened = grouped.byStep[step.id] ?? []\n const assignee = phase === 'ready' || phase === 'waiting' ? assigneeOf?.(step) : undefined\n // Whom it waits for, or the documents it waits on to finish processing.\n const waiting = waitingOf(step.id)\n const sentBack = states[step.id]?.sentBack\n const kind = stepKindOf(step)\n const documents = stepDocuments(steps, states, step.id)\n // The step's document, one click from its chip: the latest version.\n const latestDoc = onOpenDocument ? documents.at(-1) : undefined\n const finished = ['done', 'skipped', 'failed'].includes(phase)\n const chip = (\n <Popover\n open={open === step.id}\n onOpenChange={(o) => {\n setOpen(o ? step.id : null)\n // The step whose popover is open is the step in view (ringed, headed).\n if (o) setSelected(step.id)\n }}\n >\n <PopoverTrigger asChild>\n <StepChip\n kind={kind}\n phase={phase}\n icon={glyphOf(step)}\n label={step.title}\n current={isCurrent}\n heading={\n <>\n {l.kinds[kind]}\n {assignee && (\n <span data-testid={`workflow-thread-step-${step.id}-assignee`}>\n {' · '}\n {waiting}\n </span>\n )}\n </>\n }\n labelClassName={isCurrent ? STEP_LABEL_CURRENT : cn(STEP_LABEL, STEP_LABEL_MAX)}\n className={cn(latestDoc && 'rounded-r-none')}\n title={waiting ? `${step.title} · ${waiting}` : step.title}\n data-testid={`workflow-thread-step-${step.id}`}\n >\n {sentBack && (\n <CornerUpLeft\n className=\"size-3 shrink-0 text-amber-600 dark:text-amber-400\"\n aria-label={l.sentBack}\n data-testid={`workflow-thread-step-${step.id}-sent-back`}\n />\n )}\n <Beads items={happened} label={l.updates} />\n </StepChip>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className=\"w-80 space-y-1.5 p-2\"\n data-testid={`workflow-thread-step-${step.id}-menu`}\n >\n <PopoverHeading\n kind={kind}\n icon={glyphOf(step)}\n // Where it stands, said once, as on its chip: whom it waits for, else its phase.\n overline={`${l.kinds[kind]} · ${waiting ?? barL.phases[phase]}`}\n title={step.title}\n />\n {sentBack && (\n <p className=\"px-1 text-xs text-amber-700 dark:text-amber-300\">{l.sentBack}</p>\n )}\n {/* The document first: what was drafted, or what is being approved. */}\n <StepDocumentCards\n refs={documents}\n heading={\n step.kind === 'review'\n ? phase === 'done'\n ? l.documents.approved\n : l.documents.toApprove\n : l.documents.produced\n }\n nameOfDoc={nameOfDoc}\n onOpen={onOpenDocument}\n labels={l.documents}\n testId={`workflow-thread-step-${step.id}-docs`}\n />\n <StepRecord\n step={step}\n state={states[step.id]}\n inputs={inputs}\n nameOf={nameOf}\n labels={l.record}\n testId={`workflow-thread-step-${step.id}-record`}\n />\n {(happened.length > 0 || !finished) && (\n <p className=\"px-1 text-xs font-medium text-muted-foreground\">\n {happened.length\n ? l.happened.replace('{count}', String(happened.length))\n : l.nothingYet}\n </p>\n )}\n {happened.map((item) => (\n <Entry key={item.id} item={item} />\n ))}\n {renderStepAction?.(step, phase)}\n {onSkip && ['ready', 'blocked', 'failed', 'waiting'].includes(phase) && (\n <button\n type=\"button\"\n onClick={() => onSkip(step.id)}\n className=\"w-full rounded-md px-1 py-1 text-left text-xs text-muted-foreground hover:bg-accent\"\n data-testid={`workflow-thread-step-${step.id}-skip`}\n >\n {l.skip}\n </button>\n )}\n </PopoverContent>\n </Popover>\n )\n return latestDoc ? (\n <span className=\"flex min-w-0 items-center\">\n {chip}\n <StepDocumentButton\n kind={kind}\n name={nameOfDoc?.(splitDocRef(latestDoc).id) ?? latestDoc}\n onOpen={() => onOpenDocument?.(latestDoc)}\n testId={`workflow-thread-step-${step.id}-open-document`}\n />\n </span>\n ) : (\n chip\n )\n }\n\n // The start pill: how the run began (a linked run's origin), and what happened before step one.\n const leading =\n startedBy || grouped.before.length ? (\n <div className=\"flex shrink-0 items-center gap-1\">\n {grouped.before.length ? (\n <EntriesChip\n kind=\"start\"\n icon={<Zap />}\n label={l.started}\n items={grouped.before}\n heading={l.beforeSteps}\n extra={startedBy && <WorkflowThreadStartedBy origin={startedBy} labels={labels} />}\n testId=\"workflow-thread-start\"\n />\n ) : (\n startedBy && <WorkflowThreadStartedBy origin={startedBy} labels={labels} />\n )}\n </div>\n ) : null\n const trailing =\n grouped.after.length || strays.length ? (\n <div className=\"flex shrink-0 items-center gap-1\">\n {grouped.after.length > 0 && (\n <EntriesChip\n kind=\"adhoc\"\n icon={<MessagesSquare />}\n label={l.after}\n items={grouped.after}\n heading={l.afterSteps}\n testId=\"workflow-thread-after\"\n />\n )}\n {strays.map((s) => (\n <SignalPill key={`${s.step}-${s.signal}`} signal={s} l={l} />\n ))}\n </div>\n ) : null\n\n // The start pill, the \"After\" chip and what the step in view waits on take room of their own.\n const at = steps.find((s) => s.id === (selected ?? activeStepId(stepLevels(steps), phaseOf)))\n // The step in view is as wide as its heading (kind · whom it waits for, small caps) when that is\n // longer than its name; each step someone acted in carries their faces.\n const headingPx = (step: WorkflowStep) =>\n `${l.kinds[stepKindOf(step)]} · ${waitingOf(step.id) ?? ''}`.length * 5.6 -\n step.title.length * 6.5\n const reserve = {\n always:\n (at ? Math.max(0, headingPx(at)) : 0) +\n steps.filter((s) => grouped.byStep[s.id]?.length).length * BEADS_PX +\n (onOpenDocument\n ? steps.filter((s) => stepDocuments(steps, states, s.id).length).length * DOC_BUTTON_PX\n : 0),\n leading: leading ? 150 : 0,\n trailing: trailing ? 120 : 0,\n }\n\n return (\n <div className={cn('min-w-0 flex-1', className)} data-testid=\"workflow-thread-strip\">\n <StepBarFrame\n levels={stepLevels(steps)}\n phaseOf={phaseOf}\n current={selected}\n onSelect={(id) => {\n setSelected(id)\n setOpen(id)\n }}\n renderStep={(step, _level, win) =>\n pill(step, step.id === win.levels[win.currentLevel]?.primary.id || step.id === selected)\n }\n renderAfter={(level) =>\n signals\n .filter((s) => level.steps.some((step) => step.id === s.step))\n .map((s) => <SignalPill key={`${s.step}-${s.signal}`} signal={s} l={l} />)\n }\n leading={leading}\n trailing={trailing}\n reservePx={reserve}\n maxSpan={maxSpan}\n icon={glyphOf}\n kindOf={stepKindOf}\n labels={{ waitingFor: l.waitingFor, ...barLabels }}\n tid={(suffix) => `workflow-thread-${suffix}`}\n />\n </div>\n )\n}\n","import { useMemo, type ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport { Eye, History } from 'lucide-react'\nimport { workflowRunStatusLabel } from './workflowRows'\nimport { GridView } from '../../files/GridView'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { ActionLink } from '../../components/ActionLink'\nimport { TabHeader } from '../../shell/TabHeader'\n\nexport interface TaskRunView {\n id: string\n resultId?: string\n /** running | success | failed (others get a neutral pill). */\n status: string\n /** Formatted finish (or start) time; empty for none. */\n when?: string\n error?: string | null\n /** The run's `conversation_ext_id`; enables Open. See `TaskRunsDialogProps.onOpenRun`. */\n conversationId?: string | null\n}\n\n/** Fixed strings of the run-history dialog. */\nexport interface TaskRunsDialogLabels {\n /** Dialog title; receives the task name. */\n title: (taskName: string | undefined) => string\n description: string\n loading: string\n empty: string\n open: string\n}\n\nexport const DEFAULT_TASK_RUNS_DIALOG_LABELS: TaskRunsDialogLabels = {\n title: (taskName) => `Run history — ${taskName}`,\n description: 'Every time this task ran. Open a run to read or watch it in its conversation.',\n loading: 'Loading runs…',\n empty: 'This task hasn’t run yet.',\n open: 'Open',\n}\n\nexport interface TaskRunsDialogTestIds {\n modal: string\n empty: string\n list: string\n row: string\n open: string\n}\n\nexport interface TaskRunsDialogProps {\n inline?: boolean\n hideHeader?: boolean\n renderErrorReport?: (run: TaskRunView) => ReactNode\n open: boolean\n onOpenChange: (open: boolean) => void\n taskName?: string\n /** A workflow may fail before it creates a run conversation. */\n error?: string | null\n runs: TaskRunView[]\n isLoading: boolean\n /**\n * Jump into a run's conversation (the dialog closes afterwards).\n *\n * Deep-link contract: `conversationId` is the run's `conversation_ext_id` (`con-xxxxxxxx`, from\n * `useTaskRuns` / `TaskRunResponse`). ARBI defines no URL for it: the HOST decides where a\n * conversation lives (`/chat/${id}`, a dock, a modal). The conversation belongs to the task's\n * workspace (`TaskResponse.workspace_ext_id`), so a host whose route needs the workspace open\n * must switch to it first, then navigate. A run with no `conversationId` gets no Open button.\n */\n onOpenResult?: (resultId: string) => void\n onOpenRun: (conversationId: string) => void\n /**\n * The same destination as an href, so Open is a real link (middle-click, copy address, new tab).\n * Return the URL for `run.conversationId`; `onOpenRun` still fires on a plain click for SPA\n * navigation. Leave unset for a button-only Open.\n */\n getRunHref?: (run: TaskRunView) => string | undefined\n testIds?: Partial<TaskRunsDialogTestIds>\n labels?: Partial<TaskRunsDialogLabels>\n}\n\nconst STATUS_STYLE: Record<string, string> = {\n running: 'bg-ai-soft text-ai-ink',\n success: 'bg-green-bg text-green-text',\n completed: 'bg-green-bg text-green-text',\n failed: 'bg-red-bg text-red-text',\n}\n\n/**\n * Persisted automation run history. The host supplies run records and navigation to thread or document results.\n */\nexport function TaskRunsDialog({\n inline = false,\n renderErrorReport,\n hideHeader = false,\n open,\n onOpenChange,\n taskName,\n runs,\n isLoading,\n onOpenRun,\n onOpenResult,\n getRunHref,\n testIds,\n labels,\n}: TaskRunsDialogProps) {\n const l = { ...DEFAULT_TASK_RUNS_DIALOG_LABELS, ...labels }\n const columns = useMemo<ColDef<TaskRunView>[]>(\n () => [\n {\n colId: 'status',\n field: 'status',\n headerName: 'Status',\n width: 160,\n minWidth: 140,\n cellRenderer: ({ data }: ICellRendererParams<TaskRunView>) =>\n data && (\n <span\n className={cn(\n 'rounded-full px-2 py-0.5 text-xs font-medium capitalize',\n STATUS_STYLE[data.status] ?? 'text-muted-foreground'\n )}\n >\n {workflowRunStatusLabel(data.status)}\n </span>\n ),\n },\n { colId: 'when', field: 'when', headerName: 'Run', flex: 2, minWidth: 240 },\n {\n colId: 'result',\n headerName: '',\n width: 280,\n minWidth: 220,\n sortable: false,\n cellRenderer: ({ data: run }: ICellRendererParams<TaskRunView>) => {\n if (!run) return null\n return (\n <div className=\"flex h-full items-center gap-2\">\n {run.error && renderErrorReport?.(run)}\n {(run.conversationId || (run.resultId && onOpenResult)) && (\n <Button asChild variant=\"ghost\" size=\"sm\" className=\"h-7 gap-1.5\">\n <ActionLink\n href={getRunHref?.(run)}\n onSelect={() => {\n if (run.conversationId) onOpenRun(run.conversationId)\n else if (run.resultId) onOpenResult?.(run.resultId)\n onOpenChange(false)\n }}\n data-testid={testIdOr(testIds?.open, { testId: 'task-run-open' })}\n >\n <Eye size={13} /> {l.open}\n </ActionLink>\n </Button>\n )}\n </div>\n )\n },\n },\n ],\n [onOpenRun, onOpenResult, getRunHref, onOpenChange, testIds?.open, l.open, renderErrorReport]\n )\n const content = (\n <>\n {hideHeader ? null : inline ? (\n <TabHeader\n tabs={[\n {\n id: 'history',\n label: l.title(taskName),\n count: runs.length,\n countIcon: <History size={14} />,\n presentation: 'count',\n onClose: () => onOpenChange(false),\n },\n ]}\n activeTabId=\"history\"\n onTabChange={() => {}}\n />\n ) : (\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\">\n <History size={16} /> {l.title(taskName)}\n </DialogTitle>\n <DialogDescription>{l.description}</DialogDescription>\n </DialogHeader>\n )}\n\n <div className=\"min-h-0 flex-1\">\n <GridView<TaskRunView>\n testId={testIdOr(testIds?.list, { testId: 'task-runs-list' })}\n gridId=\"workflow-runs\"\n items={runs}\n columnDefs={columns}\n getItemId={(run) => run.id}\n getRowTestId={() => testIdOr(testIds?.row, { testId: 'task-run-row' })}\n isLoading={isLoading}\n loadingMessage={l.loading}\n emptyState={{ title: l.empty }}\n height=\"100%\"\n />\n </div>\n </>\n )\n return inline ? (\n <section className=\"flex min-h-0 flex-1 flex-col\" data-testid=\"automation-history\">\n {content}\n </section>\n ) : (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"sheet\"\n className=\"flex h-[min(32rem,calc(100dvh-2rem))] min-h-0 max-w-3xl flex-col\"\n data-testid={testIdOr(testIds?.modal, { testId: 'task-runs-modal' })}\n >\n {content}\n </DialogContent>\n </Dialog>\n )\n}\n","import type { ReactNode } from 'react'\nimport type { AgentOption } from '../workflows/AgentSelect'\nimport type { SchemaFormLabels } from '../workflows/SchemaForm'\nimport type { WorkflowScopeSource } from '../workflows/WorkflowConfigDialog'\nimport type {\n WorkflowDefinition,\n WorkflowField,\n WorkflowInputs,\n WorkflowScope,\n} from '../workflows/types'\nimport { defaultInputs } from '../workflows/workflow'\nimport type { RecurrenceBuilderProps } from './RecurrenceBuilder'\n\n/**\n * When the assistant starts. `manual` means it only acts when asked (an @mention, or sending work back);\n * `now` starts it at once; `once`, `repeat`, `event` and `task` (after another task is signed off) start\n * it unattended.\n */\nexport type TaskWhen = 'manual' | 'now' | 'once' | 'repeat' | 'event' | 'task'\n\nexport type TaskAccessMode = 'ask_each_run' | 'standing'\n\n/**\n * Whether the assistant has been given work. Every task has an assistant; `agent` means it was configured\n * to prepare the task (it has an instruction and a start), `me` means it is on standby.\n */\nexport type TaskAssignee = 'me' | 'agent'\n\n/** Everything the composer collects. The host maps it onto its API. */\nexport interface TaskComposerValues {\n assignee: TaskAssignee\n workflowId: string\n inputs: WorkflowInputs\n when: TaskWhen\n /** datetime-local value (`once`). */\n runAt: string\n rrule: string\n timezone: string\n eventKind: string\n /** `task`: the id (`con-…`) of the task (conversation) this one waits on. */\n afterTaskId: string\n /** The task this is a sub-task of (`con-…`); `''` = a top-level task. */\n parentTaskId: string\n /** Shared with the workspace's members (like a document); off keeps it private to its owner. */\n shared: boolean\n /** What the task is, in the owner's words. */\n description: string\n /** datetime-local value; empty = no due date. */\n dueAt: string\n /** `''` = the user's own assistant. */\n agentId: string\n /** The task's title. */\n name: string\n /** The owner is always told when the assistant finishes; kept so hosts can map it. */\n notifyOnComplete: boolean\n /** Only asked for tasks the assistant starts unattended. */\n access: TaskAccessMode\n /** A workflow's saved equality filters on its event; carried through an edit unchanged (no control). */\n eventFilter?: Record<string, string | number | boolean> | null\n}\n\nexport interface TaskComposerLabels {\n titleNew: string\n titleEdit: string\n description: string\n titleNewWorkflow: string\n titleRunTemplate: (name: string) => string\n titleEditWorkflow: string\n descriptionWorkflow: string\n workflowNamePlaceholder: string\n createWorkflow: string\n /** The workflow dialog's three required parts, in order, and what is missing from each. */\n whenHeading: string\n whoHeading: string\n /** \"Run as\": the person themself (the default for Run now) or an agent (required for a scheduled run). */\n runAs: string\n runLater: string\n addFilesReason: string\n needDocument: string\n addPlan: string\n hidePlan: string\n /** The toggle when the workflow already has a plan. */\n showPlan: string\n runAsMe: string\n runAsAgentHint: string\n needAgent: string\n runNow: string\n saveWorkflow: string\n needWhat: string\n needRunAt: string\n needRrule: string\n needEvent: string\n needAfterTask: string\n /** The \"More options\" disclosure (name, details, visibility, plan, unattended access). */\n moreOptions: string\n fewerOptions: string\n nameHint: string\n titleLabel: string\n titlePlaceholder: string\n descriptionLabel: string\n descriptionPlaceholder: string\n due: string\n dueNone: string\n dueClear: string\n parentTask: string\n parentTaskNone: string\n visibility: string\n visibilityWorkspace: string\n visibilityPrivate: string\n assistant: string\n assistantStandby: string\n assistantPreparing: (when: string) => string\n configure: string\n configureClose: string\n what: string\n template: string\n whatPlaceholder: string\n plan: string\n planHint: string\n start: string\n whenOptions: Record<TaskWhen, string>\n runAt: string\n /** Shown when the start time is already past: the server refuses it. */\n runAtPast: string\n event: string\n eventPlaceholder: string\n eventHint: ReactNode\n afterTask: string\n afterTaskPlaceholder: string\n which: string\n myAssistant: string\n permission: string\n /** The disclosure that holds who runs it, access, name, owner and visibility. */\n runOptions: string\n /** Its summary line: \"Runs as Assistant · ask me each time\". */\n runOptionsSummary: (agent: string, access: string) => string\n permissionHint: string\n accessOptions: Record<TaskAccessMode, { label: string; hint: string }>\n timezone: string\n search: string\n empty: string\n cancel: string\n addTask: string\n addAndStart: string\n addAndSchedule: string\n save: string\n saving: string\n}\n\nexport const DEFAULT_TASK_COMPOSER_LABELS: TaskComposerLabels = {\n titleNew: 'New task',\n titleEdit: 'Edit task',\n description: 'Add a task. Every task has an assistant; configure it to have it prepare the work.',\n titleNewWorkflow: 'New workflow',\n /** The title while a template is picked: \"Run Summarise\". */\n titleRunTemplate: (name: string) => `Run ${name}`,\n titleEditWorkflow: 'Edit workflow',\n descriptionWorkflow:\n 'Run it now, or choose Run later to have it start on a date, repeat, or follow an event.',\n workflowNamePlaceholder: 'Name this workflow',\n createWorkflow: 'Create workflow',\n whenHeading: 'When should it run?',\n whoHeading: 'Which agent runs it?',\n runAs: 'Run as',\n runLater: 'Run later',\n addFilesReason: 'This needs files to work on. Add some, then run it.',\n needDocument: 'Pick or add a document',\n addPlan: 'Add a plan',\n hidePlan: 'Hide the plan',\n showPlan: 'Show the plan',\n runAsMe: 'Me',\n runAsAgentHint:\n 'Nobody is there when a saved workflow runs, so an agent runs it. Your Assistant is the default.',\n needAgent: 'Choose the agent that runs it.',\n runNow: 'Run now',\n saveWorkflow: 'Save workflow',\n needWhat: 'Say what it should do: choose a template and fill it in, or write an instruction.',\n needRunAt: 'Pick the date and time it should run.',\n needRrule: 'Choose how often it repeats.',\n needEvent: 'Say which event starts it.',\n needAfterTask: 'Choose the task it follows.',\n moreOptions: 'More options',\n fewerOptions: 'Fewer options',\n nameHint: 'Leave blank to use the name shown.',\n titleLabel: 'Title',\n titlePlaceholder: 'What needs doing?',\n descriptionLabel: 'Description',\n descriptionPlaceholder: 'Add details (optional)',\n due: 'Due',\n dueNone: 'No date',\n dueClear: 'Clear date',\n parentTask: 'Part of',\n parentTaskNone: 'Nothing (top-level)',\n visibility: 'Visibility',\n visibilityWorkspace: 'Workspace',\n visibilityPrivate: 'Only me',\n assistant: 'Task Assistant',\n assistantStandby: 'On standby. It replies when you @mention it in the task’s thread.',\n assistantPreparing: (when) => `Will work on this task ${when}. You mark it done when it is.`,\n configure: 'Configure',\n configureClose: 'Done',\n what: 'What should it do?',\n template: 'Skill',\n whatPlaceholder: 'Choose…',\n plan: 'Plan',\n planHint: 'The checklist it is held to. You see how it did when it finishes.',\n start: 'Start',\n whenOptions: {\n manual: 'When asked',\n now: 'Now',\n once: 'On a date',\n repeat: 'Repeat',\n event: 'When something happens',\n task: 'After another task',\n },\n runAt: 'Start at',\n runAtPast: 'Pick a time in the future.',\n event: 'Event',\n eventPlaceholder: 'mention',\n eventHint: 'It starts whenever this kind of notification reaches you.',\n afterTask: 'After',\n afterTaskPlaceholder: 'Choose a task…',\n which: 'Assistant',\n myAssistant: 'Mine',\n permission: 'Access',\n runOptions: 'Run options',\n runOptionsSummary: (agent, access) => `Runs as ${agent} · ${access.toLowerCase()}`,\n permissionHint:\n 'It starts while you are away, so it needs your permission to use this workspace.',\n accessOptions: {\n ask_each_run: {\n label: 'Ask me each time',\n hint: 'When it is due, it waits until you allow it.',\n },\n standing: {\n label: 'Always allowed',\n hint: 'It joins the workspace and can work while you are away. Only for assistants you trust.',\n },\n },\n timezone: 'Timezone',\n search: 'Search…',\n empty: 'No match.',\n cancel: 'Cancel',\n addTask: 'Add task',\n addAndStart: 'Start now',\n addAndSchedule: 'Schedule',\n save: 'Save changes',\n saving: 'Saving…',\n}\n\nexport interface TaskOption {\n id: string\n name: string\n}\n\nexport interface TaskComposerProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /**\n * `work` (default) adds a task: \"Now\" starts it at once and any other start saves a workflow.\n * `workflow` is the workflow dialog itself (new or edit): a trigger and an action are required, and\n * the task-only properties (due date, parent) are hidden.\n */\n kind?: 'work' | 'workflow'\n /** Saving a reusable workflow; on-demand creates a recipe rather than starting work. */\n saveOnly?: boolean\n /** Hide the \"Run later\" button (scheduling is off): a workflow can only be started now. */\n hideRunLater?: boolean\n /**\n * Editing an existing task, or a workflow. A task keeps the start and assistant it was created with;\n * a workflow can change both.\n */\n isEdit?: boolean\n /** Workflows the assistant can run. The host includes its \"my own instruction\" entry. */\n workflows: WorkflowDefinition[]\n agents: AgentOption[]\n /** Tasks a new task can be part of, or wait on (`when: 'task'`) — conversations with a status. */\n tasks?: TaskOption[]\n /**\n * The owner's Assistant (an agent id). A scheduled workflow needs an agent, so switching away from\n * \"Now\" selects this one when \"Run as\" is still the person themself.\n */\n defaultAgentId?: string\n /** Controlled values; omit to let the composer hold them (seeded by `initialValues`). */\n values?: TaskComposerValues\n initialValues?: Partial<TaskComposerValues>\n onValuesChange?: (values: TaskComposerValues) => void\n timezones?: string[]\n /** Supported event triggers, supplied by the host instead of asking users for backend codes. */\n eventOptions?: readonly { id: string; label: string }[]\n eventWorkflowOptions?: readonly { id: string; label: string }[]\n /** The plan editor, shown inline when the assistant is configured. Omit when not applicable. */\n goal?: ReactNode | ((values: TaskComposerValues) => ReactNode)\n /** What \"always allowed\" means for this assistant (e.g. the workspaces it will hold standing access to). */\n standingAccess?: ReactNode | ((values: TaskComposerValues) => ReactNode)\n isPending?: boolean\n /** A plan is being drafted: saving waits for it, or the plan would be dropped. */\n planDrafting?: boolean\n /** The plan already stored (an edit): the toggle offers to show it rather than to add one. */\n hasPlan?: boolean\n onSubmit: (values: TaskComposerValues, options?: { runOnce?: boolean }) => void\n /**\n * The workspace's files behind `scope` fields (the folder/label picker) and a `documents` field (an\n * explicit pick). The host owns the file data; without these those fields render nothing. A scope pick\n * is resolved to explicit file ids on submit (`scopeSource.resolveDocuments`).\n */\n scopeSource?: WorkflowScopeSource\n renderDocuments?: (\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode\n /** The host's \"Add files\" control, offered instead of the form when a template needs files and there are none. */\n addFilesAction?: ReactNode\n /** Files dropped on the \"add files\" state: the host uploads them. */\n onDropFiles?: (files: File[]) => void\n /** The assistant's workflow input forms: `renderIcon` maps a field option's icon key. */\n renderIcon?: (key: string) => ReactNode\n labels?: Partial<TaskComposerLabels>\n formLabels?: Partial<SchemaFormLabels>\n recurrence?: Pick<RecurrenceBuilderProps, 'testIds' | 'labels'>\n testId?: string\n}\n\nexport function defaultTaskComposerValues(\n workflows: WorkflowDefinition[],\n initial?: Partial<TaskComposerValues>\n): TaskComposerValues {\n const workflowId = initial?.workflowId ?? workflows[0]?.id ?? ''\n const workflow = workflows.find((w) => w.id === workflowId)\n return {\n assignee: 'me',\n workflowId,\n inputs: workflow ? { ...defaultInputs(workflow), ...initial?.inputs } : { ...initial?.inputs },\n when: 'manual',\n runAt: '',\n rrule: '',\n timezone: 'UTC',\n eventKind: 'mention',\n afterTaskId: '',\n parentTaskId: '',\n shared: false,\n description: '',\n dueAt: '',\n agentId: '',\n name: '',\n notifyOnComplete: true,\n access: 'ask_each_run',\n ...initial,\n }\n}\n","import { useEffect, useMemo, useState } from 'react'\nimport { Bot, CornerDownRight, KeyRound, Loader2, Play, ChevronDown, Zap, X } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogClose,\n DialogDescription,\n DialogTitle,\n Input,\n Label,\n Textarea,\n VisibilityToggle,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { TabHeader } from '../../shell/TabHeader'\nimport { useControllableState } from '../../lib/useControllableState'\nimport { AddFilesFirst } from '../../home/AddFilesFirst'\nimport { SchemaForm } from '../workflows/SchemaForm'\nimport { defaultScopeRenderer, resolveScopeInputs } from '../workflows/scopeRender'\nimport type { WorkflowInputValue } from '../workflows/types'\nimport { defaultInputs, validateInputs } from '../workflows/workflow'\nimport { PillSelect, type PillOption } from './PillSelect'\nimport { RecurrenceBuilder } from './RecurrenceBuilder'\nimport {\n DEFAULT_TASK_COMPOSER_LABELS,\n defaultTaskComposerValues,\n type TaskAccessMode,\n type TaskComposerLabels,\n type TaskComposerProps,\n type TaskComposerValues,\n type TaskWhen,\n} from './taskComposerTypes'\nimport { deriveWorkflowName } from './taskRequest'\n\n/** A workflow starts at a time, on a repeat, on an event or after a task: never \"now\". */\nconst WHEN_ORDER: TaskWhen[] = ['now', 'once', 'repeat', 'event', 'task']\nconst GLYPH = 'size-3.5 shrink-0'\n\n/** What is still missing from the trigger, as the label key that says so; null when it is complete. */\nfunction missingWhen(values: TaskComposerValues, runAtPast: boolean) {\n if (values.when === 'now' || values.when === 'manual') return null\n if (values.when === 'once') return !values.runAt || runAtPast ? 'needRunAt' : null\n if (values.when === 'repeat') return values.rrule.trim() ? null : 'needRrule'\n if (values.when === 'event') return values.eventKind.trim() ? null : 'needEvent'\n if (values.when === 'task') return values.afterTaskId ? null : 'needAfterTask'\n return null\n}\n\n/**\n * The workflow dialog, where a skill is run: what it does, when it runs (Now by default, or on a date, a\n * repeat, an event or after a task) and who runs it (the person, or an agent), up front and in that\n * order, each saying in plain words what is missing. \"Now\" runs it at once and saves nothing; every\n * other start saves a workflow, which needs an agent because nobody is present when it fires. The name, details, visibility, plan and unattended\n * access are optional and sit behind \"More options\". A blank name is derived from the template or the\n * instruction and shown as the placeholder, so the Create button needs only the three required parts.\n */\nexport function WorkflowComposer({\n open,\n onOpenChange,\n isEdit = false,\n saveOnly = false,\n hideRunLater = false,\n workflows,\n agents,\n tasks = [],\n values: valuesProp,\n initialValues,\n onValuesChange,\n timezones = [],\n eventOptions,\n eventWorkflowOptions,\n goal,\n standingAccess,\n scopeSource,\n renderDocuments,\n addFilesAction,\n onDropFiles,\n defaultAgentId,\n isPending,\n planDrafting = false,\n hasPlan = false,\n onSubmit,\n renderIcon,\n labels,\n formLabels,\n recurrence,\n testId,\n}: TaskComposerProps) {\n const l: TaskComposerLabels = {\n ...DEFAULT_TASK_COMPOSER_LABELS,\n ...labels,\n whenOptions: {\n ...DEFAULT_TASK_COMPOSER_LABELS.whenOptions,\n ...labels?.whenOptions,\n ...(saveOnly ? { now: 'When needed' } : {}),\n },\n accessOptions: { ...DEFAULT_TASK_COMPOSER_LABELS.accessOptions, ...labels?.accessOptions },\n }\n const seed = useMemo(\n () => defaultTaskComposerValues(workflows, initialValues),\n // Seeded once per open; the host re-keys the composer for a different workflow.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [workflows, open]\n )\n const [values, setValues] = useControllableState<TaskComposerValues>(\n valuesProp,\n seed,\n onValuesChange\n )\n const [runOnce, setRunOnce] = useState(false)\n const [automationWhen, setAutomationWhen] = useState(seed.when)\n const [planOpen, setPlanOpen] = useState(false)\n const [moreOpen, setMoreOpen] = useState(false)\n // The agent was filled in for a scheduled start (not chosen): said inline, and undone going back to Now.\n const [agentAutoSet, setAgentAutoSet] = useState(false)\n // Each open starts from the seed again (uncontrolled only), with the extras folded away.\n useEffect(() => {\n if (open) {\n if (valuesProp === undefined) setValues(seed)\n setRunOnce(false)\n setPlanOpen(false)\n setAgentAutoSet(false)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const id = testIdOr(testId, { testId: 'task-composer' })\n const set = <K extends keyof TaskComposerValues>(key: K, value: TaskComposerValues[K]) =>\n setValues({ ...values, [key]: value })\n\n const workflow = workflows.find((w) => w.id === values.workflowId)\n // An unattended run has no one to scope files for, so scope fields are not asked.\n const fields = workflow?.inputs ?? []\n // The template needs files and the workspace has none: offer to add some instead of an unusable form.\n // A template with its own file pick shows an empty state with Add files in that field; one that only\n // takes a scope has nothing to show without files, so the whole form gives way to the offer.\n const noFiles = Boolean(\n workflow?.requiresFiles &&\n scopeSource &&\n scopeSource.totalCount === 0 &&\n addFilesAction &&\n !fields.some((f) => f.type === 'documents')\n )\n // A required file pick that is still empty says so in plain words.\n const missingDocument = Boolean(\n workflow &&\n fields.some((f) => {\n if (f.type !== 'documents' || !f.required) return false\n const v = values.inputs[f.name]\n const docs =\n v && typeof v === 'object' ? (v as { documents?: string[] }).documents : undefined\n return !docs?.length\n })\n )\n const whatMissing =\n !workflow ||\n Object.keys(validateInputs({ ...workflow, inputs: fields }, values.inputs)).length > 0\n\n // A start time already past is refused by the server; an unchanged one (editing a spent workflow) is not ours to block.\n const runAtPast =\n values.when === 'once' &&\n values.runAt !== '' &&\n values.runAt !== initialValues?.runAt &&\n new Date(values.runAt).getTime() <= Date.now()\n const whenMissing = missingWhen(values, runAtPast)\n // \"Run later\": the schedule, the agent and the access are asked. A saved workflow is always later.\n const scheduled = values.when !== 'now' && values.when !== 'manual'\n const agentMissing = scheduled && values.agentId === ''\n const canSubmit =\n !whatMissing && !noFiles && whenMissing === null && !agentMissing && !isPending && !planDrafting\n\n const derivedName = workflow ? deriveWorkflowName(workflow, values.inputs) : ''\n const pickWorkflow = (next: string) => {\n const def = workflows.find((w) => w.id === next)\n setValues({\n ...values,\n workflowId: next,\n inputs: def ? defaultInputs(def) : {},\n ...(def?.documentAction ? { access: 'standing' as const } : {}),\n })\n }\n\n const pickWhen = (next: TaskWhen) => {\n const goesScheduled = next !== 'now' && next !== 'manual'\n if (goesScheduled && values.agentId === '' && defaultAgentId) {\n setAgentAutoSet(true)\n setValues({ ...values, when: next, agentId: defaultAgentId })\n } else if (!goesScheduled && agentAutoSet) {\n setAgentAutoSet(false)\n setValues({ ...values, when: next, agentId: '' })\n } else {\n setValues({ ...values, when: next })\n }\n }\n // The assistants can arrive after \"Run later\" was picked: fill the default in then, not only on the pick.\n useEffect(() => {\n if (scheduled && values.agentId === '' && defaultAgentId) {\n setAgentAutoSet(true)\n setValues({ ...values, agentId: defaultAgentId })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [scheduled, defaultAgentId, values.agentId])\n const pickAgent = (agentId: string) => {\n setAgentAutoSet(false)\n set('agentId', agentId)\n }\n\n const submit = () => {\n const submitted: TaskComposerValues = {\n ...values,\n // A scope pick is bound to explicit file ids before anything is sent.\n inputs:\n workflow && !workflow.documentAction\n ? resolveScopeInputs(workflow, values.inputs, scopeSource)\n : values.inputs,\n assignee: 'agent',\n notifyOnComplete: true,\n name: values.name.trim(),\n }\n if (runOnce) onSubmit(submitted, { runOnce: true })\n else onSubmit(submitted)\n }\n\n const pillLabels = { search: l.search, empty: l.empty }\n const taskOptions: PillOption[] = tasks.map((t) => ({\n id: t.id,\n label: t.name,\n icon: <CornerDownRight className={GLYPH} aria-hidden />,\n }))\n // \"Run now\" is the footer's primary action, so the start list holds only the later starts.\n const whenOptions: PillOption[] = [\n { id: 'manual', label: 'Start now' },\n { id: 'schedule', label: 'Schedule' },\n { id: 'event', label: 'Notification' },\n ]\n const assistantOptions: PillOption[] = agents.map((a) => ({ id: a.id, label: a.label }))\n // Shared workflows may reference an agent outside the viewer's own agent list.\n if (values.agentId && !assistantOptions.some((a) => a.id === values.agentId)) {\n assistantOptions.push({ id: values.agentId, label: 'Assigned agent' })\n }\n const goalNode = typeof goal === 'function' ? goal(values) : goal\n // A template picked from the list names the dialog (\"Run Summarise\"); the own-instruction entry does not.\n const pickedTemplate = workflows.find((w) => w.id === values.workflowId && !w.generic)\n const hint = (key: 'needWhat' | 'needRunAt' | 'needRrule' | 'needEvent' | 'needAfterTask') =>\n l[key]\n\n return (\n <Dialog modal={false} open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"right\"\n hideCloseButton\n onInteractOutside={(event) => event.preventDefault()}\n className=\"flex flex-col gap-0 overflow-hidden p-0 shadow-lg\"\n data-testid={id}\n >\n <DialogTitle className=\"sr-only\">Automation settings</DialogTitle>\n <DialogDescription className=\"sr-only\">{l.descriptionWorkflow}</DialogDescription>\n <TabHeader\n tabs={[\n {\n id: 'automation-setup',\n label: isEdit\n ? l.titleEditWorkflow\n : pickedTemplate\n ? l.titleRunTemplate(pickedTemplate.title)\n : l.titleNewWorkflow,\n presentation: 'count',\n },\n ...((saveOnly || isEdit) && !workflow?.documentAction\n ? [{ id: 'start-task', label: 'Start task' }]\n : []),\n ]}\n activeTabId={runOnce ? 'start-task' : 'automation-setup'}\n onTabChange={(tab) => {\n if (tab === 'start-task' && !runOnce) {\n setAutomationWhen(values.when)\n set('when', 'now')\n setRunOnce(true)\n } else if (tab === 'automation-setup' && runOnce) {\n set('when', automationWhen)\n setRunOnce(false)\n }\n }}\n rightContent={\n <DialogClose asChild>\n <Button variant=\"ghost\" size=\"icon\" aria-label=\"Close\">\n <X className=\"size-4\" />\n </Button>\n </DialogClose>\n }\n />\n\n <form\n className=\"flex min-h-0 flex-1 flex-col\"\n onSubmit={(event) => {\n event.preventDefault()\n if (canSubmit) submit()\n }}\n >\n <div className=\"flex min-h-0 flex-1 flex-col gap-5 overflow-y-auto px-6 pb-4\">\n {/* What it does: the template and its form (all there is until Run later) */}\n <section className=\"flex flex-col gap-2\" data-testid={`${id}-what`}>\n <h3 className=\"text-sm font-medium\">{l.what}</h3>\n <PillSelect\n icon={<Bot className={GLYPH} aria-hidden />}\n prefix={l.template}\n value={values.workflowId}\n options={workflows.map((w) => ({ id: w.id, label: w.title }))}\n onChange={pickWorkflow}\n labels={pillLabels}\n testId={`${id}-workflow`}\n className=\"self-start\"\n />\n {noFiles && (\n <div\n onDragOver={(e) => e.preventDefault()}\n onDrop={(e) => {\n e.preventDefault()\n const files = Array.from(e.dataTransfer?.files ?? [])\n if (files.length) onDropFiles?.(files)\n }}\n data-testid={`${id}-dropzone`}\n >\n <AddFilesFirst\n reason={l.addFilesReason}\n action={addFilesAction}\n testId={`${id}-empty-state`}\n />\n </div>\n )}\n {!noFiles && workflow && fields.length > 0 && (\n <SchemaForm\n fields={fields}\n values={values.inputs}\n onChange={(name: string, value: WorkflowInputValue) =>\n set('inputs', { ...values.inputs, [name]: value })\n }\n renderScope={defaultScopeRenderer(scopeSource)}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n labels={formLabels}\n testIdPrefix={`${id}-field`}\n />\n )}\n {/* A template names its own required fields; only a free instruction needs a hint. */}\n {missingDocument && (\n <p className=\"text-xs text-muted-foreground\" data-testid={`${id}-document-hint`}>\n {l.needDocument}\n </p>\n )}\n {whatMissing && workflow?.inputs.some((i) => i.name === 'instruction') && (\n <p className=\"text-xs text-muted-foreground\" data-testid={`${id}-what-hint`}>\n {hint('needWhat')}\n </p>\n )}\n </section>\n\n {/* A plan rides with the run, now or saved with the workflow (it grades each scheduled run): a quiet,\n collapsed extra */}\n {goalNode != null && (\n <section className=\"flex flex-col gap-2\" data-testid={`${id}-assistant`}>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1 self-start px-2 pointer-coarse:h-11\"\n onClick={() => setPlanOpen((v) => !v)}\n aria-expanded={planOpen}\n data-testid={`${id}-plan-toggle`}\n >\n {planOpen ? l.hidePlan : hasPlan ? l.showPlan : l.addPlan}\n <ChevronDown\n className={cn('size-3.5 transition-transform', planOpen && 'rotate-180')}\n aria-hidden\n />\n </Button>\n {planOpen && (\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-plan`}>\n <p className=\"text-xs text-muted-foreground\">{l.planHint}</p>\n {goalNode}\n </div>\n )}\n </section>\n )}\n\n {!runOnce && (scheduled || isEdit) && (\n <>\n {/* When it runs */}\n <section className=\"flex flex-col gap-2\" data-testid={`${id}-when-section`}>\n <h3 className=\"text-sm font-medium\">{l.whenHeading}</h3>\n <PillSelect\n icon={<Play className={GLYPH} aria-hidden />}\n prefix={l.start}\n value={\n values.when === 'once' || values.when === 'repeat'\n ? 'schedule'\n : values.when === 'task'\n ? 'event'\n : values.when === 'now'\n ? 'manual'\n : values.when\n }\n options={whenOptions}\n onChange={(v) => pickWhen(v === 'schedule' ? 'once' : (v as TaskWhen))}\n labels={pillLabels}\n testId={`${id}-when`}\n className=\"self-start\"\n />\n {(values.when === 'once' || values.when === 'repeat') && (\n <PillSelect\n icon={<Play className={GLYPH} aria-hidden />}\n prefix=\"Schedule\"\n value={values.when}\n options={[\n { id: 'once', label: 'Once' },\n { id: 'repeat', label: 'Repeat' },\n ]}\n onChange={(value) => pickWhen(value as TaskWhen)}\n labels={pillLabels}\n testId={`${id}-schedule-mode`}\n className=\"self-start\"\n />\n )}\n {values.when === 'once' && (\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"task-composer-runat\" className=\"sr-only\">\n {l.runAt}\n </Label>\n <Input\n id=\"task-composer-runat\"\n type=\"datetime-local\"\n value={values.runAt}\n onChange={(e) => set('runAt', e.target.value)}\n className=\"max-w-xs\"\n aria-invalid={runAtPast || undefined}\n data-testid={`${id}-run-at`}\n />\n {runAtPast && (\n <p className=\"text-xs text-destructive\" data-testid={`${id}-run-at-past`}>\n {l.runAtPast}\n </p>\n )}\n </div>\n )}\n {values.when === 'repeat' && (\n <>\n <RecurrenceBuilder\n rrule={values.rrule}\n onChange={(r) => set('rrule', r)}\n {...recurrence}\n />\n {timezones.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <Label htmlFor=\"task-composer-timezone\" className=\"text-xs\">\n {l.timezone}\n </Label>\n <Input\n id=\"task-composer-timezone\"\n list=\"task-composer-timezones\"\n value={values.timezone}\n onChange={(e) => set('timezone', e.target.value)}\n className=\"max-w-xs\"\n data-testid={`${id}-timezone`}\n />\n <datalist id=\"task-composer-timezones\">\n {timezones.map((tz) => (\n <option key={tz} value={tz} />\n ))}\n </datalist>\n </div>\n )}\n </>\n )}\n {values.when === 'event' && (\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"task-composer-event\" className=\"sr-only\">\n {l.event}\n </Label>\n {eventOptions ? (\n <PillSelect\n icon={<Zap className={GLYPH} aria-hidden />}\n prefix={l.event}\n value={values.eventKind}\n options={\n eventOptions.some((option) => option.id === values.eventKind) ||\n !values.eventKind\n ? [...eventOptions]\n : [\n ...eventOptions,\n {\n id: values.eventKind,\n label: values.eventKind.replaceAll('_', ' '),\n },\n ]\n }\n onChange={(event) => set('eventKind', event)}\n labels={pillLabels}\n testId={`${id}-event`}\n className=\"self-start\"\n />\n ) : (\n <Input\n id=\"task-composer-event\"\n value={values.eventKind}\n placeholder={l.eventPlaceholder}\n onChange={(e) => set('eventKind', e.target.value)}\n className=\"max-w-xs\"\n data-testid={`${id}-event`}\n />\n )}\n <p className=\"text-xs text-muted-foreground\">{l.eventHint}</p>\n </div>\n )}\n {values.when === 'event' &&\n values.eventKind === 'workflow_completed' &&\n eventWorkflowOptions && (\n <PillSelect\n icon={<Zap className={GLYPH} aria-hidden />}\n prefix=\"Automation\"\n value={\n typeof values.eventFilter?.workflow_ext_id === 'string'\n ? values.eventFilter.workflow_ext_id\n : ''\n }\n options={[{ id: '', label: 'Any automation' }, ...eventWorkflowOptions]}\n onChange={(id) =>\n set(\n 'eventFilter',\n id ? { ...values.eventFilter, workflow_ext_id: id } : null\n )\n }\n labels={pillLabels}\n testId={`${id}-event-workflow`}\n className=\"self-start\"\n />\n )}\n {values.when === 'task' && (\n <PillSelect\n icon={<CornerDownRight className={GLYPH} aria-hidden />}\n prefix={l.afterTask}\n value={values.afterTaskId}\n options={taskOptions}\n onChange={(v) => set('afterTaskId', v)}\n searchable\n labels={pillLabels}\n testId={`${id}-after-task`}\n className=\"self-start\"\n />\n )}\n {whenMissing && !runAtPast && (\n <p className=\"text-xs text-muted-foreground\" data-testid={`${id}-when-hint`}>\n {hint(whenMissing)}\n </p>\n )}\n </section>\n\n {/* Who runs it, the access it gets, its name and owner: sensible defaults, so folded away. */}\n <section className=\"flex flex-col gap-3\" data-testid={`${id}-more`}>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-auto min-h-8 flex-col items-start gap-0.5 self-start px-2 py-1 text-left pointer-coarse:min-h-11\"\n onClick={() => setMoreOpen((v) => !v)}\n aria-expanded={moreOpen || agentMissing}\n data-testid={`${id}-more-toggle`}\n >\n <span className=\"flex items-center gap-1\">\n {l.runOptions}\n <ChevronDown\n className={cn(\n 'size-3.5 transition-transform',\n (moreOpen || agentMissing) && 'rotate-180'\n )}\n aria-hidden\n />\n </span>\n <span className=\"text-xs font-normal text-muted-foreground\">\n {l.runOptionsSummary(\n assistantOptions.find((a) => a.id === values.agentId)?.label ?? l.runAsMe,\n l.accessOptions[values.access].label\n )}\n </span>\n </Button>\n {(moreOpen || agentMissing) && (\n <div className=\"flex flex-col gap-5\" data-testid={`${id}-more-body`}>\n {/* Which agent runs it: nobody is present when it fires */}\n <section className=\"flex flex-col gap-2\" data-testid={`${id}-who`}>\n <h3 className=\"text-sm font-medium\">{l.whoHeading}</h3>\n <PillSelect\n icon={<Bot className={GLYPH} aria-hidden />}\n prefix={l.runAs}\n value={values.agentId}\n options={assistantOptions}\n onChange={pickAgent}\n searchable={assistantOptions.length > 6}\n labels={pillLabels}\n testId={`${id}-agent`}\n className=\"self-start\"\n />\n <p\n className=\"text-xs text-muted-foreground\"\n data-testid={`${id}-agent-note`}\n >\n {l.runAsAgentHint}\n </p>\n {agentMissing && (\n <p\n className=\"text-xs text-muted-foreground\"\n data-testid={`${id}-agent-hint`}\n >\n {l.needAgent}\n </p>\n )}\n </section>\n\n {/* The access it gets while nobody is there */}\n <section className=\"flex flex-col gap-2\" data-testid={`${id}-config`}>\n <PillSelect\n icon={<KeyRound className={GLYPH} aria-hidden />}\n prefix={l.permission}\n value={values.access}\n options={(Object.keys(l.accessOptions) as TaskAccessMode[]).map(\n (mode) => ({\n id: mode,\n label: l.accessOptions[mode].label,\n })\n )}\n onChange={(v) => set('access', v as TaskAccessMode)}\n labels={pillLabels}\n testId={`${id}-access`}\n className=\"self-start\"\n />\n <div\n className=\"flex flex-col gap-1 rounded-md bg-muted p-2\"\n data-testid={`${id}-access-block`}\n >\n <p className=\"text-xs text-muted-foreground\">\n {l.permissionHint} {l.accessOptions[values.access].hint}\n </p>\n {values.access === 'standing' &&\n (typeof standingAccess === 'function'\n ? standingAccess(values)\n : standingAccess)}\n </div>\n </section>\n\n {/* Optional extras */}\n <section className=\"flex flex-col gap-3\" data-testid={`${id}-extras`}>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"task-composer-title\" className=\"sr-only\">\n {l.titleLabel}\n </Label>\n <Input\n id=\"task-composer-title\"\n value={values.name}\n placeholder={derivedName || l.workflowNamePlaceholder}\n onChange={(e) => set('name', e.target.value)}\n className=\"h-10 text-base font-medium\"\n data-testid={`${id}-title`}\n />\n <p className=\"text-xs text-muted-foreground\">{l.nameHint}</p>\n <Label htmlFor=\"task-composer-description\" className=\"sr-only\">\n {l.descriptionLabel}\n </Label>\n <Textarea\n id=\"task-composer-description\"\n value={values.description}\n placeholder={l.descriptionPlaceholder}\n rows={2}\n onChange={(e) => set('description', e.target.value)}\n data-testid={`${id}-description`}\n />\n </div>\n <div\n className=\"flex flex-wrap items-center gap-2\"\n data-testid={`${id}-properties`}\n >\n <VisibilityToggle\n items={{ shared: values.shared }}\n onToggle={(share) => set('shared', share)}\n label={l.visibility}\n data-testid={`${id}-visibility`}\n />\n </div>\n </section>\n </div>\n )}\n </section>\n </>\n )}\n </div>\n\n <div className=\"flex flex-col-reverse gap-2 border-t border-border px-6 py-3 sm:flex-row sm:justify-end\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n data-testid={`${id}-cancel`}\n className=\"pointer-coarse:min-h-11\"\n >\n {l.cancel}\n </Button>\n {!isEdit && !saveOnly && !hideRunLater && (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => (scheduled ? pickWhen('now') : pickWhen('once'))}\n data-testid={scheduled ? `${id}-run-now-back` : `${id}-run-later`}\n className=\"pointer-coarse:min-h-11\"\n >\n {scheduled ? l.runNow : l.runLater}\n </Button>\n )}\n <Button\n type=\"submit\"\n disabled={!canSubmit}\n data-testid={`${id}-submit`}\n className=\"gap-1.5 pointer-coarse:min-h-11\"\n >\n {isPending && <Loader2 className=\"size-4 animate-spin\" />}\n {isPending\n ? l.saving\n : runOnce\n ? 'Start now'\n : isEdit\n ? l.save\n : saveOnly || scheduled\n ? l.saveWorkflow\n : l.runNow}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","import { DueDateMenu } from './DueDateMenu'\nimport { useEffect, useMemo, useState, type ReactNode } from 'react'\nimport {\n Bot,\n CalendarClock,\n ChevronDown,\n CornerDownRight,\n KeyRound,\n Loader2,\n Play,\n X,\n} from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n EntityPill,\n Input,\n Label,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Textarea,\n VisibilityToggle,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { ModalHeader } from '../../settings/ModalScaffold'\nimport { useControllableState } from '../../lib/useControllableState'\nimport type { AgentOption } from '../workflows/AgentSelect'\nimport { SchemaForm, type SchemaFormLabels } from '../workflows/SchemaForm'\nimport { defaultScopeRenderer, resolveScopeInputs } from '../workflows/scopeRender'\nimport type { WorkflowDefinition, WorkflowInputs, WorkflowInputValue } from '../workflows/types'\nimport { defaultInputs, validateInputs } from '../workflows/workflow'\nimport { PillSelect, type PillOption } from './PillSelect'\nimport { WorkflowComposer } from './WorkflowComposer'\nimport { RecurrenceBuilder } from './RecurrenceBuilder'\nimport {\n DEFAULT_TASK_COMPOSER_LABELS,\n defaultTaskComposerValues,\n type TaskAccessMode,\n type TaskComposerLabels,\n type TaskComposerProps,\n type TaskComposerValues,\n type TaskWhen,\n} from './taskComposerTypes'\n\nexport * from './taskComposerTypes'\n\n// The assistant starts now or on a trigger; `manual` is the standby state.\nconst WHEN_ORDER: TaskWhen[] = ['now', 'once', 'repeat', 'event', 'task']\n\n/** A datetime-local value as \"Fri 14 Oct, 09:00\" (the pill's label); the raw value if it is not a date. */\nfunction formatDue(local: string): string {\n const d = new Date(local)\n if (Number.isNaN(d.getTime())) return local\n return d.toLocaleString(undefined, {\n weekday: 'short',\n day: 'numeric',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n })\n}\n\nconst GLYPH = 'size-3.5 shrink-0'\n\n/**\n * One dialog to add a task, built from the app's own pills and lists. The task comes first, like a list\n * item: a title and details, then its properties as pills (due date, what it is part of, who can see it).\n * Every task has a Task Assistant; configuring it is optional. Left alone it is on standby and replies when\n * @mentioned. Give it work and it gets on with it; a person marks the task done. A person starting it\n * now is never asked about access; only an assistant that starts unattended needs permission up front.\n */\nfunction WorkTaskComposer({\n open,\n onOpenChange,\n isEdit = false,\n workflows,\n agents,\n tasks = [],\n values: valuesProp,\n initialValues,\n onValuesChange,\n timezones = [],\n goal,\n standingAccess,\n scopeSource,\n renderDocuments,\n isPending,\n planDrafting = false,\n onSubmit,\n renderIcon,\n labels,\n formLabels,\n recurrence,\n testId,\n}: TaskComposerProps) {\n const l: TaskComposerLabels = {\n ...DEFAULT_TASK_COMPOSER_LABELS,\n ...labels,\n whenOptions: { ...DEFAULT_TASK_COMPOSER_LABELS.whenOptions, ...labels?.whenOptions },\n accessOptions: { ...DEFAULT_TASK_COMPOSER_LABELS.accessOptions, ...labels?.accessOptions },\n }\n const seed = useMemo(\n () => defaultTaskComposerValues(workflows, initialValues),\n // Seeded once per open; the host re-keys the composer for a different task.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [workflows, open]\n )\n const [values, setValues] = useControllableState<TaskComposerValues>(\n valuesProp,\n seed,\n onValuesChange\n )\n const [configOpen, setConfigOpen] = useState(seed.assignee === 'agent')\n // Each open starts from the seed again (uncontrolled only).\n useEffect(() => {\n if (open) {\n if (valuesProp === undefined) setValues(seed)\n setConfigOpen(seed.assignee === 'agent')\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const workflow = workflows.find((w) => w.id === values.workflowId)\n // The assistant runs unattended: file scoping is a chat-launch concern, so scope fields are not asked.\n const fields = workflow?.inputs ?? []\n const errors = workflow ? validateInputs({ ...workflow, inputs: fields }, values.inputs) : {}\n // Opening Configure only shows the options. The assistant is given work once its instruction is filled in.\n const hasWork = configOpen && Boolean(workflow) && Object.keys(errors).length === 0\n const unattended = hasWork && values.when !== 'now' && values.when !== 'manual'\n // The original task's kind cannot change after it exists.\n const canConfigure = !isEdit || seed.assignee === 'agent'\n // A task's start and assistant are fixed once it exists.\n const lockedStart = isEdit\n\n const set = <K extends keyof TaskComposerValues>(key: K, value: TaskComposerValues[K]) =>\n setValues({ ...values, [key]: value })\n\n const pickWorkflow = (id: string) => {\n const next = workflows.find((w) => w.id === id)\n setValues({ ...values, workflowId: id, inputs: next ? defaultInputs(next) : {} })\n }\n\n const openConfigure = () => {\n setConfigOpen(true)\n if (values.when === 'manual') setValues({ ...values, when: 'now' })\n }\n\n // A start time already past is refused by the server; an unchanged one (editing a spent workflow) is not ours to block.\n const runAtPast =\n values.when === 'once' &&\n values.runAt !== '' &&\n values.runAt !== initialValues?.runAt &&\n new Date(values.runAt).getTime() <= Date.now()\n const whenError =\n (values.when === 'once' && !values.runAt) ||\n runAtPast ||\n (values.when === 'repeat' && !values.rrule.trim()) ||\n (values.when === 'event' && !values.eventKind.trim()) ||\n (values.when === 'task' && !values.afterTaskId)\n const canSubmit =\n values.name.trim() !== '' && !(hasWork && whenError) && !isPending && !planDrafting\n const goalNode = typeof goal === 'function' ? goal(values) : goal\n\n // What the host receives: the assistant is only \"given work\" when it was configured with an instruction.\n const submit = () =>\n onSubmit({\n ...values,\n inputs: workflow ? resolveScopeInputs(workflow, values.inputs, scopeSource) : values.inputs,\n assignee: hasWork ? 'agent' : 'me',\n when: hasWork ? values.when : 'manual',\n notifyOnComplete: true,\n })\n\n const id = testIdOr(testId, { testId: 'task-composer' })\n const submitText = isPending\n ? l.saving\n : isEdit\n ? l.save\n : !hasWork\n ? l.addTask\n : values.when === 'now'\n ? l.addAndStart\n : l.addAndSchedule\n\n const taskOptions: PillOption[] = tasks.map((t) => ({\n id: t.id,\n label: t.name,\n icon: <CornerDownRight className={GLYPH} aria-hidden />,\n }))\n const whenOptions: PillOption[] = WHEN_ORDER.map((mode) => ({\n id: mode,\n label: l.whenOptions[mode],\n }))\n const assistantOptions: PillOption[] = agents.map((a) => ({ id: a.id, label: a.label }))\n const pillLabels = { search: l.search, empty: l.empty }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"right\"\n className=\"flex flex-col overflow-hidden p-0\"\n data-testid={id}\n >\n <ModalHeader>\n <DialogTitle>{isEdit ? l.titleEdit : l.titleNew}</DialogTitle>\n <DialogDescription className=\"sr-only\">{l.description}</DialogDescription>\n </ModalHeader>\n\n <form\n className=\"flex min-h-0 flex-1 flex-col\"\n onSubmit={(event) => {\n event.preventDefault()\n if (canSubmit) submit()\n }}\n >\n <div className=\"flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto px-6 pb-4\">\n {/* The task, like a task-list item */}\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"task-composer-title\" className=\"sr-only\">\n {l.titleLabel}\n </Label>\n <Input\n id=\"task-composer-title\"\n value={values.name}\n placeholder={l.titlePlaceholder}\n onChange={(e) => set('name', e.target.value)}\n autoFocus\n className=\"h-10 text-base font-medium\"\n data-testid={`${id}-title`}\n />\n <Label htmlFor=\"task-composer-description\" className=\"sr-only\">\n {l.descriptionLabel}\n </Label>\n <Textarea\n id=\"task-composer-description\"\n value={values.description}\n placeholder={l.descriptionPlaceholder}\n rows={2}\n onChange={(e) => set('description', e.target.value)}\n data-testid={`${id}-description`}\n />\n </div>\n\n {/* Its properties, as pills */}\n <div className=\"flex flex-wrap items-center gap-2\" data-testid={`${id}-properties`}>\n <Popover>\n <PopoverTrigger asChild>\n <EntityPill\n icon={<CalendarClock className={GLYPH} aria-hidden />}\n label={`${l.due}: ${values.dueAt ? formatDue(values.dueAt) : l.dueNone}`}\n secondaryText={<ChevronDown className=\"size-3\" aria-hidden />}\n size=\"sm\"\n className=\"h-7 pointer-coarse:min-h-11\"\n data-testid={`${id}-due-pill`}\n />\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-auto p-2\">\n <DueDateMenu\n id={`${id}-due`}\n label={l.due}\n value={values.dueAt}\n onChange={(v) => set('dueAt', v)}\n labels={{ clear: l.dueClear }}\n />\n </PopoverContent>\n </Popover>\n\n {tasks.length > 0 && (\n <PillSelect\n icon={<CornerDownRight className={GLYPH} aria-hidden />}\n prefix={l.parentTask}\n value={values.parentTaskId}\n options={taskOptions}\n noneOption={{ id: '', label: l.parentTaskNone }}\n onChange={(v) => set('parentTaskId', v)}\n searchable\n labels={pillLabels}\n testId={`${id}-parent`}\n />\n )}\n\n {/* The same shared/private control every shareable thing in the app uses */}\n <VisibilityToggle\n items={{ shared: values.shared }}\n onToggle={(share) => set('shared', share)}\n label={l.visibility}\n presentation=\"select\"\n data-testid={`${id}-visibility`}\n />\n </div>\n\n {/* The Task Assistant, for a task being created or one that was given work. Editing a plain\n to-do has nothing to say about it. */}\n {canConfigure && (\n <section\n className=\"flex flex-col gap-3 rounded-lg border border-border bg-muted/30 p-3\"\n data-testid={`${id}-assistant`}\n data-state={hasWork ? 'working' : 'standby'}\n >\n <div className=\"flex items-center gap-2\">\n <EntityPill\n icon={<Bot className=\"size-3.5 shrink-0 text-ai-ink\" aria-hidden />}\n label={l.assistant}\n size=\"sm\"\n className=\"h-7 shrink-0 bg-ai-soft\"\n />\n <p className=\"min-w-0 flex-1 text-xs text-muted-foreground\">\n {hasWork\n ? l.assistantPreparing(l.whenOptions[values.when].toLowerCase())\n : l.assistantStandby}\n </p>\n {canConfigure && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 shrink-0 gap-1 px-2 pointer-coarse:h-11\"\n onClick={() => (configOpen ? setConfigOpen(false) : openConfigure())}\n aria-expanded={configOpen}\n data-testid={`${id}-configure`}\n >\n {configOpen ? l.configureClose : l.configure}\n <ChevronDown\n className={cn('size-3.5 transition-transform', configOpen && 'rotate-180')}\n aria-hidden\n />\n </Button>\n )}\n </div>\n\n {configOpen && (\n <div className=\"flex flex-col gap-3\" data-testid={`${id}-config`}>\n <div className=\"flex flex-col gap-1.5\">\n <Label className=\"text-xs text-muted-foreground\">{l.what}</Label>\n <PillSelect\n icon={<Bot className={GLYPH} aria-hidden />}\n prefix={l.template}\n value={values.workflowId}\n options={workflows.map((w) => ({ id: w.id, label: w.title }))}\n onChange={pickWorkflow}\n labels={pillLabels}\n testId={`${id}-workflow`}\n className=\"self-start\"\n />\n </div>\n {workflow && fields.length > 0 && (\n <SchemaForm\n fields={fields}\n values={values.inputs}\n onChange={(name: string, value: WorkflowInputValue) =>\n set('inputs', { ...values.inputs, [name]: value })\n }\n renderScope={defaultScopeRenderer(scopeSource)}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n labels={formLabels}\n testIdPrefix={`${id}-field`}\n />\n )}\n\n {goalNode != null && (\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-plan`}>\n <div>\n <p className=\"text-sm font-medium\">{l.plan}</p>\n <p className=\"text-xs text-muted-foreground\">{l.planHint}</p>\n </div>\n {goalNode}\n </div>\n )}\n\n <div className=\"flex flex-wrap items-center gap-2\">\n <PillSelect\n icon={<Play className={GLYPH} aria-hidden />}\n prefix={l.start}\n value={values.when === 'manual' ? 'now' : values.when}\n options={whenOptions}\n onChange={(v) => set('when', v as TaskWhen)}\n disabled={lockedStart}\n labels={pillLabels}\n testId={`${id}-when`}\n />\n {agents.length > 1 && (\n <PillSelect\n icon={<Bot className={GLYPH} aria-hidden />}\n prefix={l.which}\n value={values.agentId}\n options={assistantOptions}\n noneOption={{ id: '', label: l.myAssistant }}\n onChange={(v) => set('agentId', v)}\n disabled={lockedStart}\n searchable={assistantOptions.length > 6}\n labels={pillLabels}\n testId={`${id}-agent`}\n />\n )}\n {unattended && (\n <PillSelect\n icon={<KeyRound className={GLYPH} aria-hidden />}\n prefix={l.permission}\n value={values.access}\n options={(Object.keys(l.accessOptions) as TaskAccessMode[]).map(\n (mode) => ({\n id: mode,\n label: l.accessOptions[mode].label,\n })\n )}\n onChange={(v) => set('access', v as TaskAccessMode)}\n labels={pillLabels}\n testId={`${id}-access`}\n />\n )}\n </div>\n\n {values.when === 'once' && (\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"task-composer-runat\" className=\"sr-only\">\n {l.runAt}\n </Label>\n <Input\n id=\"task-composer-runat\"\n type=\"datetime-local\"\n value={values.runAt}\n onChange={(e) => set('runAt', e.target.value)}\n className=\"max-w-xs\"\n aria-invalid={runAtPast || undefined}\n data-testid={`${id}-run-at`}\n />\n {runAtPast && (\n <p className=\"text-xs text-destructive\" data-testid={`${id}-run-at-past`}>\n {l.runAtPast}\n </p>\n )}\n </div>\n )}\n {values.when === 'repeat' && (\n <RecurrenceBuilder\n rrule={values.rrule}\n onChange={(r) => set('rrule', r)}\n {...recurrence}\n />\n )}\n {values.when === 'event' && (\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"task-composer-event\" className=\"sr-only\">\n {l.event}\n </Label>\n <Input\n id=\"task-composer-event\"\n value={values.eventKind}\n placeholder={l.eventPlaceholder}\n onChange={(e) => set('eventKind', e.target.value)}\n className=\"max-w-xs\"\n data-testid={`${id}-event`}\n />\n <p className=\"text-xs text-muted-foreground\">{l.eventHint}</p>\n </div>\n )}\n {values.when === 'task' && (\n <PillSelect\n icon={<CornerDownRight className={GLYPH} aria-hidden />}\n prefix={l.afterTask}\n value={values.afterTaskId}\n options={taskOptions}\n onChange={(v) => set('afterTaskId', v)}\n searchable\n labels={pillLabels}\n testId={`${id}-after-task`}\n className=\"self-start\"\n />\n )}\n {unattended && (\n <div\n className=\"flex flex-col gap-1 rounded-md bg-muted p-2\"\n data-testid={`${id}-access-block`}\n >\n <p className=\"text-xs text-muted-foreground\">\n {l.permissionHint} {l.accessOptions[values.access].hint}\n </p>\n {values.access === 'standing' &&\n (typeof standingAccess === 'function'\n ? standingAccess(values)\n : standingAccess)}\n </div>\n )}\n {values.when === 'repeat' && timezones.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <Label htmlFor=\"task-composer-timezone\" className=\"text-xs\">\n {l.timezone}\n </Label>\n <Input\n id=\"task-composer-timezone\"\n list=\"task-composer-timezones\"\n value={values.timezone}\n onChange={(e) => set('timezone', e.target.value)}\n className=\"max-w-xs\"\n data-testid={`${id}-timezone`}\n />\n <datalist id=\"task-composer-timezones\">\n {timezones.map((tz) => (\n <option key={tz} value={tz} />\n ))}\n </datalist>\n </div>\n )}\n </div>\n )}\n </section>\n )}\n </div>\n\n <div className=\"flex flex-col-reverse gap-2 border-t border-border px-6 py-3 sm:flex-row sm:justify-end\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n data-testid={`${id}-cancel`}\n className=\"pointer-coarse:min-h-11\"\n >\n {l.cancel}\n </Button>\n <Button\n type=\"submit\"\n disabled={!canSubmit}\n data-testid={`${id}-submit`}\n className=\"gap-1.5 pointer-coarse:min-h-11\"\n >\n {isPending && <Loader2 className=\"size-4 animate-spin\" />}\n {submitText}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n\n/**\n * The dialog behind \"New task\" (a title, with the assistant optional) and, with `kind=\"workflow\"`, the\n * workflow dialog (see {@link WorkflowComposer}: what, when and who up front, the rest under More\n * options).\n */\nexport function TaskComposer(props: TaskComposerProps) {\n return props.kind === 'workflow' ? (\n <WorkflowComposer {...props} />\n ) : (\n <WorkTaskComposer {...props} />\n )\n}\n","import { useAssistantCopy } from '@arbidocs/react/shell'\nimport { ARBI_MARK_SRC, UserEntity } from '@arbidocs/react/ui'\n\nexport interface TurnSpeakerProfile {\n external_id: string\n given_name: string\n family_name?: string | null\n picture?: string | null\n parent_ext_id?: string | null\n}\n\n/** A last-turn speaker, using only metadata returned with the conversation list. */\nexport function ConversationTurnSpeaker({\n role,\n actor,\n currentUserId,\n colorClass,\n platformName: platformNameProp,\n platformLogoSrc = ARBI_MARK_SRC,\n variant = 'pill',\n}: {\n role?: string | null\n actor?: TurnSpeakerProfile | null\n currentUserId?: string\n colorClass?: string\n platformName?: string\n platformLogoSrc?: string\n /** `icon`: the face alone (its name on hover), for a narrow column. */\n variant?: 'icon' | 'pill'\n}) {\n // The assistant's turns under the host's name for it (\"ARBI\" by default).\n const assistantName = useAssistantCopy().name\n const platformName = platformNameProp ?? assistantName\n if (!role) return <span className=\"text-muted-foreground\">—</span>\n if (role === 'assistant' && !actor)\n return (\n <UserEntity\n size=\"sm\"\n variant={variant}\n interactive={false}\n picture={platformLogoSrc}\n avatarImageClassName=\"object-contain p-0.5\"\n initials={platformName.charAt(0)}\n displayName={platformName}\n />\n )\n if (!actor) return <span className=\"text-muted-foreground\">Unknown participant</span>\n const isMe = actor.external_id === currentUserId\n const displayName = isMe ? 'You' : [actor.given_name, actor.family_name].filter(Boolean).join(' ')\n return (\n <UserEntity\n size=\"sm\"\n variant={variant}\n interactive={false}\n isMe={isMe}\n isAgent={actor.external_id.startsWith('agt-')}\n displayName={displayName}\n initials={`${actor.given_name.charAt(0)}${actor.family_name?.charAt(0) ?? ''}`.toUpperCase()}\n picture={actor.picture}\n colorClass={colorClass}\n />\n )\n}\n","/** The slice of a task the empty state reads (the list rows and the full record both fit). */\ninterface Task {\n title?: string | null\n description?: string | null\n status?: string | null\n}\n\n/**\n * What an open task shows before anything has been asked in it (a to-do, or a task not yet run): the task\n * itself, not the generic \"ask about your documents\" page. Its status, owner and due date are in the bar above.\n */\nexport function TaskEmptyState({ task }: { task: Task }) {\n const title = task.title?.trim() || 'Untitled task'\n const description = task.description?.trim()\n return (\n <div\n className=\"mx-auto flex max-w-xl flex-col items-center gap-2 px-6 py-20 text-center\"\n data-testid=\"task-empty-state\"\n >\n <h2 className=\"text-lg font-semibold text-foreground\" data-testid=\"task-empty-title\">\n {title}\n </h2>\n {description && (\n <p\n className=\"whitespace-pre-wrap text-sm text-foreground\"\n data-testid=\"task-empty-description\"\n >\n {description}\n </p>\n )}\n <p className=\"text-sm text-muted-foreground\">\n {task.status === 'done'\n ? 'This task is done. Nothing was asked in it.'\n : 'Nothing has been asked here yet. Ask the assistant for help with this below, or mark it done when you are finished.'}\n </p>\n </div>\n )\n}\n","/**\n * TupleArrayField Component\n *\n * Specialized component for handling arrays of tuples, particularly for\n * few-shot examples where each tuple contains multiple string elements.\n * Displays in a clean table format for better organization.\n */\n\nimport { Plus, Trash2 } from 'lucide-react'\nimport { Button, Label, Textarea } from '@arbidocs/react/ui'\n\nexport interface TupleArrayFieldLabels {\n addRow: string\n empty: string\n jsonArrayPlaceholder: string\n /** Placeholder of one cell; receives the lower-cased column label. */\n cellPlaceholder: (column: string) => string\n /** aria-label of the remove button; receives the 1-based row number. */\n removeRow: (row: number) => string\n /** Column labels of 2-tuple few-shot examples. */\n pairColumns: string[]\n /** Column labels of 3-tuple few-shot examples. */\n tripleColumns: string[]\n /** Generic column label; receives the 1-based column number. */\n column: (n: number) => string\n}\n\nexport const DEFAULT_TUPLE_ARRAY_FIELD_LABELS: TupleArrayFieldLabels = {\n addRow: 'Add Row',\n empty: 'No examples added yet. Click \"Add Row\" to start.',\n jsonArrayPlaceholder: 'Enter JSON array...',\n cellPlaceholder: (column) => `Enter ${column}...`,\n removeRow: (row) => `Remove row ${row}`,\n pairColumns: ['Query with Context', 'Reformulated Query'],\n tripleColumns: ['Input', 'Expected Output', 'Explanation'],\n column: (n) => `Field ${n}`,\n}\n\nexport interface TupleArrayFieldProps {\n fieldId: string\n label: string\n description?: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChange: (value: any) => void\n labels?: Partial<TupleArrayFieldLabels>\n}\n\nexport function TupleArrayField({\n fieldId,\n label,\n description,\n value,\n onChange,\n labels,\n}: TupleArrayFieldProps) {\n const l = { ...DEFAULT_TUPLE_ARRAY_FIELD_LABELS, ...labels }\n // Ensure value is an array\n const examples = Array.isArray(value) ? value : []\n\n // Determine if this looks like a tuple array (array of arrays)\n const isTupleArray = examples.length === 0 || (examples.length > 0 && Array.isArray(examples[0]))\n\n // If not a tuple array, fall back to regular JSON editing\n if (!isTupleArray) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n <Textarea\n id={fieldId}\n value={JSON.stringify(value, null, 2)}\n onChange={(e) => {\n try {\n const parsed = JSON.parse(e.target.value)\n onChange(parsed)\n } catch {\n // Keep the string value if JSON parsing fails\n }\n }}\n placeholder={l.jsonArrayPlaceholder}\n rows={6}\n className=\"font-mono text-sm bg-background\"\n />\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n </div>\n )\n }\n\n // Determine the tuple structure (number of elements per tuple)\n const tupleLength = examples.length > 0 && Array.isArray(examples[0]) ? examples[0].length : 2 // Default to pairs if empty\n\n const handleAddExample = () => {\n const newExample = Array(tupleLength).fill('')\n onChange([...examples, newExample])\n }\n\n const handleRemoveExample = (index: number) => {\n const newExamples = examples.filter((_, i) => i !== index)\n onChange(newExamples)\n }\n\n const handleUpdateExample = (exampleIndex: number, elementIndex: number, newValue: string) => {\n const newExamples = [...examples]\n if (!Array.isArray(newExamples[exampleIndex])) {\n newExamples[exampleIndex] = Array(tupleLength).fill('')\n }\n newExamples[exampleIndex][elementIndex] = newValue\n onChange(newExamples)\n }\n\n // Determine field labels based on common patterns\n const getFieldLabels = () => {\n // Check if this looks like few-shot examples\n if (\n label.toLowerCase().includes('example') ||\n label.toLowerCase().includes('few_shot') ||\n fieldId.toLowerCase().includes('example')\n ) {\n if (tupleLength === 2) {\n return l.pairColumns\n }\n if (tupleLength === 3) {\n return l.tripleColumns\n }\n }\n // Default labels\n return Array.from({ length: tupleLength }, (_, i) => l.column(i + 1))\n }\n\n const fieldLabels = getFieldLabels()\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label>{label}</Label>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={handleAddExample}\n className=\"h-7 text-sm\"\n >\n <Plus className=\"size-3 mr-1\" />\n {l.addRow}\n </Button>\n </div>\n\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n\n {examples.length === 0 ? (\n <div className=\"text-center py-8 text-sm text-muted-foreground rounded-md bg-muted\">\n {l.empty}\n </div>\n ) : (\n <div className=\"overflow-hidden rounded-md border border-border\">\n <table className=\"w-full\">\n <thead className=\"bg-muted border-b border-border\">\n <tr>\n <th className=\"px-3 py-2 text-left text-sm font-medium text-muted-foreground w-12\">\n #\n </th>\n {fieldLabels.map((fieldLabel, index) => (\n <th\n key={index}\n className=\"px-3 py-2 text-left text-sm font-medium text-muted-foreground\"\n >\n {fieldLabel}\n </th>\n ))}\n <th className=\"px-3 py-2 w-10\"></th>\n </tr>\n </thead>\n <tbody>\n {examples.map((example, exampleIndex) => {\n const tupleElements = Array.isArray(example) ? example : [example]\n\n return (\n <tr\n key={exampleIndex}\n className=\"border-b border-border last:border-b-0 hover:bg-muted/50 transition-colors\"\n >\n <td className=\"px-3 py-2 text-sm text-muted-foreground font-medium\">\n {exampleIndex + 1}\n </td>\n {fieldLabels.map((_, elementIndex) => {\n const value = tupleElements[elementIndex] || ''\n const isLongText = value.includes('\\n')\n\n return (\n <td key={elementIndex} className=\"px-3 py-2\">\n <Textarea\n value={value}\n onChange={(e) =>\n handleUpdateExample(exampleIndex, elementIndex, e.target.value)\n }\n placeholder={l.cellPlaceholder(\n (\n fieldLabels[elementIndex] ?? l.column(elementIndex + 1)\n ).toLowerCase()\n )}\n rows={isLongText ? 3 : 1}\n className=\"text-sm bg-background resize-none min-h-[32px] w-full\"\n />\n </td>\n )\n })}\n <td className=\"px-3 py-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => handleRemoveExample(exampleIndex)}\n aria-label={l.removeRow(exampleIndex + 1)}\n className=\"size-8 p-0 text-destructive hover:bg-destructive/10 pointer-coarse:size-11\"\n >\n <Trash2 className=\"size-4\" />\n </Button>\n </td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n )}\n </div>\n )\n}\n","/** Minimal JSON-schema property shape used by the config form. */\nexport interface SchemaProperty {\n type?: string\n title?: string\n description?: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: any\n minimum?: number\n maximum?: number\n enum?: string[]\n format?: string\n properties?: Record<string, SchemaProperty>\n}\n\n/**\n * Humanize a PascalCase / acronym section key into a normal-case title:\n * \"QueryLLM\" -> \"Query LLM\", \"DocTagLLM\" -> \"Doc Tag LLM\", \"Agents\" -> \"Agents\".\n */\nexport function humanizeSection(name: string): string {\n return name\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n .replace(/_/g, ' ')\n .trim()\n}\n\n/** A readable label from an UPPER_SNAKE / snake_case key: SAVE_SOURCES -> \"Save sources\". */\nexport function prettifyKey(key: string): string {\n const spaced = key.replace(/_/g, ' ').trim().toLowerCase()\n return spaced.charAt(0).toUpperCase() + spaced.slice(1)\n}\n\n/** True for a non-null, non-array object, i.e. something we can render as fields. */\nexport function isPlainObject(val: unknown): val is Record<string, unknown> {\n return typeof val === 'object' && val !== null && !Array.isArray(val)\n}\n\n/**\n * Best-effort JSON-schema `type` inferred from a raw value, so a nested config object the schema\n * did not declare sub-properties for still renders as structured fields instead of raw JSON.\n */\nexport function inferType(val: unknown): SchemaProperty['type'] {\n if (typeof val === 'boolean') return 'boolean'\n if (typeof val === 'number') return 'number'\n if (Array.isArray(val)) return 'array'\n if (isPlainObject(val)) return 'object'\n return 'string'\n}\n\n/** True when `value` is a number and lies outside [minimum, maximum]. */\nexport function isOutOfBounds(value: unknown, minimum?: number, maximum?: number): boolean {\n if (typeof value !== 'number' || Number.isNaN(value)) return false\n if (minimum !== undefined && value < minimum) return true\n if (maximum !== undefined && value > maximum) return true\n return false\n}\n","/** One config field, rendered from its schema type. Memoized independently. */\n\nimport { memo, useState, type ReactNode } from 'react'\nimport {\n Button,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Switch,\n Textarea,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport {\n DEFAULT_TUPLE_ARRAY_FIELD_LABELS,\n TupleArrayField,\n type TupleArrayFieldLabels,\n} from './TupleArrayField'\nimport {\n inferType,\n isOutOfBounds,\n isPlainObject,\n prettifyKey,\n type SchemaProperty,\n} from './schema-utils'\n\nexport interface ConfigFieldLabels extends TupleArrayFieldLabels {\n editAsFields: string\n editAsJson: string\n jsonPlaceholder: string\n /** Select placeholder; receives the lower-cased field label. */\n selectPlaceholder: (label: string) => string\n /** Text input placeholder; receives the lower-cased field label. */\n enterPlaceholder: (label: string) => string\n /** Out-of-range hint; receives the range text (`1–5`, `≥ 1`, `≤ 5`). */\n allowedRange: (range: string) => string\n /** Out-of-range notification; `range` may be empty. */\n outOfRange: (label: string, range: string, value: unknown) => string\n}\n\nexport const DEFAULT_CONFIG_FIELD_LABELS: ConfigFieldLabels = {\n ...DEFAULT_TUPLE_ARRAY_FIELD_LABELS,\n editAsFields: 'Edit as fields',\n editAsJson: 'Edit as JSON',\n jsonPlaceholder: 'Enter JSON...',\n selectPlaceholder: (label) => `Select ${label}...`,\n enterPlaceholder: (label) => `Enter ${label}...`,\n allowedRange: (range) => `Allowed range: ${range}`,\n outOfRange: (label, range, value) =>\n `${label} must be ${range || 'within the allowed range'} (got ${String(value)}).`,\n}\n\nexport interface ConfigFieldTestIds {\n /** Test id of a boolean/number control; default `config-field-{section}-{field with dots as dashes}`. */\n field: (section: string, fieldName: string) => string\n /** Test id of the object \"Edit as JSON\" toggle; default `config-json-toggle-{fieldId}`. */\n jsonToggle: (fieldId: string) => string\n}\n\nexport interface ConfigFieldSlots {\n /** Custom control for the QueryLLM MODEL_NAME field (the app supplies its model picker). */\n renderModelSelect?: (props: { value: string; onChange: (value: string) => void }) => ReactNode\n}\n\nexport interface ConfigFieldProps extends ConfigFieldSlots {\n section: string\n fieldName: string\n fieldSchema: SchemaProperty\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChange: (section: string, field: string, value: any) => void\n labels?: Partial<ConfigFieldLabels>\n testIds?: Partial<ConfigFieldTestIds>\n}\n\nfunction ConfigFieldComponent({\n section,\n fieldName,\n fieldSchema,\n value,\n onChange,\n renderModelSelect,\n labels,\n testIds,\n}: ConfigFieldProps) {\n const l = { ...DEFAULT_CONFIG_FIELD_LABELS, ...labels }\n const fieldTestId = testIdOr(testIds?.field?.(section, fieldName), {\n testId: `config-field-${section}-${fieldName.replace(/\\./g, '-')}`,\n })\n const { notify } = useBlocksEnvironment()\n const fieldId = `${section}-${fieldName}`\n // Prefer a schema-provided title; else humanize the leaf key (SAVE_SOURCES →\n // \"Save sources\") rather than showing the raw UPPER_SNAKE name.\n const label = fieldSchema.title || prettifyKey(fieldName.split('.').pop() ?? fieldName)\n const description = fieldSchema.description || ''\n // Object fields render as structured sub-fields by default; this is the\n // power-user escape hatch to edit the raw JSON. `jsonDraft` buffers in-progress\n // (possibly invalid) edits so a half-typed object doesn't corrupt the value.\n const [rawJson, setRawJson] = useState(false)\n const [jsonDraft, setJsonDraft] = useState<string | null>(null)\n // SmartSearch and Retriever (with agent / smart_search profiles) sections\n // contain long prompts and verbose descriptions — give their text boxes\n // more vertical room so the content isn't clipped.\n const isLargePromptSection =\n section === 'SmartSearch' ||\n section === 'Retriever' ||\n section === 'SmartRetriever' ||\n section === 'AgentRetriever'\n const longTextRows = isLargePromptSection ? 12 : 4\n\n // Special handling for MODEL_NAME field - use ModelSelector for QueryLLM section\n if (fieldName === 'MODEL_NAME' && section === 'QueryLLM' && renderModelSelect) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n {renderModelSelect({\n value: value || '',\n onChange: (val) => onChange(section, fieldName, val),\n })}\n </div>\n )\n }\n\n // JSON-textarea fallback, shared by complex types and the `object`\n // case when it has no declared sub-properties. Extracted so the\n // `object` case can return it explicitly rather than falling through\n // to `default` (which `noFallthroughCasesInSwitch` rejects).\n const renderJsonFallback = () => (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n <Textarea\n id={fieldId}\n value={typeof value === 'object' ? JSON.stringify(value, null, 2) : value || ''}\n onChange={(e) => {\n try {\n const parsed = JSON.parse(e.target.value)\n onChange(section, fieldName, parsed)\n } catch {\n onChange(section, fieldName, e.target.value)\n }\n }}\n placeholder={l.jsonPlaceholder}\n rows={longTextRows}\n className=\"font-mono text-sm bg-background resize-y\"\n />\n </div>\n )\n\n // A nested object rendered as a GROUP of structured sub-fields (switches,\n // inputs, …) inferred from its values — instead of one raw JSON blob. Each\n // key recurses through this same component, so booleans become switches,\n // numbers become number inputs, nested objects nest again, etc. An\n // \"Edit as JSON\" toggle keeps the raw view one click away.\n const renderObjectEditor = () => {\n const entries = Object.entries(value as Record<string, unknown>)\n return (\n <div className=\"space-y-3 rounded-lg bg-muted p-4\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label className=\"text-sm font-semibold\">{label}</Label>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 shrink-0 px-2 text-xs text-muted-foreground pointer-coarse:h-11\"\n onClick={() => {\n setJsonDraft(null)\n setRawJson((v) => !v)\n }}\n data-testid={testIdOr(testIds?.jsonToggle?.(fieldId), {\n testId: `config-json-toggle-${fieldId}`,\n })}\n >\n {rawJson ? l.editAsFields : l.editAsJson}\n </Button>\n </div>\n {description && (\n <p className=\"text-sm text-muted-foreground whitespace-normal break-words leading-relaxed\">\n {description}\n </p>\n )}\n {rawJson ? (\n <Textarea\n id={fieldId}\n value={jsonDraft ?? JSON.stringify(value, null, 2)}\n onChange={(e) => {\n setJsonDraft(e.target.value)\n try {\n onChange(section, fieldName, JSON.parse(e.target.value))\n } catch {\n // Keep the draft; don't propagate a half-typed invalid object.\n }\n }}\n rows={longTextRows}\n className=\"font-mono text-sm bg-background resize-y\"\n />\n ) : (\n <div className=\"space-y-3\">\n {entries.map(([subKey, subVal]) => (\n <ConfigField\n renderModelSelect={renderModelSelect}\n key={`${fieldName}.${subKey}`}\n section={section}\n fieldName={`${fieldName}.${subKey}`}\n fieldSchema={{ type: inferType(subVal), title: prettifyKey(subKey) }}\n value={subVal}\n onChange={onChange}\n />\n ))}\n </div>\n )}\n </div>\n )\n }\n\n // Object values (declared or inferred) → structured fields; everything else\n // (arrays, primitives, empty objects) → the raw JSON textarea.\n const renderComplex = () =>\n isPlainObject(value) && Object.keys(value).length > 0\n ? renderObjectEditor()\n : renderJsonFallback()\n\n // Handle different field types\n switch (fieldSchema.type) {\n case 'boolean':\n return (\n <div className=\"flex items-center justify-between space-y-2\">\n <div className=\"space-y-0.5\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n </div>\n <Switch\n id={fieldId}\n checked={value || false}\n onCheckedChange={(checked) => onChange(section, fieldName, checked)}\n data-testid={fieldTestId}\n />\n </div>\n )\n\n case 'integer':\n case 'number': {\n const outOfBounds = isOutOfBounds(value, fieldSchema.minimum, fieldSchema.maximum)\n const rangeHint =\n fieldSchema.minimum !== undefined && fieldSchema.maximum !== undefined\n ? `${fieldSchema.minimum}–${fieldSchema.maximum}`\n : fieldSchema.minimum !== undefined\n ? `≥ ${fieldSchema.minimum}`\n : fieldSchema.maximum !== undefined\n ? `≤ ${fieldSchema.maximum}`\n : ''\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n <Input\n id={fieldId}\n type=\"number\"\n value={value ?? fieldSchema.default ?? ''}\n onChange={(e) => {\n const val = e.target.value === '' ? null : Number(e.target.value)\n onChange(section, fieldName, val)\n }}\n onBlur={() => {\n if (isOutOfBounds(value, fieldSchema.minimum, fieldSchema.maximum)) {\n notify(l.outOfRange(label, rangeHint, value), 'error')\n }\n }}\n min={fieldSchema.minimum}\n max={fieldSchema.maximum}\n placeholder={fieldSchema.default?.toString()}\n className={cn(\n 'bg-background',\n outOfBounds && 'border-destructive focus-visible:ring-destructive'\n )}\n aria-invalid={outOfBounds}\n data-testid={fieldTestId}\n />\n {outOfBounds && rangeHint && (\n <p className=\"text-sm text-destructive\">{l.allowedRange(rangeHint)}</p>\n )}\n </div>\n )\n }\n\n case 'string':\n // Check if it's an enum (select dropdown)\n if (fieldSchema.enum && fieldSchema.enum.length > 0) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n <Select value={value || ''} onValueChange={(val) => onChange(section, fieldName, val)}>\n <SelectTrigger className=\"bg-background\">\n <SelectValue placeholder={l.selectPlaceholder(label.toLowerCase())} />\n </SelectTrigger>\n <SelectContent>\n {fieldSchema.enum.map((option) => (\n <SelectItem key={option} value={option}>\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )\n }\n\n // Check if it's a long text field (use textarea)\n if (fieldName.includes('INSTRUCTION') || fieldName.includes('PROMPT')) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n <Textarea\n id={fieldId}\n value={value || ''}\n onChange={(e) => onChange(section, fieldName, e.target.value)}\n placeholder={fieldSchema.default || l.enterPlaceholder(label.toLowerCase())}\n rows={longTextRows}\n className=\"resize-y bg-background\"\n />\n </div>\n )\n }\n\n // Default to regular input\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n <Input\n id={fieldId}\n value={value || ''}\n onChange={(e) => onChange(section, fieldName, e.target.value)}\n placeholder={fieldSchema.default || l.enterPlaceholder(label.toLowerCase())}\n className=\"bg-background\"\n />\n </div>\n )\n\n case 'array': {\n // Check if this is an array of tuples/arrays (for few-shot examples)\n const isArrayOfArrays = Array.isArray(value) && value.length > 0 && Array.isArray(value[0])\n const looksLikeExamples =\n fieldName.toLowerCase().includes('example') ||\n fieldName.toLowerCase().includes('few_shot') ||\n fieldName.toLowerCase().includes('samples')\n\n if (isArrayOfArrays || looksLikeExamples) {\n // Use specialized TupleArrayField for better UX\n return (\n <TupleArrayField\n fieldId={fieldId}\n label={label}\n description={description}\n value={value}\n onChange={(newValue) => onChange(section, fieldName, newValue)}\n labels={labels}\n />\n )\n }\n\n // Fall through to default JSON handling for other arrays\n break\n }\n\n case 'object':\n // Render nested properties as a grouped sub-form\n if (fieldSchema.properties) {\n return (\n <div\n className={cn(\n 'space-y-3 rounded-lg bg-muted p-4',\n isLargePromptSection && 'min-h-[12rem]'\n )}\n >\n <Label className=\"text-sm font-semibold\">{label}</Label>\n {description && (\n <p className=\"text-sm text-muted-foreground whitespace-normal break-words leading-relaxed\">\n {description}\n </p>\n )}\n <div className=\"space-y-3\">\n {Object.entries(fieldSchema.properties).map(([subFieldName, subFieldSchema]) => (\n <ConfigField\n renderModelSelect={renderModelSelect}\n key={`${fieldName}.${subFieldName}`}\n section={section}\n fieldName={`${fieldName}.${subFieldName}`}\n fieldSchema={subFieldSchema}\n value={value?.[subFieldName]}\n onChange={onChange}\n labels={labels}\n testIds={testIds}\n />\n ))}\n </div>\n </div>\n )\n }\n // No declared sub-properties — infer structured fields from the value\n // (falling back to JSON for arrays/primitives/empty objects).\n return renderComplex()\n\n default:\n // Unknown/complex types — infer structured fields when it's an object,\n // else a JSON textarea.\n return renderComplex()\n }\n}\n\n// Memo with custom comparison: only re-render if value actually changed.\nexport const ConfigField = memo(ConfigFieldComponent, (prev, next) => {\n return (\n prev.value === next.value &&\n prev.section === next.section &&\n prev.fieldName === next.fieldName &&\n prev.onChange === next.onChange &&\n prev.renderModelSelect === next.renderModelSelect &&\n prev.labels === next.labels &&\n prev.testIds === next.testIds\n )\n})\n","/**\n * ConfigForm: renders a backend JSON-schema config as collapsible sections of typed fields\n * (switches, numbers, selects, prompts, tuples, nested objects).\n */\n\nimport { memo, useState, useMemo } from 'react'\nimport { ChevronDown, ChevronRight } from 'lucide-react'\nimport {\n Button,\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n Switch,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport {\n ConfigField,\n type ConfigFieldLabels,\n type ConfigFieldSlots,\n type ConfigFieldTestIds,\n DEFAULT_CONFIG_FIELD_LABELS,\n} from './ConfigField'\nimport { humanizeSection, type SchemaProperty } from './schema-utils'\n\nexport interface ConfigFormLabels extends ConfigFieldLabels {\n collapseAll: string\n expandAll: string\n enabled: string\n disabled: string\n}\n\nexport const DEFAULT_CONFIG_FORM_LABELS: ConfigFormLabels = {\n ...DEFAULT_CONFIG_FIELD_LABELS,\n collapseAll: 'Collapse all',\n expandAll: 'Expand all',\n enabled: 'Enabled',\n disabled: 'Disabled',\n}\n\nexport interface ConfigFormTestIds extends ConfigFieldTestIds {\n form: string\n toggleAll: string\n /** Default `config-section-{name}`. */\n section: (name: string) => string\n /** Default `config-section-toggle-{name}`. */\n sectionToggle: (name: string) => string\n /** Default `config-section-enabled-toggle-{name}`. */\n sectionEnabled: (name: string) => string\n}\n\nexport interface ConfigFormProps extends ConfigFieldSlots {\n /** Section name -> JSON schema ({ properties }). */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n schema: Record<string, any>\n /** Current values: section -> field -> value. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n values: Record<string, any>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChange: (section: string, field: string, value: any) => void\n labels?: Partial<ConfigFormLabels>\n testIds?: Partial<ConfigFormTestIds>\n className?: string\n}\n\nfunction ConfigFormComponent({\n schema,\n values,\n onChange,\n renderModelSelect,\n labels,\n testIds,\n className,\n}: ConfigFormProps) {\n const l = { ...DEFAULT_CONFIG_FORM_LABELS, ...labels }\n // Track which sections are expanded/collapsed. Start fully collapsed.\n const [expandedSections, setExpandedSections] = useState<Set<string>>(new Set())\n\n const expandableSectionNames = useMemo(\n () =>\n Object.entries(schema)\n .filter(\n ([, sectionSchema]) =>\n sectionSchema?.properties && Object.keys(sectionSchema.properties).length > 0\n )\n .map(([name]) => name),\n [schema]\n )\n\n const allExpanded =\n expandableSectionNames.length > 0 &&\n expandableSectionNames.every((name) => expandedSections.has(name))\n\n const toggleAllSections = () => {\n setExpandedSections(allExpanded ? new Set() : new Set(expandableSectionNames))\n }\n\n const toggleSection = (sectionName: string) => {\n setExpandedSections((prev) => {\n const newSet = new Set(prev)\n if (newSet.has(sectionName)) {\n newSet.delete(sectionName)\n } else {\n newSet.add(sectionName)\n }\n return newSet\n })\n }\n\n const handleEnabledChange = (sectionName: string, enabled: boolean) => {\n // Update the ENABLED value\n onChange(sectionName, 'ENABLED', enabled)\n\n // Also update the expanded state\n setExpandedSections((prev) => {\n const newSet = new Set(prev)\n if (enabled) {\n newSet.add(sectionName)\n } else {\n newSet.delete(sectionName)\n }\n return newSet\n })\n }\n\n return (\n <div\n className={cn('space-y-3', className)}\n data-testid={testIdOr(testIds?.form, { testId: 'config-schema-form' })}\n >\n <div className=\"flex justify-end\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 px-2 text-xs text-muted-foreground pointer-coarse:h-11\"\n onClick={toggleAllSections}\n data-testid={testIdOr(testIds?.toggleAll, { testId: 'config-toggle-all-sections' })}\n >\n {allExpanded ? l.collapseAll : l.expandAll}\n </Button>\n </div>\n\n {Object.entries(schema).map(([sectionName, sectionSchema]) => {\n if (!sectionSchema.properties || Object.keys(sectionSchema.properties).length === 0) {\n return null\n }\n\n const sectionTitle = humanizeSection(sectionName)\n\n // Check if this section has an ENABLED field\n const hasEnabledField = 'ENABLED' in sectionSchema.properties\n const isEnabled = hasEnabledField ? (values[sectionName]?.ENABLED ?? true) : true\n const isExpanded = expandedSections.has(sectionName)\n\n // Get all fields except ENABLED for the collapsible content\n const otherFields = Object.entries(sectionSchema.properties).filter(\n ([fieldName]) => fieldName !== 'ENABLED'\n )\n\n return (\n <div\n key={sectionName}\n className={cn(\n 'rounded-lg bg-muted p-4 transition-colors',\n hasEnabledField && !isEnabled && 'opacity-60'\n )}\n data-testid={testIdOr(testIds?.section?.(sectionName), {\n testId: `config-section-${sectionName}`,\n })}\n >\n <Collapsible open={isExpanded} onOpenChange={() => toggleSection(sectionName)}>\n {/* Section header with optional enabled toggle */}\n <div className=\"flex items-center justify-between\">\n <CollapsibleTrigger\n className=\"flex flex-1 items-center gap-2 text-left transition-opacity hover:opacity-80 pointer-coarse:min-h-11\"\n data-testid={testIdOr(testIds?.sectionToggle?.(sectionName), {\n testId: `config-section-toggle-${sectionName}`,\n })}\n >\n {isExpanded ? (\n <ChevronDown className=\"size-4 shrink-0\" />\n ) : (\n <ChevronRight className=\"size-4 shrink-0\" />\n )}\n <h3 className=\"text-left text-sm font-semibold text-foreground\">\n {sectionTitle}\n </h3>\n </CollapsibleTrigger>\n\n {/* Only show enabled toggle if this section has an ENABLED field in the schema */}\n {hasEnabledField && (\n <div className=\"flex items-center gap-2 ml-4\">\n <span className=\"text-sm text-muted-foreground\">\n {isEnabled ? l.enabled : l.disabled}\n </span>\n <Switch\n checked={isEnabled}\n onCheckedChange={(checked) => handleEnabledChange(sectionName, checked)}\n className=\"data-[state=unchecked]:bg-border\"\n data-testid={testIdOr(testIds?.sectionEnabled?.(sectionName), {\n testId: `config-section-enabled-toggle-${sectionName}`,\n })}\n />\n </div>\n )}\n </div>\n\n {/* Collapsible content with other fields */}\n {otherFields.length > 0 && (\n <CollapsibleContent className=\"pt-4\">\n <div className=\"space-y-4\">\n {otherFields.map(([fieldName, fieldSchema]) => (\n <div\n key={`${sectionName}-${fieldName}`}\n className={\n hasEnabledField && !isEnabled ? 'pointer-events-none opacity-50' : ''\n }\n >\n <ConfigField\n section={sectionName}\n fieldName={fieldName}\n fieldSchema={fieldSchema as SchemaProperty}\n value={values[sectionName]?.[fieldName]}\n onChange={onChange}\n renderModelSelect={renderModelSelect}\n labels={labels}\n testIds={testIds}\n />\n </div>\n ))}\n </div>\n </CollapsibleContent>\n )}\n </Collapsible>\n </div>\n )\n })}\n </div>\n )\n}\n\nexport const ConfigForm = memo(ConfigFormComponent)\n","import {\n forwardRef,\n type ButtonHTMLAttributes,\n type ReactNode,\n type Ref,\n type UIEventHandler,\n} from 'react'\nimport {\n Activity,\n ChevronDown,\n ChevronUp,\n Hourglass,\n Loader2,\n MoreVertical,\n Pause,\n} from 'lucide-react'\nimport {\n cn,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\n/** Every fixed string of the agent bar parts. Pass a partial `labels` to a part to reword. */\nexport interface AgentBarLabels {\n steps: string\n hideSteps: string\n showSteps: string\n /** Step toggle text: \"Step 3\". */\n stepN: (count: number) => string\n checkingIn: string\n agentActions: string\n queuedMessage: string\n statusUpdate: string\n}\n\nexport const DEFAULT_AGENT_BAR_LABELS: AgentBarLabels = {\n steps: 'Steps',\n hideSteps: 'Hide steps',\n showSteps: 'Show steps',\n stepN: (count) => `Step ${count}`,\n checkingIn: 'Checking in…',\n agentActions: 'Agent actions',\n queuedMessage: 'Queued message',\n statusUpdate: 'Status update',\n}\n\n/* ── Bar ──────────────────────────────────────────────────────────────────────────────────── */\n\nexport interface AgentBarProps {\n /** The turn is still running (tonal surface); a settled bar is a hairline outline. */\n isStreaming: boolean\n testId?: string\n /** Mirrors run-control state onto `data-control-state`. */\n controlState?: string\n /** Number of rows the steps drawer would show; 0 hides the toggle. */\n stepCount: number\n isDrawerOpen: boolean\n onToggleDrawer: () => void\n /** The steps list. Rendered in a drawer that opens UPWARD above the bar row. */\n drawer?: ReactNode\n drawerRef?: Ref<HTMLDivElement>\n onDrawerScroll?: UIEventHandler<HTMLDivElement>\n /** Left: what the agent is doing now ({@link AgentBarStatus}), or \"Answered in Xs\". */\n status: ReactNode\n /** Run totals (tool calls) shown beside the controls. */\n stats?: ReactNode\n /** Right: Stop and the actions menu. */\n controls?: ReactNode\n /** Under the bar row: queued message, status-update answer. */\n below?: ReactNode\n className?: string\n labels?: Partial<AgentBarLabels>\n /** Test id of the steps toggle. */\n stepsToggleTestId?: string\n}\n\n/**\n * The agent turn bar: current step + timer, steps drawer, stop and actions. One chrome for the\n * live bar above the composer and the settled bar inside a message, so it is learned once.\n */\nexport function AgentBar({\n isStreaming,\n testId,\n controlState,\n stepCount,\n isDrawerOpen,\n onToggleDrawer,\n drawer,\n drawerRef,\n onDrawerScroll,\n status,\n stats,\n controls,\n below,\n className,\n labels,\n stepsToggleTestId,\n}: AgentBarProps) {\n const l = { ...DEFAULT_AGENT_BAR_LABELS, ...labels }\n return (\n <div\n data-slot=\"agent-bar\"\n className={cn(\n 'overflow-hidden rounded-lg',\n isStreaming ? 'bg-muted' : 'border border-border bg-transparent',\n className\n )}\n data-testid={testId}\n data-control-state={controlState}\n >\n {isDrawerOpen && stepCount > 0 && (\n <div className=\"border-b border-border bg-background/60\">\n <p className=\"px-1.5 pt-2 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {l.steps}\n </p>\n <div ref={drawerRef} onScroll={onDrawerScroll} className=\"max-h-72 overflow-y-auto\">\n {drawer}\n </div>\n </div>\n )}\n\n <div className=\"flex items-center gap-2 px-1.5 py-2\">\n {stepCount > 0 && (\n <button\n type=\"button\"\n onClick={onToggleDrawer}\n className=\"flex shrink-0 items-center gap-1 rounded-md px-1.5 py-0.5 text-sm text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11\"\n aria-expanded={isDrawerOpen}\n aria-label={isDrawerOpen ? l.hideSteps : l.showSteps}\n data-testid={testIdOr(stepsToggleTestId, { testId: 'steps-toggle' })}\n >\n {isDrawerOpen ? <ChevronDown className=\"h-4 w-4\" /> : <ChevronUp className=\"h-4 w-4\" />}\n <span className=\"tabular-nums\">{l.stepN(stepCount)}</span>\n </button>\n )}\n {status}\n <div className=\"ml-auto flex items-center gap-2.5\">\n {stats}\n <div className=\"flex items-center gap-1\">{controls}</div>\n </div>\n </div>\n\n {below}\n </div>\n )\n}\n\n/* ── Status line variants ─────────────────────────────────────────────────────────────────── */\n\nexport type AgentBarState = 'pausing' | 'paused' | 'resuming'\n\nexport interface AgentBarStatusProps {\n /** Run-control state other than `running`. */\n state?: AgentBarState\n stateLabel?: string\n /** A status probe is awaiting the agent's answer. */\n isProbing?: boolean\n /** Waiting on delegated sub-agents: names who. */\n waitingLabel?: string\n /** Current step: icon + description. */\n stepLabel?: string\n stepIcon?: ReactNode\n /** Live elapsed-seconds ticker. */\n timer?: ReactNode\n labels?: Partial<AgentBarLabels>\n /** Per-variant test ids; defaults are the current ids. */\n testIds?: Partial<{ control: string; probe: string; waiting: string; step: string }>\n}\n\n/** The left-hand status line. Exactly one of its variants renders, in priority order. */\nexport function AgentBarStatus({\n state,\n stateLabel,\n isProbing,\n waitingLabel,\n stepLabel,\n stepIcon,\n timer,\n labels,\n testIds,\n}: AgentBarStatusProps) {\n const l = { ...DEFAULT_AGENT_BAR_LABELS, ...labels }\n if (state) {\n return (\n <span\n className={cn(\n 'flex items-center gap-1 rounded-md px-2 py-0.5 text-sm font-medium',\n state === 'paused' ? 'bg-ai-soft text-ai-ink' : 'text-muted-foreground'\n )}\n data-testid={testIdOr(testIds?.control, { testId: 'agent-control-status' })}\n >\n {state === 'paused' ? (\n <Pause className=\"h-3.5 w-3.5\" />\n ) : (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin text-yellow-text\" />\n )}\n {stateLabel}\n </span>\n )\n }\n if (isProbing) {\n return (\n <span\n className=\"flex items-center gap-1 text-sm font-medium text-muted-foreground\"\n data-testid={testIdOr(testIds?.probe, { testId: 'agent-probe-pending' })}\n >\n <Activity className=\"h-3.5 w-3.5 animate-pulse\" />\n {l.checkingIn}\n </span>\n )\n }\n if (waitingLabel) {\n return (\n <span\n className=\"flex min-w-0 items-center gap-1.5 text-sm text-muted-foreground\"\n data-testid={testIdOr(testIds?.waiting, { testId: 'agent-waiting-on-subagents' })}\n >\n <Hourglass className=\"h-4 w-4 shrink-0 text-yellow-text\" aria-hidden=\"true\" />\n <span className=\"truncate\">{waitingLabel}</span>\n {timer && <span className=\"shrink-0 tabular-nums text-muted-foreground\">{timer}</span>}\n </span>\n )\n }\n return (\n <span className=\"flex min-w-0 items-center gap-1.5 text-sm text-muted-foreground\">\n {stepIcon}\n <span\n className=\"truncate\"\n data-testid={testIdOr(testIds?.step, { testId: 'agent-current-step-description' })}\n >\n {stepLabel}\n </span>\n {timer && <span className=\"shrink-0 tabular-nums text-muted-foreground\">{timer}</span>}\n </span>\n )\n}\n\n/* ── Controls ─────────────────────────────────────────────────────────────────────────────── */\n\n/** Small icon button in the bar's control cluster (44px on touch). */\nexport const AgentBarIconButton = forwardRef<\n HTMLButtonElement,\n ButtonHTMLAttributes<HTMLButtonElement>\n>(function AgentBarIconButton({ className, type = 'button', ...rest }, ref) {\n return (\n <button\n ref={ref}\n type={type}\n data-slot=\"agent-bar-button\"\n className={cn(\n 'rounded-md p-1 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:p-3',\n className\n )}\n {...rest}\n />\n )\n})\n\nexport interface AgentBarMenuItem {\n id: string\n label: string\n icon?: ReactNode\n onSelect: () => void\n disabled?: boolean\n testId?: string\n}\n\n/** The ⋮ menu. Non-modal: the composer stays usable while it is open. */\nexport function AgentBarMenu({\n items,\n labels,\n testId = 'agent-control-menu',\n}: {\n items: ReadonlyArray<AgentBarMenuItem>\n labels?: Partial<AgentBarLabels>\n testId?: string\n}) {\n const l = { ...DEFAULT_AGENT_BAR_LABELS, ...labels }\n return (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <AgentBarIconButton title={l.agentActions} aria-label={l.agentActions} data-testid={testId}>\n <MoreVertical className=\"h-4 w-4\" />\n </AgentBarIconButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {items.map((item) => (\n <DropdownMenuItem\n key={item.id}\n onClick={item.onSelect}\n disabled={item.disabled}\n data-testid={item.testId}\n >\n {item.icon}\n {item.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\n/* ── Notes under the bar ──────────────────────────────────────────────────────────────────── */\n\n/** Wrapper for the notes under the bar row. */\nexport function AgentBarNotes({\n children,\n className,\n}: {\n children: ReactNode\n className?: string\n}) {\n return <div className={cn('mx-3 mb-2 space-y-1.5', className)}>{children}</div>\n}\n\nexport function AgentBarQueuedNote({\n text,\n isAcknowledged,\n labels,\n testId = 'agent-queued-message',\n}: {\n text: string\n isAcknowledged: boolean\n labels?: Partial<AgentBarLabels>\n testId?: string\n}) {\n const l = { ...DEFAULT_AGENT_BAR_LABELS, ...labels }\n return (\n <div\n className=\"flex min-w-0 items-start gap-2 rounded-md bg-background px-2.5 py-2\"\n data-testid={testId}\n >\n <Hourglass className=\"mt-0.5 h-3.5 w-3.5 shrink-0 text-yellow-text\" aria-hidden=\"true\" />\n <div className=\"min-w-0 flex-1\">\n <p\n className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\"\n data-queue-acknowledged={isAcknowledged}\n >\n {l.queuedMessage}\n </p>\n <p className=\"line-clamp-2 whitespace-pre-line text-sm text-foreground\" title={text}>\n {text}\n </p>\n </div>\n </div>\n )\n}\n\nexport function AgentBarProbeAnswer({\n answer,\n labels,\n testId = 'agent-probe-answer',\n}: {\n answer: string\n labels?: Partial<AgentBarLabels>\n testId?: string\n}) {\n const l = { ...DEFAULT_AGENT_BAR_LABELS, ...labels }\n return (\n <div className=\"rounded-md bg-background px-2.5 py-1.5\" data-testid={testId}>\n <p className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {l.statusUpdate}\n </p>\n <p className=\"mt-0.5 whitespace-pre-line text-sm text-foreground\">{answer}</p>\n </div>\n )\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { Check, Copy } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\n\nexport interface ConsentActionsLabels {\n deny: string\n allow: string\n loading: string\n}\n\nexport const DEFAULT_CONSENT_ACTIONS_LABELS: ConsentActionsLabels = {\n deny: 'Deny',\n allow: 'Allow',\n loading: 'Connecting…',\n}\n\nexport interface CopyableUrlLabels {\n copy: string\n copied: string\n}\n\nexport const DEFAULT_COPYABLE_URL_LABELS: CopyableUrlLabels = {\n copy: 'Copy to clipboard',\n copied: 'Copied',\n}\n\n/** Full-screen centered stage for a consent / authorization card. */\nexport function ConsentPage({\n children,\n className,\n testId,\n ...rest\n}: {\n children: ReactNode\n className?: string\n testId?: string\n} & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'className'>) {\n return (\n <div\n {...rest}\n className={cn('flex min-h-screen items-center justify-center bg-background p-6', className)}\n data-testid={testId}\n data-slot=\"consent-page\"\n >\n {children}\n </div>\n )\n}\n\nconst CARD_WIDTH = { sm: 'max-w-sm', md: 'max-w-md' } as const\n\n/** The grouping tile holding a consent flow's sections. */\nexport function ConsentCard({\n children,\n size = 'sm',\n className,\n ...rest\n}: {\n children: ReactNode\n size?: keyof typeof CARD_WIDTH\n className?: string\n} & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'className'>) {\n return (\n <div\n {...rest}\n className={cn('w-full rounded-lg bg-muted', CARD_WIDTH[size], className)}\n data-slot=\"consent-card\"\n >\n {children}\n </div>\n )\n}\n\n/** Icon + title + description block at the top of a card. */\nexport function ConsentHeader({\n icon,\n title,\n children,\n}: {\n /** Icon (or logo) shown above (default) or beside the title. */\n icon?: ReactNode\n title: ReactNode\n /** Description paragraph content. */\n children?: ReactNode\n}) {\n return (\n <div className=\"px-6 py-5\" data-slot=\"consent-header\">\n {icon && (\n <div className=\"mb-3 flex size-10 items-center justify-center rounded-lg bg-accent text-primary [&>svg]:size-5\">\n {icon}\n </div>\n )}\n <h1 className=\"text-xl font-semibold text-foreground\">{title}</h1>\n {children && <p className=\"mt-1 text-sm text-muted-foreground\">{children}</p>}\n </div>\n )\n}\n\n/** Titled section of a consent card (e.g. \"This will allow\"). */\nexport function ConsentSection({ title, children }: { title: string; children: ReactNode }) {\n return (\n <div className=\"px-6 py-4\" data-slot=\"consent-section\">\n <p className=\"mb-3 text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {title}\n </p>\n {children}\n </div>\n )\n}\n\n/** Checkmarked list of permissions. */\nexport function ConsentPermissionList({ items }: { items: ReactNode[] }) {\n return (\n <ul className=\"space-y-2 text-sm text-foreground\">\n {items.map((item, i) => (\n <li key={i} className=\"flex items-center gap-2\">\n <Check className=\"size-4 shrink-0 text-primary\" aria-hidden />\n {item}\n </li>\n ))}\n </ul>\n )\n}\n\nconst NOTICE_TONES = {\n error: 'bg-destructive/10 text-destructive',\n success: 'bg-green-bg text-green-text',\n warning: 'bg-yellow-bg text-yellow-text',\n} as const\n\n/** Tinted inline notice (no box border): error, success or warning. */\nexport function ConsentNotice({\n tone,\n title,\n children,\n className,\n}: {\n tone: keyof typeof NOTICE_TONES\n title?: string\n children?: ReactNode\n className?: string\n}) {\n return (\n <div\n role={tone === 'error' ? 'alert' : 'status'}\n className={cn('mx-6 mb-2 rounded-lg px-4 py-3 text-sm', NOTICE_TONES[tone], className)}\n data-slot=\"consent-notice\"\n >\n {title && <p className=\"font-medium\">{title}</p>}\n {children && <div className={title ? 'mt-1' : undefined}>{children}</div>}\n </div>\n )\n}\n\n/** Deny / Allow footer; Allow is the single primary action. */\nexport function ConsentActions({\n onDeny,\n onAllow,\n isLoading,\n denyLabel,\n allowLabel,\n loadingLabel,\n labels,\n}: {\n onDeny: () => void\n onAllow: () => void\n isLoading?: boolean\n denyLabel?: string\n allowLabel?: string\n loadingLabel?: string\n /** Bundle form of the three label props; the single-string props win. */\n labels?: Partial<ConsentActionsLabels>\n}) {\n const l = { ...DEFAULT_CONSENT_ACTIONS_LABELS, ...labels }\n return (\n <div className=\"flex gap-3 px-6 py-4\" data-slot=\"consent-actions\">\n <Button\n type=\"button\"\n variant=\"outline\"\n className=\"flex-1 pointer-coarse:h-11\"\n onClick={onDeny}\n disabled={isLoading}\n >\n {denyLabel ?? l.deny}\n </Button>\n <Button\n type=\"button\"\n className=\"flex-1 pointer-coarse:h-11\"\n onClick={onAllow}\n disabled={isLoading}\n >\n {isLoading ? (loadingLabel ?? l.loading) : (allowLabel ?? l.allow)}\n </Button>\n </div>\n )\n}\n\n/** Read-only URL with a copy button (clipboard handled by the caller). */\nexport function CopyableUrl({\n url,\n copied,\n onCopy,\n labels,\n}: {\n url: string\n copied: boolean\n onCopy: () => void\n labels?: Partial<CopyableUrlLabels>\n}) {\n const l = { ...DEFAULT_COPYABLE_URL_LABELS, ...labels }\n return (\n <div className=\"flex items-stretch gap-2\" data-slot=\"copyable-url\">\n <code className=\"flex-1 overflow-x-auto break-all rounded-lg bg-background px-3 py-2 text-xs text-foreground\">\n {url}\n </code>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"h-auto shrink-0 pointer-coarse:size-11\"\n onClick={onCopy}\n title={l.copy}\n aria-label={copied ? l.copied : l.copy}\n >\n {copied ? <Check className=\"size-4 text-primary\" /> : <Copy className=\"size-4\" />}\n </Button>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { ConsentCard } from './ConsentPage'\n\nconst MESSAGE_TONES = {\n error: { card: 'p-6', title: 'mb-2 text-destructive', body: 'text-muted-foreground' },\n warning: {\n card: 'bg-yellow-bg px-6 py-8',\n title: 'text-yellow-text',\n body: 'mt-2 text-yellow-text',\n },\n} as const\n\n/** A card that only says something (an invalid request, \"close this tab\"): title and a message. */\nexport function ConsentMessage({\n tone,\n title,\n children,\n}: {\n tone: keyof typeof MESSAGE_TONES\n title: string\n children: ReactNode\n}) {\n const t = MESSAGE_TONES[tone]\n return (\n <ConsentCard className={cn('text-center', t.card)}>\n <h1 className={cn('text-xl font-semibold', t.title)}>{title}</h1>\n <p className={cn('text-sm', t.body)}>{children}</p>\n </ConsentCard>\n )\n}\n\n/** Bulleted list of what is being agreed to; each item can carry bold lead-in text. */\nexport function ConsentBulletList({ items }: { items: ReactNode[] }) {\n return (\n <ul data-slot=\"consent-bullets\" className=\"mb-5 space-y-2 text-sm text-foreground\">\n {items.map((item, i) => (\n <li key={i} className=\"flex gap-2\">\n <span aria-hidden=\"true\">•</span>\n <span>{item}</span>\n </li>\n ))}\n </ul>\n )\n}\n\n/** Paragraph of a consent card: `body` explains, `footnote` is small print under an action. */\nexport function ConsentText({\n variant = 'body',\n children,\n}: {\n variant?: 'body' | 'footnote' | 'hint'\n children: ReactNode\n}) {\n return (\n <p\n data-slot=\"consent-text\"\n className={cn(\n 'text-muted-foreground',\n variant === 'body' && 'mb-5 text-sm',\n variant === 'footnote' && 'mt-3 text-center text-xs',\n variant === 'hint' && 'mt-3 text-xs'\n )}\n >\n {children}\n </p>\n )\n}\n\n/** Small print under the actions of a card, centred in the card's padding. */\nexport function ConsentFootnote({ children }: { children: ReactNode }) {\n return (\n <p data-slot=\"consent-footnote\" className=\"px-6 pb-4 text-center text-xs text-muted-foreground\">\n {children}\n </p>\n )\n}\n\n/** Emphasised lead-in inside running text (\"**Read files** — lets…\"). */\nexport function ConsentStrong({ children }: { children: ReactNode }) {\n return <span className=\"font-medium text-foreground\">{children}</span>\n}\n","import { useMemo, type ReactNode } from 'react'\nimport { ArrowLeft } from 'lucide-react'\nimport { Button, Input, Label } from '@arbidocs/react/ui'\nimport { MultiSelect } from '../../settings/MultiSelect'\nimport { formatRole } from '../../workspaces/workspace-roles'\n\n/** Every fixed string of the agent modal. */\nexport interface AuthorizeAgentLabels {\n editIntro: (agentName: string) => string\n mainIntro: string\n noAssistant: string\n connectExternal: string\n optional: string\n createdIntro: string\n email: string\n signingKey: string\n configure: string\n hideConfiguration: string\n done: string\n backToMain: string\n connectIntro: string\n name: string\n namePlaceholder: string\n nameHint: string\n workspaces: string\n workspacesPlaceholder: string\n roleTitle: string\n collaborator: string\n guest: string\n cancel: string\n create: string\n creating: string\n}\n\nexport const DEFAULT_AUTHORIZE_AGENT_LABELS: AuthorizeAgentLabels = {\n editIntro: (n) => `Configure what ${n} can do — tools, persona, and skills.`,\n mainIntro:\n 'Configure your assistant — the tools it can use, its persona, and which skills it can run.',\n noAssistant: 'No assistant is set up yet. You can connect an external agent below.',\n connectExternal: 'Connect an external agent',\n optional: '(optional)',\n createdIntro:\n 'Assistant created. Save this signing key — it is shown only once and cannot be recovered. It is the credential an external CLI agent uses to sign in as this assistant.',\n email: 'Email: ',\n signingKey: 'Signing key: ',\n configure: 'Configure',\n hideConfiguration: 'Hide configuration',\n done: 'Done',\n backToMain: 'Back to configuring your assistant',\n connectIntro:\n 'Connect an external agent: create a persistent agent with its own login and connect it to ARBI from another machine. Optional — most users just configure their assistant above.',\n name: 'Name',\n namePlaceholder: 'e.g. research-bot, qa-assistant',\n nameHint: \"Letters, digits, hyphens, underscores. Used in the agent's email address.\",\n workspaces: 'Workspaces',\n workspacesPlaceholder: 'Select workspaces to share...',\n roleTitle: 'Role in shared workspaces',\n collaborator: formatRole('collaborator'),\n guest: formatRole('guest'),\n cancel: 'Cancel',\n create: 'Create Assistant',\n creating: 'Creating...',\n}\n\nconst INTRO = 'text-sm text-muted-foreground'\nconst LINK =\n 'inline-flex items-center gap-1.5 text-xs text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11'\n\nfunction useLabels(labels?: Partial<AuthorizeAgentLabels>): AuthorizeAgentLabels {\n return useMemo(() => ({ ...DEFAULT_AUTHORIZE_AGENT_LABELS, ...labels }), [labels])\n}\n\nexport interface AgentEditViewProps {\n agentName: string\n /** The agent's config editor (host component: it owns the data). */\n config: ReactNode\n labels?: Partial<AuthorizeAgentLabels>\n}\n\n/** Edit variant: straight into the config editor of an existing agent. */\nexport function AgentEditView({ agentName, config, labels }: AgentEditViewProps) {\n const l = useLabels(labels)\n return (\n <div className=\"space-y-4\" data-testid=\"agent-edit-config\">\n <p className={INTRO}>{l.editIntro(agentName)}</p>\n {config}\n </div>\n )\n}\n\nexport interface AgentMainViewProps {\n /** The main assistant's config editor; omit when no assistant exists yet. */\n config?: ReactNode\n onConnectExternal: () => void\n labels?: Partial<AuthorizeAgentLabels>\n}\n\n/** Primary view: configure the main assistant; connecting an external agent is secondary. */\nexport function AgentMainView({ config, onConnectExternal, labels }: AgentMainViewProps) {\n const l = useLabels(labels)\n return (\n <div className=\"space-y-4\" data-testid=\"agent-main-config\">\n <p className={INTRO}>{l.mainIntro}</p>\n {config ?? <p className={`py-4 ${INTRO}`}>{l.noAssistant}</p>}\n <div className=\"border-t pt-3\">\n <button\n type=\"button\"\n onClick={onConnectExternal}\n className={LINK}\n data-testid=\"connect-external-agent-link\"\n >\n {l.connectExternal}\n <span className=\"opacity-70\">{l.optional}</span>\n </button>\n </div>\n </div>\n )\n}\n\nexport interface AgentCreatedViewProps {\n email: string\n signingKey: string\n /** Connection instructions (host component). */\n instructions: ReactNode\n /** The inline config editor, rendered while `isConfigOpen`. */\n config: ReactNode\n isConfigOpen: boolean\n onToggleConfig: () => void\n onDone: () => void\n labels?: Partial<AuthorizeAgentLabels>\n}\n\n/** After creating an external agent: the one-time signing key, instructions, optional config. */\nexport function AgentCreatedView({\n email,\n signingKey,\n instructions,\n config,\n isConfigOpen,\n onToggleConfig,\n onDone,\n labels,\n}: AgentCreatedViewProps) {\n const l = useLabels(labels)\n return (\n <div className=\"space-y-4\">\n <p className={INTRO}>{l.createdIntro}</p>\n\n <div className=\"space-y-2 rounded-md bg-muted p-4 font-mono text-sm\">\n <div>\n <span className=\"text-muted-foreground\">{l.email}</span>\n <span className=\"select-all font-semibold\">{email}</span>\n </div>\n <div className=\"break-all\">\n <span className=\"text-muted-foreground\">{l.signingKey}</span>\n <span className=\"select-all font-semibold\">{signingKey}</span>\n </div>\n </div>\n\n {instructions}\n\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" onClick={onToggleConfig} data-testid=\"configure-agent-button\">\n {isConfigOpen ? l.hideConfiguration : l.configure}\n </Button>\n <Button onClick={onDone}>{l.done}</Button>\n </div>\n\n {/* Revealed inline: no nested dialog. */}\n {isConfigOpen && <div className=\"border-t pt-4\">{config}</div>}\n </div>\n )\n}\n\nexport type AgentWorkspaceRole = 'collaborator' | 'guest'\n\nexport interface AgentCreateViewProps {\n name: string\n onNameChange: (name: string) => void\n workspaces: { id: string; name: string }[]\n selectedWorkspaces: string[]\n onSelectedWorkspacesChange: (ids: string[]) => void\n role: AgentWorkspaceRole\n onRoleChange: (role: AgentWorkspaceRole) => void\n isSubmitting: boolean\n onBack: () => void\n onCancel: () => void\n onCreate: () => void\n labels?: Partial<AuthorizeAgentLabels>\n}\n\n/** Form to create an external agent: name, optional workspaces to share, role. */\nexport function AgentCreateView({\n name,\n onNameChange,\n workspaces,\n selectedWorkspaces,\n onSelectedWorkspacesChange,\n role,\n onRoleChange,\n isSubmitting,\n onBack,\n onCancel,\n onCreate,\n labels,\n}: AgentCreateViewProps) {\n const l = useLabels(labels)\n return (\n <div className=\"space-y-5\">\n <button type=\"button\" onClick={onBack} className={LINK} data-testid=\"back-to-main-config\">\n <ArrowLeft className=\"size-3.5\" />\n {l.backToMain}\n </button>\n <p className={INTRO}>{l.connectIntro}</p>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"agentName\" className=\"text-sm font-medium\">\n {l.name} <span className=\"text-destructive\">*</span>\n </Label>\n <Input\n id=\"agentName\"\n placeholder={l.namePlaceholder}\n value={name}\n onChange={(e) => onNameChange(e.target.value)}\n />\n <p className={INTRO}>{l.nameHint}</p>\n </div>\n\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium\">\n {l.workspaces} <span className=\"font-normal text-muted-foreground\">{l.optional}</span>\n </Label>\n <MultiSelect\n data={workspaces.map((ws) => ({ label: ws.name, value: ws.id }))}\n value={selectedWorkspaces}\n onChange={onSelectedWorkspacesChange}\n placeholder={l.workspacesPlaceholder}\n searchable={workspaces.length > 5}\n clearable\n size=\"sm\"\n />\n </div>\n\n {selectedWorkspaces.length > 0 && (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium\">{l.roleTitle}</Label>\n <div className=\"flex gap-2\">\n {(['collaborator', 'guest'] as const).map((r) => (\n <Button\n key={r}\n variant={role === r ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => onRoleChange(r)}\n >\n {l[r]}\n </Button>\n ))}\n </div>\n </div>\n )}\n\n <div className=\"flex justify-end gap-2 pt-2\">\n <Button variant=\"outline\" onClick={onCancel}>\n {l.cancel}\n </Button>\n <Button onClick={onCreate} disabled={!name.trim() || isSubmitting}>\n {isSubmitting ? l.creating : l.create}\n </Button>\n </div>\n </div>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/agents/workflows/scopeRender.tsx","../src/agents/workflows/skillMarkdown.ts","../src/agents/workflows/useWorkflowView.ts","../src/agents/workflows/stepWindow.ts","../src/agents/workflows/StepBarFrame.tsx","../src/agents/workflows/StepParts.tsx","../src/agents/workflows/WorkflowStepBar.tsx","../src/agents/workflows/WorkflowRunner.tsx","../src/agents/workflows/launchRequest.ts","../src/agents/workflows/WorkflowStepAction.tsx","../src/agents/workflows/requiredLabels.ts","../src/agents/definitions/AgentCard.tsx","../src/agents/definitions/AgentGallery.tsx","../src/agents/definitions/AgentEditorParts.tsx","../src/agents/definitions/AgentCreator.tsx","../src/agents/definitions/persona.ts","../src/agents/definitions/defaults.ts","../src/agents/definitions/AgentConnectInstructions.tsx","../src/agents/definitions/agentTasks.ts","../src/agents/skills/SkillForms.tsx","../src/agents/skills/SkillParts.tsx","../src/agents/skills/SkillBrowserParts.tsx","../src/agents/skills/skillFiles.ts","../src/agents/skills/skillImport.ts","../src/agents/skills/skillLibrary.ts","../src/agents/skills/SkillLibraryDetail.tsx","../src/agents/tasks/TaskPlan.tsx","../src/agents/tasks/elapsed.ts","../src/agents/tasks/UploadTaskItem.tsx","../src/agents/tasks/UploadTaskList.tsx","../src/agents/tasks/RecurrenceBuilder.tsx","../src/agents/tasks/taskLabels.ts","../src/agents/tasks/TaskOutputsCell.tsx","../src/agents/tasks/TaskMoveDialog.tsx","../src/agents/tasks/TaskStatusPill.tsx","../src/agents/tasks/taskColumns.tsx","../src/agents/tasks/taskRows.ts","../src/agents/tasks/taskTableLabels.ts","../src/agents/tasks/TaskRowMenu.tsx","../src/agents/tasks/gridWidth.ts","../src/agents/tasks/TaskTable.tsx","../src/agents/tasks/ThreadStatusLine.tsx","../src/agents/tasks/ConversationListView.tsx","../src/agents/tasks/PillSelect.tsx","../src/agents/tasks/DueDateMenu.tsx","../src/agents/tasks/NewThreadDialog.tsx","../src/agents/tasks/TaskActivityTimeline.tsx","../src/agents/tasks/TaskActivityDialog.tsx","../src/agents/tasks/WorkflowRunStatus.tsx","../src/agents/tasks/WorkflowThreadStrip.tsx","../src/agents/tasks/TaskRunsDialog.tsx","../src/agents/tasks/taskComposerTypes.ts","../src/agents/tasks/WorkflowComposer.tsx","../src/agents/tasks/TaskComposer.tsx","../src/agents/tasks/ConversationTurnSpeaker.tsx","../src/agents/tasks/TaskEmptyState.tsx","../src/agents/config/TupleArrayField.tsx","../src/agents/config/schema-utils.ts","../src/agents/config/ConfigField.tsx","../src/agents/config/ConfigForm.tsx","../src/agents/runs/AgentBar.tsx","../src/agents/approvals/ConsentPage.tsx","../src/agents/approvals/ConsentParts.tsx","../src/agents/approvals/AuthorizeAgentParts.tsx"],"names":["jsx","ScopePicker","isWorkflowScope","fieldToFrontmatter","workflowFromFrontmatter","isRunFinished","useState","useRef","useEffect","useCallback","nextAction","act","validateStep","useMemo","stepPhase","failedUpstream","canAssign","assigneeName","runFieldsOf","useElementSize","jsxs","cn","StepBadgeMark","Fragment","Popover","PopoverTrigger","PopoverContent","ChevronLeft","ChevronRight","ProgressChevron","StepChip","ProgressChevronBar","Loader2","splitDocRef","FileText","UserRound","CornerUpLeft","sendBackTargets","Button","Textarea","ShieldCheck","formatDate","MessageSquare","shownValue","Check","Hourglass","Clock","PenLine","X","ExternalLink","Mail","Table2","stepKindOf","STEP_KIND_ICONS","DEFAULT_STEP_KIND_LABELS","stepLevels","waitingDocuments","Card","CheckCircle2","stepDependencies","SchemaForm","UploadDropzone","reviewInstructions","ArrowLeft","ArrowRight","AlertTriangle","RotateCw","GitBranch","isPersonStep","openDialog","closeDialog","useDialogProps","stepFields","DropdownMenu","DropdownMenuTrigger","MoreHorizontal","DropdownMenuContent","DropdownMenuItem","defaultInputs","validateInputs","workflowSteps","formatCount","goalProgress","testIdOr","ActionLink","Eye","ClipboardList","Pencil","Copy","Trash2","EmptyState","Bot","Sparkles","Plus","Label","Wand2","useControllableState","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","Input","FoldSection","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Globe","Terminal","Telescope","ListChecks","ImageIcon","Brain","useBlocksEnvironment","LayoutGrid","List","unzip","strFromU8","mergeSkillWorkflows","isSharedSkill","ACTION","Play","Lock","Download","Badge","Slider","formatElapsed","minutes","SkipForward","FileX","StatusIcon","parseRRule","DEFAULT_RECURRENCE","buildRRule","WEEKDAYS","CornerDownRight","CircleDashed","ToneBadge","AlertCircle","KeyRound","RotateCcw","CheckCheck","History","ListPlus","DropdownMenuSeparator","PersonPill","ChevronDown","Workflow","SharingEntity","ChevronsUpDown","ChevronsDownUp","ListTodo","GridView","SelectionBar","SelectionBarAction","Hand","CircleCheck","useIsPhone","EntityChip","CellHoverIcon","useAssistantCopy","TabHeader","FilterInput","EntityPill","Command","CommandInput","CommandList","CommandEmpty","CommandItem","assistantCopy","EMPTY_NEW_THREAD","hasTaskFields","ModalHeader","Switch","VisibilityToggle","CalendarClock","UserRoundCog","Square","MessageSquareReply","Phone","Disc","Flag","BellRing","ArrowUpRight","eventWaitingDocuments","waitingForDocumentsText","DEFAULT_STEP_DOCUMENT_LABELS","DEFAULT_STEP_RECORD_LABELS","CornerLeftUp","PopoverClose","stepDocuments","StepDocumentCards","StepRecord","StepDocumentButton","Zap","MessagesSquare","workflowRunStatusLabel","GLYPH","deriveWorkflowName","DialogClose","AddFilesFirst","id","formatDue","ARBI_MARK_SRC","UserEntity","value","memo","Collapsible","CollapsibleTrigger","CollapsibleContent","ChevronUp","Pause","Activity","forwardRef","AgentBarIconButton","MoreVertical","formatRole","MultiSelect"],"mappings":"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","file":"chunk-CQQQIZU4.cjs","sourcesContent":["import type { ReactNode } from 'react'\nimport { ScopePicker } from '../../home/ScopePicker'\nimport type { WorkflowScopeSource } from './WorkflowConfigDialog'\nimport type { WorkflowDefinition, WorkflowField, WorkflowInputs, WorkflowScope } from './types'\nimport { isWorkflowScope } from './workflow'\n\n/** The folder/label picker over the workspace's files: what a `scope` field renders by default. */\nexport function defaultScopeRenderer(\n scopeSource: WorkflowScopeSource | undefined\n):\n | ((\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode)\n | undefined {\n if (!scopeSource) return undefined\n return function renderScope(_field, value, onChange) {\n return (\n <ScopePicker\n folders={scopeSource.folders}\n unfiledCount={scopeSource.unfiledCount}\n labels={scopeSource.labels}\n totalCount={scopeSource.totalCount}\n matchedCount={scopeSource.countMatching(value)}\n scope={value}\n onScopeChange={onChange}\n />\n )\n }\n}\n\n/**\n * The inputs with every `scope` field resolved to explicit file ids (`documents`), so what is sent says\n * exactly which files a run is bound to. The folders and labels stay, for showing the pick again.\n */\nexport function resolveScopeInputs(\n workflow: Pick<WorkflowDefinition, 'inputs'>,\n inputs: WorkflowInputs,\n scopeSource: Pick<WorkflowScopeSource, 'resolveDocuments'> | undefined\n): WorkflowInputs {\n if (!scopeSource?.resolveDocuments) return inputs\n const next: WorkflowInputs = { ...inputs }\n for (const field of workflow.inputs) {\n if (field.type !== 'scope') continue\n const raw = inputs[field.name]\n const scope: WorkflowScope = isWorkflowScope(raw) ? raw : { folders: [], labels: [] }\n next[field.name] = { ...scope, documents: scopeSource.resolveDocuments(scope) }\n }\n return next\n}\n","/**\n * A skill's form and prompt as SKILL.md text and back: how a built-in becomes a skill of the user's\n * own (\"Make a copy\"). A skill is one step; a flow of steps is a workflow (`toPlanSteps`).\n *\n * The frontmatter is the line-based `key: value` form the backend parser reads. `inputs` is one\n * line of JSON (valid YAML flow style): the backend ignores keys it does not know, and\n * `workflowFromSkillMarkdown` reads it back.\n */\n\nimport type { WorkflowDefinition } from './types'\nimport { fieldToFrontmatter, workflowFromFrontmatter } from './workflow'\n\nconst JSON_KEYS = new Set(['inputs'])\n\nconst oneLine = (text: string): string => text.replace(/\\s*\\n\\s*/g, ' ').trim()\n\n/** A skill slug: lowercase letters, digits and hyphens (what the backend accepts). */\nexport const skillSlug = (raw: string): string => raw.toLowerCase().replace(/[^a-z0-9-]/g, '')\n\n/** SKILL.md text for a prompt workflow: frontmatter (name, description, form) then the prompt. */\nexport function workflowToSkillMarkdown(workflow: WorkflowDefinition): string {\n const { run } = workflow\n if (run.kind !== 'prompt') throw new Error('Only skills that start a chat can be copied')\n const lines = [\n '---',\n `name: ${skillSlug(workflow.id)}`,\n `description: ${oneLine(workflow.description)}`,\n ]\n if (workflow.icon) lines.push(`icon: ${workflow.icon}`)\n if (workflow.landing !== 'chat') lines.push(`landing: ${workflow.landing}`)\n if (workflow.requiresFiles) lines.push('requires_files: true')\n if (workflow.inputs.length > 0) {\n lines.push(`inputs: ${JSON.stringify(workflow.inputs.map(fieldToFrontmatter))}`)\n }\n lines.push('---', '', run.promptTemplate.trim(), '')\n return lines.join('\\n')\n}\n\n/** Read a SKILL.md back into a workflow (the inverse of `workflowToSkillMarkdown`). */\nexport function workflowFromSkillMarkdown(id: string, text: string): WorkflowDefinition {\n const match = /^---\\n([\\s\\S]*?)\\n---\\n?([\\s\\S]*)$/.exec(text)\n const frontmatter: Record<string, unknown> = {}\n const body = match ? match[2] : text\n for (const line of (match ? match[1] : '').split('\\n')) {\n const i = line.indexOf(':')\n if (i < 1) continue\n const key = line.slice(0, i).trim()\n const value = line.slice(i + 1).trim()\n if (JSON_KEYS.has(key)) {\n try {\n frontmatter[key] = JSON.parse(value)\n } catch {\n // A hand-written YAML list: this reader only understands the JSON line.\n }\n } else if (value === 'true' || value === 'false') frontmatter[key] = value === 'true'\n else frontmatter[key] = value\n }\n return workflowFromFrontmatter(id, frontmatter, body)\n}\n","/**\n * The screen side of a stepped run: which step is in view, form problems, and what the primary\n * button does. The run itself happens elsewhere (the thread on the server, `useWorkflowThread`, or\n * the builder's preview): this hook gets each step's state and the host's actions, so every host\n * shows a run the same way (`WorkflowRunner`).\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport {\n assigneeName,\n canAssign,\n failedUpstream,\n isRunFinished,\n nextAction,\n runFieldsOf,\n stepPhase,\n validateStep,\n type WorkflowNextAction,\n type WorkflowStepPhase,\n} from './run'\nimport type {\n WorkflowErrors,\n WorkflowInputValue,\n WorkflowInputs,\n WorkflowStep,\n WorkflowStepState,\n} from './types'\n\nexport interface UseWorkflowViewOptions {\n steps: WorkflowStep[]\n /** Each step's state (missing = pending). */\n states: Record<string, WorkflowStepState>\n inputs: WorkflowInputs\n setInput: (name: string, value: WorkflowInputValue) => void\n /** Finish a person's step (a form, an upload, a review's approval). A throw keeps the user on it. */\n complete: (step: WorkflowStep) => Promise<void>\n /** Give up on a step so what waits for it can go on. */\n skip: (stepId: string) => Promise<void>\n /** Run a failed agent step again. */\n retry?: (stepId: string) => Promise<void>\n /**\n * Start the run's ready agent or action step when nothing else will (`needsStart`): create the\n * run's thread, or ask the server to run it again. Absent = the host's runs start by themselves.\n */\n start?: () => Promise<void>\n /** No run is under way to start a ready agent or action step (see `start`). */\n needsStart?: boolean\n /** Why the run could not start or go on, as the server said (shown on a step not started). */\n runError?: string | null\n /** A form step whose inputs can no longer change (committed, or recorded on the thread). */\n isLocked?: (stepId: string) => boolean\n /**\n * Whether `states` are known yet (a run opened later: its thread's log has arrived). Until then\n * the view waits to open the run where it is, instead of at its first step. Default true.\n */\n loaded?: boolean\n /** Send the work back from a ready step to an earlier one, with a note. */\n sendBack?: (stepId: string, to: string, note?: string) => Promise<void>\n /** A signer refuses a signature step, with a note. */\n decline?: (stepId: string, note?: string) => Promise<void>\n /** A member's name by id (`usr-…` / `agt-…`): assignees and signers are shown by name. */\n nameOf?: (id: string) => string | undefined\n}\n\n/** What `WorkflowRunner` shows and does. */\nexport interface WorkflowRunView {\n steps: WorkflowStep[]\n /** The step in view; `undefined` once the run's completion is shown. */\n step: WorkflowStep | undefined\n current: string | null\n isComplete: boolean\n inputs: WorkflowInputs\n setInput: (name: string, value: WorkflowInputValue) => void\n stateOf: (stepId: string) => WorkflowStepState | undefined\n phaseOf: (stepId: string) => WorkflowStepPhase\n /** The steps `stepId` waits for that failed (still, or skipped after failing). */\n failedUpstreamOf: (stepId: string) => ReturnType<typeof failedUpstream>\n isLocked: (stepId: string) => boolean\n /** The form step in view's problems, shown once moving on was attempted. */\n errors: WorkflowErrors\n /** An action is under way (completing, skipping). */\n busy: boolean\n actionError: string | null\n /** Some agent step is running. */\n isRunning: boolean\n /** A ready agent or action step starts only when the person starts it (`action` is `start`). */\n needsStart: boolean\n /** Why the run could not start or go on, as the server said. */\n runError: string | null\n action: WorkflowNextAction\n canBack: boolean\n next: () => Promise<void>\n back: () => void\n /** View a step (one further down the plan too: it can be skipped from there). */\n goTo: (stepId: string) => void\n skip: (stepId: string) => Promise<void>\n retry?: (stepId: string) => Promise<void>\n /** Send the work back from `stepId` to `to` (it is then in view). Absent = not offered. */\n sendBack?: (stepId: string, to: string, note?: string) => Promise<void>\n /** Decline a signature step. Absent = not offered. */\n decline?: (stepId: string, note?: string) => Promise<void>\n /** A member's name by id. */\n nameOf?: (id: string) => string | undefined\n /** Who a step is for, in words (a person step, a signature, an email), if anyone. */\n assigneeOf: (stepId: string) => string | undefined\n /** Show the run from the start again (a host that starts a new run resets its own state). */\n restart: () => void\n}\n\nconst errorMessage = (e: unknown): string =>\n e instanceof Error ? e.message : typeof e === 'string' ? e : 'Something went wrong.'\n\n/** The first step that is not finished yet: where a run opens. */\nfunction firstOpen(\n steps: WorkflowStep[],\n states: Record<string, WorkflowStepState>\n): string | null {\n const open = steps.find((s) => !['done', 'skipped'].includes(states[s.id]?.status ?? 'pending'))\n return open?.id ?? (steps.length && isRunFinished(steps, states) ? null : (steps[0]?.id ?? null))\n}\n\nexport function useWorkflowView(options: UseWorkflowViewOptions): WorkflowRunView {\n const { steps, states, inputs, setInput, loaded = true } = options\n const [current, setCurrent] = useState<string | null>(() => firstOpen(steps, states))\n const [showErrors, setShowErrors] = useState(false)\n const [busy, setBusy] = useState(false)\n const [actionError, setActionError] = useState<string | null>(null)\n const optionsRef = useRef(options)\n optionsRef.current = options\n\n // A run loaded after the first render (its steps or its thread's log arrived) opens where it is:\n // its current step, or its completion when every step has finished.\n const placed = useRef(steps.length > 0 && loaded)\n useEffect(() => {\n if (placed.current || steps.length === 0 || !loaded) return\n placed.current = true\n setCurrent(firstOpen(steps, states))\n }, [steps, states, loaded])\n\n const step = steps.find((s) => s.id === current)\n const following = useCallback(\n (id: string | null): string | null => {\n const i = steps.findIndex((s) => s.id === id)\n return steps[i + 1]?.id ?? null\n },\n [steps]\n )\n // Where to go once the step in view is finished (completed or skipped): the next one still to\n // do, else simply the next one. The step just finished counts as finished whatever the states\n // say yet (they may not have caught up).\n const onward = useCallback(\n (id: string): string | null => {\n const { steps: s, states: st } = optionsRef.current\n const i = s.findIndex((x) => x.id === id)\n const open = s\n .slice(i + 1)\n .find((x) => !['done', 'skipped'].includes(st[x.id]?.status ?? 'pending'))\n return open?.id ?? following(id)\n },\n [following]\n )\n const actionOptions = useCallback(\n (o: UseWorkflowViewOptions) => ({\n needsStart: !!o.start && !!o.needsStart,\n canRetry: !!o.retry,\n }),\n []\n )\n const action: WorkflowNextAction = busy\n ? 'wait'\n : nextAction(steps, states, current, actionOptions(options))\n\n const next = useCallback(async () => {\n const { steps: s, states: st, inputs: values } = optionsRef.current\n const at = s.find((x) => x.id === current)\n const act = nextAction(s, st, current, actionOptions(optionsRef.current))\n if (!at || act === 'wait' || busy) return\n setActionError(null)\n if (act === 'finish') return setCurrent(null)\n if (act === 'move') return setCurrent(following(current))\n setBusy(true)\n try {\n // Starting or retrying keeps the step in view: it is what runs now.\n if (act === 'start' || act === 'retry') {\n await (act === 'start' ? optionsRef.current.start?.() : optionsRef.current.retry?.(at.id))\n return\n }\n if (Object.keys(validateStep(at, values)).length > 0) {\n setShowErrors(true)\n return\n }\n await optionsRef.current.complete(at)\n setShowErrors(false)\n setCurrent(onward(at.id) ?? current)\n } catch (e) {\n setActionError(errorMessage(e))\n } finally {\n setBusy(false)\n }\n }, [current, busy, following, onward, actionOptions])\n\n const goTo = useCallback((stepId: string) => {\n setShowErrors(false)\n setActionError(null)\n setCurrent(stepId)\n }, [])\n\n const index = steps.findIndex((s) => s.id === current)\n const back = useCallback(() => {\n const i = steps.findIndex((s) => s.id === current)\n const to = i < 0 ? steps[steps.length - 1] : steps[i - 1]\n if (to) goTo(to.id)\n }, [steps, current, goTo])\n\n const act = useCallback(\n (fn: ((id: string) => Promise<void>) | undefined) =>\n fn &&\n (async (stepId: string) => {\n setBusy(true)\n setActionError(null)\n try {\n await fn(stepId)\n } catch (e) {\n setActionError(errorMessage(e))\n } finally {\n setBusy(false)\n }\n }),\n []\n )\n // A skip moves the view on the way completing does (when it was the step in view).\n const currentRef = useRef(current)\n currentRef.current = current\n const skip = useMemo(\n () =>\n act(async (id) => {\n await optionsRef.current.skip(id)\n if (currentRef.current !== id) return\n setShowErrors(false)\n setCurrent(onward(id) ?? id)\n }) as (id: string) => Promise<void>,\n [act, onward]\n )\n const retry = useMemo(\n () =>\n options.retry ? act((id) => optionsRef.current.retry?.(id) ?? Promise.resolve()) : undefined,\n // Only whether the host offers retry matters here.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [act, !!options.retry]\n )\n\n const sendBack = useMemo(\n () =>\n options.sendBack\n ? async (stepId: string, to: string, note?: string) => {\n setBusy(true)\n setActionError(null)\n try {\n await optionsRef.current.sendBack?.(stepId, to, note)\n setShowErrors(false)\n setCurrent(to)\n } catch (e) {\n setActionError(errorMessage(e))\n } finally {\n setBusy(false)\n }\n }\n : undefined,\n // Only whether the host offers it matters here.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [!!options.sendBack]\n )\n const declineWithNote = useMemo(\n () =>\n options.decline\n ? async (stepId: string, note?: string) => {\n setBusy(true)\n setActionError(null)\n try {\n await optionsRef.current.decline?.(stepId, note)\n } catch (e) {\n setActionError(errorMessage(e))\n } finally {\n setBusy(false)\n }\n }\n : undefined,\n // Only whether the host offers it matters here.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [!!options.decline]\n )\n\n const isLocked = useCallback(\n (stepId: string) => optionsRef.current.isLocked?.(stepId) ?? false,\n []\n )\n\n return {\n steps,\n step,\n current,\n isComplete: current === null,\n inputs,\n setInput,\n stateOf: (id) => states[id],\n phaseOf: (id) => stepPhase(steps, states, id),\n failedUpstreamOf: (id) => failedUpstream(steps, states, id),\n isLocked,\n errors: showErrors && step && !isLocked(step.id) ? validateStep(step, inputs) : {},\n busy,\n actionError,\n isRunning: Object.values(states).some((s) => s.status === 'running'),\n needsStart: !!options.start && !!options.needsStart,\n runError: options.runError ?? null,\n action,\n canBack: (current === null || index > 0) && !busy,\n next,\n back,\n goTo,\n skip,\n retry,\n sendBack,\n decline: declineWithNote,\n nameOf: options.nameOf,\n assigneeOf: (id) => {\n const s = steps.find((x) => x.id === id)\n if (!s || !canAssign(s)) return undefined\n return assigneeName(s.assignee, {\n nameOf: options.nameOf,\n inputs,\n fields: runFieldsOf(steps),\n announcedTo: states[id]?.announcedTo,\n })\n },\n restart: () => {\n setShowErrors(false)\n setActionError(null)\n setCurrent(steps[0]?.id ?? null)\n },\n }\n}\n","/**\n * What a step bar shows of a run: a window of a few levels of the graph (`stepLevels`) around the\n * step in view — previous, current, next — with how many steps it hides on either side, each\n * parallel level collapsed to one primary step plus the rest, and the running and failed steps the\n * window does not show (so work that is still going on, or broke, is never out of sight). Pure: both bars\n * (`WorkflowStepBar` in a runner, `WorkflowThreadStrip` on a thread) render from it.\n */\n\nimport type { WorkflowStepPhase } from './run'\n\n/** A step label's widest before it is cut (px): 20rem; the step in view's is wider (26rem). */\nexport const LABEL_MAX_PX = 320\n/** About one character of a label (12px text). */\nconst CHAR_PX = 6.5\n/**\n * A bar segment's chevron (`ProgressChevron`, `blocks.css`): its padding past the point (10px\n * deep) and the notch, and how far it slides under the segment before it (the point's depth less\n * the 2px hairline between them).\n */\nexport const CHEVRON_SIDES_PX = 10 + 4 + (10 + 6)\nexport const CHEVRON_OVERLAP_PX = 10 - 2\n/** A step's chip on its segment: badge, gap and padding. */\nconst CHIP_CHROME_PX = 20 + 6 + 8\n/** A level's room beyond its label: its chip and its segment, flush with the one before. */\nexport const LEVEL_CHROME_PX = CHIP_CHROME_PX + CHEVRON_SIDES_PX - CHEVRON_OVERLAP_PX\n/** A parallel level's \"+N\" chip. */\nconst GROUP_CHIP_PX = 32\n\n/**\n * The room a level needs to show its name uncut (up to `LABEL_MAX_PX`): a bar shows a flow whole\n * only when every level has this, so names are never squeezed for the sake of showing it all.\n */\nexport function levelRoomPx(titles: string[]): number {\n const label = Math.max(0, ...titles.map((t) => Math.min(LABEL_MAX_PX, t.length * CHAR_PX)))\n return Math.ceil(label + LEVEL_CHROME_PX + (titles.length > 1 ? GROUP_CHIP_PX : 0))\n}\n\n/** A step as far as the window is concerned. */\nexport interface StepWindowStep {\n id: string\n}\n\n/** One level of the graph: a step, or steps that run side by side (a parallel group). */\nexport interface StepWindowLevel<T extends StepWindowStep> {\n index: number\n steps: T[]\n /** The step the bar shows for the level: the running one, else the one in view, else … */\n primary: T\n /** The level's other steps, behind a \"+N\" chip. */\n others: T[]\n /** Where the level stands relative to the step in view. */\n role: 'previous' | 'current' | 'next' | 'other'\n}\n\nexport interface StepWindow<T extends StepWindowStep> {\n levels: StepWindowLevel<T>[]\n /** The levels in the window, in order. */\n visible: StepWindowLevel<T>[]\n /** The window's first level and the one after its last. */\n start: number\n end: number\n /** The level of the step in view. */\n currentLevel: number\n /** Steps in the levels before and after the window. */\n hiddenBefore: number\n hiddenAfter: number\n canBack: boolean\n canForward: boolean\n /** Running steps the bar does not show: outside the window, or collapsed in a group. */\n runningHidden: T[]\n /** Failed steps the bar does not show, likewise: a failure is always in sight. */\n failedHidden: T[]\n /** 1-based position of the step in view among all steps, and how many there are. */\n position: number\n total: number\n}\n\nexport interface StepWindowOptions<T extends StepWindowStep> {\n levels: T[][]\n phaseOf: (id: string) => WorkflowStepPhase\n /** The step in view; none (or unknown) = the step the run is at (`activeStepId`). */\n current?: string | null\n /** The window's first level, as the arrows moved it; none = around the step in view. */\n start?: number | null\n /** How many levels the window shows (3: previous, current, next). */\n span?: number\n}\n\n/** Where a person's attention goes first in a level, after a running step and the one in view. */\nconst ATTENTION: WorkflowStepPhase[] = ['waiting', 'failed', 'ready']\n\n/**\n * The step a run is at, when nothing else says which step is in view: a running one, else one\n * waiting on someone, else one that failed, else one ready to do, else the last one.\n */\nexport function activeStepId<T extends StepWindowStep>(\n levels: T[][],\n phaseOf: (id: string) => WorkflowStepPhase\n): string | undefined {\n const all = levels.flat()\n for (const phase of ['running', ...ATTENTION] as WorkflowStepPhase[]) {\n const hit = all.find((s) => phaseOf(s.id) === phase)\n if (hit) return hit.id\n }\n return all[all.length - 1]?.id\n}\n\nfunction primaryOf<T extends StepWindowStep>(\n steps: T[],\n phaseOf: (id: string) => WorkflowStepPhase,\n current: string | undefined\n): T {\n return (\n steps.find((s) => phaseOf(s.id) === 'running') ??\n steps.find((s) => s.id === current) ??\n ATTENTION.map((p) => steps.find((s) => phaseOf(s.id) === p)).find(Boolean) ??\n steps[0]\n )\n}\n\nexport function stepWindow<T extends StepWindowStep>({\n levels: raw,\n phaseOf,\n current,\n start: requested,\n span = 3,\n}: StepWindowOptions<T>): StepWindow<T> {\n const levelsIn = raw.filter((l) => l.length > 0)\n const known = current && levelsIn.some((l) => l.some((s) => s.id === current))\n const at = known ? (current as string) : activeStepId(levelsIn, phaseOf)\n const currentLevel = Math.max(\n 0,\n levelsIn.findIndex((l) => l.some((s) => s.id === at))\n )\n const n = levelsIn.length\n const size = Math.max(1, Math.min(span, n))\n const maxStart = Math.max(0, n - size)\n // Around the step in view: one level before it when the window has room for three, else it\n // leads (narrow: current and next). Clamped, so the window is always full.\n const auto = currentLevel - (size >= 3 ? 1 : 0)\n const start = Math.min(maxStart, Math.max(0, requested ?? auto))\n const end = start + size\n\n const levels: StepWindowLevel<T>[] = levelsIn.map((steps, index) => {\n const primary = primaryOf(steps, phaseOf, at)\n return {\n index,\n steps,\n primary,\n others: steps.filter((s) => s !== primary),\n role:\n index === currentLevel\n ? 'current'\n : index === currentLevel - 1\n ? 'previous'\n : index === currentLevel + 1\n ? 'next'\n : 'other',\n }\n })\n const visible = levels.slice(start, end)\n const count = (ls: StepWindowLevel<T>[]) => ls.reduce((sum, l) => sum + l.steps.length, 0)\n const shown = new Set(visible.map((l) => l.primary.id))\n const all = levelsIn.flat()\n return {\n levels,\n visible,\n start,\n end,\n currentLevel,\n hiddenBefore: count(levels.slice(0, start)),\n hiddenAfter: count(levels.slice(end)),\n canBack: start > 0,\n canForward: end < n,\n runningHidden: all.filter((s) => phaseOf(s.id) === 'running' && !shown.has(s.id)),\n failedHidden: all.filter((s) => phaseOf(s.id) === 'failed' && !shown.has(s.id)),\n position: Math.max(1, all.findIndex((s) => s.id === at) + 1),\n total: all.length,\n }\n}\n","/**\n * The frame both step bars share (`WorkflowStepBar` in a runner, `WorkflowThreadStrip` on a\n * thread): `‹ … [previous] [CURRENT] [next] … ›`, from `stepWindow`. Each visible level shows one\n * step by name (its pill is the host's), a parallel level adds a \"+N\" chip that lists the group,\n * \"…\" on either side lists every step, and every running step the window does not show gets a\n * \"Working: <title>\" pill at the end, every failed one a \"Failed: <title>\" pill. The bar is a nav landmark; ←/→ (Home/End) move the window.\n * It reads as one progress bar (`ProgressChevronBar`): every level is a chevron segment, flush with\n * the next, its fill saying its phase in its kind's colour; the \"…\" counters and the host's\n * `leading` / `trailing` are segments of the same bar, a group's \"+N\" sits on its level's segment,\n * and the \"Working\" / \"Failed\" pills are segments of a short bar of their own after it. Steps keep\n * the builder canvas's chips (`StepChip`: kind icon, phase badge), drawn on their segment.\n */\n\nimport { useEffect, useRef, useState, type KeyboardEvent, type ReactNode } from 'react'\nimport { ChevronLeft, ChevronRight, Loader2 } from 'lucide-react'\nimport { cn, Popover, PopoverContent, PopoverTrigger } from '@arbidocs/react/ui'\nimport { useElementSize } from '../../lib/useElementSize'\nimport type { WorkflowStepPhase } from './run'\nimport { StepBadgeMark, StepChip } from './StepChip'\nimport { ProgressChevron, ProgressChevronBar } from './ProgressChevron'\nimport {\n CHEVRON_OVERLAP_PX,\n CHEVRON_SIDES_PX,\n levelRoomPx,\n stepWindow,\n type StepWindow,\n type StepWindowLevel,\n type StepWindowStep,\n} from './stepWindow'\n\nexport interface StepBarLabels {\n nav: string\n back: string\n forward: string\n /** The \"…\" before the window; `{count}` is replaced. */\n hiddenBefore: string\n /** The \"…\" after the window; `{count}` is replaced. */\n hiddenAfter: string\n /** The full list's heading; `{position}` and `{total}` are replaced. */\n position: string\n /** A parallel group's chip; `{count}` is replaced. */\n parallel: string\n inParallel: string\n /** A running step out of view; `{title}` is replaced. */\n working: string\n /** Several more running out of view; `{count}` is replaced. */\n moreWorking: string\n /** A failed step out of view; `{title}` is replaced. */\n failedStep: string\n /** A step that waits for someone; `{name}` is replaced. */\n waitingFor: string\n phases: Record<WorkflowStepPhase, string>\n}\n\nexport const DEFAULT_STEP_BAR_LABELS: StepBarLabels = {\n nav: 'Workflow steps',\n back: 'Earlier steps',\n forward: 'Later steps',\n hiddenBefore: '{count} earlier steps',\n hiddenAfter: '{count} later steps',\n position: 'Step {position} of {total}',\n parallel: '{count} more in parallel',\n inParallel: 'In parallel',\n working: 'Working: {title}',\n moreWorking: '+{count} working',\n failedStep: 'Failed: {title}',\n waitingFor: 'Waiting for {name}',\n phases: {\n blocked: 'Not started',\n ready: 'To do',\n running: 'Working',\n waiting: 'Waiting',\n done: 'Done',\n skipped: 'Skipped',\n failed: 'Failed',\n },\n}\n\n/**\n * A label is the full title, cut with an ellipsis only when very long (in full in `title`) or when\n * the bar is out of room — connectors give up their room first. Its widest is `LABEL_MAX_PX`\n * (20rem).\n */\nexport const STEP_LABEL = 'min-w-[2.5rem] truncate'\nexport const STEP_LABEL_MAX = 'max-w-[20rem]'\n/**\n * The step in view's label: wider (26rem), and the last to give up room (what is around it shrinks\n * a million times harder, so it is not cut while anything else on its chip or the bar can still\n * give). Its chip already has two lines (the kind above the name), so it is cut, not wrapped.\n */\nexport const STEP_LABEL_CURRENT = 'block min-w-[2.5rem] max-w-[26rem] truncate'\n/**\n * What follows a name on its pill (\"Waiting for …\"): cut before the name is. Flex shares a shortage\n * in proportion, so the factor is huge: even a sliver taken from the name would show an ellipsis.\n */\nexport const STEP_EXTRA = 'min-w-[3rem] shrink-[1000000] truncate font-normal opacity-80'\n\nconst fill = (template: string, values: Record<string, string | number>) =>\n Object.entries(values).reduce((s, [k, v]) => s.replace(`{${k}}`, String(v)), template)\n\n/** A step in the frame's lists: its title, for naming it. */\nexport interface StepBarStep extends StepWindowStep {\n title: string\n}\n\nexport interface StepBarFrameProps<T extends StepBarStep> {\n levels: T[][]\n phaseOf: (id: string) => WorkflowStepPhase\n /** The step in view (none = where the run is). */\n current?: string | null\n /** Go to a step: from a group, the full list or a \"Working\" pill. */\n onSelect: (id: string) => void\n /** The pill of a level's primary step (a button or a popover trigger). */\n renderStep: (step: T, level: StepWindowLevel<T>, win: StepWindow<T>, narrow: boolean) => ReactNode\n /** What follows a level's pill (signals it raised…). */\n renderAfter?: (level: StepWindowLevel<T>) => ReactNode\n /** Before the steps / after them: shown while the window is at that end. */\n leading?: ReactNode\n trailing?: ReactNode\n /**\n * Room the bar needs beyond the levels' names: always (a wider step in view), and for `leading`\n * and `trailing` while the window reaches that end. A window is only as wide as fits with it.\n */\n reservePx?: { always?: number; leading?: number; trailing?: number }\n /** Steps that cannot be gone to (the completion marker). */\n isSelectable?: (id: string) => boolean\n icon?: (step: T) => ReactNode\n /** A step's kind (`agent`, `review`…), for its colour; none = neutral. */\n kindOf?: (step: T) => string\n disabled?: boolean\n /**\n * The most levels the window shows, however wide the bar (3: previous, current and next, the\n * rest behind \"…N\"). Absent: as many as have room for their names, the whole flow when it fits.\n */\n maxSpan?: number\n labels?: Partial<StepBarLabels>\n tid: (suffix: string) => string\n className?: string\n}\n\n/** Below this width the window shows two levels: the current one and the next. */\nconst NARROW_PX = 560\n/** The ‹ › arrows, and a \"…N\" counter's segment on a side that hides steps. */\nconst ARROWS_PX = 56\nconst HIDDEN_PX = 28 + CHEVRON_SIDES_PX - CHEVRON_OVERLAP_PX\n\nexport function StepBarFrame<T extends StepBarStep>({\n levels,\n phaseOf,\n current,\n onSelect,\n renderStep,\n renderAfter,\n leading,\n trailing,\n reservePx = {},\n isSelectable = () => true,\n icon,\n kindOf = () => 'adhoc',\n disabled,\n maxSpan,\n labels,\n tid,\n className,\n}: StepBarFrameProps<T>) {\n const l = { ...DEFAULT_STEP_BAR_LABELS, ...labels }\n const box = useRef<HTMLElement>(null)\n const { width } = useElementSize(box)\n const narrow = width > 0 && width < NARROW_PX\n // The arrows' window start; none = around the step in view. A new step in view re-centres it.\n const [start, setStart] = useState<number | null>(null)\n useEffect(() => setStart(null), [current])\n // Narrow: the step in view alone, with a \"3/12\" counter. Wider: as many levels around it as have\n // room for their names uncut — the whole flow when it all fits — down to the step in view alone.\n const roomOf = (lv: T[]) => levelRoomPx(lv.map((s) => s.title))\n const fits = (k: number) => {\n const w = stepWindow({ levels, phaseOf, current, start, span: k })\n const reserve =\n (reservePx.always ?? 0) +\n (w.start === 0 ? (reservePx.leading ?? 0) : 0) +\n (w.canForward ? 0 : (reservePx.trailing ?? 0)) +\n ARROWS_PX +\n (w.hiddenBefore ? HIDDEN_PX : 0) +\n (w.hiddenAfter ? HIDDEN_PX : 0)\n return width - reserve >= w.visible.reduce((sum, lv) => sum + roomOf(lv.steps), 0)\n }\n // Not measured yet (no layout): previous, current and next.\n const most = Math.max(1, maxSpan ?? levels.length)\n let span = width > 0 ? 1 : Math.min(3, most)\n if (!narrow && width > 0)\n for (let k = Math.min(levels.length, most); k > 1; k--)\n if (fits(k)) {\n span = k\n break\n }\n const win = stepWindow({ levels, phaseOf, current, start, span })\n const [listOpen, setListOpen] = useState<'before' | 'after' | null>(null)\n\n const move = (to: number) => setStart(Math.max(0, Math.min(win.levels.length - 1, to)))\n // Moved from the keyboard: the focus goes to the window's first step, so it never stays on a\n // step the window has scrolled away from.\n const keyMoved = useRef(false)\n useEffect(() => {\n if (!keyMoved.current) return\n keyMoved.current = false\n box.current?.querySelector<HTMLElement>('[data-role] button')?.focus()\n }, [win.start])\n const select = (id: string) => {\n setListOpen(null)\n setStart(null)\n onSelect(id)\n }\n const onKeyDown = (e: KeyboardEvent<HTMLElement>) => {\n // Popovers are portalled but their keys bubble here through React: only the bar's own.\n if (!box.current?.contains(e.target as Node)) return\n const to =\n e.key === 'ArrowLeft'\n ? win.start - 1\n : e.key === 'ArrowRight'\n ? win.start + 1\n : e.key === 'Home'\n ? 0\n : e.key === 'End'\n ? win.levels.length\n : null\n if (to === null) return\n e.preventDefault()\n keyMoved.current = true\n move(to)\n }\n\n const row = (s: T, isCurrent: boolean) => {\n const phase = phaseOf(s.id)\n const selectable = isSelectable(s.id)\n return (\n <button\n key={s.id}\n type=\"button\"\n disabled={!selectable || disabled}\n onClick={() => select(s.id)}\n aria-current={isCurrent ? 'step' : undefined}\n className={cn(\n `wf-kind-${kindOf(s)}`,\n 'flex w-full min-w-0 items-center gap-2 rounded-md px-2 py-1 text-left text-xs hover:bg-accent disabled:cursor-default disabled:hover:bg-transparent',\n isCurrent && 'bg-accent font-semibold'\n )}\n data-phase={phase}\n data-testid={tid(`list-step-${s.id}`)}\n >\n <span\n className={cn(\n 'wf-badge flex size-5 shrink-0 items-center justify-center rounded-md [&_svg]:size-3',\n phase === 'done' && 'bg-[hsl(var(--wf-accent))] text-card',\n phase === 'blocked' && 'opacity-60'\n )}\n aria-hidden\n >\n <StepBadgeMark phase={phase} icon={icon?.(s)} />\n </span>\n <span className=\"min-w-0 flex-1 truncate\" title={s.title}>\n {s.title}\n </span>\n <span className=\"shrink-0 text-[10px] font-normal text-muted-foreground\">\n {l.phases[phase]}\n </span>\n </button>\n )\n }\n const at = win.levels[win.currentLevel]\n const atId = at && (at.steps.find((s) => s.id === current) ?? at.primary).id\n\n // The full list opens at the step in view, focused (a 40-step list starts where you are).\n const focusCurrent = (e: Event) => {\n const el = (e.currentTarget as HTMLElement | null)?.querySelector<HTMLElement>(\n '[aria-current=\"step\"]'\n )\n if (!el) return\n e.preventDefault()\n el.focus()\n el.scrollIntoView?.({ block: 'nearest' })\n }\n // A list of steps: all of them (the narrow counter), or those a \"…N\" hides on its side.\n const stepList = (side?: 'before' | 'after') => (\n <>\n <p className=\"px-2 py-1 text-[11px] font-medium text-muted-foreground\">\n {side\n ? fill(side === 'before' ? l.hiddenBefore : l.hiddenAfter, {\n count: side === 'before' ? win.hiddenBefore : win.hiddenAfter,\n })\n : fill(l.position, { position: win.position, total: win.total })}\n </p>\n <ol>\n {(side === 'before'\n ? win.levels.slice(0, win.start)\n : side === 'after'\n ? win.levels.slice(win.end)\n : win.levels\n ).map((level) => (\n <li\n key={level.index}\n className={cn(level.steps.length > 1 && 'my-0.5 border-l-2 border-border pl-1')}\n >\n {level.steps.length > 1 && (\n <p className=\"px-2 text-[10px] uppercase tracking-wide text-muted-foreground\">\n {l.inParallel}\n </p>\n )}\n {level.steps.map((s) => row(s, s.id === atId))}\n </li>\n ))}\n </ol>\n </>\n )\n\n // \"…\": how many steps the window hides on that side; it opens the whole list.\n // Narrow, one counter (\"3/12\") after the steps stands for both.\n const overflow = (side: 'before' | 'after', count: number) =>\n narrow && side === 'before' ? null : narrow && side === 'after' ? (\n win.hiddenBefore + win.hiddenAfter > 0 ? (\n <Popover open={listOpen === side} onOpenChange={(o) => setListOpen(o ? side : null)}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"wf-chip-addon flex shrink-0 items-center rounded-full px-1.5 py-1 text-[11px] tabular-nums text-muted-foreground hover:bg-accent hover:text-foreground\"\n aria-label={fill(l.position, { position: win.position, total: win.total })}\n title={fill(l.position, { position: win.position, total: win.total })}\n data-testid={tid('steps-count')}\n >\n {win.position}/{win.total}\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"end\"\n className=\"max-h-[min(24rem,70vh)] w-72 overflow-y-auto p-1\"\n onOpenAutoFocus={focusCurrent}\n data-testid={tid('all-steps')}\n >\n {stepList()}\n </PopoverContent>\n </Popover>\n ) : null\n ) : count > 0 ? (\n <Popover open={listOpen === side} onOpenChange={(o) => setListOpen(o ? side : null)}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"wf-chip-addon flex shrink-0 items-center gap-0.5 rounded-full px-1.5 py-1 text-xs text-muted-foreground hover:bg-accent hover:text-foreground\"\n aria-label={fill(side === 'before' ? l.hiddenBefore : l.hiddenAfter, { count })}\n title={fill(side === 'before' ? l.hiddenBefore : l.hiddenAfter, { count })}\n data-testid={tid(`hidden-${side}`)}\n >\n <span aria-hidden>…</span>\n <span className=\"tabular-nums\">{count}</span>\n </button>\n </PopoverTrigger>\n <PopoverContent\n align={side === 'before' ? 'start' : 'end'}\n className=\"max-h-[min(24rem,70vh)] w-80 overflow-y-auto p-1\"\n onOpenAutoFocus={focusCurrent}\n data-testid={tid('all-steps')}\n >\n {stepList(side)}\n </PopoverContent>\n </Popover>\n ) : null\n\n const arrow = (dir: 'back' | 'forward') => {\n const can = dir === 'back' ? win.canBack : win.canForward\n const Icon = dir === 'back' ? ChevronLeft : ChevronRight\n return (\n <button\n type=\"button\"\n onClick={() => move(win.start + (dir === 'back' ? -1 : 1))}\n disabled={!can}\n aria-label={dir === 'back' ? l.back : l.forward}\n title={dir === 'back' ? l.back : l.forward}\n className=\"flex size-6 shrink-0 items-center justify-center rounded-full text-muted-foreground hover:bg-accent hover:text-foreground disabled:pointer-events-none disabled:opacity-30\"\n data-testid={tid(`steps-${dir}`)}\n >\n <Icon className=\"size-4\" />\n </button>\n )\n }\n\n const running = win.runningHidden\n const outOfViewChip = (s: T, kind: 'working' | 'failedStep') => (\n <ProgressChevron\n key={s.id}\n kind={kindOf(s)}\n phase={kind === 'working' ? 'running' : 'failed'}\n className=\"min-w-0 shrink\"\n >\n <StepChip\n kind={kindOf(s)}\n phase={kind === 'working' ? 'running' : 'failed'}\n label={fill(l[kind], { title: s.title })}\n labelClassName={narrow ? 'sr-only' : 'truncate'}\n onClick={() => select(s.id)}\n className=\"max-w-[14rem] shrink\"\n title={fill(l[kind], { title: s.title })}\n data-testid={tid(`${kind === 'working' ? 'working' : 'failed'}-${s.id}`)}\n />\n </ProgressChevron>\n )\n // The \"…\" counters and the host's ends are segments of the bar too.\n const segment = (node: ReactNode, key: string, kind?: string) =>\n node ? (\n <ProgressChevron key={key} kind={kind} className=\"shrink-0\">\n {node}\n </ProgressChevron>\n ) : null\n\n return (\n <nav\n ref={box}\n aria-label={l.nav}\n onKeyDown={onKeyDown}\n className={cn('flex min-w-0 items-center gap-1', className)}\n data-testid={tid('steps')}\n data-narrow={narrow || undefined}\n >\n {arrow('back')}\n <ProgressChevronBar complete={!win.canForward} className=\"min-w-0 flex-[1_1_auto]\">\n {win.start === 0 && segment(leading, 'leading', 'start')}\n {segment(overflow('before', win.hiddenBefore), 'hidden-before')}\n {win.visible.map((level) => (\n <ProgressChevron\n key={level.steps.map((s) => s.id).join('+')}\n kind={kindOf(level.primary)}\n phase={phaseOf(level.primary.id)}\n current={level.index === win.currentLevel}\n // Each level is a segment as wide as its name, the bar's spare room shared among them.\n // Short of room, the \"Working\" pills give theirs first, then the other levels' names,\n // then what follows the current name (\"Waiting for …\"), and only then is the current\n // name cut — never below a readable start. Flex shares a shortage in proportion, so\n // the other levels shrink a million times harder: even a sliver taken from the current\n // name would show an ellipsis. (The current level keeps a factor of 1: factors summing\n // under 1 would leave part of the shortage unabsorbed.)\n className={cn(\n 'min-w-[5.5rem] grow basis-auto',\n level.index === win.currentLevel ? 'shrink' : 'shrink-[1000000]'\n )}\n data-role={level.role}\n >\n {renderStep(level.primary, level, win, narrow)}\n {level.others.length > 0 && (\n <GroupChip\n level={level}\n label={fill(l.parallel, { count: level.others.length })}\n heading={l.inParallel}\n row={(s) => row(s, s.id === atId)}\n tid={tid}\n />\n )}\n {renderAfter?.(level)}\n </ProgressChevron>\n ))}\n {segment(overflow('after', win.hiddenAfter), 'hidden-after')}\n {!win.canForward && segment(trailing, 'trailing')}\n </ProgressChevronBar>\n {arrow('forward')}\n {running.length > 0 && (\n <ProgressChevronBar\n className={cn('shrink-[1000]', !narrow && 'min-w-[6.5rem]')}\n data-testid={tid('working')}\n >\n {(running.length > 2 ? running.slice(0, 1) : running).map((s) =>\n outOfViewChip(s, 'working')\n )}\n {running.length > 2 && (\n <ProgressChevron phase=\"running\" className=\"shrink-0\">\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"wf-chip-addon flex shrink-0 items-center gap-1 rounded-lg border border-border bg-card px-2 py-1 text-xs text-muted-foreground hover:text-foreground\"\n data-testid={tid('working-more')}\n >\n <Loader2 className=\"size-3.5 animate-spin\" />\n {fill(l.moreWorking, { count: running.length - 1 })}\n </button>\n </PopoverTrigger>\n <PopoverContent align=\"end\" className=\"w-72 p-1\">\n {running.slice(1).map((s) => row(s, false))}\n </PopoverContent>\n </Popover>\n </ProgressChevron>\n )}\n </ProgressChevronBar>\n )}\n {win.failedHidden.length > 0 && (\n <ProgressChevronBar\n className={cn('shrink-[1000]', !narrow && 'min-w-[6.5rem]')}\n data-testid={tid('failed')}\n >\n {win.failedHidden.map((s) => outOfViewChip(s, 'failedStep'))}\n </ProgressChevronBar>\n )}\n </nav>\n )\n}\n\n/** \"+N\": the rest of a parallel level, listed on demand. */\nfunction GroupChip<T extends StepBarStep>({\n level,\n label,\n heading,\n row,\n tid,\n}: {\n level: StepWindowLevel<T>\n label: string\n heading: string\n row: (s: T) => ReactNode\n tid: (suffix: string) => string\n}) {\n return (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"wf-chip-addon shrink-0 rounded-md border border-border bg-card px-1.5 py-0.5 text-[11px] font-medium tabular-nums text-muted-foreground shadow-sm hover:text-foreground\"\n aria-label={label}\n title={label}\n data-testid={tid(`group-${level.steps[0].id}`)}\n >\n +{level.others.length}\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className=\"w-72 p-1\"\n data-testid={tid(`group-${level.steps[0].id}-list`)}\n >\n <p className=\"px-2 py-1 text-[11px] font-medium text-muted-foreground\">{heading}</p>\n {level.steps.map(row)}\n </PopoverContent>\n </Popover>\n )\n}\n","/**\n * The runner's step parts beyond a form, an upload and an agent's answer: an action step (a\n * signature, an email draft, a tabular review), a review's fields, its send-back and what it\n * approved, the \"Waiting for <person>\" line, and \"Open in Editor\" for a tracked-changes version.\n * Everything that leaves the runner (opening a document, mail, a grid, the sign flow) goes through\n * the host's `WorkflowRunnerActions`.\n */\n\nimport { useState, type ReactNode } from 'react'\nimport {\n Check,\n Clock,\n CornerUpLeft,\n ExternalLink,\n FileText,\n Hourglass,\n Loader2,\n Mail,\n MessageSquare,\n PenLine,\n ShieldCheck,\n Table2,\n UserRound,\n X,\n} from 'lucide-react'\nimport { Button, Textarea, cn } from '@arbidocs/react/ui'\nimport { sendBackTargets, splitDocRef } from './run'\nimport { formatDate, shownValue } from './StepDocuments'\nimport type { WorkflowRunView } from './useWorkflowView'\nimport type {\n WorkflowActionStep,\n WorkflowAgentStep,\n WorkflowReviewStep,\n WorkflowStepState,\n} from './types'\n\n/** Where the runner hands off to the host. Each is optional: absent, its button is not shown. */\nexport interface WorkflowRunnerActions {\n /** Open a document, or one version of it (`doc-…@v3`). */\n openDocument?: (ref: string) => void\n /** Open the document of a signature step to sign it (the signer's turn). */\n sign?: (step: WorkflowActionStep, state: WorkflowStepState) => void\n /** Open an email step's draft in native mail. */\n openDraft?: (draftId: string, mailbox?: string) => void\n /** Open a finished tabular review's grid: its columns (labels) over its documents. */\n openReview?: (tags: string[], documents: string[]) => void\n /** Open a tracked-changes version in the Word editor, to accept or reject the changes. */\n openRedline?: (ref: string) => void\n /** Show a step's answer where it is in the thread. */\n openMessage?: (messageId: string) => void\n /** The person on screen (`usr-…`): a signature offers \"Open and sign\" to its signers only. */\n me?: string\n}\n\nexport interface WorkflowStepPartsLabels {\n waitingFor: string\n sendBack: string\n sendBackTo: string\n sendBackNote: string\n cancel: string\n sentBackHere: string\n approvedBy: string\n approvedAt: string\n approvedWhat: string\n viewAnswer: string\n fieldsHeading: string\n signers: string\n signed: string\n notSigned: string\n openAndSign: string\n decline: string\n declineNote: string\n declineConfirm: string\n declined: string\n signedVersion: string\n preparingSign: string\n expires: string\n preparingDraft: string\n draftReady: string\n openDraft: string\n emailSent: string\n reviewRunning: string\n reviewDone: string\n openReview: string\n openInEditor: string\n redlineHint: string\n someone: string\n}\n\nexport const DEFAULT_WORKFLOW_STEP_PARTS_LABELS: WorkflowStepPartsLabels = {\n waitingFor: 'Waiting for {name}',\n sendBack: 'Send back',\n sendBackTo: 'Send back to',\n sendBackNote: 'What needs to change? (optional)',\n cancel: 'Cancel',\n sentBackHere: 'This step was sent back to be done again.',\n approvedBy: 'Approved by {name}',\n approvedAt: '{date}',\n approvedWhat: 'What was approved',\n viewAnswer: 'View the answer',\n fieldsHeading: 'Recorded with the approval',\n signers: 'Signers',\n signed: 'Signed',\n notSigned: 'Not signed yet',\n openAndSign: 'Open and sign',\n decline: 'Decline',\n declineNote: 'Why are you declining? (optional)',\n declineConfirm: 'Decline to sign',\n declined: 'Declined by {name}.',\n signedVersion: 'Open the signed version',\n preparingSign: 'Preparing the signature request…',\n expires: 'Expires {date}',\n preparingDraft: 'Preparing the draft…',\n draftReady: 'The draft is ready in native mail. Check it, send it, then mark it as sent.',\n openDraft: 'Open draft',\n emailSent: 'Sent.',\n reviewRunning: 'Reviewing the documents…',\n reviewDone: 'Reviewed {docs} documents in {cols} columns.',\n openReview: 'Open the review',\n openInEditor: 'Open in Editor',\n redlineHint: 'The edits are tracked changes: accept or reject each one in Word.',\n someone: 'someone',\n}\n\nconst docName = (ref: string, nameOfDoc?: (id: string) => string | undefined) => {\n const { id, version } = splitDocRef(ref)\n const name = nameOfDoc?.(id) ?? id\n return version ? `${name} · v${version}` : name\n}\n\n/** A document version as a chip, opening it when the host can. */\nfunction DocChip({\n docRef,\n actions,\n nameOfDoc,\n testId,\n}: {\n docRef: string\n actions?: WorkflowRunnerActions\n nameOfDoc?: (id: string) => string | undefined\n testId?: string\n}) {\n const label = docName(docRef, nameOfDoc)\n const cls =\n 'inline-flex max-w-full items-center gap-1 rounded-md border border-border px-1.5 py-0.5 text-xs'\n return actions?.openDocument ? (\n <button\n type=\"button\"\n onClick={() => actions.openDocument?.(docRef)}\n className={cn(cls, 'hover:border-primary/40 hover:text-primary')}\n title={docRef}\n data-testid={testId}\n >\n <FileText className=\"size-3 shrink-0\" /> <span className=\"truncate\">{label}</span>\n </button>\n ) : (\n <span className={cls} title={docRef} data-testid={testId}>\n <FileText className=\"size-3 shrink-0\" /> <span className=\"truncate\">{label}</span>\n </span>\n )\n}\n\n/** \"Waiting for Sophie Lindqvist\" on a step a person has to do. */\nexport function AssigneeLine({\n run,\n stepId,\n l,\n testId,\n}: {\n run: WorkflowRunView\n stepId: string\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const name = run.assigneeOf(stepId)\n const phase = run.phaseOf(stepId)\n if (!name || !['ready', 'waiting', 'blocked'].includes(phase)) return null\n return (\n <p\n className=\"flex items-center gap-1.5 text-xs text-muted-foreground\"\n data-testid={`${testId}-assignee`}\n >\n <UserRound className=\"size-3.5\" /> {l.waitingFor.replace('{name}', name)}\n </p>\n )\n}\n\n/** A step reopened by a send-back says so. */\nexport function SentBackNote({\n state,\n l,\n testId,\n}: {\n state: WorkflowStepState | undefined\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n if (!state?.sentBack) return null\n return (\n <p\n className=\"flex items-center gap-1.5 rounded-md bg-amber-500/10 px-2 py-1 text-xs text-amber-700 dark:text-amber-300\"\n data-testid={`${testId}-sent-back`}\n >\n <CornerUpLeft className=\"size-3.5\" /> {l.sentBackHere}\n </p>\n )\n}\n\n/** \"Send back\" on a ready step: pick the earlier step to redo and say what needs to change. */\nexport function SendBackControl({\n run,\n step,\n l,\n testId,\n}: {\n run: WorkflowRunView\n step: WorkflowReviewStep\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const states = Object.fromEntries(\n run.steps.map((s) => [s.id, run.stateOf(s.id) ?? { status: 'pending' as const }])\n )\n const targets = sendBackTargets(run.steps, states, step.id)\n const [open, setOpen] = useState(false)\n const [to, setTo] = useState(targets[0]?.id ?? '')\n const [note, setNote] = useState('')\n if (!run.sendBack || run.phaseOf(step.id) !== 'ready' || targets.length === 0) return null\n if (!open)\n return (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setOpen(true)}\n disabled={run.busy}\n data-testid={`${testId}-send-back`}\n >\n <CornerUpLeft className=\"size-4\" /> {l.sendBack}\n </Button>\n )\n const target = targets.some((t) => t.id === to) ? to : targets[0].id\n return (\n <div\n className=\"space-y-2 rounded-md border border-border p-3\"\n data-testid={`${testId}-send-back-form`}\n >\n <label className=\"block space-y-1 text-xs font-medium\">\n {l.sendBackTo}\n <select\n className=\"flex h-8 w-full rounded-md border border-input bg-background px-2 text-sm\"\n value={target}\n onChange={(e) => setTo(e.target.value)}\n data-testid={`${testId}-send-back-to`}\n >\n {targets.map((t) => (\n <option key={t.id} value={t.id}>\n {t.title}\n </option>\n ))}\n </select>\n </label>\n <Textarea\n rows={3}\n value={note}\n placeholder={l.sendBackNote}\n aria-label={l.sendBackNote}\n onChange={(e) => setNote(e.target.value)}\n data-testid={`${testId}-send-back-note`}\n />\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setOpen(false)}>\n {l.cancel}\n </Button>\n <Button\n size=\"sm\"\n disabled={run.busy}\n onClick={() => void run.sendBack?.(step.id, target, note.trim() || undefined)}\n data-testid={`${testId}-send-back-confirm`}\n >\n <CornerUpLeft className=\"size-4\" /> {l.sendBack}\n </Button>\n </div>\n </div>\n )\n}\n\n/** What a completed review recorded: who approved, the answers and versions, the fields. */\nexport function ApprovalEvidence({\n run,\n step,\n actions,\n nameOfDoc,\n l,\n testId,\n}: {\n run: WorkflowRunView\n step: WorkflowReviewStep\n actions?: WorkflowRunnerActions\n nameOfDoc?: (id: string) => string | undefined\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const state = run.stateOf(step.id)\n if (state?.status !== 'done') return null\n const approver = state.by ? (run.nameOf?.(state.by) ?? l.someone) : undefined\n const evidence = state.approved ?? []\n const titleOf = (id: string) => run.steps.find((s) => s.id === id)?.title ?? id\n return (\n <div className=\"space-y-2 rounded-md bg-muted/40 p-3\" data-testid={`${testId}-evidence`}>\n <p className=\"flex flex-wrap items-center gap-1.5 text-sm font-medium\">\n <ShieldCheck className=\"size-4 text-primary\" />\n {approver ? l.approvedBy.replace('{name}', approver) : null}\n {state.at && (\n <span className=\"text-xs font-normal text-muted-foreground\">\n {l.approvedAt.replace('{date}', formatDate(state.at))}\n </span>\n )}\n </p>\n {evidence.length > 0 && (\n <div className=\"space-y-1.5\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {l.approvedWhat}\n </p>\n {evidence.map((e) => (\n <div\n key={e.step}\n className=\"flex flex-wrap items-center gap-1.5 text-xs\"\n data-testid={`${testId}-evidence-${e.step}`}\n >\n <span className=\"font-medium\">{titleOf(e.step)}</span>\n {e.response_id &&\n (actions?.openMessage ? (\n <button\n type=\"button\"\n onClick={() => actions.openMessage?.(e.response_id as string)}\n className=\"inline-flex items-center gap-1 text-primary hover:underline\"\n data-testid={`${testId}-evidence-${e.step}-answer`}\n >\n <MessageSquare className=\"size-3\" /> {l.viewAnswer}\n </button>\n ) : null)}\n {(e.documents ?? []).map((d) => (\n <DocChip key={d} docRef={d} actions={actions} nameOfDoc={nameOfDoc} />\n ))}\n </div>\n ))}\n </div>\n )}\n {(step.fields ?? []).length > 0 && (\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5 text-xs\">\n {(step.fields ?? []).map((f) => (\n <div key={f.name} className=\"contents\">\n <dt className=\"text-muted-foreground\">{f.label}</dt>\n <dd data-testid={`${testId}-evidence-field-${f.name}`}>\n {shownValue(run.inputs[f.name], f, run.nameOf)}\n </dd>\n </div>\n ))}\n </dl>\n )}\n </div>\n )\n}\n\n/** \"Open in Editor\" for an agent step that edited a document with tracked changes. */\nexport function RedlineOpen({\n step,\n state,\n actions,\n l,\n testId,\n}: {\n step: WorkflowAgentStep\n state: WorkflowStepState | undefined\n actions?: WorkflowRunnerActions\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const version = state?.status === 'done' ? state.documents?.[0] : undefined\n if (!step.editDocument || !version || !actions?.openRedline) return null\n return (\n <div className=\"flex flex-wrap items-center gap-2\" data-testid={`${testId}-redline`}>\n <Button\n size=\"sm\"\n onClick={() => actions.openRedline?.(version)}\n data-testid={`${testId}-open-word`}\n >\n <FileText className=\"size-4\" /> {l.openInEditor}\n </Button>\n <span className=\"text-xs text-muted-foreground\">{l.redlineHint}</span>\n </div>\n )\n}\n\n/** A platform action step: where it is, and what its person can do now. */\nexport function ActionStepBody({\n step,\n run,\n actions,\n nameOfDoc,\n heading,\n l,\n testId,\n}: {\n step: WorkflowActionStep\n run: WorkflowRunView\n actions?: WorkflowRunnerActions\n nameOfDoc?: (id: string) => string | undefined\n heading: ReactNode\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const state = run.stateOf(step.id)\n const phase = run.phaseOf(step.id)\n // On its way: running, or ready with a run under way to start it (else it waits for Start).\n const underWay = phase === 'running' || (phase === 'ready' && !run.needsStart)\n const name = (id: string) => run.nameOf?.(id) ?? id\n const [declining, setDeclining] = useState(false)\n const [note, setNote] = useState('')\n const a = step.action\n const working = (text: string) => (\n <p\n className=\"flex items-center gap-2 text-sm text-muted-foreground\"\n data-testid={`${testId}-working`}\n >\n <Loader2 className=\"size-4 animate-spin\" /> {text}\n </p>\n )\n\n let body: ReactNode = null\n if (a.type === 'sign') {\n const waiting = state?.waiting\n const signers = waiting?.signers ?? []\n const signed = new Set(waiting?.signed ?? [])\n const mine = !actions?.me || (signers.includes(actions.me) && !signed.has(actions.me))\n const signedRef = state?.status === 'done' ? state.documents?.[0] : undefined\n body = (\n <>\n {underWay && working(l.preparingSign)}\n {phase === 'waiting' && waiting?.doc_ext_id && (\n <DocChip\n docRef={`${waiting.doc_ext_id}${waiting.version ? `@v${waiting.version}` : ''}`}\n actions={actions}\n nameOfDoc={nameOfDoc}\n testId={`${testId}-document`}\n />\n )}\n {signers.length > 0 && (\n <div className=\"space-y-1\" data-testid={`${testId}-signers`}>\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {l.signers}\n </p>\n {signers.map((id) => (\n <p\n key={id}\n className=\"flex items-center gap-2 text-sm\"\n data-signed={signed.has(id) || undefined}\n data-testid={`${testId}-signer-${id}`}\n >\n {signed.has(id) ? (\n <Check className=\"size-3.5 text-primary\" />\n ) : (\n <Hourglass className=\"size-3.5 text-muted-foreground\" />\n )}\n <span className=\"font-medium\">{name(id)}</span>\n <span className=\"text-xs text-muted-foreground\">\n {signed.has(id) ? l.signed : l.notSigned}\n </span>\n </p>\n ))}\n </div>\n )}\n {waiting?.expires_at && phase === 'waiting' && (\n <p className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Clock className=\"size-3.5\" />{' '}\n {l.expires.replace('{date}', formatDate(waiting.expires_at))}\n </p>\n )}\n {phase === 'waiting' && mine && !declining && (\n <div className=\"flex flex-wrap gap-2\">\n {actions?.sign && state && (\n <Button\n size=\"sm\"\n onClick={() => actions.sign?.(step, state)}\n data-testid={`${testId}-open-sign`}\n >\n <PenLine className=\"size-4\" /> {l.openAndSign}\n </Button>\n )}\n {run.decline && (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => setDeclining(true)}\n data-testid={`${testId}-decline`}\n >\n <X className=\"size-4\" /> {l.decline}\n </Button>\n )}\n </div>\n )}\n {declining && (\n <div className=\"space-y-2\" data-testid={`${testId}-decline-form`}>\n <Textarea\n rows={2}\n value={note}\n placeholder={l.declineNote}\n aria-label={l.declineNote}\n onChange={(e) => setNote(e.target.value)}\n data-testid={`${testId}-decline-note`}\n />\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setDeclining(false)}>\n {l.cancel}\n </Button>\n <Button\n size=\"sm\"\n variant=\"destructive\"\n disabled={run.busy}\n onClick={async () => {\n await run.decline?.(step.id, note.trim() || undefined)\n setDeclining(false)\n }}\n data-testid={`${testId}-decline-confirm`}\n >\n {l.declineConfirm}\n </Button>\n </div>\n </div>\n )}\n {phase === 'failed' && state?.declinedBy && (\n <p className=\"text-sm text-destructive\" data-testid={`${testId}-declined`}>\n {l.declined.replace('{name}', name(state.declinedBy))}\n </p>\n )}\n {signedRef && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {actions?.openDocument ? (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => actions.openDocument?.(signedRef)}\n data-testid={`${testId}-signed-version`}\n >\n <ExternalLink className=\"size-4\" /> {l.signedVersion}\n </Button>\n ) : (\n <DocChip docRef={signedRef} nameOfDoc={nameOfDoc} />\n )}\n </div>\n )}\n </>\n )\n } else if (a.type === 'email_draft') {\n const draftId =\n state?.waiting?.draft_id ??\n (typeof state?.output?.draft_id === 'string' ? state.output.draft_id : undefined)\n body = (\n <>\n {underWay && working(l.preparingDraft)}\n {phase === 'waiting' && <p className=\"text-sm text-muted-foreground\">{l.draftReady}</p>}\n {phase === 'done' && (\n <p className=\"flex items-center gap-1.5 text-sm\" data-testid={`${testId}-sent`}>\n <Check className=\"size-4 text-primary\" /> {l.emailSent}\n </p>\n )}\n {draftId && actions?.openDraft && phase !== 'done' && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => actions.openDraft?.(draftId, state?.waiting?.mailbox)}\n data-testid={`${testId}-open-draft`}\n >\n <Mail className=\"size-4\" /> {l.openDraft}\n </Button>\n )}\n </>\n )\n } else {\n const tags = (state?.output?.tag_ext_ids as string[] | undefined) ?? a.tags\n const docs = (state?.output?.doc_ext_ids as string[] | undefined) ?? []\n body = (\n <>\n {underWay && working(l.reviewRunning)}\n {phase === 'done' && (\n <>\n <p className=\"text-sm text-muted-foreground\" data-testid={`${testId}-reviewed`}>\n {l.reviewDone\n .replace('{docs}', String(docs.length))\n .replace('{cols}', String(tags.length))}\n </p>\n {actions?.openReview && (\n <Button\n size=\"sm\"\n onClick={() => actions.openReview?.(tags, docs)}\n data-testid={`${testId}-open-review`}\n >\n <Table2 className=\"size-4\" /> {l.openReview}\n </Button>\n )}\n </>\n )}\n </>\n )\n }\n\n return (\n <div className=\"space-y-3\">\n {heading}\n <SentBackNote state={state} l={l} testId={testId} />\n <AssigneeLine run={run} stepId={step.id} l={l} testId={testId} />\n {body}\n {phase === 'failed' && !state?.declinedBy && (\n <p className=\"text-sm text-destructive\" data-testid={`${testId}-failed`}>\n {state?.error || ''}\n </p>\n )}\n </div>\n )\n}\n","/**\n * The run's stepper: where you are, what is done, what is next and what is still running. It\n * names the previous, current and next steps of the graph (`StepBarFrame` over `stepLevels`); the\n * rest is a click away (‹ ›, \"…\"), a parallel level is one step plus a \"+N\" chip, and a running\n * step out of view shows as \"Working: <title>\". The run's completion is the last step.\n */\n\nimport type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport type { WorkflowStepPhase } from './run'\nimport type { WorkflowRunView } from './useWorkflowView'\nimport type { WorkflowStep } from './types'\nimport {\n DEFAULT_STEP_BAR_LABELS,\n STEP_EXTRA,\n STEP_LABEL,\n STEP_LABEL_MAX,\n STEP_LABEL_CURRENT,\n StepBarFrame,\n type StepBarLabels,\n} from './StepBarFrame'\nimport { StepChip } from './StepChip'\nimport { DEFAULT_STEP_KIND_LABELS, STEP_KIND_ICONS, stepKindOf } from './stepKinds'\n\n/** The completion marker's id in the bar (not a step of the plan). */\nconst DONE = '__done'\n\nexport interface WorkflowStepBarProps {\n run: WorkflowRunView\n levels: WorkflowStep[][]\n doneTitle: string\n doneIcon?: ReactNode\n icon: (key?: string) => ReactNode\n tid: (suffix: string) => string\n labels?: Partial<StepBarLabels>\n}\n\nexport function WorkflowStepBar({\n run,\n levels,\n doneTitle,\n doneIcon,\n icon,\n tid,\n labels,\n}: WorkflowStepBarProps) {\n const l = { ...DEFAULT_STEP_BAR_LABELS, ...labels }\n const done = { id: DONE, title: doneTitle } as WorkflowStep\n const phaseOf = (id: string): WorkflowStepPhase =>\n id === DONE ? (run.isComplete ? 'done' : 'blocked') : run.phaseOf(id)\n const current = run.isComplete ? DONE : run.current\n\n const pill = (s: WorkflowStep) => {\n const phase = phaseOf(s.id)\n const isCurrent = s.id === current\n // Who it waits for, on a step that is theirs to do now.\n const assignee = ['ready', 'waiting'].includes(phase) ? run.assigneeOf(s.id) : undefined\n const waiting = assignee ? l.waitingFor.replace('{name}', assignee) : undefined\n // A failure says why on the pill's tooltip (and so does a step skipped after failing).\n const state = s.id === DONE ? undefined : run.stateOf(s.id)\n const failure =\n (phase === 'failed' || state?.skippedAfterFailure) && state?.error\n ? `${l.phases.failed}: ${state.error}`\n : undefined\n const title = [s.title, waiting, failure].filter(Boolean).join(' · ')\n const name = `${title} (${l.phases[phase]})`\n if (s.id === DONE)\n return (\n <StepChip\n inert\n kind=\"start\"\n phase={run.isComplete ? 'done' : 'ready'}\n icon={doneIcon}\n label={doneTitle}\n labelClassName={cn(STEP_LABEL, STEP_LABEL_MAX)}\n current={isCurrent}\n aria-label={name}\n title={doneTitle}\n data-testid={tid('step-done')}\n />\n )\n const kind = stepKindOf(s)\n const KindIcon = STEP_KIND_ICONS[kind]\n return (\n <StepChip\n kind={kind}\n phase={phase}\n icon={icon(s.icon) ?? <KindIcon />}\n label={s.title}\n current={isCurrent}\n heading={DEFAULT_STEP_KIND_LABELS[kind]}\n labelClassName={isCurrent ? STEP_LABEL_CURRENT : cn(STEP_LABEL, STEP_LABEL_MAX)}\n labelTestId={tid(`step-${s.id}-label`)}\n onClick={() => run.goTo(s.id)}\n disabled={run.busy}\n className=\"disabled:cursor-default\"\n aria-label={name}\n title={title}\n data-testid={tid(`step-${s.id}`)}\n >\n {assignee && isCurrent && (\n <span\n className={cn(STEP_EXTRA, 'max-w-[12rem]')}\n data-testid={tid(`step-${s.id}-assignee`)}\n >\n · {waiting}\n </span>\n )}\n </StepChip>\n )\n }\n\n return (\n <StepBarFrame\n levels={[...levels, [done]]}\n phaseOf={phaseOf}\n current={current}\n onSelect={(id) => id !== DONE && run.goTo(id)}\n isSelectable={(id) => id !== DONE}\n renderStep={(s) => pill(s)}\n icon={(s) => (s.id === DONE ? doneIcon : icon(s.icon))}\n kindOf={(s) => (s.id === DONE ? 'start' : stepKindOf(s))}\n disabled={run.busy}\n labels={labels}\n tid={tid}\n className=\"w-full\"\n />\n )\n}\n","/**\n * A stepped workflow run, end to end: the stepper, the step in view (a form, an upload, an agent\n * step or a review) and moving on. The stepper lays the graph out by depth: a sequence is one row,\n * steps side by side stack in a column. The run comes from `useWorkflowThread` (a thread on the\n * server) or `useWorkflowPreview`; wording and the agent output's rendering come from the host.\n */\n\nimport { useEffect, useRef, useState, type ReactNode } from 'react'\nimport {\n AlertTriangle,\n ArrowLeft,\n ArrowRight,\n Check,\n CheckCircle2,\n FileText,\n GitBranch,\n Hourglass,\n Loader2,\n RotateCw,\n X,\n} from 'lucide-react'\nimport { Button, Card, cn } from '@arbidocs/react/ui'\nimport { UploadDropzone } from '../../files/UploadDropzone'\nimport { SchemaForm, type SchemaFormProps } from './SchemaForm'\nimport {\n isPersonStep,\n reviewInstructions,\n splitDocRef,\n stepDependencies,\n stepLevels,\n waitingDocuments,\n} from './run'\nimport { WorkflowStepBar } from './WorkflowStepBar'\nimport {\n ActionStepBody,\n ApprovalEvidence,\n AssigneeLine,\n DEFAULT_WORKFLOW_STEP_PARTS_LABELS,\n RedlineOpen,\n SendBackControl,\n SentBackNote,\n type WorkflowRunnerActions,\n type WorkflowStepPartsLabels,\n} from './StepParts'\nimport type { WorkflowRunView } from './useWorkflowView'\nimport type {\n WorkflowAgentStep,\n WorkflowDefinition,\n WorkflowReviewStep,\n WorkflowStep,\n WorkflowStepState,\n WorkflowUploadStep,\n} from './types'\n\nexport interface WorkflowRunnerLabels {\n back: string\n next: string\n /** Skips the step in view (any unfinished step: the plan guides the thread, it does not hold it). */\n skipStep: string\n finish: string\n approve: string\n working: string\n /** An agent step under way: `{step}` is its title, `{elapsed}` how long it has run (m:ss). */\n stepWorking: string\n /** An agent step about to start (the run will pick it up). */\n starting: string\n /** The primary button on a ready agent or action step nothing has started (no run under way). */\n start: string\n /** A ready agent or action step not started yet, waiting for Start. */\n notStarted: string\n retry: string\n failed: string\n /** A step waiting on one that failed; `{step}` is its title, `{error}` why it failed. */\n upstreamFailed: string\n /** A step going on without one that failed and was skipped; `{step}` and `{error}` as above. */\n upstreamSkippedAfterFailure: string\n /** A skipped step that had failed; `{error}` is why. */\n skippedAfterFailure: string\n /** A step whose dependencies have not finished; `{steps}` is replaced with their titles. */\n blocked: string\n awaitingReview: string\n approved: string\n skipped: string\n /** An agent step that runs off the main line and delivers its result to it. */\n branch: string\n /** The default finish heading (the workflow's `completion.title` wins). */\n complete: string\n restart: string\n /** The upload step's list of what else the workspace holds (folded); `{count}` is replaced. */\n filesHeading: string\n /** The upload step's list of the files added on it in this run; `{count}` is replaced. */\n addedHeading: string\n noFiles: string\n /** A file's processing status on the upload step. */\n fileReading: string\n fileReady: string\n fileFailed: string\n /** Continue on an upload step while its files are read; `{current}` and `{count}` are replaced. */\n readingFiles: string\n /** Continue on an upload step while its files are sent; `{count}` is replaced (more than one). */\n uploadingFiles: string\n uploadingFile: string\n /** Continue while the host is uploading files it does not list one by one. */\n uploadingAny: string\n /** Continue on an upload step with files that did not upload; `{count}` is replaced (more than one). */\n uploadsFailed: string\n uploadFailed: string\n /** A file's row while it is sent, and when it did not upload (its error follows). */\n fileUploading: string\n fileUploadFailed: string\n retryUpload: string\n removeUpload: string\n /**\n * An agent step waiting for documents to finish processing before its turn starts; `{count}` is\n * replaced (more than one).\n */\n waitingForDocuments: string\n waitingForDocument: string\n /** The primary button on an email step waiting to be sent. */\n markSent: string\n}\n\nexport const DEFAULT_WORKFLOW_RUNNER_LABELS: WorkflowRunnerLabels = {\n back: 'Back',\n next: 'Continue',\n skipStep: 'Skip this step',\n finish: 'Finish',\n approve: 'Approve',\n working: 'Working…',\n stepWorking: '{step}… {elapsed}',\n starting: 'Starting…',\n start: 'Start',\n notStarted: 'Not started yet. Press Start to run this step.',\n retry: 'Retry',\n failed: 'This step did not finish.',\n upstreamFailed: '“{step}” failed{error}. Retry it before this step can go on.',\n upstreamSkippedAfterFailure:\n '“{step}” failed{error} and was skipped: this step goes on without its result.',\n skippedAfterFailure: 'Skipped after it failed{error}.',\n blocked: 'Starts after {steps}.',\n awaitingReview: 'Waiting for approval.',\n approved: 'Approved.',\n skipped: 'Skipped.',\n branch: 'Runs alongside; its result joins the thread',\n complete: 'Done',\n restart: 'Start again',\n filesHeading: 'Already in the workspace ({count})',\n addedHeading: 'Added for this step ({count})',\n noFiles: 'No files yet.',\n fileReading: 'Reading…',\n fileReady: 'Ready',\n fileFailed: 'Could not be read',\n readingFiles: 'Reading {current} of {count} files…',\n uploadingFiles: 'Uploading {count} files…',\n uploadingFile: 'Uploading 1 file…',\n uploadingAny: 'Uploading…',\n uploadsFailed: 'Retry or remove the {count} files that did not upload',\n uploadFailed: 'Retry or remove the file that did not upload',\n fileUploading: 'Uploading…',\n fileUploadFailed: 'Did not upload',\n retryUpload: 'Retry',\n removeUpload: 'Remove',\n waitingForDocuments: 'Waiting for {count} documents to finish processing',\n waitingForDocument: 'Waiting for 1 document to finish processing',\n markSent: 'Mark as sent',\n}\n\n/** A file the upload step lists (what is in the run's workspace). */\nexport interface WorkflowRunnerFile {\n id: string\n name: string\n /**\n * Where it is: still being sent (`uploading`; no document yet), not sent (`upload-failed`, with\n * `error`), being read (`processing`), `ready`, or not readable (`failed`). Absent = not known.\n */\n status?: 'uploading' | 'upload-failed' | 'processing' | 'ready' | 'failed'\n /** Why it did not upload (`upload-failed`). */\n error?: string\n /** The upload step it was added on in this run (listed first there, and holds it while read). */\n addedFor?: string\n}\n\nexport interface WorkflowRunnerProps extends Pick<SchemaFormProps, 'renderIcon' | 'people'> {\n workflow: WorkflowDefinition\n run: WorkflowRunView\n /** An agent step's output (its answer, a drafted document). */\n renderAgentOutput: (step: WorkflowAgentStep, state: WorkflowStepState | undefined) => ReactNode\n /** A review's extras while it waits (e.g. who to ask). */\n renderReview?: (step: WorkflowReviewStep) => ReactNode\n /** Upload step: the host performs the upload into the run's workspace. */\n onUpload?: (files: File[], step: WorkflowUploadStep) => void | Promise<void>\n /**\n * The host is uploading files (the step cannot be completed until they are back). A host that\n * lists them one by one (`files` with `uploading` / `upload-failed`) need not set it.\n */\n uploading?: boolean\n /** What the run's workspace holds, listed on the upload step. */\n files?: WorkflowRunnerFile[]\n /** A file that did not upload: send it again. Absent: no retry. */\n onRetryUpload?: (file: WorkflowRunnerFile) => void\n /** A file that did not upload: drop it, so the step can go on without it. */\n onRemoveUpload?: (file: WorkflowRunnerFile) => void\n /** Replaces the finish screen. */\n renderComplete?: (run: WorkflowRunView) => ReactNode\n /** Leave out the stepper (the host shows it elsewhere, e.g. above the run's thread). */\n hideStepBar?: boolean\n /** A narrow panel beside a thread: tighter cards, the full width they are given. */\n compact?: boolean\n /** Where the runner hands off to the host: documents, the sign flow, mail, a review grid. */\n actions?: WorkflowRunnerActions\n /** A document's name by id (chips show it instead of the id). */\n nameOfDoc?: (id: string) => string | undefined\n labels?: Partial<WorkflowRunnerLabels>\n /** The wording of action steps, assignees, send-backs and approvals. */\n partsLabels?: Partial<WorkflowStepPartsLabels>\n /**\n * Test ids: `<prefix>-step-<id>` (pill), `<prefix>-<id>` (body), `<prefix>-field-<name>`,\n * `<prefix>-next` / `-back`, `<prefix>-done`.\n */\n testIdPrefix?: string\n className?: string\n}\n\nexport function WorkflowRunner({\n workflow,\n run,\n renderAgentOutput,\n renderReview,\n onUpload,\n uploading = false,\n files,\n onRetryUpload,\n onRemoveUpload,\n renderComplete,\n renderIcon,\n people,\n actions,\n nameOfDoc,\n hideStepBar,\n compact,\n labels,\n partsLabels,\n testIdPrefix = 'workflow-run',\n className,\n}: WorkflowRunnerProps) {\n const l = { ...DEFAULT_WORKFLOW_RUNNER_LABELS, ...labels }\n const pl = { ...DEFAULT_WORKFLOW_STEP_PARTS_LABELS, ...partsLabels }\n // A step's card: a readable column on its own, the panel's width beside a thread.\n const box = compact ? 'p-4' : 'max-w-2xl p-6'\n const { steps, step, isComplete, action } = run\n const completion = workflow.run.kind === 'steps' ? workflow.run.completion : undefined\n const tid = (suffix: string) => `${testIdPrefix}-${suffix}`\n const levels = stepLevels(steps)\n const icon = (key?: string) => (key && renderIcon ? renderIcon(key) : undefined)\n\n // An upload step's files are read before the run goes on (it can still be skipped).\n const added = step?.kind === 'upload' ? (files ?? []).filter((f) => f.addedFor === step.id) : []\n const unread = added.filter((f) => f.status === 'processing').length\n const reading = action === 'complete' && unread > 0\n // Nor does it go on while its files are being sent: completing records the files it took, and a\n // file still on its way has no document yet. One that did not upload is retried or removed first.\n const sending = added.filter((f) => f.status === 'uploading').length\n const unsent = added.filter((f) => f.status === 'upload-failed').length\n const uploadHold = step?.kind === 'upload' && (sending > 0 || uploading || unsent > 0)\n\n // An agent step whose turn waits for documents to finish processing is on its way, too.\n const docsWait = !!step && waitingDocuments(run.stateOf(step.id)).length > 0\n\n const nextLabel = sending\n ? sending === 1\n ? l.uploadingFile\n : l.uploadingFiles.replace('{count}', String(sending))\n : uploadHold && uploading\n ? l.uploadingAny\n : uploadHold\n ? unsent === 1\n ? l.uploadFailed\n : l.uploadsFailed.replace('{count}', String(unsent))\n : reading\n ? l.readingFiles\n .replace('{current}', String(Math.min(added.length - unread + 1, added.length)))\n .replace('{count}', String(added.length))\n : action === 'start'\n ? l.start\n : action === 'retry'\n ? l.retry\n : action === 'finish'\n ? l.finish\n : action === 'complete' && step?.kind === 'review'\n ? l.approve\n : action === 'complete' && step?.kind === 'action'\n ? l.markSent\n : action === 'wait' && (run.isRunning || run.busy || docsWait)\n ? l.working\n : ((step && !run.isLocked(step.id) ? step.nextLabel : undefined) ?? l.next)\n\n return (\n <div className={cn(compact ? 'space-y-3' : 'space-y-6', className)} data-testid={testIdPrefix}>\n {!hideStepBar && (\n <WorkflowStepBar\n run={run}\n levels={levels}\n doneTitle={completion?.title ?? l.complete}\n doneIcon={icon(completion?.icon)}\n icon={icon}\n tid={tid}\n />\n )}\n\n {isComplete ? (\n (renderComplete?.(run) ?? (\n <Card className=\"mx-auto max-w-lg p-8 text-center\" data-testid={tid('done')}>\n <CheckCircle2 className=\"mx-auto size-12 text-primary\" />\n <h2 className=\"mt-4 text-xl font-semibold\">{completion?.title ?? l.complete}</h2>\n {completion?.description && (\n <p className=\"mt-1 text-sm text-muted-foreground\">{completion.description}</p>\n )}\n <Button\n variant=\"outline\"\n className=\"mt-6\"\n onClick={run.restart}\n data-testid={tid('restart')}\n >\n {l.restart}\n </Button>\n </Card>\n ))\n ) : step ? (\n <div key={step.id} className=\"space-y-3\">\n <StepNotices run={run} step={step} l={l} tid={tid} />\n {run.phaseOf(step.id) === 'blocked' ? (\n <Card className={cn(box, 'p-6')} data-testid={tid(step.id)}>\n <p className=\"text-sm text-muted-foreground\" data-testid={tid(`${step.id}-blocked`)}>\n {l.blocked.replace(\n '{steps}',\n stepDependencies(steps, step.id)\n .map((d) => steps.find((s) => s.id === d)?.title ?? d)\n .join(', ')\n )}\n </p>\n </Card>\n ) : step.kind === 'form' ? (\n <Card className={cn(box, 'space-y-4')} data-testid={tid(step.id)}>\n <StepHeading step={step} icon={icon(step.icon)} testId={tid(`${step.id}-title`)} />\n <SentBackNote state={run.stateOf(step.id)} l={pl} testId={tid(step.id)} />\n <AssigneeLine run={run} stepId={step.id} l={pl} testId={tid(step.id)} />\n <fieldset disabled={run.isLocked(step.id)} className=\"contents\">\n <SchemaForm\n fields={step.inputs}\n values={run.inputs}\n onChange={run.setInput}\n errors={run.errors}\n renderIcon={renderIcon}\n people={people}\n onEnterSubmit={() => void run.next()}\n testIdPrefix={tid('field')}\n />\n </fieldset>\n {run.actionError && (\n <p className=\"text-sm text-destructive\" data-testid={tid('action-error')}>\n {run.actionError}\n </p>\n )}\n </Card>\n ) : step.kind === 'upload' ? (\n <Card className={cn(box, 'space-y-4')} data-testid={tid(step.id)}>\n <SentBackNote state={run.stateOf(step.id)} l={pl} testId={tid(step.id)} />\n <AssigneeLine run={run} stepId={step.id} l={pl} testId={tid(step.id)} />\n <>\n <UploadDropzone\n onFiles={(picked) => void onUpload?.(picked, step)}\n uploading={uploading}\n disabled={!onUpload}\n accept={step.accept}\n title={step.title}\n description={step.description}\n hint={step.hint}\n testId={tid(`${step.id}-drop`)}\n />\n {files && (\n <UploadFiles\n onRetry={onRetryUpload}\n onRemove={onRemoveUpload}\n added={added}\n others={files.filter((f) => f.addedFor !== step.id)}\n l={l}\n testId={tid(`${step.id}-files`)}\n />\n )}\n </>\n {run.actionError && <p className=\"text-sm text-destructive\">{run.actionError}</p>}\n </Card>\n ) : step.kind === 'review' ? (\n <Card className={cn(box, 'space-y-4')} data-testid={tid(step.id)}>\n <StepHeading step={step} icon={icon(step.icon)} />\n <SentBackNote state={run.stateOf(step.id)} l={pl} testId={tid(step.id)} />\n <p className=\"whitespace-pre-line text-sm text-muted-foreground\">\n {reviewInstructions(step, run.inputs)}\n </p>\n <AssigneeLine run={run} stepId={step.id} l={pl} testId={tid(step.id)} />\n {/* A recorded approval says who approved below; without one, the status says it. */}\n {!(run.phaseOf(step.id) === 'done' && run.stateOf(step.id)?.by) && (\n <p className=\"text-sm\" data-testid={tid(`${step.id}-status`)}>\n {run.phaseOf(step.id) === 'done'\n ? l.approved\n : run.phaseOf(step.id) === 'skipped'\n ? l.skipped\n : l.awaitingReview}\n </p>\n )}\n {(step.fields ?? []).length > 0 && run.phaseOf(step.id) === 'ready' && (\n <SchemaForm\n fields={step.fields ?? []}\n values={run.inputs}\n onChange={run.setInput}\n errors={run.errors}\n renderIcon={renderIcon}\n people={people}\n testIdPrefix={tid('field')}\n />\n )}\n <ApprovalEvidence\n run={run}\n step={step}\n actions={actions}\n nameOfDoc={nameOfDoc}\n l={pl}\n testId={tid(step.id)}\n />\n {run.phaseOf(step.id) === 'ready' && renderReview?.(step)}\n <SendBackControl run={run} step={step} l={pl} testId={tid(step.id)} />\n {run.actionError && <p className=\"text-sm text-destructive\">{run.actionError}</p>}\n </Card>\n ) : step.kind === 'action' ? (\n <Card className={cn(box, 'space-y-4')} data-testid={tid(step.id)}>\n <ActionStepBody\n step={step}\n run={run}\n actions={actions}\n nameOfDoc={nameOfDoc}\n heading={<StepHeading step={step} icon={icon(step.icon)} />}\n l={pl}\n testId={tid(step.id)}\n />\n {run.actionError && <p className=\"text-sm text-destructive\">{run.actionError}</p>}\n </Card>\n ) : (\n <AgentStepBody\n step={step}\n run={run}\n renderAgentOutput={renderAgentOutput}\n icon={icon(step.icon)}\n compact={compact}\n nameOfDoc={nameOfDoc}\n extra={\n <>\n <SentBackNote state={run.stateOf(step.id)} l={pl} testId={tid(step.id)} />\n <RedlineOpen\n step={step}\n state={run.stateOf(step.id)}\n actions={actions}\n l={pl}\n testId={tid(step.id)}\n />\n </>\n }\n l={l}\n tid={tid}\n />\n )}\n </div>\n ) : null}\n\n {!isComplete && (\n <div\n className={cn(\n 'flex items-center justify-between border-t border-border pt-4',\n compact && 'flex-wrap gap-2 pt-3'\n )}\n >\n <Button\n variant=\"ghost\"\n onClick={run.back}\n disabled={!run.canBack}\n data-testid={tid('back')}\n >\n <ArrowLeft className=\"size-4\" /> {l.back}\n </Button>\n <div\n className={cn('flex items-center gap-2', compact && 'ml-auto flex-wrap justify-end')}\n >\n {step &&\n // A step that commits (creates the matter, starts the thread) is what the run stands on.\n !step.commit &&\n ['ready', 'blocked', 'failed'].includes(run.phaseOf(step.id)) && (\n <Button\n variant=\"ghost\"\n onClick={() => void run.skip(step.id)}\n disabled={run.busy}\n data-testid={tid('skip-step')}\n >\n {l.skipStep}\n </Button>\n )}\n <Button\n onClick={() => void run.next()}\n disabled={action === 'wait' || reading || uploadHold}\n data-testid={tid('next')}\n >\n {nextLabel}\n {reading ||\n (uploadHold && unsent === 0) ||\n (action === 'wait' && (run.isRunning || run.busy || docsWait)) ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <ArrowRight className=\"size-4\" />\n )}\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n}\n\n/** What the upload step lists: this step's files first, with their status; the rest folded. */\nfunction UploadFiles({\n added,\n others,\n onRetry,\n onRemove,\n l,\n testId,\n}: {\n added: WorkflowRunnerFile[]\n others: WorkflowRunnerFile[]\n onRetry?: (file: WorkflowRunnerFile) => void\n onRemove?: (file: WorkflowRunnerFile) => void\n l: WorkflowRunnerLabels\n testId: string\n}) {\n const heading = 'text-xs font-semibold uppercase tracking-wide text-muted-foreground'\n const row = (f: WorkflowRunnerFile) => (\n <div\n key={f.id}\n className=\"flex items-center gap-2 text-sm text-muted-foreground\"\n data-status={f.status}\n data-testid={`${testId}-file-${f.id}`}\n >\n <FileText className=\"size-3.5 shrink-0 text-primary\" />\n <span className=\"min-w-0 flex-1 truncate\" title={f.name}>\n {f.name}\n </span>\n {f.status === 'uploading' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs\">\n <Loader2 className=\"size-3 animate-spin\" /> {l.fileUploading}\n </span>\n )}\n {f.status === 'upload-failed' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs text-destructive\" role=\"alert\">\n <AlertTriangle className=\"size-3\" /> {l.fileUploadFailed}\n {f.error ? `: ${f.error}` : ''}\n {onRetry && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-2\"\n onClick={() => onRetry(f)}\n data-testid={`${testId}-file-${f.id}-retry`}\n >\n <RotateCw className=\"size-3\" /> {l.retryUpload}\n </Button>\n )}\n {onRemove && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-2\"\n onClick={() => onRemove(f)}\n data-testid={`${testId}-file-${f.id}-remove`}\n >\n <X className=\"size-3\" /> {l.removeUpload}\n </Button>\n )}\n </span>\n )}\n {f.status === 'processing' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs\">\n <Loader2 className=\"size-3 animate-spin\" /> {l.fileReading}\n </span>\n )}\n {f.status === 'ready' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs text-primary\">\n <Check className=\"size-3\" /> {l.fileReady}\n </span>\n )}\n {f.status === 'failed' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs text-destructive\">\n <AlertTriangle className=\"size-3\" /> {l.fileFailed}\n </span>\n )}\n </div>\n )\n return (\n <div className=\"space-y-3\" data-testid={testId}>\n {added.length > 0 && (\n <div className=\"space-y-1\" data-testid={`${testId}-added`}>\n <p className={heading}>{l.addedHeading.replace('{count}', String(added.length))}</p>\n {added.map(row)}\n </div>\n )}\n {added.length === 0 && others.length === 0 && (\n <p className=\"text-sm text-muted-foreground\">{l.noFiles}</p>\n )}\n {others.length > 0 && (\n <details className=\"space-y-1\" data-testid={`${testId}-others`}>\n <summary className={cn(heading, 'cursor-pointer select-none')}>\n {l.filesHeading.replace('{count}', String(others.length))}\n </summary>\n <div className=\"mt-1 max-h-48 space-y-1 overflow-y-auto\">{others.map(row)}</div>\n </details>\n )}\n </div>\n )\n}\n\nfunction StepHeading({\n step,\n icon,\n testId,\n}: {\n step: WorkflowStep\n icon?: ReactNode\n testId?: string\n}) {\n return (\n <div className=\"min-w-0\">\n <p className=\"flex items-center gap-2 text-sm font-medium\" data-testid={testId}>\n {icon && (\n <span className=\"flex size-4 items-center justify-center text-primary [&_svg]:size-4\">\n {icon}\n </span>\n )}\n {step.title}\n </p>\n {step.description && <p className=\"mt-1 text-xs text-muted-foreground\">{step.description}</p>}\n </div>\n )\n}\n\n/** m:ss (h:mm:ss past an hour). */\nexport function formatElapsed(ms: number): string {\n const total = Math.max(0, Math.floor(ms / 1000))\n const h = Math.floor(total / 3600)\n const m = Math.floor((total % 3600) / 60)\n const sec = String(total % 60).padStart(2, '0')\n return h ? `${h}:${String(m).padStart(2, '0')}:${sec}` : `${m}:${sec}`\n}\n\n/** \"<title>… 0:42\": the running step and how long it has run, ticking. */\nfunction StepWorking({ title, since, label }: { title: string; since?: string; label: string }) {\n // Without the server's start time, from when this screen first saw it running.\n const seen = useRef(Date.now())\n const start = (since && Date.parse(since)) || seen.current\n const [now, setNow] = useState(() => Date.now())\n useEffect(() => {\n const t = setInterval(() => setNow(Date.now()), 1000)\n return () => clearInterval(t)\n }, [])\n return (\n <span>{label.replace('{step}', title).replace('{elapsed}', formatElapsed(now - start))}</span>\n )\n}\n\nfunction AgentStepBody({\n step,\n run,\n renderAgentOutput,\n icon,\n extra,\n compact,\n nameOfDoc,\n l,\n tid,\n}: {\n step: WorkflowAgentStep\n run: WorkflowRunView\n renderAgentOutput: WorkflowRunnerProps['renderAgentOutput']\n icon?: ReactNode\n /** Under the status: a send-back note, \"Open in Editor\". */\n extra?: ReactNode\n compact?: boolean\n nameOfDoc?: (id: string) => string | undefined\n l: WorkflowRunnerLabels\n tid: (suffix: string) => string\n}) {\n const state = run.stateOf(step.id)\n const phase = run.phaseOf(step.id)\n // Waiting for documents to finish processing (named when the runner knows them).\n const pending = waitingDocuments(state)\n const pendingNames = pending.flatMap((ref) => nameOfDoc?.(splitDocRef(ref).id) ?? [])\n const header = (\n <div className=\"flex items-start justify-between gap-3\">\n <StepHeading step={step} icon={icon} />\n {phase === 'failed' && (\n <div className=\"flex shrink-0 items-center gap-2\">\n {run.retry && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => void run.retry?.(step.id)}\n disabled={run.busy}\n data-testid={tid(`${step.id}-retry`)}\n >\n <RotateCw className=\"size-4\" /> {l.retry}\n </Button>\n )}\n </div>\n )}\n </div>\n )\n const status = (\n <div className=\"space-y-1\">\n {step.branch && (\n <p className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <GitBranch className=\"size-3.5\" /> {l.branch}\n </p>\n )}\n {(phase === 'running' || (phase === 'ready' && !run.needsStart)) && !state?.text && (\n <p\n className=\"flex items-center gap-2 text-sm text-muted-foreground\"\n data-testid={tid(`${step.id}-working`)}\n >\n <Loader2 className=\"size-4 animate-spin\" />{' '}\n {phase === 'ready' ? (\n l.starting\n ) : (\n <StepWorking title={step.title} since={state?.startedAt} label={l.stepWorking} />\n )}\n </p>\n )}\n {pending.length > 0 && (\n <div\n className=\"space-y-0.5 text-sm text-muted-foreground\"\n data-testid={tid(`${step.id}-waiting-documents`)}\n >\n <p className=\"flex items-center gap-2\">\n <Hourglass className=\"size-4\" />\n {pending.length === 1\n ? l.waitingForDocument\n : l.waitingForDocuments.replace('{count}', String(pending.length))}\n </p>\n {pendingNames.length > 0 && <p className=\"pl-6 text-xs\">{pendingNames.join(', ')}</p>}\n </div>\n )}\n {phase === 'failed' && (\n <p className=\"text-sm text-destructive\" data-testid={tid(`${step.id}-failed`)}>\n {state?.error || l.failed}\n </p>\n )}\n {phase === 'skipped' && (\n <p className=\"text-sm text-muted-foreground\" data-testid={tid(`${step.id}-skipped`)}>\n {state?.skippedAfterFailure\n ? l.skippedAfterFailure.replace('{error}', state.error ? `: ${state.error}` : '')\n : l.skipped}\n </p>\n )}\n {extra}\n </div>\n )\n\n if (step.output === 'artifact' && !compact) {\n return (\n <div\n className=\"grid gap-4 lg:grid-cols-[minmax(0,18rem)_minmax(0,1fr)]\"\n data-testid={tid(step.id)}\n >\n <Card className=\"h-fit space-y-3 p-5\">\n {header}\n {status}\n </Card>\n <div className=\"min-w-0\">{renderAgentOutput(step, state)}</div>\n </div>\n )\n }\n return (\n <Card className={cn('space-y-3', compact ? 'p-4' : 'p-6')} data-testid={tid(step.id)}>\n {header}\n {status}\n {renderAgentOutput(step, state)}\n </Card>\n )\n}\n\n/**\n * What the step in view must say before anything else: that it has not started and why (a ready\n * agent or action step no run is under way for), and every step it waits for that failed — still\n * failed (it is blocked until that is retried) or skipped after failing (it goes on without it).\n */\nfunction StepNotices({\n run,\n step,\n l,\n tid,\n}: {\n run: WorkflowRunView\n step: WorkflowStep\n l: WorkflowRunnerLabels\n tid: (suffix: string) => string\n}) {\n const notStarted = !isPersonStep(step) && run.needsStart && run.phaseOf(step.id) === 'ready'\n const failed = run.failedUpstreamOf(step.id)\n if (!notStarted && failed.length === 0) return null\n const why = (error?: string | null) => (error ? `: ${error}` : '')\n return (\n <div className=\"space-y-2\" data-testid={tid(`${step.id}-notices`)}>\n {notStarted && (\n <p\n className={cn(\n 'flex items-start gap-2 text-sm',\n run.runError ? 'text-destructive' : 'text-muted-foreground'\n )}\n data-testid={tid(`${step.id}-not-started`)}\n >\n {run.runError && <AlertTriangle className=\"mt-0.5 size-4 shrink-0\" />}\n {run.runError || l.notStarted}\n </p>\n )}\n {failed.map(({ step: s, state }) => (\n <p\n key={s.id}\n className={cn(\n 'flex items-start gap-2 rounded-md border px-3 py-2 text-sm',\n state.status === 'failed'\n ? 'border-destructive/40 text-destructive'\n : 'border-amber-500/40 text-amber-700 dark:text-amber-300'\n )}\n data-testid={tid(`${step.id}-upstream-${s.id}`)}\n >\n <AlertTriangle className=\"mt-0.5 size-4 shrink-0\" />\n {(state.status === 'failed' ? l.upstreamFailed : l.upstreamSkippedAfterFailure)\n .replace('{step}', s.title)\n .replace('{error}', why(state.error))}\n </p>\n ))}\n </div>\n )\n}\n","/**\n * The workflow a surface asked to start, until the launch host takes it: any surface calls\n * `openWorkflowLaunch` (a document's \"Translate\", a file menu's \"Run workflow\"); the launch host\n * mounted once in the shell (`WorkflowLaunchHost`, the `workflowLaunch` global dialog) opens the\n * one config dialog for it, prefilled, or starts it at once.\n */\nimport { closeDialog, openDialog, useDialogProps } from '../../provider/dialog-registry'\nimport type { WorkflowInputs, WorkflowLanding, WorkflowScope } from './types'\nimport type { WorkflowContext } from './workflow'\n\n/**\n * A request to start a workflow with some inputs preset. `inputs` set fields by name; `context`\n * (files in view, selected text, an image) fills the fields that declare they accept it; `scope`\n * sets the workflow's file field. `landing` overrides where the run lands. With `autoStart` a\n * request whose inputs are complete starts without asking (the dialog opens otherwise).\n */\nexport interface WorkflowLaunchRequest {\n workflowId: string\n inputs?: WorkflowInputs\n context?: WorkflowContext\n scope?: WorkflowScope\n landing?: WorkflowLanding\n autoStart?: boolean\n}\n\n/** Ask for a workflow to start (the launch host opens its dialog, or starts it). */\nexport function openWorkflowLaunch(next: WorkflowLaunchRequest): void {\n openDialog('workflowLaunch', next)\n}\n\n/** The launch host took the request (or it was dismissed). */\nexport function closeWorkflowLaunch(): void {\n closeDialog('workflowLaunch')\n}\n\n/** The open launch request, or null. */\nexport function useWorkflowLaunchRequest(): WorkflowLaunchRequest | null {\n return useDialogProps('workflowLaunch')\n}\n","/**\n * A person's step of a workflow run, done from the thread's top bar: fill in a form, upload the\n * step's files (or say they are added), approve a review (with its fields) or send the work back, sign or decline a\n * signature, open and mark an email draft as sent, open a finished review or a tracked-changes\n * version. Whoever does it is recorded on the step.\n */\nimport { useRef, useState } from 'react'\nimport { AlertTriangle, Check, Loader2, MoreHorizontal, RotateCw, X } from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n Textarea,\n} from '@arbidocs/react/ui'\nimport { UploadDropzone } from '../../files/UploadDropzone'\nimport { SchemaForm } from './SchemaForm'\nimport { defaultInputs, validateInputs } from './workflow'\nimport { sendBackTargets, stepFields, type WorkflowStepPhase } from './run'\nimport {\n type WorkflowInputs,\n type WorkflowStep,\n type WorkflowStepState,\n type WorkflowUploadStep,\n} from './types'\n\nexport interface WorkflowStepActionProps {\n step: WorkflowStep\n phase: WorkflowStepPhase\n /** Every step of the run and its state (a send-back offers the earlier ones). */\n steps: WorkflowStep[]\n states: Record<string, WorkflowStepState>\n /** The run's inputs so far (a form opens with them). */\n inputs: WorkflowInputs\n /** The person on screen: a signature is theirs to sign when they are a pending signer. */\n me?: string\n nameOf?: (id: string) => string | undefined\n /** Done; an upload step names the documents added on it (`onUpload`). */\n onComplete: (inputs?: WorkflowInputs, documents?: string[]) => Promise<unknown>\n /**\n * Sends an upload step's files (to the run's workspace) and resolves with their document ids.\n * With it the step is an upload, done with exactly the files added here; without it the step\n * is only marked as done (\"Files are added\").\n */\n onUpload?: (files: File[]) => Promise<string[]>\n onSendBack?: (to: string, note?: string) => Promise<unknown>\n onDecline?: (note?: string) => Promise<unknown>\n onOpenDocument?: (documentId: string) => void\n onOpenDraft?: (draftId: string) => void\n onOpenReview?: (tags: string[], documents: string[]) => void\n}\n\nconst LABELS: Record<string, string> = {\n form: 'Fill in',\n upload: 'Files are added',\n review: 'Approve',\n}\n\nconst asForm = (step: WorkflowStep) => ({\n id: step.id,\n title: step.title,\n description: '',\n inputs: stepFields(step),\n run: { kind: 'operation' as const },\n landing: 'chat' as const,\n})\n\nexport function WorkflowStepAction({\n step,\n phase,\n steps,\n states,\n inputs,\n me,\n nameOf,\n onComplete,\n onUpload,\n onSendBack,\n onDecline,\n onOpenDocument,\n onOpenDraft,\n onOpenReview,\n}: WorkflowStepActionProps) {\n if (step.kind === 'upload' && phase === 'ready' && onUpload)\n return <UploadStepAction step={step} onUpload={onUpload} onComplete={onComplete} />\n return (\n <StepAction\n {...{ step, phase, steps, states, inputs, me, nameOf, onComplete, onSendBack, onDecline }}\n {...{ onOpenDocument, onOpenDraft, onOpenReview }}\n />\n )\n}\n\ninterface UploadedFile {\n key: number\n file: File\n status: 'uploading' | 'added' | 'failed'\n documents: string[]\n error?: string\n}\n\nconst FILE_STATUS: Record<UploadedFile['status'], string> = {\n uploading: 'Uploading',\n added: 'Added',\n failed: 'Failed',\n}\n\n/**\n * An upload step done from the bar: the drop zone is its action, each file is listed as it\n * uploads (or with why it did not, to try again or remove), and Done records exactly the\n * documents added here. Files already in the workspace (added in the chat, say) complete it from\n * its \"…\" menu.\n */\nfunction UploadStepAction({\n step,\n onUpload,\n onComplete,\n}: {\n step: WorkflowUploadStep\n onUpload: (files: File[]) => Promise<string[]>\n onComplete: WorkflowStepActionProps['onComplete']\n}) {\n const [files, setFiles] = useState<UploadedFile[]>([])\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const seq = useRef(0)\n const tid = `workflow-step-action-${step.id}`\n const uploading = files.some((f) => f.status === 'uploading')\n const documents = files.flatMap((f) => f.documents)\n const settle = (key: number, patch: Partial<UploadedFile>) =>\n setFiles((all) => all.map((f) => (f.key === key ? { ...f, ...patch } : f)))\n const send = (key: number, file: File) =>\n onUpload([file]).then(\n (ids) => settle(key, { status: 'added', documents: ids, error: undefined }),\n (e: unknown) =>\n settle(key, {\n status: 'failed',\n error: e instanceof Error && e.message ? e.message : 'Upload failed',\n })\n )\n const add = (picked: File[]) => {\n const batch = picked.map((file) => ({\n key: ++seq.current,\n file,\n status: 'uploading' as const,\n documents: [],\n }))\n setFiles((all) => [...all, ...batch])\n for (const f of batch) void send(f.key, f.file)\n }\n const retry = (f: UploadedFile) => {\n settle(f.key, { status: 'uploading', error: undefined })\n void send(f.key, f.file)\n }\n const remove = (key: number) => setFiles((all) => all.filter((f) => f.key !== key))\n const complete = async (docs?: string[]) => {\n setBusy(true)\n setError(null)\n try {\n await onComplete(undefined, docs)\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Could not do that')\n } finally {\n setBusy(false)\n }\n }\n return (\n <div className=\"space-y-2 p-1\" data-testid={tid}>\n <UploadDropzone\n onFiles={add}\n accept={step.accept}\n hint={step.hint}\n disabled={busy}\n className=\"py-4\"\n testId={`${tid}-drop`}\n />\n <ul aria-live=\"polite\" className=\"space-y-0.5 text-xs\" data-testid={`${tid}-added`}>\n {files.map((f) => (\n <li key={f.key} className=\"flex items-center gap-1.5\">\n {f.status === 'uploading' ? (\n <Loader2 className=\"size-3 shrink-0 animate-spin text-muted-foreground\" aria-hidden />\n ) : f.status === 'added' ? (\n <Check className=\"size-3 shrink-0 text-success\" aria-hidden />\n ) : (\n <AlertTriangle className=\"size-3 shrink-0 text-destructive\" aria-hidden />\n )}\n <span className=\"sr-only\">{FILE_STATUS[f.status]}:</span>\n <span className=\"min-w-0 truncate\">{f.file.name}</span>\n {f.status === 'failed' && (\n <>\n <span className=\"min-w-0 truncate text-destructive\">{f.error}</span>\n <span className=\"ml-auto flex shrink-0 gap-0.5\">\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-6\"\n aria-label={`Retry ${f.file.name}`}\n disabled={busy}\n onClick={() => retry(f)}\n >\n <RotateCw className=\"size-3\" aria-hidden />\n </Button>\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"size-6\"\n aria-label={`Remove ${f.file.name}`}\n onClick={() => remove(f.key)}\n >\n <X className=\"size-3\" aria-hidden />\n </Button>\n </span>\n </>\n )}\n </li>\n ))}\n </ul>\n <div className=\"flex gap-1\">\n <Button\n size=\"sm\"\n className=\"flex-1\"\n disabled={busy || uploading || !documents.length}\n onClick={() => void complete(documents)}\n data-testid={`${tid}-done`}\n >\n Done\n </Button>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"px-2\"\n disabled={busy || uploading}\n aria-label=\"More for this step\"\n data-testid={`${tid}-more`}\n >\n <MoreHorizontal className=\"size-4\" aria-hidden />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {/* Files added elsewhere (the chat): the server picks the step's files. */}\n <DropdownMenuItem onSelect={() => void complete()} data-testid={`${tid}-already-added`}>\n Files are already added\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n {error && (\n <p role=\"alert\" className=\"text-xs text-destructive\">\n {error}\n </p>\n )}\n </div>\n )\n}\n\nfunction StepAction({\n step,\n phase,\n steps,\n states,\n inputs,\n me,\n nameOf,\n onComplete,\n onSendBack,\n onDecline,\n onOpenDocument,\n onOpenDraft,\n onOpenReview,\n}: Omit<WorkflowStepActionProps, 'onUpload'>) {\n const fields = stepFields(step)\n const [values, setValues] = useState<WorkflowInputs>(() =>\n fields.length ? { ...defaultInputs(asForm(step)), ...inputs } : {}\n )\n const [open, setOpen] = useState<'form' | 'send-back' | 'decline' | null>(null)\n const [note, setNote] = useState('')\n const targets = sendBackTargets(steps, states, step.id)\n const [to, setTo] = useState(targets[0]?.id ?? '')\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const state = states[step.id]\n const tid = `workflow-step-action-${step.id}`\n\n const run = async (fn: () => unknown) => {\n setBusy(true)\n setError(null)\n try {\n await fn()\n setOpen(null)\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Could not do that')\n } finally {\n setBusy(false)\n }\n }\n const errorLine = error && <p className=\"text-xs text-destructive\">{error}</p>\n\n // A finished tabular review opens its grid. (A finished step's documents — a signed version, a\n // tracked-changes version, a draft — are the step's document cards, above.)\n if (phase === 'done') {\n const tags = state?.output?.tag_ext_ids as string[] | undefined\n const docs = (state?.output?.doc_ext_ids as string[] | undefined) ?? []\n return step.kind === 'action' &&\n step.action.type === 'tabular_review' &&\n onOpenReview &&\n tags ? (\n <div className=\"p-1\">\n <Button\n size=\"sm\"\n className=\"w-full\"\n onClick={() => onOpenReview(tags, docs)}\n data-testid={`${tid}-open-review`}\n >\n Open the review\n </Button>\n </div>\n ) : null\n }\n\n if (step.kind === 'action') {\n const waiting = state?.waiting\n if (phase !== 'waiting') return null\n if (step.action.type === 'email_draft')\n return (\n <div className=\"space-y-1 p-1\" data-testid={tid}>\n {waiting?.draft_id && onOpenDraft && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"w-full\"\n onClick={() => onOpenDraft(waiting.draft_id as string)}\n data-testid={`${tid}-open-draft`}\n >\n Open draft\n </Button>\n )}\n <Button\n size=\"sm\"\n className=\"w-full\"\n disabled={busy}\n onClick={() => void run(() => onComplete())}\n data-testid={`${tid}-mark-sent`}\n >\n Mark as sent\n </Button>\n {errorLine}\n </div>\n )\n if (step.action.type === 'sign') {\n const signers = waiting?.signers ?? []\n const signed = waiting?.signed ?? []\n const mine = !!me && signers.includes(me) && !signed.includes(me)\n return (\n <div className=\"space-y-1 p-1\" data-testid={tid}>\n {signers.map((id) => (\n <p\n key={id}\n className=\"flex justify-between gap-2 text-xs\"\n data-testid={`${tid}-signer-${id}`}\n >\n <span className=\"truncate\">{nameOf?.(id) ?? id}</span>\n <span className=\"text-muted-foreground\">\n {signed.includes(id) ? 'Signed' : 'Not signed yet'}\n </span>\n </p>\n ))}\n {mine && waiting?.doc_ext_id && onOpenDocument && (\n <Button\n size=\"sm\"\n className=\"w-full\"\n onClick={() => onOpenDocument(waiting.doc_ext_id as string)}\n data-testid={`${tid}-sign`}\n >\n Open and sign\n </Button>\n )}\n {mine && onDecline && open !== 'decline' && (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n className=\"w-full\"\n onClick={() => setOpen('decline')}\n data-testid={`${tid}-decline`}\n >\n Decline\n </Button>\n )}\n {open === 'decline' && (\n <>\n <Textarea\n rows={2}\n value={note}\n placeholder=\"Why are you declining? (optional)\"\n onChange={(e) => setNote(e.target.value)}\n data-testid={`${tid}-decline-note`}\n />\n <Button\n size=\"sm\"\n variant=\"destructive\"\n className=\"w-full\"\n disabled={busy}\n onClick={() => void run(() => onDecline?.(note.trim() || undefined))}\n data-testid={`${tid}-decline-confirm`}\n >\n Decline to sign\n </Button>\n </>\n )}\n {errorLine}\n </div>\n )\n }\n return null\n }\n\n if (phase !== 'ready' || step.kind === 'agent') return null\n\n if (open === 'send-back') {\n const target = targets.some((t) => t.id === to) ? to : (targets[0]?.id ?? '')\n return (\n <div className=\"space-y-2 p-1\" data-testid={`${tid}-send-back-form`}>\n <select\n className=\"flex h-8 w-full rounded-md border border-input bg-background px-2 text-xs\"\n value={target}\n onChange={(e) => setTo(e.target.value)}\n aria-label=\"Send back to\"\n data-testid={`${tid}-send-back-to`}\n >\n {targets.map((t) => (\n <option key={t.id} value={t.id}>\n {t.title}\n </option>\n ))}\n </select>\n <Textarea\n rows={2}\n value={note}\n placeholder=\"What needs to change? (optional)\"\n onChange={(e) => setNote(e.target.value)}\n data-testid={`${tid}-send-back-note`}\n />\n <Button\n size=\"sm\"\n className=\"w-full\"\n disabled={busy || !target}\n onClick={() => void run(() => onSendBack?.(target, note.trim() || undefined))}\n data-testid={`${tid}-send-back-confirm`}\n >\n Send back\n </Button>\n {errorLine}\n </div>\n )\n }\n\n if (fields.length && open === 'form') {\n const errors = validateInputs(asForm(step), values)\n return (\n <div className=\"space-y-2 p-1\" data-testid={tid}>\n <SchemaForm\n fields={fields}\n values={values}\n onChange={(name, value) => setValues((v) => ({ ...v, [name]: value }))}\n testIdPrefix={`workflow-step-${step.id}-field`}\n />\n {errorLine}\n <Button\n size=\"sm\"\n className=\"w-full\"\n disabled={busy || Object.keys(errors).length > 0}\n onClick={() =>\n void run(() =>\n onComplete(\n Object.fromEntries(\n fields.flatMap((f) =>\n step.kind === 'form' || (values[f.name] !== undefined && values[f.name] !== '')\n ? [[f.name, values[f.name] ?? '']]\n : []\n )\n )\n )\n )\n }\n data-testid={`${tid}-submit`}\n >\n {step.kind === 'review' ? 'Approve' : 'Done'}\n </Button>\n </div>\n )\n }\n return (\n <div className=\"space-y-1 p-1\">\n <Button\n size=\"sm\"\n className=\"w-full\"\n disabled={busy}\n onClick={() => (fields.length ? setOpen('form') : void run(() => onComplete()))}\n data-testid={tid}\n >\n {LABELS[step.kind] ?? 'Done'}\n </Button>\n {step.kind === 'review' && onSendBack && targets.length > 0 && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"w-full\"\n disabled={busy}\n onClick={() => setOpen('send-back')}\n data-testid={`${tid}-send-back`}\n >\n Send back\n </Button>\n )}\n {errorLine}\n </div>\n )\n}\n","/**\n * The labels (tags) a workflow needs in the workspace it runs in: a tabular review's columns, each\n * with the instruction the review fills it by. A workflow declares them (`requiredLabels`) and its\n * steps name them by key (`labelRef('privilege')`); before the run starts the runner finds each one\n * in the run's workspace by name, creates the ones missing, and puts their ids into the steps\n * (`withLabelIds`). Pure: the runner (`ConnectedWorkflowRunner`) does the requests.\n */\n\nimport { workflowSteps } from './run'\nimport type { WorkflowDefinition, WorkflowRequiredLabel, WorkflowStep } from './types'\n\nconst PREFIX = 'label:'\n\n/** A step's reference to a required label (a tabular review's `tags`), swapped for its id. */\nexport const labelRef = (key: string) => `${PREFIX}${key}`\n\n/** The key a reference names, or `undefined` for a plain id. */\nexport function labelRefKey(ref: string): string | undefined {\n return ref.startsWith(PREFIX) ? ref.slice(PREFIX.length) : undefined\n}\n\n/** The labels a workflow needs (none: `[]`). */\nexport function requiredLabelsOf(workflow: WorkflowDefinition): WorkflowRequiredLabel[] {\n return workflow.requiredLabels ?? []\n}\n\n/** Required-label references a workflow's steps make that `ids` does not resolve. */\nexport function unresolvedLabelRefs(\n workflow: WorkflowDefinition,\n ids: Record<string, string> = {}\n): string[] {\n return workflowSteps(workflow).flatMap((step) =>\n step.kind === 'action' && step.action.type === 'tabular_review'\n ? step.action.tags.filter((t) => {\n const key = labelRefKey(t)\n return key !== undefined && !ids[key]\n })\n : []\n )\n}\n\n/** The workflow with each required-label reference swapped for the label's id (by key). */\nexport function withLabelIds(\n workflow: WorkflowDefinition,\n ids: Record<string, string>\n): WorkflowDefinition {\n if (workflow.run.kind !== 'steps' || !Object.keys(ids).length) return workflow\n let changed = false\n const steps = workflow.run.steps.map((step): WorkflowStep => {\n if (step.kind !== 'action' || step.action.type !== 'tabular_review') return step\n const tags = step.action.tags.map((t) => ids[labelRefKey(t) ?? ''] ?? t)\n if (tags.every((t, i) => t === (step.action as { tags: string[] }).tags[i])) return step\n changed = true\n return { ...step, action: { ...step.action, tags } }\n })\n return changed ? { ...workflow, run: { ...workflow.run, steps } } : workflow\n}\n\n/** A label as the workspace lists it. */\nexport interface ExistingLabel {\n external_id: string\n name: string\n /** The tag's kind (absent: a label). Only labels and annotations can be a review's column. */\n kind?: string | null\n created_at?: string | null\n}\n\nconst COLUMN_KINDS = new Set(['label', 'annotation'])\nconst norm = (name: string) => name.trim().toLowerCase()\n\n/**\n * Which required labels the workspace already has (their ids by key) and which are missing. Only\n * label and annotation tags count (a newer issue or search tag of the same name never captures a\n * column); the same name in the same case wins over the same name in another case, and of several\n * the oldest wins, so a run keeps finding the column it made first.\n */\nexport function matchRequiredLabels(\n required: readonly WorkflowRequiredLabel[],\n existing: readonly ExistingLabel[]\n): { ids: Record<string, string>; missing: WorkflowRequiredLabel[] } {\n const oldestFirst = existing\n .filter((t) => COLUMN_KINDS.has(t.kind ?? 'label'))\n .map((t, i) => ({ t, i }))\n .sort((a, b) => (a.t.created_at ?? '').localeCompare(b.t.created_at ?? '') || a.i - b.i)\n .map(({ t }) => t)\n const ids: Record<string, string> = {}\n const missing: WorkflowRequiredLabel[] = []\n for (const label of required) {\n const name = label.name.trim()\n const found =\n oldestFirst.find((t) => t.name.trim() === name) ??\n oldestFirst.find((t) => norm(t.name) === norm(name))\n if (found) ids[label.key] = found.external_id\n else missing.push(label)\n }\n return { ids, missing }\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { ClipboardList, Copy, Eye, Pencil, Trash2 } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { ActionLink } from '../../components/ActionLink'\nimport { testIdOr } from '../../chat/test-id'\nimport { formatCount } from '../../lib/format'\n\nexport interface AgentCardLabels {\n running: string\n /** Pulse indicator aria-label. */\n runningIndicator: string\n /** Chip text; receives the running count. */\n runningCount: (count: number) => string\n /** Chip text; receives the task count (0 -> none yet). */\n taskCount: (count: number) => string\n goalMet: (met: number, total: number) => string\n watch: string\n assignTask: string\n edit: string\n copyAddress: string\n deleteAgent: (name: string) => string\n}\n\nexport const DEFAULT_AGENT_CARD_LABELS: AgentCardLabels = {\n running: 'Running',\n runningIndicator: 'Running',\n runningCount: (count) => `${count} running`,\n taskCount: (count) =>\n count > 0 ? formatCount(count, { one: 'task', other: 'tasks' }) : 'no tasks yet',\n goalMet: (met, total) => `✓ ${met}/${total} met`,\n watch: 'Watch',\n assignTask: 'Assign task',\n edit: 'Edit',\n copyAddress: 'Copy address',\n deleteAgent: (name) => `Delete agent ${name}`,\n}\n\nexport interface AgentCardTestIds {\n root: string\n watch: string\n assignTask: string\n edit: string\n copyAddress: string\n delete: string\n}\n\nexport interface AgentCardProps {\n /** Display name; also the key in the test ids (`agent-card-{name}`, `agent-edit-{name}`...). */\n name: string\n /** The agent's avatar (the app supplies its entity avatar). */\n avatar: ReactNode\n /** Tasks currently running for this agent; shows a pulse + chip when > 0. */\n runningCount: number\n /** All tasks assigned to this agent. */\n taskCount: number\n /** Extra content under the chips (the app shows what the agent can access). */\n details?: ReactNode\n /** Criteria progress of the agent's most recent goal task. */\n goalProgress?: { met: number; total: number } | null\n /** When set, a Watch action opens the live run. */\n onWatch?: () => void\n /** Each action is optional: the button is omitted when its handler is absent. */\n onAssignTask?: () => void\n onEdit?: () => void\n /** When set, a ghost \"Copy address\" action copies the agent's address (it is not shown raw). */\n onCopyAddress?: () => void\n onDelete?: () => void\n /**\n * Destination of the agent; the name becomes a real link. `onSelect` fires on a plain click\n * (modified clicks go to the browser).\n */\n href?: string\n onSelect?: () => void\n labels?: Partial<AgentCardLabels>\n /** Overrides for the default `agent-card-{name}` / `agent-watch-run-{name}` ... ids. */\n testIds?: Partial<AgentCardTestIds>\n testId?: string\n className?: string\n}\n\nconst ACTION = 'h-9 gap-1.5 px-2 text-sm pointer-coarse:h-11'\n\n/** One agent in the gallery: avatar, live task chips, and Watch / Assign task / Edit / Delete. */\nexport function AgentCard({\n name,\n avatar,\n runningCount,\n taskCount,\n goalProgress,\n details,\n onWatch,\n onAssignTask,\n onEdit,\n onCopyAddress,\n onDelete,\n href,\n onSelect,\n labels,\n testIds,\n testId,\n className,\n ...rest\n}: AgentCardProps & Omit<HTMLAttributes<HTMLDivElement>, keyof AgentCardProps>) {\n const l = { ...DEFAULT_AGENT_CARD_LABELS, ...labels }\n return (\n <div\n {...rest}\n className={cn('rounded-lg bg-muted p-4', className)}\n data-testid={testIdOr(testId ?? testIds?.root, { testId: `agent-card-${name}` })}\n data-slot=\"agent-card\"\n >\n <div className=\"flex items-start gap-3\">\n <div className=\"relative shrink-0\">\n {avatar}\n {runningCount > 0 && (\n <span\n className=\"absolute -right-0.5 -top-0.5 size-2.5 rounded-full bg-ai-ink\"\n role=\"img\"\n aria-label={l.runningIndicator}\n >\n <span className=\"absolute inset-0 animate-ping rounded-full bg-ai-ink opacity-60\" />\n </span>\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n {href ? (\n <ActionLink\n href={href}\n onSelect={onSelect}\n className=\"block max-w-full truncate text-left font-medium hover:underline\"\n >\n {name}\n </ActionLink>\n ) : (\n <p className=\"truncate font-medium\">{name}</p>\n )}\n <div className=\"mt-1.5 flex flex-wrap gap-1 text-xs text-muted-foreground\">\n {runningCount > 0 ? (\n <span className=\"rounded-full bg-ai-soft px-2 py-px text-ai-ink\">\n {l.runningCount(runningCount)}\n </span>\n ) : (\n <span className=\"rounded-full bg-background px-2 py-px\">\n {l.taskCount(taskCount)}\n </span>\n )}\n {goalProgress && (\n <span className=\"rounded-full bg-background px-2 py-px\">\n {l.goalMet(goalProgress.met, goalProgress.total)}\n </span>\n )}\n </div>\n {details}\n </div>\n </div>\n\n <div className=\"mt-3 flex flex-wrap items-center gap-1 pt-1\">\n {onWatch && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(ACTION, 'text-ai-ink hover:text-ai-ink')}\n onClick={onWatch}\n data-testid={testIdOr(testIds?.watch, { testId: `agent-watch-run-${name}` })}\n >\n <Eye size={14} /> {l.watch}\n </Button>\n )}\n {onAssignTask && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={ACTION}\n onClick={onAssignTask}\n data-testid={testIdOr(testIds?.assignTask, { testId: `agent-assign-task-${name}` })}\n >\n <ClipboardList size={14} /> {l.assignTask}\n </Button>\n )}\n {onEdit && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={ACTION}\n onClick={onEdit}\n data-testid={testIdOr(testIds?.edit, { testId: `agent-edit-${name}` })}\n >\n <Pencil size={14} /> {l.edit}\n </Button>\n )}\n {onCopyAddress && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(ACTION, 'text-muted-foreground')}\n onClick={onCopyAddress}\n data-testid={testIdOr(testIds?.copyAddress, { testId: `agent-copy-address-${name}` })}\n >\n <Copy size={14} /> {l.copyAddress}\n </Button>\n )}\n {onDelete && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(ACTION, 'ml-auto text-muted-foreground hover:text-red-text')}\n onClick={onDelete}\n aria-label={l.deleteAgent(name)}\n data-testid={testIdOr(testIds?.delete, { testId: `agent-delete-${name}` })}\n >\n <Trash2 size={14} />\n </Button>\n )}\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Bot, Plus, Sparkles } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { EmptyState } from '../../components/EmptyState'\n\nexport interface AgentGalleryLabels {\n /** Intro line next to the New agent button. */\n description: string\n emptyTitle: string\n emptyDescription: string\n emptyCta: string\n newAgent: string\n}\n\nexport const DEFAULT_AGENT_GALLERY_LABELS: AgentGalleryLabels = {\n description: 'Personas that work for you, on demand.',\n emptyTitle: 'Create your first agent',\n emptyDescription:\n 'Describe a persona, pick its tools, generate an avatar, then hand it work from an agent card and watch it converge.',\n emptyCta: 'Create an agent',\n newAgent: 'New agent',\n}\n\nexport interface AgentGalleryTestIds {\n emptyCta: string\n createButton: string\n gallery: string\n}\n\nexport interface AgentGalleryProps {\n /** Number of agents; 0 shows the first-run empty state instead of the grid. */\n count: number\n onCreate: () => void\n /** The AgentCard children. */\n children?: ReactNode\n /** Intro line next to the New agent button (wins over `labels.description`). */\n description?: string\n labels?: Partial<AgentGalleryLabels>\n testIds?: Partial<AgentGalleryTestIds>\n className?: string\n}\n\n/** Agents grid with an intro row + New agent action, or a first-run empty state. */\nexport function AgentGallery({\n count,\n onCreate,\n children,\n description,\n labels,\n testIds,\n className,\n}: AgentGalleryProps) {\n const l = { ...DEFAULT_AGENT_GALLERY_LABELS, ...labels }\n if (count === 0) {\n return (\n <div className={cn('mt-8', className)}>\n <EmptyState\n className=\"rounded-lg border-0 bg-muted\"\n icon={Bot}\n title={l.emptyTitle}\n description={l.emptyDescription}\n action={\n <Button\n onClick={onCreate}\n className=\"gap-1.5\"\n data-testid={testIdOr(testIds?.emptyCta, { testId: 'agent-empty-cta' })}\n >\n <Sparkles size={16} /> {l.emptyCta}\n </Button>\n }\n />\n </div>\n )\n }\n return (\n <div className={className}>\n <div className=\"mb-4 flex flex-wrap items-center justify-between gap-x-3 gap-y-2\">\n <p className=\"min-w-0 text-sm text-muted-foreground\">{description ?? l.description}</p>\n <Button\n size=\"sm\"\n onClick={onCreate}\n className=\"h-8 gap-1.5 pointer-coarse:h-11\"\n data-testid={testIdOr(testIds?.createButton, { testId: 'agent-create-button' })}\n >\n <Plus size={16} /> {l.newAgent}\n </Button>\n </div>\n <div\n className=\"grid grid-cols-[repeat(auto-fill,minmax(16rem,1fr))] gap-4\"\n data-testid={testIdOr(testIds?.gallery, { testId: 'agent-gallery' })}\n data-slot=\"agent-gallery\"\n >\n {children}\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Bot, Loader2, Wand2, type LucideIcon } from 'lucide-react'\nimport { Button, Label, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface CapabilityTileProps {\n label: string\n description: string\n icon: LucideIcon\n selected: boolean\n onToggle: () => void\n testId?: string\n className?: string\n}\n\n/** Toggle tile for one agent capability (tool). Selected = accent tone, `aria-pressed`. */\nexport function CapabilityTile({\n label,\n description,\n icon: Icon,\n selected,\n onToggle,\n testId,\n className,\n}: CapabilityTileProps) {\n return (\n <button\n type=\"button\"\n onClick={onToggle}\n aria-pressed={selected}\n data-testid={testId}\n data-slot=\"capability-tile\"\n className={cn(\n 'flex flex-col items-start gap-1 rounded-lg p-3 text-left transition-colors pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n selected\n ? 'bg-accent text-accent-foreground ring-1 ring-inset ring-primary/30'\n : 'bg-muted hover:bg-accent/60',\n className\n )}\n >\n <Icon size={16} className={selected ? 'text-accent-foreground' : 'text-muted-foreground'} />\n <span className=\"text-xs font-medium leading-tight\">{label}</span>\n <span className=\"text-xs leading-tight text-muted-foreground\">{description}</span>\n </button>\n )\n}\n\n/** Responsive grid wrapper for CapabilityTile children. */\nexport function CapabilityGrid({\n children,\n testId,\n className,\n}: {\n children: ReactNode\n testId?: string\n className?: string\n}) {\n return (\n <div\n className={cn('grid grid-cols-2 gap-2 sm:grid-cols-4', className)}\n data-testid={testIdOr(testId, { testId: 'agent-capabilities' })}\n >\n {children}\n </div>\n )\n}\n\nexport interface AgentTypeOption<T extends string> {\n value: T\n title: string\n description: string\n}\n\nexport interface AgentTypeSelectorLabels {\n agentType: string\n}\n\nexport const DEFAULT_AGENT_TYPE_SELECTOR_LABELS: AgentTypeSelectorLabels = {\n agentType: 'Agent type',\n}\n\nexport interface AgentTypeSelectorProps<T extends string> {\n value: T\n onChange: (value: T) => void\n options: AgentTypeOption<T>[]\n /** Group label (wins over `labels.agentType`). */\n label?: string\n labels?: Partial<AgentTypeSelectorLabels>\n /** Root id; options use `agent-type-{value}` unless `optionTestId` is given. */\n testId?: string\n optionTestId?: (value: T) => string\n}\n\n/** Radio-style choice cards (e.g. built-in vs external agent). Test ids: `agent-type-{value}`. */\nexport function AgentTypeSelector<T extends string>({\n value,\n onChange,\n options,\n label,\n labels,\n testId,\n optionTestId,\n}: AgentTypeSelectorProps<T>) {\n const l = { ...DEFAULT_AGENT_TYPE_SELECTOR_LABELS, ...labels }\n return (\n <div className=\"space-y-1.5\" data-testid={testIdOr(testId, { testId: 'agent-type-selector' })}>\n <Label>{label ?? l.agentType}</Label>\n <div className=\"grid grid-cols-2 gap-2\">\n {options.map((opt) => (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => onChange(opt.value)}\n aria-pressed={value === opt.value}\n data-testid={testIdOr(optionTestId?.(opt.value), { testId: `agent-type-${opt.value}` })}\n className={cn(\n 'rounded-lg p-3 text-left transition-colors pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n value === opt.value\n ? 'bg-accent text-accent-foreground ring-1 ring-inset ring-primary/30'\n : 'bg-muted hover:bg-accent/60'\n )}\n >\n <div className=\"text-sm font-medium\">{opt.title}</div>\n <div className=\"mt-0.5 text-xs text-muted-foreground\">{opt.description}</div>\n </button>\n ))}\n </div>\n </div>\n )\n}\n\nexport interface AgentAvatarFieldLabels {\n painting: string\n generate: string\n regenerate: string\n}\n\nexport const DEFAULT_AGENT_AVATAR_FIELD_LABELS: AgentAvatarFieldLabels = {\n painting: 'Painting…',\n generate: 'Generate avatar',\n regenerate: 'Regenerate',\n}\n\nexport interface AgentAvatarFieldTestIds {\n preview: string\n generate: string\n}\n\nexport interface AgentAvatarFieldProps {\n /** Image URL of the current avatar. */\n picture?: string | null\n isBusy: boolean\n /** Generate is disabled until the agent can exist (e.g. a valid name). */\n canGenerate: boolean\n onGenerate: () => void\n labels?: Partial<AgentAvatarFieldLabels>\n testIds?: Partial<AgentAvatarFieldTestIds>\n}\n\n/** Avatar preview with a deliberate Generate / Regenerate action. */\nexport function AgentAvatarField({\n picture,\n isBusy,\n canGenerate,\n onGenerate,\n labels,\n testIds,\n}: AgentAvatarFieldProps) {\n const l = { ...DEFAULT_AGENT_AVATAR_FIELD_LABELS, ...labels }\n return (\n <div className=\"flex flex-col items-center gap-2\" data-slot=\"agent-avatar-field\">\n <div\n className=\"flex size-24 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-muted\"\n data-testid={testIdOr(testIds?.preview, { testId: 'agent-avatar-preview' })}\n >\n {isBusy ? (\n <div className=\"flex flex-col items-center gap-1 text-ai-ink\">\n <Loader2 className=\"size-7 animate-spin\" />\n <span className=\"text-xs\">{l.painting}</span>\n </div>\n ) : picture ? (\n <img src={picture} alt=\"\" className=\"size-full object-cover\" />\n ) : (\n <Bot className=\"size-10 text-ai-ink/70\" />\n )}\n </div>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 gap-1 px-2 text-xs pointer-coarse:h-11\"\n disabled={isBusy || !canGenerate}\n onClick={onGenerate}\n data-testid={testIdOr(testIds?.generate, { testId: 'agent-avatar-generate' })}\n >\n <Wand2 size={12} /> {picture ? l.regenerate : l.generate}\n </Button>\n </div>\n )\n}\n","import { useEffect, useMemo, useState, type ReactNode } from 'react'\nimport { Loader2, Sparkles, X, type LucideIcon } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Textarea,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { FoldSection } from '../../home/FoldSection'\nimport { useControllableState } from '../../lib/useControllableState'\nimport { AgentTypeSelector, CapabilityGrid, CapabilityTile } from './AgentEditorParts'\nimport type { AgentTypeOption } from './AgentEditorParts'\n\n/** One thing an agent can be allowed to do (a tool toggle). */\nexport interface AgentCapability {\n key: string\n label: string\n description: string\n icon: LucideIcon\n}\n\n/** A starting point: a plain description plus the capabilities that go with it. */\nexport interface AgentTemplate {\n id: string\n title: string\n description: string\n /** Becomes the agent's persona text. */\n persona: string\n /** Capability keys switched on. */\n capabilities: string[]\n}\n\nexport interface AgentCreatorValues {\n name: string\n persona: string\n capabilities: Record<string, boolean>\n modelName: string\n type: string\n /** Workspaces the agent may read (ids). Empty = none: isolation is the default. */\n workspaceIds: string[]\n}\n\nexport interface AgentCreatorLabels {\n titleNew: string\n titleEdit: (name: string) => string\n descriptionNew: string\n descriptionEdit: string\n describe: string\n describePlaceholder: string\n describeHint: string\n startFrom: string\n summaryHeading: string\n /** \"Can search the web, run code.\" */\n summaryCan: (list: string) => string\n /** \"Cannot generate images.\" */\n summaryCannot: (list: string) => string\n summaryNone: string\n summaryModel: (model: string) => string\n summaryModelAuto: string\n /** \"Reads workspaces A and B.\" */\n summaryWorkspaces: (list: string) => string\n summaryNoWorkspaces: string\n /** \"Will be called research-assistant.\" */\n summaryName: (name: string) => string\n workspaceAccess: string\n workspaceAccessHint: string\n workspaceAlready: string\n /** Accessible name of the revoke button next to an already-granted workspace. */\n revokeWorkspace: (workspaceName: string) => string\n noWorkspacesToGrant: string\n name: string\n nameHint: string\n nameInvalid: string\n advanced: string\n capabilities: string\n /** One line under the Tools heading. */\n toolsHint: string\n /** Button in the summary that opens Advanced. */\n summaryChange: string\n model: string\n modelAuto: string\n cancel: string\n create: string\n save: string\n saving: string\n}\n\nexport const DEFAULT_AGENT_CREATOR_LABELS: AgentCreatorLabels = {\n titleNew: 'New agent',\n titleEdit: (name) => `Edit ${name}`,\n descriptionNew: 'Say what this agent is for. Everything else follows from that.',\n descriptionEdit: 'Change what this agent is for, or fine-tune it under Advanced.',\n describe: 'What should it do?',\n describePlaceholder: 'e.g. Reads new files each morning and tells me what changed, with sources.',\n describeHint: 'This becomes the agent’s persona and shapes every answer.',\n startFrom: 'Or start from',\n summaryHeading: 'What it can do (its tools)',\n summaryCan: (list) => `Can ${list}.`,\n summaryCannot: (list) => `Cannot ${list}.`,\n summaryNone: 'It can read your files and answer. Nothing else is switched on yet.',\n summaryModel: (model) => `Uses ${model}.`,\n summaryModelAuto: 'Uses the default model.',\n summaryWorkspaces: (list) => `Can read ${list}.`,\n summaryNoWorkspaces: 'Cannot read any workspace yet. Give it access under Advanced.',\n summaryName: (name) => `Will be called ${name}.`,\n workspaceAccess: 'Workspace access',\n workspaceAccessHint:\n 'Each workspace stays separate. The agent can only read the ones you tick here.',\n workspaceAlready: 'Already has access',\n revokeWorkspace: (name) => `Remove access to ${name}`,\n noWorkspacesToGrant: 'You have no workspaces yet.',\n name: 'Name',\n nameHint: 'Letters, digits, - and _ only; must start with a letter or digit.',\n nameInvalid: 'Letters, digits, - and _ only; must start with a letter or digit.',\n advanced: 'Advanced',\n capabilities: 'Tools',\n toolsHint:\n 'Tools are switches on this agent: what it may do on its own, such as search the web or run code. Change them any time.',\n summaryChange: 'Change tools',\n model: 'Model',\n modelAuto: 'Automatic',\n cancel: 'Cancel',\n create: 'Create agent',\n save: 'Save changes',\n saving: 'Saving…',\n}\n\nconst NAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9_-]*$/\nconst FILLER = new Set([\n 'a',\n 'an',\n 'the',\n 'who',\n 'that',\n 'which',\n 'to',\n 'for',\n 'and',\n 'of',\n 'i',\n 'my',\n])\n\n/** A valid agent name from the description: its first few meaningful words, dashed. */\nexport function deriveAgentName(description: string): string {\n const words = description\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, ' ')\n .split(/\\s+/)\n .filter((w) => w && !FILLER.has(w))\n .slice(0, 3)\n return words.join('-').slice(0, 64)\n}\n\nexport const isValidAgentName = (name: string): boolean => NAME_RE.test(name) && name.length <= 64\n\nconst joinList = (items: string[]): string =>\n items.length <= 2\n ? items.join(' and ')\n : `${items.slice(0, -1).join(', ')} and ${items[items.length - 1]}`\n\n/** The plain-language \"can / cannot\" sentence for a capability selection. Pure; labels are data. */\nexport function summarizeCapabilities(\n capabilities: AgentCapability[],\n enabled: Record<string, boolean>,\n modelName: string,\n labels: Pick<\n AgentCreatorLabels,\n 'summaryCan' | 'summaryCannot' | 'summaryNone' | 'summaryModel' | 'summaryModelAuto'\n > = DEFAULT_AGENT_CREATOR_LABELS\n): string[] {\n const on = capabilities.filter((c) => enabled[c.key]).map((c) => c.label.toLowerCase())\n const off = capabilities.filter((c) => !enabled[c.key]).map((c) => c.label.toLowerCase())\n const lines: string[] = []\n if (on.length === 0) lines.push(labels.summaryNone)\n else {\n lines.push(labels.summaryCan(joinList(on)))\n if (off.length > 0) lines.push(labels.summaryCannot(joinList(off)))\n }\n lines.push(modelName ? labels.summaryModel(modelName) : labels.summaryModelAuto)\n return lines\n}\n\n/** The full plain-language summary: abilities, model, workspace access and the agent's name. */\nexport function summarizeAgent(\n capabilities: AgentCapability[],\n values: Pick<AgentCreatorValues, 'capabilities' | 'modelName' | 'workspaceIds' | 'name'>,\n workspaces: Array<{ id: string; name: string }>,\n labels: AgentCreatorLabels = DEFAULT_AGENT_CREATOR_LABELS\n): string[] {\n const lines = summarizeCapabilities(capabilities, values.capabilities, values.modelName, labels)\n const names = workspaces.filter((w) => values.workspaceIds.includes(w.id)).map((w) => w.name)\n lines.push(\n names.length > 0 ? labels.summaryWorkspaces(joinList(names)) : labels.summaryNoWorkspaces\n )\n if (values.name) lines.push(labels.summaryName(values.name))\n return lines\n}\n\nexport interface AgentCreatorProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n isEdit?: boolean\n /** Name shown in the edit title. */\n agentName?: string\n capabilities: AgentCapability[]\n templates?: AgentTemplate[]\n models?: string[]\n /** The user's workspaces, for the explicit access list. */\n workspaces?: Array<{ id: string; name: string }>\n /**\n * Workspaces the agent can already read: shown ticked and fixed. Without `onRevokeWorkspace`\n * they cannot be undone here; with it each gets a remove button.\n */\n grantedWorkspaceIds?: string[]\n /** Take back a granted workspace (the host revokes, then refreshes `grantedWorkspaceIds`). */\n onRevokeWorkspace?: (workspaceId: string) => void\n /** The workspace whose revoke is in flight; its button is disabled. */\n revokingWorkspaceId?: string\n /** One-click avatar (or anything that sits beside the name). */\n avatar?: ReactNode | ((values: AgentCreatorValues) => ReactNode)\n types?: AgentTypeOption<string>[]\n /** Controlled values; omit to let the dialog hold them (seeded by `initialValues`). */\n values?: AgentCreatorValues\n initialValues?: Partial<AgentCreatorValues>\n onValuesChange?: (values: AgentCreatorValues) => void\n /** Avatar field, skills/tool pickers or anything else, folded under Advanced. */\n advanced?: ReactNode | ((values: AgentCreatorValues) => ReactNode)\n isSaving?: boolean\n onSubmit: (values: AgentCreatorValues) => void\n labels?: Partial<AgentCreatorLabels>\n testId?: string\n}\n\nconst BLANK: AgentCreatorValues = {\n name: '',\n persona: '',\n capabilities: {},\n modelName: '',\n type: 'builtin',\n workspaceIds: [],\n}\n\n/**\n * Create or edit an agent from a plain description. Templates pre-fill the description and the\n * capabilities, a live sentence says what the agent can and cannot do, and the knobs (capability\n * toggles, model, type, avatar, pickers) are folded under Advanced.\n */\nexport function AgentCreator({\n open,\n onOpenChange,\n isEdit = false,\n agentName,\n capabilities,\n templates = [],\n models = [],\n workspaces = [],\n grantedWorkspaceIds = [],\n onRevokeWorkspace,\n revokingWorkspaceId,\n avatar,\n types,\n values: valuesProp,\n initialValues,\n onValuesChange,\n advanced,\n isSaving,\n onSubmit,\n labels,\n testId,\n}: AgentCreatorProps) {\n const l = { ...DEFAULT_AGENT_CREATOR_LABELS, ...labels }\n const seed = useMemo<AgentCreatorValues>(\n () => ({ ...BLANK, ...initialValues }),\n // Seeded once per open.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [open]\n )\n const [values, setValues] = useControllableState<AgentCreatorValues>(\n valuesProp,\n seed,\n onValuesChange\n )\n const [advancedOpen, setAdvancedOpen] = useState(false)\n // Until the user edits the name it follows the description.\n const [nameTouched, setNameTouched] = useState(false)\n useEffect(() => {\n if (open) {\n if (valuesProp === undefined) setValues(seed)\n setAdvancedOpen(false)\n setNameTouched(Boolean(seed.name))\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const id = testIdOr(testId, { testId: 'agent-creator' })\n const name = values.name\n const nameValid = isValidAgentName(name)\n const canSubmit = (isEdit || nameValid) && !isSaving\n\n const patch = (next: Partial<AgentCreatorValues>) => setValues({ ...values, ...next })\n\n const setPersona = (persona: string) =>\n patch({ persona, ...(!isEdit && !nameTouched ? { name: deriveAgentName(persona) } : {}) })\n\n const applyTemplate = (t: AgentTemplate) =>\n patch({\n persona: t.persona,\n capabilities: Object.fromEntries(\n capabilities.map((c) => [c.key, t.capabilities.includes(c.key)])\n ),\n ...(!isEdit && !nameTouched ? { name: deriveAgentName(t.persona) } : {}),\n })\n\n const summary = summarizeAgent(capabilities, values, workspaces, l)\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"sheet\"\n className=\"max-h-[calc(100dvh-2rem)] overflow-y-auto sm:max-w-xl\"\n data-testid={id}\n >\n <DialogHeader>\n <DialogTitle>{isEdit ? l.titleEdit(agentName ?? name) : l.titleNew}</DialogTitle>\n <DialogDescription>{isEdit ? l.descriptionEdit : l.descriptionNew}</DialogDescription>\n </DialogHeader>\n\n <form\n className=\"flex flex-col gap-5\"\n onSubmit={(event) => {\n event.preventDefault()\n if (canSubmit) onSubmit(values)\n }}\n >\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"agent-creator-describe\">{l.describe}</Label>\n <Textarea\n id=\"agent-creator-describe\"\n data-testid={`${id}-describe`}\n value={values.persona}\n placeholder={l.describePlaceholder}\n rows={4}\n autoFocus\n onChange={(e) => setPersona(e.target.value)}\n />\n <p className=\"text-xs text-muted-foreground\">{l.describeHint}</p>\n </div>\n\n {!isEdit && templates.length > 0 && (\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-templates`}>\n <Label>{l.startFrom}</Label>\n <div className=\"flex flex-wrap gap-2\">\n {templates.map((t) => (\n <button\n key={t.id}\n type=\"button\"\n title={t.description}\n onClick={() => applyTemplate(t)}\n data-testid={`${id}-template-${t.id}`}\n className={cn(\n 'rounded-full border border-border px-3 py-1.5 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11 [&:hover]:bg-accent'\n )}\n >\n {t.title}\n </button>\n ))}\n </div>\n </div>\n )}\n\n <div\n className=\"rounded-lg bg-muted p-3 text-sm\"\n data-testid={`${id}-summary`}\n aria-live=\"polite\"\n >\n <div className=\"mb-1 flex items-center gap-1.5 text-xs font-medium text-muted-foreground\">\n <Sparkles className=\"size-4 text-ai-ink\" aria-hidden=\"true\" />\n {l.summaryHeading}\n </div>\n {summary.map((line) => (\n <p key={line}>{line}</p>\n ))}\n <button\n type=\"button\"\n onClick={() => setAdvancedOpen(true)}\n data-testid={`${id}-summary-change`}\n className=\"mt-1 text-xs font-medium text-primary underline-offset-2 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11\"\n >\n {l.summaryChange}\n </button>\n </div>\n\n <div className=\"flex items-end gap-4\">\n {typeof avatar === 'function' ? avatar(values) : avatar}\n {!isEdit && (\n <div className=\"flex min-w-0 flex-1 flex-col gap-1.5\">\n <Label htmlFor=\"agent-creator-name\">{l.name}</Label>\n <Input\n id=\"agent-creator-name\"\n data-testid={`${id}-name`}\n value={name}\n placeholder=\"research-assistant\"\n aria-invalid={name !== '' && !nameValid ? true : undefined}\n onChange={(e) => {\n setNameTouched(true)\n patch({ name: e.target.value })\n }}\n />\n {name !== '' && !nameValid && (\n <p className=\"text-xs text-destructive\">{l.nameInvalid}</p>\n )}\n </div>\n )}\n </div>\n\n <FoldSection\n label={l.advanced}\n open={advancedOpen}\n onOpenChange={setAdvancedOpen}\n testId={`${id}-advanced-toggle`}\n >\n <div className=\"flex flex-col gap-4\">\n {!isEdit && types && types.length > 0 && (\n <AgentTypeSelector\n value={values.type}\n onChange={(type) => patch({ type })}\n options={types}\n testId={`${id}-type`}\n optionTestId={(value) => `${id}-type-${value}`}\n />\n )}\n <div className=\"flex flex-col gap-2\">\n <Label>{l.capabilities}</Label>\n <p className=\"text-xs text-muted-foreground\">{l.toolsHint}</p>\n <CapabilityGrid testId={`${id}-capabilities`}>\n {capabilities.map((c) => (\n <CapabilityTile\n key={c.key}\n label={c.label}\n description={c.description}\n icon={c.icon}\n selected={Boolean(values.capabilities[c.key])}\n onToggle={() =>\n patch({\n capabilities: {\n ...values.capabilities,\n [c.key]: !values.capabilities[c.key],\n },\n })\n }\n testId={`${id}-cap-${c.key}`}\n />\n ))}\n </CapabilityGrid>\n </div>\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-workspaces`}>\n <Label>{l.workspaceAccess}</Label>\n <p className=\"text-xs text-muted-foreground\">{l.workspaceAccessHint}</p>\n {workspaces.length === 0 ? (\n <p className=\"text-xs text-muted-foreground\">{l.noWorkspacesToGrant}</p>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {workspaces.map((w) => {\n const already = grantedWorkspaceIds.includes(w.id)\n const on = already || values.workspaceIds.includes(w.id)\n return (\n <span key={w.id} className=\"inline-flex items-center gap-1\">\n <button\n type=\"button\"\n role=\"checkbox\"\n aria-checked={on}\n disabled={already}\n title={already ? l.workspaceAlready : undefined}\n data-testid={`${id}-workspace-${w.id}`}\n onClick={() =>\n patch({\n workspaceIds: on\n ? values.workspaceIds.filter((x) => x !== w.id)\n : [...values.workspaceIds, w.id],\n })\n }\n className={cn(\n 'rounded-md border px-3 py-1.5 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-60 pointer-coarse:min-h-11',\n on\n ? 'border-primary bg-primary/10 text-primary'\n : 'border-border [&:hover:not(:disabled)]:bg-accent'\n )}\n >\n {w.name}\n </button>\n {already && onRevokeWorkspace && (\n <button\n type=\"button\"\n aria-label={l.revokeWorkspace(w.name)}\n title={l.revokeWorkspace(w.name)}\n disabled={revokingWorkspaceId === w.id}\n data-testid={`${id}-workspace-${w.id}-revoke`}\n onClick={() => onRevokeWorkspace(w.id)}\n className=\"flex size-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50 pointer-coarse:size-11\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n )}\n </span>\n )\n })}\n </div>\n )}\n </div>\n {models.length > 0 && (\n <div className=\"flex flex-col gap-1.5\">\n <Label>{l.model}</Label>\n <Select\n value={values.modelName || '__auto__'}\n onValueChange={(v) => patch({ modelName: v === '__auto__' ? '' : v })}\n >\n <SelectTrigger data-testid={`${id}-model`} className=\"pointer-coarse:min-h-11\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__auto__\">{l.modelAuto}</SelectItem>\n {models.map((m) => (\n <SelectItem key={m} value={m}>\n {m}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n {typeof advanced === 'function' ? advanced(values) : advanced}\n </div>\n </FoldSection>\n\n <div className=\"flex flex-col-reverse sm:flex-row sm:justify-end gap-2 border-t border-border pt-3\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={() => onOpenChange(false)}\n data-testid={`${id}-cancel`}\n className=\"pointer-coarse:min-h-11\"\n >\n {l.cancel}\n </Button>\n <Button\n type=\"submit\"\n disabled={!canSubmit}\n data-testid={`${id}-submit`}\n className=\"gap-1.5 pointer-coarse:min-h-11\"\n >\n {isSaving ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Sparkles className=\"size-4\" />\n )}\n {isSaving ? l.saving : isEdit ? l.save : l.create}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","import type { AgentCreatorValues } from './AgentCreator'\n\n/**\n * The saved persona tells the agent its own name: \"You are Reviewer, an AI agent. <description>\".\n * {@link stripPersonaPreamble} takes the preamble off again so the editor shows only what the user wrote.\n */\nexport function composePersona(name: string, description: string): string {\n const body = description.trim()\n const preamble = `You are ${name}, an AI agent.`\n return body ? `${preamble} ${body}` : preamble\n}\n\n/** The description the user wrote, without the preamble {@link composePersona} adds. */\nexport function stripPersonaPreamble(persona: string): string {\n return persona.replace(/^You are .+?, an AI agent\\.\\s*/, '').trim()\n}\n\n/**\n * The `Agents` config section an {@link AgentCreatorValues} form stands for: the persona, the model\n * when one is picked, and one boolean per capability key. Pass it as `sections.Agents` to\n * `useSaveAgentConfig` from `@arbidocs/react`.\n */\nexport function agentCreatorToConfigSection(\n values: Pick<AgentCreatorValues, 'name' | 'persona' | 'modelName' | 'capabilities'>,\n capabilityKeys: string[]\n): Record<string, unknown> {\n return {\n PERSONA: composePersona(values.name, values.persona),\n ...(values.modelName ? { AGENT_MODEL_NAME: values.modelName } : {}),\n ...Object.fromEntries(capabilityKeys.map((k) => [k, !!values.capabilities[k]])),\n }\n}\n\n/** The form values an existing agent's `Agents` config section opens as (edit mode). */\nexport function agentConfigSectionToValues(\n section: Record<string, unknown> | undefined,\n capabilityKeys: string[]\n): Pick<AgentCreatorValues, 'persona' | 'modelName' | 'capabilities'> {\n const s = section ?? {}\n return {\n persona: stripPersonaPreamble(String(s.PERSONA ?? '')),\n modelName: String(s.AGENT_MODEL_NAME ?? ''),\n capabilities: Object.fromEntries(capabilityKeys.map((k) => [k, Boolean(s[k])])),\n }\n}\n","/**\n * The agent creator's standard choices: the headline tool switches an agent can hold (all in its\n * config's `Agents` section), generic starting points, and how it runs. A host may pass its own\n * (a firm's templates, its own wording).\n */\n\nimport {\n Brain,\n FileText,\n Globe,\n ImageIcon,\n ListChecks,\n Telescope,\n Terminal,\n Wand2,\n} from 'lucide-react'\nimport type { AgentCapability, AgentTemplate } from './AgentCreator'\nimport type { AgentTypeOption } from './AgentEditorParts'\n\nexport const DEFAULT_AGENT_CAPABILITIES: AgentCapability[] = [\n {\n key: 'WEB_SEARCH_ENABLED',\n label: 'Web search',\n description: 'Current facts, cited sources',\n icon: Globe,\n },\n {\n key: 'RUN_CODE_ENABLED',\n label: 'Run code',\n description: 'Exact numbers, real computation',\n icon: Terminal,\n },\n {\n key: 'DEEP_RESEARCH_ENABLED',\n label: 'Deep research',\n description: 'Multi-source investigations',\n icon: Telescope,\n },\n {\n key: 'PLANNING_ENABLED',\n label: 'Planning',\n description: 'Plans complex work first',\n icon: ListChecks,\n },\n {\n key: 'ARTIFACTS_ENABLED',\n label: 'Documents',\n description: 'Drafts and edits documents',\n icon: FileText,\n },\n {\n key: 'IMAGE_ENABLED',\n label: 'Images',\n description: 'Generates and edits images',\n icon: ImageIcon,\n },\n { key: 'FACTS_ENABLED', label: 'Memory', description: 'Remembers across sessions', icon: Brain },\n { key: 'SKILLS_ENABLED', label: 'Skills', description: 'May follow your skills', icon: Wand2 },\n]\n\n/**\n * Generic starting points. Domain wording belongs to a deployment, not to the kit. Every template keeps\n * Documents (`ARTIFACTS_ENABLED`) on, as the server's default does: an agent drafts documents unless its\n * owner switches that off.\n */\nexport const DEFAULT_AGENT_TEMPLATES: AgentTemplate[] = [\n {\n id: 'researcher',\n title: 'Researcher',\n description: 'Looks things up and cites its sources',\n persona:\n 'Researches a question thoroughly, reads the best sources, and cites every claim. Says plainly when something could not be confirmed.',\n capabilities: [\n 'WEB_SEARCH_ENABLED',\n 'DEEP_RESEARCH_ENABLED',\n 'PLANNING_ENABLED',\n 'ARTIFACTS_ENABLED',\n ],\n },\n {\n id: 'analyst',\n title: 'Analyst',\n description: 'Works through numbers and data',\n persona:\n 'Works through data carefully, checks its arithmetic by running code, and explains how it reached each figure.',\n capabilities: ['RUN_CODE_ENABLED', 'PLANNING_ENABLED', 'ARTIFACTS_ENABLED'],\n },\n {\n id: 'note-taker',\n title: 'Note taker',\n description: 'Keeps notes and remembers context',\n persona:\n 'Keeps concise notes, remembers what matters between sessions, and drafts clean summaries on request.',\n capabilities: ['FACTS_ENABLED', 'ARTIFACTS_ENABLED'],\n },\n {\n id: 'blank',\n title: 'Blank',\n description: 'Start from scratch',\n persona: '',\n capabilities: ['ARTIFACTS_ENABLED'],\n },\n]\n\n/** Where an agent runs: on ARBI, or an external runtime connected from the user's machine. */\nexport const DEFAULT_AGENT_TYPES: AgentTypeOption<string>[] = [\n {\n value: 'builtin',\n title: 'Built-in',\n description: 'Runs on ARBI’s servers — woken by tasks and messages.',\n },\n {\n value: 'external',\n title: 'External',\n description: 'Connect a Claude or OpenClaw runtime from your machine.',\n },\n]\n","/**\n * The copy-paste setup for connecting an EXTERNAL runtime (Claude CLI or OpenClaw) as an agent:\n * install the CLI, point it at this deployment, sign in as the agent (email + its one-time signing\n * key), start the listener for the chosen runtime. Only the last line differs between runtimes.\n */\n\nimport { useCallback, useMemo, useState } from 'react'\nimport { Check, Copy } from 'lucide-react'\nimport { Button, Label } from '@arbidocs/react/ui'\nimport { useBlocksEnvironment } from '../../provider/environment'\n\ntype AgentBackend = 'claude' | 'openclaw'\n\nexport interface AgentConnectInstructionsProps {\n /** The agent's login email (from the create response). */\n email: string\n /** Server-minted signing key, returned exactly once at creation. */\n signingKey: string\n}\n\nexport function AgentConnectInstructions({ email, signingKey }: AgentConnectInstructionsProps) {\n const { notify, runtimeConfig } = useBlocksEnvironment()\n const [agentBackend, setAgentBackend] = useState<AgentBackend>('claude')\n const [copied, setCopied] = useState(false)\n\n // Pre-filled with the literal email and key, so it pastes onto any machine as it is.\n const setupScript = useMemo(\n () =>\n [\n 'npm install -g @arbidocs/cli',\n `arbi config set-url https://${runtimeConfig.deploymentDomain}`,\n `arbi login --email ${email} --signing-key ${signingKey}`,\n `arbi listen --agent ${agentBackend}`,\n ].join('\\n'),\n [email, signingKey, agentBackend, runtimeConfig.deploymentDomain]\n )\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(setupScript)\n setCopied(true)\n notify('Setup commands copied', 'success')\n setTimeout(() => setCopied(false), 2000)\n } catch {\n notify('Failed to copy', 'error')\n }\n }, [setupScript, notify])\n\n return (\n <div\n className=\"space-y-2 rounded-lg border border-yellow-border bg-yellow-bg/60 p-3\"\n data-testid=\"agent-connect-instructions\"\n >\n <div className=\"flex items-center justify-between gap-3\">\n <p className=\"text-sm font-medium\">Connect it — run on the agent machine:</p>\n <div className=\"flex items-center gap-2\">\n <Label htmlFor=\"agent-backend\" className=\"text-xs text-muted-foreground\">\n Runtime\n </Label>\n <select\n id=\"agent-backend\"\n value={agentBackend}\n onChange={(e) => setAgentBackend(e.target.value as AgentBackend)}\n className=\"h-7 rounded-md border border-input bg-background px-2 text-xs\"\n data-testid=\"agent-backend-select\"\n >\n <option value=\"claude\">claude</option>\n <option value=\"openclaw\">openclaw</option>\n </select>\n </div>\n </div>\n <pre\n className=\"select-all whitespace-pre-wrap break-all rounded-md bg-muted p-3 text-xs font-mono leading-relaxed\"\n data-testid=\"agent-setup-script\"\n >\n {setupScript}\n </pre>\n <div className=\"flex items-center justify-between gap-2\">\n <p className=\"text-xs text-muted-foreground\">\n The signing key is shown only once — copy it now. It cannot be recovered.\n </p>\n <Button variant=\"outline\" size=\"sm\" onClick={handleCopy} className=\"shrink-0\">\n {copied ? <Check className=\"mr-2 h-4 w-4\" /> : <Copy className=\"mr-2 h-4 w-4\" />}\n Copy\n </Button>\n </div>\n </div>\n )\n}\n","/** Tasks per assigned agent, retaining server order for latest-goal/watch presentation. */\nexport function groupAgentTasks<T extends { agent_ext_id?: string | null }>(\n tasks: readonly T[]\n): Map<string, T[]> {\n const grouped = new Map<string, T[]>()\n for (const task of tasks) {\n if (!task.agent_ext_id) continue\n const assigned = grouped.get(task.agent_ext_id)\n if (assigned) assigned.push(task)\n else grouped.set(task.agent_ext_id, [task])\n }\n return grouped\n}\n","import { useState, type ReactNode } from 'react'\nimport { Wand2 } from 'lucide-react'\nimport { Button, Input, Label, Textarea } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface SkillGenerateFormLabels {\n title: string\n hint: string\n placeholder: string\n generate: string\n writeManually: string\n}\n\nexport const DEFAULT_SKILL_GENERATE_FORM_LABELS: SkillGenerateFormLabels = {\n title: 'Generate with AI',\n hint: 'Describe what the skill should do. The assistant drafts it in chat, then you can edit it here.',\n placeholder: 'e.g. Summarize a contract into key obligations, dates, and parties',\n generate: 'Generate with AI',\n writeManually: '…or write it manually',\n}\n\nexport interface SkillGenerateFormTestIds {\n description: string\n generate: string\n writeManually: string\n}\n\nexport interface SkillGenerateFormProps {\n /** Describe what the skill should do; the app routes it to the agent. */\n onGenerate: (description: string) => void\n /** Escape hatch to the blank editor. */\n onManual: () => void\n /** Icon on the generate button. */\n icon?: ReactNode\n labels?: Partial<SkillGenerateFormLabels>\n testIds?: Partial<SkillGenerateFormTestIds>\n}\n\n/** AI-first skill creation: describe it, or write it manually. */\nexport function SkillGenerateForm({\n onGenerate,\n onManual,\n icon,\n labels,\n testIds,\n}: SkillGenerateFormProps) {\n const l = { ...DEFAULT_SKILL_GENERATE_FORM_LABELS, ...labels }\n const [desc, setDesc] = useState('')\n return (\n <div className=\"flex flex-1 flex-col gap-4 overflow-y-auto p-4\" data-slot=\"skill-generate-form\">\n <div className=\"rounded-lg bg-muted p-4\">\n <div className=\"mb-1 flex items-center gap-2\">\n <Wand2 className=\"size-4 text-primary\" />\n <span className=\"text-sm font-medium\">{l.title}</span>\n </div>\n <p className=\"mb-3 text-xs text-muted-foreground\">{l.hint}</p>\n <Textarea\n value={desc}\n onChange={(e) => setDesc(e.target.value)}\n rows={4}\n placeholder={l.placeholder}\n data-testid={testIdOr(testIds?.description, { testId: 'skills-panel-ai-desc' })}\n />\n <div className=\"mt-3 flex justify-end\">\n <Button\n size=\"sm\"\n disabled={!desc.trim()}\n onClick={() => onGenerate(desc.trim())}\n data-testid={testIdOr(testIds?.generate, { testId: 'skills-panel-ai-generate' })}\n >\n {icon && <span className=\"mr-1 [&>svg]:size-4\">{icon}</span>}\n {l.generate}\n </Button>\n </div>\n </div>\n <button\n type=\"button\"\n className=\"self-start text-sm text-muted-foreground underline-offset-2 hover:text-foreground hover:underline pointer-coarse:min-h-11\"\n onClick={onManual}\n data-testid={testIdOr(testIds?.writeManually, { testId: 'skills-panel-write-manually' })}\n >\n {l.writeManually}\n </button>\n </div>\n )\n}\n\nexport interface SkillEditFormLabels {\n name: string\n namePlaceholder: string\n /** Receives the typed name (empty when nothing is typed yet). */\n invokedAs: (name: string) => ReactNode\n description: string\n descriptionPlaceholder: string\n instructions: string\n cancel: string\n saving: string\n saveChanges: string\n create: string\n}\n\nexport const DEFAULT_SKILL_EDIT_FORM_LABELS: SkillEditFormLabels = {\n name: 'Name',\n namePlaceholder: 'contract-summary',\n invokedAs: (name) => (\n <>\n Invoked as <span className=\"font-mono\">/{name || 'skill-name'}</span>\n </>\n ),\n description: 'Description',\n descriptionPlaceholder: 'What it does and when to use it',\n instructions: 'Instructions',\n cancel: 'Cancel',\n saving: 'Saving…',\n saveChanges: 'Save changes',\n create: 'Create skill',\n}\n\nexport interface SkillEditFormTestIds {\n name: string\n description: string\n save: string\n}\n\nexport interface SkillEditFormProps {\n name: string\n onNameChange: (name: string) => void\n /** Existing skills cannot be renamed. */\n isNameLocked?: boolean\n nameError?: string | null\n description: string\n onDescriptionChange: (description: string) => void\n /** The instructions editor (the app supplies its markdown editor). */\n editor: ReactNode\n isSaving?: boolean\n isEditing: boolean\n onSave: () => void\n onCancel: () => void\n labels?: Partial<SkillEditFormLabels>\n testIds?: Partial<SkillEditFormTestIds>\n}\n\nconst FIELD_LABEL = 'text-xs font-semibold uppercase tracking-wide text-muted-foreground'\n\n/** Skill editor chrome: name + description + editor slot + Cancel / Save footer. */\nexport function SkillEditForm({\n name,\n onNameChange,\n isNameLocked,\n nameError,\n description,\n onDescriptionChange,\n editor,\n isSaving,\n isEditing,\n onSave,\n onCancel,\n labels,\n testIds,\n}: SkillEditFormProps) {\n const l = { ...DEFAULT_SKILL_EDIT_FORM_LABELS, ...labels }\n return (\n <div className=\"flex h-full min-h-0 flex-col\" data-slot=\"skill-edit-form\">\n <div className=\"flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto p-4\">\n <div>\n <Label htmlFor=\"sp-name\" className={FIELD_LABEL}>\n {l.name}\n </Label>\n <Input\n id=\"sp-name\"\n value={name}\n disabled={isNameLocked}\n placeholder={l.namePlaceholder}\n onChange={(e) => onNameChange(e.target.value)}\n className=\"mt-1\"\n data-testid={testIdOr(testIds?.name, { testId: 'skills-panel-edit-name' })}\n />\n <p className=\"mt-1 text-xs text-muted-foreground\">{l.invokedAs(name)}</p>\n {nameError && <p className=\"mt-1 text-xs text-destructive\">{nameError}</p>}\n </div>\n <div>\n <Label htmlFor=\"sp-desc\" className={FIELD_LABEL}>\n {l.description}\n </Label>\n <Input\n id=\"sp-desc\"\n value={description}\n placeholder={l.descriptionPlaceholder}\n onChange={(e) => onDescriptionChange(e.target.value)}\n className=\"mt-1\"\n data-testid={testIdOr(testIds?.description, { testId: 'skills-panel-edit-desc' })}\n />\n </div>\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <Label className={`${FIELD_LABEL} mb-1`}>{l.instructions}</Label>\n <div className=\"min-h-[240px] flex-1 overflow-hidden rounded-md border border-border\">\n {editor}\n </div>\n </div>\n </div>\n <div className=\"flex flex-col-reverse sm:flex-row sm:justify-end gap-2 border-t border-border px-4 py-3\">\n <Button variant=\"outline\" size=\"sm\" onClick={onCancel}>\n {l.cancel}\n </Button>\n <Button\n size=\"sm\"\n onClick={onSave}\n disabled={isSaving}\n data-testid={testIdOr(testIds?.save, { testId: 'skills-panel-edit-save' })}\n >\n {isSaving ? l.saving : isEditing ? l.saveChanges : l.create}\n </Button>\n </div>\n </div>\n )\n}\n","/** Activate a role=\"button\" row with Enter/Space, ignoring keys that bubble from inner controls. */\nexport function activateOnKey(handler: () => void) {\n return (e: React.KeyboardEvent<HTMLElement>) => {\n if (e.target !== e.currentTarget) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handler()\n }\n }\n}\n","import type { ReactNode } from 'react'\nimport { LayoutGrid, List } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { activateOnKey } from './SkillParts'\n\n/* ------------------------------ filter chips ------------------------------ */\n\nexport interface SkillFilterOption {\n id: string\n label: string\n /** How many skills this filter would show. */\n count?: number\n}\n\nexport interface SkillFilterChipsProps {\n options: SkillFilterOption[]\n value: string\n onChange: (id: string) => void\n /** Accessible name of the group. */\n label: string\n /** Chip ids are `<prefix>-<option id>`. */\n testIdPrefix?: string\n className?: string\n}\n\n/** A single-choice row of filter chips (a radio group): 44px targets on touch, wraps on phones. */\nexport function SkillFilterChips({\n options,\n value,\n onChange,\n label,\n testIdPrefix = 'skills-filter',\n className,\n}: SkillFilterChipsProps) {\n return (\n <div\n role=\"radiogroup\"\n aria-label={label}\n className={cn('flex flex-wrap gap-2', className)}\n data-slot=\"skill-filter-chips\"\n >\n {options.map((option) => {\n const selected = option.id === value\n return (\n <button\n key={option.id}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n onClick={() => onChange(option.id)}\n data-testid={`${testIdPrefix}-${option.id}`}\n className={cn(\n 'inline-flex min-h-8 items-center gap-1.5 rounded-full border px-3 text-sm transition-colors pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n selected\n ? 'border-primary bg-primary/10 text-foreground'\n : 'border-border bg-background text-muted-foreground [&:hover]:bg-muted'\n )}\n >\n {option.label}\n {option.count !== undefined && (\n <span className=\"text-xs text-muted-foreground\">{option.count}</span>\n )}\n </button>\n )\n })}\n </div>\n )\n}\n\n/* ------------------------------- view toggle ------------------------------ */\n\nexport type SkillBrowserView = 'gallery' | 'list'\n\nexport interface SkillViewToggleLabels {\n group: string\n gallery: string\n list: string\n}\n\nexport const DEFAULT_SKILL_VIEW_TOGGLE_LABELS: SkillViewToggleLabels = {\n group: 'View',\n gallery: 'Gallery',\n list: 'List',\n}\n\nexport interface SkillViewToggleProps {\n value: SkillBrowserView\n onChange: (view: SkillBrowserView) => void\n labels?: Partial<SkillViewToggleLabels>\n testId?: string\n}\n\n/** Gallery / list switch. */\nexport function SkillViewToggle({ value, onChange, labels, testId }: SkillViewToggleProps) {\n const l = { ...DEFAULT_SKILL_VIEW_TOGGLE_LABELS, ...labels }\n const item = (view: SkillBrowserView, label: string, icon: ReactNode) => (\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={value === view}\n aria-label={label}\n title={label}\n onClick={() => onChange(view)}\n data-testid={`${testId ?? 'skills-view-toggle'}-${view}`}\n className={cn(\n 'flex size-8 items-center justify-center rounded-md pointer-coarse:size-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n value === view ? 'bg-background text-foreground shadow-sm' : 'text-muted-foreground'\n )}\n >\n {icon}\n </button>\n )\n return (\n <div\n role=\"radiogroup\"\n aria-label={l.group}\n className=\"inline-flex shrink-0 gap-0.5 rounded-lg bg-muted p-0.5\"\n data-testid={testId ?? 'skills-view-toggle'}\n >\n {item('gallery', l.gallery, <LayoutGrid className=\"size-4\" />)}\n {item('list', l.list, <List className=\"size-4\" />)}\n </div>\n )\n}\n\n/* --------------------------------- tile ----------------------------------- */\n\nexport interface SkillTileProps {\n name: string\n description: string\n /** Where it comes from: \"Built in\", \"Yours\", \"Shared\". */\n sourceLabel: string\n /** Shown as a small pill when it is not plain instructions. */\n type?: string\n icon?: ReactNode\n layout: SkillBrowserView\n selected?: boolean\n onSelect: () => void\n testId?: string\n}\n\n/** One skill in the gallery (a card) or the list (a row). Selecting it opens its detail. */\nexport function SkillTile({\n name,\n description,\n sourceLabel,\n type,\n icon,\n layout,\n selected,\n onSelect,\n testId,\n}: SkillTileProps) {\n const isRow = layout === 'list'\n return (\n <div\n role=\"button\"\n tabIndex={0}\n aria-pressed={selected}\n onClick={onSelect}\n onKeyDown={activateOnKey(onSelect)}\n data-testid={testId ?? `skill-tile-${name}`}\n data-skill-name={name}\n data-slot=\"skill-tile\"\n className={cn(\n 'flex cursor-pointer rounded-lg border p-3 text-left transition-colors pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n isRow ? 'items-center gap-3' : 'h-full flex-col gap-2',\n selected ? 'border-primary bg-primary/5' : 'border-transparent bg-muted [&:hover]:bg-accent'\n )}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n {icon && <span className=\"shrink-0 text-ai-ink [&>svg]:size-5\">{icon}</span>}\n <span className=\"min-w-0 truncate text-sm font-semibold text-foreground\">{name}</span>\n </div>\n <p\n className={cn(\n 'min-w-0 text-sm text-muted-foreground',\n isRow ? 'flex-1 truncate max-sm:hidden' : 'line-clamp-3'\n )}\n >\n {description}\n </p>\n <div className={cn('flex shrink-0 items-center gap-1.5', isRow && 'ml-auto')}>\n {type && type !== 'markdown' && (\n <span className=\"rounded bg-background px-1.5 py-0.5 text-xs uppercase tracking-wide text-muted-foreground\">\n {type}\n </span>\n )}\n <span className=\"rounded bg-background px-1.5 py-0.5 text-xs text-muted-foreground\">\n {sourceLabel}\n </span>\n </div>\n </div>\n )\n}\n\n/* -------------------------------- detail ---------------------------------- */\n\nexport interface SkillDetailProps {\n title: string\n sourceLabel: string\n description: string\n icon?: ReactNode\n /** A line under the title (\"Your copy is used instead of the original\"). */\n notice?: ReactNode\n /** Sections: the form it asks for, the instructions. */\n children?: ReactNode\n /** The action buttons, as a toolbar. */\n actions?: ReactNode\n testId?: string\n}\n\n/** The detail pane of one skill: a header, sections and a sticky action bar. */\nexport function SkillDetail({\n title,\n sourceLabel,\n description,\n icon,\n notice,\n children,\n actions,\n testId,\n}: SkillDetailProps) {\n return (\n <section\n className=\"flex min-h-0 flex-1 flex-col\"\n data-testid={testId ?? 'skill-detail'}\n data-slot=\"skill-detail\"\n aria-label={title}\n >\n <div className=\"min-h-0 flex-1 space-y-4 overflow-y-auto p-4\">\n <header className=\"space-y-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n {icon && <span className=\"text-ai-ink [&>svg]:size-5\">{icon}</span>}\n <h3 className=\"text-base font-semibold text-foreground\">{title}</h3>\n <span className=\"rounded bg-muted px-1.5 py-0.5 text-xs text-muted-foreground\">\n {sourceLabel}\n </span>\n </div>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n {notice && <p className=\"text-sm text-foreground\">{notice}</p>}\n </header>\n {children}\n </div>\n {actions && (\n <div\n className=\"flex flex-wrap gap-2 border-t border-border bg-background p-3\"\n data-slot=\"skill-detail-actions\"\n >\n {actions}\n </div>\n )}\n </section>\n )\n}\n\n/** A titled block inside the detail pane. */\nexport function SkillDetailSection({\n title,\n children,\n testId,\n}: {\n title: string\n children: ReactNode\n testId?: string\n}) {\n return (\n <div className=\"space-y-1.5\" data-testid={testId}>\n <h4 className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {title}\n </h4>\n {children}\n </div>\n )\n}\n","/**\n * Skill files: the SKILL.md frontmatter parser / serializer.\n *\n * Mirrors the backend parser at\n * `ARBI/src/core/instruments/skills.py::parse_skill_frontmatter` exactly so\n * that SKILL.md files created by this UI round-trip through the backend skill\n * loader without surprises.\n *\n * Backend rules we replicate:\n * - Frontmatter is delimited by a leading `---` and a closing `---`.\n * - It is parsed line-by-line (NOT a real YAML parser): each line is split\n * on the first `:`, key is lowercased, value is trimmed.\n * - `name` / `description` are metadata.\n * - `model` (string), `temperature` (float 0..2), `agent` (truthy string),\n * `tools` (comma-separated -> list), `type` (alias-mapped) are config.\n * - Skill type is detected from frontmatter `type`, then filename extension,\n * then shebang. Default is `markdown`.\n * - Main file is `SKILL.md` / `skill.{py,sh,js,ts}` (case-insensitive) or\n * `{skill-name}.{ext}` (stem matches the skill folder name).\n *\n * A skill's slug is `skillSlug` (`re.sub(r\"[^a-z0-9-]\", \"\", name.lower())`).\n */\n\nexport type SkillType = 'markdown' | 'python' | 'shell' | 'javascript' | 'typescript'\n\nexport const SKILL_TYPES: SkillType[] = ['markdown', 'python', 'shell', 'javascript', 'typescript']\n\n/** Canonical primary file name for a skill (Claude-Code compatible). */\nexport const SKILL_MAIN_FILENAME = 'SKILL.md'\n\nexport interface ParsedSkill {\n /** Skill body with frontmatter removed (trimmed, matches backend). */\n content: string\n name: string\n description: string\n skillType: SkillType\n config: {\n model?: string\n temperature?: number\n agent?: boolean\n tools?: string[]\n }\n}\n\nconst MAIN_NAMES = new Set(['skill.md', 'skill.py', 'skill.sh', 'skill.js', 'skill.ts'])\n\n/**\n * Mirrors backend `_is_main_file`: a filename is the skill's primary entry\n * point if it's `SKILL.md`/`skill.{ext}` (case-insensitive) or its stem\n * equals the skill folder name.\n */\nexport function isMainSkillFile(filename: string, skillName: string): boolean {\n const lower = filename.toLowerCase()\n if (MAIN_NAMES.has(lower)) return true\n const stem = lower.includes('.') ? lower.slice(0, lower.lastIndexOf('.')) : lower\n return stem === skillName\n}\n\n/** Mirrors backend `_detect_type_from_content` (filename ext, then shebang). */\nfunction detectTypeFromContent(content: string, filename: string): SkillType {\n if (filename) {\n const lower = filename.toLowerCase()\n if (lower.endsWith('.py')) return 'python'\n if (lower.endsWith('.sh')) return 'shell'\n if (lower.endsWith('.js')) return 'javascript'\n if (lower.endsWith('.ts')) return 'typescript'\n }\n if (content) {\n const firstLine = content.split('\\n', 1)[0].trim()\n if (firstLine.startsWith('#!')) {\n if (firstLine.includes('python')) return 'python'\n if (firstLine.includes('bash') || firstLine.includes('/sh')) return 'shell'\n if (firstLine.includes('ts-node')) return 'typescript'\n if (firstLine.includes('node')) return 'javascript'\n }\n }\n return 'markdown'\n}\n\n/**\n * Parse skill frontmatter. Behaviourally equivalent to the backend\n * `parse_skill_frontmatter`.\n */\nexport function parseSkillFrontmatter(raw: string, filename = ''): ParsedSkill {\n const config: ParsedSkill['config'] = {}\n let name = ''\n let description = ''\n let skillType: SkillType = 'markdown'\n\n if (!raw.startsWith('---')) {\n return {\n content: raw,\n name,\n description,\n config,\n skillType: detectTypeFromContent(raw, filename),\n }\n }\n\n const end = raw.indexOf('---', 3)\n if (end === -1) {\n return {\n content: raw,\n name,\n description,\n config,\n skillType: detectTypeFromContent(raw, filename),\n }\n }\n\n const frontmatter = raw.slice(3, end).trim()\n const body = raw.slice(end + 3).trim()\n\n for (const rawLine of frontmatter.split('\\n')) {\n const line = rawLine.trim()\n if (!line || !line.includes(':')) continue\n const idx = line.indexOf(':')\n const key = line.slice(0, idx).trim().toLowerCase()\n const value = line.slice(idx + 1).trim()\n\n if (key === 'name' && value) {\n name = value\n } else if (key === 'description' && value) {\n description = value\n } else if (key === 'model' && value) {\n config.model = value\n } else if (key === 'temperature') {\n const t = Number.parseFloat(value)\n if (!Number.isNaN(t) && t >= 0 && t <= 2) config.temperature = t\n } else if (key === 'agent') {\n config.agent = ['true', 'yes', '1'].includes(value.toLowerCase())\n } else if (key === 'tools' && value) {\n config.tools = value\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean)\n } else if (key === 'type' && value) {\n const v = value.toLowerCase()\n if (v === 'python' || v === 'py') skillType = 'python'\n else if (v === 'shell' || v === 'sh' || v === 'bash') skillType = 'shell'\n else if (v === 'javascript' || v === 'js' || v === 'node') skillType = 'javascript'\n else if (v === 'typescript' || v === 'ts') skillType = 'typescript'\n }\n }\n\n if (skillType === 'markdown') {\n skillType = detectTypeFromContent(body, filename)\n }\n\n return { content: body, name, description, config, skillType }\n}\n\n/**\n * Serialize a skill back to a SKILL.md string. The output is intentionally in\n * the simple `key: value` form the backend's line-based parser expects:\n * - `tools` is written as a comma-separated string (`tools: a, b`) because\n * the backend splits on `,` — a YAML list would NOT round-trip.\n * - `type` is only emitted when not `markdown` (markdown is the default and\n * needs no annotation).\n * - `name` / `description` are always written (metadata, Claude Code compatible).\n */\nexport function serializeSkill(input: {\n name: string\n description: string\n body: string\n type?: SkillType\n}): string {\n const lines: string[] = ['---', `name: ${input.name}`, `description: ${input.description}`]\n if (input.type && input.type !== 'markdown') {\n lines.push(`type: ${input.type}`)\n }\n lines.push('---', '', input.body.trim(), '')\n return lines.join('\\n')\n}\n","/**\n * Skill import: turn a `.md` or `.zip` someone gave you (a file, or a link to one) into the upload\n * entries `{ folder, fileName, content }` of the skill storage contract:\n *\n * - `.md` → one `skills/{slug}/SKILL.md`. The slug is the frontmatter `name`, else the file name.\n * - `.zip` → every file under `skills/{slug}/<relpath>`, subpaths kept. The slug is the archive's\n * single top-level folder, else the main file's frontmatter `name`, else the archive\n * name. The main file is renamed `SKILL.md`.\n *\n * Junk entries (`__MACOSX/`, dotfiles, folders) are skipped. The upload itself is\n * `useUploadSkillFiles` (`@arbidocs/react`).\n */\n\nimport { strFromU8, unzip, type Unzipped } from 'fflate'\nimport { skillSlug } from '../workflows/skillMarkdown'\nimport { isMainSkillFile, parseSkillFrontmatter, SKILL_MAIN_FILENAME } from './skillFiles'\n\nconst SKILL_FOLDER_PREFIX = 'skills/'\n\nexport interface SkillUploadEntry {\n folder: string\n fileName: string\n content: string\n}\n\nexport interface SkillImportResult {\n slug: string\n entries: SkillUploadEntry[]\n}\n\n/** A file read out of an archive: its path inside it (forward slashes) and its text. */\nexport interface SkillArchiveEntry {\n path: string\n text: string\n}\n\n/** Strip a trailing extension from a file name (last dot only). */\nfunction stripExt(name: string): string {\n const i = name.lastIndexOf('.')\n return i > 0 ? name.slice(0, i) : name\n}\n\n/** True for entries that are never imported (OS junk, dotfiles, folders). */\nfunction isJunkPath(path: string): boolean {\n if (path.endsWith('/')) return true\n const parts = path.split('/')\n if (parts.some((p) => p === '__MACOSX')) return true\n return parts[parts.length - 1].startsWith('.')\n}\n\nfunction folderFor(slug: string, relDir: string): string {\n const root = `${SKILL_FOLDER_PREFIX}${slug}`\n return relDir ? `${root}/${relDir}` : root\n}\n\n/** One Markdown skill. Slug: the frontmatter `name`, else the file name. */\nexport function importMarkdownSkill(fileName: string, text: string): SkillImportResult {\n const parsed = parseSkillFrontmatter(text, fileName)\n const slug = skillSlug(parsed.name) || skillSlug(stripExt(fileName))\n if (!slug) {\n throw new Error(\n 'Could not derive a skill name. Add a `name:` to the frontmatter or rename the file.'\n )\n }\n return {\n slug,\n entries: [{ folder: folderFor(slug, ''), fileName: SKILL_MAIN_FILENAME, content: text }],\n }\n}\n\n/** The single common top-level folder of an archive, if there is one. */\nfunction commonTopDir(paths: string[]): string | null {\n const tops = new Set<string>()\n for (const p of paths) {\n const idx = p.indexOf('/')\n if (idx === -1) return null // a file at the archive root: no wrapper\n tops.add(p.slice(0, idx))\n }\n return tops.size === 1 ? [...tops][0] : null\n}\n\n/** The upload entries of an archive's files (already read). */\nexport function buildZipSkillImport(\n archiveName: string,\n rawEntries: SkillArchiveEntry[]\n): SkillImportResult {\n const entries = rawEntries.filter((e) => e.path && !isJunkPath(e.path))\n if (entries.length === 0) throw new Error('The archive contains no importable skill files.')\n\n const top = commonTopDir(entries.map((e) => e.path))\n const rel = (p: string): string => (top ? p.slice(top.length + 1) : p)\n\n // The slug: the top-level folder, else the main file's frontmatter, else the archive's name.\n let slug = top ? skillSlug(top) : ''\n if (!slug) {\n const mainGuess =\n entries.find((e) => {\n const r = rel(e.path)\n return !r.includes('/') && isMainSkillFile(r, '__never__')\n }) ?? entries.find((e) => !rel(e.path).includes('/'))\n if (mainGuess) slug = skillSlug(parseSkillFrontmatter(mainGuess.text, rel(mainGuess.path)).name)\n }\n if (!slug) slug = skillSlug(stripExt(archiveName))\n if (!slug) throw new Error('Could not derive a skill name from the archive.')\n\n const rootFiles = entries.filter((e) => !rel(e.path).includes('/'))\n const mainEntry =\n rootFiles.find((e) => isMainSkillFile(rel(e.path), slug)) ??\n (rootFiles.length === 1 ? rootFiles[0] : undefined)\n\n return {\n slug,\n entries: entries.map((e) => {\n const r = rel(e.path)\n const lastSlash = r.lastIndexOf('/')\n return {\n folder: folderFor(slug, lastSlash === -1 ? '' : r.slice(0, lastSlash)),\n fileName:\n mainEntry && e.path === mainEntry.path\n ? SKILL_MAIN_FILENAME\n : lastSlash === -1\n ? r\n : r.slice(lastSlash + 1),\n content: e.text,\n }\n }),\n }\n}\n\n/** The files of a `.zip` (off the main thread where the browser allows it). */\nexport async function readSkillArchive(file: Blob): Promise<SkillArchiveEntry[]> {\n const data = new Uint8Array(await file.arrayBuffer())\n let files: Unzipped\n try {\n files = await new Promise<Unzipped>((resolve, reject) =>\n unzip(data, { filter: (f) => !isJunkPath(f.name) }, (err, out) =>\n err ? reject(err) : resolve(out)\n )\n )\n } catch {\n throw new Error('The archive is empty or could not be read.')\n }\n const entries = Object.entries(files).map(([path, bytes]) => ({ path, text: strFromU8(bytes) }))\n if (entries.length === 0) throw new Error('The archive is empty or could not be read.')\n return entries\n}\n\n/** A skill from a file: `.md` / `.markdown`, or a `.zip`. Throws for anything else. */\nexport async function importSkillFile(file: File): Promise<SkillImportResult> {\n const lower = file.name.toLowerCase()\n if (lower.endsWith('.zip')) return buildZipSkillImport(file.name, await readSkillArchive(file))\n if (lower.endsWith('.md') || lower.endsWith('.markdown')) {\n return importMarkdownSkill(file.name, await file.text())\n }\n throw new Error('Unsupported file type. Choose a .md skill or a .zip archive.')\n}\n\n/** A skill from a link: its text, named after the last part of the path. */\nexport async function importSkillFromUrl(url: string): Promise<SkillImportResult> {\n let parsed: URL\n try {\n parsed = new URL(url.trim())\n } catch {\n throw new Error('That does not look like a link.')\n }\n const response = await fetch(parsed.toString())\n if (!response.ok) throw new Error(`Could not open the link (${response.status}).`)\n const text = await response.text()\n const last = parsed.pathname.split('/').filter(Boolean).pop() ?? 'skill'\n return importMarkdownSkill(last.includes('.') ? last : `${last}.md`, text)\n}\n","/**\n * The skills library's one list: the host's built-in skills (its own definitions), the user's own\n * and the ones other people shared, each with where it comes from. Pure, so the filters and the\n * \"your copy replaces the original\" rule are testable without a backend.\n */\n\nimport { isSharedSkill } from '@arbidocs/sdk/browser'\nimport type { WorkflowDefinition, WorkflowFieldType } from '../workflows/types'\nimport { mergeSkillWorkflows, type SkillListing } from '../workflows/workflow'\n\nexport type SkillSource = 'builtin' | 'mine' | 'shared'\n\n/** A skill as the skills list returns it, with what the library reads of it. */\nexport interface LibrarySkillListing extends SkillListing {\n skill_type?: string | null\n is_owner?: boolean | null\n /** Its main file (SKILL.md); a built-in has none. */\n doc_ext_id?: string | null\n}\n\nexport interface LibrarySkill {\n /** The slug: how it is typed after a slash, and what a copy keeps. */\n slug: string\n title: string\n description: string\n source: SkillSource\n /** `markdown` (plain instructions), `python`, ... */\n type: string\n /** Yours and shared with everyone (`isSharedSkill`): saving it again keeps it shared. */\n isShared: boolean\n /** Yours, and it has the same name as a built-in one: yours is used instead. */\n replacesBuiltin: boolean\n workflow: WorkflowDefinition\n /** Its main file; absent for a built-in. */\n docExtId?: string\n}\n\nexport const SKILL_SOURCE_LABELS: Record<SkillSource, string> = {\n builtin: 'Built in',\n mine: 'Yours',\n shared: 'Shared',\n}\n\n/** What a kind of skill is called to a reader. */\nexport const SKILL_TYPE_LABELS: Record<string, string> = {\n markdown: 'Instructions',\n python: 'Python',\n shell: 'Shell',\n javascript: 'JavaScript',\n typescript: 'TypeScript',\n}\n\nexport const SKILL_FIELD_TYPE_LABELS: Record<WorkflowFieldType, string> = {\n text: 'Short answer',\n longtext: 'Free text',\n boolean: 'Yes or no',\n select: 'A choice',\n number: 'A number',\n date: 'A date',\n scope: 'Which files',\n documents: 'Pick files',\n person: 'A person',\n}\n\n/**\n * @param builtins the host's built-in skills (prompt workflows with their own forms)\n * @param listings the skills list (yours, shared, and the deployment's built-ins)\n */\nexport function buildLibrarySkills(\n builtins: WorkflowDefinition[],\n listings: LibrarySkillListing[]\n): LibrarySkill[] {\n const { host, skills } = mergeSkillWorkflows(builtins, listings)\n const builtinIds = new Set(builtins.map((w) => w.id))\n const stored = new Map(listings.filter((s) => s.doc_ext_id).map((s) => [s.slug, s]))\n return [...host, ...skills].flatMap((workflow): LibrarySkill[] => {\n if (workflow.run.kind !== 'prompt') return []\n const listing = stored.get(workflow.id)\n if (!listing?.doc_ext_id) {\n if (!builtinIds.has(workflow.id)) return []\n return [\n {\n slug: workflow.id,\n title: workflow.title,\n description: workflow.description,\n source: 'builtin',\n type: 'markdown',\n isShared: false,\n replacesBuiltin: false,\n workflow,\n },\n ]\n }\n const mine = listing.is_owner ?? true\n return [\n {\n slug: workflow.id,\n title: workflow.title,\n description: listing.description || workflow.description,\n source: mine ? 'mine' : 'shared',\n type: listing.skill_type ?? 'markdown',\n isShared: isSharedSkill(listing),\n replacesBuiltin: mine && builtinIds.has(listing.slug),\n workflow,\n docExtId: listing.doc_ext_id,\n },\n ]\n })\n}\n\nexport interface SkillFilters {\n query: string\n source: SkillSource | 'all'\n type: string\n}\n\nexport function filterLibrarySkills(skills: LibrarySkill[], f: SkillFilters): LibrarySkill[] {\n const q = f.query.trim().toLowerCase()\n return skills\n .filter((s) => f.source === 'all' || s.source === f.source)\n .filter((s) => f.type === 'all' || s.type === f.type)\n .filter(\n (s) =>\n !q ||\n s.title.toLowerCase().includes(q) ||\n s.slug.toLowerCase().includes(q) ||\n s.description.toLowerCase().includes(q)\n )\n}\n","/**\n * One skill of the library, in full: what it does, what it will ask you, its instructions, and what\n * you can do with it. Everything is plain words: Run, Make a copy, Share with everyone, Export,\n * Delete.\n */\n\nimport type { ReactNode } from 'react'\nimport { Copy, Download, Globe, Lock, Pencil, Play, Trash2 } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { SkillDetail, SkillDetailSection } from './SkillBrowserParts'\nimport {\n SKILL_FIELD_TYPE_LABELS,\n SKILL_SOURCE_LABELS,\n SKILL_TYPE_LABELS,\n type LibrarySkill,\n} from './skillLibrary'\n\nexport interface SkillLibraryActions {\n onRun: () => void\n onCopy: () => void\n onEdit: () => void\n onToggleShare: () => void\n onExport: () => void\n onDelete: () => void\n isBusy: boolean\n}\n\nexport interface SkillLibraryDetailProps {\n skill: LibrarySkill\n /** Its instructions (a stored skill's are read on demand). */\n instructions: string\n /** The instructions are still being read. */\n isLoading?: boolean\n actions: SkillLibraryActions\n icon?: ReactNode\n}\n\nconst ACTION = 'pointer-coarse:min-h-11'\n\nexport function SkillLibraryDetail({\n skill,\n instructions,\n isLoading,\n actions,\n icon,\n}: SkillLibraryDetailProps) {\n const fields = skill.workflow.inputs\n const isOwner = skill.source === 'mine'\n const canCopy = skill.source !== 'mine'\n\n const notice = skill.replacesBuiltin\n ? 'Your copy is used instead of the original; delete it to go back.'\n : skill.isShared\n ? 'Shared with everyone.'\n : undefined\n\n return (\n <SkillDetail\n title={skill.title}\n sourceLabel={SKILL_SOURCE_LABELS[skill.source]}\n description={skill.description}\n icon={icon}\n notice={notice}\n testId=\"skill-detail\"\n actions={\n <>\n <Button onClick={actions.onRun} className={ACTION} data-testid=\"skill-run\">\n <Play className=\"mr-1.5 size-4\" />\n Run\n </Button>\n {canCopy && (\n <Button\n variant=\"outline\"\n onClick={actions.onCopy}\n disabled={actions.isBusy}\n className={ACTION}\n data-testid=\"skill-copy\"\n >\n <Copy className=\"mr-1.5 size-4\" />\n Make a copy\n </Button>\n )}\n {isOwner && (\n <Button\n variant=\"outline\"\n onClick={actions.onEdit}\n className={ACTION}\n data-testid=\"skill-edit\"\n >\n <Pencil className=\"mr-1.5 size-4\" />\n Edit\n </Button>\n )}\n {isOwner && (\n <Button\n variant=\"outline\"\n onClick={actions.onToggleShare}\n disabled={actions.isBusy}\n className={ACTION}\n data-testid=\"skill-share\"\n >\n {skill.isShared ? (\n <Lock className=\"mr-1.5 size-4\" />\n ) : (\n <Globe className=\"mr-1.5 size-4\" />\n )}\n {skill.isShared ? 'Make private' : 'Share with everyone'}\n </Button>\n )}\n <Button\n variant=\"outline\"\n onClick={actions.onExport}\n className={ACTION}\n data-testid=\"skill-export\"\n >\n <Download className=\"mr-1.5 size-4\" />\n Export\n </Button>\n {isOwner && (\n <Button\n variant=\"ghost\"\n onClick={actions.onDelete}\n disabled={actions.isBusy}\n className={`${ACTION} ml-auto text-destructive`}\n data-testid=\"skill-delete\"\n >\n <Trash2 className=\"mr-1.5 size-4\" />\n Delete\n </Button>\n )}\n </>\n }\n >\n <SkillDetailSection title=\"What it asks you\" testId=\"skill-inputs\">\n {fields.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">Nothing: it starts right away.</p>\n ) : (\n <ul className=\"space-y-1 text-sm\">\n {fields.map((field) => (\n <li key={field.name} className=\"flex flex-wrap items-baseline gap-x-2\">\n <span className=\"font-medium\">{field.label}</span>\n <span className=\"text-xs text-muted-foreground\">\n {SKILL_FIELD_TYPE_LABELS[field.type]}\n {field.required ? '' : ', optional'}\n </span>\n </li>\n ))}\n </ul>\n )}\n </SkillDetailSection>\n <SkillDetailSection\n title={\n skill.type === 'markdown'\n ? 'Instructions'\n : `Instructions (${SKILL_TYPE_LABELS[skill.type] ?? skill.type})`\n }\n >\n {isLoading ? (\n <p className=\"text-sm text-muted-foreground\">Loading…</p>\n ) : (\n <pre\n className=\"max-h-72 overflow-auto whitespace-pre-wrap break-words rounded-md bg-muted p-3 font-mono text-xs\"\n tabIndex={0}\n aria-label=\"Instructions\"\n data-testid=\"skill-instructions\"\n >\n {instructions || 'No instructions.'}\n </pre>\n )}\n {!isOwner && (\n <p className=\"text-xs text-muted-foreground\">\n You can read these. Make a copy to change them.\n </p>\n )}\n </SkillDetailSection>\n </SkillDetail>\n )\n}\n","import { ListChecks, Loader2, Plus, Sparkles, Trash2 } from 'lucide-react'\nimport { Badge, Button, Label, Slider, Textarea } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface TaskPlanCriterionView {\n id: string\n text: string\n}\n\n/** Reviewable definition-of-done for a goal task. Extra fields on the caller's type are preserved. */\nexport interface TaskPlanView {\n goal: string\n criteria: TaskPlanCriterionView[]\n max_passes: number\n documents: string[]\n}\n\n/** Fixed strings of the goal-plan editor. */\nexport interface TaskPlanLabels {\n emptyTitle: string\n emptyBody: string\n drafting: string\n generate: string\n needWorkspace: string\n needObjective: string\n goalTask: string\n /** \"scoped to {workspace}\" prefix. */\n scopedTo: string\n redraft: string\n removePlan: string\n goal: string\n goalPlaceholder: string\n checklist: string\n /** e.g. \"3 criteria\". */\n criteriaCount: (count: number) => string\n add: string\n noCriteria: string\n criterionPlaceholder: string\n removeCriterion: (n: number) => string\n retryBudget: string\n /** e.g. \"up to 3 passes\". */\n passes: (count: number) => string\n passesHelp: string\n workingDocuments: string\n workingDocumentsHelp: string\n}\n\nexport const DEFAULT_TASK_PLAN_LABELS: TaskPlanLabels = {\n emptyTitle: 'Draft a plan to review',\n emptyBody:\n 'The assistant writes a short checklist of what its work must cover. You can edit it, and it checks its own draft against it before handing it to you.',\n drafting: 'Drafting plan…',\n generate: 'Draft a plan',\n needWorkspace: 'Open a workspace to plan: the checklist is encrypted under its key.',\n needObjective: 'Say what the assistant should do first: the plan is drafted from it.',\n goalTask: 'Drafted for your review',\n scopedTo: 'for',\n redraft: 'Redraft',\n removePlan: 'Remove plan',\n goal: 'Objective',\n goalPlaceholder: 'What should the finished work achieve?',\n checklist: 'The draft must',\n criteriaCount: (count) => `${count} ${count === 1 ? 'criterion' : 'criteria'}`,\n add: 'Add',\n noCriteria: 'Nothing yet. Add at least one thing the draft must cover.',\n criterionPlaceholder: 'Something specific you can check…',\n removeCriterion: (n) => `Remove item ${n}`,\n retryBudget: 'Revision rounds',\n passes: (count) => `up to ${count} ${count === 1 ? 'round' : 'rounds'}`,\n passesHelp: 'How many times the assistant may revise its own draft before it hands it over.',\n workingDocuments: 'Documents it will use',\n workingDocumentsHelp: 'The plan limits the assistant to these documents.',\n}\n\nexport interface TaskPlanTestIds {\n generate: string\n editor: string\n regenerate: string\n remove: string\n goal: string\n addCriterion: string\n criteria: string\n passes: string\n documents: string\n /** Per criterion index (default `task-plan-criterion-{idx}`). */\n criterion: (idx: number) => string\n /** Per criterion index (default `task-plan-remove-criterion-{idx}`). */\n removeCriterionButton: (idx: number) => string\n}\n\nexport interface TaskPlanProps<P extends TaskPlanView> {\n /** The current plan, or null when the task has no plan yet. */\n plan: P | null\n /** Called with the edited plan, or null when the plan is removed. */\n onChange: (plan: P | null) => void\n /** Draft a plan from the objective. */\n onGenerate: () => void\n isGenerating: boolean\n /** The active workspace the plan is scoped to (null: none open, so generating is disabled). */\n workspaceName: string | null\n /** The objective the planner drafts from (the task's prompt). */\n objective: string\n /** Document id → file name, so the plan shows names instead of ids. */\n documentNames?: Record<string, string>\n testIds?: Partial<TaskPlanTestIds>\n labels?: Partial<TaskPlanLabels>\n}\n\n/** Stable, collision-free criterion ids (c1, c2, ...) by high-water mark, independent of order. */\nexport function nextCriterionId(criteria: TaskPlanCriterionView[]): string {\n const max = criteria.reduce((m, c) => {\n const n = Number(/^c(\\d+)$/.exec(c.id)?.[1] ?? 0)\n return Number.isFinite(n) && n > m ? n : m\n }, 0)\n return `c${max + 1}`\n}\n\n/**\n * Goal-plan editor: empty-state pitch with a single Generate action, or (with a plan) goal,\n * acceptance checklist, retry budget and working documents.\n */\nexport function TaskPlan<P extends TaskPlanView>({\n plan,\n onChange,\n onGenerate,\n isGenerating,\n workspaceName,\n objective,\n documentNames,\n testIds,\n labels,\n}: TaskPlanProps<P>) {\n const l = { ...DEFAULT_TASK_PLAN_LABELS, ...labels }\n const canGenerate = !!workspaceName && !!objective.trim() && !isGenerating\n\n if (!plan) {\n return (\n <div\n className=\"flex flex-col gap-3 rounded-lg bg-muted p-4 sm:flex-row sm:items-center sm:justify-between\"\n data-slot=\"task-plan-empty\"\n >\n <div className=\"flex min-w-0 items-start gap-3\">\n <ListChecks className=\"mt-0.5 size-5 shrink-0 text-muted-foreground\" aria-hidden />\n <div className=\"space-y-0.5\">\n <p className=\"text-sm font-medium\">{l.emptyTitle}</p>\n <p className=\"max-w-md text-xs text-muted-foreground\">{l.emptyBody}</p>\n {!workspaceName ? (\n <p className=\"text-xs text-muted-foreground\">{l.needWorkspace}</p>\n ) : !objective.trim() ? (\n <p className=\"text-xs text-muted-foreground\">{l.needObjective}</p>\n ) : null}\n </div>\n </div>\n <Button\n type=\"button\"\n onClick={onGenerate}\n disabled={!canGenerate}\n className=\"shrink-0\"\n data-testid={testIdOr(testIds?.generate, { testId: 'task-plan-generate' })}\n >\n {isGenerating ? (\n <>\n <Loader2 className=\"size-4 animate-spin\" />\n {l.drafting}\n </>\n ) : (\n <>\n <Sparkles className=\"size-4\" />\n {l.generate}\n </>\n )}\n </Button>\n </div>\n )\n }\n\n const patch = (fields: Partial<TaskPlanView>) => onChange({ ...plan, ...fields })\n const setCriterion = (idx: number, text: string) =>\n patch({ criteria: plan.criteria.map((c, i) => (i === idx ? { ...c, text } : c)) })\n const addCriterion = () =>\n patch({ criteria: [...plan.criteria, { id: nextCriterionId(plan.criteria), text: '' }] })\n const removeCriterion = (idx: number) =>\n patch({ criteria: plan.criteria.filter((_, i) => i !== idx) })\n\n const count = plan.criteria.length\n return (\n <div\n className=\"space-y-5\"\n data-testid={testIdOr(testIds?.editor, { testId: 'task-plan-editor' })}\n data-slot=\"task-plan\"\n >\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge variant=\"default\" className=\"gap-1\">\n <ListChecks className=\"size-3.5\" />\n {l.goalTask}\n </Badge>\n {workspaceName && (\n <span className=\"truncate text-xs text-muted-foreground\">\n {l.scopedTo} <span className=\"font-medium\">{workspaceName}</span>\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={onGenerate}\n disabled={!canGenerate}\n data-testid={testIdOr(testIds?.regenerate, { testId: 'task-plan-regenerate' })}\n >\n {isGenerating ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Sparkles className=\"size-4\" />\n )}\n {l.redraft}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onChange(null)}\n data-testid={testIdOr(testIds?.remove, { testId: 'task-plan-remove' })}\n >\n {l.removePlan}\n </Button>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-plan-goal\">{l.goal}</Label>\n <Textarea\n id=\"task-plan-goal\"\n value={plan.goal}\n onChange={(e) => patch({ goal: e.target.value })}\n placeholder={l.goalPlaceholder}\n rows={2}\n data-testid={testIdOr(testIds?.goal, { testId: 'task-plan-goal' })}\n />\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label>\n {l.checklist}\n <span className=\"ml-1.5 text-xs font-normal text-muted-foreground\">\n {l.criteriaCount(count)}\n </span>\n </Label>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={addCriterion}\n data-testid={testIdOr(testIds?.addCriterion, { testId: 'task-plan-add-criterion' })}\n >\n <Plus className=\"size-4\" />\n {l.add}\n </Button>\n </div>\n\n {count === 0 ? (\n <p className=\"py-2 text-sm text-muted-foreground\">{l.noCriteria}</p>\n ) : (\n <ul\n className=\"space-y-2\"\n data-testid={testIdOr(testIds?.criteria, { testId: 'task-plan-criteria' })}\n >\n {plan.criteria.map((c, idx) => (\n <li key={c.id} className=\"flex items-start gap-2\">\n <span className=\"mt-1.5 flex size-6 shrink-0 select-none items-center justify-center rounded-full bg-muted text-xs font-medium text-muted-foreground\">\n {idx + 1}\n </span>\n <Textarea\n value={c.text}\n rows={2}\n onChange={(e) => setCriterion(idx, e.target.value)}\n placeholder={l.criterionPlaceholder}\n className=\"field-sizing-content min-h-[3.25rem] resize-none\"\n data-testid={testIdOr(testIds?.criterion?.(idx), {\n testId: `task-plan-criterion-${idx}`,\n })}\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"mt-0.5 shrink-0 text-muted-foreground hover:text-destructive pointer-coarse:size-11\"\n onClick={() => removeCriterion(idx)}\n aria-label={l.removeCriterion(idx + 1)}\n data-testid={testIdOr(testIds?.removeCriterionButton?.(idx), {\n testId: `task-plan-remove-criterion-${idx}`,\n })}\n >\n <Trash2 className=\"size-4\" />\n </Button>\n </li>\n ))}\n </ul>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-plan-passes\">\n {l.retryBudget}\n <span className=\"ml-1.5 text-xs font-normal text-muted-foreground\">\n {l.passes(plan.max_passes)}\n </span>\n </Label>\n <Slider\n id=\"task-plan-passes\"\n min={1}\n max={8}\n step={1}\n value={[plan.max_passes]}\n onValueChange={([v]) => patch({ max_passes: v })}\n data-testid={testIdOr(testIds?.passes, { testId: 'task-plan-passes' })}\n />\n <p className=\"text-xs text-muted-foreground\">{l.passesHelp}</p>\n </div>\n\n {plan.documents.length > 0 && (\n <div className=\"space-y-2\">\n <Label>{l.workingDocuments}</Label>\n <div\n className=\"flex flex-wrap gap-1.5\"\n data-testid={testIdOr(testIds?.documents, { testId: 'task-plan-documents' })}\n >\n {plan.documents.map((d) => (\n <Badge key={d} variant=\"secondary\" className=\"text-xs\" title={d}>\n {documentNames?.[d] ?? d}\n </Badge>\n ))}\n </div>\n <p className=\"text-xs text-muted-foreground\">{l.workingDocumentsHelp}</p>\n </div>\n )}\n </div>\n )\n}\n","/** Compact elapsed time: 123ms, 5s, 2m 30s, 1h 15m. */\nexport function formatElapsed(startTime: number, endTime?: number): string {\n const elapsedMs = (endTime || Date.now()) - startTime\n if (elapsedMs < 1000) return `${Math.round(elapsedMs)}ms`\n if (elapsedMs < 60000) return `${Math.round(elapsedMs / 1000)}s`\n if (elapsedMs < 3600000) {\n const minutes = Math.floor(elapsedMs / 60000)\n const seconds = Math.round((elapsedMs % 60000) / 1000)\n return seconds > 0 ? `${minutes}m ${seconds}s` : `${minutes}m`\n }\n const hours = Math.floor(elapsedMs / 3600000)\n const minutes = Math.round((elapsedMs % 3600000) / 60000)\n return minutes > 0 ? `${hours}h ${minutes}m` : `${hours}h`\n}\n","import { useEffect, useState, type ReactNode } from 'react'\nimport { AlertTriangle, Check, FileX, Loader2, SkipForward, X, type LucideIcon } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { formatElapsed } from './elapsed'\n\nconst ACTIVE_STATUSES = new Set(['parsing', 'encrypting', 'indexing', 'analysing'])\nconst RUNNING_STATUSES = new Set(['queued', ...ACTIVE_STATUSES])\n\ninterface StatusTone {\n text: string\n bar: string\n Icon: LucideIcon\n}\n\nconst TONES: Record<string, StatusTone> = {\n completed: { text: 'text-green-text', bar: 'bg-green-text/90', Icon: Check },\n failed: { text: 'text-red-text', bar: 'bg-red-text/90', Icon: X },\n parsing: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n encrypting: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n indexing: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n analysing: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n queued: { text: 'text-yellow-text', bar: 'bg-yellow-text/90', Icon: Loader2 },\n skipped: { text: 'text-gray-text', bar: 'bg-gray-text/90', Icon: SkipForward },\n empty: { text: 'text-yellow-text', bar: 'bg-yellow-text/90', Icon: FileX },\n 'low-content': { text: 'text-yellow-text', bar: 'bg-yellow-text/90', Icon: AlertTriangle },\n}\nconst DEFAULT_TONE: StatusTone = { text: 'text-gray-text', bar: 'bg-blue-text/90', Icon: Loader2 }\n\nexport interface UploadTaskItemLabels {\n /** Delete action text (failed rows). */\n delete: string\n /** Delete action tooltip. */\n deleteTitle: string\n /** aria-label of the progress bar. */\n progress: (fileName: string) => string\n /** Status line text; the default capitalises the raw status. */\n status: (status: string, percent: number) => string\n}\n\nexport const DEFAULT_UPLOAD_TASK_ITEM_LABELS: UploadTaskItemLabels = {\n delete: 'Delete',\n deleteTitle: 'Delete file',\n progress: (fileName) => `${fileName} progress`,\n status: (status, percent) => `${status.charAt(0).toUpperCase() + status.slice(1)} - ${percent}%`,\n}\n\n/** Per-row test ids derived from the task id (defaults `task-item-{id}`, ...). */\nexport interface UploadTaskItemTestIds {\n item: (taskId: string) => string\n fileName: (taskId: string) => string\n progressBar: (taskId: string) => string\n status: (taskId: string) => string\n delete: (taskId: string) => string\n}\n\nexport interface UploadTaskItemProps {\n taskId: string\n fileName: string\n /** queued | parsing | encrypting | indexing | analysing | completed | failed | skipped | empty | low-content */\n status: string\n /** 0-1 fraction or 0-100 percentage. */\n progress: number\n startTime?: number\n endTime?: number\n /** File-type icon for the row (the app maps the extension). */\n fileIcon?: ReactNode\n /** Shown as a Delete action on failed tasks. */\n onDelete?: (taskId: string) => void\n testIds?: Partial<UploadTaskItemTestIds>\n labels?: Partial<UploadTaskItemLabels>\n className?: string\n}\n\n/** One document-processing row: status icon, file, progress bar, status text + elapsed time. */\nexport function UploadTaskItem({\n taskId,\n fileName,\n status,\n progress,\n startTime,\n endTime,\n fileIcon,\n onDelete,\n testIds,\n labels,\n className,\n}: UploadTaskItemProps) {\n const l = { ...DEFAULT_UPLOAD_TASK_ITEM_LABELS, ...labels }\n const [elapsed, setElapsed] = useState('')\n\n useEffect(() => {\n if (!startTime) {\n setElapsed('')\n return\n }\n if (RUNNING_STATUSES.has(status)) {\n const tick = () => setElapsed(formatElapsed(startTime))\n tick()\n const interval = setInterval(tick, 1000)\n return () => clearInterval(interval)\n }\n setElapsed(formatElapsed(startTime, endTime))\n }, [startTime, endTime, status])\n\n const percent = progress > 1 ? progress : progress * 100\n const tone = TONES[status] ?? DEFAULT_TONE\n const StatusIcon = tone.Icon\n\n return (\n <div\n className={cn(\n 'mb-2 w-full max-w-full overflow-hidden rounded-md bg-muted p-2 box-border',\n className\n )}\n data-testid={testIdOr(testIds?.item?.(taskId), { testId: `task-item-${taskId}` })}\n data-slot=\"upload-task-item\"\n >\n <div className=\"mb-1 flex w-full max-w-full items-center gap-2 overflow-hidden\">\n <div className={cn('shrink-0', tone.text)}>\n <StatusIcon className={cn('size-4', ACTIVE_STATUSES.has(status) && 'animate-spin')} />\n </div>\n {fileIcon && <div className=\"shrink-0\">{fileIcon}</div>}\n <div\n className=\"min-w-0 flex-1 truncate text-sm font-medium\"\n title={fileName}\n data-testid={testIdOr(testIds?.fileName?.(taskId), { testId: `task-filename-${taskId}` })}\n >\n {fileName}\n </div>\n </div>\n\n <div\n className=\"mb-1 h-2 w-full max-w-full overflow-hidden rounded-md bg-background\"\n data-testid={testIdOr(testIds?.progressBar?.(taskId), {\n testId: `task-progress-bar-${taskId}`,\n })}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(percent)}\n aria-label={l.progress(fileName)}\n >\n <div\n className={cn('h-2 rounded-md transition-all duration-300 ease-in-out', tone.bar)}\n style={{ width: `${percent}%` }}\n />\n </div>\n\n <div className=\"flex w-full max-w-full items-center justify-between overflow-hidden text-sm\">\n <span\n className=\"truncate text-gray-text\"\n data-testid={testIdOr(testIds?.status?.(taskId), { testId: `task-status-${taskId}` })}\n >\n {l.status(status, Math.round(percent))}\n {elapsed && <span className=\"ml-2 text-muted-foreground\">({elapsed})</span>}\n </span>\n\n {status === 'failed' && onDelete && (\n <button\n type=\"button\"\n onClick={() => onDelete(taskId)}\n className=\"shrink-0 text-sm text-red-text hover:text-red-text/80 pointer-coarse:min-h-11 pointer-coarse:px-3\"\n title={l.deleteTitle}\n data-testid={testIdOr(testIds?.delete?.(taskId), { testId: `delete-task-${taskId}` })}\n >\n {l.delete}\n </button>\n )}\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { UploadTaskItem, type UploadTaskItemLabels } from './UploadTaskItem'\n\nexport interface UploadTaskView {\n fileName: string\n status: string\n progress: number\n startTime?: number\n endTime?: number\n}\n\nexport interface UploadTaskListProps {\n tasks: Record<string, UploadTaskView>\n /** Include only matching tasks. */\n filter?: (taskId: string, task: UploadTaskView) => boolean\n title?: string\n onDelete?: (taskId: string) => void\n /** File-type icon per file name. */\n renderFileIcon?: (fileName: string) => ReactNode\n testIds?: Partial<{ root: string; title: string }>\n labels?: Partial<UploadTaskListLabels>\n /** Labels forwarded to every row. */\n itemLabels?: Partial<UploadTaskItemLabels>\n className?: string\n}\n\nexport interface UploadTaskListLabels {\n title: string\n}\n\nexport const DEFAULT_UPLOAD_TASK_LIST_LABELS: UploadTaskListLabels = {\n title: 'Active Tasks',\n}\n\nexport function UploadTaskList({\n tasks,\n filter,\n title,\n onDelete,\n renderFileIcon,\n testIds,\n labels,\n itemLabels,\n className,\n}: UploadTaskListProps) {\n const l = { ...DEFAULT_UPLOAD_TASK_LIST_LABELS, ...labels }\n const heading = title ?? l.title\n const safeTasks = typeof tasks === 'object' && tasks !== null ? tasks : {}\n let entries = Object.entries(safeTasks)\n if (filter) entries = entries.filter(([id, task]) => filter(id, task))\n\n // Nothing to list: the section around it says so.\n if (entries.length === 0) return null\n\n return (\n <div\n data-testid={testIdOr(testIds?.root, { testId: 'task-status-list' })}\n data-slot=\"upload-task-list\"\n className={cn('box-border w-full max-w-full', className)}\n >\n {heading && (\n <h3\n className=\"mb-2 truncate text-sm font-semibold\"\n data-testid={testIdOr(testIds?.title, { testId: 'task-list-title' })}\n >\n {heading}\n </h3>\n )}\n <div className=\"box-border w-full max-w-full overflow-hidden\">\n {entries.map(([taskId, task]) => (\n <UploadTaskItem\n key={taskId}\n taskId={taskId}\n fileName={task.fileName}\n status={task.status}\n progress={task.progress}\n startTime={task.startTime}\n endTime={task.endTime}\n fileIcon={renderFileIcon?.(task.fileName)}\n onDelete={onDelete}\n labels={itemLabels}\n className=\"box-border max-w-full\"\n />\n ))}\n </div>\n </div>\n )\n}\n","/**\n * Friendly recurrence builder for a recurring Task. Generates an RRULE from a\n * frequency + time (+ weekdays / day-of-month) and offers a collapsible\n * \"Advanced\" field for hand-writing any RRULE the presets can't express.\n */\nimport { useEffect, useState } from 'react'\nimport {\n Button,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n cn,\n} from '@arbidocs/react/ui'\nimport {\n buildRRule,\n DEFAULT_RECURRENCE,\n parseRRule,\n type RecurrenceFrequency,\n type RecurrencePreset,\n type Weekday,\n WEEKDAYS,\n} from './rrule'\nimport { testIdOr } from '../../chat/test-id'\n\n/** Fixed strings of the recurrence builder. */\nexport interface RecurrenceBuilderLabels {\n rruleLabel: string\n rrulePlaceholder: string\n backToSimple: string\n repeat: string\n daily: string\n weekly: string\n monthly: string\n onDay: string\n at: string\n on: string\n advanced: string\n /** Single-letter weekday chips. */\n weekdayShort: Record<Weekday, string>\n}\n\nexport const DEFAULT_RECURRENCE_BUILDER_LABELS: RecurrenceBuilderLabels = {\n rruleLabel: 'Custom schedule (iCalendar rule)',\n rrulePlaceholder: 'FREQ=WEEKLY;BYDAY=MO;BYHOUR=8',\n backToSimple: '← Back to simple',\n repeat: 'Repeat',\n daily: 'Daily',\n weekly: 'Weekly',\n monthly: 'Monthly',\n onDay: 'On day',\n at: 'At',\n on: 'On',\n advanced: 'Custom schedule…',\n weekdayShort: { MO: 'M', TU: 'T', WE: 'W', TH: 'T', FR: 'F', SA: 'S', SU: 'S' },\n}\n\nexport interface RecurrenceBuilderTestIds {\n rruleRaw: string\n simple: string\n builder: string\n frequency: string\n monthDay: string\n time: string\n advanced: string\n /** Per weekday chip (default `task-weekday-{MO..SU}`). */\n weekday: (day: Weekday) => string\n}\n\nexport interface RecurrenceBuilderProps {\n rrule: string\n onChange: (rrule: string) => void\n testIds?: Partial<RecurrenceBuilderTestIds>\n labels?: Partial<RecurrenceBuilderLabels>\n}\n\nconst pad2 = (n: number) => String(n).padStart(2, '0')\n\nexport function RecurrenceBuilder({ rrule, onChange, testIds, labels }: RecurrenceBuilderProps) {\n const l = { ...DEFAULT_RECURRENCE_BUILDER_LABELS, ...labels }\n // Advanced when there's a rule we can't represent in the preset builder.\n const [advanced, setAdvanced] = useState(() => !!rrule && parseRRule(rrule) === null)\n const [preset, setPreset] = useState<RecurrencePreset>(\n () => parseRRule(rrule) ?? DEFAULT_RECURRENCE\n )\n\n // Seed the parent with a valid default rule on first mount when empty.\n useEffect(() => {\n if (!rrule) onChange(buildRRule(DEFAULT_RECURRENCE))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const update = (next: RecurrencePreset) => {\n setPreset(next)\n onChange(buildRRule(next))\n }\n\n const toggleWeekday = (day: Weekday) => {\n const has = preset.weekdays.includes(day)\n const weekdays = has ? preset.weekdays.filter((d) => d !== day) : [...preset.weekdays, day]\n update({ ...preset, weekdays: weekdays.length > 0 ? weekdays : preset.weekdays })\n }\n\n const onTimeChange = (value: string) => {\n const [h, m] = value.split(':').map(Number)\n if (Number.isInteger(h) && Number.isInteger(m)) update({ ...preset, hour: h, minute: m })\n }\n\n if (advanced) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-rrule-raw\">{l.rruleLabel}</Label>\n <Input\n id=\"task-rrule-raw\"\n value={rrule}\n onChange={(e) => onChange(e.target.value)}\n placeholder={l.rrulePlaceholder}\n data-testid={testIdOr(testIds?.rruleRaw, { testId: 'task-rrule-raw' })}\n />\n <button\n type=\"button\"\n className=\"text-sm text-muted-foreground hover:text-foreground\"\n onClick={() => {\n const parsed = parseRRule(rrule)\n setPreset(parsed ?? DEFAULT_RECURRENCE)\n if (!parsed) onChange(buildRRule(DEFAULT_RECURRENCE))\n setAdvanced(false)\n }}\n data-testid={testIdOr(testIds?.simple, { testId: 'task-recurrence-simple' })}\n >\n {l.backToSimple}\n </button>\n </div>\n )\n }\n\n return (\n <div\n className=\"space-y-3\"\n data-testid={testIdOr(testIds?.builder, { testId: 'task-recurrence-builder' })}\n >\n <div className=\"flex items-end gap-3\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-frequency\">{l.repeat}</Label>\n <Select\n value={preset.frequency}\n onValueChange={(v) => update({ ...preset, frequency: v as RecurrenceFrequency })}\n >\n <SelectTrigger\n id=\"task-frequency\"\n className=\"w-[140px]\"\n data-testid={testIdOr(testIds?.frequency, { testId: 'task-frequency' })}\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"daily\">{l.daily}</SelectItem>\n <SelectItem value=\"weekly\">{l.weekly}</SelectItem>\n <SelectItem value=\"monthly\">{l.monthly}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {preset.frequency === 'monthly' && (\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-monthday\">{l.onDay}</Label>\n <Input\n id=\"task-monthday\"\n type=\"number\"\n min={1}\n max={31}\n className=\"w-20\"\n value={preset.monthDay}\n onChange={(e) => {\n const d = Math.min(31, Math.max(1, Number(e.target.value) || 1))\n update({ ...preset, monthDay: d })\n }}\n data-testid={testIdOr(testIds?.monthDay, { testId: 'task-monthday' })}\n />\n </div>\n )}\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-time\">{l.at}</Label>\n <Input\n id=\"task-time\"\n type=\"time\"\n className=\"w-28\"\n value={`${pad2(preset.hour)}:${pad2(preset.minute)}`}\n onChange={(e) => onTimeChange(e.target.value)}\n data-testid={testIdOr(testIds?.time, { testId: 'task-time' })}\n />\n </div>\n </div>\n\n {preset.frequency === 'weekly' && (\n <div className=\"space-y-2\">\n <Label>{l.on}</Label>\n <div className=\"flex gap-1\">\n {WEEKDAYS.map((day) => (\n <Button\n key={day}\n type=\"button\"\n size=\"icon\"\n variant={preset.weekdays.includes(day) ? 'default' : 'outline'}\n className={cn('h-8 w-8 rounded-full text-xs')}\n onClick={() => toggleWeekday(day)}\n data-testid={testIdOr(testIds?.weekday?.(day), { testId: `task-weekday-${day}` })}\n aria-pressed={preset.weekdays.includes(day)}\n >\n {l.weekdayShort[day]}\n </Button>\n ))}\n </div>\n </div>\n )}\n\n <button\n type=\"button\"\n className=\"text-sm text-muted-foreground hover:text-foreground\"\n onClick={() => setAdvanced(true)}\n data-testid={testIdOr(testIds?.advanced, { testId: 'task-recurrence-advanced' })}\n >\n {l.advanced}\n </button>\n </div>\n )\n}\n","import type { Tone } from '../../components/tones'\n\n/**\n * What starts a workflow: a moment (`one_time`), a repeating schedule (`recurring`), a notification\n * (`event`), another conversation finishing (`after`), or nothing but someone pressing Run (`on_demand`).\n */\nexport type WorkflowTriggerType = 'one_time' | 'recurring' | 'event' | 'after' | 'on_demand'\n\n/**\n * Where a task (a conversation with a status) is. Agents do the work; only a person marks it `done`.\n * - `todo`: open, nothing automated pending (a finished run leaves the task here).\n * - `generating`: an agent run is in flight.\n * - `done`: a person marked it done.\n * - `chat`: no status at all: a plain conversation, listed beside the tasks.\n */\nexport type TaskStatusKey = 'todo' | 'generating' | 'done' | 'chat'\n\nexport const TRIGGER_LABELS: Record<WorkflowTriggerType, string> = {\n one_time: 'One-time',\n recurring: 'Recurring',\n event: 'Event',\n after: 'After a task',\n on_demand: 'On demand',\n}\n\nexport const STATUS_LABELS: Record<TaskStatusKey, string> = {\n todo: 'To do',\n generating: 'Generating',\n done: 'Done',\n chat: 'Chat',\n}\n\n/** The order sections appear in the list: work in progress first, finished work last. */\nexport const STATUS_ORDER: readonly TaskStatusKey[] = ['generating', 'todo', 'done', 'chat']\n\nexport const STATUS_TONE: Record<TaskStatusKey, Tone> = {\n todo: 'neutral',\n generating: 'ai',\n done: 'success',\n chat: 'neutral',\n}\n\n/**\n * A status string from the API narrowed to the known set. No status is a plain chat; anything else\n * unexpected reads as a to-do.\n */\nexport function asTaskStatus(status: string | null | undefined): TaskStatusKey {\n if (!status) return 'chat'\n return (STATUS_ORDER as readonly string[]).includes(status) ? (status as TaskStatusKey) : 'todo'\n}\n\n/** The goal-state fields the list reads from a goal task's last run. */\nexport interface TaskGoalState {\n done?: boolean\n criteria_met?: number\n criteria_total?: number\n}\n\n/**\n * Goal progress from a goal task's last run (its `/goal` gate verdict), or null when the task\n * has no goal state yet.\n */\nexport function goalProgress(task: { goal_state?: unknown }): {\n met: number\n total: number\n done: boolean\n} | null {\n const gs = task.goal_state as TaskGoalState | null | undefined\n if (!gs || gs.criteria_total == null) return null\n return { met: gs.criteria_met ?? 0, total: gs.criteria_total, done: gs.done === true }\n}\n","import { FileText } from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\n/** A document a task produced, as the Outputs cell needs it. */\nexport interface TaskOutput {\n id: string\n name: string\n}\n\nexport interface TaskOutputsCellLabels {\n none: string\n /** Menu trigger's accessible name. */\n open: (count: number) => string\n /** \"+2\" next to the first file name. */\n more: (count: number) => string\n}\n\nexport const DEFAULT_TASK_OUTPUTS_CELL_LABELS: TaskOutputsCellLabels = {\n none: '—',\n open: (count) => `${count} ${count === 1 ? 'output' : 'outputs'}`,\n more: (count) => `+${count}`,\n}\n\nexport interface TaskOutputsCellProps {\n /** Task id: keys the test ids (`task-outputs-{id}`, `task-output-{id}-{docId}`). */\n id: string\n outputs?: readonly TaskOutput[]\n onOpen: (documentId: string) => void\n testId?: string\n labels?: Partial<TaskOutputsCellLabels>\n}\n\n/** The documents a task generated: the first file name and a count, with a menu that opens each. */\nexport function TaskOutputsCell({ id, outputs, onOpen, testId, labels }: TaskOutputsCellProps) {\n const l = { ...DEFAULT_TASK_OUTPUTS_CELL_LABELS, ...labels }\n const base = testIdOr(testId, { testId: `task-outputs-${id}` })\n if (!outputs || outputs.length === 0) {\n return (\n <span className=\"text-xs text-muted-foreground\" data-testid={base} data-state=\"none\">\n {l.none}\n </span>\n )\n }\n const [first] = outputs\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 max-w-full gap-1.5 px-2 text-xs\"\n aria-label={l.open(outputs.length)}\n data-testid={base}\n data-count={outputs.length}\n >\n <FileText className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{first.name}</span>\n {outputs.length > 1 && (\n <span className=\"shrink-0 text-muted-foreground\">{l.more(outputs.length - 1)}</span>\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {outputs.map((o) => (\n <DropdownMenuItem\n key={o.id}\n onSelect={() => onOpen(o.id)}\n data-testid={`task-output-${id}-${o.id}`}\n >\n <FileText className=\"mr-2 size-4\" aria-hidden />\n <span className=\"truncate\">{o.name}</span>\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","import { useState } from 'react'\nimport { CornerDownRight } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n Input,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface TaskMoveOption {\n id: string\n label: string\n}\n\nexport interface TaskMoveDialogLabels {\n title: string\n none: string\n search: string\n empty: string\n cancel: string\n}\n\nexport interface TaskMoveDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** Where the task can go (the host excludes the task itself and its descendants). */\n options: TaskMoveOption[]\n /** The task's current parent, marked in the list. */\n currentParentId?: string | null\n /** `null` moves the task to the top level. */\n onPick: (parentId: string | null) => void\n labels: TaskMoveDialogLabels\n testId?: string\n}\n\n/** A parent picker: choose the task another task becomes a sub-task of, or the top level. */\nexport function TaskMoveDialog({\n open,\n onOpenChange,\n options,\n currentParentId,\n onPick,\n labels,\n testId,\n}: TaskMoveDialogProps) {\n const [query, setQuery] = useState('')\n const id = testIdOr(testId, { testId: 'task-move' })\n const q = query.trim().toLowerCase()\n const shown = q ? options.filter((o) => o.label.toLowerCase().includes(q)) : options\n const pick = (parentId: string | null) => {\n onPick(parentId)\n onOpenChange(false)\n }\n return (\n <Dialog\n open={open}\n onOpenChange={(next) => {\n if (!next) setQuery('')\n onOpenChange(next)\n }}\n >\n <DialogContent presentation=\"sheet\" className=\"max-h-[80dvh] sm:max-w-md\" data-testid={id}>\n <DialogHeader>\n <DialogTitle>{labels.title}</DialogTitle>\n <DialogDescription className=\"sr-only\">{labels.title}</DialogDescription>\n </DialogHeader>\n <Input\n value={query}\n placeholder={labels.search}\n aria-label={labels.search}\n onChange={(e) => setQuery(e.target.value)}\n data-testid={`${id}-search`}\n />\n <ul\n className=\"flex max-h-[50dvh] flex-col gap-1 overflow-y-auto\"\n data-testid={`${id}-list`}\n >\n {!q && (\n <li>\n <Button\n variant=\"ghost\"\n className=\"h-9 w-full justify-start gap-2 pointer-coarse:h-11\"\n disabled={!currentParentId}\n onClick={() => pick(null)}\n data-testid={`${id}-none`}\n >\n {labels.none}\n </Button>\n </li>\n )}\n {shown.map((o) => (\n <li key={o.id}>\n <Button\n variant=\"ghost\"\n className=\"h-9 w-full justify-start gap-2 pointer-coarse:h-11\"\n disabled={o.id === currentParentId}\n onClick={() => pick(o.id)}\n data-testid={`${id}-option-${o.id}`}\n >\n <CornerDownRight className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{o.label}</span>\n </Button>\n </li>\n ))}\n {shown.length === 0 && (\n <li className=\"px-2 py-4 text-center text-sm text-muted-foreground\">{labels.empty}</li>\n )}\n </ul>\n <div className=\"flex justify-end\">\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n {labels.cancel}\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n","import { useEffect, useState } from 'react'\nimport { AlertCircle, Check, CircleDashed, Loader2, MessageSquare } from 'lucide-react'\nimport { ToneBadge } from '../../components/ToneBadge'\nimport { testIdOr } from '../../chat/test-id'\nimport { formatElapsed } from './elapsed'\nimport { STATUS_LABELS, STATUS_TONE, asTaskStatus, type TaskStatusKey } from './taskLabels'\n\nexport interface TaskStatusPillLabels {\n waitingForAccess: string\n lastRunFailed: string\n /** The visible word beside the status when the last run failed. */\n failed: string\n}\n\nexport const DEFAULT_TASK_STATUS_PILL_LABELS: TaskStatusPillLabels = {\n waitingForAccess: 'Waiting for access',\n lastRunFailed: 'Last run failed',\n failed: 'Failed',\n}\n\nexport interface TaskStatusPillProps {\n /** Task id: keys the test id (`task-status-{id}`). */\n id: string\n status: string | null | undefined\n /** When the in-flight run started (ISO); a generating pill shows a live elapsed time. */\n runStartedAt?: string | null\n /** The last run's error, shown as a danger dot with the message on hover. */\n lastError?: string | null\n /** A run is waiting for the owner to grant workspace access. */\n awaitingAccess?: boolean\n testId?: string\n labels?: Partial<TaskStatusPillLabels>\n /** Tooltip with the latest step (\"To do · 2 min ago\"). */\n hint?: string\n}\n\nconst ICON = 'size-3'\n\nfunction StatusIcon({ status }: { status: TaskStatusKey }) {\n switch (status) {\n case 'generating':\n return <Loader2 className={`${ICON} animate-spin`} aria-hidden />\n case 'done':\n return <Check className={ICON} aria-hidden />\n case 'chat':\n return <MessageSquare className={ICON} aria-hidden />\n default:\n return <CircleDashed className={ICON} aria-hidden />\n }\n}\n\n/** Ticks once a second while mounted, so a generating pill's elapsed time stays live. */\nfunction useNow(active: boolean): number {\n const [now, setNow] = useState(() => Date.now())\n useEffect(() => {\n if (!active) return\n const timer = setInterval(() => setNow(Date.now()), 1000)\n return () => clearInterval(timer)\n }, [active])\n return now\n}\n\n/** A task's workflow status as one tinted pill: To do, Generating (live), Done. */\nexport function TaskStatusPill({\n id,\n status,\n runStartedAt,\n lastError,\n awaitingAccess = false,\n testId,\n labels,\n hint,\n}: TaskStatusPillProps) {\n const l = { ...DEFAULT_TASK_STATUS_PILL_LABELS, ...labels }\n const key = asTaskStatus(status)\n const generating = key === 'generating'\n const now = useNow(generating && Boolean(runStartedAt))\n const started = runStartedAt ? Date.parse(runStartedAt) : NaN\n\n let text: string = STATUS_LABELS[key]\n let tone = STATUS_TONE[key]\n if (awaitingAccess) {\n text = l.waitingForAccess\n tone = 'danger'\n }\n const elapsed = generating && !Number.isNaN(started) ? formatElapsed(started, now) : null\n\n return (\n <span className=\"inline-flex items-center gap-1.5\" data-slot=\"task-status\" title={hint}>\n <ToneBadge\n tone={tone}\n icon={<StatusIcon status={key} />}\n data-status={key}\n data-testid={testIdOr(testId, { testId: `task-status-${id}` })}\n >\n {text}\n {elapsed && <span className=\"tabular-nums opacity-70\">· {elapsed}</span>}\n </ToneBadge>\n {lastError && !generating && (\n <span\n role=\"img\"\n aria-label={l.lastRunFailed}\n title={`${l.lastRunFailed}: ${lastError}`}\n className=\"inline-flex shrink-0 items-center gap-1 text-xs font-medium text-red-text\"\n data-testid={`task-error-${id}`}\n >\n <AlertCircle className=\"size-3.5\" aria-hidden />\n {l.failed}\n </span>\n )}\n </span>\n )\n}\n","/**\n * Column definitions for the tasks grid. Every column has an\n * explicit `colId` (AG Grid persists column state by id: see CLAUDE.md). The table supplies behaviour and\n * the cells that need it through slots; the structure, widths and headers live here. The slots must be\n * stable functions (the table keeps the latest handlers behind them) so the definitions are built once\n * and the grid never refreshes its columns on a selection or expand.\n *\n * Every conversation is a task: Owner (who has the next step), due, shared, thread link,\n * status, outputs. Rows are `TaskGridRow`s: a task plus where it sits in the sub-task tree, so the\n * order is the tree's. A column's header still shows and reports the sort, but the grid's own sort is\n * a no-op (`keepOrder`): that would tear sub-tasks away from their parent, so the table sorts within\n * each level instead (see `buildTaskRows`).\n */\nimport type { ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport type { TaskGridRow, TaskListRow } from './taskRows'\nimport type { TaskListLabels } from './taskTableLabels'\n\n/** The actions column's width: Allow access and the menu (the widest row). */\nexport const ACTIONS_WIDTH = 160\nconst NARROW_ACTIONS_WIDTH = 56\n\nexport const TASK_COLUMN_ORDER = [\n 'name',\n 'owner',\n 'due',\n 'status',\n 'outputs',\n 'shared',\n 'actions',\n] as const\n\nexport interface CreateTaskColumnsOptions<T extends TaskListRow> {\n labels: TaskListLabels\n renderName: (row: TaskGridRow<T>) => ReactNode\n /** Who has the next step. */\n renderOwner: (row: TaskGridRow<T>) => ReactNode\n renderDue: (row: TaskGridRow<T>) => ReactNode\n renderShared: (row: TaskGridRow<T>) => ReactNode\n /** The documents the task generated. */\n renderOutputs: (row: TaskGridRow<T>) => ReactNode\n /** A phone-width grid: the actions column is just the menu. */\n narrow?: boolean\n /** Whether the Outputs column is shown: only worth the room once some task has outputs. */\n showOutputs?: boolean\n renderStatus: (row: TaskGridRow<T>) => ReactNode\n /** Who is in the thread (Threads view). */\n renderActions: (row: TaskGridRow<T>) => ReactNode\n /** Plain text of the owner cell, for sorting, filters and the clipboard. */\n getOwnerName: (row: TaskGridRow<T>) => string\n}\n\n/** Grid-side comparator that keeps the table's order: the table sorts each level itself. */\nconst keepOrder = () => 0\n\n/** Columns the user can sort by, per view. */\nexport type SortableTaskColumn = 'name' | 'owner' | 'due' | 'status' | 'updated' | 'messages'\n\n/** The cell renderer for a slot: a missing row (AG Grid's loading shell) renders nothing. */\nfunction cell<T extends TaskListRow>(render: (row: TaskGridRow<T>) => ReactNode) {\n return (params: ICellRendererParams<TaskGridRow<T>>): ReactNode =>\n params.data ? render(params.data) : null\n}\n\nexport function createTaskColumns<T extends TaskListRow>(\n o: CreateTaskColumnsOptions<T>\n): ColDef<TaskGridRow<T>>[] {\n const l = o.labels\n const sortable = {\n sortable: true,\n comparator: keepOrder,\n sortingOrder: ['asc' as const, 'desc' as const, null],\n }\n const base: Partial<ColDef<TaskGridRow<T>>> = {\n sortable: false,\n suppressMovable: true,\n // Keyboard focus lands on the name cell only (arrow keys expand and collapse sub-tasks there).\n suppressNavigable: true,\n cellStyle: { display: 'flex', alignItems: 'center' },\n }\n const name: ColDef<TaskGridRow<T>> = {\n ...base,\n colId: 'name',\n ...sortable,\n suppressNavigable: false,\n headerName: l.colTask,\n flex: 3,\n minWidth: 200,\n cellRenderer: cell(o.renderName),\n }\n const shared: ColDef<TaskGridRow<T>> = {\n ...base,\n colId: 'shared',\n headerName: l.colShared,\n headerTooltip: l.shared,\n width: 120,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'center' },\n valueGetter: (p) => p.data?.task.is_shared ?? false,\n cellRenderer: cell(o.renderShared),\n }\n const actions = (): ColDef<TaskGridRow<T>> => ({\n ...base,\n colId: 'actions',\n headerName: '',\n // Always in view, even if the rest has to scroll.\n pinned: 'right',\n lockPinned: true,\n width: o.narrow ? NARROW_ACTIONS_WIDTH : ACTIONS_WIDTH,\n minWidth: NARROW_ACTIONS_WIDTH,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'flex-end' },\n cellRenderer: cell(o.renderActions),\n })\n\n // Left to right: the title, who has the next step, when, how it stands, then who sees it and the\n // thread link, with the actions (Approve included) last, at the right edge.\n return [\n name,\n {\n ...base,\n colId: 'owner',\n ...sortable,\n headerName: l.colOwner,\n headerTooltip: l.ownerHint,\n flex: 1.4,\n minWidth: 150,\n valueGetter: (p) => (p.data ? o.getOwnerName(p.data) : ''),\n cellRenderer: cell(o.renderOwner),\n },\n {\n ...base,\n colId: 'due',\n ...sortable,\n headerName: l.colDue,\n flex: 1,\n minWidth: 140,\n valueGetter: (p) => p.data?.task.due_at ?? '',\n cellRenderer: cell(o.renderDue),\n },\n {\n ...base,\n colId: 'status',\n ...sortable,\n headerName: l.colStatus,\n // Wide enough for \"Generating\" and \"Waiting for access\" in full, with the elapsed time.\n flex: 1.3,\n minWidth: 170,\n valueGetter: (p) => p.data?.task.status ?? '',\n cellRenderer: cell(o.renderStatus),\n },\n ...(o.showOutputs\n ? [\n {\n ...base,\n colId: 'outputs',\n headerName: l.colOutputs,\n flex: 1.2,\n minWidth: 130,\n cellRenderer: cell(o.renderOutputs),\n } as ColDef<TaskGridRow<T>>,\n ]\n : []),\n shared,\n actions(),\n ]\n}\n","import { STATUS_ORDER, asTaskStatus, type TaskStatusKey } from './taskLabels'\n\n/**\n * The deepest a task may nest, counting the top-level task as level 1 (a task, its sub-tasks, their\n * sub-tasks, and so on). The table indents no further than the last level, and \"Move to…\" offers\n * only parents that keep the moved subtree within it. The backend is asked to enforce the same cap.\n */\nexport const MAX_TASK_DEPTH = 5\n\n/**\n * The fields of a task the table reads. A task is a conversation with a `status`\n * (`GET /v1/conversation/list`); callers' richer conversation types are accepted as-is, and the\n * host keeps only the rows whose `status` is set (a chat has none).\n */\nexport interface TaskListRow {\n external_id: string\n /** The conversation title; null until a run (which holds the key) names it. */\n title?: string | null\n description?: string | null\n /** `todo | generating | done`; null for a plain chat. */\n status?: string | null\n in_progress?: boolean | null\n run_started_at?: string | null\n due_at?: string | null\n last_error?: string | null\n /** Set while a run waits for the owner to grant access. */\n pending_auth_request_id?: string | null\n goal_state?: unknown\n /** Shared with the workspace's members (false = private to its owner). */\n is_shared?: boolean | null\n /** False for a teammate's shared task: they can finish it, but not run, share or delete it. */\n is_owner?: boolean | null\n /** The person who created the task (it is assigned to them when no agent works on it). */\n owner_ext_id?: string | null\n /** The task this is a sub-task of. */\n parent_conversation_ext_id?: string | null\n /** The workflow that created it, if any. */\n workflow_ext_id?: string | null\n /** The agent that prepares the work (none for a plain to-do). */\n agent_ext_id?: string | null\n /** Work for the default assistant need not have a named agent. */\n has_agent_action?: boolean\n skill_ref?: string | null\n /** Who started the thread. */\n created_by_ext_id?: string | null\n message_count?: number | null\n updated_at?: string | null\n}\n\n/**\n * Who owns a task: the person who created it (never the agent that did the work). They are notified\n * when its run finishes.\n */\nexport const ownerExtId = (task: TaskListRow): string | null =>\n task.owner_ext_id || task.created_by_ext_id || null\n\n/** A plain to-do (no agent, no skill): nothing to run, a person just marks it done. */\nexport const isPlainTodo = (task: TaskListRow): boolean =>\n !task.agent_ext_id && !task.has_agent_action && !task.skill_ref\n\nexport type TaskFilter = 'all' | TaskStatusKey\n\n/** One line of the table: a task, how deep it sits under its parent and what its children add up to. */\nexport interface TaskGridRow<T extends TaskListRow> {\n external_id: string\n task: T\n depth: number\n /** Present when the task has sub-tasks (all of them, whatever the filter shows). */\n childStats?: { done: number; total: number }\n expanded: boolean\n parentId: string | null\n /** Number of siblings shown at this level, and this row's 1-based place among them. */\n setSize: number\n posInSet: number\n /** Shown only as the ancestor of a match (the filter or search did not select it itself). */\n context: boolean\n}\n\n/** The parent/child index of a task list. A parent that is not in the list (hidden, deleted) is ignored. */\nexport interface TaskTree<T extends TaskListRow> {\n byId: Map<string, T>\n kids: Map<string, T[]>\n parentOf: Map<string, string>\n}\n\nexport function indexTasks<T extends TaskListRow>(tasks: T[]): TaskTree<T> {\n const byId = new Map(tasks.map((t) => [t.external_id, t]))\n const kids = new Map<string, T[]>()\n const parentOf = new Map<string, string>()\n for (const task of tasks) {\n const parent = task.parent_conversation_ext_id\n if (parent && parent !== task.external_id && byId.has(parent)) {\n parentOf.set(task.external_id, parent)\n const list = kids.get(parent)\n if (list) list.push(task)\n else kids.set(parent, [task])\n }\n }\n return { byId, kids, parentOf }\n}\n\n/** Every task below `id`, at any depth (collapsed or filtered out included), without repeats. */\nexport function descendantIds<T extends TaskListRow>(tree: TaskTree<T>, id: string): string[] {\n const out: string[] = []\n const seen = new Set<string>([id])\n const stack = [id]\n while (stack.length) {\n for (const child of tree.kids.get(stack.pop() as string) ?? []) {\n if (seen.has(child.external_id)) continue\n seen.add(child.external_id)\n out.push(child.external_id)\n stack.push(child.external_id)\n }\n }\n return out\n}\n\n/** 1 for a task with no children, 2 for one with children, and so on. */\nfunction subtreeLevels<T extends TaskListRow>(\n tree: TaskTree<T>,\n id: string,\n seen = new Set<string>()\n): number {\n if (seen.has(id)) return 0\n const next = new Set(seen).add(id)\n let deepest = 0\n for (const child of tree.kids.get(id) ?? []) {\n deepest = Math.max(deepest, subtreeLevels(tree, child.external_id, next))\n }\n return 1 + deepest\n}\n\n/** The level of a task: 1 for a top-level task. */\nfunction levelOf<T extends TaskListRow>(tree: TaskTree<T>, id: string): number {\n let level = 1\n const seen = new Set<string>([id])\n for (let at = tree.parentOf.get(id); at && !seen.has(at); at = tree.parentOf.get(at)) {\n seen.add(at)\n level += 1\n }\n return level\n}\n\n/**\n * The tasks `task` can be moved under: any other task that is not one of its own descendants and\n * keeps the moved subtree within {@link MAX_TASK_DEPTH}.\n */\nexport function moveTargets<T extends TaskListRow>(tasks: T[], task: T): T[] {\n const tree = indexTasks(tasks)\n const banned = new Set([task.external_id, ...descendantIds(tree, task.external_id)])\n const height = subtreeLevels(tree, task.external_id)\n return tasks.filter(\n (t) => !banned.has(t.external_id) && levelOf(tree, t.external_id) + height <= MAX_TASK_DEPTH\n )\n}\n\ninterface TreeNode<T extends TaskListRow> {\n task: T\n depth: number\n context: boolean\n children: TreeNode<T>[]\n}\n\nexport interface BuildTaskRowsOptions<T extends TaskListRow> {\n /** Case-insensitive text matched against the title and description. */\n query?: string\n /** The text shown for a task (defaults to its title): what the search reads. */\n titleOf?: (task: T) => string\n /**\n * Rows built last time, by id. A row whose task, depth, place and counts are unchanged is reused\n * (same object), so the grid only refreshes the rows that really changed. Updated in place.\n */\n cache?: Map<string, TaskGridRow<T>>\n}\n\nconst sameStats = (a: TaskGridRow<never>['childStats'], b: TaskGridRow<never>['childStats']) =>\n a === b || (a !== undefined && b !== undefined && a.done === b.done && a.total === b.total)\n\n/**\n * The table's lines, in order. The full view is the sub-task forest grouped by the status of each root\n * (what an agent is generating first, then to-dos, and finally what is done). A\n * status filter or a search keeps every match together with its ancestors, which show as `context`\n * rows rather than leaving their children orphaned. A task whose parent is not in the list (not\n * visible, or deleted) is top-level, and a collapsed task hides its sub-tasks.\n *\n * With `compare` (the user sorted a column) tasks are sorted within their own level: roots among roots\n * (no longer grouped by status) and each task's sub-tasks among themselves, so a sub-task never leaves\n * its parent. AG Grid cannot do this itself without its Enterprise tree data.\n */\nexport function buildTaskRows<T extends TaskListRow>(\n tasks: T[],\n filter: TaskFilter,\n collapsed: ReadonlySet<string>,\n compare?: (a: T, b: T) => number,\n options: BuildTaskRowsOptions<T> = {}\n): TaskGridRow<T>[] {\n const tree = indexTasks(tasks)\n const { kids, parentOf } = tree\n const sorted = (list: T[]): T[] => (compare ? [...list].sort(compare) : list)\n const query = options.query?.trim().toLowerCase() ?? ''\n const titleOf = options.titleOf ?? ((t: T) => t.title ?? '')\n\n // With a filter or a search only the matches and their ancestors are shown.\n let included: Set<string> | null = null\n let matched: Set<string> | null = null\n if (filter !== 'all' || query) {\n matched = new Set()\n included = new Set()\n for (const task of tasks) {\n const statusOk = filter === 'all' || asTaskStatus(task.status) === filter\n const textOk =\n !query || `${titleOf(task)} ${task.description ?? ''}`.toLowerCase().includes(query)\n if (!statusOk || !textOk) continue\n matched.add(task.external_id)\n for (\n let at: string | undefined = task.external_id;\n at && !included.has(at);\n at = parentOf.get(at)\n ) {\n included.add(at)\n }\n }\n }\n const shown = (list: T[]): T[] =>\n included ? list.filter((t) => (included as Set<string>).has(t.external_id)) : list\n\n const build = (task: T, depth: number, seen: Set<string>): TreeNode<T> => {\n const nextSeen = new Set(seen).add(task.external_id)\n return {\n task,\n depth,\n context: matched ? !matched.has(task.external_id) : false,\n children: sorted(shown(kids.get(task.external_id) ?? []))\n .filter((child) => !nextSeen.has(child.external_id))\n .map((child) => build(child, depth + 1, nextSeen)),\n }\n }\n\n // Without a sort the sections are the statuses; with one there is a single section in sorted order.\n const sections = new Map<TaskStatusKey | 'sorted', TreeNode<T>[]>([\n ...STATUS_ORDER.map((s) => [s, []] as [TaskStatusKey, TreeNode<T>[]]),\n ['sorted', []],\n ])\n const sectionOf = (task: T): TaskStatusKey | 'sorted' =>\n compare ? 'sorted' : asTaskStatus(task.status)\n const roots = tasks.filter((t) => !parentOf.has(t.external_id))\n for (const task of sorted(shown(roots))) {\n sections.get(sectionOf(task))?.push(build(task, 0, new Set()))\n }\n\n const cache = options.cache\n const used = new Set<string>()\n const rows: TaskGridRow<T>[] = []\n const walk = (node: TreeNode<T>, parentId: string | null, setSize: number, posInSet: number) => {\n const id = node.task.external_id\n const expanded = !collapsed.has(id)\n const all = kids.get(id)\n const childStats = all\n ? { done: all.filter((c) => asTaskStatus(c.status) === 'done').length, total: all.length }\n : undefined\n let row: TaskGridRow<T> = {\n external_id: id,\n task: node.task,\n depth: node.depth,\n childStats,\n expanded,\n parentId,\n setSize,\n posInSet,\n context: node.context,\n }\n const prev = cache?.get(id)\n if (\n prev &&\n prev.task === row.task &&\n prev.depth === row.depth &&\n prev.expanded === row.expanded &&\n prev.parentId === row.parentId &&\n prev.setSize === row.setSize &&\n prev.posInSet === row.posInSet &&\n prev.context === row.context &&\n sameStats(prev.childStats, row.childStats)\n ) {\n row = prev\n }\n used.add(id)\n cache?.set(id, row)\n rows.push(row)\n if (expanded) {\n node.children.forEach((child, i) => walk(child, id, node.children.length, i + 1))\n }\n }\n const ordered = [...STATUS_ORDER, 'sorted' as const].flatMap((s) => sections.get(s) ?? [])\n ordered.forEach((node, i) => walk(node, null, ordered.length, i + 1))\n if (cache) for (const id of [...cache.keys()]) if (!used.has(id)) cache.delete(id)\n return rows\n}\n","import type { TaskStatusKey } from './taskLabels'\n\nexport interface TaskListLabels {\n agent: string\n filterAll: string\n emptyTitle: string\n emptyMessage: string\n noMatches: string\n due: (when: string) => string\n overdue: (when: string) => string\n colTask: string\n colOwner: string\n ownerHint: string\n colOutputs: string\n preparedBy: (agentName: string) => string\n colDue: string\n colStatus: string\n me: string\n someone: string\n noDue: string\n colShared: string\n shared: string\n sharedOwnerOnly: string\n deleteOwnerOnly: string\n goalMet: (met: number, total: number) => string\n subtasksDone: (done: number, total: number) => string\n expandSubtasks: string\n collapseSubtasks: string\n selectAll: string\n selectTask: (name: string) => string\n markDone: string\n reopen: string\n markDoneMany: string\n markDoneManyHint: string\n deleteMany: string\n moveTo: string\n untitled: string\n fromWorkflow: (workflowName: string) => string\n searchLabel: string\n searchPlaceholder: string\n expandAll: string\n collapseAll: string\n moveToTitle: (taskName: string) => string\n moveToNone: string\n moveToSearch: string\n moveToEmpty: string\n moveToCancel: string\n subtasksSelected: (count: number) => string\n addSubtask: string\n edit: string\n rename: string\n delete: string\n grantAccess: string\n allowAccess: string\n moreActions: string\n activity: string\n /** Status tooltip: the latest step and how long ago. */\n statusHint: (status: string, ago: string) => string\n status: Partial<Record<TaskStatusKey, string>>\n}\n\nexport const DEFAULT_TASK_LIST_LABELS: TaskListLabels = {\n filterAll: 'All',\n emptyTitle: 'No tasks yet',\n emptyMessage:\n 'Use New to add one: just type what you need, or add a due date. Automations that create tasks live on the Workflows page. You always decide when a task is done.',\n noMatches: 'No tasks match.',\n due: (when) => when,\n overdue: (when) => `${when} · overdue`,\n agent: 'Agent',\n colTask: 'Task',\n colOwner: 'Owner',\n ownerHint: 'Who created the task. They are notified when its run finishes.',\n colOutputs: 'Outputs',\n preparedBy: (agent) => `Prepared by ${agent}`,\n colDue: 'Due',\n colStatus: 'Status',\n me: 'Me',\n someone: 'Someone',\n noDue: '—',\n colShared: 'Sharing',\n shared: 'Shared with the workspace',\n sharedOwnerOnly: 'Only the creator can change who can see this',\n deleteOwnerOnly: 'Only the creator or workspace owner can delete this',\n goalMet: (met, total) => `${met}/${total} met`,\n subtasksDone: (done, total) => `${done}/${total} sub-tasks done`,\n expandSubtasks: 'Show sub-tasks',\n collapseSubtasks: 'Hide sub-tasks',\n selectAll: 'Select all tasks',\n selectTask: (name) => `Select ${name}`,\n markDone: 'Mark done',\n reopen: 'Reopen',\n markDoneMany: 'Mark done',\n markDoneManyHint: 'Marks the selected tasks done.',\n deleteMany: 'Delete',\n moveTo: 'Move to…',\n untitled: 'Untitled task',\n fromWorkflow: (name) => `From “${name}”`,\n searchLabel: 'Search tasks',\n searchPlaceholder: 'Search tasks…',\n expandAll: 'Expand all',\n collapseAll: 'Collapse all',\n moveToTitle: (name) => `Move “${name}” to…`,\n moveToNone: 'No parent (top level)',\n moveToSearch: 'Search tasks…',\n moveToEmpty: 'No task to move it under.',\n moveToCancel: 'Cancel',\n subtasksSelected: (count) => `${count} ${count === 1 ? 'sub-task' : 'sub-tasks'} included`,\n addSubtask: 'Add sub-task',\n edit: 'Edit',\n rename: 'Rename',\n delete: 'Delete',\n grantAccess: 'Allow access and continue',\n allowAccess: 'Allow access',\n moreActions: 'More actions',\n activity: 'Activity',\n statusHint: (status, ago) => `${status} · ${ago}`,\n status: {},\n}\n","import { useState } from 'react'\nimport {\n CheckCheck,\n KeyRound,\n CornerDownRight,\n ListPlus,\n MoreHorizontal,\n History,\n Pencil,\n RotateCcw,\n Trash2,\n} from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@arbidocs/react/ui'\nimport { isPlainTodo, type TaskListRow } from './taskRows'\nimport type { TaskStatusKey } from './taskLabels'\nimport type { TaskListLabels } from './taskTableLabels'\n\nexport interface TaskRowMenuProps {\n task: TaskListRow\n status: TaskStatusKey\n busy: boolean\n /** The viewer owns the task: only they delete it, grant its agent access, or change who sees it. */\n isOwner: boolean\n /** The viewer may change who sees it and delete it: its creator, or an owner of the workspace. */\n canAdmin: boolean\n /** The viewer can edit it: its owner, or an editor of the workspace a shared task sits in. */\n canEdit: boolean\n labels: TaskListLabels\n /** Explicit completion permission; otherwise follows the existing edit permission. */\n canMarkDone?: boolean\n /** Hide when the containing view already offers a reopen control. */\n canReopen?: boolean\n selected?: boolean\n onToggleSelected?: () => void\n onMarkDone: () => void\n onReopen: () => void\n onAddSubtask?: () => void\n onEdit: () => void\n onDelete?: () => void\n onMoveTo?: () => void\n onNotify?: () => void\n /** Open the task's activity timeline. */\n onToggleShared?: () => void\n onOpenActivity?: () => void\n /** Present only when a run is waiting for access. */\n onGrantAccess?: () => void\n}\n\nexport function TaskRowMenu({\n task,\n status,\n busy,\n isOwner,\n canAdmin,\n canEdit,\n labels,\n canMarkDone = canEdit,\n canReopen = canEdit,\n selected = false,\n onToggleSelected,\n onMarkDone,\n onReopen,\n onAddSubtask,\n onEdit,\n onDelete,\n onMoveTo,\n onOpenActivity,\n onToggleShared,\n onGrantAccess,\n}: TaskRowMenuProps) {\n const [open, setOpen] = useState(false)\n const id = task.external_id\n // An editor can do everything but delete and grant access (the owner's). A guest only reads.\n // A plain chat is not run, finished or reopened: it can be renamed, moved and deleted.\n const isChat = status === 'chat'\n const done = status === 'done'\n return (\n <DropdownMenu open={open} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 pointer-coarse:size-11\"\n aria-label={labels.moreActions}\n data-testid={`task-menu-${id}`}\n >\n <MoreHorizontal className=\"size-4\" aria-hidden />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {onToggleSelected && (\n <DropdownMenuItem onSelect={onToggleSelected} data-testid={`task-select-${id}`}>\n {selected ? 'Deselect task' : 'Select task'}\n </DropdownMenuItem>\n )}\n {isOwner && onGrantAccess && task.pending_auth_request_id && (\n <DropdownMenuItem\n onSelect={onGrantAccess}\n data-testid={`task-grant-${id}`}\n className=\"text-destructive\"\n >\n <KeyRound className=\"mr-2 size-4\" aria-hidden />\n {labels.grantAccess}\n </DropdownMenuItem>\n )}\n {isChat || !canEdit\n ? null\n : done\n ? canReopen && (\n <DropdownMenuItem\n disabled={busy}\n onSelect={onReopen}\n data-testid={`task-reopen-${id}`}\n >\n <RotateCcw className=\"mr-2 size-4\" aria-hidden />\n {labels.reopen}\n </DropdownMenuItem>\n )\n : canMarkDone && (\n <DropdownMenuItem\n disabled={busy}\n onSelect={onMarkDone}\n data-testid={`task-mark-done-${id}`}\n >\n <CheckCheck className=\"mr-2 size-4\" aria-hidden />\n {labels.markDone}\n </DropdownMenuItem>\n )}\n {!isChat && onOpenActivity && (\n <DropdownMenuItem onSelect={onOpenActivity} data-testid={`task-activity-${id}`}>\n <History className=\"mr-2 size-4\" aria-hidden />\n {labels.activity}\n </DropdownMenuItem>\n )}\n {isOwner && onToggleShared && (\n <DropdownMenuItem disabled={busy} onSelect={onToggleShared}>\n {task.is_shared ? 'Make private' : 'Share with workspace'}\n </DropdownMenuItem>\n )}\n {canEdit && onAddSubtask && (\n <DropdownMenuItem onSelect={onAddSubtask} data-testid={`task-add-subtask-${id}`}>\n <ListPlus className=\"mr-2 size-4\" aria-hidden />\n {labels.addSubtask}\n </DropdownMenuItem>\n )}\n {canEdit && onMoveTo && (\n <DropdownMenuItem onSelect={onMoveTo} data-testid={`task-move-${id}`}>\n <CornerDownRight className=\"mr-2 size-4\" aria-hidden />\n {labels.moveTo}\n </DropdownMenuItem>\n )}\n {canEdit && (\n <DropdownMenuItem onSelect={onEdit} data-testid={`task-edit-${id}`}>\n <Pencil className=\"mr-2 size-4\" aria-hidden />\n {isChat ? labels.rename : labels.edit}\n </DropdownMenuItem>\n )}\n {canEdit && onDelete && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n disabled={busy || !canAdmin}\n onSelect={onDelete}\n title={canAdmin ? undefined : labels.deleteOwnerOnly}\n className=\"text-destructive focus:text-destructive\"\n data-testid={`task-delete-${id}`}\n >\n <Trash2 className=\"mr-2 size-4\" aria-hidden />\n {labels.delete}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","/**\n * Drop the least useful columns as a grid gets narrower, so the actions column (Approve, Run, the menu)\n * is never pushed off the edge. Each rule keeps its column while the grid is at least `minWidth` wide.\n */\nimport type { GridApi } from 'ag-grid-community'\n\nexport interface ColumnWidthRule {\n colId: string\n /** The narrowest grid (px) that still shows the column. */\n minWidth: number\n}\n\nexport function applyColumnWidthRules(\n api: Pick<GridApi, 'getColumn' | 'setColumnsVisible'>,\n gridWidth: number,\n rules: readonly ColumnWidthRule[]\n): void {\n for (const rule of rules) {\n if (api.getColumn(rule.colId)) api.setColumnsVisible([rule.colId], gridWidth >= rule.minWidth)\n }\n}\n","import { useEffect, useMemo, useRef, useState } from 'react'\nimport type { CellKeyDownEvent, GridApi, GridOptions } from 'ag-grid-community'\nimport {\n ChevronDown,\n ChevronRight,\n ChevronsDownUp,\n ChevronsUpDown,\n CheckCheck,\n KeyRound,\n ListTodo,\n Trash2,\n Workflow,\n} from 'lucide-react'\nimport { Button, Input, cn, SharingEntity } from '@arbidocs/react/ui'\nimport { EmptyState } from '../../components/EmptyState'\nimport { ToneBadge } from '../../components/ToneBadge'\nimport { GridView } from '../../files/GridView'\nimport { SelectionBar, SelectionBarAction } from '../../files/SelectionBar'\nimport { testIdOr } from '../../chat/test-id'\nimport { PersonPill, type TaskPerson } from './PersonPill'\nimport { TaskOutputsCell, type TaskOutput, type TaskOutputsCellLabels } from './TaskOutputsCell'\nimport { TaskMoveDialog } from './TaskMoveDialog'\nimport { TaskRowMenu } from './TaskRowMenu'\nimport {\n DEFAULT_TASK_STATUS_PILL_LABELS,\n TaskStatusPill,\n type TaskStatusPillLabels,\n} from './TaskStatusPill'\nimport { createTaskColumns, type SortableTaskColumn } from './taskColumns'\nimport { applyColumnWidthRules, type ColumnWidthRule } from './gridWidth'\nimport { STATUS_LABELS, STATUS_ORDER, asTaskStatus, goalProgress } from './taskLabels'\nimport {\n buildTaskRows,\n ownerExtId,\n descendantIds,\n indexTasks,\n isPlainTodo,\n moveTargets,\n type TaskFilter,\n type TaskGridRow,\n type TaskListRow,\n} from './taskRows'\nimport { DEFAULT_TASK_LIST_LABELS, type TaskListLabels } from './taskTableLabels'\n\nexport interface TaskTableProps<T extends TaskListRow> {\n /** The workspace's tasks: the conversations that have a status (the host drops plain chats). */\n tasks: T[]\n isLoading?: boolean\n /** Friendly display of an ISO timestamp. */\n formatDate: (iso: string) => string\n /** Open the task's thread (its conversation). */\n onOpenThread: (conversationId: string, task: T) => void\n /** A person marks a task done / reopens a finished one. */\n onMarkDone: (task: T) => void\n onReopen: (task: T) => void\n /** People in the workspace, by id: names the Owner column. */\n people?: { id: string; label: string }[]\n /** Agent names by id, for the Assigned to column (falls back to \"Agent\"). */\n agentNames?: Record<string, string>\n /** Workflow names by id: names a task whose title the run has not generated yet, and its origin chip. */\n workflowNames?: Record<string, string>\n /** Share a task with the workspace or make it private (the shared/private toggle appears with it). */\n onToggleShared?: (task: T, shouldShare: boolean) => void\n onEdit: (task: T) => void\n onDelete: (task: T) => void\n /** Start a new task that is a child of this one. */\n onAddSubtask?: (task: T) => void\n /** Re-parent a task (`null` = top level). With it, the row menu offers \"Move to…\". */\n onMove?: (task: T, parentId: string | null) => void\n /** Bulk actions on the selected rows (the selection bar shows only the ones provided). */\n onMarkDoneMany?: (tasks: T[]) => void\n onDeleteMany?: (tasks: T[]) => void\n /** When set, a run waiting for access shows a one-click \"allow access\" action. */\n onGrantAccess?: (task: T) => void\n /** Task id with a request in flight: its row disables its actions. */\n busyId?: string | null\n /** Text from outside the table (a topbar filter) that narrows the rows like the search box does. */\n filterText?: string\n /**\n * The viewer edits the workspace (owner or collaborator): a row they do not own is always shared, and\n * they may then edit, run, move, mark done and add sub-tasks to it. The share toggle, Delete and Allow\n * access stay with the row's owner. A guest leaves this off and only reads.\n */\n canEditShared?: boolean\n /** The viewer owns the workspace: with a row's creator, the only one who deletes it. Who can see it stays the creator's alone. */\n isWorkspaceOwner?: boolean\n /** Saved column state key (AG Grid persists by it). */\n gridId?: string\n labels?: Partial<TaskListLabels>\n testId?: string\n statusPillLabels?: Partial<TaskStatusPillLabels>\n /** Generated documents per task id (latest versions only); a task with none shows a dash. */\n outputsByTask?: Record<string, readonly TaskOutput[]>\n /** Open one generated document (Tasks view's Outputs column). */\n onOpenOutput?: (documentId: string, task: T) => void\n outputsLabels?: Partial<TaskOutputsCellLabels>\n /** Open a task's activity timeline (row menu: \"Activity\"). */\n onOpenActivity?: (task: T) => void\n /** \"2 min ago\" for the status tooltip; without it the tooltip is left out. */\n formatRelative?: (iso: string) => string\n}\n\nconst ROW_HEIGHT = 56\n/** Taller on a phone, where the status sits under the title. */\nconst NARROW_ROW_HEIGHT = 76\n/** Sub-tasks stop indenting after this depth (the table stays readable at any nesting). */\nconst MAX_INDENT_DEPTH = 4\n/** Above this many rows the grid stops animating row changes. */\nconst ANIMATE_ROWS_UP_TO = 500\n\n/** Below this grid width the table is one column and a menu. */\nconst NARROW_GRID = 640\n\n/** What goes first as the grid narrows (the grid is the page minus the sidebar). */\nconst WIDTH_RULES: readonly ColumnWidthRule[] = [\n { colId: 'shared', minWidth: 1050 },\n { colId: 'due', minWidth: 850 },\n { colId: 'outputs', minWidth: 930 },\n { colId: 'owner', minWidth: 730 },\n { colId: 'status', minWidth: NARROW_GRID },\n]\n\ntype Row<T extends TaskListRow> = TaskGridRow<T>\n\n/** The tooltip on the status pill: the latest step and how long ago. */\nfunction statusHint<T extends TaskListRow>(\n task: T,\n ctx: {\n props: TaskTableProps<T>\n l: TaskListLabels\n }\n): string | undefined {\n const { props: p, l } = ctx\n if (!p.formatRelative || !task.updated_at) return undefined\n const key = asTaskStatus(task.status)\n const pill = { ...DEFAULT_TASK_STATUS_PILL_LABELS, ...p.statusPillLabels }\n const label = task.pending_auth_request_id ? pill.waitingForAccess : STATUS_LABELS[key]\n return l.statusHint(label, p.formatRelative(task.updated_at))\n}\n\n/**\n * The tasks of a workspace as a person's work list, in the same grid as every other list in the app:\n * what an agent is generating first, then to-dos and, last, what is done.\n * Sub-tasks sit indented under their parent. Rows are selected with the grid's checkboxes (shift-click\n * for a range; ticking a parent ticks its sub-tasks) and acted on from the selection bar. Agents prepare\n * work; only a person closes it.\n */\nexport function TaskTable<T extends TaskListRow>(props: TaskTableProps<T>) {\n const { tasks: allTasks, isLoading, busyId, testId } = props\n const l: TaskListLabels = {\n ...DEFAULT_TASK_LIST_LABELS,\n ...props.labels,\n status: { ...STATUS_LABELS, ...props.labels?.status },\n }\n const [filter, setFilter] = useState<TaskFilter>('all')\n const [query, setQuery] = useState('')\n const [collapsed, setCollapsed] = useState<Set<string>>(new Set())\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set())\n const [sort, setSort] = useState<{ colId: SortableTaskColumn; dir: 'asc' | 'desc' } | null>(null)\n const [moving, setMoving] = useState<T | null>(null)\n const tasks = allTasks\n const apiRef = useRef<GridApi<Row<T>> | null>(null)\n // A phone-width grid: one column and a menu, the status under the title (see onGridSizeChanged).\n const [narrow, setNarrow] = useState(false)\n const rowCache = useRef(new Map<string, Row<T>>())\n\n const tree = useMemo(() => indexTasks(tasks), [tasks])\n const peopleNames = useMemo(\n () => new Map((props.people ?? []).map((p) => [p.id, p.label])),\n [props.people]\n )\n /** What a task is called: its title, else the workflow that made it, else \"Untitled\". */\n const nameOf = (task: T): string =>\n task.title?.trim() ||\n (task.workflow_ext_id && props.workflowNames?.[task.workflow_ext_id]) ||\n l.untitled\n /** Who owns the task: its creator. */\n const owner = (task: T): TaskPerson => {\n const id = ownerExtId(task)\n const mine = task.is_owner !== false\n return {\n id,\n label: mine ? l.me : ((id && peopleNames.get(id)) ?? l.someone),\n isMe: mine,\n }\n }\n /** Who started a thread. */\n const starter = (task: T): TaskPerson => {\n const id = task.created_by_ext_id ?? task.owner_ext_id\n const mine = task.is_owner !== false\n return {\n id,\n label: mine ? l.me : ((id && peopleNames.get(id)) ?? l.someone),\n isMe: mine,\n }\n }\n const renderPerson = (person: TaskPerson) => <PersonPill person={person} />\n\n const q = (query.trim() || (props.filterText ?? '').trim()).toLowerCase()\n const counts = useMemo(() => {\n const map = new Map<string, number>(STATUS_ORDER.map((s) => [s, 0]))\n let all = 0\n for (const task of tasks) {\n const text = `${nameOf(task)} ${task.description ?? ''}`.toLowerCase()\n if (q && !text.includes(q)) continue\n all += 1\n const s = asTaskStatus(task.status)\n map.set(s, (map.get(s) ?? 0) + 1)\n }\n map.set('all', all)\n return map\n // nameOf reads the labels and workflow names the table was given.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tasks, q, props.workflowNames, l.untitled])\n\n const compare = useMemo(() => {\n if (!sort) return undefined\n // A sort key is computed once per task, not once per comparison.\n const keys = new Map<T, string | number>()\n const compute = (t: T): string | number => {\n switch (sort.colId) {\n case 'name':\n return nameOf(t).toLowerCase()\n case 'owner':\n return owner(t).label.toLowerCase()\n case 'updated':\n return t.updated_at ? Date.parse(t.updated_at) : 0\n case 'messages':\n return t.message_count ?? 0\n case 'due':\n return t.due_at ? Date.parse(t.due_at) : Number.POSITIVE_INFINITY\n default:\n return STATUS_ORDER.indexOf(asTaskStatus(t.status))\n }\n }\n const key = (t: T): string | number => {\n let k = keys.get(t)\n if (k === undefined) {\n k = compute(t)\n keys.set(t, k)\n }\n return k\n }\n const sign = sort.dir === 'asc' ? 1 : -1\n return (a: T, b: T) => {\n const [x, y] = [key(a), key(b)]\n if (typeof x === 'number' && typeof y === 'number') return (x - y) * sign\n return String(x).localeCompare(String(y)) * sign\n }\n // The name lookups close over the people, agents and workflows the table was given.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n sort,\n peopleNames,\n props.agentNames,\n props.workflowNames,\n l.me,\n l.agent,\n l.someone,\n l.untitled,\n ])\n\n const rows = useMemo(\n () =>\n buildTaskRows(tasks, filter, collapsed, compare, {\n query: query.trim() || props.filterText,\n titleOf: nameOf,\n cache: rowCache.current,\n }),\n // nameOf reads the labels and workflow names the table was given.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [tasks, filter, collapsed, compare, query, props.filterText, props.workflowNames, l.untitled]\n )\n\n // Selection lives here (the grid mirrors it), so a parent can carry its sub-tasks with it, even\n // the collapsed or filtered-out ones the grid does not show.\n const selectedRows = useMemo(\n () => rows.filter((r) => selectedIds.has(r.external_id)),\n [rows, selectedIds]\n )\n const selectedTasks = useMemo(\n () => tasks.filter((t) => selectedIds.has(t.external_id)),\n [tasks, selectedIds]\n )\n const subtasksIncluded = useMemo(\n () =>\n selectedTasks.filter((t) => {\n const parent = tree.parentOf.get(t.external_id)\n return parent !== undefined && selectedIds.has(parent)\n }).length,\n [selectedTasks, selectedIds, tree]\n )\n // Only a task is marked done: a plain chat has no status to finish.\n const markable = selectedTasks.filter(\n (t) =>\n t.status != null &&\n (t.is_owner !== false || props.canEditShared) &&\n isPlainTodo(t) &&\n asTaskStatus(t.status) !== 'done'\n )\n const deletable = selectedTasks.filter((t) => t.is_owner !== false || props.isWorkspaceOwner)\n\n const rowsRef = useRef(rows)\n rowsRef.current = rows\n const handleSelectionChange = (picked: Row<T>[]) => {\n const visible = new Set(rowsRef.current.map((r) => r.external_id))\n const pickedIds = new Set(picked.map((r) => r.external_id))\n setSelectedIds((prev) => {\n const added = [...pickedIds].filter((id) => !prev.has(id))\n const removed = [...prev].filter((id) => visible.has(id) && !pickedIds.has(id))\n if (added.length === 0 && removed.length === 0) return prev\n const next = new Set(prev)\n const nested = true\n for (const id of added) {\n next.add(id)\n if (nested) for (const d of descendantIds(tree, id)) next.add(d)\n }\n for (const id of removed) {\n next.delete(id)\n if (!nested) continue\n for (const d of descendantIds(tree, id)) next.delete(d)\n // A parent is no longer fully selected once one of its sub-tasks is not.\n for (let at = tree.parentOf.get(id); at; at = tree.parentOf.get(at)) next.delete(at)\n }\n return next\n })\n }\n\n const setExpanded = (id: string, expanded: boolean) =>\n setCollapsed((prev) => {\n if (prev.has(id) === !expanded) return prev\n const next = new Set(prev)\n if (expanded) next.delete(id)\n else next.add(id)\n return next\n })\n const expandAll = () => setCollapsed(new Set())\n const collapseAll = () => setCollapsed(new Set(tree.kids.keys()))\n\n // The column definitions are built once. Their cells read the latest props and lookups through\n // this ref, so a selection, a filter or an expand never makes the grid rebuild its columns.\n const latest = useRef({ props, l, owner, starter, renderPerson, nameOf, setExpanded, narrow })\n latest.current = { props, l, owner, starter, renderPerson, nameOf, setExpanded, narrow }\n\n // The Outputs column earns its room once some task has produced something.\n const showOutputs = Object.values(props.outputsByTask ?? {}).some((o) => o.length > 0)\n const columnDefs = useMemo(\n () =>\n createTaskColumns<T>({\n narrow,\n labels: l,\n getOwnerName: (row) => latest.current.owner(row.task).label,\n renderName: (row) => {\n const { l: lb, props: p, nameOf: name } = latest.current\n const { task, depth, childStats, expanded } = row\n const id = task.external_id\n const status = asTaskStatus(task.status)\n const goal = goalProgress(task)\n const workflowName = task.workflow_ext_id ? p.workflowNames?.[task.workflow_ext_id] : null\n return (\n <div\n className=\"flex min-w-0 flex-1 items-center gap-1.5\"\n style={\n depth > 0\n ? { paddingLeft: `${Math.min(depth, MAX_INDENT_DEPTH) * 1.5}rem` }\n : undefined\n }\n data-depth={depth}\n aria-level={depth + 1}\n aria-setsize={row.setSize}\n aria-posinset={row.posInSet}\n data-context={row.context || undefined}\n >\n {childStats ? (\n <button\n type=\"button\"\n onClick={() => latest.current.setExpanded(id, !expanded)}\n aria-expanded={expanded}\n aria-label={expanded ? lb.collapseSubtasks : lb.expandSubtasks}\n className=\"flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n data-testid={`task-expand-${id}`}\n >\n {expanded ? (\n <ChevronDown className=\"size-4\" aria-hidden />\n ) : (\n <ChevronRight className=\"size-4\" aria-hidden />\n )}\n </button>\n ) : depth > 0 ? (\n <span className=\"size-5 shrink-0\" aria-hidden />\n ) : null}\n <div className=\"min-w-0 flex-1 leading-tight\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => latest.current.props.onOpenThread(id, task)}\n // The agent that prepared the work is not a column: it is named here, on hover.\n title={\n task.agent_ext_id\n ? lb.preparedBy(p.agentNames?.[task.agent_ext_id] || lb.agent)\n : undefined\n }\n className={cn(\n // The title has priority: it keeps at least 12 characters before it ellipsises.\n 'min-w-[12ch] truncate text-left text-sm font-medium hover:underline focus-visible:underline focus-visible:outline-none',\n status === 'done' && 'text-muted-foreground line-through'\n )}\n data-testid={`task-name-${id}`}\n >\n {name(task)}\n </button>\n {goal && (\n <ToneBadge\n tone={goal.done ? 'success' : 'neutral'}\n data-testid={`task-goal-progress-${id}`}\n >\n {goal.done ? '✓ ' : ''}\n {lb.goalMet(goal.met, goal.total)}\n </ToneBadge>\n )}\n </div>\n {/* A phone has no Status column: the status sits under the title. */}\n {latest.current.narrow && (\n <div className=\"pt-0.5\">\n <TaskStatusPill\n id={id}\n status={status}\n runStartedAt={task.run_started_at}\n lastError={task.last_error}\n awaitingAccess={Boolean(task.pending_auth_request_id)}\n labels={p.statusPillLabels}\n />\n </div>\n )}\n {/* Second line: what it is (or where it came from) and the sub-task count, which never\n squeezes the title above it. */}\n {(task.description || workflowName || childStats) && (\n <div className=\"flex min-w-0 items-center gap-2 text-xs text-muted-foreground\">\n {task.description ? (\n <p className=\"min-w-0 truncate\">{task.description}</p>\n ) : workflowName ? (\n <span\n className=\"inline-flex min-w-0 items-center gap-1.5\"\n data-testid={`task-workflow-${id}`}\n >\n <Workflow className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{lb.fromWorkflow(workflowName)}</span>\n </span>\n ) : null}\n {childStats && (\n <span\n className=\"shrink-0 tabular-nums\"\n data-testid={`task-subtask-progress-${id}`}\n >\n {lb.subtasksDone(childStats.done, childStats.total)}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n )\n },\n // Who has the next step: the person pill, with the \"Me\" treatment. A plain chat is its starter's.\n renderOwner: (row) => (\n <span data-testid={`task-owner-${row.external_id}`} className=\"flex min-w-0\">\n {latest.current.renderPerson(\n row.task.status ? latest.current.owner(row.task) : latest.current.starter(row.task)\n )}\n </span>\n ),\n renderDue: (row) => {\n const { l: lb, props: p } = latest.current\n const { task } = row\n const dueMs = task.due_at ? Date.parse(task.due_at) : NaN\n const overdue =\n asTaskStatus(task.status) !== 'done' && !Number.isNaN(dueMs) && dueMs < Date.now()\n return (\n <span\n className={cn(\n 'truncate text-sm',\n overdue ? 'font-medium text-red-text' : 'text-muted-foreground'\n )}\n data-testid={`task-due-${task.external_id}`}\n data-overdue={overdue}\n >\n {task.due_at\n ? overdue\n ? lb.overdue(p.formatDate(task.due_at))\n : lb.due(p.formatDate(task.due_at))\n : lb.noDue}\n </span>\n )\n },\n renderShared: (row) => {\n const { l: lb, props: p } = latest.current\n const { task } = row\n // A teammate cannot change the owner's visibility choice.\n if (!p.onToggleShared) return null\n return (\n <SharingEntity\n shared={task.is_shared ?? false}\n onToggle={(shouldShare) => latest.current.props.onToggleShared?.(task, shouldShare)}\n disabled={task.is_owner === false}\n disabledTooltip={lb.sharedOwnerOnly}\n tooltipActive=\"Shared with this workspace — click to make private\"\n tooltipInactive=\"Only you can see this — click to share with this workspace\"\n data-testid={`task-shared-${task.external_id}`}\n />\n )\n },\n showOutputs,\n renderOutputs: (row) => (\n <TaskOutputsCell\n id={row.external_id}\n outputs={latest.current.props.outputsByTask?.[row.external_id]}\n onOpen={(docId) => latest.current.props.onOpenOutput?.(docId, row.task)}\n labels={latest.current.props.outputsLabels}\n />\n ),\n renderStatus: (row) => (\n <TaskStatusPill\n id={row.external_id}\n status={asTaskStatus(row.task.status)}\n runStartedAt={row.task.run_started_at}\n lastError={row.task.last_error}\n awaitingAccess={Boolean(row.task.pending_auth_request_id)}\n labels={latest.current.props.statusPillLabels}\n hint={statusHint(row.task, latest.current)}\n />\n ),\n renderActions: (row) => {\n const { l: lb, props: p } = latest.current\n const { task } = row\n const id = task.external_id\n const status = asTaskStatus(task.status)\n const busy = p.busyId === id\n const isOwner = task.is_owner !== false\n const canEdit = isOwner || Boolean(p.canEditShared)\n const canAdmin = isOwner || Boolean(p.isWorkspaceOwner)\n return (\n <div className=\"flex items-center justify-end gap-2\">\n {!latest.current.narrow &&\n isOwner &&\n task.pending_auth_request_id &&\n p.onGrantAccess && (\n <Button\n size=\"sm\"\n className=\"h-8 gap-1.5 pointer-coarse:h-11\"\n onClick={() => p.onGrantAccess?.(task)}\n data-testid={`task-allow-access-${id}`}\n >\n <KeyRound className=\"size-3.5\" aria-hidden />\n {lb.allowAccess}\n </Button>\n )}\n <TaskRowMenu\n task={task}\n status={status}\n busy={busy}\n isOwner={isOwner}\n canAdmin={canAdmin}\n canEdit={canEdit}\n labels={lb}\n onMarkDone={() => p.onMarkDone(task)}\n onReopen={() => p.onReopen(task)}\n onAddSubtask={p.onAddSubtask ? () => p.onAddSubtask?.(task) : undefined}\n onMoveTo={p.onMove ? () => setMoving(task) : undefined}\n onEdit={() => p.onEdit(task)}\n onDelete={() => p.onDelete(task)}\n onOpenActivity={p.onOpenActivity ? () => p.onOpenActivity?.(task) : undefined}\n onGrantAccess={p.onGrantAccess ? () => p.onGrantAccess?.(task) : undefined}\n />\n </div>\n )\n },\n }),\n // Stable on purpose: only the header texts rebuild the columns (see `latest`).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n l.colTask,\n l.colOwner,\n l.colDue,\n l.colStatus,\n l.colShared,\n l.colOutputs,\n l.shared,\n showOutputs,\n narrow,\n ]\n )\n\n // Cells read their data through `latest`, so a change in the lookups they draw from (people, agents,\n // workflow names, the row in flight) redraws the cells once, rather than on every interaction.\n useEffect(() => {\n apiRef.current?.refreshCells({ force: true })\n }, [\n busyId,\n props.people,\n props.agentNames,\n props.workflowNames,\n props.outputsByTask,\n props.labels,\n props.canEditShared,\n props.isWorkspaceOwner,\n narrow,\n ])\n\n const animate = rows.length <= ANIMATE_ROWS_UP_TO\n const gridOptions = useMemo<Partial<GridOptions<Row<T>>>>(\n () => ({\n suppressClickEdit: true,\n // Keyboard focus lives on the name column only (the others are not navigable): ArrowRight\n // opens a task's sub-tasks and ArrowLeft closes them, or steps up to the parent.\n suppressCellFocus: false,\n suppressColumnVirtualisation: true,\n animateRows: animate,\n getRowClass: (p) => (p.data?.context ? 'opacity-60' : undefined),\n // The grid shows and reports the sort; the table orders each level (see buildTaskRows).\n onSortChanged: (event) => {\n const sorted = event.api.getColumnState().find((c) => c.sort)\n setSort(\n sorted?.colId\n ? { colId: sorted.colId as SortableTaskColumn, dir: sorted.sort ?? 'asc' }\n : null\n )\n },\n onGridSizeChanged: (event) => {\n applyColumnWidthRules(event.api, event.clientWidth, WIDTH_RULES)\n setNarrow(event.clientWidth < NARROW_GRID)\n },\n onCellKeyDown: (event: CellKeyDownEvent<Row<T>>) => {\n const row = event.data\n const key = (event.event as KeyboardEvent | null)?.key\n if (!row || event.column.getColId() !== 'name') return\n if (key === 'ArrowRight' && row.childStats && !row.expanded) {\n event.event?.preventDefault()\n latest.current.setExpanded(row.external_id, true)\n } else if (key === 'ArrowLeft') {\n if (row.childStats && row.expanded) {\n event.event?.preventDefault()\n latest.current.setExpanded(row.external_id, false)\n } else if (row.parentId) {\n event.event?.preventDefault()\n const parent = event.api.getRowNode(row.parentId)\n if (parent?.rowIndex != null) {\n event.api.ensureIndexVisible(parent.rowIndex)\n event.api.setFocusedCell(parent.rowIndex, 'name')\n }\n }\n }\n },\n }),\n [animate]\n )\n\n const clearSelection = () => setSelectedIds(new Set())\n // A Chat chip only once there is a plain chat, so the chips add up to All.\n const filterKeys = (['all', ...STATUS_ORDER] as TaskFilter[]).filter(\n (key) => key !== 'chat' || (counts.get(key) ?? 0) > 0\n )\n const hasChildren = tree.kids.size > 0\n\n return (\n <div\n className=\"flex min-h-0 flex-1 flex-col gap-3\"\n data-testid={testIdOr(testId, { testId: 'task-list' })}\n >\n <div className=\"flex flex-wrap items-center gap-2\">\n <div role=\"tablist\" aria-label=\"Filter tasks\" className=\"flex flex-wrap gap-1.5\">\n {filterKeys.map((key) => {\n const count = counts.get(key) ?? 0\n const isSelected = filter === key\n return (\n <button\n key={key}\n type=\"button\"\n role=\"tab\"\n aria-selected={isSelected}\n onClick={() => setFilter(key)}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full border px-3 py-1 text-xs font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11',\n isSelected\n ? 'border-primary bg-primary/10 text-primary'\n : 'border-border text-muted-foreground hover:bg-accent'\n )}\n data-testid={`task-filter-${key}`}\n >\n {key === 'all' ? l.filterAll : l.status[key]}\n <span className=\"tabular-nums opacity-70\">{count}</span>\n </button>\n )\n })}\n </div>\n <Input\n type=\"search\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={l.searchPlaceholder}\n aria-label={l.searchLabel}\n className=\"h-8 max-w-56 text-xs pointer-coarse:h-11\"\n data-testid=\"task-search\"\n />\n {hasChildren && (\n <div className=\"ml-auto flex gap-1\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1.5 text-xs pointer-coarse:h-11\"\n onClick={expandAll}\n data-testid=\"task-expand-all\"\n >\n <ChevronsUpDown className=\"size-3.5\" aria-hidden />\n {l.expandAll}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1.5 text-xs pointer-coarse:h-11\"\n onClick={collapseAll}\n data-testid=\"task-collapse-all\"\n >\n <ChevronsDownUp className=\"size-3.5\" aria-hidden />\n {l.collapseAll}\n </Button>\n </div>\n )}\n </div>\n {tasks.length === 0 && !isLoading ? (\n <EmptyState\n icon={ListTodo}\n title={l.emptyTitle}\n description={l.emptyMessage}\n testId=\"task-list-empty\"\n />\n ) : (\n <div className=\"min-h-0 flex-1\">\n <GridView<Row<T>>\n testId=\"task-grid\"\n gridId={props.gridId ?? 'tasks-grid-v4'}\n items={rows}\n columnDefs={columnDefs}\n getItemId={(row) => row.external_id}\n getRowTestId={(row) => `task-row-${row.external_id}`}\n isLoading={isLoading}\n showEmpty={rows.length === 0}\n emptyState={{ title: l.noMatches }}\n rowHeight={narrow ? NARROW_ROW_HEIGHT : ROW_HEIGHT}\n height=\"100%\"\n onGridReady={({ api }) => {\n apiRef.current = api\n }}\n selection={{\n mode: 'multiple',\n controlled: true,\n selected: selectedRows,\n onSelectionChange: handleSelectionChange,\n }}\n gridOptions={gridOptions}\n />\n </div>\n )}\n <SelectionBar\n count={selectedTasks.length}\n onClear={clearSelection}\n status={\n selectedTasks.length > 0 && subtasksIncluded > 0 ? (\n <span className=\"text-xs text-muted-foreground\" data-testid=\"task-selection-subtasks\">\n {l.subtasksSelected(subtasksIncluded)}\n </span>\n ) : undefined\n }\n >\n {(isCompact) => (\n <>\n {props.onMarkDoneMany && (\n <SelectionBarAction\n icon={CheckCheck}\n label={l.markDoneMany}\n onClick={() => {\n props.onMarkDoneMany?.(markable)\n clearSelection()\n }}\n disabled={markable.length === 0}\n isCompact={isCompact}\n tooltip={l.markDoneManyHint}\n testId=\"task-bulk-done\"\n />\n )}\n {props.onDeleteMany && (\n <SelectionBarAction\n icon={Trash2}\n label={l.deleteMany}\n onClick={() => {\n props.onDeleteMany?.(deletable)\n clearSelection()\n }}\n disabled={deletable.length === 0}\n isCompact={isCompact}\n className=\"border-red-border text-red-text hover:bg-red-bg hover:text-red-text\"\n testId=\"task-bulk-delete\"\n />\n )}\n </>\n )}\n </SelectionBar>\n {moving && props.onMove && (\n <TaskMoveDialog\n open\n onOpenChange={(open) => !open && setMoving(null)}\n options={moveTargets(tasks, moving).map((t) => ({ id: t.external_id, label: nameOf(t) }))}\n currentParentId={moving.parent_conversation_ext_id}\n onPick={(parentId) => props.onMove?.(moving, parentId)}\n labels={{\n title: l.moveToTitle(nameOf(moving)),\n none: l.moveToNone,\n search: l.moveToSearch,\n empty: l.moveToEmpty,\n cancel: l.moveToCancel,\n }}\n />\n )}\n </div>\n )\n}\n","/**\n * Where a thread stands, in one word and one look for every row of a list — a plain chat, a to-do,\n * a workflow run — as a list of agents says it: Generating, Needs you, Up next, Ready, To do,\n * Done, Failed. An icon and the word in the state's colour, then what it is about (the next step).\n */\n\nimport type { ReactNode } from 'react'\nimport {\n AlertCircle,\n CheckCheck,\n CircleCheck,\n CircleDashed,\n Clock,\n Hand,\n KeyRound,\n Loader2,\n} from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport type ThreadState =\n 'generating' | 'needs' | 'next' | 'ready' | 'todo' | 'done' | 'failed' | 'queued' | 'access'\n\nexport interface ThreadStateLabels {\n generating: string\n /** `{name}` is replaced (\"you\", a person). */\n needs: string\n next: string\n ready: string\n todo: string\n done: string\n failed: string\n queued: string\n access: string\n}\n\nexport const DEFAULT_THREAD_STATE_LABELS: ThreadStateLabels = {\n generating: 'Generating',\n needs: 'Needs {name}',\n next: 'Up next',\n ready: 'Ready',\n todo: 'To do',\n done: 'Done',\n failed: 'Failed',\n queued: 'Queued',\n access: 'Needs access',\n}\n\nconst LOOK: Record<ThreadState, { icon: ReactNode; className: string }> = {\n generating: {\n icon: <Loader2 className=\"animate-spin\" />,\n className: 'text-amber-700 dark:text-amber-300',\n },\n needs: { icon: <Hand />, className: 'text-orange-700 dark:text-orange-300' },\n next: { icon: <Clock />, className: 'text-muted-foreground' },\n ready: { icon: <CircleCheck />, className: 'text-emerald-700 dark:text-emerald-400' },\n todo: { icon: <CircleDashed />, className: 'text-muted-foreground' },\n done: { icon: <CheckCheck />, className: 'text-muted-foreground' },\n failed: { icon: <AlertCircle />, className: 'text-red-text' },\n queued: { icon: <Clock />, className: 'text-amber-700 dark:text-amber-300' },\n access: { icon: <KeyRound />, className: 'text-red-text' },\n}\n\nexport interface ThreadStatusLineProps {\n state: ThreadState\n /** Who a `needs` state waits for (\"you\", a name). */\n name?: string\n /** What it is about, after the word (the next step's title). */\n detail?: string\n labels?: Partial<ThreadStateLabels>\n className?: string\n testId?: string\n}\n\nexport function ThreadStatusLine({\n state,\n name = 'you',\n detail,\n labels,\n className,\n testId,\n}: ThreadStatusLineProps) {\n const l = { ...DEFAULT_THREAD_STATE_LABELS, ...labels }\n const { icon, className: tone } = LOOK[state]\n const word = l[state].replace('{name}', name)\n return (\n <span\n className={cn('flex min-w-0 items-center gap-1.5 text-xs leading-tight', className)}\n title={detail ? `${word} · ${detail}` : word}\n data-state={state}\n data-testid={testId}\n >\n <span className={cn('flex shrink-0 [&_svg]:size-3.5', tone)} aria-hidden>\n {icon}\n </span>\n <span className={cn('shrink-0 font-medium', tone)}>{word}</span>\n {detail && <span className=\"min-w-0 truncate text-foreground\">· {detail}</span>}\n </span>\n )\n}\n","import { SharingEntity } from '@arbidocs/react/ui'\nimport { useAssistantCopy } from '@arbidocs/react/shell'\nimport { useMemo, useRef, useState, type ReactNode } from 'react'\nimport { MessageSquare } from 'lucide-react'\nimport { ThreadStatusLine } from './ThreadStatusLine'\nimport { EntityChip } from '../../components/EntityChip'\nimport { CellHoverIcon } from '../../files/cells/HoverIconCell'\nimport type { ColDef, ICellRendererParams, ValueGetterParams } from 'ag-grid-community'\nimport { GridView } from '../../files/GridView'\nimport { SelectionBar } from '../../files/SelectionBar'\nimport { TabHeader } from '../../shell/TabHeader'\nimport { FilterInput } from '../../shell/FilterInput'\nimport { useIsPhone } from '../../lib/use-media-query'\n\n/** Only fields on the conversation object: no message or participant fetches. */\nexport interface ConversationListRow {\n external_id: string\n title?: string | null\n created_at?: string | null\n updated_at?: string | null\n created_by_ext_id?: string | null\n assistant_mode?: string | null\n message_count?: number | null\n is_shared?: boolean | null\n is_owner?: boolean | null\n status?: string | null\n in_progress?: boolean | null\n last_message_role?: string | null\n last_message_updated_at?: string | null\n last_message_actor?: {\n external_id: string\n given_name: string\n family_name?: string | null\n picture?: string | null\n parent_ext_id?: string | null\n } | null\n last_message_status?: string | null\n /** Set when the thread is a call's meeting chat. */\n meeting_call_ext_id?: string | null\n}\n\nexport interface ConversationListViewProps<T extends ConversationListRow> {\n conversations: T[]\n isLoading?: boolean\n visibilityFilters?: { me: 'include' | 'exclude' | null; workspace: 'include' | 'exclude' | null }\n doneFilter?: 'include' | 'exclude' | null\n /** \"Meetings\": only (include) or no (exclude) meeting threads. */\n meetingFilter?: 'include' | 'exclude' | null\n filterText?: string\n /** Below the list: the launcher that starts a new thread from here. */\n footer?: ReactNode\n showHeader?: boolean\n formatDate: (iso: string) => string\n renderThread?: (conversation: T) => ReactNode\n renderBy?: (conversation: T) => ReactNode\n renderStatus?: (conversation: T) => ReactNode\n renderLabels?: (conversation: T) => ReactNode\n labelText?: (conversation: T) => string\n onOpen: (conversation: T) => void\n onRename: (conversation: T) => void\n onDelete: (conversation: T) => void\n canEditShared?: boolean\n isWorkspaceOwner?: boolean\n selectionActions?: (selected: T[], compact: boolean, clear: () => void) => ReactNode\n}\n\n/** Shared title/label filtering and latest-activity ordering for the header and grid. */\nexport function filterConversationRows<T extends ConversationListRow>(\n conversations: T[],\n query: string,\n labelText?: (row: T) => string,\n doneFilter: 'include' | 'exclude' | null = 'exclude',\n visibilityFilters?: { me: 'include' | 'exclude' | null; workspace: 'include' | 'exclude' | null },\n meetingFilter: 'include' | 'exclude' | null = null\n): T[] {\n const q = query.trim().toLowerCase()\n return [...conversations]\n .sort(\n (a, b) =>\n (Date.parse(b.last_message_updated_at || b.updated_at || b.created_at || '') || 0) -\n (Date.parse(a.last_message_updated_at || a.updated_at || a.created_at || '') || 0)\n )\n .filter((row) =>\n doneFilter === 'exclude'\n ? row.status !== 'done'\n : doneFilter === 'include'\n ? row.status === 'done'\n : true\n )\n .filter((row) => {\n const state = row.is_shared ? visibilityFilters?.workspace : visibilityFilters?.me\n const hasIncluded =\n visibilityFilters?.me === 'include' || visibilityFilters?.workspace === 'include'\n return state !== 'exclude' && (!hasIncluded || state === 'include')\n })\n .filter((row) =>\n meetingFilter === 'include'\n ? !!row.meeting_call_ext_id\n : meetingFilter === 'exclude'\n ? !row.meeting_call_ext_id\n : true\n )\n .filter((row) => !q || `${row.title ?? ''} ${labelText?.(row) ?? ''}`.toLowerCase().includes(q))\n}\n\n/** Conversation history ordered by activity, including conversations attached to work. */\nexport function ConversationListView<T extends ConversationListRow>(\n p: ConversationListViewProps<T>\n) {\n const liveProps = useRef(p)\n liveProps.current = p\n const [query, setQuery] = useState('')\n const [selected, setSelected] = useState<Set<string>>(new Set())\n const q = `${query} ${p.filterText ?? ''}`.trim().toLowerCase()\n // On a phone the thread name and labels stay; the other columns are hidden. Labels get a fixed\n // width there so the grid overflows and scrolls sideways instead of squeezing them into the edge.\n const isPhone = useIsPhone()\n const rows = useMemo(\n () =>\n filterConversationRows(\n p.conversations,\n q,\n p.labelText,\n p.doneFilter,\n p.visibilityFilters,\n p.meetingFilter\n ),\n [p.conversations, q, p.labelText, p.doneFilter, p.visibilityFilters, p.meetingFilter]\n )\n const selectedRows = p.conversations.filter((c) => selected.has(c.external_id))\n const hasLabels = p.conversations.some((c) => !!p.labelText?.(c))\n const columns = useMemo<ColDef<T>[]>(\n () => [\n {\n colId: 'name',\n headerName: 'Thread',\n flex: 2,\n minWidth: 200,\n valueGetter: ({ data }) => data?.title?.trim() || 'Untitled thread',\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data && (\n <div className=\"group flex h-full min-w-0 items-center gap-2\">\n <SharingEntity\n shared={data.is_shared ?? false}\n variant=\"icon\"\n data-testid={`thread-sharing-${data.external_id}`}\n />\n <div className=\"min-w-0\">\n {liveProps.current.renderThread ? (\n liveProps.current.renderThread(data)\n ) : (\n <EntityChip\n icon={<MessageSquare className=\"size-4\" aria-hidden />}\n label={data.title?.trim() || 'Untitled thread'}\n pillTooltip=\"Open conversation\"\n labelMaxWidth=\"max-w-full\"\n onClick={() => liveProps.current.onOpen(data)}\n testId={`thread-open-${data.external_id}`}\n />\n )}\n </div>\n {/* How long it is, beside its name (not a column of its own). */}\n {(data.message_count ?? 0) > 0 && (\n <span\n className=\"inline-flex h-5 shrink-0 items-center gap-0.5 self-center rounded-full bg-muted px-1.5 text-[10px] font-medium leading-none tabular-nums text-muted-foreground\"\n title={`${data.message_count} ${data.message_count === 1 ? 'message' : 'messages'}`}\n data-testid={`thread-messages-${data.external_id}`}\n >\n <MessageSquare className=\"size-3\" aria-hidden />\n {data.message_count}\n </span>\n )}\n {(data.is_owner !== false || liveProps.current.canEditShared) && (\n <button\n type=\"button\"\n aria-label={`Rename ${data.title?.trim() || 'Untitled thread'}`}\n onClick={() => liveProps.current.onRename(data)}\n data-testid={`thread-rename-${data.external_id}`}\n className=\"shrink-0 pointer-coarse:flex pointer-coarse:size-11 pointer-coarse:items-center pointer-coarse:justify-center\"\n >\n <CellHoverIcon />\n </button>\n )}\n </div>\n ),\n },\n // Labels only when a thread has some (an empty column only takes the names' room), and never\n // on a phone, where the status is what a row must say.\n ...(liveProps.current.renderLabels && hasLabels && !isPhone\n ? [\n {\n colId: 'labels',\n headerName: 'Labels',\n flex: 0.5,\n minWidth: 100,\n valueGetter: ({ data }: ValueGetterParams<T>) =>\n data ? (liveProps.current.labelText?.(data) ?? '') : '',\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data && liveProps.current.renderLabels?.(data),\n },\n ]\n : []),\n {\n colId: 'status',\n headerName: 'Status',\n width: isPhone ? 170 : 240,\n valueGetter: ({ data }) => data?.status,\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data &&\n (liveProps.current.renderStatus ? (\n liveProps.current.renderStatus(data)\n ) : (\n <ThreadStatusLine\n state={data.status === 'done' ? 'done' : data.status === 'todo' ? 'todo' : 'ready'}\n />\n )),\n },\n // Who spoke last (their face) and when: the two read together, at the row's end.\n ...(liveProps.current.renderBy\n ? [\n {\n colId: 'by',\n headerName: 'By',\n width: 64,\n hide: isPhone,\n sortable: false,\n resizable: false,\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data && liveProps.current.renderBy?.(data),\n },\n ]\n : []),\n {\n colId: 'activity',\n initialSort: 'desc',\n headerName: 'Updated',\n width: 128,\n hide: isPhone,\n valueGetter: ({ data }) =>\n data?.last_message_updated_at || data?.updated_at || data?.created_at || '',\n valueFormatter: ({ value }) => (value ? liveProps.current.formatDate(value) : '—'),\n cellClass: 'flex items-center text-xs text-muted-foreground/80',\n },\n ],\n [\n Boolean(p.renderThread),\n Boolean(p.renderLabels),\n Boolean(p.renderBy),\n Boolean(p.renderStatus),\n isPhone,\n hasLabels,\n ]\n )\n // Every cell's content sits in the middle of its row (a two-line title makes rows taller).\n const assistant = useAssistantCopy()\n const centred = useMemo(\n () => columns.map((c) => ({ cellClass: 'flex items-center', ...c })),\n [columns]\n )\n return (\n <div className=\"flex min-h-0 flex-1 flex-col\" data-testid=\"conversation-list-view\">\n {p.showHeader !== false && (\n <TabHeader\n testId=\"threads-tab-header\"\n tabs={[\n {\n id: 'threads',\n label: '',\n count: rows.length,\n countIcon: <MessageSquare className=\"size-3.5\" />,\n countPlacement: 'leading',\n presentation: 'count',\n hasActiveFilters: !!q,\n },\n ]}\n activeTabId=\"threads\"\n onTabChange={() => {}}\n firstTabContent={\n <FilterInput\n value={query}\n hideFieldPicker\n ariaLabel=\"Search threads\"\n onChange={setQuery}\n fields={['text']}\n onFieldsChange={() => {}}\n labels={{\n placeholder: 'Find a thread…',\n fieldNames: { text: 'Thread' },\n }}\n className=\"w-44 max-w-[40vw]\"\n />\n }\n />\n )}\n <div className=\"min-h-0 flex-1\">\n <GridView<T>\n testId=\"threads-grid\"\n items={rows}\n columnDefs={centred}\n getItemId={(row) => row.external_id}\n getRowTestId={(row) => `thread-row-${row.external_id}`}\n onRowClick={p.onOpen}\n height=\"100%\"\n isLoading={p.isLoading}\n loadingMessage=\"Loading threads…\"\n emptyState={{\n title: q ? 'No threads match' : 'No conversations yet',\n message: p.footer ? assistant.emptyThreadsComposer : assistant.emptyThreadsNewTask,\n }}\n selection={\n p.selectionActions\n ? {\n mode: 'multiple',\n controlled: true,\n selected: selectedRows,\n onSelectionChange: (items) =>\n setSelected(new Set(items.map((item) => item.external_id))),\n }\n : undefined\n }\n gridOptions={{\n suppressClickEdit: true,\n onCellKeyDown: (event) => {\n if (\n (event.event as KeyboardEvent | undefined)?.key === 'Enter' &&\n 'column' in event &&\n event.column.getColId() === 'name' &&\n event.data\n )\n p.onOpen(event.data)\n },\n }}\n />\n </div>\n {p.footer}\n {/* Above the footer's composer dock (z-40), which sits in the same place. */}\n {p.selectionActions && (\n <SelectionBar\n className=\"z-50\"\n count={selectedRows.length}\n onClear={() => setSelected(new Set())}\n >\n {(compact) => p.selectionActions?.(selectedRows, compact, () => setSelected(new Set()))}\n </SelectionBar>\n )}\n </div>\n )\n}\n","import { useState, type ReactNode } from 'react'\nimport { Check, ChevronDown } from 'lucide-react'\nimport {\n Command,\n CommandEmpty,\n CommandInput,\n CommandItem,\n CommandList,\n EntityPill,\n Popover,\n PopoverContent,\n PopoverTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface PillOption {\n id: string\n label: string\n /** Small line after the label in the list (e.g. a role). */\n description?: string\n /** Glyph before the label in the list and, when chosen, on the pill. */\n icon?: ReactNode\n}\n\nexport interface PillSelectLabels {\n /** The search box placeholder. */\n search: string\n /** Shown when the search matches nothing. */\n empty: string\n}\n\nexport const DEFAULT_PILL_SELECT_LABELS: PillSelectLabels = {\n search: 'Search…',\n empty: 'No match.',\n}\n\nexport interface PillSelectProps {\n /** The pill's glyph when nothing (or an option without its own icon) is chosen. */\n icon: ReactNode\n /** Names the property on the pill: \"Sign-off: Me\". */\n prefix: string\n /** The chosen option id; `''` is the \"none\" entry when `noneOption` is set. */\n value: string\n options: PillOption[]\n onChange: (id: string) => void\n /** Adds an entry that clears the choice (id `''`), e.g. \"Me\" or \"Nothing\". */\n noneOption?: PillOption\n /** Show a search box (for long lists such as people or tasks). */\n searchable?: boolean\n disabled?: boolean\n testId?: string\n labels?: Partial<PillSelectLabels>\n className?: string\n}\n\n/**\n * A property as a pill that opens a list, like every other entity reference in the app: the pill shows\n * `Prefix: choice`, the popover lists the options (searchable when long), one is chosen and it closes.\n */\nexport function PillSelect({\n icon,\n prefix,\n value,\n options,\n onChange,\n noneOption,\n searchable = false,\n disabled = false,\n testId,\n labels,\n className,\n}: PillSelectProps) {\n const l = { ...DEFAULT_PILL_SELECT_LABELS, ...labels }\n const [open, setOpen] = useState(false)\n const all = noneOption ? [noneOption, ...options] : options\n const chosen = all.find((o) => o.id === value)\n const id = testIdOr(testId, { testId: 'pill-select' })\n\n const choose = (next: string) => {\n onChange(next)\n setOpen(false)\n }\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild disabled={disabled}>\n <EntityPill\n icon={chosen?.icon ?? icon}\n label={`${prefix}: ${chosen?.label ?? ''}`.replace(/: $/, '')}\n secondaryText={<ChevronDown className=\"size-3\" aria-hidden />}\n size=\"sm\"\n disabled={disabled}\n labelMaxWidth=\"max-w-[220px]\"\n className={cn('h-7 pointer-coarse:min-h-11', className)}\n data-testid={id}\n />\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-64 p-0\" data-testid={`${id}-list`}>\n <Command>\n {searchable && <CommandInput placeholder={l.search} data-testid={`${id}-search`} />}\n <CommandList>\n <CommandEmpty>{l.empty}</CommandEmpty>\n {all.map((o) => (\n <CommandItem\n key={o.id || '__none__'}\n value={`${o.label} ${o.description ?? ''}`}\n onSelect={() => choose(o.id)}\n data-testid={`${id}-option-${o.id || 'none'}`}\n >\n <span className=\"mr-2 flex size-4 shrink-0 items-center justify-center\">\n {o.icon}\n </span>\n <span className=\"min-w-0 flex-1 truncate\">{o.label}</span>\n {o.description && (\n <span className=\"ml-2 shrink-0 text-xs text-muted-foreground\">\n {o.description}\n </span>\n )}\n {o.id === value && <Check className=\"ml-2 size-4 shrink-0\" aria-hidden />}\n </CommandItem>\n ))}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n )\n}\n","import { X } from 'lucide-react'\nimport { Button, Input, Label } from '@arbidocs/react/ui'\n\ninterface DueDateMenuLabels {\n today: string\n tomorrow: string\n nextMonday: string\n inAWeek: string\n pick: string\n clear: string\n}\n\nconst DEFAULT_DUE_DATE_MENU_LABELS: DueDateMenuLabels = {\n today: 'Today',\n tomorrow: 'Tomorrow',\n nextMonday: 'Next Monday',\n inAWeek: 'In a week',\n pick: 'Or pick a date and time',\n clear: 'Clear date',\n}\n\n/** The end of the working day, which a quick choice means. */\nconst END_OF_DAY_HOUR = 17\n\nconst pad = (n: number) => String(n).padStart(2, '0')\n\n/** A date as the `datetime-local` value the form holds: \"2026-10-12T17:00\" (local time). */\nexport function toLocalInput(date: Date): string {\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}`\n}\n\nexport interface DuePreset {\n id: 'today' | 'tomorrow' | 'nextMonday' | 'inAWeek'\n value: string\n}\n\n/**\n * The quick choices, each at the end of the working day. \"Today\" is left out once that time has passed.\n * `now` is a parameter so the choices are testable.\n */\nexport function duePresets(now: Date = new Date()): DuePreset[] {\n const at = (daysAhead: number) => {\n const d = new Date(now)\n d.setDate(d.getDate() + daysAhead)\n d.setHours(END_OF_DAY_HOUR, 0, 0, 0)\n return d\n }\n const untilMonday = (8 - now.getDay()) % 7 || 7\n const presets: DuePreset[] = []\n if (now.getHours() < END_OF_DAY_HOUR) presets.push({ id: 'today', value: toLocalInput(at(0)) })\n presets.push(\n { id: 'tomorrow', value: toLocalInput(at(1)) },\n { id: 'nextMonday', value: toLocalInput(at(untilMonday)) },\n { id: 'inAWeek', value: toLocalInput(at(7)) }\n )\n return presets\n}\n\ninterface DueDateMenuProps {\n value: string\n onChange: (value: string) => void\n /** Keys the input's id and test ids. */\n id: string\n /** The accessible name of the date input. */\n label: string\n labels?: Partial<DueDateMenuLabels>\n}\n\n/** The body of a due-date popover: quick choices first, the exact date and time for the rest. */\nexport function DueDateMenu({ value, onChange, id, label, labels }: DueDateMenuProps) {\n const l = { ...DEFAULT_DUE_DATE_MENU_LABELS, ...labels }\n return (\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-menu`}>\n <div className=\"flex flex-wrap gap-1.5\">\n {duePresets().map((preset) => (\n <Button\n key={preset.id}\n type=\"button\"\n variant={value === preset.value ? 'secondary' : 'outline'}\n size=\"sm\"\n className=\"h-8 pointer-coarse:h-11\"\n onClick={() => onChange(preset.value)}\n data-testid={`${id}-preset-${preset.id}`}\n >\n {l[preset.id]}\n </Button>\n ))}\n </div>\n <div className=\"flex items-center gap-2\">\n <Label htmlFor={`${id}-input`} className=\"sr-only\">\n {label}\n </Label>\n <Input\n id={`${id}-input`}\n type=\"datetime-local\"\n aria-label={l.pick}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n data-testid={id}\n />\n {value && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n aria-label={l.clear}\n onClick={() => onChange('')}\n >\n <X className=\"size-4\" aria-hidden />\n </Button>\n )}\n </div>\n </div>\n )\n}\n","import { DueDateMenu } from './DueDateMenu'\nimport { useMemo, useState } from 'react'\nimport { CalendarClock, ChevronDown, CornerDownRight, Loader2, X } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n EntityPill,\n Input,\n Label,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Textarea,\n Switch,\n VisibilityToggle,\n cn,\n} from '@arbidocs/react/ui'\nimport { assistantCopy, useAssistantCopy } from '@arbidocs/react/shell'\nimport { testIdOr } from '../../chat/test-id'\nimport { ModalHeader } from '../../settings/ModalScaffold'\nimport { PillSelect, type PillOption } from './PillSelect'\nimport type { TaskOption } from './taskComposerTypes'\nimport { EMPTY_NEW_THREAD, hasTaskFields, type NewThreadValues } from './taskRequest'\n\nexport interface NewThreadDialogLabels {\n title: string\n description: string\n promptLabel: string\n promptPlaceholder: string\n titleLabel: string\n titlePlaceholder: string\n visibility: string\n taskDetails: string\n /** Under the prompt: which files the assistant can use. */\n files: (count: number) => string\n taskDetailsHint: string\n due: string\n dueNone: string\n dueClear: string\n parentTask: string\n parentTaskNone: string\n search: string\n empty: string\n cancel: string\n createTask: string\n /** The switch under the prompt, and the button when it is off. */\n assistantStart: string\n assistantStartHint: string\n addTodo: string\n saving: string\n}\n\n/** ARBI's own phrases (the defaults below). */\nconst ARBI = assistantCopy()\n\nexport const DEFAULT_NEW_THREAD_DIALOG_LABELS: NewThreadDialogLabels = {\n title: 'New',\n description:\n 'Ask for anything, like a normal chat: the assistant gets on it. Add a due date if it matters.',\n promptLabel: 'What do you want to ask or get done?',\n promptPlaceholder: 'Ask a question, or describe what needs doing…',\n titleLabel: 'Title',\n titlePlaceholder: 'Made from your prompt unless you write one',\n visibility: 'Shared with',\n taskDetails: 'Task details',\n files: (count) =>\n count === 0\n ? 'No files in this workspace yet: answers come from general knowledge.'\n : `Can use the ${count} file${count === 1 ? '' : 's'} in this workspace.`,\n taskDetailsHint: 'Optional.',\n due: 'Due',\n dueNone: 'No date',\n dueClear: 'Clear date',\n parentTask: 'Part of',\n parentTaskNone: 'Nothing (top-level)',\n search: 'Search…',\n empty: 'No match.',\n cancel: 'Cancel',\n createTask: ARBI.startWith,\n assistantStart: 'Assistant starts on it now',\n assistantStartHint: 'Switch off to just keep track of it as a to-do.',\n addTodo: 'Add to-do',\n saving: 'Creating…',\n}\n\nexport interface NewThreadDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** Tasks this can be a sub-task of. Omit or leave empty to hide the field. */\n tasks?: TaskOption[]\n initialValues?: Partial<NewThreadValues>\n /** How many files the assistant will be able to use; omit to say nothing. */\n fileCount?: number\n isPending?: boolean\n onSubmit: (values: NewThreadValues) => void | Promise<void>\n labels?: Partial<NewThreadDialogLabels>\n testId?: string\n}\n\nconst GLYPH = 'size-3.5 shrink-0'\n\n/** A datetime-local value as \"Fri 14 Oct, 09:00\"; the raw value if it is not a date. */\nfunction formatDue(local: string): string {\n const d = new Date(local)\n if (Number.isNaN(d.getTime())) return local\n return d.toLocaleString(undefined, {\n weekday: 'short',\n day: 'numeric',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n })\n}\n\n/**\n * \"New task\": the one way to start something. Type the prompt (what to ask or get done) and who sees it (the\n * workspace, by default); the title is made from the prompt. Every ask is a task: the details (due date,\n * parent, a title of your own) are optional and folded away.\n */\nexport function NewThreadDialog({\n open,\n onOpenChange,\n tasks = [],\n initialValues,\n fileCount,\n isPending,\n onSubmit,\n labels,\n testId,\n}: NewThreadDialogProps) {\n const assistant = useAssistantCopy()\n const l: NewThreadDialogLabels = {\n ...DEFAULT_NEW_THREAD_DIALOG_LABELS,\n createTask: assistant.startWith,\n ...labels,\n }\n const seed = useMemo(\n () => ({ ...EMPTY_NEW_THREAD, ...initialValues }),\n // Seeded once per open.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [open]\n )\n const [values, setValues] = useState<NewThreadValues>(seed)\n const [detailsOpen, setDetailsOpen] = useState(hasTaskFields(seed))\n const [submitError, setSubmitError] = useState<string | null>(null)\n\n const id = testIdOr(testId, { testId: 'new-thread' })\n const set = <K extends keyof NewThreadValues>(key: K, value: NewThreadValues[K]) =>\n setValues((v) => ({ ...v, [key]: value }))\n const canSubmit = values.prompt.trim() !== '' && !isPending\n const pillLabels = { search: l.search, empty: l.empty }\n const taskOptions: PillOption[] = tasks.map((t) => ({\n id: t.id,\n label: t.name,\n icon: <CornerDownRight className={GLYPH} aria-hidden />,\n }))\n\n return (\n <Dialog modal={false} open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"right\"\n onInteractOutside={(event) => event.preventDefault()}\n className=\"flex flex-col overflow-hidden p-0\"\n data-testid={id}\n >\n <ModalHeader>\n <DialogTitle>{l.title}</DialogTitle>\n <DialogDescription className=\"sr-only\">{l.description}</DialogDescription>\n </ModalHeader>\n <form\n className=\"flex min-h-0 flex-1 flex-col\"\n onSubmit={async (event) => {\n event.preventDefault()\n if (!canSubmit) return\n setSubmitError(null)\n try {\n await onSubmit(values)\n setValues(EMPTY_NEW_THREAD)\n setDetailsOpen(false)\n } catch (error) {\n setSubmitError(error instanceof Error ? error.message : 'Could not create the thread')\n }\n }}\n >\n <div className=\"flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto px-6 pb-4\">\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"new-thread-prompt\" className=\"sr-only\">\n {l.promptLabel}\n </Label>\n <Textarea\n id=\"new-thread-prompt\"\n value={values.prompt}\n placeholder={l.promptPlaceholder}\n rows={4}\n onChange={(e) => set('prompt', e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey) && canSubmit) onSubmit(values)\n }}\n autoFocus\n className=\"min-h-24 text-base\"\n data-testid={`${id}-prompt`}\n />\n <label className=\"flex items-center gap-2 text-sm\" data-testid={`${id}-assistant`}>\n <Switch\n checked={values.assistant}\n onCheckedChange={(on) => set('assistant', on)}\n data-testid={`${id}-assistant-switch`}\n />\n <span>{l.assistantStart}</span>\n <span className=\"text-xs text-muted-foreground\">{l.assistantStartHint}</span>\n </label>\n {fileCount !== undefined && values.assistant && (\n <p className=\"text-xs text-muted-foreground\" data-testid={`${id}-files`}>\n {l.files(fileCount)}\n </p>\n )}\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <VisibilityToggle\n items={{ shared: values.shared }}\n onToggle={(share) => set('shared', share)}\n label={l.visibility}\n presentation=\"select\"\n data-testid={`${id}-visibility`}\n />\n </div>\n\n <section className=\"flex flex-col gap-3\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1 self-start px-2 pointer-coarse:h-11\"\n onClick={() => setDetailsOpen((v) => !v)}\n aria-expanded={detailsOpen}\n data-testid={`${id}-details-toggle`}\n >\n {l.taskDetails}\n <ChevronDown\n className={cn('size-3.5 transition-transform', detailsOpen && 'rotate-180')}\n aria-hidden\n />\n </Button>\n {detailsOpen && (\n <div className=\"flex flex-col gap-3\" data-testid={`${id}-details`}>\n <p className=\"text-xs text-muted-foreground\">{l.taskDetailsHint}</p>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Popover>\n <PopoverTrigger asChild>\n <EntityPill\n icon={<CalendarClock className={GLYPH} aria-hidden />}\n label={`${l.due}: ${values.dueAt ? formatDue(values.dueAt) : l.dueNone}`}\n secondaryText={<ChevronDown className=\"size-3\" aria-hidden />}\n size=\"sm\"\n className=\"h-7 pointer-coarse:min-h-11\"\n data-testid={`${id}-due-pill`}\n />\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-auto p-2\">\n <DueDateMenu\n id={`${id}-due`}\n label={l.due}\n value={values.dueAt}\n onChange={(v) => set('dueAt', v)}\n labels={{ clear: l.dueClear }}\n />\n </PopoverContent>\n </Popover>\n {tasks.length > 0 && (\n <PillSelect\n icon={<CornerDownRight className={GLYPH} aria-hidden />}\n prefix={l.parentTask}\n value={values.parentId}\n options={taskOptions}\n noneOption={{ id: '', label: l.parentTaskNone }}\n onChange={(v) => set('parentId', v)}\n searchable\n labels={pillLabels}\n testId={`${id}-parent`}\n />\n )}\n </div>\n <Label htmlFor=\"new-thread-title\" className=\"sr-only\">\n {l.titleLabel}\n </Label>\n <Input\n id=\"new-thread-title\"\n value={values.title}\n placeholder={l.titlePlaceholder}\n onChange={(e) => set('title', e.target.value)}\n data-testid={`${id}-title`}\n />\n </div>\n )}\n </section>\n </div>\n {submitError && (\n <p role=\"alert\" className=\"px-6 pb-2 text-sm text-destructive\">\n {submitError}\n </p>\n )}\n <div className=\"flex flex-col-reverse gap-2 border-t border-border px-6 py-3 sm:flex-row sm:justify-end\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n data-testid={`${id}-cancel`}\n className=\"pointer-coarse:min-h-11\"\n >\n {l.cancel}\n </Button>\n <Button\n type=\"submit\"\n disabled={!canSubmit}\n data-testid={`${id}-submit`}\n className=\"gap-1.5 pointer-coarse:min-h-11\"\n >\n {isPending && <Loader2 className=\"size-4 animate-spin\" />}\n {isPending ? l.saving : !values.assistant ? l.addTodo : l.createTask}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","import type { ReactNode } from 'react'\nimport { eventWaitingDocuments, waitingForDocumentsText } from '../workflows/run'\nimport {\n AlertTriangle,\n ArrowUpRight,\n CheckCircle2,\n Flag,\n KeyRound,\n Lock,\n MessageSquareReply,\n Phone,\n Disc,\n Play,\n RotateCcw,\n Sparkles,\n Square,\n UserRoundCog,\n BellRing,\n CornerUpLeft,\n Hourglass,\n PenLine,\n} from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport type TaskActivityKind =\n | 'created'\n | 'run_started'\n | 'awaiting_access'\n | 'access_granted'\n | 'done'\n | 'reopened'\n | 'failed'\n | 'participant_joined'\n | 'assistant_responded'\n | 'assistant_stopped'\n | 'artifact_created'\n | 'artifact_edited'\n | 'document_added'\n | 'document_removed'\n | 'notified'\n /** A thread call (its log card): `call_ext_id`, `started_by`, `invited`, … `ended_at`, `joined`. */\n | 'call'\n /** A stopped call recording (its Recording card): `call_ext_id`, `recording_ext_id`, … */\n | 'recording'\n // A workflow step's progress (detail.step names it).\n | 'step_started'\n | 'step_done'\n | 'step_skipped'\n | 'step_failed'\n // An action step waits on its people (detail.waiting), moves on (a signer signed), a person\n // sent the work back (detail.to), a step's person was told or reminded.\n | 'step_waiting'\n | 'step_progress'\n | 'step_sent_back'\n | 'step_ready'\n | 'step_reminded'\n // A step raised a signal (detail.step, detail.signal), and the linked thread it started\n // (detail.conversation_ext_id, detail.workflow_ext_id).\n | 'step_signal'\n | 'linked_run'\n\n/** One event of a task's history, as the backend returns it (oldest first). */\nexport interface TaskActivityEvent {\n external_id: string\n kind: TaskActivityKind\n actor_ext_id?: string | null\n /** Who a notification went to. */\n to_ext_id?: string | null\n /** `run_id`, `agent_ext_id`, `as_user`, `from_workflow`, `error`. */\n detail?: Record<string, unknown> | null\n created_at: string\n}\n\nexport interface TaskActivityLabels {\n title: string\n empty: string\n loading: string\n error: string\n close: string\n created: string\n createdFromWorkflow: string\n runStarted: string\n runStartedBy: (agentName: string) => string\n awaitingAccess: string\n accessGranted: string\n done: string\n reopened: string\n failed: string\n failureLine: (error: string) => string\n /** The actor is not known (a system step). */\n system: string\n}\n\nexport const DEFAULT_TASK_ACTIVITY_LABELS: TaskActivityLabels = {\n title: 'Activity',\n empty: 'Nothing has happened yet.',\n loading: 'Loading activity…',\n error: 'Could not load the activity.',\n close: 'Close',\n created: 'Created',\n createdFromWorkflow: 'Created from a workflow',\n runStarted: 'Run started',\n runStartedBy: (agent) => `Run started by ${agent}`,\n awaitingAccess: 'Waiting for access',\n accessGranted: 'Access granted',\n done: 'Marked done',\n reopened: 'Reopened',\n failed: 'Run failed',\n failureLine: (error) => error,\n system: 'System',\n}\n\nconst ICONS: Record<TaskActivityKind, ReactNode> = {\n created: <Sparkles className=\"size-3.5\" aria-hidden />,\n run_started: <Play className=\"size-3.5\" aria-hidden />,\n awaiting_access: <Lock className=\"size-3.5\" aria-hidden />,\n access_granted: <KeyRound className=\"size-3.5\" aria-hidden />,\n done: <CheckCircle2 className=\"size-3.5\" aria-hidden />,\n reopened: <RotateCcw className=\"size-3.5\" aria-hidden />,\n failed: <AlertTriangle className=\"size-3.5\" aria-hidden />,\n participant_joined: <UserRoundCog className=\"size-3.5\" aria-hidden />,\n assistant_responded: <Sparkles className=\"size-3.5\" aria-hidden />,\n assistant_stopped: <Square className=\"size-3.5\" aria-hidden />,\n artifact_created: <Sparkles className=\"size-3.5\" aria-hidden />,\n artifact_edited: <MessageSquareReply className=\"size-3.5\" aria-hidden />,\n document_added: <Sparkles className=\"size-3.5\" aria-hidden />,\n document_removed: <AlertTriangle className=\"size-3.5\" aria-hidden />,\n notified: <UserRoundCog className=\"size-3.5\" aria-hidden />,\n call: <Phone className=\"size-3.5\" aria-hidden />,\n recording: <Disc className=\"size-3.5\" aria-hidden />,\n step_started: <Play className=\"size-3.5\" aria-hidden />,\n step_done: <CheckCircle2 className=\"size-3.5\" aria-hidden />,\n step_skipped: <RotateCcw className=\"size-3.5\" aria-hidden />,\n step_failed: <AlertTriangle className=\"size-3.5\" aria-hidden />,\n step_signal: <Flag className=\"size-3.5\" aria-hidden />,\n step_waiting: <Hourglass className=\"size-3.5\" aria-hidden />,\n step_progress: <PenLine className=\"size-3.5\" aria-hidden />,\n step_sent_back: <CornerUpLeft className=\"size-3.5\" aria-hidden />,\n step_ready: <BellRing className=\"size-3.5\" aria-hidden />,\n step_reminded: <BellRing className=\"size-3.5\" aria-hidden />,\n linked_run: <ArrowUpRight className=\"size-3.5\" aria-hidden />,\n}\n\nconst asString = (v: unknown): string | null => (typeof v === 'string' && v.trim() ? v : null)\n\n/** A short line for an error: the first line, cut at a readable length. */\nfunction summarizeError(error: string): string {\n const first = error.split('\\n')[0].trim()\n return first.length > 160 ? `${first.slice(0, 157)}…` : first\n}\n\n/**\n * The one-line headline of a thread event (\"Marked done\", \"Step failed\"), without its actor. Shared\n * by the task timeline and the workspace activity feed so a kind reads the same in both.\n */\nexport function taskActivityHeadline(\n e: Pick<TaskActivityEvent, 'kind' | 'detail'>,\n labels: TaskActivityLabels = DEFAULT_TASK_ACTIVITY_LABELS,\n agentName?: (agentExtId: string) => string | undefined\n): string {\n const l = labels\n const detail = e.detail ?? {}\n const agentId = asString(detail.agent_ext_id)\n const agent = agentId ? agentName?.(agentId) : undefined\n switch (e.kind) {\n case 'participant_joined':\n return 'Joined the conversation'\n case 'assistant_responded':\n return 'Responded'\n case 'assistant_stopped':\n return 'Stopped'\n case 'artifact_created':\n return 'Created a document'\n case 'artifact_edited':\n return 'Edited a document'\n case 'document_added':\n return 'Added a document'\n case 'document_removed':\n return 'Removed a document'\n case 'notified':\n return 'Sent a notification'\n case 'call':\n return detail.ended_at ? 'Call ended' : 'Started a call'\n case 'recording':\n return 'Recorded the call'\n case 'step_started':\n return 'Step started'\n case 'step_done':\n return 'Step done'\n case 'step_skipped':\n return 'Step skipped'\n case 'step_waiting': {\n const documents = eventWaitingDocuments(detail)\n return documents ? waitingForDocumentsText(documents.length) : 'Waiting on people'\n }\n case 'step_progress': {\n const documents = eventWaitingDocuments(detail)\n return documents\n ? waitingForDocumentsText(documents.length)\n : detail.signed\n ? 'Signed'\n : 'Step moved on'\n }\n case 'step_sent_back':\n return 'Sent the work back'\n case 'step_ready':\n return 'Told whose turn it is'\n case 'step_reminded':\n return 'Sent a reminder'\n case 'step_signal':\n return `Signalled “${asString(detail.signal) ?? 'a signal'}”`\n case 'linked_run':\n return `Started a linked workflow on “${asString(detail.signal) ?? 'a signal'}”`\n case 'step_failed':\n return 'Step failed'\n case 'created':\n return detail.from_workflow ? l.createdFromWorkflow : l.created\n case 'run_started':\n return agent ? l.runStartedBy(agent) : l.runStarted\n case 'awaiting_access':\n return l.awaitingAccess\n case 'access_granted':\n return l.accessGranted\n case 'done':\n return l.done\n case 'reopened':\n return l.reopened\n case 'failed':\n return l.failed\n default:\n // A kind added on the server after this build: say something rather than nothing.\n return String(e.kind).replace(/_/g, ' ')\n }\n}\n\nexport interface TaskActivityTimelineProps {\n events: readonly TaskActivityEvent[]\n /** Draw a person (an id, or none for a system step). */\n renderPerson: (id: string | null | undefined) => ReactNode\n /** An agent's display name by id. */\n agentName?: (agentExtId: string) => string | undefined\n /** \"2 min ago\". */\n formatRelative: (iso: string) => string\n /** The exact time, shown on hover. */\n formatExact: (iso: string) => string\n labels?: Partial<TaskActivityLabels>\n testId?: string\n}\n\n/** A task's history as a vertical timeline, oldest first, one entry per event. */\nexport function TaskActivityTimeline({\n events,\n renderPerson,\n agentName,\n formatRelative,\n formatExact,\n labels,\n testId,\n}: TaskActivityTimelineProps) {\n const l = { ...DEFAULT_TASK_ACTIVITY_LABELS, ...labels }\n const base = testIdOr(testId, { testId: 'task-activity' })\n\n const describe = (e: TaskActivityEvent): { headline: ReactNode; extra?: ReactNode } => {\n const headline = taskActivityHeadline(e, l, agentName)\n const error = asString(e.detail?.error)\n if (e.kind === 'step_failed' && error)\n return { headline, extra: l.failureLine(summarizeError(error)) }\n if (e.kind === 'failed' && error)\n return {\n headline,\n extra: (\n <p className=\"text-xs text-destructive\" data-testid={`${base}-error-${e.external_id}`}>\n {l.failureLine(summarizeError(error))}\n </p>\n ),\n }\n return { headline }\n }\n\n return (\n <ol className=\"flex flex-col\" data-testid={`${base}-list`}>\n {events.map((e, i) => {\n const { headline, extra } = describe(e)\n const last = i === events.length - 1\n return (\n <li\n key={e.external_id}\n className=\"relative flex gap-3 pb-4 last:pb-0\"\n data-testid={`${base}-entry-${e.external_id}`}\n data-kind={e.kind}\n >\n {!last && (\n <span className=\"absolute left-3 top-6 -ml-px h-[calc(100%-1.5rem)] w-px bg-border\" />\n )}\n <span\n className={cn(\n 'z-10 flex size-6 shrink-0 items-center justify-center rounded-full border bg-background',\n e.kind === 'failed' ? 'text-destructive' : 'text-muted-foreground'\n )}\n data-testid={`${base}-icon-${e.external_id}`}\n >\n {ICONS[e.kind]}\n </span>\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-1 text-sm\">\n {e.actor_ext_id ? (\n <span className=\"inline-flex\" data-testid={`${base}-actor-${e.external_id}`}>\n {renderPerson(e.actor_ext_id)}\n </span>\n ) : (\n <span className=\"text-muted-foreground\">{l.system}</span>\n )}\n <span className=\"font-medium\">{headline}</span>\n <time\n dateTime={e.created_at}\n title={formatExact(e.created_at)}\n className=\"ml-auto text-xs text-muted-foreground\"\n data-testid={`${base}-time-${e.external_id}`}\n >\n {formatRelative(e.created_at)}\n </time>\n </div>\n {extra}\n </div>\n </li>\n )\n })}\n </ol>\n )\n}\n","import { useCallback } from 'react'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport {\n DEFAULT_TASK_ACTIVITY_LABELS,\n TaskActivityTimeline,\n type TaskActivityEvent,\n type TaskActivityLabels,\n type TaskActivityTimelineProps,\n} from './TaskActivityTimeline'\n\nexport interface TaskActivityDialogProps extends Omit<\n TaskActivityTimelineProps,\n 'events' | 'labels' | 'testId'\n> {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** The task's name, shown under the title. */\n taskName: string\n events: readonly TaskActivityEvent[] | undefined\n isLoading?: boolean\n isError?: boolean\n labels?: Partial<TaskActivityLabels>\n testId?: string\n}\n\n/** The task's history in a dialog: newest at the bottom, scrolled into view as events arrive. */\nexport function TaskActivityDialog({\n open,\n onOpenChange,\n taskName,\n events,\n isLoading,\n isError,\n labels,\n testId,\n ...timeline\n}: TaskActivityDialogProps) {\n const l = { ...DEFAULT_TASK_ACTIVITY_LABELS, ...labels }\n const id = testIdOr(testId, { testId: 'task-activity' })\n const count = events?.length ?? 0\n // Scroll the newest entry into view when the dialog opens and whenever an event arrives.\n const scrollToEnd = useCallback(\n (el: HTMLDivElement | null) => {\n if (count >= 0) el?.scrollIntoView?.({ block: 'end' })\n },\n [count]\n )\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent presentation=\"sheet\" className=\"max-h-[80dvh] sm:max-w-lg\" data-testid={id}>\n <DialogHeader>\n <DialogTitle>{l.title}</DialogTitle>\n <DialogDescription className=\"truncate\">{taskName}</DialogDescription>\n </DialogHeader>\n <div className=\"max-h-[55dvh] overflow-y-auto pr-1\" data-testid={`${id}-scroll`}>\n {isLoading && !events ? (\n <p className=\"text-sm text-muted-foreground\">{l.loading}</p>\n ) : isError && !events ? (\n <p className=\"text-sm text-destructive\">{l.error}</p>\n ) : count === 0 ? (\n <p className=\"text-sm text-muted-foreground\">{l.empty}</p>\n ) : (\n <TaskActivityTimeline events={events ?? []} labels={labels} testId={id} {...timeline} />\n )}\n <div ref={scrollToEnd} />\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n","/**\n * Where a workflow run is, in a line of a list (the threads list's status), on two lines. First a\n * track with one segment per step in its kind's colour — filled once done, pulsing while it runs,\n * outlined while still to come — centred on the step the run is at, with \"…\" where a long run has\n * more before or after. Then where it stands, in words, about the NEXT step (what happens now):\n * Generating, Needs you, Up next, Failed — or Ready once every step is done (Done once a person\n * marked it so). The thread bar's chips in miniature, so a list of runs reads like a list of agents.\n */\n\nimport { cn } from '@arbidocs/react/ui'\nimport { isRunFinished, stepLevels, stepPhase, type WorkflowStepPhase } from '../workflows/run'\nimport { activeStepId } from '../workflows/stepWindow'\nimport { stepKindOf } from '../workflows/stepKinds'\nimport type { WorkflowStep, WorkflowStepState } from '../workflows/types'\nimport { ThreadStatusLine, type ThreadState, type ThreadStateLabels } from './ThreadStatusLine'\n\nexport interface WorkflowRunStatusLabels extends ThreadStateLabels {\n /** A finished run's detail; `{count}` is replaced. */\n allDone: string\n}\n\nexport const DEFAULT_WORKFLOW_RUN_STATUS_LABELS: Partial<WorkflowRunStatusLabels> = {\n allDone: 'all {count} steps done',\n}\n\nexport interface WorkflowRunStatusProps {\n steps: WorkflowStep[]\n /** Each step's state (from `stepStatesFromActivity`). */\n states: Record<string, WorkflowStepState>\n /** Who a step is for, in words (`assigneeName`): a person's step \"needs\" them. */\n assigneeOf?: (step: WorkflowStep) => string | undefined\n labels?: Partial<WorkflowRunStatusLabels>\n /** The states are still loading: the track shows the steps only, with no position yet. */\n isLoading?: boolean\n /** The thread's own status (To do / Done), which a person sets: a finished run marked done is Done. */\n workStatus?: string | null\n /** The most steps the track shows; a longer run is trimmed around the step it is at. */\n maxSegments?: number\n className?: string\n testId?: string\n}\n\nconst SEGMENT: Record<WorkflowStepPhase, string> = {\n done: 'bg-[hsl(var(--wf-accent))]',\n running: 'bg-[hsl(var(--wf-accent))] animate-pulse',\n waiting: 'bg-[hsl(var(--wf-accent)/0.3)] ring-1 ring-inset ring-[hsl(var(--wf-accent))]',\n failed: 'bg-destructive',\n skipped: 'ring-1 ring-inset ring-muted-foreground/40',\n ready: 'ring-1 ring-inset ring-[hsl(var(--wf-accent)/0.7)]',\n blocked: 'ring-1 ring-inset ring-[hsl(var(--wf-accent)/0.7)]',\n}\n\nexport function WorkflowRunStatus({\n steps,\n states,\n assigneeOf,\n labels,\n isLoading,\n workStatus,\n maxSegments = 7,\n className,\n testId = 'workflow-run-status',\n}: WorkflowRunStatusProps) {\n const l = { ...DEFAULT_WORKFLOW_RUN_STATUS_LABELS, ...labels }\n const ordered = stepLevels(steps).flat()\n const phaseOf = (id: string): WorkflowStepPhase =>\n isLoading ? 'blocked' : stepPhase(steps, states, id)\n const finished = !isLoading && isRunFinished(steps, states)\n // The step the run is at: the next one to happen (running, waiting on someone, or to do).\n const atId = finished || isLoading ? undefined : activeStepId(stepLevels(steps), phaseOf)\n const at = ordered.find((s) => s.id === atId)\n const phase = at ? phaseOf(at.id) : 'done'\n const assignee = at && ['ready', 'waiting'].includes(phase) ? assigneeOf?.(at) : undefined\n\n const state: ThreadState = finished\n ? workStatus === 'done'\n ? 'done'\n : 'ready'\n : phase === 'running'\n ? 'generating'\n : phase === 'failed'\n ? 'failed'\n : assignee\n ? 'needs'\n : 'next'\n const detail = at\n ? at.title\n : finished\n ? (l.allDone ?? '').replace('{count}', String(ordered.length))\n : undefined\n\n // The track's window: centred on the step the run is at (the last one once finished).\n const n = ordered.length\n const size = Math.min(maxSegments, n)\n const centre = at ? ordered.indexOf(at) : n - 1\n const start = Math.max(0, Math.min(n - size, centre - Math.floor(size / 2)))\n const shown = ordered.slice(start, start + size)\n const ellipsis = (side: string) => (\n <span\n className=\"px-0.5 text-[10px] leading-none text-muted-foreground\"\n data-testid={`${testId}-more-${side}`}\n >\n …\n </span>\n )\n\n return (\n <div\n className={cn('flex min-w-0 flex-col justify-center gap-1', className)}\n data-testid={testId}\n data-phase={phase}\n >\n <span className=\"flex items-center gap-0.5\" aria-hidden>\n {start > 0 && ellipsis('before')}\n {shown.map((s) => (\n <span\n key={s.id}\n className={cn(\n `wf-kind-${stepKindOf(s)}`,\n 'h-1.5 w-3 shrink-0 rounded-full',\n SEGMENT[phaseOf(s.id)],\n s.id === atId && 'w-5'\n )}\n title={s.title}\n data-phase={phaseOf(s.id)}\n />\n ))}\n {start + size < n && ellipsis('after')}\n </span>\n {isLoading ? (\n <span className=\"text-xs leading-tight\"> </span>\n ) : (\n <ThreadStatusLine\n state={state}\n name={assignee}\n detail={detail}\n labels={labels}\n testId={`${testId}-line`}\n />\n )}\n </div>\n )\n}\n","/**\n * The top bar of a thread that runs a workflow, in the builder canvas's own look (`StepChip`: each\n * kind of step in its colour, the start as the canvas's start pill): where the run is — the previous, current and next\n * steps by name, the rest behind ‹ › and \"…\", parallel steps as a \"+N\" chip, and every running step\n * out of view as \"Working: <title>\" (`StepBarFrame`, the same model as the runner's stepper) — with\n * everything that actually happened in the thread attached to the step it happened\n * during — the assistant's turns, a draft sent back, people's messages and edits, notifications.\n * Each step shows who acted during it (their faces, and how many entries); what happened before the\n * first step sits on the start pill, and what happened after the last on an \"After\" chip — each a\n * segment of the same chevron bar as the steps.\n * Linked runs show too: a signal a step raised and the linked thread it started (after the step),\n * and, for a thread a signal started, \"Started by <step> in <thread>\" (before the steps).\n * A thread without a workflow shows `TaskFlow` instead.\n */\n\nimport { useState, type ReactNode } from 'react'\nimport { ArrowUpRight, CornerLeftUp, CornerUpLeft, Flag, MessagesSquare, Zap } from 'lucide-react'\nimport { cn, Popover, PopoverClose, PopoverContent, PopoverTrigger } from '@arbidocs/react/ui'\nimport {\n isRunFinished,\n splitDocRef,\n stepLevels,\n stepPhase,\n waitingDocuments,\n waitingForDocumentsText,\n type WorkflowStepPhase,\n} from '../workflows/run'\nimport {\n STEP_LABEL,\n STEP_LABEL_MAX,\n STEP_LABEL_CURRENT,\n DEFAULT_STEP_BAR_LABELS,\n StepBarFrame,\n type StepBarLabels,\n} from '../workflows/StepBarFrame'\nimport { StepChip } from '../workflows/StepChip'\nimport {\n DEFAULT_STEP_KIND_LABELS,\n STEP_KIND_ICONS,\n stepKindOf,\n type WorkflowStepKind,\n} from '../workflows/stepKinds'\nimport { activeStepId } from '../workflows/stepWindow'\nimport {\n DEFAULT_STEP_DOCUMENT_LABELS,\n DEFAULT_STEP_RECORD_LABELS,\n StepDocumentButton,\n StepDocumentCards,\n StepRecord,\n stepDocuments,\n type StepDocumentLabels,\n type StepRecordLabels,\n} from '../workflows/StepDocuments'\nimport type { WorkflowStep, WorkflowStepState } from '../workflows/types'\nimport type { TaskFlowItem } from './TaskFlow'\n\n/** An activity entry, with what the strip needs to place it. */\nexport interface WorkflowThreadItem extends TaskFlowItem {\n /** The activity kind (`step_started`, `assistant_responded`, …). */\n kind?: string\n /** For a step event: the step it is about. */\n step?: string\n}\n\nexport interface GroupedThreadActivity<T> {\n before: T[]\n byStep: Record<string, T[]>\n after: T[]\n}\n\nconst STEP_KINDS = new Set([\n 'step_started',\n 'step_waiting',\n 'step_done',\n 'step_skipped',\n 'step_failed',\n])\n\n/**\n * Place each activity entry (oldest first): an entry belongs to the step whose event came last\n * before it — or, once that step has finished, to the step the run now waits on (the first one not\n * finished). Entries before any step event come before the steps, and entries once every step has\n * finished come after them. Step events themselves are the steps' own status, not entries.\n */\nexport function groupThreadActivity<T extends { kind?: string; step?: string }>(\n steps: WorkflowStep[],\n items: readonly T[]\n): GroupedThreadActivity<T> {\n const out: GroupedThreadActivity<T> = { before: [], byStep: {}, after: [] }\n const states: Record<string, WorkflowStepState> = {}\n let current: string | undefined\n for (const item of items) {\n if (item.kind && STEP_KINDS.has(item.kind) && item.step) {\n current = item.step\n states[item.step] = {\n status:\n item.kind === 'step_started'\n ? 'running'\n : item.kind === 'step_waiting'\n ? 'waiting'\n : item.kind === 'step_done'\n ? 'done'\n : item.kind === 'step_skipped'\n ? 'skipped'\n : 'failed',\n }\n continue\n }\n if (current === undefined) out.before.push(item)\n else if (isRunFinished(steps, states)) out.after.push(item)\n else {\n // Once the last step to move has finished, what follows is about the step the run waits on.\n const status = states[current]?.status\n const at =\n status === 'done' || status === 'skipped'\n ? (steps.find((s) => !['done', 'skipped'].includes(states[s.id]?.status ?? ''))?.id ??\n current)\n : current\n ;(out.byStep[at] ??= []).push(item)\n }\n }\n return out\n}\n\nexport interface WorkflowThreadStripLabels {\n /** The popover heading of a step's entries; `{count}` is replaced. */\n happened: string\n /** What the count on a step is; `{count}` is replaced. */\n updates: string\n nothingYet: string\n skip: string\n /** A linked run's origin; `{step}` and `{thread}` are replaced. */\n startedBy: string\n /** A raised signal's tooltip; `{signal}` is replaced. */\n signalled: string\n /** A linked thread's tooltip; `{signal}` is replaced. */\n linkedRun: string\n /** A step that waits for someone; `{name}` is replaced. */\n waitingFor: string\n /** A step the work was sent back to. */\n sentBack: string\n /** The start pill: the run began. */\n started: string\n /** The chip of what happened once every step had finished. */\n after: string\n /** The start pill's list, and the \"After\" chip's. */\n beforeSteps: string\n afterSteps: string\n /** Each kind's name, on the step in view. */\n kinds: Record<WorkflowStepKind, string>\n documents: StepDocumentLabels\n record: StepRecordLabels\n}\n\nexport const DEFAULT_WORKFLOW_THREAD_STRIP_LABELS: WorkflowThreadStripLabels = {\n happened: '{count} in this step',\n updates: '{count} updates in this step',\n nothingYet: 'Nothing here yet.',\n skip: 'Skip this step',\n startedBy: 'Started by {step} in {thread}',\n signalled: 'This step signalled “{signal}”',\n linkedRun: 'Started on “{signal}”: open its thread',\n waitingFor: 'Waiting for {name}',\n sentBack: 'Sent back to be done again',\n started: 'Started',\n after: 'After',\n beforeSteps: 'Before the first step',\n afterSteps: 'After the last step',\n kinds: DEFAULT_STEP_KIND_LABELS,\n documents: DEFAULT_STEP_DOCUMENT_LABELS,\n record: DEFAULT_STEP_RECORD_LABELS,\n}\n\n/** A linked thread a signal started, as the host names it. */\nexport interface WorkflowThreadLinkedRun {\n id: string\n /** The thread's title, or its workflow's name. */\n label: string\n onSelect?: () => void\n}\n\n/** A signal one of the run's steps raised, and the linked threads it started. */\nexport interface WorkflowThreadSignal {\n step: string\n signal: string\n runs: WorkflowThreadLinkedRun[]\n}\n\n/** Where a linked run came from: the step and the parent thread whose signal started it. */\nexport interface WorkflowThreadOrigin {\n stepTitle: string\n threadTitle: string\n signal?: string\n onSelect?: () => void\n}\n\nexport interface WorkflowThreadStripProps {\n steps: WorkflowStep[]\n /** Each step's state (from `stepStatesFromActivity`). */\n states: Record<string, WorkflowStepState>\n /** The thread's activity, oldest first, as `TaskFlow` items with their kind (and step). */\n items: readonly WorkflowThreadItem[]\n renderIcon?: (key: string) => ReactNode\n /**\n * Skip a step (any unfinished one that is not running: the plan guides the thread, it does not\n * hold it). Absent = no skipping here.\n */\n onSkip?: (stepId: string) => void\n /** The host's action for a person's step (fill in the form, approve…), shown in its popover. */\n renderStepAction?: (step: WorkflowStep, phase: WorkflowStepPhase) => ReactNode\n /** Signals the steps raised and the linked threads they started (`linkedRunsFromActivity`). */\n signals?: readonly WorkflowThreadSignal[]\n /** For a thread a signal started: where it came from. */\n startedBy?: WorkflowThreadOrigin\n /** Who a step is for, in words (`assigneeName`): shown on the step while it waits for them. */\n assigneeOf?: (step: WorkflowStep) => string | undefined\n /**\n * The documents: a step's popover leads with the versions it drafted, or for an approval the\n * versions it approves (`stepDocuments`), named by `nameOfDoc` and opened by `onOpenDocument`.\n */\n nameOfDoc?: (id: string) => string | undefined\n onOpenDocument?: (ref: string) => void\n /** The run's answers (`skill_inputs`) and people's names: a finished step shows what it recorded. */\n inputs?: Record<string, unknown>\n nameOf?: (id: string) => string | undefined\n labels?: Partial<WorkflowThreadStripLabels>\n /** The bar's own wording (arrows, \"…\", \"Working: <title>\", status words). */\n barLabels?: Partial<StepBarLabels>\n /** The most levels the bar shows at once (`StepBarFrame`'s `maxSpan`). Absent: as many as fit. */\n maxSpan?: number\n /**\n * The step in view, when the host keeps it (a runner's current step); absent: the strip's own\n * pick, else where the run is.\n */\n current?: string | null\n /** A step was gone to on the strip (its chip opened, or picked from a list). */\n onSelectStep?: (stepId: string) => void\n className?: string\n}\n\n/** \"Started by <step> in <thread>\": a linked run's way back to the thread that started it. */\nexport function WorkflowThreadStartedBy({\n origin,\n labels,\n}: {\n origin: WorkflowThreadOrigin\n labels?: Partial<WorkflowThreadStripLabels>\n}) {\n const l = { ...DEFAULT_WORKFLOW_THREAD_STRIP_LABELS, ...labels }\n const text = l.startedBy\n .replace('{step}', origin.stepTitle)\n .replace('{thread}', origin.threadTitle)\n const className =\n 'flex max-w-64 shrink-0 items-center gap-1 truncate rounded-full border border-border px-2 py-0.5 text-[11px] text-muted-foreground'\n const content = (\n <>\n <CornerLeftUp className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{text}</span>\n </>\n )\n return origin.onSelect ? (\n <button\n type=\"button\"\n onClick={origin.onSelect}\n title={origin.signal ? `${text} (${origin.signal})` : text}\n className={cn(className, 'hover:border-primary/40 hover:text-primary')}\n data-testid=\"workflow-thread-started-by\"\n >\n {content}\n </button>\n ) : (\n <span className={className} title={text} data-testid=\"workflow-thread-started-by\">\n {content}\n </span>\n )\n}\n\n/** A raised signal after its step, with the linked threads it started. */\nfunction SignalPill({ signal, l }: { signal: WorkflowThreadSignal; l: WorkflowThreadStripLabels }) {\n return (\n <span\n className=\"flex shrink-0 items-center gap-1 rounded-full border border-amber-500/40 bg-amber-500/10 px-1.5 py-0.5 text-[11px] text-amber-700 dark:text-amber-300\"\n title={l.signalled.replace('{signal}', signal.signal)}\n data-testid={`workflow-thread-signal-${signal.step}-${signal.signal}`}\n >\n <Flag className=\"size-3 shrink-0\" />\n <span className=\"font-mono\">{signal.signal}</span>\n {signal.runs.map((run) => (\n <button\n key={run.id}\n type=\"button\"\n onClick={run.onSelect}\n disabled={!run.onSelect}\n title={l.linkedRun.replace('{signal}', signal.signal)}\n className=\"flex max-w-40 items-center gap-0.5 truncate rounded-full bg-background/80 px-1.5 text-foreground hover:text-primary disabled:cursor-default\"\n data-testid={`workflow-thread-linked-${run.id}`}\n >\n <ArrowUpRight className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{run.label}</span>\n </button>\n ))}\n </span>\n )\n}\n\nfunction Entry({ item }: { item: WorkflowThreadItem }) {\n const content = (\n <>\n <span className=\"shrink-0\">{item.avatar}</span>\n <span className=\"min-w-0 text-left\">\n <span className=\"block max-w-40 truncate text-[11px] font-medium leading-tight\">\n {item.label}\n </span>\n <span\n className=\"block text-[10px] leading-tight text-muted-foreground\"\n title={item.exactTime}\n >\n {item.time}\n </span>\n </span>\n </>\n )\n // Going to what happened closes the popover it is listed in.\n return item.onSelect ? (\n <PopoverClose asChild>\n <button\n type=\"button\"\n onClick={item.onSelect}\n className=\"flex w-full items-center gap-1.5 rounded-md px-1 py-0.5 hover:bg-accent\"\n data-testid={`thread-flow-${item.id}`}\n >\n {content}\n </button>\n </PopoverClose>\n ) : (\n <span className=\"flex items-center gap-1.5 px-1 py-0.5\" data-testid={`thread-flow-${item.id}`}>\n {content}\n </span>\n )\n}\n\n/** The room a step's faces take on its chip, and its document button beside it. */\nconst BEADS_PX = 32\nconst DOC_BUTTON_PX = 34\n\n/** Who acted in these entries: each face once (latest last), then how many entries there are. */\nfunction Beads({ items, label }: { items: readonly WorkflowThreadItem[]; label: string }) {\n if (!items.length) return null\n const faces = new Map<string, ReactNode>()\n for (const item of items) {\n const key = item.actor ?? item.id\n faces.delete(key)\n faces.set(key, item.avatar)\n }\n const shown = [...faces.entries()].slice(-3)\n return (\n <span\n className=\"flex shrink-0 items-center gap-1\"\n title={label.replace('{count}', String(items.length))}\n >\n <span className=\"wf-beads [&_svg]:size-4\" aria-hidden>\n {shown.map(([key, avatar]) => (\n <span key={key}>{avatar}</span>\n ))}\n </span>\n <span className=\"text-[10px] font-normal tabular-nums text-muted-foreground\" aria-hidden>\n {items.length}\n </span>\n <span className=\"sr-only\">{label.replace('{count}', String(items.length))}</span>\n </span>\n )\n}\n\n/** A popover's heading, as the chip that opened it: the kind's badge, its name and the title. */\nfunction PopoverHeading({\n kind,\n icon,\n overline,\n title,\n}: {\n kind: string\n icon: ReactNode\n overline: string\n title: string\n}) {\n return (\n <div className={cn(`wf-kind-${kind}`, 'flex items-center gap-2 px-1 pb-1')}>\n <span className=\"wf-badge flex size-7 shrink-0 items-center justify-center rounded-md [&_svg]:size-4\">\n {icon}\n </span>\n <span className=\"min-w-0\">\n <span className=\"wf-kind-text block truncate text-[10px] font-semibold uppercase tracking-wider\">\n {overline}\n </span>\n <span className=\"block truncate text-sm font-semibold leading-snug\">{title}</span>\n </span>\n </div>\n )\n}\n\n/** A chip for entries outside the steps (the start, after the end), listing them on demand. */\nfunction EntriesChip({\n kind,\n icon,\n label,\n items,\n extra,\n heading,\n testId,\n}: {\n kind: 'start' | 'adhoc'\n icon: ReactNode\n label: string\n items: readonly WorkflowThreadItem[]\n extra?: ReactNode\n heading: string\n testId: string\n}) {\n const latest = items.at(-1)\n return (\n <Popover>\n <PopoverTrigger asChild>\n <StepChip\n kind={kind}\n phase=\"ready\"\n icon={icon}\n label={label}\n labelClassName=\"max-w-40 truncate\"\n title={latest ? `${label} · ${latest.label} · ${latest.time}` : label}\n className=\"shrink-0\"\n data-testid={testId}\n >\n <Beads items={items} label={heading} />\n </StepChip>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-72 space-y-1 p-2\" data-testid={`${testId}-menu`}>\n <PopoverHeading kind={kind} icon={icon} overline={heading} title={label} />\n {extra}\n {items.map((item) => (\n <Entry key={item.id} item={item} />\n ))}\n </PopoverContent>\n </Popover>\n )\n}\n\nexport function WorkflowThreadStrip({\n steps,\n states,\n items,\n renderIcon,\n onSkip,\n renderStepAction,\n signals = [],\n startedBy,\n assigneeOf,\n nameOfDoc,\n onOpenDocument,\n inputs = {},\n nameOf,\n labels,\n barLabels,\n maxSpan,\n current,\n onSelectStep,\n className,\n}: WorkflowThreadStripProps) {\n const l = { ...DEFAULT_WORKFLOW_THREAD_STRIP_LABELS, ...labels }\n const barL = { ...DEFAULT_STEP_BAR_LABELS, ...barLabels }\n const grouped = groupThreadActivity(steps, items)\n // A signal from a step the plan no longer names still shows, after the steps.\n const strays = signals.filter((s) => !steps.some((step) => step.id === s.step))\n // The step a person went to (from a group, the list, a \"Working\" pill); none = where the run is.\n // A host that keeps the step in view (`current`) is told (`onSelectStep`) and decides.\n const [picked, setPicked] = useState<string | null>(null)\n const selected = current !== undefined ? current : picked\n const setSelected = (id: string) => {\n setPicked(id)\n onSelectStep?.(id)\n }\n // The step whose popover (what happened in it, its action) is open.\n const [open, setOpen] = useState<string | null>(null)\n const phaseOf = (id: string) => stepPhase(steps, states, id)\n const iconOf = (step: WorkflowStep) =>\n step.icon && renderIcon ? renderIcon(step.icon) : undefined\n // The host's icon for a step, else its kind's (as on the canvas).\n const glyphOf = (step: WorkflowStep) => {\n const KindIcon = STEP_KIND_ICONS[stepKindOf(step)]\n return iconOf(step) ?? <KindIcon />\n }\n\n const waitingOf = (id: string) => {\n const step = steps.find((s) => s.id === id)\n const phase = phaseOf(id)\n const documents = waitingDocuments(states[id])\n if (documents.length) return waitingForDocumentsText(documents.length)\n const name = step && (phase === 'ready' || phase === 'waiting') ? assigneeOf?.(step) : undefined\n return name ? l.waitingFor.replace('{name}', name) : undefined\n }\n\n const pill = (step: WorkflowStep, isCurrent: boolean) => {\n const phase = phaseOf(step.id)\n const happened = grouped.byStep[step.id] ?? []\n const assignee = phase === 'ready' || phase === 'waiting' ? assigneeOf?.(step) : undefined\n // Whom it waits for, or the documents it waits on to finish processing.\n const waiting = waitingOf(step.id)\n const sentBack = states[step.id]?.sentBack\n const kind = stepKindOf(step)\n const documents = stepDocuments(steps, states, step.id)\n // The step's document, one click from its chip: the latest version.\n const latestDoc = onOpenDocument ? documents.at(-1) : undefined\n const finished = ['done', 'skipped', 'failed'].includes(phase)\n const chip = (\n <Popover\n open={open === step.id}\n onOpenChange={(o) => {\n setOpen(o ? step.id : null)\n // The step whose popover is open is the step in view (ringed, headed).\n if (o) setSelected(step.id)\n }}\n >\n <PopoverTrigger asChild>\n <StepChip\n kind={kind}\n phase={phase}\n icon={glyphOf(step)}\n label={step.title}\n current={isCurrent}\n heading={\n <>\n {l.kinds[kind]}\n {assignee && (\n <span data-testid={`workflow-thread-step-${step.id}-assignee`}>\n {' · '}\n {waiting}\n </span>\n )}\n </>\n }\n labelClassName={isCurrent ? STEP_LABEL_CURRENT : cn(STEP_LABEL, STEP_LABEL_MAX)}\n className={cn(latestDoc && 'rounded-r-none')}\n title={waiting ? `${step.title} · ${waiting}` : step.title}\n data-testid={`workflow-thread-step-${step.id}`}\n >\n {sentBack && (\n <CornerUpLeft\n className=\"size-3 shrink-0 text-amber-600 dark:text-amber-400\"\n aria-label={l.sentBack}\n data-testid={`workflow-thread-step-${step.id}-sent-back`}\n />\n )}\n <Beads items={happened} label={l.updates} />\n </StepChip>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className=\"w-80 space-y-1.5 p-2\"\n data-testid={`workflow-thread-step-${step.id}-menu`}\n >\n <PopoverHeading\n kind={kind}\n icon={glyphOf(step)}\n // Where it stands, said once, as on its chip: whom it waits for, else its phase.\n overline={`${l.kinds[kind]} · ${waiting ?? barL.phases[phase]}`}\n title={step.title}\n />\n {sentBack && (\n <p className=\"px-1 text-xs text-amber-700 dark:text-amber-300\">{l.sentBack}</p>\n )}\n {/* The document first: what was drafted, or what is being approved. */}\n <StepDocumentCards\n refs={documents}\n heading={\n step.kind === 'review'\n ? phase === 'done'\n ? l.documents.approved\n : l.documents.toApprove\n : l.documents.produced\n }\n nameOfDoc={nameOfDoc}\n onOpen={onOpenDocument}\n labels={l.documents}\n testId={`workflow-thread-step-${step.id}-docs`}\n />\n <StepRecord\n step={step}\n state={states[step.id]}\n inputs={inputs}\n nameOf={nameOf}\n labels={l.record}\n testId={`workflow-thread-step-${step.id}-record`}\n />\n {(happened.length > 0 || !finished) && (\n <p className=\"px-1 text-xs font-medium text-muted-foreground\">\n {happened.length\n ? l.happened.replace('{count}', String(happened.length))\n : l.nothingYet}\n </p>\n )}\n {happened.map((item) => (\n <Entry key={item.id} item={item} />\n ))}\n {renderStepAction?.(step, phase)}\n {onSkip && ['ready', 'blocked', 'failed', 'waiting'].includes(phase) && (\n <button\n type=\"button\"\n onClick={() => onSkip(step.id)}\n className=\"w-full rounded-md px-1 py-1 text-left text-xs text-muted-foreground hover:bg-accent\"\n data-testid={`workflow-thread-step-${step.id}-skip`}\n >\n {l.skip}\n </button>\n )}\n </PopoverContent>\n </Popover>\n )\n return latestDoc ? (\n <span className=\"flex min-w-0 items-center\">\n {chip}\n <StepDocumentButton\n kind={kind}\n name={nameOfDoc?.(splitDocRef(latestDoc).id) ?? latestDoc}\n onOpen={() => onOpenDocument?.(latestDoc)}\n testId={`workflow-thread-step-${step.id}-open-document`}\n />\n </span>\n ) : (\n chip\n )\n }\n\n // The start pill: how the run began (a linked run's origin), and what happened before step one.\n const leading =\n startedBy || grouped.before.length ? (\n <div className=\"flex shrink-0 items-center gap-1\">\n {grouped.before.length ? (\n <EntriesChip\n kind=\"start\"\n icon={<Zap />}\n label={l.started}\n items={grouped.before}\n heading={l.beforeSteps}\n extra={startedBy && <WorkflowThreadStartedBy origin={startedBy} labels={labels} />}\n testId=\"workflow-thread-start\"\n />\n ) : (\n startedBy && <WorkflowThreadStartedBy origin={startedBy} labels={labels} />\n )}\n </div>\n ) : null\n const trailing =\n grouped.after.length || strays.length ? (\n <div className=\"flex shrink-0 items-center gap-1\">\n {grouped.after.length > 0 && (\n <EntriesChip\n kind=\"adhoc\"\n icon={<MessagesSquare />}\n label={l.after}\n items={grouped.after}\n heading={l.afterSteps}\n testId=\"workflow-thread-after\"\n />\n )}\n {strays.map((s) => (\n <SignalPill key={`${s.step}-${s.signal}`} signal={s} l={l} />\n ))}\n </div>\n ) : null\n\n // The start pill, the \"After\" chip and what the step in view waits on take room of their own.\n const at = steps.find((s) => s.id === (selected ?? activeStepId(stepLevels(steps), phaseOf)))\n // The step in view is as wide as its heading (kind · whom it waits for, small caps) when that is\n // longer than its name; each step someone acted in carries their faces.\n const headingPx = (step: WorkflowStep) =>\n `${l.kinds[stepKindOf(step)]} · ${waitingOf(step.id) ?? ''}`.length * 5.6 -\n step.title.length * 6.5\n const reserve = {\n always:\n (at ? Math.max(0, headingPx(at)) : 0) +\n steps.filter((s) => grouped.byStep[s.id]?.length).length * BEADS_PX +\n (onOpenDocument\n ? steps.filter((s) => stepDocuments(steps, states, s.id).length).length * DOC_BUTTON_PX\n : 0),\n leading: leading ? 150 : 0,\n trailing: trailing ? 120 : 0,\n }\n\n return (\n <div className={cn('min-w-0 flex-1', className)} data-testid=\"workflow-thread-strip\">\n <StepBarFrame\n levels={stepLevels(steps)}\n phaseOf={phaseOf}\n current={selected}\n onSelect={(id) => {\n setSelected(id)\n setOpen(id)\n }}\n renderStep={(step, _level, win) =>\n pill(step, step.id === win.levels[win.currentLevel]?.primary.id || step.id === selected)\n }\n renderAfter={(level) =>\n signals\n .filter((s) => level.steps.some((step) => step.id === s.step))\n .map((s) => <SignalPill key={`${s.step}-${s.signal}`} signal={s} l={l} />)\n }\n leading={leading}\n trailing={trailing}\n reservePx={reserve}\n maxSpan={maxSpan}\n icon={glyphOf}\n kindOf={stepKindOf}\n labels={{ waitingFor: l.waitingFor, ...barLabels }}\n tid={(suffix) => `workflow-thread-${suffix}`}\n />\n </div>\n )\n}\n","import { useMemo, type ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport { Eye, History } from 'lucide-react'\nimport { workflowRunStatusLabel } from './workflowRows'\nimport { GridView } from '../../files/GridView'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { ActionLink } from '../../components/ActionLink'\nimport { TabHeader } from '../../shell/TabHeader'\n\nexport interface TaskRunView {\n id: string\n resultId?: string\n /** running | success | failed (others get a neutral pill). */\n status: string\n /** Formatted finish (or start) time; empty for none. */\n when?: string\n error?: string | null\n /** The run's `conversation_ext_id`; enables Open. See `TaskRunsDialogProps.onOpenRun`. */\n conversationId?: string | null\n}\n\n/** Fixed strings of the run-history dialog. */\nexport interface TaskRunsDialogLabels {\n /** Dialog title; receives the task name. */\n title: (taskName: string | undefined) => string\n description: string\n loading: string\n empty: string\n open: string\n}\n\nexport const DEFAULT_TASK_RUNS_DIALOG_LABELS: TaskRunsDialogLabels = {\n title: (taskName) => `Run history — ${taskName}`,\n description: 'Every time this task ran. Open a run to read or watch it in its conversation.',\n loading: 'Loading runs…',\n empty: 'This task hasn’t run yet.',\n open: 'Open',\n}\n\nexport interface TaskRunsDialogTestIds {\n modal: string\n empty: string\n list: string\n row: string\n open: string\n}\n\nexport interface TaskRunsDialogProps {\n inline?: boolean\n hideHeader?: boolean\n renderErrorReport?: (run: TaskRunView) => ReactNode\n open: boolean\n onOpenChange: (open: boolean) => void\n taskName?: string\n /** A workflow may fail before it creates a run conversation. */\n error?: string | null\n runs: TaskRunView[]\n isLoading: boolean\n /**\n * Jump into a run's conversation (the dialog closes afterwards).\n *\n * Deep-link contract: `conversationId` is the run's `conversation_ext_id` (`con-xxxxxxxx`, from\n * `useTaskRuns` / `TaskRunResponse`). ARBI defines no URL for it: the HOST decides where a\n * conversation lives (`/chat/${id}`, a dock, a modal). The conversation belongs to the task's\n * workspace (`TaskResponse.workspace_ext_id`), so a host whose route needs the workspace open\n * must switch to it first, then navigate. A run with no `conversationId` gets no Open button.\n */\n onOpenResult?: (resultId: string) => void\n onOpenRun: (conversationId: string) => void\n /**\n * The same destination as an href, so Open is a real link (middle-click, copy address, new tab).\n * Return the URL for `run.conversationId`; `onOpenRun` still fires on a plain click for SPA\n * navigation. Leave unset for a button-only Open.\n */\n getRunHref?: (run: TaskRunView) => string | undefined\n testIds?: Partial<TaskRunsDialogTestIds>\n labels?: Partial<TaskRunsDialogLabels>\n}\n\nconst STATUS_STYLE: Record<string, string> = {\n running: 'bg-ai-soft text-ai-ink',\n success: 'bg-green-bg text-green-text',\n completed: 'bg-green-bg text-green-text',\n failed: 'bg-red-bg text-red-text',\n}\n\n/**\n * Persisted automation run history. The host supplies run records and navigation to thread or document results.\n */\nexport function TaskRunsDialog({\n inline = false,\n renderErrorReport,\n hideHeader = false,\n open,\n onOpenChange,\n taskName,\n runs,\n isLoading,\n onOpenRun,\n onOpenResult,\n getRunHref,\n testIds,\n labels,\n}: TaskRunsDialogProps) {\n const l = { ...DEFAULT_TASK_RUNS_DIALOG_LABELS, ...labels }\n const columns = useMemo<ColDef<TaskRunView>[]>(\n () => [\n {\n colId: 'status',\n field: 'status',\n headerName: 'Status',\n width: 160,\n minWidth: 140,\n cellRenderer: ({ data }: ICellRendererParams<TaskRunView>) =>\n data && (\n <span\n className={cn(\n 'rounded-full px-2 py-0.5 text-xs font-medium capitalize',\n STATUS_STYLE[data.status] ?? 'text-muted-foreground'\n )}\n >\n {workflowRunStatusLabel(data.status)}\n </span>\n ),\n },\n { colId: 'when', field: 'when', headerName: 'Run', flex: 2, minWidth: 240 },\n {\n colId: 'result',\n headerName: '',\n width: 280,\n minWidth: 220,\n sortable: false,\n cellRenderer: ({ data: run }: ICellRendererParams<TaskRunView>) => {\n if (!run) return null\n return (\n <div className=\"flex h-full items-center gap-2\">\n {run.error && renderErrorReport?.(run)}\n {(run.conversationId || (run.resultId && onOpenResult)) && (\n <Button asChild variant=\"ghost\" size=\"sm\" className=\"h-7 gap-1.5\">\n <ActionLink\n href={getRunHref?.(run)}\n onSelect={() => {\n if (run.conversationId) onOpenRun(run.conversationId)\n else if (run.resultId) onOpenResult?.(run.resultId)\n onOpenChange(false)\n }}\n data-testid={testIdOr(testIds?.open, { testId: 'task-run-open' })}\n >\n <Eye size={13} /> {l.open}\n </ActionLink>\n </Button>\n )}\n </div>\n )\n },\n },\n ],\n [onOpenRun, onOpenResult, getRunHref, onOpenChange, testIds?.open, l.open, renderErrorReport]\n )\n const content = (\n <>\n {hideHeader ? null : inline ? (\n <TabHeader\n tabs={[\n {\n id: 'history',\n label: l.title(taskName),\n count: runs.length,\n countIcon: <History size={14} />,\n presentation: 'count',\n onClose: () => onOpenChange(false),\n },\n ]}\n activeTabId=\"history\"\n onTabChange={() => {}}\n />\n ) : (\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\">\n <History size={16} /> {l.title(taskName)}\n </DialogTitle>\n <DialogDescription>{l.description}</DialogDescription>\n </DialogHeader>\n )}\n\n <div className=\"min-h-0 flex-1\">\n <GridView<TaskRunView>\n testId={testIdOr(testIds?.list, { testId: 'task-runs-list' })}\n gridId=\"workflow-runs\"\n items={runs}\n columnDefs={columns}\n getItemId={(run) => run.id}\n getRowTestId={() => testIdOr(testIds?.row, { testId: 'task-run-row' })}\n isLoading={isLoading}\n loadingMessage={l.loading}\n emptyState={{ title: l.empty }}\n height=\"100%\"\n />\n </div>\n </>\n )\n return inline ? (\n <section className=\"flex min-h-0 flex-1 flex-col\" data-testid=\"automation-history\">\n {content}\n </section>\n ) : (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"sheet\"\n className=\"flex h-[min(32rem,calc(100dvh-2rem))] min-h-0 max-w-3xl flex-col\"\n data-testid={testIdOr(testIds?.modal, { testId: 'task-runs-modal' })}\n >\n {content}\n </DialogContent>\n </Dialog>\n )\n}\n","import type { ReactNode } from 'react'\nimport type { AgentOption } from '../workflows/AgentSelect'\nimport type { SchemaFormLabels } from '../workflows/SchemaForm'\nimport type { WorkflowScopeSource } from '../workflows/WorkflowConfigDialog'\nimport type {\n WorkflowDefinition,\n WorkflowField,\n WorkflowInputs,\n WorkflowScope,\n} from '../workflows/types'\nimport { defaultInputs } from '../workflows/workflow'\nimport type { RecurrenceBuilderProps } from './RecurrenceBuilder'\n\n/**\n * When the assistant starts. `manual` means it only acts when asked (an @mention, or sending work back);\n * `now` starts it at once; `once`, `repeat`, `event` and `task` (after another task is signed off) start\n * it unattended.\n */\nexport type TaskWhen = 'manual' | 'now' | 'once' | 'repeat' | 'event' | 'task'\n\nexport type TaskAccessMode = 'ask_each_run' | 'standing'\n\n/**\n * Whether the assistant has been given work. Every task has an assistant; `agent` means it was configured\n * to prepare the task (it has an instruction and a start), `me` means it is on standby.\n */\nexport type TaskAssignee = 'me' | 'agent'\n\n/** Everything the composer collects. The host maps it onto its API. */\nexport interface TaskComposerValues {\n assignee: TaskAssignee\n workflowId: string\n inputs: WorkflowInputs\n when: TaskWhen\n /** datetime-local value (`once`). */\n runAt: string\n rrule: string\n timezone: string\n eventKind: string\n /** `task`: the id (`con-…`) of the task (conversation) this one waits on. */\n afterTaskId: string\n /** The task this is a sub-task of (`con-…`); `''` = a top-level task. */\n parentTaskId: string\n /** Shared with the workspace's members (like a document); off keeps it private to its owner. */\n shared: boolean\n /** What the task is, in the owner's words. */\n description: string\n /** datetime-local value; empty = no due date. */\n dueAt: string\n /** `''` = the user's own assistant. */\n agentId: string\n /** The task's title. */\n name: string\n /** The owner is always told when the assistant finishes; kept so hosts can map it. */\n notifyOnComplete: boolean\n /** Only asked for tasks the assistant starts unattended. */\n access: TaskAccessMode\n /** A workflow's saved equality filters on its event; carried through an edit unchanged (no control). */\n eventFilter?: Record<string, string | number | boolean> | null\n}\n\nexport interface TaskComposerLabels {\n titleNew: string\n titleEdit: string\n description: string\n titleNewWorkflow: string\n titleRunTemplate: (name: string) => string\n titleEditWorkflow: string\n descriptionWorkflow: string\n workflowNamePlaceholder: string\n createWorkflow: string\n /** The workflow dialog's three required parts, in order, and what is missing from each. */\n whenHeading: string\n whoHeading: string\n /** \"Run as\": the person themself (the default for Run now) or an agent (required for a scheduled run). */\n runAs: string\n runLater: string\n addFilesReason: string\n needDocument: string\n addPlan: string\n hidePlan: string\n /** The toggle when the workflow already has a plan. */\n showPlan: string\n runAsMe: string\n runAsAgentHint: string\n needAgent: string\n runNow: string\n saveWorkflow: string\n needWhat: string\n needRunAt: string\n needRrule: string\n needEvent: string\n needAfterTask: string\n /** The \"More options\" disclosure (name, details, visibility, plan, unattended access). */\n moreOptions: string\n fewerOptions: string\n nameHint: string\n titleLabel: string\n titlePlaceholder: string\n descriptionLabel: string\n descriptionPlaceholder: string\n due: string\n dueNone: string\n dueClear: string\n parentTask: string\n parentTaskNone: string\n visibility: string\n visibilityWorkspace: string\n visibilityPrivate: string\n assistant: string\n assistantStandby: string\n assistantPreparing: (when: string) => string\n configure: string\n configureClose: string\n what: string\n template: string\n whatPlaceholder: string\n plan: string\n planHint: string\n start: string\n whenOptions: Record<TaskWhen, string>\n runAt: string\n /** Shown when the start time is already past: the server refuses it. */\n runAtPast: string\n event: string\n eventPlaceholder: string\n eventHint: ReactNode\n afterTask: string\n afterTaskPlaceholder: string\n which: string\n myAssistant: string\n permission: string\n /** The disclosure that holds who runs it, access, name, owner and visibility. */\n runOptions: string\n /** Its summary line: \"Runs as Assistant · ask me each time\". */\n runOptionsSummary: (agent: string, access: string) => string\n permissionHint: string\n accessOptions: Record<TaskAccessMode, { label: string; hint: string }>\n timezone: string\n search: string\n empty: string\n cancel: string\n addTask: string\n addAndStart: string\n addAndSchedule: string\n save: string\n saving: string\n}\n\nexport const DEFAULT_TASK_COMPOSER_LABELS: TaskComposerLabels = {\n titleNew: 'New task',\n titleEdit: 'Edit task',\n description: 'Add a task. Every task has an assistant; configure it to have it prepare the work.',\n titleNewWorkflow: 'New workflow',\n /** The title while a template is picked: \"Run Summarise\". */\n titleRunTemplate: (name: string) => `Run ${name}`,\n titleEditWorkflow: 'Edit workflow',\n descriptionWorkflow:\n 'Run it now, or choose Run later to have it start on a date, repeat, or follow an event.',\n workflowNamePlaceholder: 'Name this workflow',\n createWorkflow: 'Create workflow',\n whenHeading: 'When should it run?',\n whoHeading: 'Which agent runs it?',\n runAs: 'Run as',\n runLater: 'Run later',\n addFilesReason: 'This needs files to work on. Add some, then run it.',\n needDocument: 'Pick or add a document',\n addPlan: 'Add a plan',\n hidePlan: 'Hide the plan',\n showPlan: 'Show the plan',\n runAsMe: 'Me',\n runAsAgentHint:\n 'Nobody is there when a saved workflow runs, so an agent runs it. Your Assistant is the default.',\n needAgent: 'Choose the agent that runs it.',\n runNow: 'Run now',\n saveWorkflow: 'Save workflow',\n needWhat: 'Say what it should do: choose a template and fill it in, or write an instruction.',\n needRunAt: 'Pick the date and time it should run.',\n needRrule: 'Choose how often it repeats.',\n needEvent: 'Say which event starts it.',\n needAfterTask: 'Choose the task it follows.',\n moreOptions: 'More options',\n fewerOptions: 'Fewer options',\n nameHint: 'Leave blank to use the name shown.',\n titleLabel: 'Title',\n titlePlaceholder: 'What needs doing?',\n descriptionLabel: 'Description',\n descriptionPlaceholder: 'Add details (optional)',\n due: 'Due',\n dueNone: 'No date',\n dueClear: 'Clear date',\n parentTask: 'Part of',\n parentTaskNone: 'Nothing (top-level)',\n visibility: 'Visibility',\n visibilityWorkspace: 'Workspace',\n visibilityPrivate: 'Only me',\n assistant: 'Task Assistant',\n assistantStandby: 'On standby. It replies when you @mention it in the task’s thread.',\n assistantPreparing: (when) => `Will work on this task ${when}. You mark it done when it is.`,\n configure: 'Configure',\n configureClose: 'Done',\n what: 'What should it do?',\n template: 'Skill',\n whatPlaceholder: 'Choose…',\n plan: 'Plan',\n planHint: 'The checklist it is held to. You see how it did when it finishes.',\n start: 'Start',\n whenOptions: {\n manual: 'When asked',\n now: 'Now',\n once: 'On a date',\n repeat: 'Repeat',\n event: 'When something happens',\n task: 'After another task',\n },\n runAt: 'Start at',\n runAtPast: 'Pick a time in the future.',\n event: 'Event',\n eventPlaceholder: 'mention',\n eventHint: 'It starts whenever this kind of notification reaches you.',\n afterTask: 'After',\n afterTaskPlaceholder: 'Choose a task…',\n which: 'Assistant',\n myAssistant: 'Mine',\n permission: 'Access',\n runOptions: 'Run options',\n runOptionsSummary: (agent, access) => `Runs as ${agent} · ${access.toLowerCase()}`,\n permissionHint:\n 'It starts while you are away, so it needs your permission to use this workspace.',\n accessOptions: {\n ask_each_run: {\n label: 'Ask me each time',\n hint: 'When it is due, it waits until you allow it.',\n },\n standing: {\n label: 'Always allowed',\n hint: 'It joins the workspace and can work while you are away. Only for assistants you trust.',\n },\n },\n timezone: 'Timezone',\n search: 'Search…',\n empty: 'No match.',\n cancel: 'Cancel',\n addTask: 'Add task',\n addAndStart: 'Start now',\n addAndSchedule: 'Schedule',\n save: 'Save changes',\n saving: 'Saving…',\n}\n\nexport interface TaskOption {\n id: string\n name: string\n}\n\nexport interface TaskComposerProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /**\n * `work` (default) adds a task: \"Now\" starts it at once and any other start saves a workflow.\n * `workflow` is the workflow dialog itself (new or edit): a trigger and an action are required, and\n * the task-only properties (due date, parent) are hidden.\n */\n kind?: 'work' | 'workflow'\n /** Saving a reusable workflow; on-demand creates a recipe rather than starting work. */\n saveOnly?: boolean\n /** Hide the \"Run later\" button (scheduling is off): a workflow can only be started now. */\n hideRunLater?: boolean\n /**\n * Editing an existing task, or a workflow. A task keeps the start and assistant it was created with;\n * a workflow can change both.\n */\n isEdit?: boolean\n /** Workflows the assistant can run. The host includes its \"my own instruction\" entry. */\n workflows: WorkflowDefinition[]\n agents: AgentOption[]\n /** Tasks a new task can be part of, or wait on (`when: 'task'`) — conversations with a status. */\n tasks?: TaskOption[]\n /**\n * The owner's Assistant (an agent id). A scheduled workflow needs an agent, so switching away from\n * \"Now\" selects this one when \"Run as\" is still the person themself.\n */\n defaultAgentId?: string\n /** Controlled values; omit to let the composer hold them (seeded by `initialValues`). */\n values?: TaskComposerValues\n initialValues?: Partial<TaskComposerValues>\n onValuesChange?: (values: TaskComposerValues) => void\n timezones?: string[]\n /** Supported event triggers, supplied by the host instead of asking users for backend codes. */\n eventOptions?: readonly { id: string; label: string }[]\n eventWorkflowOptions?: readonly { id: string; label: string }[]\n /** The plan editor, shown inline when the assistant is configured. Omit when not applicable. */\n goal?: ReactNode | ((values: TaskComposerValues) => ReactNode)\n /** What \"always allowed\" means for this assistant (e.g. the workspaces it will hold standing access to). */\n standingAccess?: ReactNode | ((values: TaskComposerValues) => ReactNode)\n isPending?: boolean\n /** A plan is being drafted: saving waits for it, or the plan would be dropped. */\n planDrafting?: boolean\n /** The plan already stored (an edit): the toggle offers to show it rather than to add one. */\n hasPlan?: boolean\n onSubmit: (values: TaskComposerValues, options?: { runOnce?: boolean }) => void\n /**\n * The workspace's files behind `scope` fields (the folder/label picker) and a `documents` field (an\n * explicit pick). The host owns the file data; without these those fields render nothing. A scope pick\n * is resolved to explicit file ids on submit (`scopeSource.resolveDocuments`).\n */\n scopeSource?: WorkflowScopeSource\n renderDocuments?: (\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode\n /** The host's \"Add files\" control, offered instead of the form when a template needs files and there are none. */\n addFilesAction?: ReactNode\n /** Files dropped on the \"add files\" state: the host uploads them. */\n onDropFiles?: (files: File[]) => void\n /** The assistant's workflow input forms: `renderIcon` maps a field option's icon key. */\n renderIcon?: (key: string) => ReactNode\n labels?: Partial<TaskComposerLabels>\n formLabels?: Partial<SchemaFormLabels>\n recurrence?: Pick<RecurrenceBuilderProps, 'testIds' | 'labels'>\n testId?: string\n}\n\nexport function defaultTaskComposerValues(\n workflows: WorkflowDefinition[],\n initial?: Partial<TaskComposerValues>\n): TaskComposerValues {\n const workflowId = initial?.workflowId ?? workflows[0]?.id ?? ''\n const workflow = workflows.find((w) => w.id === workflowId)\n return {\n assignee: 'me',\n workflowId,\n inputs: workflow ? { ...defaultInputs(workflow), ...initial?.inputs } : { ...initial?.inputs },\n when: 'manual',\n runAt: '',\n rrule: '',\n timezone: 'UTC',\n eventKind: 'mention',\n afterTaskId: '',\n parentTaskId: '',\n shared: false,\n description: '',\n dueAt: '',\n agentId: '',\n name: '',\n notifyOnComplete: true,\n access: 'ask_each_run',\n ...initial,\n }\n}\n","import { useEffect, useMemo, useState } from 'react'\nimport { Bot, CornerDownRight, KeyRound, Loader2, Play, ChevronDown, Zap, X } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogClose,\n DialogDescription,\n DialogTitle,\n Input,\n Label,\n Textarea,\n VisibilityToggle,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { TabHeader } from '../../shell/TabHeader'\nimport { useControllableState } from '../../lib/useControllableState'\nimport { AddFilesFirst } from '../../home/AddFilesFirst'\nimport { SchemaForm } from '../workflows/SchemaForm'\nimport { defaultScopeRenderer, resolveScopeInputs } from '../workflows/scopeRender'\nimport type { WorkflowInputValue } from '../workflows/types'\nimport { defaultInputs, validateInputs } from '../workflows/workflow'\nimport { PillSelect, type PillOption } from './PillSelect'\nimport { RecurrenceBuilder } from './RecurrenceBuilder'\nimport {\n DEFAULT_TASK_COMPOSER_LABELS,\n defaultTaskComposerValues,\n type TaskAccessMode,\n type TaskComposerLabels,\n type TaskComposerProps,\n type TaskComposerValues,\n type TaskWhen,\n} from './taskComposerTypes'\nimport { deriveWorkflowName } from './taskRequest'\n\n/** A workflow starts at a time, on a repeat, on an event or after a task: never \"now\". */\nconst WHEN_ORDER: TaskWhen[] = ['now', 'once', 'repeat', 'event', 'task']\nconst GLYPH = 'size-3.5 shrink-0'\n\n/** What is still missing from the trigger, as the label key that says so; null when it is complete. */\nfunction missingWhen(values: TaskComposerValues, runAtPast: boolean) {\n if (values.when === 'now' || values.when === 'manual') return null\n if (values.when === 'once') return !values.runAt || runAtPast ? 'needRunAt' : null\n if (values.when === 'repeat') return values.rrule.trim() ? null : 'needRrule'\n if (values.when === 'event') return values.eventKind.trim() ? null : 'needEvent'\n if (values.when === 'task') return values.afterTaskId ? null : 'needAfterTask'\n return null\n}\n\n/**\n * The workflow dialog, where a skill is run: what it does, when it runs (Now by default, or on a date, a\n * repeat, an event or after a task) and who runs it (the person, or an agent), up front and in that\n * order, each saying in plain words what is missing. \"Now\" runs it at once and saves nothing; every\n * other start saves a workflow, which needs an agent because nobody is present when it fires. The name, details, visibility, plan and unattended\n * access are optional and sit behind \"More options\". A blank name is derived from the template or the\n * instruction and shown as the placeholder, so the Create button needs only the three required parts.\n */\nexport function WorkflowComposer({\n open,\n onOpenChange,\n isEdit = false,\n saveOnly = false,\n hideRunLater = false,\n workflows,\n agents,\n tasks = [],\n values: valuesProp,\n initialValues,\n onValuesChange,\n timezones = [],\n eventOptions,\n eventWorkflowOptions,\n goal,\n standingAccess,\n scopeSource,\n renderDocuments,\n addFilesAction,\n onDropFiles,\n defaultAgentId,\n isPending,\n planDrafting = false,\n hasPlan = false,\n onSubmit,\n renderIcon,\n labels,\n formLabels,\n recurrence,\n testId,\n}: TaskComposerProps) {\n const l: TaskComposerLabels = {\n ...DEFAULT_TASK_COMPOSER_LABELS,\n ...labels,\n whenOptions: {\n ...DEFAULT_TASK_COMPOSER_LABELS.whenOptions,\n ...labels?.whenOptions,\n ...(saveOnly ? { now: 'When needed' } : {}),\n },\n accessOptions: { ...DEFAULT_TASK_COMPOSER_LABELS.accessOptions, ...labels?.accessOptions },\n }\n const seed = useMemo(\n () => defaultTaskComposerValues(workflows, initialValues),\n // Seeded once per open; the host re-keys the composer for a different workflow.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [workflows, open]\n )\n const [values, setValues] = useControllableState<TaskComposerValues>(\n valuesProp,\n seed,\n onValuesChange\n )\n const [runOnce, setRunOnce] = useState(false)\n const [automationWhen, setAutomationWhen] = useState(seed.when)\n const [planOpen, setPlanOpen] = useState(false)\n const [moreOpen, setMoreOpen] = useState(false)\n // The agent was filled in for a scheduled start (not chosen): said inline, and undone going back to Now.\n const [agentAutoSet, setAgentAutoSet] = useState(false)\n // Each open starts from the seed again (uncontrolled only), with the extras folded away.\n useEffect(() => {\n if (open) {\n if (valuesProp === undefined) setValues(seed)\n setRunOnce(false)\n setPlanOpen(false)\n setAgentAutoSet(false)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const id = testIdOr(testId, { testId: 'task-composer' })\n const set = <K extends keyof TaskComposerValues>(key: K, value: TaskComposerValues[K]) =>\n setValues({ ...values, [key]: value })\n\n const workflow = workflows.find((w) => w.id === values.workflowId)\n // An unattended run has no one to scope files for, so scope fields are not asked.\n const fields = workflow?.inputs ?? []\n // The template needs files and the workspace has none: offer to add some instead of an unusable form.\n // A template with its own file pick shows an empty state with Add files in that field; one that only\n // takes a scope has nothing to show without files, so the whole form gives way to the offer.\n const noFiles = Boolean(\n workflow?.requiresFiles &&\n scopeSource &&\n scopeSource.totalCount === 0 &&\n addFilesAction &&\n !fields.some((f) => f.type === 'documents')\n )\n // A required file pick that is still empty says so in plain words.\n const missingDocument = Boolean(\n workflow &&\n fields.some((f) => {\n if (f.type !== 'documents' || !f.required) return false\n const v = values.inputs[f.name]\n const docs =\n v && typeof v === 'object' ? (v as { documents?: string[] }).documents : undefined\n return !docs?.length\n })\n )\n const whatMissing =\n !workflow ||\n Object.keys(validateInputs({ ...workflow, inputs: fields }, values.inputs)).length > 0\n\n // A start time already past is refused by the server; an unchanged one (editing a spent workflow) is not ours to block.\n const runAtPast =\n values.when === 'once' &&\n values.runAt !== '' &&\n values.runAt !== initialValues?.runAt &&\n new Date(values.runAt).getTime() <= Date.now()\n const whenMissing = missingWhen(values, runAtPast)\n // \"Run later\": the schedule, the agent and the access are asked. A saved workflow is always later.\n const scheduled = values.when !== 'now' && values.when !== 'manual'\n const agentMissing = scheduled && values.agentId === ''\n const canSubmit =\n !whatMissing && !noFiles && whenMissing === null && !agentMissing && !isPending && !planDrafting\n\n const derivedName = workflow ? deriveWorkflowName(workflow, values.inputs) : ''\n const pickWorkflow = (next: string) => {\n const def = workflows.find((w) => w.id === next)\n setValues({\n ...values,\n workflowId: next,\n inputs: def ? defaultInputs(def) : {},\n ...(def?.documentAction ? { access: 'standing' as const } : {}),\n })\n }\n\n const pickWhen = (next: TaskWhen) => {\n const goesScheduled = next !== 'now' && next !== 'manual'\n if (goesScheduled && values.agentId === '' && defaultAgentId) {\n setAgentAutoSet(true)\n setValues({ ...values, when: next, agentId: defaultAgentId })\n } else if (!goesScheduled && agentAutoSet) {\n setAgentAutoSet(false)\n setValues({ ...values, when: next, agentId: '' })\n } else {\n setValues({ ...values, when: next })\n }\n }\n // The assistants can arrive after \"Run later\" was picked: fill the default in then, not only on the pick.\n useEffect(() => {\n if (scheduled && values.agentId === '' && defaultAgentId) {\n setAgentAutoSet(true)\n setValues({ ...values, agentId: defaultAgentId })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [scheduled, defaultAgentId, values.agentId])\n const pickAgent = (agentId: string) => {\n setAgentAutoSet(false)\n set('agentId', agentId)\n }\n\n const submit = () => {\n const submitted: TaskComposerValues = {\n ...values,\n // A scope pick is bound to explicit file ids before anything is sent.\n inputs:\n workflow && !workflow.documentAction\n ? resolveScopeInputs(workflow, values.inputs, scopeSource)\n : values.inputs,\n assignee: 'agent',\n notifyOnComplete: true,\n name: values.name.trim(),\n }\n if (runOnce) onSubmit(submitted, { runOnce: true })\n else onSubmit(submitted)\n }\n\n const pillLabels = { search: l.search, empty: l.empty }\n const taskOptions: PillOption[] = tasks.map((t) => ({\n id: t.id,\n label: t.name,\n icon: <CornerDownRight className={GLYPH} aria-hidden />,\n }))\n // \"Run now\" is the footer's primary action, so the start list holds only the later starts.\n const whenOptions: PillOption[] = [\n { id: 'manual', label: 'Start now' },\n { id: 'schedule', label: 'Schedule' },\n { id: 'event', label: 'Notification' },\n ]\n const assistantOptions: PillOption[] = agents.map((a) => ({ id: a.id, label: a.label }))\n // Shared workflows may reference an agent outside the viewer's own agent list.\n if (values.agentId && !assistantOptions.some((a) => a.id === values.agentId)) {\n assistantOptions.push({ id: values.agentId, label: 'Assigned agent' })\n }\n const goalNode = typeof goal === 'function' ? goal(values) : goal\n // A template picked from the list names the dialog (\"Run Summarise\"); the own-instruction entry does not.\n const pickedTemplate = workflows.find((w) => w.id === values.workflowId && !w.generic)\n const hint = (key: 'needWhat' | 'needRunAt' | 'needRrule' | 'needEvent' | 'needAfterTask') =>\n l[key]\n\n return (\n <Dialog modal={false} open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"right\"\n hideCloseButton\n onInteractOutside={(event) => event.preventDefault()}\n className=\"flex flex-col gap-0 overflow-hidden p-0 shadow-lg\"\n data-testid={id}\n >\n <DialogTitle className=\"sr-only\">Automation settings</DialogTitle>\n <DialogDescription className=\"sr-only\">{l.descriptionWorkflow}</DialogDescription>\n <TabHeader\n tabs={[\n {\n id: 'automation-setup',\n label: isEdit\n ? l.titleEditWorkflow\n : pickedTemplate\n ? l.titleRunTemplate(pickedTemplate.title)\n : l.titleNewWorkflow,\n presentation: 'count',\n },\n ...((saveOnly || isEdit) && !workflow?.documentAction\n ? [{ id: 'start-task', label: 'Start task' }]\n : []),\n ]}\n activeTabId={runOnce ? 'start-task' : 'automation-setup'}\n onTabChange={(tab) => {\n if (tab === 'start-task' && !runOnce) {\n setAutomationWhen(values.when)\n set('when', 'now')\n setRunOnce(true)\n } else if (tab === 'automation-setup' && runOnce) {\n set('when', automationWhen)\n setRunOnce(false)\n }\n }}\n rightContent={\n <DialogClose asChild>\n <Button variant=\"ghost\" size=\"icon\" aria-label=\"Close\">\n <X className=\"size-4\" />\n </Button>\n </DialogClose>\n }\n />\n\n <form\n className=\"flex min-h-0 flex-1 flex-col\"\n onSubmit={(event) => {\n event.preventDefault()\n if (canSubmit) submit()\n }}\n >\n <div className=\"flex min-h-0 flex-1 flex-col gap-5 overflow-y-auto px-6 pb-4\">\n {/* What it does: the template and its form (all there is until Run later) */}\n <section className=\"flex flex-col gap-2\" data-testid={`${id}-what`}>\n <h3 className=\"text-sm font-medium\">{l.what}</h3>\n <PillSelect\n icon={<Bot className={GLYPH} aria-hidden />}\n prefix={l.template}\n value={values.workflowId}\n options={workflows.map((w) => ({ id: w.id, label: w.title }))}\n onChange={pickWorkflow}\n labels={pillLabels}\n testId={`${id}-workflow`}\n className=\"self-start\"\n />\n {noFiles && (\n <div\n onDragOver={(e) => e.preventDefault()}\n onDrop={(e) => {\n e.preventDefault()\n const files = Array.from(e.dataTransfer?.files ?? [])\n if (files.length) onDropFiles?.(files)\n }}\n data-testid={`${id}-dropzone`}\n >\n <AddFilesFirst\n reason={l.addFilesReason}\n action={addFilesAction}\n testId={`${id}-empty-state`}\n />\n </div>\n )}\n {!noFiles && workflow && fields.length > 0 && (\n <SchemaForm\n fields={fields}\n values={values.inputs}\n onChange={(name: string, value: WorkflowInputValue) =>\n set('inputs', { ...values.inputs, [name]: value })\n }\n renderScope={defaultScopeRenderer(scopeSource)}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n labels={formLabels}\n testIdPrefix={`${id}-field`}\n />\n )}\n {/* A template names its own required fields; only a free instruction needs a hint. */}\n {missingDocument && (\n <p className=\"text-xs text-muted-foreground\" data-testid={`${id}-document-hint`}>\n {l.needDocument}\n </p>\n )}\n {whatMissing && workflow?.inputs.some((i) => i.name === 'instruction') && (\n <p className=\"text-xs text-muted-foreground\" data-testid={`${id}-what-hint`}>\n {hint('needWhat')}\n </p>\n )}\n </section>\n\n {/* A plan rides with the run, now or saved with the workflow (it grades each scheduled run): a quiet,\n collapsed extra */}\n {goalNode != null && (\n <section className=\"flex flex-col gap-2\" data-testid={`${id}-assistant`}>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1 self-start px-2 pointer-coarse:h-11\"\n onClick={() => setPlanOpen((v) => !v)}\n aria-expanded={planOpen}\n data-testid={`${id}-plan-toggle`}\n >\n {planOpen ? l.hidePlan : hasPlan ? l.showPlan : l.addPlan}\n <ChevronDown\n className={cn('size-3.5 transition-transform', planOpen && 'rotate-180')}\n aria-hidden\n />\n </Button>\n {planOpen && (\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-plan`}>\n <p className=\"text-xs text-muted-foreground\">{l.planHint}</p>\n {goalNode}\n </div>\n )}\n </section>\n )}\n\n {!runOnce && (scheduled || isEdit) && (\n <>\n {/* When it runs */}\n <section className=\"flex flex-col gap-2\" data-testid={`${id}-when-section`}>\n <h3 className=\"text-sm font-medium\">{l.whenHeading}</h3>\n <PillSelect\n icon={<Play className={GLYPH} aria-hidden />}\n prefix={l.start}\n value={\n values.when === 'once' || values.when === 'repeat'\n ? 'schedule'\n : values.when === 'task'\n ? 'event'\n : values.when === 'now'\n ? 'manual'\n : values.when\n }\n options={whenOptions}\n onChange={(v) => pickWhen(v === 'schedule' ? 'once' : (v as TaskWhen))}\n labels={pillLabels}\n testId={`${id}-when`}\n className=\"self-start\"\n />\n {(values.when === 'once' || values.when === 'repeat') && (\n <PillSelect\n icon={<Play className={GLYPH} aria-hidden />}\n prefix=\"Schedule\"\n value={values.when}\n options={[\n { id: 'once', label: 'Once' },\n { id: 'repeat', label: 'Repeat' },\n ]}\n onChange={(value) => pickWhen(value as TaskWhen)}\n labels={pillLabels}\n testId={`${id}-schedule-mode`}\n className=\"self-start\"\n />\n )}\n {values.when === 'once' && (\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"task-composer-runat\" className=\"sr-only\">\n {l.runAt}\n </Label>\n <Input\n id=\"task-composer-runat\"\n type=\"datetime-local\"\n value={values.runAt}\n onChange={(e) => set('runAt', e.target.value)}\n className=\"max-w-xs\"\n aria-invalid={runAtPast || undefined}\n data-testid={`${id}-run-at`}\n />\n {runAtPast && (\n <p className=\"text-xs text-destructive\" data-testid={`${id}-run-at-past`}>\n {l.runAtPast}\n </p>\n )}\n </div>\n )}\n {values.when === 'repeat' && (\n <>\n <RecurrenceBuilder\n rrule={values.rrule}\n onChange={(r) => set('rrule', r)}\n {...recurrence}\n />\n {timezones.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <Label htmlFor=\"task-composer-timezone\" className=\"text-xs\">\n {l.timezone}\n </Label>\n <Input\n id=\"task-composer-timezone\"\n list=\"task-composer-timezones\"\n value={values.timezone}\n onChange={(e) => set('timezone', e.target.value)}\n className=\"max-w-xs\"\n data-testid={`${id}-timezone`}\n />\n <datalist id=\"task-composer-timezones\">\n {timezones.map((tz) => (\n <option key={tz} value={tz} />\n ))}\n </datalist>\n </div>\n )}\n </>\n )}\n {values.when === 'event' && (\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"task-composer-event\" className=\"sr-only\">\n {l.event}\n </Label>\n {eventOptions ? (\n <PillSelect\n icon={<Zap className={GLYPH} aria-hidden />}\n prefix={l.event}\n value={values.eventKind}\n options={\n eventOptions.some((option) => option.id === values.eventKind) ||\n !values.eventKind\n ? [...eventOptions]\n : [\n ...eventOptions,\n {\n id: values.eventKind,\n label: values.eventKind.replaceAll('_', ' '),\n },\n ]\n }\n onChange={(event) => set('eventKind', event)}\n labels={pillLabels}\n testId={`${id}-event`}\n className=\"self-start\"\n />\n ) : (\n <Input\n id=\"task-composer-event\"\n value={values.eventKind}\n placeholder={l.eventPlaceholder}\n onChange={(e) => set('eventKind', e.target.value)}\n className=\"max-w-xs\"\n data-testid={`${id}-event`}\n />\n )}\n <p className=\"text-xs text-muted-foreground\">{l.eventHint}</p>\n </div>\n )}\n {values.when === 'event' &&\n values.eventKind === 'workflow_completed' &&\n eventWorkflowOptions && (\n <PillSelect\n icon={<Zap className={GLYPH} aria-hidden />}\n prefix=\"Automation\"\n value={\n typeof values.eventFilter?.workflow_ext_id === 'string'\n ? values.eventFilter.workflow_ext_id\n : ''\n }\n options={[{ id: '', label: 'Any automation' }, ...eventWorkflowOptions]}\n onChange={(id) =>\n set(\n 'eventFilter',\n id ? { ...values.eventFilter, workflow_ext_id: id } : null\n )\n }\n labels={pillLabels}\n testId={`${id}-event-workflow`}\n className=\"self-start\"\n />\n )}\n {values.when === 'task' && (\n <PillSelect\n icon={<CornerDownRight className={GLYPH} aria-hidden />}\n prefix={l.afterTask}\n value={values.afterTaskId}\n options={taskOptions}\n onChange={(v) => set('afterTaskId', v)}\n searchable\n labels={pillLabels}\n testId={`${id}-after-task`}\n className=\"self-start\"\n />\n )}\n {whenMissing && !runAtPast && (\n <p className=\"text-xs text-muted-foreground\" data-testid={`${id}-when-hint`}>\n {hint(whenMissing)}\n </p>\n )}\n </section>\n\n {/* Who runs it, the access it gets, its name and owner: sensible defaults, so folded away. */}\n <section className=\"flex flex-col gap-3\" data-testid={`${id}-more`}>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-auto min-h-8 flex-col items-start gap-0.5 self-start px-2 py-1 text-left pointer-coarse:min-h-11\"\n onClick={() => setMoreOpen((v) => !v)}\n aria-expanded={moreOpen || agentMissing}\n data-testid={`${id}-more-toggle`}\n >\n <span className=\"flex items-center gap-1\">\n {l.runOptions}\n <ChevronDown\n className={cn(\n 'size-3.5 transition-transform',\n (moreOpen || agentMissing) && 'rotate-180'\n )}\n aria-hidden\n />\n </span>\n <span className=\"text-xs font-normal text-muted-foreground\">\n {l.runOptionsSummary(\n assistantOptions.find((a) => a.id === values.agentId)?.label ?? l.runAsMe,\n l.accessOptions[values.access].label\n )}\n </span>\n </Button>\n {(moreOpen || agentMissing) && (\n <div className=\"flex flex-col gap-5\" data-testid={`${id}-more-body`}>\n {/* Which agent runs it: nobody is present when it fires */}\n <section className=\"flex flex-col gap-2\" data-testid={`${id}-who`}>\n <h3 className=\"text-sm font-medium\">{l.whoHeading}</h3>\n <PillSelect\n icon={<Bot className={GLYPH} aria-hidden />}\n prefix={l.runAs}\n value={values.agentId}\n options={assistantOptions}\n onChange={pickAgent}\n searchable={assistantOptions.length > 6}\n labels={pillLabels}\n testId={`${id}-agent`}\n className=\"self-start\"\n />\n <p\n className=\"text-xs text-muted-foreground\"\n data-testid={`${id}-agent-note`}\n >\n {l.runAsAgentHint}\n </p>\n {agentMissing && (\n <p\n className=\"text-xs text-muted-foreground\"\n data-testid={`${id}-agent-hint`}\n >\n {l.needAgent}\n </p>\n )}\n </section>\n\n {/* The access it gets while nobody is there */}\n <section className=\"flex flex-col gap-2\" data-testid={`${id}-config`}>\n <PillSelect\n icon={<KeyRound className={GLYPH} aria-hidden />}\n prefix={l.permission}\n value={values.access}\n options={(Object.keys(l.accessOptions) as TaskAccessMode[]).map(\n (mode) => ({\n id: mode,\n label: l.accessOptions[mode].label,\n })\n )}\n onChange={(v) => set('access', v as TaskAccessMode)}\n labels={pillLabels}\n testId={`${id}-access`}\n className=\"self-start\"\n />\n <div\n className=\"flex flex-col gap-1 rounded-md bg-muted p-2\"\n data-testid={`${id}-access-block`}\n >\n <p className=\"text-xs text-muted-foreground\">\n {l.permissionHint} {l.accessOptions[values.access].hint}\n </p>\n {values.access === 'standing' &&\n (typeof standingAccess === 'function'\n ? standingAccess(values)\n : standingAccess)}\n </div>\n </section>\n\n {/* Optional extras */}\n <section className=\"flex flex-col gap-3\" data-testid={`${id}-extras`}>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"task-composer-title\" className=\"sr-only\">\n {l.titleLabel}\n </Label>\n <Input\n id=\"task-composer-title\"\n value={values.name}\n placeholder={derivedName || l.workflowNamePlaceholder}\n onChange={(e) => set('name', e.target.value)}\n className=\"h-10 text-base font-medium\"\n data-testid={`${id}-title`}\n />\n <p className=\"text-xs text-muted-foreground\">{l.nameHint}</p>\n <Label htmlFor=\"task-composer-description\" className=\"sr-only\">\n {l.descriptionLabel}\n </Label>\n <Textarea\n id=\"task-composer-description\"\n value={values.description}\n placeholder={l.descriptionPlaceholder}\n rows={2}\n onChange={(e) => set('description', e.target.value)}\n data-testid={`${id}-description`}\n />\n </div>\n <div\n className=\"flex flex-wrap items-center gap-2\"\n data-testid={`${id}-properties`}\n >\n <VisibilityToggle\n items={{ shared: values.shared }}\n onToggle={(share) => set('shared', share)}\n label={l.visibility}\n data-testid={`${id}-visibility`}\n />\n </div>\n </section>\n </div>\n )}\n </section>\n </>\n )}\n </div>\n\n <div className=\"flex flex-col-reverse gap-2 border-t border-border px-6 py-3 sm:flex-row sm:justify-end\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n data-testid={`${id}-cancel`}\n className=\"pointer-coarse:min-h-11\"\n >\n {l.cancel}\n </Button>\n {!isEdit && !saveOnly && !hideRunLater && (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => (scheduled ? pickWhen('now') : pickWhen('once'))}\n data-testid={scheduled ? `${id}-run-now-back` : `${id}-run-later`}\n className=\"pointer-coarse:min-h-11\"\n >\n {scheduled ? l.runNow : l.runLater}\n </Button>\n )}\n <Button\n type=\"submit\"\n disabled={!canSubmit}\n data-testid={`${id}-submit`}\n className=\"gap-1.5 pointer-coarse:min-h-11\"\n >\n {isPending && <Loader2 className=\"size-4 animate-spin\" />}\n {isPending\n ? l.saving\n : runOnce\n ? 'Start now'\n : isEdit\n ? l.save\n : saveOnly || scheduled\n ? l.saveWorkflow\n : l.runNow}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","import { DueDateMenu } from './DueDateMenu'\nimport { useEffect, useMemo, useState, type ReactNode } from 'react'\nimport {\n Bot,\n CalendarClock,\n ChevronDown,\n CornerDownRight,\n KeyRound,\n Loader2,\n Play,\n X,\n} from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n EntityPill,\n Input,\n Label,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Textarea,\n VisibilityToggle,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { ModalHeader } from '../../settings/ModalScaffold'\nimport { useControllableState } from '../../lib/useControllableState'\nimport type { AgentOption } from '../workflows/AgentSelect'\nimport { SchemaForm, type SchemaFormLabels } from '../workflows/SchemaForm'\nimport { defaultScopeRenderer, resolveScopeInputs } from '../workflows/scopeRender'\nimport type { WorkflowDefinition, WorkflowInputs, WorkflowInputValue } from '../workflows/types'\nimport { defaultInputs, validateInputs } from '../workflows/workflow'\nimport { PillSelect, type PillOption } from './PillSelect'\nimport { WorkflowComposer } from './WorkflowComposer'\nimport { RecurrenceBuilder } from './RecurrenceBuilder'\nimport {\n DEFAULT_TASK_COMPOSER_LABELS,\n defaultTaskComposerValues,\n type TaskAccessMode,\n type TaskComposerLabels,\n type TaskComposerProps,\n type TaskComposerValues,\n type TaskWhen,\n} from './taskComposerTypes'\n\nexport * from './taskComposerTypes'\n\n// The assistant starts now or on a trigger; `manual` is the standby state.\nconst WHEN_ORDER: TaskWhen[] = ['now', 'once', 'repeat', 'event', 'task']\n\n/** A datetime-local value as \"Fri 14 Oct, 09:00\" (the pill's label); the raw value if it is not a date. */\nfunction formatDue(local: string): string {\n const d = new Date(local)\n if (Number.isNaN(d.getTime())) return local\n return d.toLocaleString(undefined, {\n weekday: 'short',\n day: 'numeric',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n })\n}\n\nconst GLYPH = 'size-3.5 shrink-0'\n\n/**\n * One dialog to add a task, built from the app's own pills and lists. The task comes first, like a list\n * item: a title and details, then its properties as pills (due date, what it is part of, who can see it).\n * Every task has a Task Assistant; configuring it is optional. Left alone it is on standby and replies when\n * @mentioned. Give it work and it gets on with it; a person marks the task done. A person starting it\n * now is never asked about access; only an assistant that starts unattended needs permission up front.\n */\nfunction WorkTaskComposer({\n open,\n onOpenChange,\n isEdit = false,\n workflows,\n agents,\n tasks = [],\n values: valuesProp,\n initialValues,\n onValuesChange,\n timezones = [],\n goal,\n standingAccess,\n scopeSource,\n renderDocuments,\n isPending,\n planDrafting = false,\n onSubmit,\n renderIcon,\n labels,\n formLabels,\n recurrence,\n testId,\n}: TaskComposerProps) {\n const l: TaskComposerLabels = {\n ...DEFAULT_TASK_COMPOSER_LABELS,\n ...labels,\n whenOptions: { ...DEFAULT_TASK_COMPOSER_LABELS.whenOptions, ...labels?.whenOptions },\n accessOptions: { ...DEFAULT_TASK_COMPOSER_LABELS.accessOptions, ...labels?.accessOptions },\n }\n const seed = useMemo(\n () => defaultTaskComposerValues(workflows, initialValues),\n // Seeded once per open; the host re-keys the composer for a different task.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [workflows, open]\n )\n const [values, setValues] = useControllableState<TaskComposerValues>(\n valuesProp,\n seed,\n onValuesChange\n )\n const [configOpen, setConfigOpen] = useState(seed.assignee === 'agent')\n // Each open starts from the seed again (uncontrolled only).\n useEffect(() => {\n if (open) {\n if (valuesProp === undefined) setValues(seed)\n setConfigOpen(seed.assignee === 'agent')\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const workflow = workflows.find((w) => w.id === values.workflowId)\n // The assistant runs unattended: file scoping is a chat-launch concern, so scope fields are not asked.\n const fields = workflow?.inputs ?? []\n const errors = workflow ? validateInputs({ ...workflow, inputs: fields }, values.inputs) : {}\n // Opening Configure only shows the options. The assistant is given work once its instruction is filled in.\n const hasWork = configOpen && Boolean(workflow) && Object.keys(errors).length === 0\n const unattended = hasWork && values.when !== 'now' && values.when !== 'manual'\n // The original task's kind cannot change after it exists.\n const canConfigure = !isEdit || seed.assignee === 'agent'\n // A task's start and assistant are fixed once it exists.\n const lockedStart = isEdit\n\n const set = <K extends keyof TaskComposerValues>(key: K, value: TaskComposerValues[K]) =>\n setValues({ ...values, [key]: value })\n\n const pickWorkflow = (id: string) => {\n const next = workflows.find((w) => w.id === id)\n setValues({ ...values, workflowId: id, inputs: next ? defaultInputs(next) : {} })\n }\n\n const openConfigure = () => {\n setConfigOpen(true)\n if (values.when === 'manual') setValues({ ...values, when: 'now' })\n }\n\n // A start time already past is refused by the server; an unchanged one (editing a spent workflow) is not ours to block.\n const runAtPast =\n values.when === 'once' &&\n values.runAt !== '' &&\n values.runAt !== initialValues?.runAt &&\n new Date(values.runAt).getTime() <= Date.now()\n const whenError =\n (values.when === 'once' && !values.runAt) ||\n runAtPast ||\n (values.when === 'repeat' && !values.rrule.trim()) ||\n (values.when === 'event' && !values.eventKind.trim()) ||\n (values.when === 'task' && !values.afterTaskId)\n const canSubmit =\n values.name.trim() !== '' && !(hasWork && whenError) && !isPending && !planDrafting\n const goalNode = typeof goal === 'function' ? goal(values) : goal\n\n // What the host receives: the assistant is only \"given work\" when it was configured with an instruction.\n const submit = () =>\n onSubmit({\n ...values,\n inputs: workflow ? resolveScopeInputs(workflow, values.inputs, scopeSource) : values.inputs,\n assignee: hasWork ? 'agent' : 'me',\n when: hasWork ? values.when : 'manual',\n notifyOnComplete: true,\n })\n\n const id = testIdOr(testId, { testId: 'task-composer' })\n const submitText = isPending\n ? l.saving\n : isEdit\n ? l.save\n : !hasWork\n ? l.addTask\n : values.when === 'now'\n ? l.addAndStart\n : l.addAndSchedule\n\n const taskOptions: PillOption[] = tasks.map((t) => ({\n id: t.id,\n label: t.name,\n icon: <CornerDownRight className={GLYPH} aria-hidden />,\n }))\n const whenOptions: PillOption[] = WHEN_ORDER.map((mode) => ({\n id: mode,\n label: l.whenOptions[mode],\n }))\n const assistantOptions: PillOption[] = agents.map((a) => ({ id: a.id, label: a.label }))\n const pillLabels = { search: l.search, empty: l.empty }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"right\"\n className=\"flex flex-col overflow-hidden p-0\"\n data-testid={id}\n >\n <ModalHeader>\n <DialogTitle>{isEdit ? l.titleEdit : l.titleNew}</DialogTitle>\n <DialogDescription className=\"sr-only\">{l.description}</DialogDescription>\n </ModalHeader>\n\n <form\n className=\"flex min-h-0 flex-1 flex-col\"\n onSubmit={(event) => {\n event.preventDefault()\n if (canSubmit) submit()\n }}\n >\n <div className=\"flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto px-6 pb-4\">\n {/* The task, like a task-list item */}\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"task-composer-title\" className=\"sr-only\">\n {l.titleLabel}\n </Label>\n <Input\n id=\"task-composer-title\"\n value={values.name}\n placeholder={l.titlePlaceholder}\n onChange={(e) => set('name', e.target.value)}\n autoFocus\n className=\"h-10 text-base font-medium\"\n data-testid={`${id}-title`}\n />\n <Label htmlFor=\"task-composer-description\" className=\"sr-only\">\n {l.descriptionLabel}\n </Label>\n <Textarea\n id=\"task-composer-description\"\n value={values.description}\n placeholder={l.descriptionPlaceholder}\n rows={2}\n onChange={(e) => set('description', e.target.value)}\n data-testid={`${id}-description`}\n />\n </div>\n\n {/* Its properties, as pills */}\n <div className=\"flex flex-wrap items-center gap-2\" data-testid={`${id}-properties`}>\n <Popover>\n <PopoverTrigger asChild>\n <EntityPill\n icon={<CalendarClock className={GLYPH} aria-hidden />}\n label={`${l.due}: ${values.dueAt ? formatDue(values.dueAt) : l.dueNone}`}\n secondaryText={<ChevronDown className=\"size-3\" aria-hidden />}\n size=\"sm\"\n className=\"h-7 pointer-coarse:min-h-11\"\n data-testid={`${id}-due-pill`}\n />\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-auto p-2\">\n <DueDateMenu\n id={`${id}-due`}\n label={l.due}\n value={values.dueAt}\n onChange={(v) => set('dueAt', v)}\n labels={{ clear: l.dueClear }}\n />\n </PopoverContent>\n </Popover>\n\n {tasks.length > 0 && (\n <PillSelect\n icon={<CornerDownRight className={GLYPH} aria-hidden />}\n prefix={l.parentTask}\n value={values.parentTaskId}\n options={taskOptions}\n noneOption={{ id: '', label: l.parentTaskNone }}\n onChange={(v) => set('parentTaskId', v)}\n searchable\n labels={pillLabels}\n testId={`${id}-parent`}\n />\n )}\n\n {/* The same shared/private control every shareable thing in the app uses */}\n <VisibilityToggle\n items={{ shared: values.shared }}\n onToggle={(share) => set('shared', share)}\n label={l.visibility}\n presentation=\"select\"\n data-testid={`${id}-visibility`}\n />\n </div>\n\n {/* The Task Assistant, for a task being created or one that was given work. Editing a plain\n to-do has nothing to say about it. */}\n {canConfigure && (\n <section\n className=\"flex flex-col gap-3 rounded-lg border border-border bg-muted/30 p-3\"\n data-testid={`${id}-assistant`}\n data-state={hasWork ? 'working' : 'standby'}\n >\n <div className=\"flex items-center gap-2\">\n <EntityPill\n icon={<Bot className=\"size-3.5 shrink-0 text-ai-ink\" aria-hidden />}\n label={l.assistant}\n size=\"sm\"\n className=\"h-7 shrink-0 bg-ai-soft\"\n />\n <p className=\"min-w-0 flex-1 text-xs text-muted-foreground\">\n {hasWork\n ? l.assistantPreparing(l.whenOptions[values.when].toLowerCase())\n : l.assistantStandby}\n </p>\n {canConfigure && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 shrink-0 gap-1 px-2 pointer-coarse:h-11\"\n onClick={() => (configOpen ? setConfigOpen(false) : openConfigure())}\n aria-expanded={configOpen}\n data-testid={`${id}-configure`}\n >\n {configOpen ? l.configureClose : l.configure}\n <ChevronDown\n className={cn('size-3.5 transition-transform', configOpen && 'rotate-180')}\n aria-hidden\n />\n </Button>\n )}\n </div>\n\n {configOpen && (\n <div className=\"flex flex-col gap-3\" data-testid={`${id}-config`}>\n <div className=\"flex flex-col gap-1.5\">\n <Label className=\"text-xs text-muted-foreground\">{l.what}</Label>\n <PillSelect\n icon={<Bot className={GLYPH} aria-hidden />}\n prefix={l.template}\n value={values.workflowId}\n options={workflows.map((w) => ({ id: w.id, label: w.title }))}\n onChange={pickWorkflow}\n labels={pillLabels}\n testId={`${id}-workflow`}\n className=\"self-start\"\n />\n </div>\n {workflow && fields.length > 0 && (\n <SchemaForm\n fields={fields}\n values={values.inputs}\n onChange={(name: string, value: WorkflowInputValue) =>\n set('inputs', { ...values.inputs, [name]: value })\n }\n renderScope={defaultScopeRenderer(scopeSource)}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n labels={formLabels}\n testIdPrefix={`${id}-field`}\n />\n )}\n\n {goalNode != null && (\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-plan`}>\n <div>\n <p className=\"text-sm font-medium\">{l.plan}</p>\n <p className=\"text-xs text-muted-foreground\">{l.planHint}</p>\n </div>\n {goalNode}\n </div>\n )}\n\n <div className=\"flex flex-wrap items-center gap-2\">\n <PillSelect\n icon={<Play className={GLYPH} aria-hidden />}\n prefix={l.start}\n value={values.when === 'manual' ? 'now' : values.when}\n options={whenOptions}\n onChange={(v) => set('when', v as TaskWhen)}\n disabled={lockedStart}\n labels={pillLabels}\n testId={`${id}-when`}\n />\n {agents.length > 1 && (\n <PillSelect\n icon={<Bot className={GLYPH} aria-hidden />}\n prefix={l.which}\n value={values.agentId}\n options={assistantOptions}\n noneOption={{ id: '', label: l.myAssistant }}\n onChange={(v) => set('agentId', v)}\n disabled={lockedStart}\n searchable={assistantOptions.length > 6}\n labels={pillLabels}\n testId={`${id}-agent`}\n />\n )}\n {unattended && (\n <PillSelect\n icon={<KeyRound className={GLYPH} aria-hidden />}\n prefix={l.permission}\n value={values.access}\n options={(Object.keys(l.accessOptions) as TaskAccessMode[]).map(\n (mode) => ({\n id: mode,\n label: l.accessOptions[mode].label,\n })\n )}\n onChange={(v) => set('access', v as TaskAccessMode)}\n labels={pillLabels}\n testId={`${id}-access`}\n />\n )}\n </div>\n\n {values.when === 'once' && (\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"task-composer-runat\" className=\"sr-only\">\n {l.runAt}\n </Label>\n <Input\n id=\"task-composer-runat\"\n type=\"datetime-local\"\n value={values.runAt}\n onChange={(e) => set('runAt', e.target.value)}\n className=\"max-w-xs\"\n aria-invalid={runAtPast || undefined}\n data-testid={`${id}-run-at`}\n />\n {runAtPast && (\n <p className=\"text-xs text-destructive\" data-testid={`${id}-run-at-past`}>\n {l.runAtPast}\n </p>\n )}\n </div>\n )}\n {values.when === 'repeat' && (\n <RecurrenceBuilder\n rrule={values.rrule}\n onChange={(r) => set('rrule', r)}\n {...recurrence}\n />\n )}\n {values.when === 'event' && (\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"task-composer-event\" className=\"sr-only\">\n {l.event}\n </Label>\n <Input\n id=\"task-composer-event\"\n value={values.eventKind}\n placeholder={l.eventPlaceholder}\n onChange={(e) => set('eventKind', e.target.value)}\n className=\"max-w-xs\"\n data-testid={`${id}-event`}\n />\n <p className=\"text-xs text-muted-foreground\">{l.eventHint}</p>\n </div>\n )}\n {values.when === 'task' && (\n <PillSelect\n icon={<CornerDownRight className={GLYPH} aria-hidden />}\n prefix={l.afterTask}\n value={values.afterTaskId}\n options={taskOptions}\n onChange={(v) => set('afterTaskId', v)}\n searchable\n labels={pillLabels}\n testId={`${id}-after-task`}\n className=\"self-start\"\n />\n )}\n {unattended && (\n <div\n className=\"flex flex-col gap-1 rounded-md bg-muted p-2\"\n data-testid={`${id}-access-block`}\n >\n <p className=\"text-xs text-muted-foreground\">\n {l.permissionHint} {l.accessOptions[values.access].hint}\n </p>\n {values.access === 'standing' &&\n (typeof standingAccess === 'function'\n ? standingAccess(values)\n : standingAccess)}\n </div>\n )}\n {values.when === 'repeat' && timezones.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <Label htmlFor=\"task-composer-timezone\" className=\"text-xs\">\n {l.timezone}\n </Label>\n <Input\n id=\"task-composer-timezone\"\n list=\"task-composer-timezones\"\n value={values.timezone}\n onChange={(e) => set('timezone', e.target.value)}\n className=\"max-w-xs\"\n data-testid={`${id}-timezone`}\n />\n <datalist id=\"task-composer-timezones\">\n {timezones.map((tz) => (\n <option key={tz} value={tz} />\n ))}\n </datalist>\n </div>\n )}\n </div>\n )}\n </section>\n )}\n </div>\n\n <div className=\"flex flex-col-reverse gap-2 border-t border-border px-6 py-3 sm:flex-row sm:justify-end\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n data-testid={`${id}-cancel`}\n className=\"pointer-coarse:min-h-11\"\n >\n {l.cancel}\n </Button>\n <Button\n type=\"submit\"\n disabled={!canSubmit}\n data-testid={`${id}-submit`}\n className=\"gap-1.5 pointer-coarse:min-h-11\"\n >\n {isPending && <Loader2 className=\"size-4 animate-spin\" />}\n {submitText}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n\n/**\n * The dialog behind \"New task\" (a title, with the assistant optional) and, with `kind=\"workflow\"`, the\n * workflow dialog (see {@link WorkflowComposer}: what, when and who up front, the rest under More\n * options).\n */\nexport function TaskComposer(props: TaskComposerProps) {\n return props.kind === 'workflow' ? (\n <WorkflowComposer {...props} />\n ) : (\n <WorkTaskComposer {...props} />\n )\n}\n","import { useAssistantCopy } from '@arbidocs/react/shell'\nimport { ARBI_MARK_SRC, UserEntity } from '@arbidocs/react/ui'\n\nexport interface TurnSpeakerProfile {\n external_id: string\n given_name: string\n family_name?: string | null\n picture?: string | null\n parent_ext_id?: string | null\n}\n\n/** A last-turn speaker, using only metadata returned with the conversation list. */\nexport function ConversationTurnSpeaker({\n role,\n actor,\n currentUserId,\n colorClass,\n platformName: platformNameProp,\n platformLogoSrc = ARBI_MARK_SRC,\n variant = 'pill',\n}: {\n role?: string | null\n actor?: TurnSpeakerProfile | null\n currentUserId?: string\n colorClass?: string\n platformName?: string\n platformLogoSrc?: string\n /** `icon`: the face alone (its name on hover), for a narrow column. */\n variant?: 'icon' | 'pill'\n}) {\n // The assistant's turns under the host's name for it (\"ARBI\" by default).\n const assistantName = useAssistantCopy().name\n const platformName = platformNameProp ?? assistantName\n if (!role) return <span className=\"text-muted-foreground\">—</span>\n if (role === 'assistant' && !actor)\n return (\n <UserEntity\n size=\"sm\"\n variant={variant}\n interactive={false}\n picture={platformLogoSrc}\n avatarImageClassName=\"object-contain p-0.5\"\n initials={platformName.charAt(0)}\n displayName={platformName}\n />\n )\n if (!actor) return <span className=\"text-muted-foreground\">Unknown participant</span>\n const isMe = actor.external_id === currentUserId\n const displayName = isMe ? 'You' : [actor.given_name, actor.family_name].filter(Boolean).join(' ')\n return (\n <UserEntity\n size=\"sm\"\n variant={variant}\n interactive={false}\n isMe={isMe}\n isAgent={actor.external_id.startsWith('agt-')}\n displayName={displayName}\n initials={`${actor.given_name.charAt(0)}${actor.family_name?.charAt(0) ?? ''}`.toUpperCase()}\n picture={actor.picture}\n colorClass={colorClass}\n />\n )\n}\n","/** The slice of a task the empty state reads (the list rows and the full record both fit). */\ninterface Task {\n title?: string | null\n description?: string | null\n status?: string | null\n}\n\n/**\n * What an open task shows before anything has been asked in it (a to-do, or a task not yet run): the task\n * itself, not the generic \"ask about your documents\" page. Its status, owner and due date are in the bar above.\n */\nexport function TaskEmptyState({ task }: { task: Task }) {\n const title = task.title?.trim() || 'Untitled task'\n const description = task.description?.trim()\n return (\n <div\n className=\"mx-auto flex max-w-xl flex-col items-center gap-2 px-6 py-20 text-center\"\n data-testid=\"task-empty-state\"\n >\n <h2 className=\"text-lg font-semibold text-foreground\" data-testid=\"task-empty-title\">\n {title}\n </h2>\n {description && (\n <p\n className=\"whitespace-pre-wrap text-sm text-foreground\"\n data-testid=\"task-empty-description\"\n >\n {description}\n </p>\n )}\n <p className=\"text-sm text-muted-foreground\">\n {task.status === 'done'\n ? 'This task is done. Nothing was asked in it.'\n : 'Nothing has been asked here yet. Ask the assistant for help with this below, or mark it done when you are finished.'}\n </p>\n </div>\n )\n}\n","/**\n * TupleArrayField Component\n *\n * Specialized component for handling arrays of tuples, particularly for\n * few-shot examples where each tuple contains multiple string elements.\n * Displays in a clean table format for better organization.\n */\n\nimport { Plus, Trash2 } from 'lucide-react'\nimport { Button, Label, Textarea } from '@arbidocs/react/ui'\n\nexport interface TupleArrayFieldLabels {\n addRow: string\n empty: string\n jsonArrayPlaceholder: string\n /** Placeholder of one cell; receives the lower-cased column label. */\n cellPlaceholder: (column: string) => string\n /** aria-label of the remove button; receives the 1-based row number. */\n removeRow: (row: number) => string\n /** Column labels of 2-tuple few-shot examples. */\n pairColumns: string[]\n /** Column labels of 3-tuple few-shot examples. */\n tripleColumns: string[]\n /** Generic column label; receives the 1-based column number. */\n column: (n: number) => string\n}\n\nexport const DEFAULT_TUPLE_ARRAY_FIELD_LABELS: TupleArrayFieldLabels = {\n addRow: 'Add Row',\n empty: 'No examples added yet. Click \"Add Row\" to start.',\n jsonArrayPlaceholder: 'Enter JSON array...',\n cellPlaceholder: (column) => `Enter ${column}...`,\n removeRow: (row) => `Remove row ${row}`,\n pairColumns: ['Query with Context', 'Reformulated Query'],\n tripleColumns: ['Input', 'Expected Output', 'Explanation'],\n column: (n) => `Field ${n}`,\n}\n\nexport interface TupleArrayFieldProps {\n fieldId: string\n label: string\n description?: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChange: (value: any) => void\n labels?: Partial<TupleArrayFieldLabels>\n}\n\nexport function TupleArrayField({\n fieldId,\n label,\n description,\n value,\n onChange,\n labels,\n}: TupleArrayFieldProps) {\n const l = { ...DEFAULT_TUPLE_ARRAY_FIELD_LABELS, ...labels }\n // Ensure value is an array\n const examples = Array.isArray(value) ? value : []\n\n // Determine if this looks like a tuple array (array of arrays)\n const isTupleArray = examples.length === 0 || (examples.length > 0 && Array.isArray(examples[0]))\n\n // If not a tuple array, fall back to regular JSON editing\n if (!isTupleArray) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n <Textarea\n id={fieldId}\n value={JSON.stringify(value, null, 2)}\n onChange={(e) => {\n try {\n const parsed = JSON.parse(e.target.value)\n onChange(parsed)\n } catch {\n // Keep the string value if JSON parsing fails\n }\n }}\n placeholder={l.jsonArrayPlaceholder}\n rows={6}\n className=\"font-mono text-sm bg-background\"\n />\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n </div>\n )\n }\n\n // Determine the tuple structure (number of elements per tuple)\n const tupleLength = examples.length > 0 && Array.isArray(examples[0]) ? examples[0].length : 2 // Default to pairs if empty\n\n const handleAddExample = () => {\n const newExample = Array(tupleLength).fill('')\n onChange([...examples, newExample])\n }\n\n const handleRemoveExample = (index: number) => {\n const newExamples = examples.filter((_, i) => i !== index)\n onChange(newExamples)\n }\n\n const handleUpdateExample = (exampleIndex: number, elementIndex: number, newValue: string) => {\n const newExamples = [...examples]\n if (!Array.isArray(newExamples[exampleIndex])) {\n newExamples[exampleIndex] = Array(tupleLength).fill('')\n }\n newExamples[exampleIndex][elementIndex] = newValue\n onChange(newExamples)\n }\n\n // Determine field labels based on common patterns\n const getFieldLabels = () => {\n // Check if this looks like few-shot examples\n if (\n label.toLowerCase().includes('example') ||\n label.toLowerCase().includes('few_shot') ||\n fieldId.toLowerCase().includes('example')\n ) {\n if (tupleLength === 2) {\n return l.pairColumns\n }\n if (tupleLength === 3) {\n return l.tripleColumns\n }\n }\n // Default labels\n return Array.from({ length: tupleLength }, (_, i) => l.column(i + 1))\n }\n\n const fieldLabels = getFieldLabels()\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label>{label}</Label>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={handleAddExample}\n className=\"h-7 text-sm\"\n >\n <Plus className=\"size-3 mr-1\" />\n {l.addRow}\n </Button>\n </div>\n\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n\n {examples.length === 0 ? (\n <div className=\"text-center py-8 text-sm text-muted-foreground rounded-md bg-muted\">\n {l.empty}\n </div>\n ) : (\n <div className=\"overflow-hidden rounded-md border border-border\">\n <table className=\"w-full\">\n <thead className=\"bg-muted border-b border-border\">\n <tr>\n <th className=\"px-3 py-2 text-left text-sm font-medium text-muted-foreground w-12\">\n #\n </th>\n {fieldLabels.map((fieldLabel, index) => (\n <th\n key={index}\n className=\"px-3 py-2 text-left text-sm font-medium text-muted-foreground\"\n >\n {fieldLabel}\n </th>\n ))}\n <th className=\"px-3 py-2 w-10\"></th>\n </tr>\n </thead>\n <tbody>\n {examples.map((example, exampleIndex) => {\n const tupleElements = Array.isArray(example) ? example : [example]\n\n return (\n <tr\n key={exampleIndex}\n className=\"border-b border-border last:border-b-0 hover:bg-muted/50 transition-colors\"\n >\n <td className=\"px-3 py-2 text-sm text-muted-foreground font-medium\">\n {exampleIndex + 1}\n </td>\n {fieldLabels.map((_, elementIndex) => {\n const value = tupleElements[elementIndex] || ''\n const isLongText = value.includes('\\n')\n\n return (\n <td key={elementIndex} className=\"px-3 py-2\">\n <Textarea\n value={value}\n onChange={(e) =>\n handleUpdateExample(exampleIndex, elementIndex, e.target.value)\n }\n placeholder={l.cellPlaceholder(\n (\n fieldLabels[elementIndex] ?? l.column(elementIndex + 1)\n ).toLowerCase()\n )}\n rows={isLongText ? 3 : 1}\n className=\"text-sm bg-background resize-none min-h-[32px] w-full\"\n />\n </td>\n )\n })}\n <td className=\"px-3 py-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => handleRemoveExample(exampleIndex)}\n aria-label={l.removeRow(exampleIndex + 1)}\n className=\"size-8 p-0 text-destructive hover:bg-destructive/10 pointer-coarse:size-11\"\n >\n <Trash2 className=\"size-4\" />\n </Button>\n </td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n )}\n </div>\n )\n}\n","/** Minimal JSON-schema property shape used by the config form. */\nexport interface SchemaProperty {\n type?: string\n title?: string\n description?: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: any\n minimum?: number\n maximum?: number\n enum?: string[]\n format?: string\n properties?: Record<string, SchemaProperty>\n}\n\n/**\n * Humanize a PascalCase / acronym section key into a normal-case title:\n * \"QueryLLM\" -> \"Query LLM\", \"DocTagLLM\" -> \"Doc Tag LLM\", \"Agents\" -> \"Agents\".\n */\nexport function humanizeSection(name: string): string {\n return name\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n .replace(/_/g, ' ')\n .trim()\n}\n\n/** A readable label from an UPPER_SNAKE / snake_case key: SAVE_SOURCES -> \"Save sources\". */\nexport function prettifyKey(key: string): string {\n const spaced = key.replace(/_/g, ' ').trim().toLowerCase()\n return spaced.charAt(0).toUpperCase() + spaced.slice(1)\n}\n\n/** True for a non-null, non-array object, i.e. something we can render as fields. */\nexport function isPlainObject(val: unknown): val is Record<string, unknown> {\n return typeof val === 'object' && val !== null && !Array.isArray(val)\n}\n\n/**\n * Best-effort JSON-schema `type` inferred from a raw value, so a nested config object the schema\n * did not declare sub-properties for still renders as structured fields instead of raw JSON.\n */\nexport function inferType(val: unknown): SchemaProperty['type'] {\n if (typeof val === 'boolean') return 'boolean'\n if (typeof val === 'number') return 'number'\n if (Array.isArray(val)) return 'array'\n if (isPlainObject(val)) return 'object'\n return 'string'\n}\n\n/** True when `value` is a number and lies outside [minimum, maximum]. */\nexport function isOutOfBounds(value: unknown, minimum?: number, maximum?: number): boolean {\n if (typeof value !== 'number' || Number.isNaN(value)) return false\n if (minimum !== undefined && value < minimum) return true\n if (maximum !== undefined && value > maximum) return true\n return false\n}\n","/** One config field, rendered from its schema type. Memoized independently. */\n\nimport { memo, useState, type ReactNode } from 'react'\nimport {\n Button,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Switch,\n Textarea,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport {\n DEFAULT_TUPLE_ARRAY_FIELD_LABELS,\n TupleArrayField,\n type TupleArrayFieldLabels,\n} from './TupleArrayField'\nimport {\n inferType,\n isOutOfBounds,\n isPlainObject,\n prettifyKey,\n type SchemaProperty,\n} from './schema-utils'\n\nexport interface ConfigFieldLabels extends TupleArrayFieldLabels {\n editAsFields: string\n editAsJson: string\n jsonPlaceholder: string\n /** Select placeholder; receives the lower-cased field label. */\n selectPlaceholder: (label: string) => string\n /** Text input placeholder; receives the lower-cased field label. */\n enterPlaceholder: (label: string) => string\n /** Out-of-range hint; receives the range text (`1–5`, `≥ 1`, `≤ 5`). */\n allowedRange: (range: string) => string\n /** Out-of-range notification; `range` may be empty. */\n outOfRange: (label: string, range: string, value: unknown) => string\n}\n\nexport const DEFAULT_CONFIG_FIELD_LABELS: ConfigFieldLabels = {\n ...DEFAULT_TUPLE_ARRAY_FIELD_LABELS,\n editAsFields: 'Edit as fields',\n editAsJson: 'Edit as JSON',\n jsonPlaceholder: 'Enter JSON...',\n selectPlaceholder: (label) => `Select ${label}...`,\n enterPlaceholder: (label) => `Enter ${label}...`,\n allowedRange: (range) => `Allowed range: ${range}`,\n outOfRange: (label, range, value) =>\n `${label} must be ${range || 'within the allowed range'} (got ${String(value)}).`,\n}\n\nexport interface ConfigFieldTestIds {\n /** Test id of a boolean/number control; default `config-field-{section}-{field with dots as dashes}`. */\n field: (section: string, fieldName: string) => string\n /** Test id of the object \"Edit as JSON\" toggle; default `config-json-toggle-{fieldId}`. */\n jsonToggle: (fieldId: string) => string\n}\n\nexport interface ConfigFieldSlots {\n /** Custom control for the QueryLLM MODEL_NAME field (the app supplies its model picker). */\n renderModelSelect?: (props: { value: string; onChange: (value: string) => void }) => ReactNode\n}\n\nexport interface ConfigFieldProps extends ConfigFieldSlots {\n section: string\n fieldName: string\n fieldSchema: SchemaProperty\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChange: (section: string, field: string, value: any) => void\n labels?: Partial<ConfigFieldLabels>\n testIds?: Partial<ConfigFieldTestIds>\n}\n\nfunction ConfigFieldComponent({\n section,\n fieldName,\n fieldSchema,\n value,\n onChange,\n renderModelSelect,\n labels,\n testIds,\n}: ConfigFieldProps) {\n const l = { ...DEFAULT_CONFIG_FIELD_LABELS, ...labels }\n const fieldTestId = testIdOr(testIds?.field?.(section, fieldName), {\n testId: `config-field-${section}-${fieldName.replace(/\\./g, '-')}`,\n })\n const { notify } = useBlocksEnvironment()\n const fieldId = `${section}-${fieldName}`\n // Prefer a schema-provided title; else humanize the leaf key (SAVE_SOURCES →\n // \"Save sources\") rather than showing the raw UPPER_SNAKE name.\n const label = fieldSchema.title || prettifyKey(fieldName.split('.').pop() ?? fieldName)\n const description = fieldSchema.description || ''\n // Object fields render as structured sub-fields by default; this is the\n // power-user escape hatch to edit the raw JSON. `jsonDraft` buffers in-progress\n // (possibly invalid) edits so a half-typed object doesn't corrupt the value.\n const [rawJson, setRawJson] = useState(false)\n const [jsonDraft, setJsonDraft] = useState<string | null>(null)\n // SmartSearch and Retriever (with agent / smart_search profiles) sections\n // contain long prompts and verbose descriptions — give their text boxes\n // more vertical room so the content isn't clipped.\n const isLargePromptSection =\n section === 'SmartSearch' ||\n section === 'Retriever' ||\n section === 'SmartRetriever' ||\n section === 'AgentRetriever'\n const longTextRows = isLargePromptSection ? 12 : 4\n\n // Special handling for MODEL_NAME field - use ModelSelector for QueryLLM section\n if (fieldName === 'MODEL_NAME' && section === 'QueryLLM' && renderModelSelect) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n {renderModelSelect({\n value: value || '',\n onChange: (val) => onChange(section, fieldName, val),\n })}\n </div>\n )\n }\n\n // JSON-textarea fallback, shared by complex types and the `object`\n // case when it has no declared sub-properties. Extracted so the\n // `object` case can return it explicitly rather than falling through\n // to `default` (which `noFallthroughCasesInSwitch` rejects).\n const renderJsonFallback = () => (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n <Textarea\n id={fieldId}\n value={typeof value === 'object' ? JSON.stringify(value, null, 2) : value || ''}\n onChange={(e) => {\n try {\n const parsed = JSON.parse(e.target.value)\n onChange(section, fieldName, parsed)\n } catch {\n onChange(section, fieldName, e.target.value)\n }\n }}\n placeholder={l.jsonPlaceholder}\n rows={longTextRows}\n className=\"font-mono text-sm bg-background resize-y\"\n />\n </div>\n )\n\n // A nested object rendered as a GROUP of structured sub-fields (switches,\n // inputs, …) inferred from its values — instead of one raw JSON blob. Each\n // key recurses through this same component, so booleans become switches,\n // numbers become number inputs, nested objects nest again, etc. An\n // \"Edit as JSON\" toggle keeps the raw view one click away.\n const renderObjectEditor = () => {\n const entries = Object.entries(value as Record<string, unknown>)\n return (\n <div className=\"space-y-3 rounded-lg bg-muted p-4\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label className=\"text-sm font-semibold\">{label}</Label>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 shrink-0 px-2 text-xs text-muted-foreground pointer-coarse:h-11\"\n onClick={() => {\n setJsonDraft(null)\n setRawJson((v) => !v)\n }}\n data-testid={testIdOr(testIds?.jsonToggle?.(fieldId), {\n testId: `config-json-toggle-${fieldId}`,\n })}\n >\n {rawJson ? l.editAsFields : l.editAsJson}\n </Button>\n </div>\n {description && (\n <p className=\"text-sm text-muted-foreground whitespace-normal break-words leading-relaxed\">\n {description}\n </p>\n )}\n {rawJson ? (\n <Textarea\n id={fieldId}\n value={jsonDraft ?? JSON.stringify(value, null, 2)}\n onChange={(e) => {\n setJsonDraft(e.target.value)\n try {\n onChange(section, fieldName, JSON.parse(e.target.value))\n } catch {\n // Keep the draft; don't propagate a half-typed invalid object.\n }\n }}\n rows={longTextRows}\n className=\"font-mono text-sm bg-background resize-y\"\n />\n ) : (\n <div className=\"space-y-3\">\n {entries.map(([subKey, subVal]) => (\n <ConfigField\n renderModelSelect={renderModelSelect}\n key={`${fieldName}.${subKey}`}\n section={section}\n fieldName={`${fieldName}.${subKey}`}\n fieldSchema={{ type: inferType(subVal), title: prettifyKey(subKey) }}\n value={subVal}\n onChange={onChange}\n />\n ))}\n </div>\n )}\n </div>\n )\n }\n\n // Object values (declared or inferred) → structured fields; everything else\n // (arrays, primitives, empty objects) → the raw JSON textarea.\n const renderComplex = () =>\n isPlainObject(value) && Object.keys(value).length > 0\n ? renderObjectEditor()\n : renderJsonFallback()\n\n // Handle different field types\n switch (fieldSchema.type) {\n case 'boolean':\n return (\n <div className=\"flex items-center justify-between space-y-2\">\n <div className=\"space-y-0.5\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n </div>\n <Switch\n id={fieldId}\n checked={value || false}\n onCheckedChange={(checked) => onChange(section, fieldName, checked)}\n data-testid={fieldTestId}\n />\n </div>\n )\n\n case 'integer':\n case 'number': {\n const outOfBounds = isOutOfBounds(value, fieldSchema.minimum, fieldSchema.maximum)\n const rangeHint =\n fieldSchema.minimum !== undefined && fieldSchema.maximum !== undefined\n ? `${fieldSchema.minimum}–${fieldSchema.maximum}`\n : fieldSchema.minimum !== undefined\n ? `≥ ${fieldSchema.minimum}`\n : fieldSchema.maximum !== undefined\n ? `≤ ${fieldSchema.maximum}`\n : ''\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n <Input\n id={fieldId}\n type=\"number\"\n value={value ?? fieldSchema.default ?? ''}\n onChange={(e) => {\n const val = e.target.value === '' ? null : Number(e.target.value)\n onChange(section, fieldName, val)\n }}\n onBlur={() => {\n if (isOutOfBounds(value, fieldSchema.minimum, fieldSchema.maximum)) {\n notify(l.outOfRange(label, rangeHint, value), 'error')\n }\n }}\n min={fieldSchema.minimum}\n max={fieldSchema.maximum}\n placeholder={fieldSchema.default?.toString()}\n className={cn(\n 'bg-background',\n outOfBounds && 'border-destructive focus-visible:ring-destructive'\n )}\n aria-invalid={outOfBounds}\n data-testid={fieldTestId}\n />\n {outOfBounds && rangeHint && (\n <p className=\"text-sm text-destructive\">{l.allowedRange(rangeHint)}</p>\n )}\n </div>\n )\n }\n\n case 'string':\n // Check if it's an enum (select dropdown)\n if (fieldSchema.enum && fieldSchema.enum.length > 0) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n <Select value={value || ''} onValueChange={(val) => onChange(section, fieldName, val)}>\n <SelectTrigger className=\"bg-background\">\n <SelectValue placeholder={l.selectPlaceholder(label.toLowerCase())} />\n </SelectTrigger>\n <SelectContent>\n {fieldSchema.enum.map((option) => (\n <SelectItem key={option} value={option}>\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )\n }\n\n // Check if it's a long text field (use textarea)\n if (fieldName.includes('INSTRUCTION') || fieldName.includes('PROMPT')) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n <Textarea\n id={fieldId}\n value={value || ''}\n onChange={(e) => onChange(section, fieldName, e.target.value)}\n placeholder={fieldSchema.default || l.enterPlaceholder(label.toLowerCase())}\n rows={longTextRows}\n className=\"resize-y bg-background\"\n />\n </div>\n )\n }\n\n // Default to regular input\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n <Input\n id={fieldId}\n value={value || ''}\n onChange={(e) => onChange(section, fieldName, e.target.value)}\n placeholder={fieldSchema.default || l.enterPlaceholder(label.toLowerCase())}\n className=\"bg-background\"\n />\n </div>\n )\n\n case 'array': {\n // Check if this is an array of tuples/arrays (for few-shot examples)\n const isArrayOfArrays = Array.isArray(value) && value.length > 0 && Array.isArray(value[0])\n const looksLikeExamples =\n fieldName.toLowerCase().includes('example') ||\n fieldName.toLowerCase().includes('few_shot') ||\n fieldName.toLowerCase().includes('samples')\n\n if (isArrayOfArrays || looksLikeExamples) {\n // Use specialized TupleArrayField for better UX\n return (\n <TupleArrayField\n fieldId={fieldId}\n label={label}\n description={description}\n value={value}\n onChange={(newValue) => onChange(section, fieldName, newValue)}\n labels={labels}\n />\n )\n }\n\n // Fall through to default JSON handling for other arrays\n break\n }\n\n case 'object':\n // Render nested properties as a grouped sub-form\n if (fieldSchema.properties) {\n return (\n <div\n className={cn(\n 'space-y-3 rounded-lg bg-muted p-4',\n isLargePromptSection && 'min-h-[12rem]'\n )}\n >\n <Label className=\"text-sm font-semibold\">{label}</Label>\n {description && (\n <p className=\"text-sm text-muted-foreground whitespace-normal break-words leading-relaxed\">\n {description}\n </p>\n )}\n <div className=\"space-y-3\">\n {Object.entries(fieldSchema.properties).map(([subFieldName, subFieldSchema]) => (\n <ConfigField\n renderModelSelect={renderModelSelect}\n key={`${fieldName}.${subFieldName}`}\n section={section}\n fieldName={`${fieldName}.${subFieldName}`}\n fieldSchema={subFieldSchema}\n value={value?.[subFieldName]}\n onChange={onChange}\n labels={labels}\n testIds={testIds}\n />\n ))}\n </div>\n </div>\n )\n }\n // No declared sub-properties — infer structured fields from the value\n // (falling back to JSON for arrays/primitives/empty objects).\n return renderComplex()\n\n default:\n // Unknown/complex types — infer structured fields when it's an object,\n // else a JSON textarea.\n return renderComplex()\n }\n}\n\n// Memo with custom comparison: only re-render if value actually changed.\nexport const ConfigField = memo(ConfigFieldComponent, (prev, next) => {\n return (\n prev.value === next.value &&\n prev.section === next.section &&\n prev.fieldName === next.fieldName &&\n prev.onChange === next.onChange &&\n prev.renderModelSelect === next.renderModelSelect &&\n prev.labels === next.labels &&\n prev.testIds === next.testIds\n )\n})\n","/**\n * ConfigForm: renders a backend JSON-schema config as collapsible sections of typed fields\n * (switches, numbers, selects, prompts, tuples, nested objects).\n */\n\nimport { memo, useState, useMemo } from 'react'\nimport { ChevronDown, ChevronRight } from 'lucide-react'\nimport {\n Button,\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n Switch,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport {\n ConfigField,\n type ConfigFieldLabels,\n type ConfigFieldSlots,\n type ConfigFieldTestIds,\n DEFAULT_CONFIG_FIELD_LABELS,\n} from './ConfigField'\nimport { humanizeSection, type SchemaProperty } from './schema-utils'\n\nexport interface ConfigFormLabels extends ConfigFieldLabels {\n collapseAll: string\n expandAll: string\n enabled: string\n disabled: string\n}\n\nexport const DEFAULT_CONFIG_FORM_LABELS: ConfigFormLabels = {\n ...DEFAULT_CONFIG_FIELD_LABELS,\n collapseAll: 'Collapse all',\n expandAll: 'Expand all',\n enabled: 'Enabled',\n disabled: 'Disabled',\n}\n\nexport interface ConfigFormTestIds extends ConfigFieldTestIds {\n form: string\n toggleAll: string\n /** Default `config-section-{name}`. */\n section: (name: string) => string\n /** Default `config-section-toggle-{name}`. */\n sectionToggle: (name: string) => string\n /** Default `config-section-enabled-toggle-{name}`. */\n sectionEnabled: (name: string) => string\n}\n\nexport interface ConfigFormProps extends ConfigFieldSlots {\n /** Section name -> JSON schema ({ properties }). */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n schema: Record<string, any>\n /** Current values: section -> field -> value. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n values: Record<string, any>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChange: (section: string, field: string, value: any) => void\n labels?: Partial<ConfigFormLabels>\n testIds?: Partial<ConfigFormTestIds>\n className?: string\n}\n\nfunction ConfigFormComponent({\n schema,\n values,\n onChange,\n renderModelSelect,\n labels,\n testIds,\n className,\n}: ConfigFormProps) {\n const l = { ...DEFAULT_CONFIG_FORM_LABELS, ...labels }\n // Track which sections are expanded/collapsed. Start fully collapsed.\n const [expandedSections, setExpandedSections] = useState<Set<string>>(new Set())\n\n const expandableSectionNames = useMemo(\n () =>\n Object.entries(schema)\n .filter(\n ([, sectionSchema]) =>\n sectionSchema?.properties && Object.keys(sectionSchema.properties).length > 0\n )\n .map(([name]) => name),\n [schema]\n )\n\n const allExpanded =\n expandableSectionNames.length > 0 &&\n expandableSectionNames.every((name) => expandedSections.has(name))\n\n const toggleAllSections = () => {\n setExpandedSections(allExpanded ? new Set() : new Set(expandableSectionNames))\n }\n\n const toggleSection = (sectionName: string) => {\n setExpandedSections((prev) => {\n const newSet = new Set(prev)\n if (newSet.has(sectionName)) {\n newSet.delete(sectionName)\n } else {\n newSet.add(sectionName)\n }\n return newSet\n })\n }\n\n const handleEnabledChange = (sectionName: string, enabled: boolean) => {\n // Update the ENABLED value\n onChange(sectionName, 'ENABLED', enabled)\n\n // Also update the expanded state\n setExpandedSections((prev) => {\n const newSet = new Set(prev)\n if (enabled) {\n newSet.add(sectionName)\n } else {\n newSet.delete(sectionName)\n }\n return newSet\n })\n }\n\n return (\n <div\n className={cn('space-y-3', className)}\n data-testid={testIdOr(testIds?.form, { testId: 'config-schema-form' })}\n >\n <div className=\"flex justify-end\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 px-2 text-xs text-muted-foreground pointer-coarse:h-11\"\n onClick={toggleAllSections}\n data-testid={testIdOr(testIds?.toggleAll, { testId: 'config-toggle-all-sections' })}\n >\n {allExpanded ? l.collapseAll : l.expandAll}\n </Button>\n </div>\n\n {Object.entries(schema).map(([sectionName, sectionSchema]) => {\n if (!sectionSchema.properties || Object.keys(sectionSchema.properties).length === 0) {\n return null\n }\n\n const sectionTitle = humanizeSection(sectionName)\n\n // Check if this section has an ENABLED field\n const hasEnabledField = 'ENABLED' in sectionSchema.properties\n const isEnabled = hasEnabledField ? (values[sectionName]?.ENABLED ?? true) : true\n const isExpanded = expandedSections.has(sectionName)\n\n // Get all fields except ENABLED for the collapsible content\n const otherFields = Object.entries(sectionSchema.properties).filter(\n ([fieldName]) => fieldName !== 'ENABLED'\n )\n\n return (\n <div\n key={sectionName}\n className={cn(\n 'rounded-lg bg-muted p-4 transition-colors',\n hasEnabledField && !isEnabled && 'opacity-60'\n )}\n data-testid={testIdOr(testIds?.section?.(sectionName), {\n testId: `config-section-${sectionName}`,\n })}\n >\n <Collapsible open={isExpanded} onOpenChange={() => toggleSection(sectionName)}>\n {/* Section header with optional enabled toggle */}\n <div className=\"flex items-center justify-between\">\n <CollapsibleTrigger\n className=\"flex flex-1 items-center gap-2 text-left transition-opacity hover:opacity-80 pointer-coarse:min-h-11\"\n data-testid={testIdOr(testIds?.sectionToggle?.(sectionName), {\n testId: `config-section-toggle-${sectionName}`,\n })}\n >\n {isExpanded ? (\n <ChevronDown className=\"size-4 shrink-0\" />\n ) : (\n <ChevronRight className=\"size-4 shrink-0\" />\n )}\n <h3 className=\"text-left text-sm font-semibold text-foreground\">\n {sectionTitle}\n </h3>\n </CollapsibleTrigger>\n\n {/* Only show enabled toggle if this section has an ENABLED field in the schema */}\n {hasEnabledField && (\n <div className=\"flex items-center gap-2 ml-4\">\n <span className=\"text-sm text-muted-foreground\">\n {isEnabled ? l.enabled : l.disabled}\n </span>\n <Switch\n checked={isEnabled}\n onCheckedChange={(checked) => handleEnabledChange(sectionName, checked)}\n className=\"data-[state=unchecked]:bg-border\"\n data-testid={testIdOr(testIds?.sectionEnabled?.(sectionName), {\n testId: `config-section-enabled-toggle-${sectionName}`,\n })}\n />\n </div>\n )}\n </div>\n\n {/* Collapsible content with other fields */}\n {otherFields.length > 0 && (\n <CollapsibleContent className=\"pt-4\">\n <div className=\"space-y-4\">\n {otherFields.map(([fieldName, fieldSchema]) => (\n <div\n key={`${sectionName}-${fieldName}`}\n className={\n hasEnabledField && !isEnabled ? 'pointer-events-none opacity-50' : ''\n }\n >\n <ConfigField\n section={sectionName}\n fieldName={fieldName}\n fieldSchema={fieldSchema as SchemaProperty}\n value={values[sectionName]?.[fieldName]}\n onChange={onChange}\n renderModelSelect={renderModelSelect}\n labels={labels}\n testIds={testIds}\n />\n </div>\n ))}\n </div>\n </CollapsibleContent>\n )}\n </Collapsible>\n </div>\n )\n })}\n </div>\n )\n}\n\nexport const ConfigForm = memo(ConfigFormComponent)\n","import {\n forwardRef,\n type ButtonHTMLAttributes,\n type ReactNode,\n type Ref,\n type UIEventHandler,\n} from 'react'\nimport {\n Activity,\n ChevronDown,\n ChevronUp,\n Hourglass,\n Loader2,\n MoreVertical,\n Pause,\n} from 'lucide-react'\nimport {\n cn,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\n/** Every fixed string of the agent bar parts. Pass a partial `labels` to a part to reword. */\nexport interface AgentBarLabels {\n steps: string\n hideSteps: string\n showSteps: string\n /** Step toggle text: \"Step 3\". */\n stepN: (count: number) => string\n checkingIn: string\n agentActions: string\n queuedMessage: string\n statusUpdate: string\n}\n\nexport const DEFAULT_AGENT_BAR_LABELS: AgentBarLabels = {\n steps: 'Steps',\n hideSteps: 'Hide steps',\n showSteps: 'Show steps',\n stepN: (count) => `Step ${count}`,\n checkingIn: 'Checking in…',\n agentActions: 'Agent actions',\n queuedMessage: 'Queued message',\n statusUpdate: 'Status update',\n}\n\n/* ── Bar ──────────────────────────────────────────────────────────────────────────────────── */\n\nexport interface AgentBarProps {\n /** The turn is still running (tonal surface); a settled bar is a hairline outline. */\n isStreaming: boolean\n testId?: string\n /** Mirrors run-control state onto `data-control-state`. */\n controlState?: string\n /** Number of rows the steps drawer would show; 0 hides the toggle. */\n stepCount: number\n isDrawerOpen: boolean\n onToggleDrawer: () => void\n /** The steps list. Rendered in a drawer that opens UPWARD above the bar row. */\n drawer?: ReactNode\n drawerRef?: Ref<HTMLDivElement>\n onDrawerScroll?: UIEventHandler<HTMLDivElement>\n /** Left: what the agent is doing now ({@link AgentBarStatus}), or \"Answered in Xs\". */\n status: ReactNode\n /** Run totals (tool calls) shown beside the controls. */\n stats?: ReactNode\n /** Right: Stop and the actions menu. */\n controls?: ReactNode\n /** Under the bar row: queued message, status-update answer. */\n below?: ReactNode\n className?: string\n labels?: Partial<AgentBarLabels>\n /** Test id of the steps toggle. */\n stepsToggleTestId?: string\n}\n\n/**\n * The agent turn bar: current step + timer, steps drawer, stop and actions. One chrome for the\n * live bar above the composer and the settled bar inside a message, so it is learned once.\n */\nexport function AgentBar({\n isStreaming,\n testId,\n controlState,\n stepCount,\n isDrawerOpen,\n onToggleDrawer,\n drawer,\n drawerRef,\n onDrawerScroll,\n status,\n stats,\n controls,\n below,\n className,\n labels,\n stepsToggleTestId,\n}: AgentBarProps) {\n const l = { ...DEFAULT_AGENT_BAR_LABELS, ...labels }\n return (\n <div\n data-slot=\"agent-bar\"\n className={cn(\n 'overflow-hidden rounded-lg',\n isStreaming ? 'bg-muted' : 'border border-border bg-transparent',\n className\n )}\n data-testid={testId}\n data-control-state={controlState}\n >\n {isDrawerOpen && stepCount > 0 && (\n <div className=\"border-b border-border bg-background/60\">\n <p className=\"px-1.5 pt-2 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {l.steps}\n </p>\n <div ref={drawerRef} onScroll={onDrawerScroll} className=\"max-h-72 overflow-y-auto\">\n {drawer}\n </div>\n </div>\n )}\n\n <div className=\"flex items-center gap-2 px-1.5 py-2\">\n {stepCount > 0 && (\n <button\n type=\"button\"\n onClick={onToggleDrawer}\n className=\"flex shrink-0 items-center gap-1 rounded-md px-1.5 py-0.5 text-sm text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11\"\n aria-expanded={isDrawerOpen}\n aria-label={isDrawerOpen ? l.hideSteps : l.showSteps}\n data-testid={testIdOr(stepsToggleTestId, { testId: 'steps-toggle' })}\n >\n {isDrawerOpen ? <ChevronDown className=\"h-4 w-4\" /> : <ChevronUp className=\"h-4 w-4\" />}\n <span className=\"tabular-nums\">{l.stepN(stepCount)}</span>\n </button>\n )}\n {status}\n <div className=\"ml-auto flex items-center gap-2.5\">\n {stats}\n <div className=\"flex items-center gap-1\">{controls}</div>\n </div>\n </div>\n\n {below}\n </div>\n )\n}\n\n/* ── Status line variants ─────────────────────────────────────────────────────────────────── */\n\nexport type AgentBarState = 'pausing' | 'paused' | 'resuming'\n\nexport interface AgentBarStatusProps {\n /** Run-control state other than `running`. */\n state?: AgentBarState\n stateLabel?: string\n /** A status probe is awaiting the agent's answer. */\n isProbing?: boolean\n /** Waiting on delegated sub-agents: names who. */\n waitingLabel?: string\n /** Current step: icon + description. */\n stepLabel?: string\n stepIcon?: ReactNode\n /** Live elapsed-seconds ticker. */\n timer?: ReactNode\n labels?: Partial<AgentBarLabels>\n /** Per-variant test ids; defaults are the current ids. */\n testIds?: Partial<{ control: string; probe: string; waiting: string; step: string }>\n}\n\n/** The left-hand status line. Exactly one of its variants renders, in priority order. */\nexport function AgentBarStatus({\n state,\n stateLabel,\n isProbing,\n waitingLabel,\n stepLabel,\n stepIcon,\n timer,\n labels,\n testIds,\n}: AgentBarStatusProps) {\n const l = { ...DEFAULT_AGENT_BAR_LABELS, ...labels }\n if (state) {\n return (\n <span\n className={cn(\n 'flex items-center gap-1 rounded-md px-2 py-0.5 text-sm font-medium',\n state === 'paused' ? 'bg-ai-soft text-ai-ink' : 'text-muted-foreground'\n )}\n data-testid={testIdOr(testIds?.control, { testId: 'agent-control-status' })}\n >\n {state === 'paused' ? (\n <Pause className=\"h-3.5 w-3.5\" />\n ) : (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin text-yellow-text\" />\n )}\n {stateLabel}\n </span>\n )\n }\n if (isProbing) {\n return (\n <span\n className=\"flex items-center gap-1 text-sm font-medium text-muted-foreground\"\n data-testid={testIdOr(testIds?.probe, { testId: 'agent-probe-pending' })}\n >\n <Activity className=\"h-3.5 w-3.5 animate-pulse\" />\n {l.checkingIn}\n </span>\n )\n }\n if (waitingLabel) {\n return (\n <span\n className=\"flex min-w-0 items-center gap-1.5 text-sm text-muted-foreground\"\n data-testid={testIdOr(testIds?.waiting, { testId: 'agent-waiting-on-subagents' })}\n >\n <Hourglass className=\"h-4 w-4 shrink-0 text-yellow-text\" aria-hidden=\"true\" />\n <span className=\"truncate\">{waitingLabel}</span>\n {timer && <span className=\"shrink-0 tabular-nums text-muted-foreground\">{timer}</span>}\n </span>\n )\n }\n return (\n <span className=\"flex min-w-0 items-center gap-1.5 text-sm text-muted-foreground\">\n {stepIcon}\n <span\n className=\"truncate\"\n data-testid={testIdOr(testIds?.step, { testId: 'agent-current-step-description' })}\n >\n {stepLabel}\n </span>\n {timer && <span className=\"shrink-0 tabular-nums text-muted-foreground\">{timer}</span>}\n </span>\n )\n}\n\n/* ── Controls ─────────────────────────────────────────────────────────────────────────────── */\n\n/** Small icon button in the bar's control cluster (44px on touch). */\nexport const AgentBarIconButton = forwardRef<\n HTMLButtonElement,\n ButtonHTMLAttributes<HTMLButtonElement>\n>(function AgentBarIconButton({ className, type = 'button', ...rest }, ref) {\n return (\n <button\n ref={ref}\n type={type}\n data-slot=\"agent-bar-button\"\n className={cn(\n 'rounded-md p-1 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:p-3',\n className\n )}\n {...rest}\n />\n )\n})\n\nexport interface AgentBarMenuItem {\n id: string\n label: string\n icon?: ReactNode\n onSelect: () => void\n disabled?: boolean\n testId?: string\n}\n\n/** The ⋮ menu. Non-modal: the composer stays usable while it is open. */\nexport function AgentBarMenu({\n items,\n labels,\n testId = 'agent-control-menu',\n}: {\n items: ReadonlyArray<AgentBarMenuItem>\n labels?: Partial<AgentBarLabels>\n testId?: string\n}) {\n const l = { ...DEFAULT_AGENT_BAR_LABELS, ...labels }\n return (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <AgentBarIconButton title={l.agentActions} aria-label={l.agentActions} data-testid={testId}>\n <MoreVertical className=\"h-4 w-4\" />\n </AgentBarIconButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {items.map((item) => (\n <DropdownMenuItem\n key={item.id}\n onClick={item.onSelect}\n disabled={item.disabled}\n data-testid={item.testId}\n >\n {item.icon}\n {item.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\n/* ── Notes under the bar ──────────────────────────────────────────────────────────────────── */\n\n/** Wrapper for the notes under the bar row. */\nexport function AgentBarNotes({\n children,\n className,\n}: {\n children: ReactNode\n className?: string\n}) {\n return <div className={cn('mx-3 mb-2 space-y-1.5', className)}>{children}</div>\n}\n\nexport function AgentBarQueuedNote({\n text,\n isAcknowledged,\n labels,\n testId = 'agent-queued-message',\n}: {\n text: string\n isAcknowledged: boolean\n labels?: Partial<AgentBarLabels>\n testId?: string\n}) {\n const l = { ...DEFAULT_AGENT_BAR_LABELS, ...labels }\n return (\n <div\n className=\"flex min-w-0 items-start gap-2 rounded-md bg-background px-2.5 py-2\"\n data-testid={testId}\n >\n <Hourglass className=\"mt-0.5 h-3.5 w-3.5 shrink-0 text-yellow-text\" aria-hidden=\"true\" />\n <div className=\"min-w-0 flex-1\">\n <p\n className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\"\n data-queue-acknowledged={isAcknowledged}\n >\n {l.queuedMessage}\n </p>\n <p className=\"line-clamp-2 whitespace-pre-line text-sm text-foreground\" title={text}>\n {text}\n </p>\n </div>\n </div>\n )\n}\n\nexport function AgentBarProbeAnswer({\n answer,\n labels,\n testId = 'agent-probe-answer',\n}: {\n answer: string\n labels?: Partial<AgentBarLabels>\n testId?: string\n}) {\n const l = { ...DEFAULT_AGENT_BAR_LABELS, ...labels }\n return (\n <div className=\"rounded-md bg-background px-2.5 py-1.5\" data-testid={testId}>\n <p className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {l.statusUpdate}\n </p>\n <p className=\"mt-0.5 whitespace-pre-line text-sm text-foreground\">{answer}</p>\n </div>\n )\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { Check, Copy } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\n\nexport interface ConsentActionsLabels {\n deny: string\n allow: string\n loading: string\n}\n\nexport const DEFAULT_CONSENT_ACTIONS_LABELS: ConsentActionsLabels = {\n deny: 'Deny',\n allow: 'Allow',\n loading: 'Connecting…',\n}\n\nexport interface CopyableUrlLabels {\n copy: string\n copied: string\n}\n\nexport const DEFAULT_COPYABLE_URL_LABELS: CopyableUrlLabels = {\n copy: 'Copy to clipboard',\n copied: 'Copied',\n}\n\n/** Full-screen centered stage for a consent / authorization card. */\nexport function ConsentPage({\n children,\n className,\n testId,\n ...rest\n}: {\n children: ReactNode\n className?: string\n testId?: string\n} & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'className'>) {\n return (\n <div\n {...rest}\n className={cn('flex min-h-screen items-center justify-center bg-background p-6', className)}\n data-testid={testId}\n data-slot=\"consent-page\"\n >\n {children}\n </div>\n )\n}\n\nconst CARD_WIDTH = { sm: 'max-w-sm', md: 'max-w-md' } as const\n\n/** The grouping tile holding a consent flow's sections. */\nexport function ConsentCard({\n children,\n size = 'sm',\n className,\n ...rest\n}: {\n children: ReactNode\n size?: keyof typeof CARD_WIDTH\n className?: string\n} & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'className'>) {\n return (\n <div\n {...rest}\n className={cn('w-full rounded-lg bg-muted', CARD_WIDTH[size], className)}\n data-slot=\"consent-card\"\n >\n {children}\n </div>\n )\n}\n\n/** Icon + title + description block at the top of a card. */\nexport function ConsentHeader({\n icon,\n title,\n children,\n}: {\n /** Icon (or logo) shown above (default) or beside the title. */\n icon?: ReactNode\n title: ReactNode\n /** Description paragraph content. */\n children?: ReactNode\n}) {\n return (\n <div className=\"px-6 py-5\" data-slot=\"consent-header\">\n {icon && (\n <div className=\"mb-3 flex size-10 items-center justify-center rounded-lg bg-accent text-primary [&>svg]:size-5\">\n {icon}\n </div>\n )}\n <h1 className=\"text-xl font-semibold text-foreground\">{title}</h1>\n {children && <p className=\"mt-1 text-sm text-muted-foreground\">{children}</p>}\n </div>\n )\n}\n\n/** Titled section of a consent card (e.g. \"This will allow\"). */\nexport function ConsentSection({ title, children }: { title: string; children: ReactNode }) {\n return (\n <div className=\"px-6 py-4\" data-slot=\"consent-section\">\n <p className=\"mb-3 text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {title}\n </p>\n {children}\n </div>\n )\n}\n\n/** Checkmarked list of permissions. */\nexport function ConsentPermissionList({ items }: { items: ReactNode[] }) {\n return (\n <ul className=\"space-y-2 text-sm text-foreground\">\n {items.map((item, i) => (\n <li key={i} className=\"flex items-center gap-2\">\n <Check className=\"size-4 shrink-0 text-primary\" aria-hidden />\n {item}\n </li>\n ))}\n </ul>\n )\n}\n\nconst NOTICE_TONES = {\n error: 'bg-destructive/10 text-destructive',\n success: 'bg-green-bg text-green-text',\n warning: 'bg-yellow-bg text-yellow-text',\n} as const\n\n/** Tinted inline notice (no box border): error, success or warning. */\nexport function ConsentNotice({\n tone,\n title,\n children,\n className,\n}: {\n tone: keyof typeof NOTICE_TONES\n title?: string\n children?: ReactNode\n className?: string\n}) {\n return (\n <div\n role={tone === 'error' ? 'alert' : 'status'}\n className={cn('mx-6 mb-2 rounded-lg px-4 py-3 text-sm', NOTICE_TONES[tone], className)}\n data-slot=\"consent-notice\"\n >\n {title && <p className=\"font-medium\">{title}</p>}\n {children && <div className={title ? 'mt-1' : undefined}>{children}</div>}\n </div>\n )\n}\n\n/** Deny / Allow footer; Allow is the single primary action. */\nexport function ConsentActions({\n onDeny,\n onAllow,\n isLoading,\n denyLabel,\n allowLabel,\n loadingLabel,\n labels,\n}: {\n onDeny: () => void\n onAllow: () => void\n isLoading?: boolean\n denyLabel?: string\n allowLabel?: string\n loadingLabel?: string\n /** Bundle form of the three label props; the single-string props win. */\n labels?: Partial<ConsentActionsLabels>\n}) {\n const l = { ...DEFAULT_CONSENT_ACTIONS_LABELS, ...labels }\n return (\n <div className=\"flex gap-3 px-6 py-4\" data-slot=\"consent-actions\">\n <Button\n type=\"button\"\n variant=\"outline\"\n className=\"flex-1 pointer-coarse:h-11\"\n onClick={onDeny}\n disabled={isLoading}\n >\n {denyLabel ?? l.deny}\n </Button>\n <Button\n type=\"button\"\n className=\"flex-1 pointer-coarse:h-11\"\n onClick={onAllow}\n disabled={isLoading}\n >\n {isLoading ? (loadingLabel ?? l.loading) : (allowLabel ?? l.allow)}\n </Button>\n </div>\n )\n}\n\n/** Read-only URL with a copy button (clipboard handled by the caller). */\nexport function CopyableUrl({\n url,\n copied,\n onCopy,\n labels,\n}: {\n url: string\n copied: boolean\n onCopy: () => void\n labels?: Partial<CopyableUrlLabels>\n}) {\n const l = { ...DEFAULT_COPYABLE_URL_LABELS, ...labels }\n return (\n <div className=\"flex items-stretch gap-2\" data-slot=\"copyable-url\">\n <code className=\"flex-1 overflow-x-auto break-all rounded-lg bg-background px-3 py-2 text-xs text-foreground\">\n {url}\n </code>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"h-auto shrink-0 pointer-coarse:size-11\"\n onClick={onCopy}\n title={l.copy}\n aria-label={copied ? l.copied : l.copy}\n >\n {copied ? <Check className=\"size-4 text-primary\" /> : <Copy className=\"size-4\" />}\n </Button>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { ConsentCard } from './ConsentPage'\n\nconst MESSAGE_TONES = {\n error: { card: 'p-6', title: 'mb-2 text-destructive', body: 'text-muted-foreground' },\n warning: {\n card: 'bg-yellow-bg px-6 py-8',\n title: 'text-yellow-text',\n body: 'mt-2 text-yellow-text',\n },\n} as const\n\n/** A card that only says something (an invalid request, \"close this tab\"): title and a message. */\nexport function ConsentMessage({\n tone,\n title,\n children,\n}: {\n tone: keyof typeof MESSAGE_TONES\n title: string\n children: ReactNode\n}) {\n const t = MESSAGE_TONES[tone]\n return (\n <ConsentCard className={cn('text-center', t.card)}>\n <h1 className={cn('text-xl font-semibold', t.title)}>{title}</h1>\n <p className={cn('text-sm', t.body)}>{children}</p>\n </ConsentCard>\n )\n}\n\n/** Bulleted list of what is being agreed to; each item can carry bold lead-in text. */\nexport function ConsentBulletList({ items }: { items: ReactNode[] }) {\n return (\n <ul data-slot=\"consent-bullets\" className=\"mb-5 space-y-2 text-sm text-foreground\">\n {items.map((item, i) => (\n <li key={i} className=\"flex gap-2\">\n <span aria-hidden=\"true\">•</span>\n <span>{item}</span>\n </li>\n ))}\n </ul>\n )\n}\n\n/** Paragraph of a consent card: `body` explains, `footnote` is small print under an action. */\nexport function ConsentText({\n variant = 'body',\n children,\n}: {\n variant?: 'body' | 'footnote' | 'hint'\n children: ReactNode\n}) {\n return (\n <p\n data-slot=\"consent-text\"\n className={cn(\n 'text-muted-foreground',\n variant === 'body' && 'mb-5 text-sm',\n variant === 'footnote' && 'mt-3 text-center text-xs',\n variant === 'hint' && 'mt-3 text-xs'\n )}\n >\n {children}\n </p>\n )\n}\n\n/** Small print under the actions of a card, centred in the card's padding. */\nexport function ConsentFootnote({ children }: { children: ReactNode }) {\n return (\n <p data-slot=\"consent-footnote\" className=\"px-6 pb-4 text-center text-xs text-muted-foreground\">\n {children}\n </p>\n )\n}\n\n/** Emphasised lead-in inside running text (\"**Read files** — lets…\"). */\nexport function ConsentStrong({ children }: { children: ReactNode }) {\n return <span className=\"font-medium text-foreground\">{children}</span>\n}\n","import { useMemo, type ReactNode } from 'react'\nimport { ArrowLeft } from 'lucide-react'\nimport { Button, Input, Label } from '@arbidocs/react/ui'\nimport { MultiSelect } from '../../settings/MultiSelect'\nimport { formatRole } from '../../workspaces/workspace-roles'\n\n/** Every fixed string of the agent modal. */\nexport interface AuthorizeAgentLabels {\n editIntro: (agentName: string) => string\n mainIntro: string\n noAssistant: string\n connectExternal: string\n optional: string\n createdIntro: string\n email: string\n signingKey: string\n configure: string\n hideConfiguration: string\n done: string\n backToMain: string\n connectIntro: string\n name: string\n namePlaceholder: string\n nameHint: string\n workspaces: string\n workspacesPlaceholder: string\n roleTitle: string\n collaborator: string\n guest: string\n cancel: string\n create: string\n creating: string\n}\n\nexport const DEFAULT_AUTHORIZE_AGENT_LABELS: AuthorizeAgentLabels = {\n editIntro: (n) => `Configure what ${n} can do — tools, persona, and skills.`,\n mainIntro:\n 'Configure your assistant — the tools it can use, its persona, and which skills it can run.',\n noAssistant: 'No assistant is set up yet. You can connect an external agent below.',\n connectExternal: 'Connect an external agent',\n optional: '(optional)',\n createdIntro:\n 'Assistant created. Save this signing key — it is shown only once and cannot be recovered. It is the credential an external CLI agent uses to sign in as this assistant.',\n email: 'Email: ',\n signingKey: 'Signing key: ',\n configure: 'Configure',\n hideConfiguration: 'Hide configuration',\n done: 'Done',\n backToMain: 'Back to configuring your assistant',\n connectIntro:\n 'Connect an external agent: create a persistent agent with its own login and connect it to ARBI from another machine. Optional — most users just configure their assistant above.',\n name: 'Name',\n namePlaceholder: 'e.g. research-bot, qa-assistant',\n nameHint: \"Letters, digits, hyphens, underscores. Used in the agent's email address.\",\n workspaces: 'Workspaces',\n workspacesPlaceholder: 'Select workspaces to share...',\n roleTitle: 'Role in shared workspaces',\n collaborator: formatRole('collaborator'),\n guest: formatRole('guest'),\n cancel: 'Cancel',\n create: 'Create Assistant',\n creating: 'Creating...',\n}\n\nconst INTRO = 'text-sm text-muted-foreground'\nconst LINK =\n 'inline-flex items-center gap-1.5 text-xs text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11'\n\nfunction useLabels(labels?: Partial<AuthorizeAgentLabels>): AuthorizeAgentLabels {\n return useMemo(() => ({ ...DEFAULT_AUTHORIZE_AGENT_LABELS, ...labels }), [labels])\n}\n\nexport interface AgentEditViewProps {\n agentName: string\n /** The agent's config editor (host component: it owns the data). */\n config: ReactNode\n labels?: Partial<AuthorizeAgentLabels>\n}\n\n/** Edit variant: straight into the config editor of an existing agent. */\nexport function AgentEditView({ agentName, config, labels }: AgentEditViewProps) {\n const l = useLabels(labels)\n return (\n <div className=\"space-y-4\" data-testid=\"agent-edit-config\">\n <p className={INTRO}>{l.editIntro(agentName)}</p>\n {config}\n </div>\n )\n}\n\nexport interface AgentMainViewProps {\n /** The main assistant's config editor; omit when no assistant exists yet. */\n config?: ReactNode\n onConnectExternal: () => void\n labels?: Partial<AuthorizeAgentLabels>\n}\n\n/** Primary view: configure the main assistant; connecting an external agent is secondary. */\nexport function AgentMainView({ config, onConnectExternal, labels }: AgentMainViewProps) {\n const l = useLabels(labels)\n return (\n <div className=\"space-y-4\" data-testid=\"agent-main-config\">\n <p className={INTRO}>{l.mainIntro}</p>\n {config ?? <p className={`py-4 ${INTRO}`}>{l.noAssistant}</p>}\n <div className=\"border-t pt-3\">\n <button\n type=\"button\"\n onClick={onConnectExternal}\n className={LINK}\n data-testid=\"connect-external-agent-link\"\n >\n {l.connectExternal}\n <span className=\"opacity-70\">{l.optional}</span>\n </button>\n </div>\n </div>\n )\n}\n\nexport interface AgentCreatedViewProps {\n email: string\n signingKey: string\n /** Connection instructions (host component). */\n instructions: ReactNode\n /** The inline config editor, rendered while `isConfigOpen`. */\n config: ReactNode\n isConfigOpen: boolean\n onToggleConfig: () => void\n onDone: () => void\n labels?: Partial<AuthorizeAgentLabels>\n}\n\n/** After creating an external agent: the one-time signing key, instructions, optional config. */\nexport function AgentCreatedView({\n email,\n signingKey,\n instructions,\n config,\n isConfigOpen,\n onToggleConfig,\n onDone,\n labels,\n}: AgentCreatedViewProps) {\n const l = useLabels(labels)\n return (\n <div className=\"space-y-4\">\n <p className={INTRO}>{l.createdIntro}</p>\n\n <div className=\"space-y-2 rounded-md bg-muted p-4 font-mono text-sm\">\n <div>\n <span className=\"text-muted-foreground\">{l.email}</span>\n <span className=\"select-all font-semibold\">{email}</span>\n </div>\n <div className=\"break-all\">\n <span className=\"text-muted-foreground\">{l.signingKey}</span>\n <span className=\"select-all font-semibold\">{signingKey}</span>\n </div>\n </div>\n\n {instructions}\n\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" onClick={onToggleConfig} data-testid=\"configure-agent-button\">\n {isConfigOpen ? l.hideConfiguration : l.configure}\n </Button>\n <Button onClick={onDone}>{l.done}</Button>\n </div>\n\n {/* Revealed inline: no nested dialog. */}\n {isConfigOpen && <div className=\"border-t pt-4\">{config}</div>}\n </div>\n )\n}\n\nexport type AgentWorkspaceRole = 'collaborator' | 'guest'\n\nexport interface AgentCreateViewProps {\n name: string\n onNameChange: (name: string) => void\n workspaces: { id: string; name: string }[]\n selectedWorkspaces: string[]\n onSelectedWorkspacesChange: (ids: string[]) => void\n role: AgentWorkspaceRole\n onRoleChange: (role: AgentWorkspaceRole) => void\n isSubmitting: boolean\n onBack: () => void\n onCancel: () => void\n onCreate: () => void\n labels?: Partial<AuthorizeAgentLabels>\n}\n\n/** Form to create an external agent: name, optional workspaces to share, role. */\nexport function AgentCreateView({\n name,\n onNameChange,\n workspaces,\n selectedWorkspaces,\n onSelectedWorkspacesChange,\n role,\n onRoleChange,\n isSubmitting,\n onBack,\n onCancel,\n onCreate,\n labels,\n}: AgentCreateViewProps) {\n const l = useLabels(labels)\n return (\n <div className=\"space-y-5\">\n <button type=\"button\" onClick={onBack} className={LINK} data-testid=\"back-to-main-config\">\n <ArrowLeft className=\"size-3.5\" />\n {l.backToMain}\n </button>\n <p className={INTRO}>{l.connectIntro}</p>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"agentName\" className=\"text-sm font-medium\">\n {l.name} <span className=\"text-destructive\">*</span>\n </Label>\n <Input\n id=\"agentName\"\n placeholder={l.namePlaceholder}\n value={name}\n onChange={(e) => onNameChange(e.target.value)}\n />\n <p className={INTRO}>{l.nameHint}</p>\n </div>\n\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium\">\n {l.workspaces} <span className=\"font-normal text-muted-foreground\">{l.optional}</span>\n </Label>\n <MultiSelect\n data={workspaces.map((ws) => ({ label: ws.name, value: ws.id }))}\n value={selectedWorkspaces}\n onChange={onSelectedWorkspacesChange}\n placeholder={l.workspacesPlaceholder}\n searchable={workspaces.length > 5}\n clearable\n size=\"sm\"\n />\n </div>\n\n {selectedWorkspaces.length > 0 && (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium\">{l.roleTitle}</Label>\n <div className=\"flex gap-2\">\n {(['collaborator', 'guest'] as const).map((r) => (\n <Button\n key={r}\n variant={role === r ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => onRoleChange(r)}\n >\n {l[r]}\n </Button>\n ))}\n </div>\n </div>\n )}\n\n <div className=\"flex justify-end gap-2 pt-2\">\n <Button variant=\"outline\" onClick={onCancel}>\n {l.cancel}\n </Button>\n <Button onClick={onCreate} disabled={!name.trim() || isSubmitting}>\n {isSubmitting ? l.creating : l.create}\n </Button>\n </div>\n </div>\n )\n}\n"]}
|