@arbidocs/blocks 0.5.50 → 0.5.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +22 -0
  2. package/dist/{ConnectedCallDock-5OLBZED2.js → ConnectedCallDock-7NYH6DKB.js} +6 -6
  3. package/dist/{ConnectedCallDock-5OLBZED2.js.map → ConnectedCallDock-7NYH6DKB.js.map} +1 -1
  4. package/dist/{ConnectedCallDock-GHJTVUSQ.cjs → ConnectedCallDock-NBEAQYTJ.cjs} +7 -7
  5. package/dist/{ConnectedCallDock-GHJTVUSQ.cjs.map → ConnectedCallDock-NBEAQYTJ.cjs.map} +1 -1
  6. package/dist/{ConnectedCallRoom-SSSKBQA7.js → ConnectedCallRoom-CUV5VWGU.js} +6 -6
  7. package/dist/{ConnectedCallRoom-SSSKBQA7.js.map → ConnectedCallRoom-CUV5VWGU.js.map} +1 -1
  8. package/dist/{ConnectedCallRoom-GVNZ3S6R.cjs → ConnectedCallRoom-WRWKPC7R.cjs} +7 -7
  9. package/dist/{ConnectedCallRoom-GVNZ3S6R.cjs.map → ConnectedCallRoom-WRWKPC7R.cjs.map} +1 -1
  10. package/dist/agents/index.cjs +355 -343
  11. package/dist/agents/index.js +3 -3
  12. package/dist/agents/tasks/WorkflowThreadStrip.d.ts +2 -1
  13. package/dist/agents/workflows/ProgressChevron.d.ts +37 -0
  14. package/dist/agents/workflows/StepBarFrame.d.ts +5 -2
  15. package/dist/agents/workflows/index.d.ts +1 -0
  16. package/dist/agents/workflows/stepWindow.d.ts +9 -0
  17. package/dist/calls/index.cjs +2 -2
  18. package/dist/calls/index.js +2 -2
  19. package/dist/chat/index.cjs +80 -80
  20. package/dist/chat/index.js +3 -3
  21. package/dist/{chunk-JGFBC66V.js → chunk-2J34E5AH.js} +3 -3
  22. package/dist/{chunk-JGFBC66V.js.map → chunk-2J34E5AH.js.map} +1 -1
  23. package/dist/{chunk-RTS3B2W7.cjs → chunk-2QV2SCEB.cjs} +5 -5
  24. package/dist/{chunk-RTS3B2W7.cjs.map → chunk-2QV2SCEB.cjs.map} +1 -1
  25. package/dist/{chunk-YRORPDIY.js → chunk-3YJZGYSL.js} +3 -3
  26. package/dist/{chunk-YRORPDIY.js.map → chunk-3YJZGYSL.js.map} +1 -1
  27. package/dist/{chunk-IQ3VDTR7.js → chunk-42UKJPIQ.js} +3 -3
  28. package/dist/{chunk-IQ3VDTR7.js.map → chunk-42UKJPIQ.js.map} +1 -1
  29. package/dist/{chunk-TQYEHARI.cjs → chunk-AAHLGSSR.cjs} +5 -5
  30. package/dist/{chunk-TQYEHARI.cjs.map → chunk-AAHLGSSR.cjs.map} +1 -1
  31. package/dist/{chunk-IOPGY3IP.cjs → chunk-AEG44LPK.cjs} +23 -23
  32. package/dist/{chunk-IOPGY3IP.cjs.map → chunk-AEG44LPK.cjs.map} +1 -1
  33. package/dist/{chunk-THNTNAYI.js → chunk-CHEU7XI5.js} +3 -2
  34. package/dist/chunk-CHEU7XI5.js.map +1 -0
  35. package/dist/{chunk-O4LORAFC.js → chunk-EIJHL6ZX.js} +135 -100
  36. package/dist/chunk-EIJHL6ZX.js.map +1 -0
  37. package/dist/{chunk-7G4N2HP7.js → chunk-EJVM5IVT.js} +4 -4
  38. package/dist/{chunk-7G4N2HP7.js.map → chunk-EJVM5IVT.js.map} +1 -1
  39. package/dist/{chunk-7QJNWQ7O.js → chunk-GXNHLM5R.js} +3 -3
  40. package/dist/{chunk-7QJNWQ7O.js.map → chunk-GXNHLM5R.js.map} +1 -1
  41. package/dist/{chunk-EZLZ3MDU.cjs → chunk-JWYWP5EE.cjs} +3 -2
  42. package/dist/chunk-JWYWP5EE.cjs.map +1 -0
  43. package/dist/{chunk-JYR55F3P.cjs → chunk-K6T255ST.cjs} +211 -173
  44. package/dist/chunk-K6T255ST.cjs.map +1 -0
  45. package/dist/{chunk-4FIYA764.cjs → chunk-KKAKZSCR.cjs} +9 -9
  46. package/dist/{chunk-4FIYA764.cjs.map → chunk-KKAKZSCR.cjs.map} +1 -1
  47. package/dist/{chunk-MBGV6JHG.cjs → chunk-KYOVVXAS.cjs} +4 -4
  48. package/dist/{chunk-MBGV6JHG.cjs.map → chunk-KYOVVXAS.cjs.map} +1 -1
  49. package/dist/{chunk-PP3LWBIH.js → chunk-TFF3NMPV.js} +3 -3
  50. package/dist/{chunk-PP3LWBIH.js.map → chunk-TFF3NMPV.js.map} +1 -1
  51. package/dist/{chunk-226ILMHW.cjs → chunk-W3AYIOK2.cjs} +11 -11
  52. package/dist/{chunk-226ILMHW.cjs.map → chunk-W3AYIOK2.cjs.map} +1 -1
  53. package/dist/connect/index.cjs +351 -294
  54. package/dist/connect/index.cjs.map +1 -1
  55. package/dist/connect/index.js +66 -9
  56. package/dist/connect/index.js.map +1 -1
  57. package/dist/connection/files/upload/ConnectedUpload.d.ts +3 -1
  58. package/dist/connection/files/upload/ProcessingSettingsFooter.d.ts +31 -0
  59. package/dist/index.cjs +486 -474
  60. package/dist/index.js +6 -6
  61. package/dist/studio/index.cjs +4 -4
  62. package/dist/studio/index.js +3 -3
  63. package/dist/workflow-canvas/WorkflowCanvas.d.ts +2 -0
  64. package/dist/workflow-canvas/index.cjs +54 -52
  65. package/dist/workflow-canvas/index.cjs.map +1 -1
  66. package/dist/workflow-canvas/index.js +5 -3
  67. package/dist/workflow-canvas/index.js.map +1 -1
  68. package/node_modules/@arbidocs/coedit/package.json +1 -1
  69. package/package.json +5 -5
  70. package/src/blocks.css +143 -0
  71. package/src/workflow-canvas/canvas.css +46 -27
  72. package/dist/chunk-EZLZ3MDU.cjs.map +0 -1
  73. package/dist/chunk-JYR55F3P.cjs.map +0 -1
  74. package/dist/chunk-O4LORAFC.js.map +0 -1
  75. package/dist/chunk-THNTNAYI.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/EntityChip.tsx","../src/agents/workflows/scopeRender.tsx","../src/agents/workflows/planSteps.ts","../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/catalogue/seed.tsx","../src/agents/workflows/catalogue/word-workflows.ts","../src/agents/workflows/catalogue/registry.ts","../src/agents/workflows/catalogue/workflow-usage.ts","../src/agents/workflows/catalogue/annotation-name.ts","../src/agents/workflows/WorkflowStepAction.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/skills/SkillParts.tsx","../src/agents/skills/SkillForms.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/rrule.ts","../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/TaskInbox.tsx","../src/agents/tasks/ThreadStatusLine.tsx","../src/agents/tasks/ConversationListView.tsx","../src/agents/tasks/TaskStartDialog.tsx","../src/agents/tasks/PillSelect.tsx","../src/agents/tasks/taskRequest.ts","../src/agents/tasks/DueDateMenu.tsx","../src/agents/tasks/NewThreadDialog.tsx","../src/agents/tasks/TaskActivityTimeline.tsx","../src/agents/tasks/TaskActivityDialog.tsx","../src/agents/tasks/TaskFlow.tsx","../src/agents/tasks/ThreadLauncher.tsx","../src/agents/tasks/WorkflowRunStatus.tsx","../src/agents/tasks/WorkflowThreadStrip.tsx","../src/agents/tasks/linkedRuns.ts","../src/agents/tasks/compact-thread-activity.ts","../src/agents/tasks/TaskThreadChip.tsx","../src/agents/tasks/TaskRunsDialog.tsx","../src/agents/tasks/TasksChrome.tsx","../src/agents/tasks/taskComposerTypes.ts","../src/agents/tasks/WorkflowComposer.tsx","../src/agents/tasks/TaskComposer.tsx","../src/agents/tasks/ThreadNotifyDialog.tsx","../src/agents/tasks/ConversationTurnSpeaker.tsx","../src/agents/runs/step-presentation.ts","../src/agents/tasks/AssistantEntity.tsx","../src/agents/tasks/taskHelpers.ts","../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/runs/AgentSteps.tsx","../src/agents/runs/SubagentRoster.tsx","../src/agents/approvals/ConsentPage.tsx","../src/agents/approvals/ConsentParts.tsx","../src/agents/approvals/AuthorizeAgentParts.tsx"],"names":["jsx","text","act","useRef","useState","useEffect","jsxs","cn","Loader2","Fragment","compact","Button","FileText","X","Check","Hourglass","Clock","Textarea","useMemo","Label","Sparkles","Telescope","Wand2","useCallback","Globe","Tooltip","TooltipTrigger","TooltipContent","Input","Copy","ListChecks","Trash2","formatElapsed","minutes","AlertTriangle","StatusIcon","pad2","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","MessageSquare","cache","DropdownMenu","DropdownMenuTrigger","DropdownMenuContent","DropdownMenuItem","CornerDownRight","Pencil","ChevronRight","KeyRound","CheckCheck","ChevronDown","ListTodo","Plus","Workflow","MoreHorizontal","CircleDashed","AlertCircle","VisibilityToggle","Popover","PopoverTrigger","EntityPill","PopoverContent","ICONS","Play","Lock","CheckCircle2","RotateCcw","PenLine","CornerUpLeft","NO_PEOPLE","toMessageMentions","extractMentions","ArrowUpRight","CalendarClock","Flag","History","GLYPH","DialogClose","Bot","Zap","id","formatDue","List","Image","Terminal","Languages","Brain","UserEntity","ARBI_MARK_SRC","value","Switch","memo","AgentBarIconButton","Square","TriangleAlert","ArrowLeft"],"mappings":"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","file":"chunk-O4LORAFC.js","sourcesContent":["import type { MouseEvent, ReactNode } from 'react'\nimport { EntityPill, Tooltip, TooltipContent, TooltipTrigger, cn } from '@arbidocs/react/ui'\n\nexport interface EntityChipProps {\n /** `pill`: glyph + label in an EntityPill; `icon`: the bare glyph (tooltip shows the details). */\n variant?: 'icon' | 'pill'\n icon: ReactNode\n label: string\n /** Second line of the icon variant's tooltip (e.g. \"Shared\", a model name). */\n detail?: ReactNode\n /** Tooltip of the pill variant (e.g. \"Open conversation\"). */\n pillTooltip?: ReactNode\n /** Tooltip of the icon variant; defaults to label + detail. Set false to drop it. */\n showTooltip?: boolean\n href?: string\n onClick?: (e: MouseEvent) => void\n size?: 'sm' | 'base'\n labelMaxWidth?: string\n className?: string\n testId?: string\n}\n\n/**\n * The shared shape of an entity reference (conversation, message, assistant ...): a bare glyph\n * with a tooltip, or a pill with the label. Clickable when it has `onClick` or `href`.\n */\nexport function EntityChip({\n variant = 'pill',\n icon,\n label,\n detail,\n pillTooltip,\n showTooltip = true,\n href,\n onClick,\n size = 'sm',\n labelMaxWidth,\n className,\n testId,\n}: EntityChipProps) {\n if (variant === 'icon') {\n const glyph = (\n <span\n data-slot=\"entity-chip\"\n className={cn('inline-flex items-center', (onClick || href) && 'cursor-pointer', className)}\n onClick={onClick}\n data-testid={testId}\n >\n {href ? (\n <a href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n {icon}\n </a>\n ) : (\n icon\n )}\n </span>\n )\n if (!showTooltip) return glyph\n return (\n <Tooltip>\n <TooltipTrigger className=\"inline-flex\">{glyph}</TooltipTrigger>\n <TooltipContent side=\"bottom\">\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"font-medium\">{label}</span>\n {detail && <span className=\"text-xs text-muted-foreground\">{detail}</span>}\n </div>\n </TooltipContent>\n </Tooltip>\n )\n }\n\n return (\n <EntityPill\n icon={icon}\n label={label}\n size={size}\n shape=\"rounded\"\n href={href}\n onClick={onClick}\n tooltipContent={pillTooltip}\n labelMaxWidth={labelMaxWidth}\n className={className}\n data-testid={testId}\n />\n )\n}\n","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 stepped workflow as the plan a run thread carries (`TaskPlan.steps`) and back. The server reads\n * the structure to start each step: an agent step runs a skill (`skill` + `inputs` templates) or a\n * prompt (filled from the run's inputs as it starts); everything only a client shows (form fields,\n * icon, canvas position, which workflow a step names) rides along in `ui`.\n */\n\nimport type { components } from '@arbidocs/client'\nimport {\n canAssign,\n composeStepPrompt,\n runFields,\n workflowSteps,\n type StepComposeOptions,\n} from './run'\nimport type {\n WorkflowAction,\n WorkflowAgentStep,\n WorkflowAssignee,\n WorkflowDefinition,\n WorkflowDocumentRef,\n WorkflowField,\n WorkflowInputs,\n WorkflowSignal,\n WorkflowSignalWhen,\n WorkflowStep,\n} from './types'\n\nexport type TaskPlanStep = components['schemas']['TaskPlanStep']\n/** A step's signal as the plan carries it (plaintext config, like the step's prompt). */\ntype StepSignal = components['schemas']['StepSignal']\ntype StepAssignee = components['schemas']['StepAssignee']\ntype StepField = components['schemas']['StepField']\ntype PlanDocumentRef = string | components['schemas']['StepDocumentRef']\ntype PlanAction = NonNullable<TaskPlanStep['action']>\nexport type TaskPlan = components['schemas']['TaskPlan']\n\n/* ------------------------- people, documents, actions ------------------------- */\n\nexport function toPlanAssignee(a: WorkflowAssignee): StepAssignee {\n if ('user' in a) return { user: a.user }\n if ('input' in a) return { input: a.input }\n if ('runOwner' in a) return { run_owner: true }\n return { project_lead: true }\n}\n\nexport function fromPlanAssignee(a: StepAssignee | null | undefined): WorkflowAssignee | undefined {\n if (!a) return undefined\n if (a.user) return { user: a.user }\n if (a.input) return { input: a.input }\n if (a.run_owner) return { runOwner: true }\n if (a.project_lead) return { projectLead: true }\n return undefined\n}\n\nexport function toPlanDocumentRef(ref: WorkflowDocumentRef): PlanDocumentRef {\n if ('step' in ref) return { step: ref.step }\n if ('input' in ref) return { input: ref.input }\n return ref.id.trim()\n}\n\nexport function fromPlanDocumentRef(\n ref: PlanDocumentRef | null | undefined\n): WorkflowDocumentRef | undefined {\n if (!ref) return undefined\n if (typeof ref === 'string') return { id: ref }\n if (ref.step) return { step: ref.step }\n if (ref.input) return { input: ref.input }\n return undefined\n}\n\nconst docRefs = (refs: WorkflowDocumentRef[] | undefined): PlanDocumentRef[] =>\n (refs ?? []).map(toPlanDocumentRef)\nconst fromDocRefs = (refs: PlanDocumentRef[] | null | undefined): WorkflowDocumentRef[] =>\n (refs ?? []).flatMap((r) => {\n const ref = fromPlanDocumentRef(r)\n return ref ? [ref] : []\n })\n\nfunction toPlanAction(a: WorkflowAction): PlanAction {\n switch (a.type) {\n case 'sign':\n return {\n type: 'sign',\n // The builder may hold a signature step whose document is not chosen yet: the server\n // refuses it, and the builder says so before saving (`stepConfigProblems`).\n document: a.document ? toPlanDocumentRef(a.document) : '',\n signers: a.signers.map(toPlanAssignee),\n ...(a.message?.trim() ? { message: a.message.trim() } : {}),\n ...(a.expiresAfterHours ? { expires_after_hours: a.expiresAfterHours } : {}),\n }\n case 'email_draft':\n return {\n type: 'email_draft',\n to: a.to.map((t) => t.trim()).filter(Boolean),\n cc: (a.cc ?? []).map((t) => t.trim()).filter(Boolean),\n subject: a.subject,\n body_template: a.body,\n attachments: docRefs(a.attachments),\n }\n case 'tabular_review':\n return {\n type: 'tabular_review',\n tags: a.tags,\n documents: Array.isArray(a.documents) ? docRefs(a.documents) : a.documents,\n overwrite: !!a.overwrite,\n }\n }\n}\n\nfunction fromPlanAction(a: PlanAction | null | undefined): WorkflowAction {\n switch (a?.type) {\n case 'sign':\n return {\n type: 'sign',\n document: fromPlanDocumentRef(a.document),\n signers: (a.signers ?? []).flatMap((s) => {\n const one = fromPlanAssignee(s)\n return one ? [one] : []\n }),\n ...(a.message ? { message: a.message } : {}),\n ...(a.expires_after_hours ? { expiresAfterHours: a.expires_after_hours } : {}),\n }\n case 'email_draft':\n return {\n type: 'email_draft',\n to: a.to ?? [],\n ...(a.cc?.length ? { cc: a.cc } : {}),\n subject: a.subject ?? '',\n body: a.body_template ?? '',\n ...(a.attachments?.length ? { attachments: fromDocRefs(a.attachments) } : {}),\n }\n case 'tabular_review':\n return {\n type: 'tabular_review',\n tags: a.tags ?? [],\n documents: Array.isArray(a.documents)\n ? fromDocRefs(a.documents)\n : (a.documents ?? 'run_uploads'),\n ...(a.overwrite ? { overwrite: true } : {}),\n }\n default:\n // A plan from a newer server with an action this client does not know: shown as a review.\n return { type: 'tabular_review', tags: [], documents: 'run_uploads' }\n }\n}\n\n/** A field as a step's `fields` carries it (what completing the step is checked against). */\nfunction toStepField(f: WorkflowField): StepField {\n return {\n name: f.name,\n type: f.type,\n label: f.label,\n required: !!f.required,\n ...(f.options ? { options: f.options.map((o) => ({ value: o.value, label: o.label })) } : {}),\n ...(f.min !== undefined ? { min: f.min } : {}),\n ...(f.max !== undefined ? { max: f.max } : {}),\n } as StepField\n}\n\n/** What a step keeps for clients only (the server stores it as plain data). */\ninterface StepUi {\n description?: string\n icon?: string\n commit?: boolean\n next_label?: string\n fields?: WorkflowField[]\n required?: boolean\n accept?: string\n hint?: string\n output?: 'answer' | 'artifact'\n instructions?: string\n /** The skill or workflow an agent step names, and its input templates (the builder edits these). */\n workflow?: string\n with?: Record<string, string>\n prompt_template?: string\n position?: { x: number; y: number }\n}\n\nconst compact = <T extends object>(o: T): T =>\n Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined && v !== '')) as T\n\nexport interface ToPlanOptions extends StepComposeOptions {\n /**\n * The run's inputs when it starts: prompts are composed with them. Fields not given yet (or\n * absent altogether, saving a workflow to run later) keep `{{field}}` placeholders, which the\n * server fills from the run's inputs.\n */\n inputs?: WorkflowInputs\n}\n\n/** Each run field as its own `{{name}}` placeholder: composing with these keeps the template. */\nfunction placeholders(workflow: WorkflowDefinition): WorkflowInputs {\n return Object.fromEntries(runFields(workflow).map((f) => [f.name, `{{${f.name}}}`]))\n}\n\nfunction agentStep(\n workflow: WorkflowDefinition,\n step: WorkflowAgentStep,\n options: ToPlanOptions\n): Pick<TaskPlanStep, 'skill' | 'inputs' | 'prompt'> {\n const target = step.workflow ? options.resolveWorkflow?.(step.workflow) : undefined\n // A server skill: the server runs the skill itself with the step's inputs.\n if (target?.skill) return { skill: target.skill, inputs: step.with ?? {}, prompt: null }\n // A field still blank when the run starts (a later form fills it) keeps its placeholder, so the\n // server fills it from the run's inputs as the step starts.\n const given = Object.entries(options.inputs ?? {}).filter(\n ([, v]) => v !== undefined && v !== null && v !== ''\n )\n const inputs = { ...placeholders(workflow), ...Object.fromEntries(given) }\n return { skill: null, inputs: null, prompt: composeStepPrompt(workflow, step, inputs, options) }\n}\n\n/** The plan steps a run thread (or a saved workflow) carries for `workflow`. */\nexport function toPlanSteps(\n workflow: WorkflowDefinition,\n options: ToPlanOptions = {}\n): TaskPlanStep[] {\n const layout = workflow.run.kind === 'steps' ? workflow.run.layout : undefined\n return workflowSteps(workflow).map((step) => {\n const ui: StepUi = compact({\n description: step.description,\n icon: step.icon,\n commit: step.commit,\n next_label: step.nextLabel,\n position: layout?.[step.id],\n ...(step.kind === 'form' ? { fields: step.inputs } : {}),\n ...(step.kind === 'upload'\n ? { required: step.required, accept: step.accept, hint: step.hint }\n : {}),\n ...(step.kind === 'review'\n ? { instructions: step.instructions, fields: step.fields?.length ? step.fields : undefined }\n : {}),\n ...(step.kind === 'agent'\n ? {\n output: step.output,\n workflow: step.workflow,\n with: step.with,\n prompt_template: step.run?.kind === 'prompt' ? step.run.promptTemplate : undefined,\n }\n : {}),\n })\n return {\n id: step.id,\n title: step.title,\n kind: step.kind,\n after: step.after ?? null,\n branch: step.kind === 'agent' && !!step.branch,\n requires_files: false,\n ui: ui as Record<string, unknown>,\n // An unfinished signal (still being typed) is not saved: the server would refuse it.\n ...(step.signals?.some((s) => !isIncompleteSignal(s))\n ? { signals: step.signals.filter((s) => !isIncompleteSignal(s)).map(toPlanSignal) }\n : {}),\n ...(step.assignee && canAssign(step) ? { assignee: toPlanAssignee(step.assignee) } : {}),\n ...(step.remindAfterHours && canAssign(step)\n ? { remind_after_hours: step.remindAfterHours }\n : {}),\n // A review's fields are what approving it is checked against (the server's `fields`).\n ...(step.kind === 'review' && step.fields?.length\n ? { fields: step.fields.map(toStepField) }\n : {}),\n ...(step.kind === 'action' ? { action: toPlanAction(step.action) } : {}),\n ...(step.kind === 'agent' && step.editDocument && !step.branch\n ? { edit_document: toPlanDocumentRef(step.editDocument) }\n : {}),\n ...(step.kind === 'agent'\n ? agentStep(workflow, step, options)\n : { skill: null, inputs: null, prompt: null }),\n }\n })\n}\n\nfunction toPlanSignal(signal: WorkflowSignal): StepSignal {\n return signal.when ? { name: signal.name, when: signal.when } : { name: signal.name }\n}\n\n/** A signal the builder holds that is not finished yet: no name, or a condition with nothing in it. */\nexport function isIncompleteSignal(signal: WorkflowSignal): boolean {\n const when = signal.when\n if (!signal.name.trim()) return true\n if (!when) return false\n if ('field' in when) return !when.field || String(when.equals).trim() === ''\n if ('contains' in when) return !when.contains.trim()\n if ('matches' in when) return !when.matches.trim()\n return false\n}\n\n/** A plan's signal back as the builder's: exactly one condition shape, or none. */\nfunction fromPlanSignal(signal: StepSignal): WorkflowSignal {\n const w = signal.when\n const when: WorkflowSignalWhen | undefined =\n w?.field != null && w.equals != null\n ? { field: w.field, equals: w.equals }\n : w?.contains != null\n ? { contains: w.contains }\n : w?.matches != null\n ? { matches: w.matches }\n : w?.approved\n ? { approved: true }\n : undefined\n return when ? { name: signal.name, when } : { name: signal.name }\n}\n\n/** Steps from a run's (or a saved workflow's) plan: what the runner, the builder and the top bar show. */\nexport function fromPlanSteps(steps: TaskPlanStep[] | null | undefined): WorkflowStep[] {\n return (steps ?? []).map((p): WorkflowStep => {\n const ui = (p.ui ?? {}) as StepUi\n const base = {\n id: p.id,\n title: p.title,\n description: ui.description,\n icon: ui.icon,\n commit: ui.commit,\n nextLabel: ui.next_label,\n ...(p.after != null ? { after: p.after } : {}),\n ...(p.signals?.length ? { signals: p.signals.map(fromPlanSignal) } : {}),\n ...(fromPlanAssignee(p.assignee) ? { assignee: fromPlanAssignee(p.assignee) } : {}),\n ...(p.remind_after_hours ? { remindAfterHours: p.remind_after_hours } : {}),\n }\n switch (p.kind) {\n case 'form':\n return { ...base, kind: 'form', inputs: ui.fields ?? [] }\n case 'upload':\n return { ...base, kind: 'upload', required: ui.required, accept: ui.accept, hint: ui.hint }\n case 'review':\n return {\n ...base,\n kind: 'review',\n instructions: ui.instructions,\n // The client's copy of the fields (labels, options) when it kept one, else the plan's.\n ...(ui.fields?.length\n ? { fields: ui.fields }\n : p.fields?.length\n ? { fields: p.fields.map(fromStepField) }\n : {}),\n }\n case 'action':\n return { ...base, kind: 'action', action: fromPlanAction(p.action) }\n default: {\n const promptTemplate = ui.prompt_template ?? p.prompt ?? undefined\n return {\n ...base,\n kind: 'agent',\n workflow: ui.workflow ?? p.skill ?? undefined,\n with: ui.with ?? (p.inputs as Record<string, string> | null) ?? undefined,\n run:\n !ui.workflow && !p.skill && promptTemplate\n ? { kind: 'prompt', promptTemplate }\n : undefined,\n output: ui.output,\n branch: p.branch || undefined,\n ...(fromPlanDocumentRef(p.edit_document)\n ? { editDocument: fromPlanDocumentRef(p.edit_document) }\n : {}),\n }\n }\n }\n })\n}\n\n/** Where each step sits on the builder's canvas, as the plan keeps it. */\nexport function layoutFromPlanSteps(\n steps: TaskPlanStep[] | null | undefined\n): Record<string, { x: number; y: number }> | undefined {\n const entries = (steps ?? []).flatMap((p) => {\n const position = (p.ui as StepUi | null | undefined)?.position\n return position ? [[p.id, position] as const] : []\n })\n return entries.length ? Object.fromEntries(entries) : undefined\n}\n\nconst FIELD_TYPES = new Set<string>([\n 'text',\n 'longtext',\n 'boolean',\n 'select',\n 'number',\n 'date',\n 'scope',\n 'documents',\n 'person',\n])\n\nfunction fromStepField(f: StepField): WorkflowField {\n return {\n name: f.name,\n type: (FIELD_TYPES.has(f.type) ? f.type : 'text') as WorkflowField['type'],\n label: f.label ?? f.name,\n ...(f.required ? { required: true } : {}),\n ...(f.options?.length\n ? { options: f.options.map((o) => ({ value: o.value, label: o.label ?? o.value })) }\n : {}),\n ...(f.min != null ? { min: f.min } : {}),\n ...(f.max != null ? { max: f.max } : {}),\n }\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/** A level's room beyond its label: badge, padding, gaps and the shortest line. */\nconst LEVEL_CHROME_PX = 60\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 * Steps look as they do on the builder's canvas (`StepChip`): each kind in its own colour, and the\n * line out of a finished step in that step's colour.\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 {\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 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 on a side that hides steps. */\nconst ARROWS_PX = 56\nconst HIDDEN_PX = 40\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 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 let span = width > 0 ? 1 : 3\n if (!narrow && width > 0)\n for (let k = levels.length; 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=\"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=\"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 <StepChip\n key={s.id}\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 )\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 {win.start === 0 && leading}\n {overflow('before', win.hiddenBefore)}\n <ol className=\"flex min-w-0 flex-[1_1_auto] items-center gap-1\">\n {win.visible.map((level, i) => (\n <li\n key={level.steps.map((s) => s.id).join('+')}\n // Levels take their names' room and the connectors what is left. Short of room, the\n // connectors give theirs first (down to a stub), then the \"Working\" pills, then the\n // other levels' names, then what follows the current name (\"Waiting for …\"), and only\n // then is the current name wrapped and cut — never below a readable start. Flex shares\n // a shortage in proportion, so the other levels shrink a million times harder: even a\n // sliver taken from the current name would show an ellipsis. (The current level keeps\n // a factor of 1: factors summing under 1 would leave part of the shortage unabsorbed.)\n className={cn(\n 'flex min-w-[5.5rem] basis-auto items-center gap-1',\n i === win.visible.length - 1 ? 'grow-0' : 'grow',\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 {i < win.visible.length - 1 && !narrow && (\n <span\n aria-hidden\n className={cn('wf-link', `wf-kind-${kindOf(level.primary)}`)}\n data-done={\n level.steps.every((s) => ['done', 'skipped'].includes(phaseOf(s.id))) || undefined\n }\n />\n )}\n </li>\n ))}\n </ol>\n {overflow('after', win.hiddenAfter)}\n {!win.canForward && trailing}\n {arrow('forward')}\n {running.length > 0 && (\n <div\n className={cn('flex shrink-[1000] items-center gap-1', !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 <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"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 )}\n </div>\n )}\n {win.failedHidden.length > 0 && (\n <div\n className={cn('flex shrink-[1000] items-center gap-1', !narrow && 'min-w-[6.5rem]')}\n data-testid={tid('failed')}\n >\n {win.failedHidden.map((s) => outOfViewChip(s, 'failedStep'))}\n </div>\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=\"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<\n SchemaFormProps,\n 'renderScope' | 'renderDocuments' | 'renderIcon' | 'people'\n> {\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 an upload step's body. */\n renderUpload?: (step: WorkflowUploadStep) => ReactNode\n /** Extra content under a step's body (e.g. what a commit created). */\n renderStepNote?: (step: WorkflowStep, run: WorkflowRunView) => ReactNode\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 renderUpload,\n renderStepNote,\n renderComplete,\n renderScope,\n renderDocuments,\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 renderScope={renderScope}\n renderDocuments={renderDocuments}\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 {renderStepNote?.(step, run)}\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 {renderUpload?.(step) ?? (\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 )}\n {run.actionError && <p className=\"text-sm text-destructive\">{run.actionError}</p>}\n {renderStepNote?.(step, run)}\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 renderScope={renderScope}\n renderDocuments={renderDocuments}\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 {renderStepNote?.(step, run)}\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 {renderStepNote?.(step, run)}\n </Card>\n ) : (\n <AgentStepBody\n step={step}\n run={run}\n renderAgentOutput={renderAgentOutput}\n icon={icon(step.icon)}\n renderStepNote={renderStepNote}\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 renderStepNote,\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 renderStepNote?: WorkflowRunnerProps['renderStepNote']\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 {renderStepNote?.(step, run)}\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 {renderStepNote?.(step, run)}\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 * The seeded workflows, as data. This is the client-side registry the dashboard tiles, the slash\n * menu, tasks and agents all read; it has exactly the shape of a skill with declared `inputs`\n * (see docs/design/workflows.md), so each entry can move into a SKILL.md document later with no\n * UI change. It is the default catalogue: a host offers it as is, a slice of it, or its own.\n *\n * Prompt wording avoids phrasings that put the agent in documents-only mode (\"based on these\n * documents\", \"in the documents\"), which would switch the web off.\n */\n\nimport type { ReactNode } from 'react'\nimport {\n Clock,\n FileText,\n GanttChartSquare,\n Image,\n Library,\n Languages,\n NotebookPen,\n Sparkles,\n Telescope,\n} from 'lucide-react'\nimport type { WorkflowDefinition } from '../types'\n\n/** The timeline instruction. The scope picks the files; this never names a folder or label. */\nexport const TIMELINE_PROMPT =\n 'Build a timeline from the selected files. Record every dated event ' +\n 'as its own fact: put the date in the fact’s date field at exactly the ' +\n 'precision the file gives, cite the file you took it from, and label them all ' +\n '“Main Events”. Then show me the chronology, oldest first.'\n\nexport const DEEP_RESEARCH_ID = 'deep-research'\nexport const TIMELINE_ID = 'timeline'\nexport const SUMMARISE_ID = 'summarise'\nexport const TRANSLATE_ID = 'translate'\nexport const CHRONOLOGY_ID = 'chronology'\nexport const GENERATE_IMAGE_ID = 'generate-image'\nexport const ANNOTATE_ID = 'annotate'\n/** Task-only entries: a free instruction, and a plain reminder. */\nexport const CUSTOM_TASK_ID = '__custom__'\nexport const REMIND_TASK_ID = '__remind__'\n\n/** Tier C: workflows (skills) launch an agent run; the inputs are its parameters. */\nexport const DEEP_RESEARCH: WorkflowDefinition = {\n id: DEEP_RESEARCH_ID,\n builtin: true,\n title: 'Deep research',\n description: 'Send ARBI through your files and the web, and get an answer with sources',\n details:\n 'ARBI searches your files and the web, then answers with the sources it used. You’ll see the research unfold in the chat.',\n icon: 'research',\n startLabel: 'Research',\n inputs: [\n {\n name: 'topic',\n type: 'text',\n label: 'What do you want to research about?',\n placeholder: 'e.g. Q3 runway, competitive landscape, open risks in our contracts…',\n required: true,\n },\n {\n name: 'web',\n type: 'boolean',\n label: 'Search the web',\n default: true,\n // With the web off the wording changes rather than dropping a clause: the agent is told to\n // stay in the workspace and say when the files fall short, so a thin answer reads as a gap\n // in the files rather than as research quietly skipped.\n trueText:\n 'Search my workspace files first, then the web for what they don’t cover: read the best sources and cite them. Cite file sources and web sources separately, and tell me if you could not reach the web.',\n falseText:\n 'Use only my workspace files — do not search the web. Read the relevant files and cite them. Tell me plainly where the files do not answer the question.',\n },\n ],\n run: { kind: 'prompt', promptTemplate: 'Research: {{topic}}. {{web}}' },\n landing: 'chat',\n schedulable: true,\n}\n\nexport const TIMELINE: WorkflowDefinition = {\n id: TIMELINE_ID,\n builtin: true,\n title: 'Build a timeline',\n description: 'Turn the dates in your files into facts you can see on a timeline',\n details:\n 'Choose which files to include — folders, labels, or leave it empty to use every file in the workspace.',\n icon: 'timeline',\n startLabel: 'Build timeline',\n requiresFiles: true,\n inputs: [\n { name: 'scope', type: 'scope', label: 'Files' },\n {\n name: 'instruction',\n type: 'longtext',\n label: 'What the timeline should cover',\n default: TIMELINE_PROMPT,\n required: true,\n advanced: true,\n },\n ],\n run: { kind: 'prompt', promptTemplate: '{{instruction}}' },\n landing: 'chat',\n schedulable: true,\n}\n\n/**\n * The former prompt templates, now ordinary workflows. The wording is the old template wording,\n * word for word (the unit tests pin it); the file name(s) the old forms put in the prompt come from\n * the `documents` field, quoted by `composeWorkflowPrompt`.\n */\nexport const SUMMARISE: WorkflowDefinition = {\n id: SUMMARISE_ID,\n builtin: true,\n title: 'Summarise',\n description: 'Create a customised summary of any document',\n icon: 'summarise',\n startLabel: 'Summarise',\n requiresFiles: true,\n // The stronger model the old template switched to for this run.\n model: 'Wise',\n inputs: [\n {\n name: 'document',\n type: 'documents',\n label: 'Document',\n required: true,\n context: 'documents',\n },\n {\n name: 'length',\n type: 'select',\n label: 'Summary length',\n default: 'standard',\n options: [\n {\n value: 'brief',\n label: 'Brief (1 paragraph)',\n text: 'provide a brief summary in a single paragraph. Focus on the core message, key conclusions, and any critical actions or decisions. Keep it concise — no more than 5-6 sentences.',\n },\n {\n value: 'standard',\n label: 'Standard',\n text: 'provide a structured summary. Include the following sections using markdown headings:\\n\\n## Overview\\nA short paragraph describing what the document is about, its purpose, and context.\\n\\n## Key Points\\nA bulleted list of the main arguments, findings, or topics covered.\\n\\n## Conclusions & Recommendations\\nAny conclusions drawn, decisions made, or recommended next steps mentioned in the document.\\n\\nKeep each section focused and concise.',\n },\n {\n value: 'detailed',\n label: 'Detailed',\n text: 'provide a thorough and well-structured summary. Include the following sections using markdown headings:\\n\\n## Overview\\nDescribe the document type, purpose, author/source context, and intended audience.\\n\\n## Background & Context\\nSummarise any background information, prior events, or context the document references.\\n\\n## Key Points & Arguments\\nProvide a detailed bulleted breakdown of all major points, arguments, findings, and evidence presented. Group related points under sub-headings where appropriate.\\n\\n## Data & Evidence\\nHighlight any specific data, statistics, figures, dates, or factual claims made in the document.\\n\\n## Conclusions & Recommendations\\nSummarise all conclusions, decisions, action items, or recommended next steps.\\n\\n## Open Questions\\nNote any unresolved issues, ambiguities, or areas that may require further clarification.\\n\\nBe comprehensive — do not omit significant details.',\n },\n ],\n },\n {\n name: 'focus',\n type: 'text',\n label: 'Anything to focus on',\n placeholder: 'e.g. Focus on payment terms and deadlines.',\n },\n ],\n run: {\n kind: 'prompt',\n promptTemplate:\n 'Please read the full text of the document {{document}} and {{length}}\\n\\n{{focus}}',\n },\n landing: 'chat',\n}\n\nexport const TRANSLATE_LANGUAGES = [\n 'English',\n 'Spanish',\n 'French',\n 'German',\n 'Chinese',\n 'Japanese',\n 'Korean',\n 'Russian',\n 'Arabic',\n 'Portuguese',\n 'Italian',\n 'Dutch',\n 'Polish',\n]\n\nexport const TRANSLATE: WorkflowDefinition = {\n id: TRANSLATE_ID,\n builtin: true,\n title: 'Translate',\n description:\n 'A new editable document, translated passage by passage: side by side with the original, or the translation alone',\n icon: 'translate',\n startLabel: 'Translate',\n requiresFiles: true,\n inputs: [\n {\n name: 'document',\n type: 'documents',\n label: 'Document',\n required: true,\n context: 'documents',\n },\n {\n name: 'language',\n type: 'select',\n label: 'Target language',\n default: 'English',\n options: TRANSLATE_LANGUAGES.map((value) => ({ value, label: value })),\n },\n {\n name: 'layout',\n type: 'select',\n label: 'Layout',\n default: 'two-column',\n options: [\n {\n value: 'two-column',\n label: 'Side by side',\n description: 'Original left, translation right',\n text: 'Put the original and the translation side by side.',\n },\n {\n value: 'translation-only',\n label: 'Translation only',\n description: 'Just the translated text',\n text: 'Give only the translation.',\n },\n ],\n },\n ],\n run: {\n kind: 'prompt',\n promptTemplate:\n 'Translate the document {{document}} into {{language}} as a new document. {{layout}}',\n },\n landing: 'chat',\n // Runs as a task or a step of a scheduled workflow: the prompt reaches the agent's translation tool.\n schedulable: true,\n}\n\n/**\n * Chronology stays its own workflow rather than folding into \"Build a timeline\": the timeline\n * WRITES dated facts (with citations and a label) to the workspace and then shows them, while\n * chronology only ANSWERS with a read-only markdown table of the files themselves (title and\n * subject, ordered by date). Different side effects, different unit (events vs documents), so\n * different consent: one is a read, the other a change to the workspace.\n */\nexport const CHRONOLOGY: WorkflowDefinition = {\n id: CHRONOLOGY_ID,\n builtin: true,\n title: 'Chronology',\n description: 'Sort documents by date with title and subject',\n icon: 'chronology',\n startLabel: 'Sort by date',\n requiresFiles: true,\n model: 'Wise',\n inputs: [{ name: 'scope', type: 'scope', label: 'Files', context: 'documents' }],\n run: {\n kind: 'prompt',\n promptTemplate:\n 'Read all available documents and prepare a markdown table ordered by Date, earliest first. Include title and subject columns. Sort each document by its start date; where a document gives only a range or period, put the start date in the Date column and state the range in the subject.',\n },\n landing: 'chat',\n}\n\nexport const IMAGE_ASPECT_RATIOS: { value: string; label: string }[] = [\n { value: '1:1', label: '1:1 — Square' },\n { value: '16:9', label: '16:9 — Widescreen' },\n { value: '9:16', label: '9:16 — Portrait' },\n { value: '4:3', label: '4:3 — Landscape' },\n { value: '3:4', label: '3:4 — Portrait' },\n { value: '3:2', label: '3:2 — Landscape' },\n { value: '2:3', label: '2:3 — Portrait' },\n { value: '5:4', label: '5:4 — Landscape' },\n { value: '4:5', label: '4:5 — Portrait' },\n { value: '21:9', label: '21:9 — Ultrawide' },\n]\n/** The aspect-ratio value that sends no shape at all (the model decides). */\nexport const IMAGE_ASPECT_AUTO = 'auto'\n\n/**\n * Generate image. The prompt is `/image <description>`; the reference images and the aspect ratio\n * are NOT worded into it (the image model does not reliably honour wording): the host sends them\n * as structured tool arguments (`launch-bindings.ts`), exactly as the old modal did.\n */\nexport const GENERATE_IMAGE: WorkflowDefinition = {\n id: GENERATE_IMAGE_ID,\n builtin: true,\n title: 'Generate image',\n description: 'Create or edit an image from a text prompt',\n icon: 'image',\n startLabel: 'Generate',\n inputs: [\n {\n name: 'prompt',\n type: 'longtext',\n label: 'What do you want to generate?',\n placeholder: 'A red bicycle on a beach at sunset...',\n required: true,\n },\n {\n name: 'references',\n type: 'documents',\n label: 'Source images',\n description: 'Pick images to edit or combine. Leave empty to generate from scratch.',\n accept: 'image',\n max: 8,\n context: 'image',\n },\n {\n name: 'aspect_ratio',\n type: 'select',\n label: 'Aspect ratio',\n default: IMAGE_ASPECT_AUTO,\n options: [\n { value: IMAGE_ASPECT_AUTO, label: 'Auto (model default)' },\n ...IMAGE_ASPECT_RATIOS,\n ],\n },\n ],\n run: { kind: 'prompt', promptTemplate: '/image {{prompt}}' },\n landing: 'chat',\n}\n\n/** Tier B: a bounded operation launcher (not a skill, not an agent run). */\nexport const ANNOTATE: WorkflowDefinition = {\n id: ANNOTATE_ID,\n title: 'AI annotation',\n description: 'Ask one question, get the answer for every file as a column',\n details:\n 'Ask one question — ARBI answers it for every selected file and fills a new column with the answers.',\n icon: 'annotate',\n startLabel: 'Annotate',\n requiresFiles: true,\n inputs: [\n {\n name: 'description',\n type: 'longtext',\n label: 'Description',\n placeholder:\n 'What should ARBI read out? e.g. What currency is the penalty clause denominated in?',\n required: true,\n },\n { name: 'name', type: 'text', label: 'Name' },\n { name: 'scope', type: 'scope', label: 'Files' },\n ],\n run: { kind: 'operation' },\n landing: 'files',\n options: { agent: false },\n}\n\n/**\n * The built-in SKILLS: same shape as a marketplace skill, listed in the same list and the same\n * slash menu (one `/slug` path), pinned and not deletable. A same-slug skill of the user's own\n * shadows the built-in (the backend's own-shadows-global rule), which is how a built-in is forked\n * and customised. Delete this list once the backend ships them as real marketplace SKILL.md\n * documents (docs/design/workflows.md).\n */\nexport const BUILTIN_SKILLS: WorkflowDefinition[] = [\n DEEP_RESEARCH,\n SUMMARISE,\n TRANSLATE,\n TIMELINE,\n CHRONOLOGY,\n GENERATE_IMAGE,\n]\n\n/**\n * The dashboard's Start band is a curated VIEW over the skill list, not a code path: pin and order\n * are data. Ids resolve against the live list, so a shadowing skill replaces its tile. Tier B\n * operation launchers (annotation) sit in the band too; tier A actions are added by the host.\n */\nexport const DASHBOARD_PINNED: string[] = [DEEP_RESEARCH_ID, TIMELINE_ID]\nexport const DASHBOARD_OPERATIONS: WorkflowDefinition[] = [ANNOTATE]\n\n/** Tasks can also run a free instruction or just remind. */\nexport const CUSTOM_TASK: WorkflowDefinition = {\n id: CUSTOM_TASK_ID,\n generic: true,\n title: 'My own instruction',\n description: 'Tell the agent what to do, in your own words.',\n inputs: [\n {\n name: 'instruction',\n type: 'longtext',\n label: 'Instruction',\n placeholder: 'Summarise what is new in my workspace and message me the result.',\n required: true,\n },\n ],\n run: { kind: 'prompt', promptTemplate: '{{instruction}}' },\n landing: 'chat',\n schedulable: true,\n}\n\nexport const REMIND_TASK: WorkflowDefinition = {\n id: REMIND_TASK_ID,\n generic: true,\n title: 'Remind me',\n description: 'Send me a notification, no agent work.',\n inputs: [\n {\n name: 'message',\n type: 'text',\n label: 'Reminder',\n placeholder: 'Review the weekly numbers',\n required: true,\n },\n ],\n run: { kind: 'prompt', promptTemplate: '{{message}}' },\n landing: 'chat',\n schedulable: true,\n options: { agent: false },\n}\n\nconst ICONS: Record<string, typeof Telescope> = {\n research: Telescope,\n timeline: GanttChartSquare,\n annotate: NotebookPen,\n summarise: FileText,\n translate: Languages,\n chronology: Clock,\n image: Image,\n library: Library,\n /** Skills that bring no icon of their own (the user's and the marketplace's). */\n skill: Sparkles,\n}\n\n/** Maps a workflow/option icon key to its mark. Unknown keys render nothing. */\nexport function renderWorkflowIcon(key: string): ReactNode {\n const Icon = ICONS[key]\n return Icon ? <Icon className=\"size-5\" /> : null\n}\n","/**\n * The Word add-in's actions, as workflows of the same registry (host `word`). They take the text\n * selected in the document as an input of kind `selection`; the add-in supplies it and runs the\n * composed prompt through its own host adapter (`src/pages/word-addin/word-workflow-adapter.ts`),\n * because a task pane has no chat tab to open. The wording is the add-in's original wording; the\n * web app never lists these (`host: 'word'`).\n *\n * Pure data, no icons or React: the add-in bundle imports this file.\n */\n\nimport type { WorkflowDefinition, WorkflowField } from '../types'\n\nexport const WORD_SUMMARISE_ID = 'word-summarise-selection'\nexport const WORD_ASK_ID = 'word-ask-selection'\nexport const WORD_SUPPORT_ID = 'word-find-support'\nexport const WORD_CONTINUE_ID = 'word-continue-draft'\n\nconst SELECTION: WorkflowField = {\n name: 'text',\n type: 'longtext',\n label: 'Selected text',\n required: true,\n context: 'selection',\n}\n\nconst WORD = { landing: 'chat', host: 'word', schedulable: false } as const\n\nexport const WORD_SUMMARISE: WorkflowDefinition = {\n ...WORD,\n id: WORD_SUMMARISE_ID,\n title: 'Summarise selection',\n description: 'A concise summary of the selected text, anchored as a comment',\n inputs: [SELECTION],\n run: {\n kind: 'prompt',\n promptTemplate: 'Please summarize the following text concisely:\\n\\n{{text}}',\n },\n}\n\nexport const WORD_ASK: WorkflowDefinition = {\n ...WORD,\n id: WORD_ASK_ID,\n title: 'Ask about selection',\n description: 'Ask a question about the selected text',\n inputs: [SELECTION, { name: 'question', type: 'longtext', label: 'Question', required: true }],\n run: {\n kind: 'prompt',\n promptTemplate:\n 'The following text is selected in a Word document:\\n\\n\"{{text}}\"\\n\\nThe user asks: {{question}}\\n\\nPlease provide a helpful, concise answer.',\n },\n}\n\nexport const WORD_SUPPORT: WorkflowDefinition = {\n ...WORD,\n id: WORD_SUPPORT_ID,\n title: 'Find support',\n description: 'Find passages in your files that support the selected text',\n requiresFiles: true,\n inputs: [SELECTION],\n run: {\n kind: 'prompt',\n promptTemplate:\n 'Find passages in the provided documents that support the following text. Quote the most relevant supporting passages.\\n\\nText to support:\\n\"{{text}}\"',\n },\n}\n\nexport const WORD_CONTINUE: WorkflowDefinition = {\n ...WORD,\n id: WORD_CONTINUE_ID,\n title: 'Continue drafting',\n description: 'Continue the selected text in the same tone and style',\n inputs: [\n SELECTION,\n {\n name: 'sources',\n type: 'boolean',\n label: 'Use the selected documents as sources',\n default: false,\n trueText: 'Reference the provided source documents where relevant.',\n falseText: '',\n },\n ],\n run: {\n kind: 'prompt',\n promptTemplate:\n 'Continue drafting from where this text ends. Maintain the same tone, style, and level of detail. {{sources}} Do not repeat the existing text.\\n\\n\"{{text}}\"',\n },\n}\n\nexport const WORD_WORKFLOWS: WorkflowDefinition[] = [\n WORD_SUMMARISE,\n WORD_ASK,\n WORD_SUPPORT,\n WORD_CONTINUE,\n]\n","/** The default catalogue as one registry, and the web host's slice of it. */\nimport type { WorkflowDefinition } from '../types'\nimport { workflowsForHost } from '../workflow'\nimport { BUILTIN_SKILLS } from './seed'\nimport { WORD_WORKFLOWS } from './word-workflows'\n\n/** Everything the registry holds; each host offers its own slice (`workflowsForHost`). */\nexport const WORKFLOW_REGISTRY: WorkflowDefinition[] = [...BUILTIN_SKILLS, ...WORD_WORKFLOWS]\n\n/** The web app's slice of the registry: the built-ins every skill list starts from. */\nexport const WEB_WORKFLOWS: WorkflowDefinition[] = workflowsForHost(WORKFLOW_REGISTRY, 'web')\n","/**\n * A cheap local usage counter for workflows: how often and how recently each one was started on\n * this device. It only orders the Start section (recent first, then name); nothing is sent to a\n * server and nothing breaks when storage is unavailable.\n */\n\nimport { useSyncExternalStore } from 'react'\n\nconst STORAGE_KEY = 'arbi.workflow-usage.v1'\n\nexport interface WorkflowUsageEntry {\n count: number\n /** Epoch ms of the latest start. */\n last: number\n}\n\nexport type WorkflowUsage = Record<string, WorkflowUsageEntry>\n\nconst EMPTY: WorkflowUsage = {}\nlet cache: WorkflowUsage | null = null\nconst listeners = new Set<() => void>()\n\nfunction read(): WorkflowUsage {\n if (cache) return cache\n try {\n const raw = window.localStorage.getItem(STORAGE_KEY)\n const parsed = raw ? (JSON.parse(raw) as unknown) : null\n cache = parsed && typeof parsed === 'object' ? (parsed as WorkflowUsage) : EMPTY\n } catch {\n cache = EMPTY\n }\n return cache\n}\n\n/** Count one start of `workflowId` now. */\nexport function recordWorkflowUse(workflowId: string, now: number = Date.now()): void {\n const prev = read()[workflowId]\n cache = { ...read(), [workflowId]: { count: (prev?.count ?? 0) + 1, last: now } }\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(cache))\n } catch {\n // Storage full or blocked: the in-memory counter still orders this session.\n }\n listeners.forEach((l) => l())\n}\n\nexport function useWorkflowUsage(): WorkflowUsage {\n return useSyncExternalStore(\n (listener) => {\n listeners.add(listener)\n return () => listeners.delete(listener)\n },\n read,\n () => EMPTY\n )\n}\n\n/** Most recently used first; never-used ones follow, by title. Stable and pure. */\nexport function sortByRecentUse<T extends { id: string; title: string }>(\n items: T[],\n usage: WorkflowUsage\n): T[] {\n return [...items].sort((a, b) => {\n const la = usage[a.id]?.last ?? 0\n const lb = usage[b.id]?.last ?? 0\n if (la !== lb) return lb - la\n return a.title.localeCompare(b.title)\n })\n}\n\n/** Test seam: forget the cached value (and storage). */\nexport function resetWorkflowUsage(): void {\n cache = null\n try {\n window.localStorage.removeItem(STORAGE_KEY)\n } catch {\n // ignore\n }\n listeners.forEach((l) => l())\n}\n","/**\n * Names an annotation's column from the question it asks, for when the user\n * leaves the name blank.\n *\n * Deliberately mechanical rather than clever: there is no naming endpoint to\n * ask, so the rule has to be one the user can predict. The dialog shows the\n * result in the name field's placeholder before anything runs, so the column's\n * title is never a surprise — and typing over it always wins.\n */\n\n/** Question words that would otherwise head the column: \"What currency…\" → \"Currency…\". */\nconst LEADING_INTERROGATIVE =\n /^(what(?:'s)?|which|who(?:se|m)?|when|where|why|how|is|are|was|were|does|do|did|can|could|should|would|will|has|have)\\s+/i\n\n/** Words kept from the question — enough to tell two columns apart, short enough to head one. */\nconst MAX_WORDS = 4\nconst MAX_CHARS = 40\n\nexport function deriveAnnotationName(description: string): string {\n const cleaned = description\n .trim()\n .replace(/\\s+/g, ' ')\n .replace(/[?.!,;:]+$/, '')\n if (!cleaned) return ''\n\n // Drop the interrogative only when something survives it — \"What?\" alone\n // should still name a column rather than nothing.\n const withoutLead = cleaned.replace(LEADING_INTERROGATIVE, '')\n const source = withoutLead.trim() || cleaned\n\n let name = source.split(' ').slice(0, MAX_WORDS).join(' ')\n if (name.length > MAX_CHARS) name = name.slice(0, MAX_CHARS).trimEnd()\n\n return name.charAt(0).toUpperCase() + name.slice(1)\n}\n","/**\n * A person's step of a workflow run, done from the thread's top bar: fill in a form, say the files\n * 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 { useState } from 'react'\nimport { Button, Textarea } from '@arbidocs/react/ui'\nimport { SchemaForm } from './SchemaForm'\nimport { defaultInputs, validateInputs } from './workflow'\nimport { sendBackTargets, stepFields, type WorkflowStepPhase } from './run'\nimport { type WorkflowInputs, type WorkflowStep, type WorkflowStepState } 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 onComplete: (inputs?: WorkflowInputs) => Promise<unknown>\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 onSendBack,\n onDecline,\n onOpenDocument,\n onOpenDraft,\n onOpenReview,\n}: WorkflowStepActionProps) {\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","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","import type { MouseEvent, ReactNode } from 'react'\nimport { Globe } from 'lucide-react'\nimport { Button, Tooltip, TooltipContent, TooltipTrigger, cn } from '@arbidocs/react/ui'\n\n/** Small tonal pill showing a non-markdown skill type. */\nexport function SkillTypeBadge({ type, className }: { type: string; className?: string }) {\n return (\n <span\n className={cn(\n 'shrink-0 rounded bg-background px-1.5 py-0.5 text-xs uppercase tracking-wide text-muted-foreground',\n className\n )}\n data-slot=\"skill-type-badge\"\n >\n {type}\n </span>\n )\n}\n\nexport interface SkillGlobalBadgeLabels {\n global: string\n globalTitle: string\n}\n\nexport const DEFAULT_SKILL_GLOBAL_BADGE_LABELS: SkillGlobalBadgeLabels = {\n global: 'Global',\n globalTitle: 'Shared with everyone in the marketplace',\n}\n\n/** \"Global\" marketplace pill. */\nexport function SkillGlobalBadge({\n className,\n labels,\n}: {\n className?: string\n labels?: Partial<SkillGlobalBadgeLabels>\n}) {\n const l = { ...DEFAULT_SKILL_GLOBAL_BADGE_LABELS, ...labels }\n return (\n <span\n className={cn(\n 'inline-flex shrink-0 items-center gap-1 rounded bg-accent px-1.5 py-0.5 text-xs uppercase tracking-wide text-accent-foreground',\n className\n )}\n title={l.globalTitle}\n data-slot=\"skill-global-badge\"\n >\n <Globe className=\"size-3\" />\n {l.global}\n </span>\n )\n}\n\nexport interface SkillActionButtonProps {\n label: string\n /** Tooltip text; defaults to `label`. */\n tooltip?: string\n onClick: (e: MouseEvent<HTMLButtonElement>) => void\n children: ReactNode\n testId?: string\n}\n\n/**\n * Icon action inside a clickable skill row. Stops propagation so the row's invoke handler does\n * not fire, and meets the 44px touch target on coarse pointers.\n */\nexport function SkillActionButton({\n label,\n tooltip,\n onClick,\n children,\n testId,\n}: SkillActionButtonProps) {\n return (\n <Tooltip>\n <TooltipTrigger asChild onFocusCapture={(e) => e.stopPropagation()}>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 shrink-0 pointer-coarse:size-11\"\n onClick={(e) => {\n e.stopPropagation()\n onClick(e)\n }}\n aria-label={label}\n data-testid={testId}\n >\n {children}\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{tooltip ?? label}</p>\n </TooltipContent>\n </Tooltip>\n )\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 { 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","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 /** Render the \"No documents in this category\" message when empty (default true). */\n showEmptyState?: boolean\n testIds?: Partial<{ root: string; empty: 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 empty: string\n}\n\nexport const DEFAULT_UPLOAD_TASK_LIST_LABELS: UploadTaskListLabels = {\n title: 'Active Tasks',\n empty: 'No documents in this category',\n}\n\nexport function UploadTaskList({\n tasks,\n filter,\n title,\n onDelete,\n renderFileIcon,\n showEmptyState = true,\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 if (entries.length === 0) {\n return showEmptyState ? (\n <div\n className=\"text-sm italic text-muted-foreground\"\n data-testid={testIdOr(testIds?.empty, { testId: 'task-list-empty-state' })}\n >\n {l.empty}\n </div>\n ) : null\n }\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 * Minimal RRULE helpers for the Tasks recurrence builder.\n *\n * We only generate the constrained subset the friendly builder needs\n * (FREQ=DAILY|WEEKLY|MONTHLY with BYDAY / BYMONTHDAY + BYHOUR/BYMINUTE). The\n * backend (dateutil) is the source of truth for validation — these strings are\n * a valid subset of iCal RRULE. Power users can still hand-write any RRULE in\n * the advanced field; `describeRRule` falls back to the raw string for rules\n * outside the builder's subset.\n */\n\nexport type RecurrenceFrequency = 'daily' | 'weekly' | 'monthly'\n\n/** iCal two-letter weekday codes, in display order (Mon-first). */\nexport const WEEKDAYS = ['MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU'] as const\nexport type Weekday = (typeof WEEKDAYS)[number]\n\nconst WEEKDAY_LABELS: Record<Weekday, string> = {\n MO: 'Mon',\n TU: 'Tue',\n WE: 'Wed',\n TH: 'Thu',\n FR: 'Fri',\n SA: 'Sat',\n SU: 'Sun',\n}\n\nexport interface RecurrencePreset {\n frequency: RecurrenceFrequency\n /** Selected weekdays (weekly only). */\n weekdays: Weekday[]\n /** Day of month 1-31 (monthly only). */\n monthDay: number\n /** Hour 0-23. */\n hour: number\n /** Minute 0-59. */\n minute: number\n}\n\nexport const DEFAULT_RECURRENCE: RecurrencePreset = {\n frequency: 'daily',\n weekdays: ['MO'],\n monthDay: 1,\n hour: 9,\n minute: 0,\n}\n\nconst pad2 = (n: number) => String(n).padStart(2, '0')\n\n/** Build an RRULE string from the friendly preset. */\nexport function buildRRule(preset: RecurrencePreset): string {\n const parts: string[] = []\n if (preset.frequency === 'daily') {\n parts.push('FREQ=DAILY')\n } else if (preset.frequency === 'weekly') {\n parts.push('FREQ=WEEKLY')\n const days = preset.weekdays.length > 0 ? preset.weekdays : ['MO']\n parts.push(`BYDAY=${days.join(',')}`)\n } else {\n parts.push('FREQ=MONTHLY')\n parts.push(`BYMONTHDAY=${preset.monthDay}`)\n }\n parts.push(`BYHOUR=${preset.hour}`)\n parts.push(`BYMINUTE=${preset.minute}`)\n return parts.join(';')\n}\n\n/** Parse an RRULE token map (UPPERCASE keys → string values). */\nfunction tokenize(rrule: string): Record<string, string> {\n const out: Record<string, string> = {}\n for (const segment of rrule.split(';')) {\n const [rawKey, rawVal] = segment.split('=')\n if (rawKey && rawVal !== undefined) out[rawKey.trim().toUpperCase()] = rawVal.trim()\n }\n return out\n}\n\n/**\n * Best-effort parse of an RRULE back into the builder's preset. Returns null\n * for rules outside the supported subset (so the editor shows the advanced\n * raw field instead).\n */\nexport function parseRRule(rrule: string | null | undefined): RecurrencePreset | null {\n if (!rrule) return null\n const t = tokenize(rrule)\n const freq = t.FREQ?.toUpperCase()\n if (freq !== 'DAILY' && freq !== 'WEEKLY' && freq !== 'MONTHLY') return null\n\n // Reject anything with modifiers the builder can't represent (INTERVAL>1,\n // COUNT, UNTIL, BYSETPOS, …) so we don't silently drop them on round-trip.\n const allowed = new Set(['FREQ', 'BYDAY', 'BYMONTHDAY', 'BYHOUR', 'BYMINUTE'])\n if (Object.keys(t).some((k) => !allowed.has(k))) return null\n\n const hour = t.BYHOUR !== undefined ? Number(t.BYHOUR) : DEFAULT_RECURRENCE.hour\n const minute = t.BYMINUTE !== undefined ? Number(t.BYMINUTE) : 0\n if (!Number.isInteger(hour) || hour < 0 || hour > 23) return null\n if (!Number.isInteger(minute) || minute < 0 || minute > 59) return null\n\n if (freq === 'DAILY') {\n if (t.BYDAY || t.BYMONTHDAY) return null\n return { ...DEFAULT_RECURRENCE, frequency: 'daily', hour, minute }\n }\n if (freq === 'WEEKLY') {\n if (t.BYMONTHDAY) return null\n const weekdays = (t.BYDAY ? t.BYDAY.split(',') : ['MO'])\n .map((d) => d.trim().toUpperCase())\n .filter((d): d is Weekday => (WEEKDAYS as readonly string[]).includes(d))\n if (weekdays.length === 0) return null\n return { ...DEFAULT_RECURRENCE, frequency: 'weekly', weekdays, hour, minute }\n }\n // MONTHLY\n if (t.BYDAY) return null\n const monthDay = t.BYMONTHDAY !== undefined ? Number(t.BYMONTHDAY) : 1\n if (!Number.isInteger(monthDay) || monthDay < 1 || monthDay > 31) return null\n return { ...DEFAULT_RECURRENCE, frequency: 'monthly', monthDay, hour, minute }\n}\n\nconst ordinal = (n: number): string => {\n const s = ['th', 'st', 'nd', 'rd']\n const v = n % 100\n return n + (s[(v - 20) % 10] || s[v] || s[0])\n}\n\n/** Human-readable summary of an RRULE; falls back to the raw rule when unknown. */\nexport function describeRRule(rrule: string | null | undefined): string {\n if (!rrule) return 'Recurring'\n const preset = parseRRule(rrule)\n if (!preset) return rrule // advanced/raw rule — show as-is\n const time = `${pad2(preset.hour)}:${pad2(preset.minute)}`\n if (preset.frequency === 'daily') return `Daily at ${time}`\n if (preset.frequency === 'weekly') {\n const days = preset.weekdays.map((d) => WEEKDAY_LABELS[d]).join(', ')\n return `Weekly on ${days} at ${time}`\n }\n return `Monthly on the ${ordinal(preset.monthDay)} at ${time}`\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: 90,\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: 'Shared',\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, type ReactNode } 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, VisibilityToggle, cn } 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 type { TaskThreadChipLabels } from './TaskThreadChip'\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 /**\n * How a person appears in the Owner column. Defaults to the app's user pill from\n * `@arbidocs/react`; a host with presence and direct messages passes its own.\n */\n renderPerson?: (person: TaskPerson) => ReactNode\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 /** Slot above the table (e.g. a live-runs banner). */\n header?: ReactNode\n /**\n * Extra bulk actions for the selection bar (an export, a share): called with the selected tasks, whether\n * the bar is compact, and a function that clears the selection.\n */\n selectionActions?: (selected: T[], isCompact: boolean, clearSelection: () => void) => ReactNode\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 threadChipLabels?: Partial<TaskThreadChipLabels>\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, header, 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 =\n props.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 <VisibilityToggle\n items={{ 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 showLabel={false}\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.renderPerson,\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 {header}\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.selectionActions?.(selectedTasks, isCompact, clearSelection)}\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","import { useState } from 'react'\nimport {\n CheckCheck,\n ListTodo,\n ChevronDown,\n ChevronRight,\n FileText,\n MoreHorizontal,\n Plus,\n Trash2,\n Workflow,\n} from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport { FilterInput, type FilterField } from '../../shell/FilterInput'\nimport { TriStateFilterMenu, type TriState } from '../../settings/TriStateFilterMenu'\nimport { TabHeader } from '../../shell/TabHeader'\nimport { SelectionBar, SelectionBarAction } from '../../files/SelectionBar'\nimport { EmptyState } from '../../components/EmptyState'\nimport { PersonPill } from './PersonPill'\nimport { TaskStatusPill } from './TaskStatusPill'\nimport { TaskRowMenu } from './TaskRowMenu'\nimport { TaskMoveDialog } from './TaskMoveDialog'\nimport { DEFAULT_TASK_LIST_LABELS } from './taskTableLabels'\nimport { asTaskStatus } from './taskLabels'\nimport { isPlainTodo, moveTargets, ownerExtId, type TaskListRow } from './taskRows'\nimport type { TaskTableProps } from './TaskTable'\n\nexport interface TaskInboxWorkflow {\n external_id: string\n name: string\n active: boolean\n is_owner?: boolean\n last_error?: string | null\n summary?: string\n next_fire_at?: string | null\n}\nexport interface TaskInboxWorkflowActions {\n workflows?: readonly TaskInboxWorkflow[]\n onEditWorkflow?: (id: string) => void\n onCreateWorkflow?: () => void\n onToggleWorkflow?: (id: string, active: boolean) => void\n onDeleteWorkflow?: (id: string) => void\n onWorkflowHistory?: (id: string) => void\n}\nexport interface TaskInboxProps<T extends TaskListRow>\n extends TaskTableProps<T>, TaskInboxWorkflowActions {\n onFilterTextChange?: (text: string) => void\n onCreate?: () => void\n onNotify?: (task: T) => void\n}\n/** Tasks and saved workflows form one list. A workflow contains its runs; a task contains its substeps. */\nexport function TaskInbox<T extends TaskListRow>(p: TaskInboxProps<T>) {\n const [filterOpen, setFilterOpen] = useState(false)\n const [statusFilters, setStatusFilters] = useState<Map<string, TriState>>(\n () => new Map([['done', 'exclude']])\n )\n const [localQuery, setLocalQuery] = useState('')\n const [searchFields, setSearchFields] = useState<FilterField[]>(['text', 'labels'])\n const [selected, setSelected] = useState<Set<string>>(new Set())\n const [collapsed, setCollapsed] = useState<Set<string>>(new Set())\n const [moving, setMoving] = useState<T | null>(null)\n const l = { ...DEFAULT_TASK_LIST_LABELS, ...p.labels }\n const nameOf = (t: T) =>\n t.title?.trim() || (t.workflow_ext_id && p.workflowNames?.[t.workflow_ext_id]) || l.untitled\n const all = p.tasks.filter((t) => t.status != null)\n const filterText = p.filterText ?? localQuery\n const q = filterText.trim().toLowerCase()\n const included = [...statusFilters].filter(([, state]) => state === 'include').map(([id]) => id)\n const statusMatches = (t: T) =>\n statusFilters.get(asTaskStatus(t.status)) !== 'exclude' &&\n (!included.length || included.includes(asTaskStatus(t.status)))\n const rows = all.filter(\n (t) =>\n statusMatches(t) &&\n (!q ||\n [\n searchFields.includes('text') ? `${nameOf(t)} ${t.description ?? ''}` : '',\n searchFields.includes('labels') && t.workflow_ext_id\n ? (p.workflowNames?.[t.workflow_ext_id] ?? '')\n : '',\n ]\n .join(' ')\n .toLowerCase()\n .includes(q))\n )\n const hasActiveFilters = !!q || [...statusFilters.values()].some((state) => state != null)\n const selectedTasks = all.filter((t) => selected.has(t.external_id))\n const canEdit = (t: T) => t.is_owner !== false || Boolean(p.canEditShared)\n const markable = (t: T) =>\n t.status !== 'done' && t.status !== 'generating' && canEdit(t) && !t.in_progress\n const markableTasks = selectedTasks.filter(markable)\n const deletableTasks = selectedTasks.filter((t) => t.is_owner !== false || p.isWorkspaceOwner)\n const clearSelection = () => setSelected(new Set())\n const toggle = (set: React.Dispatch<React.SetStateAction<Set<string>>>, id: string) =>\n set((old) => {\n const next = new Set(old)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n return next\n })\n const person = (t: T) => {\n const id = ownerExtId(t)\n return {\n id,\n label:\n t.is_owner !== false ? 'You' : (p.people?.find((x) => x.id === id)?.label ?? l.someone),\n isMe: t.is_owner !== false,\n }\n }\n const renderPerson = p.renderPerson ?? ((value) => <PersonPill person={value} />)\n const taskById = new Map(all.map((t) => [t.external_id, t]))\n const visible = new Set(rows.map((t) => t.external_id))\n // Keep the parent as context when only a child matches a filter.\n for (const task of rows) {\n let id = task.parent_conversation_ext_id\n const seen = new Set<string>()\n while (id && taskById.has(id) && !seen.has(id)) {\n seen.add(id)\n visible.add(id)\n id = taskById.get(id)?.parent_conversation_ext_id\n }\n }\n const listed = all.filter((t) => visible.has(t.external_id))\n const roots = listed.filter(\n (t) => !t.parent_conversation_ext_id || !visible.has(t.parent_conversation_ext_id)\n )\n const workflows = (p.workflows ?? []).filter((w) => {\n const runs = roots.filter((t) => t.workflow_ext_id === w.external_id)\n return runs.length > 0 || (!included.length && (!q || w.name.toLowerCase().includes(q)))\n })\n const workflowIds = new Set(workflows.map((w) => w.external_id))\n const order = (a: T, b: T) => {\n const weight = (t: T) =>\n t.pending_auth_request_id || t.last_error\n ? 0\n : t.status === 'todo'\n ? 1\n : t.status === 'generating'\n ? 2\n : 3\n return weight(a) - weight(b) || (b.updated_at ?? '').localeCompare(a.updated_at ?? '')\n }\n const renderTask = (task: T, depth = 0): React.ReactNode => {\n const id = task.external_id\n const status = asTaskStatus(task.status)\n const busy = p.busyId === id\n const children = listed.filter((t) => t.parent_conversation_ext_id === id).sort(order)\n const outputs = p.outputsByTask?.[id] ?? []\n return (\n <li key={id} data-testid={`task-inbox-row-${id}`}>\n <div\n className={cn(\n 'relative flex cursor-pointer items-start gap-2 border-b py-3 hover:bg-muted/40',\n selected.has(id) && 'bg-muted/60'\n )}\n onClick={(event) => {\n if (\n !(event.target as HTMLElement).closest(\n 'button, a, input, select, textarea, [role=\"menuitem\"], [role=\"checkbox\"], [role=\"combobox\"]'\n )\n ) {\n p.onOpenThread(id, task)\n }\n }}\n style={{ paddingLeft: `${Math.min(depth, 5) * 20}px` }}\n >\n {children.length > 0 && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 shrink-0\"\n aria-label={`${collapsed.has(id) ? 'Expand' : 'Collapse'} ${nameOf(task)}`}\n onClick={() => toggle(setCollapsed, id)}\n >\n {collapsed.has(id) ? (\n <ChevronRight className=\"size-4\" />\n ) : (\n <ChevronDown className=\"size-4\" />\n )}\n </Button>\n )}\n <div className=\"min-w-0 flex-1\">\n <button\n className={cn(\n 'block w-full text-left text-sm font-medium hover:underline',\n status === 'done' && 'text-muted-foreground'\n )}\n data-testid={`task-open-${id}`}\n onClick={() => p.onOpenThread(id, task)}\n >\n {nameOf(task)}\n </button>\n <div className=\"mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-muted-foreground\">\n {status !== 'todo' && (\n <TaskStatusPill\n id={id}\n status={task.status}\n runStartedAt={task.run_started_at}\n lastError={task.last_error}\n awaitingAccess={Boolean(task.pending_auth_request_id)}\n />\n )}\n {task.due_at && <span>Due {p.formatDate(task.due_at)}</span>}\n {children.length > 0 && (\n <span>\n {\n all.filter((t) => t.parent_conversation_ext_id === id && t.status === 'done')\n .length\n }\n /{all.filter((t) => t.parent_conversation_ext_id === id).length} steps complete\n </span>\n )}\n </div>\n {outputs.length > 0 && (\n <div className=\"mt-2 flex flex-wrap gap-2\" aria-label=\"Outputs\">\n {outputs.map((output) => (\n <Button\n key={output.id}\n variant=\"link\"\n size=\"sm\"\n className=\"h-auto max-w-full gap-1 px-0 py-1 text-xs\"\n disabled={!p.onOpenOutput}\n onClick={() => p.onOpenOutput?.(output.id, task)}\n data-testid={`task-output-${id}-${output.id}`}\n >\n <FileText className=\"size-3.5 shrink-0\" />\n <span className=\"truncate\">{output.name}</span>\n </Button>\n ))}\n </div>\n )}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {task.pending_auth_request_id && task.is_owner !== false && p.onGrantAccess && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n disabled={busy}\n onClick={() => p.onGrantAccess?.(task)}\n >\n Allow access\n </Button>\n )}\n <TaskRowMenu\n task={task}\n status={status}\n busy={busy}\n isOwner={task.is_owner !== false}\n canAdmin={task.is_owner !== false || Boolean(p.isWorkspaceOwner)}\n canEdit={canEdit(task)}\n canMarkDone={markable(task)}\n canReopen={canEdit(task)}\n selected={selected.has(id)}\n onToggleSelected={\n p.selectionActions || p.onMarkDoneMany || p.onDeleteMany\n ? () => toggle(setSelected, id)\n : undefined\n }\n labels={l}\n onMarkDone={() => p.onMarkDone(task)}\n onNotify={p.onNotify ? () => p.onNotify?.(task) : undefined}\n onReopen={() => p.onReopen(task)}\n onEdit={() => p.onEdit(task)}\n onAddSubtask={p.onAddSubtask ? () => p.onAddSubtask?.(task) : undefined}\n onMoveTo={p.onMove ? () => setMoving(task) : undefined}\n onOpenActivity={p.onOpenActivity ? () => p.onOpenActivity?.(task) : undefined}\n onToggleShared={\n p.onToggleShared ? () => p.onToggleShared?.(task, !task.is_shared) : undefined\n }\n />\n </div>\n </div>\n {children.length > 0 && !collapsed.has(id) && (\n <ul>{children.map((child) => renderTask(child, depth + 1))}</ul>\n )}\n </li>\n )\n }\n return (\n <div className=\"flex min-h-0 flex-1 flex-col\" data-testid={p.testId ?? 'task-inbox'}>\n <TabHeader\n testId=\"tasks-tab-header\"\n tabs={[\n {\n id: 'tasks',\n label: '',\n count: rows.length,\n countPlacement: 'leading',\n countIcon: <ListTodo className=\"size-3.5\" />,\n hasActiveFilters,\n testId: 'tasks-tab',\n presentation: 'count',\n },\n ]}\n activeTabId=\"tasks\"\n onTabChange={() => {}}\n firstTabContent={\n <FilterInput\n value={filterText}\n onChange={p.onFilterTextChange ?? setLocalQuery}\n fields={searchFields}\n onFieldsChange={setSearchFields}\n labels={{ fieldNames: { text: 'Task', labels: 'Workflow' } }}\n className=\"w-44 max-w-[40vw]\"\n testIds={{\n root: 'tasks-filter',\n input: 'tasks-filter-input',\n fieldsButton: 'tasks-filter-fields',\n }}\n filter={\n <TriStateFilterMenu\n testId=\"tasks-status-filter\"\n open={filterOpen}\n onOpenChange={setFilterOpen}\n filterStates={statusFilters}\n onFiltersChange={setStatusFilters}\n options={[\n {\n id: 'todo',\n label: 'To do',\n count: all.filter((t) => t.status === 'todo').length,\n },\n {\n id: 'generating',\n label: 'Generating',\n count: all.filter((t) => t.status === 'generating').length,\n },\n {\n id: 'done',\n label: 'Completed',\n count: all.filter((t) => t.status === 'done').length,\n },\n ]}\n groups={[{ label: 'Status', options: ['todo', 'generating', 'done'] }]}\n triggerClassName=\"flex h-5 items-center gap-0.5 rounded px-1 text-muted-foreground hover:text-foreground pointer-coarse:h-11! pointer-coarse:min-w-11 pointer-coarse:justify-center\"\n renderChevron\n disableHoverOpen\n />\n }\n />\n }\n rightContent={\n p.onCreate ? (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button data-testid=\"new-task-button\">\n <Plus className=\"mr-1 size-4\" />\n New\n <ChevronDown className=\"ml-1 size-3\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onSelect={p.onCreate}>Task</DropdownMenuItem>\n {p.onCreateWorkflow && (\n <DropdownMenuItem onSelect={p.onCreateWorkflow}>Saved workflow</DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n ) : (\n p.header\n )\n }\n />\n <div className=\"min-h-0 flex-1 overflow-y-auto\" aria-busy={p.isLoading}>\n {p.isLoading ? (\n <p className=\"py-12 text-center text-sm text-muted-foreground\">Loading work…</p>\n ) : !listed.length && !workflows.length ? (\n <EmptyState\n title={q ? 'No matches' : all.length ? 'You’re all caught up' : 'No work here yet'}\n description=\"Create a task from a prompt or a saved workflow. Keep its drafts and outputs together.\"\n />\n ) : (\n <ul>\n {workflows.map((w) => {\n const runs = roots.filter((t) => t.workflow_ext_id === w.external_id).sort(order)\n const editable = w.is_owner !== false || p.canEditShared\n return (\n <li key={w.external_id} data-testid={`task-workflow-${w.external_id}`}>\n <div className=\"flex items-start gap-2 border-b py-3\">\n {runs.length > 0 ? (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={`${collapsed.has(w.external_id) ? 'Expand' : 'Collapse'} ${w.name}`}\n onClick={() => toggle(setCollapsed, w.external_id)}\n >\n {collapsed.has(w.external_id) ? (\n <ChevronRight className=\"size-4\" />\n ) : (\n <ChevronDown className=\"size-4\" />\n )}\n </Button>\n ) : (\n <Workflow className=\"mx-1 mt-1 size-4 shrink-0 text-muted-foreground\" />\n )}\n <div className=\"min-w-0 flex-1\">\n <button\n className=\"block text-left text-sm font-medium hover:underline\"\n disabled={!editable}\n onClick={() => p.onEditWorkflow?.(w.external_id)}\n >\n {w.name}\n </button>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n Saved workflow · {w.summary ?? 'Run when needed'}\n {!w.active ? ' · Paused' : ''}\n {runs.length\n ? ` · ${runs.length} ${runs.length === 1 ? 'task' : 'tasks'}`\n : ''}\n </p>\n {w.last_error && (\n <p className=\"mt-1 text-xs text-destructive\">{w.last_error}</p>\n )}\n </div>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8\"\n aria-label={`Actions for ${w.name}`}\n >\n <MoreHorizontal className=\"size-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {p.onWorkflowHistory && (\n <DropdownMenuItem onSelect={() => p.onWorkflowHistory?.(w.external_id)}>\n Run history\n </DropdownMenuItem>\n )}\n {editable && p.onToggleWorkflow && (\n <DropdownMenuItem\n onSelect={() => p.onToggleWorkflow?.(w.external_id, !w.active)}\n >\n {w.active ? 'Pause' : 'Resume'}\n </DropdownMenuItem>\n )}\n {(w.is_owner !== false || p.isWorkspaceOwner) && p.onDeleteWorkflow && (\n <DropdownMenuItem onSelect={() => p.onDeleteWorkflow?.(w.external_id)}>\n Delete workflow\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n {!collapsed.has(w.external_id) && runs.length > 0 && (\n <ul>{runs.map((t) => renderTask(t, 1))}</ul>\n )}\n </li>\n )\n })}\n {roots\n .filter((t) => !t.workflow_ext_id || !workflowIds.has(t.workflow_ext_id))\n .sort(order)\n .map((t) => renderTask(t))}\n </ul>\n )}\n </div>\n <SelectionBar count={selectedTasks.length} onClear={clearSelection}>\n {(isCompact) => (\n <>\n {p.selectionActions?.(selectedTasks, isCompact, clearSelection)}\n {p.onMarkDoneMany && (\n <SelectionBarAction\n icon={CheckCheck}\n label={l.markDoneMany}\n isCompact={isCompact}\n disabled={!markableTasks.length}\n onClick={() => {\n p.onMarkDoneMany?.(markableTasks)\n clearSelection()\n }}\n testId=\"task-bulk-done\"\n />\n )}\n {p.onDeleteMany && (\n <SelectionBarAction\n icon={Trash2}\n label={l.deleteMany}\n isCompact={isCompact}\n disabled={!deletableTasks.length}\n onClick={() => {\n p.onDeleteMany?.(deletableTasks)\n clearSelection()\n }}\n className=\"text-red-text hover:bg-red-bg hover:text-red-text\"\n testId=\"task-bulk-delete\"\n />\n )}\n </>\n )}\n </SelectionBar>\n {moving && p.onMove && (\n <TaskMoveDialog\n open\n onOpenChange={(open) => !open && setMoving(null)}\n options={moveTargets(all, moving).map((t) => ({ id: t.external_id, label: nameOf(t) }))}\n currentParentId={moving.parent_conversation_ext_id}\n onPick={(id) => p.onMove?.(moving, id)}\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 /** After the word, e.g. a live elapsed time. */\n extra?: ReactNode\n labels?: Partial<ThreadStateLabels>\n className?: string\n testId?: string\n}\n\nexport function ThreadStatusLine({\n state,\n name = 'you',\n detail,\n extra,\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 {extra}\n {detail && <span className=\"min-w-0 truncate text-foreground\">· {detail}</span>}\n </span>\n )\n}\n","import { useMemo, useRef, useState, type ReactNode } from 'react'\nimport { MessageSquare } from 'lucide-react'\nimport { ThreadVisibilityIcon } from '@arbidocs/react/ui'\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 header?: ReactNode\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 renderOwner?: (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 <div className=\"min-w-0\">\n {liveProps.current.renderThread ? (\n liveProps.current.renderThread(data)\n ) : (\n <EntityChip\n icon={\n <ThreadVisibilityIcon shared={data.is_shared ?? false} className=\"size-4\" />\n }\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 || liveProps.current.renderOwner\n ? [\n {\n colId: liveProps.current.renderBy ? 'by' : 'owner',\n headerName: liveProps.current.renderBy ? 'By' : 'Owner',\n width: 64,\n hide: isPhone,\n sortable: false,\n resizable: false,\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data && (liveProps.current.renderBy || liveProps.current.renderOwner)?.(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.renderOwner),\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 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 rightContent={p.header}\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\n ? 'Type below to ask ARBI, bring in people, or both.'\n : 'Use New Task to ask ARBI, bring in people, or both.',\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 {p.selectionActions && (\n <SelectionBar count={selectedRows.length} onClear={() => setSelected(new Set())}>\n {(compact) => p.selectionActions?.(selectedRows, compact, () => setSelected(new Set()))}\n </SelectionBar>\n )}\n </div>\n )\n}\n","import { useEffect, useRef, useState } from 'react'\nimport { TabHeader } from '../../shell/TabHeader'\nimport { MentionMenu } from '../../chat/MentionMenu'\nimport { useMentionAutocomplete } from '../../chat/useMentionAutocomplete'\nimport {\n extractMentions,\n toMessageMentions,\n type MentionCandidate,\n type MessageMentionRef,\n} from '@arbidocs/react/shell'\nimport { X } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n DialogClose,\n Label,\n Textarea,\n VisibilityToggle,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@arbidocs/react/ui'\n\nexport interface TaskStartValues {\n prompt: string\n workflowId: string | null\n todo: boolean\n shared: boolean\n /** The people @mentioned in the prompt. */\n mentions: MessageMentionRef[]\n}\n\nconst NO_PEOPLE: ReadonlyArray<MentionCandidate> = []\n\nexport interface TaskStartDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n workflows: readonly { external_id: string; name: string }[]\n /** Who can be @mentioned in the prompt: the workspace's people (the assistant is not one). */\n people?: ReadonlyArray<MentionCandidate>\n isPending?: boolean\n error?: string | null\n /** Replaces the start button's label (e.g. \"Look again\" while a started task's thread is late). */\n startLabel?: string\n onStart: (values: TaskStartValues) => void | Promise<void>\n onLater: (values: TaskStartValues) => void\n}\n\n/** One entry point: write a prompt, run a saved recipe, or keep a simple to-do. */\nexport function TaskStartDialog({\n open,\n onOpenChange,\n workflows,\n people = NO_PEOPLE,\n isPending,\n error,\n startLabel,\n onStart,\n onLater,\n}: TaskStartDialogProps) {\n const [prompt, setPrompt] = useState('')\n const [choice, setChoice] = useState('prompt')\n const [shared, setShared] = useState(false)\n const [sourceOpen, setSourceOpen] = useState(false)\n // The host keeps this component mounted, so a closed dialog would otherwise reopen with the last\n // unsent prompt. A failed start keeps the dialog open, so its draft is still kept for a retry.\n useEffect(() => {\n if (open) return\n setPrompt('')\n setChoice('prompt')\n setShared(false)\n setSourceOpen(false)\n }, [open])\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const mention = useMentionAutocomplete({\n value: prompt,\n onValueChange: setPrompt,\n candidates: people,\n textareaRef,\n })\n const todo = choice === 'todo'\n // The field asks ARBI unless the work is a to-do.\n const promptHint = todo ? 'What needs doing?' : 'What should ARBI do?'\n const workflowId = choice === 'prompt' || todo ? null : choice\n const valid = workflowId\n ? workflows.some((w) => w.external_id === workflowId)\n : Boolean(prompt.trim())\n const values: TaskStartValues = {\n prompt: prompt.trim(),\n workflowId,\n todo,\n shared,\n mentions: toMessageMentions(extractMentions(prompt, people)),\n }\n return (\n <Dialog modal={false} open={open} onOpenChange={(next) => !isPending && onOpenChange(next)}>\n <DialogContent\n presentation=\"right\"\n hideCloseButton\n onInteractOutside={(event) => event.preventDefault()}\n onEscapeKeyDown={(event) => {\n // Escape with the \"Who does the work\" menu open closes only the menu.\n if (!sourceOpen) return\n event.preventDefault()\n setSourceOpen(false)\n }}\n className=\"flex flex-col gap-0 overflow-hidden p-0 shadow-lg\"\n data-testid=\"task-start-dialog\"\n >\n <DialogTitle className=\"sr-only\">New task</DialogTitle>\n <DialogDescription className=\"sr-only\">\n Describe the task, then start it now or schedule it.\n </DialogDescription>\n <TabHeader\n tabs={[{ id: 'new-task', label: 'New task', presentation: 'count' }]}\n activeTabId=\"new-task\"\n onTabChange={() => {}}\n rightContent={\n <DialogClose asChild>\n <Button variant=\"ghost\" size=\"icon\" aria-label=\"Close\" disabled={isPending}>\n <X className=\"size-4\" />\n </Button>\n </DialogClose>\n }\n />\n <div className=\"min-h-0 flex-1 overflow-y-auto px-3 py-3\">\n {!workflowId ? (\n <>\n <Label className=\"sr-only\" htmlFor=\"task-start-prompt\">\n {promptHint}\n </Label>\n <div className=\"relative\">\n <Textarea\n id=\"task-start-prompt\"\n ref={textareaRef}\n autoFocus\n value={prompt}\n onChange={(event) => mention.onValueChange(event.target.value)}\n onKeyDown={mention.nav.handleKeyDown}\n {...(mention.isOpen ? mention.nav.comboboxProps : {})}\n {...mention.textareaProps}\n disabled={isPending}\n placeholder={promptHint}\n className=\"min-h-44 resize-y shadow-none\"\n />\n <MentionMenu\n open={mention.isOpen}\n placement=\"below\"\n items={mention.items}\n selectedIndex={mention.nav.selectedIndex}\n setSelectedIndex={mention.nav.setSelectedIndex}\n listboxId={mention.nav.listboxId}\n onSelect={mention.pick}\n />\n </div>\n </>\n ) : (\n <p className=\"text-sm\">\n {workflows.find((workflow) => workflow.external_id === workflowId)?.name}\n </p>\n )}\n <Select\n value={choice}\n onValueChange={setChoice}\n open={sourceOpen}\n onOpenChange={setSourceOpen}\n disabled={isPending}\n >\n <SelectTrigger\n id=\"task-start-source\"\n aria-label=\"Who does the work\"\n className=\"mt-3 h-7 w-auto max-w-full border-0 bg-transparent px-1 text-xs font-normal text-muted-foreground shadow-none hover:bg-muted\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"prompt\">With ARBI</SelectItem>\n <SelectItem value=\"todo\">To-do</SelectItem>\n {workflows.map((workflow) => (\n <SelectItem key={workflow.external_id} value={workflow.external_id}>\n {workflow.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {error && (\n <p role=\"alert\" className=\"mt-3 text-sm text-destructive\">\n {error}\n </p>\n )}\n </div>\n <div className=\"flex flex-wrap items-center justify-between gap-2 border-t px-3 py-2\">\n <Button\n variant=\"ghost\"\n disabled={!valid || isPending}\n onClick={() => onLater(values)}\n data-testid=\"task-start-later\"\n className=\"h-8 px-2 text-sm font-medium\"\n >\n Schedule\n </Button>\n <div className=\"ml-auto flex items-center gap-3\">\n <VisibilityToggle\n items={{ shared }}\n onToggle={setShared}\n label={shared ? 'Workspace' : 'Only Me'}\n disabled={isPending}\n data-testid=\"task-start-visibility\"\n />\n <Button\n disabled={!valid || isPending}\n data-testid=\"task-start-now\"\n className=\"h-8 px-3 text-sm font-medium\"\n onClick={async () => {\n try {\n await onStart(values)\n } catch {\n /* Host displays the failure; preserve the draft. */\n }\n }}\n >\n {isPending\n ? 'Starting…'\n : startLabel\n ? startLabel\n : todo\n ? 'Create task'\n : 'Start now'}\n </Button>\n </div>\n </div>\n </DialogContent>\n </Dialog>\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","/**\n * TaskComposer values to API requests (and back): the pure mapping every host would write the same\n * way. No SDK call is made here; hand the result to the hooks from `@arbidocs/react`.\n *\n * \"Now\" (or a plain to-do) creates work: a conversation with a status (`useCreateWork`). Any other\n * start (a date, a repeat, an event, after another task) saves a workflow (`useCreateWorkflow`) that\n * creates the work when it fires.\n */\nimport type { components } from '@arbidocs/client'\nimport { composeWorkflowPrompt, type WorkflowComposeContext } from '../workflows/workflow'\nimport type { WorkflowDefinition, WorkflowInputs } from '../workflows/types'\nimport type { TaskComposerValues, TaskWhen } from './taskComposerTypes'\nimport type { MessageMentionRef } from '@arbidocs/react/shell'\n\ntype Schemas = components['schemas']\ntype ConversationResponse = Schemas['ConversationResponse']\ntype CreateWorkRequest = Schemas['CreateWorkRequest']\ntype CreateWorkflowRequest = Schemas['CreateWorkflowRequest']\ntype TaskPlan = Schemas['TaskPlan']\ntype TaskOptions = Schemas['TaskOptions']\ntype UpdateConversationRequest = Schemas['UpdateConversationRequest']\ntype UpdateWorkflowRequest = Schemas['UpdateWorkflowRequest']\ntype WorkflowResponse = Schemas['WorkflowResponse']\n\n/** The authorization tier of a run (the same three values for work and for workflows). */\nexport type TaskAuthMode = CreateWorkRequest['auth_mode']\n\n/**\n * The plain-language access choice becomes the backend authorisation tier: run-now work is\n * authorised for that one run, a workflow either keeps standing access or asks each run.\n */\nexport function authModeFor(values: Pick<TaskComposerValues, 'when' | 'access'>): TaskAuthMode {\n if (values.when === 'now' || values.when === 'manual') return 'run_now_temp'\n return values.access === 'standing' ? 'scheduled_permanent' : 'scheduled_require_auth'\n}\n\n/** `datetime-local` value (no zone) to an ISO instant. Throws on an empty or invalid value. */\nexport function localInputToIso(local: string): string {\n const d = new Date(local)\n if (!local || Number.isNaN(d.getTime())) throw new Error('Pick a valid date and time.')\n return d.toISOString()\n}\n\n/** An ISO instant to the `datetime-local` value the composer edits; empty for none or invalid. */\nexport function isoToLocalInput(iso: string | null | undefined): string {\n if (!iso) return ''\n const d = new Date(iso)\n if (Number.isNaN(d.getTime())) return ''\n return new Date(d.getTime() - d.getTimezoneOffset() * 60000).toISOString().slice(0, 16)\n}\n\nexport interface WorkflowTaskFields {\n /** The title of the work or the name of the workflow. */\n name: string\n action?: Schemas['DocumentAutomationAction']\n prompt: string\n skill_ref: string | null\n /** The skill's saved inputs (only for a skill). */\n skill_inputs: WorkflowInputs | null\n}\n\n/** How many words of an instruction a derived name keeps. */\nexport const DERIVED_NAME_WORDS = 6\n\n/** The first `count` words of a text, with an ellipsis when there is more; empty for blank text. */\nexport function firstWords(text: string, count = DERIVED_NAME_WORDS): string {\n const words = text.trim().split(/\\s+/).filter(Boolean)\n if (words.length <= count) return words.join(' ')\n return `${words.slice(0, count).join(' ')}…`\n}\n\n/**\n * The name a workflow (or task) gets when its owner types none: the template's title or, for a template\n * that is a free-text instruction or reminder (its form is just an `instruction` or `message`), the\n * first few words of what was written, falling back to the title while it is still blank.\n */\nexport function deriveWorkflowName(workflow: WorkflowDefinition, inputs: WorkflowInputs): string {\n for (const field of ['instruction', 'message']) {\n if (workflow.inputs.some((i) => i.name === field)) {\n const written = inputs[field]\n return (typeof written === 'string' && firstWords(written)) || workflow.title\n }\n }\n return workflow.title\n}\n\n/**\n * How a workflow definition becomes an action:\n * - `options.agent === false` is a reminder: the composed text is the title and there is no prompt or\n * skill (the backend makes a to-do and notifies the owner);\n * - a definition with a `skill` runs that skill, its `args` input being the arguments;\n * - anything else is an agent prompt, the composed workflow prompt.\n * `name` (typed by the user) wins over the derived one (see {@link deriveWorkflowName}).\n */\n/** Does any input name files (an explicit pick, or a resolved scope)? Those bind the run. */\nconst hasDocumentInputs = (inputs: WorkflowInputs): boolean =>\n Object.values(inputs).some(\n (v) =>\n v !== null &&\n typeof v === 'object' &&\n Array.isArray((v as { documents?: unknown }).documents) &&\n ((v as { documents: unknown[] }).documents.length ?? 0) > 0\n )\n\nexport function workflowTaskFields(\n workflow: WorkflowDefinition,\n inputs: WorkflowInputs,\n name?: string,\n context?: WorkflowComposeContext\n): WorkflowTaskFields {\n if (workflow.documentAction) {\n const scope =\n inputs.scope && typeof inputs.scope === 'object' ? inputs.scope : { labels: [], folders: [] }\n return {\n name: name?.trim() || workflow.title,\n prompt: '',\n skill_ref: null,\n skill_inputs: inputs,\n action: {\n type: workflow.documentAction,\n documents: {\n doc_ext_ids: scope.documents ?? [],\n label_ext_ids: scope.labels ?? [],\n latest: inputs.latest === true,\n },\n tag_ext_ids: typeof inputs.output === 'string' && inputs.output ? [inputs.output] : [],\n overwrite: inputs.overwrite === true,\n },\n }\n }\n for (const value of Object.values(inputs)) {\n if (!value || typeof value !== 'object') continue\n const scope = value as { documents?: unknown[]; folders?: unknown[]; labels?: unknown[] }\n if (\n Array.isArray(scope.documents) &&\n !scope.documents.length &&\n ((scope.folders?.length ?? 0) > 0 || (scope.labels?.length ?? 0) > 0)\n ) {\n throw new Error(\n 'The selected file scope has no documents. Choose a scope containing files before running.'\n )\n }\n }\n const typed = name?.trim()\n if (workflow.options?.agent === false) {\n const message = composeWorkflowPrompt(workflow, inputs, context)\n return { name: typed || message, prompt: '', skill_ref: null, skill_inputs: null }\n }\n const derived = typed || deriveWorkflowName(workflow, inputs)\n if (workflow.skill) {\n return {\n name: derived,\n prompt: typeof inputs.args === 'string' ? inputs.args.trim() : '',\n skill_ref: workflow.skill,\n skill_inputs: inputs,\n }\n }\n return {\n name: derived,\n prompt: composeWorkflowPrompt(workflow, inputs, context),\n skill_ref: null,\n // The files a run is bound to travel in the saved inputs, whatever the template: the server binds\n // the run to the ids listed under any input's `documents`.\n skill_inputs: hasDocumentInputs(inputs) ? inputs : null,\n }\n}\n\n/** Does this workflow need a workspace to run (everything except a plain reminder)? */\nexport const isAgenticWorkflow = (workflow: WorkflowDefinition): boolean =>\n workflow.options?.agent !== false\n\nexport interface TaskRequestContext {\n /** File names for the prompt's wording (\"the document <name>\"), by file id. */\n documentTitles?: Record<string, string>\n workflow: WorkflowDefinition\n values: TaskComposerValues\n /** The goal checklist drafted for agent work, if any. */\n plan?: TaskPlan | null\n}\n\n/** Does this composer submission create work straight away (rather than save a workflow)? */\nexport const createsWork = (values: Pick<TaskComposerValues, 'assignee' | 'when'>): boolean =>\n values.assignee === 'me' || values.when === 'now' || values.when === 'manual'\n\n/**\n * The create-work request: a plain to-do (a title, no agent) or agent work that starts now. Agent work\n * throws when there is no workspace open.\n */\nexport function composerToWorkRequest(\n { workflow, values, plan, documentTitles }: TaskRequestContext,\n workspaceId: string | undefined\n): CreateWorkRequest {\n const common = {\n description: values.description.trim(),\n due_at: values.dueAt ? localInputToIso(values.dueAt) : null,\n parent_conversation_ext_id: values.parentTaskId || null,\n shared: values.shared,\n }\n // A task for me is a plain to-do: a title, no prompt and no agent (`auth_mode` is required, and only\n // matters for a run).\n if (values.assignee === 'me') {\n return { ...common, title: values.name.trim(), auth_mode: 'run_now_temp' }\n }\n const fields = workflowTaskFields(workflow, values.inputs, values.name, { documentTitles })\n if (isAgenticWorkflow(workflow) && !workspaceId) {\n throw new Error('Open a workspace to run an agent task.')\n }\n return {\n ...common,\n title: fields.name,\n prompt: fields.prompt || null,\n skill_ref: fields.skill_ref,\n ...(fields.skill_inputs ? { skill_inputs: fields.skill_inputs } : {}),\n agent_ext_id: values.agentId || null,\n auth_mode: 'run_now_temp',\n ...(fields.skill_ref === null && fields.prompt && plan ? { plan } : {}),\n }\n}\n\n/**\n * Run now is a plain assistant query that carries `task` options: the thread it starts becomes a task\n * (generating, then open again). The query is the person's own run, so there is no agent and no\n * access tier. The host turns this into a `POST /v1/responses` body.\n */\nexport interface TaskQuery {\n /** The message sent: the prompt, or `/skill-name arguments` for a skill. */\n input: string\n workspaceId: string\n /** Files the run is bound to (the ids under any input's `documents`). */\n docIds: string[]\n /** People @mentioned in the prompt: the server shares the thread with them and notifies them. */\n mentions?: MessageMentionRef[]\n task: TaskOptions\n}\n\n/** A thread to start: a task's query, or (no `task`) a plain conversation. */\nexport type ThreadQuery = Omit<TaskQuery, 'task'> & { task?: TaskOptions }\n\n/** The ids of the files a form's inputs name (an explicit pick, or a resolved scope), without repeats. */\nexport function inputDocumentIds(inputs: WorkflowInputs): string[] {\n const ids = new Set<string>()\n for (const v of Object.values(inputs)) {\n const docs =\n v !== null && typeof v === 'object' ? (v as { documents?: unknown }).documents : null\n if (Array.isArray(docs)) for (const d of docs) if (typeof d === 'string') ids.add(d)\n }\n return [...ids]\n}\n\n/** The query that runs agent work now (a prompt or a skill) as the person asking. Throws without a workspace. */\nexport function composerToTaskQuery(\n { workflow, values, plan, documentTitles }: TaskRequestContext,\n workspaceId: string | undefined\n): TaskQuery {\n if (!workspaceId) throw new Error('Open a workspace to run an agent task.')\n const fields = workflowTaskFields(workflow, values.inputs, values.name, { documentTitles })\n const input = fields.skill_ref\n ? `/${fields.skill_ref}${fields.prompt ? ` ${fields.prompt}` : ''}`\n : fields.prompt\n return {\n input,\n workspaceId,\n docIds: inputDocumentIds(values.inputs),\n task: {\n title: fields.name,\n description: values.description.trim(),\n due_at: values.dueAt ? localInputToIso(values.dueAt) : null,\n parent_conversation_ext_id: values.parentTaskId || null,\n shared: values.shared,\n ...(fields.skill_ref === null && fields.prompt && plan ? { plan } : {}),\n },\n }\n}\n\n/** The fields shared by creating and updating a workflow: the trigger. Others stay `null` on an update. */\nfunction workflowTrigger(values: TaskComposerValues, clearOthers: boolean) {\n const none = clearOthers ? null : undefined\n return {\n rrule: values.when === 'repeat' ? values.rrule.trim() : none,\n run_at: values.when === 'once' ? localInputToIso(values.runAt) : none,\n event_kind: values.when === 'event' ? values.eventKind.trim() : none,\n event_filter: values.when === 'event' ? (values.eventFilter ?? none) : none,\n after_conversation_ext_id: values.when === 'task' ? values.afterTaskId : none,\n // Saving a run-now template creates an on-demand workflow; other triggers clear it.\n on_demand: values.when === 'now' || values.when === 'manual',\n }\n}\n\nconst withoutUndefined = <T extends object>(o: T): T =>\n Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined)) as T\n\n/**\n * The create-workflow request: exactly one trigger (a date, a repeat, an event, or another task being\n * done) and the action it runs. An agent workflow throws when there is no workspace open.\n */\nexport function composerToWorkflowRequest(\n { workflow, values, plan, documentTitles }: TaskRequestContext,\n workspaceId: string | undefined\n): CreateWorkflowRequest {\n const fields = workflowTaskFields(workflow, values.inputs, values.name, { documentTitles })\n // A workflow belongs to a workspace, a reminder included.\n if (!workspaceId) throw new Error('Open a workspace to save a workflow.')\n return withoutUndefined({\n name: fields.name,\n description: values.description.trim(),\n active: true,\n shared: values.shared,\n timezone: values.timezone,\n ...workflowTrigger(values, false),\n ...(fields.action ? { action: fields.action } : {}),\n prompt: fields.prompt,\n skill_ref: fields.skill_ref,\n skill_inputs: fields.skill_inputs,\n agent_ext_id: values.agentId || null,\n auth_mode: authModeFor(values),\n workspace_ext_id: workspaceId,\n // The plan grades every run of a free-instruction workflow (a skill's run is not a goal run).\n ...(fields.skill_ref === null && fields.prompt && plan ? { plan } : {}),\n })\n}\n\n/** What a composer submission asks the host to do. */\nexport type ComposerCreate =\n | { kind: 'work'; body: CreateWorkRequest }\n | { kind: 'query'; query: TaskQuery }\n | { kind: 'workflow'; body: CreateWorkflowRequest }\n\n/**\n * Route a submission: agent work now is an assistant query, a plain to-do or reminder creates work,\n * every other start creates a workflow.\n * `forceWorkflow` is for the workflow dialog, where even a reminder is saved as a workflow.\n */\nexport function taskComposerToCreateRequest(\n ctx: TaskRequestContext,\n workspaceId: string | undefined,\n forceWorkflow = false\n): ComposerCreate {\n if (forceWorkflow || ctx.workflow.documentAction || !createsWork(ctx.values)) {\n return { kind: 'workflow', body: composerToWorkflowRequest(ctx, workspaceId) }\n }\n // A to-do for me, or a reminder, is a plain task; agent work run now is an assistant query.\n return ctx.values.assignee === 'me' || !isAgenticWorkflow(ctx.workflow)\n ? { kind: 'work', body: composerToWorkRequest(ctx, workspaceId) }\n : { kind: 'query', query: composerToTaskQuery(ctx, workspaceId) }\n}\n\n/**\n * The patch for editing a task (`PATCH /v1/conversation/{id}`): title, description, due date, parent\n * (`null` detaches) and sharing. What the agent was told to do stays as created.\n */\nexport function taskComposerToUpdateRequest({\n values,\n plan,\n}: TaskRequestContext): UpdateConversationRequest {\n return {\n title: values.name.trim(),\n description: values.description.trim(),\n due_at: values.dueAt ? localInputToIso(values.dueAt) : null,\n shared: values.shared,\n parent_conversation_ext_id: values.parentTaskId || null,\n ...(plan !== undefined ? { plan } : {}),\n }\n}\n\n/** The patch for editing a workflow: name, trigger (the other triggers are cleared) and action. */\nexport function composerToWorkflowUpdate({\n workflow,\n values,\n plan,\n documentTitles,\n}: TaskRequestContext): UpdateWorkflowRequest {\n const fields = workflowTaskFields(workflow, values.inputs, values.name, { documentTitles })\n return {\n name: fields.name,\n description: values.description.trim(),\n shared: values.shared,\n timezone: values.timezone,\n ...workflowTrigger(values, true),\n action: fields.action ?? null,\n prompt: fields.prompt,\n skill_ref: fields.skill_ref,\n skill_inputs: fields.skill_inputs,\n agent_ext_id: values.agentId || null,\n auth_mode: authModeFor(values),\n // Omission preserves the plan; explicit null removes a stored free-instruction plan.\n ...(fields.skill_ref === null && fields.prompt && plan !== undefined ? { plan } : {}),\n }\n}\n\n/** Does the task need the owner to authorise workspace access before it can run? */\nexport const taskNeedsAccess = (\n task: Pick<ConversationResponse, 'pending_auth_request_id'>\n): boolean => !!task.pending_auth_request_id\n\nexport interface TaskValuesWorkflows {\n /** The workflow that stands for an instruction task (its first input is `instruction`). */\n customWorkflowId: string\n /** The workflow that stands for a reminder (its first input is `message`). */\n reminderWorkflowId: string\n /** The definitions a saved skill can be matched to (by `skill`), to restore a skill workflow's form. */\n definitions?: WorkflowDefinition[]\n}\n\n/** What an existing task (a conversation with a status) looks like when reopened in the composer. */\nexport function taskToComposerValues(\n task: ConversationResponse,\n workflows: TaskValuesWorkflows\n): Partial<TaskComposerValues> {\n const forMe = !task.agent_ext_id && !task.skill_ref && !task.has_agent_action\n return {\n assignee: forMe ? 'me' : 'agent',\n workflowId: forMe ? workflows.reminderWorkflowId : workflows.customWorkflowId,\n inputs: {},\n when: 'now',\n parentTaskId: task.parent_conversation_ext_id ?? '',\n shared: task.is_shared ?? true,\n description: task.description ?? '',\n dueAt: isoToLocalInput(task.due_at),\n agentId: task.agent_ext_id ?? '',\n name: task.title ?? '',\n }\n}\n\n/** Which start a saved workflow has. */\nexport function workflowWhen(workflow: WorkflowResponse): TaskWhen {\n if (workflow.on_demand) return 'now'\n if (workflow.after_conversation_ext_id) return 'task'\n if (workflow.event_kind) return 'event'\n if (workflow.rrule) return 'repeat'\n return workflow.run_at ? 'once' : 'now'\n}\n\n/** What an existing workflow looks like when reopened in the workflow dialog. */\nexport function workflowToComposerValues(\n workflow: WorkflowResponse,\n workflows: TaskValuesWorkflows\n): Partial<TaskComposerValues> {\n const reminder = !workflow.prompt && !workflow.skill_ref\n const skill = workflow.skill_ref\n ? workflows.definitions?.find((d) => d.skill === workflow.skill_ref)\n : undefined\n const base = {\n assignee: 'agent' as const,\n when: workflowWhen(workflow),\n runAt: isoToLocalInput(workflow.run_at),\n rrule: workflow.rrule ?? '',\n timezone: workflow.timezone,\n eventKind: workflow.event_kind ?? 'mention',\n eventFilter: (workflow.event_filter ?? null) as TaskComposerValues['eventFilter'],\n afterTaskId: workflow.after_conversation_ext_id ?? '',\n shared: workflow.shared,\n description: workflow.description ?? '',\n agentId: workflow.agent_ext_id ?? '',\n name: workflow.name,\n access:\n workflow.auth_mode === 'scheduled_permanent'\n ? ('standing' as const)\n : ('ask_each_run' as const),\n }\n if (workflow.action) {\n const definition = workflows.definitions?.find(\n (d) => d.documentAction === workflow.action?.type\n )\n return {\n ...base,\n workflowId: definition?.id ?? workflows.customWorkflowId,\n inputs: {\n scope: {\n folders: [],\n labels: workflow.action.documents?.label_ext_ids ?? [],\n documents: workflow.action.documents?.doc_ext_ids ?? [],\n },\n output: workflow.action.tag_ext_ids?.[0] ?? '',\n overwrite: workflow.action.overwrite ?? false,\n latest: workflow.action.documents?.latest ?? false,\n },\n }\n }\n if (skill) {\n return {\n ...base,\n workflowId: skill.id,\n inputs: (workflow.skill_inputs as WorkflowInputs | null | undefined) ?? {\n args: workflow.prompt,\n },\n }\n }\n return reminder\n ? { ...base, workflowId: workflows.reminderWorkflowId, inputs: { message: workflow.name } }\n : {\n ...base,\n // A name made from the instruction follows it when the instruction is edited.\n name: workflow.name === firstWords(workflow.prompt ?? '') ? '' : workflow.name,\n workflowId: workflows.customWorkflowId,\n inputs: {\n ...((workflow.skill_inputs as WorkflowInputs | null | undefined) ?? {}),\n instruction: workflow.prompt,\n },\n }\n}\n\n/** What the New task dialog collects: a prompt, who sees it, and optional task details. */\nexport interface NewThreadValues {\n /** What to ask or get done: the first message, which the assistant answers. The title is made from it. */\n prompt: string\n /** A name instead of the generated one. Optional. */\n title: string\n /** Shared with the workspace's members (the default), or private to its creator. */\n shared: boolean\n /** datetime-local value; empty = none. A task field. */\n dueAt: string\n /** The task this is a sub-task of (`con-…`); `''` = none. A task field. */\n parentId: string\n /** Whether the assistant starts on the prompt now. Off: it is a to-do, tracked and not run. */\n assistant: boolean\n}\n\nexport const EMPTY_NEW_THREAD: NewThreadValues = {\n prompt: '',\n title: '',\n shared: false,\n dueAt: '',\n parentId: '',\n assistant: true,\n}\n\n/** Is any task detail filled in (the dialog opens its details when one is preset)? */\nexport const hasTaskFields = (v: NewThreadValues): boolean => Boolean(v.dueAt || v.parentId)\n\n/** A new task: the prompt as the first message (the assistant answers it) and the task's options. */\nexport interface NewThreadRequest {\n input: string\n shared: boolean\n task: TaskOptions\n /** False: nothing is asked of the assistant: the host adds a plain to-do from `todo`. */\n startAssistant: boolean\n /** The to-do to add when `startAssistant` is false: a title and the rest of what the person wrote. */\n todo?: { title: string; description: string }\n}\n\n/** The first line of a prompt, kept to a title's length. */\nexport function titleFromPrompt(prompt: string, max = 80): string {\n const first = prompt.trim().split('\\n')[0].trim()\n return first.length > max ? `${first.slice(0, max - 1).trimEnd()}…` : first\n}\n\n/**\n * The request for a New task submission. Every ask is a task, so the options always ride along; the due\n * date and parent are only set when filled in. The title is only sent when the person wrote one;\n * otherwise the server names the task from the prompt. With the assistant switched off nothing is run: it\n * is a to-do.\n */\nexport function newThreadToRequest(values: NewThreadValues): NewThreadRequest {\n const input = values.prompt.trim()\n const title = values.title.trim()\n const task: TaskOptions = {\n ...(title ? { title } : {}),\n due_at: values.dueAt ? localInputToIso(values.dueAt) : null,\n parent_conversation_ext_id: values.parentId || null,\n shared: values.shared,\n }\n if (!values.assistant) {\n const name = title || titleFromPrompt(input)\n return {\n input,\n shared: values.shared,\n task,\n startAssistant: false,\n todo: { title: name, description: input === name ? '' : input },\n }\n }\n return { input, shared: values.shared, task, startAssistant: true }\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 { 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\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: 'Start with ARBI',\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 l: NewThreadDialogLabels = { ...DEFAULT_NEW_THREAD_DIALOG_LABELS, ...labels }\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","import { useLayoutEffect, useRef, type ReactNode } from 'react'\nimport { cn, Popover, PopoverContent, PopoverTrigger } from '@arbidocs/react/ui'\nimport { StepChip } from '../workflows/StepChip'\nimport { StepDocumentButton } from '../workflows/StepDocuments'\nimport type { WorkflowStepPhase } from '../workflows/run'\n\nexport interface TaskFlowItem {\n id: string\n avatar: ReactNode\n /** Who acted (a person's id, `assistant`…): their face shows once however often they acted. */\n actor?: string\n /**\n * A workflow step's event: drawn in the transcript as that step's chip (its kind's colour and\n * icon, the phase the event put it in), as the thread's bar draws the step.\n */\n stepChip?: {\n kind: string\n phase: WorkflowStepPhase\n icon?: ReactNode\n /** The document the event produced: opened from beside the chip. */\n document?: { name: string; onOpen: () => void }\n }\n label: string\n description?: string\n time: string\n exactTime?: string\n current?: boolean\n detail?: ReactNode\n onSelect?: () => void\n}\n\n/** Chronological history, initially scrolled to the latest step. Hosts supply events and permissions. */\nexport function TaskFlow({\n items,\n className,\n}: {\n items: readonly TaskFlowItem[]\n className?: string\n}) {\n const scroll = useRef<HTMLDivElement>(null)\n const following = useRef(true)\n const latest = items.at(-1)?.id\n useLayoutEffect(() => {\n const el = scroll.current\n if (!el) return\n const follow = () => {\n if (following.current) el.scrollLeft = el.scrollWidth\n }\n follow()\n const resize = new ResizeObserver(follow)\n resize.observe(el)\n return () => resize.disconnect()\n }, [latest])\n return (\n <div\n ref={scroll}\n className={cn('min-w-0 flex-1 overflow-x-auto overscroll-x-contain', className)}\n data-testid=\"thread-flow\"\n role=\"region\"\n aria-label=\"Thread activity\"\n tabIndex={0}\n onScroll={(e) => {\n const el = e.currentTarget\n following.current = el.scrollWidth - el.scrollLeft - el.clientWidth < 24\n }}\n >\n <ol className=\"flex w-max min-w-full items-center gap-1 py-0.5\">\n {items.map((item, i) => {\n // Each entry is a chip in the ad hoc colour, its actor's face as the badge, as the steps\n // of a workflow run are chips in their kinds' colours.\n const chip = (props: Record<string, unknown>) => (\n <StepChip\n kind=\"adhoc\"\n phase=\"ready\"\n icon={item.avatar}\n label={item.label}\n current={item.current}\n labelClassName=\"max-w-32 truncate\"\n title={item.description ?? item.label}\n className=\"shrink-0 [&_.wf-badge]:bg-transparent\"\n {...props}\n >\n <span\n className=\"shrink-0 text-[10px] font-normal text-muted-foreground\"\n title={item.exactTime}\n >\n {item.time}\n </span>\n </StepChip>\n )\n return (\n <li\n key={item.id}\n className=\"flex shrink-0 items-center gap-1\"\n data-testid={`thread-flow-${item.id}`}\n >\n {i > 0 && (\n <span aria-hidden className=\"wf-link wf-kind-adhoc w-3 flex-none\" data-done />\n )}\n {item.onSelect ? (\n chip({ onClick: item.onSelect })\n ) : item.detail ? (\n <Popover>\n <PopoverTrigger asChild>{chip({})}</PopoverTrigger>\n <PopoverContent className=\"max-h-72 overflow-y-auto text-sm whitespace-pre-wrap\">\n {item.detail}\n </PopoverContent>\n </Popover>\n ) : (\n chip({ inert: true })\n )}\n </li>\n )\n })}\n </ol>\n </div>\n )\n}\n\n/** A persisted activity entry inside the transcript, separate from participant message bubbles. */\nexport function ThreadActivity({ item, children }: { item: TaskFlowItem; children?: ReactNode }) {\n if (item.stepChip) {\n const { kind, phase, icon, document } = item.stepChip\n const done = phase === 'done' || phase === 'skipped'\n return (\n <div\n className={cn(`wf-kind-${kind}`, 'flex flex-col items-center gap-1 px-3 py-2')}\n data-testid={`thread-activity-${item.id}`}\n title={item.description}\n >\n <div className=\"flex w-full max-w-xl items-center gap-2\">\n <span aria-hidden className=\"wf-link\" data-done={done || undefined} />\n <StepChip\n inert\n kind={kind}\n phase={phase}\n icon={icon}\n label={item.label}\n className={cn('shrink-0', document && 'rounded-r-none')}\n >\n <time\n className=\"shrink-0 text-[10px] font-normal text-muted-foreground\"\n title={item.exactTime}\n >\n {item.time}\n </time>\n </StepChip>\n {document && (\n <StepDocumentButton\n kind={kind}\n name={document.name}\n onOpen={document.onOpen}\n showName\n testId={`thread-activity-${item.id}-open-document`}\n />\n )}\n <span aria-hidden className=\"wf-link\" data-done={done || undefined} />\n </div>\n {children}\n </div>\n )\n }\n return (\n <div className=\"flex justify-center px-3 py-2\" data-testid={`thread-activity-${item.id}`}>\n <div\n className=\"max-w-full text-center text-xs text-muted-foreground\"\n title={item.description}\n >\n <div className=\"flex flex-wrap items-center justify-center gap-1.5\">\n {item.avatar}\n <span>{item.label}</span>\n <time title={item.exactTime}>{item.time}</time>\n </div>\n {children}\n {item.detail && (\n <div className=\"mt-1 whitespace-pre-wrap break-words text-left\">{item.detail}</div>\n )}\n </div>\n </div>\n )\n}\n","/**\n * The threads list's launcher: a composer at the bottom of the list that starts a thread where you\n * are. Type what you need (@mention people), or pick a saved workflow or a to-do, and press Enter:\n * the thread starts and joins the list, and the launcher offers to open it — it never takes you\n * there by itself, so several can be started one after another, as agents are dispatched.\n */\n\nimport { useRef, useState } from 'react'\nimport { ArrowUpRight, CalendarClock, Check, Loader2, SendHorizontal, X } from 'lucide-react'\nimport {\n Button,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Textarea,\n VisibilityToggle,\n cn,\n} from '@arbidocs/react/ui'\nimport { MentionMenu } from '../../chat/MentionMenu'\nimport { useMentionAutocomplete } from '../../chat/useMentionAutocomplete'\nimport { extractMentions, toMessageMentions, type MentionCandidate } from '@arbidocs/react/shell'\nimport type { TaskStartValues } from './TaskStartDialog'\n\nexport interface ThreadLauncherLabels {\n placeholder: string\n todoPlaceholder: string\n withArbi: string\n todo: string\n source: string\n start: string\n schedule: string\n /** A started thread; `{title}` is replaced. */\n started: string\n open: string\n dismiss: string\n shared: string\n private: string\n}\n\nexport const DEFAULT_THREAD_LAUNCHER_LABELS: ThreadLauncherLabels = {\n placeholder: 'Start a new thread: ask ARBI, or @mention people…',\n todoPlaceholder: 'What needs doing?',\n withArbi: 'With ARBI',\n todo: 'To-do',\n source: 'Who does the work',\n start: 'Start',\n schedule: 'Schedule',\n started: 'Started “{title}”',\n open: 'Open',\n dismiss: 'Dismiss',\n shared: 'Workspace',\n private: 'Only Me',\n}\n\n/** What a start made, as the launcher offers it. */\nexport interface ThreadLauncherStarted {\n id: string\n title: string\n}\n\nexport interface ThreadLauncherProps {\n workflows: readonly { external_id: string; name: string }[]\n /** Who can be @mentioned: the workspace's people. */\n people?: ReadonlyArray<MentionCandidate>\n isPending?: boolean\n error?: string | null\n /** Replaces the start button's label (e.g. \"Look again\" while a thread is late). */\n startLabel?: string\n /** Start it; resolves to the thread it made (offered with Open), or nothing. Throws to keep the draft. */\n onStart: (values: TaskStartValues) => Promise<ThreadLauncherStarted | null | undefined>\n /** Start it later: the host's scheduler. */\n onLater?: (values: TaskStartValues) => void\n onOpen: (id: string) => void\n /** Focus the field when the launcher appears (the header's New Task brought you here). */\n autoFocus?: boolean\n labels?: Partial<ThreadLauncherLabels>\n className?: string\n}\n\nconst NO_PEOPLE: ReadonlyArray<MentionCandidate> = []\n\nexport function ThreadLauncher({\n workflows,\n people = NO_PEOPLE,\n isPending,\n error,\n startLabel,\n onStart,\n onLater,\n onOpen,\n autoFocus,\n labels,\n className,\n}: ThreadLauncherProps) {\n const l = { ...DEFAULT_THREAD_LAUNCHER_LABELS, ...labels }\n const [prompt, setPrompt] = useState('')\n const [choice, setChoice] = useState('prompt')\n const [shared, setShared] = useState(false)\n const [started, setStarted] = useState<ThreadLauncherStarted | null>(null)\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const mention = useMentionAutocomplete({\n value: prompt,\n onValueChange: setPrompt,\n candidates: people,\n textareaRef,\n })\n const todo = choice === 'todo'\n const workflowId = choice === 'prompt' || todo ? null : choice\n const workflow = workflows.find((w) => w.external_id === workflowId)\n const valid = workflowId ? Boolean(workflow) : Boolean(prompt.trim())\n const values: TaskStartValues = {\n prompt: prompt.trim(),\n workflowId,\n todo,\n shared,\n mentions: toMessageMentions(extractMentions(prompt, people)),\n }\n\n const start = async () => {\n if (!valid || isPending) return\n try {\n const made = await onStart(values)\n setStarted(made ?? null)\n setPrompt('')\n setChoice('prompt')\n textareaRef.current?.focus()\n } catch {\n /* The host shows why; the draft stays for a retry. */\n }\n }\n\n return (\n <div\n className={cn('shrink-0 border-t border-border bg-background px-3 pb-3 pt-2', className)}\n data-testid=\"thread-launcher\"\n >\n <div className=\"mx-auto w-full max-w-3xl\">\n {started && (\n <div\n className=\"mb-2 flex min-w-0 items-center gap-2 text-xs\"\n role=\"status\"\n data-testid=\"thread-launcher-started\"\n >\n <span className=\"flex size-4 shrink-0 items-center justify-center rounded-full bg-emerald-600 text-white dark:bg-emerald-500\">\n <Check className=\"size-3\" strokeWidth={3} />\n </span>\n <span className=\"min-w-0 truncate text-muted-foreground\">\n {l.started.replace('{title}', started.title)}\n </span>\n <Button\n variant=\"link\"\n size=\"sm\"\n className=\"h-auto shrink-0 gap-0.5 p-0 text-xs\"\n onClick={() => onOpen(started.id)}\n data-testid=\"thread-launcher-open\"\n >\n {l.open}\n <ArrowUpRight className=\"size-3\" />\n </Button>\n <button\n type=\"button\"\n className=\"ml-auto shrink-0 rounded p-0.5 text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label={l.dismiss}\n onClick={() => setStarted(null)}\n >\n <X className=\"size-3.5\" />\n </button>\n </div>\n )}\n <div className=\"rounded-lg border border-border bg-card shadow-sm focus-within:border-ring\">\n {workflow ? (\n <p className=\"px-3 pt-2.5 text-sm font-medium\" data-testid=\"thread-launcher-workflow\">\n {workflow.name}\n </p>\n ) : (\n <div className=\"relative\">\n <Textarea\n ref={textareaRef}\n value={prompt}\n rows={1}\n autoFocus={autoFocus}\n onChange={(event) => mention.onValueChange(event.target.value)}\n onKeyDown={(event) => {\n mention.nav.handleKeyDown(event)\n if (event.defaultPrevented || mention.isOpen) return\n if (event.key === 'Enter' && !event.shiftKey && !event.nativeEvent.isComposing) {\n event.preventDefault()\n void start()\n }\n }}\n {...(mention.isOpen ? mention.nav.comboboxProps : {})}\n {...mention.textareaProps}\n disabled={isPending}\n placeholder={todo ? l.todoPlaceholder : l.placeholder}\n aria-label={todo ? l.todoPlaceholder : l.placeholder}\n className=\"field-sizing-content max-h-40 min-h-10 resize-none border-0 bg-transparent px-3 pt-2.5 shadow-none focus-visible:ring-0\"\n data-testid=\"thread-launcher-input\"\n />\n <MentionMenu\n open={mention.isOpen}\n placement=\"above\"\n items={mention.items}\n selectedIndex={mention.nav.selectedIndex}\n setSelectedIndex={mention.nav.setSelectedIndex}\n listboxId={mention.nav.listboxId}\n onSelect={mention.pick}\n />\n </div>\n )}\n <div className=\"flex items-center gap-2 px-2 pb-1.5\">\n <Select value={choice} onValueChange={setChoice} disabled={isPending}>\n <SelectTrigger\n aria-label={l.source}\n className=\"h-7 w-auto max-w-[45%] border-0 bg-transparent px-1.5 text-xs font-normal text-muted-foreground shadow-none hover:bg-muted\"\n data-testid=\"thread-launcher-source\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"prompt\">{l.withArbi}</SelectItem>\n <SelectItem value=\"todo\">{l.todo}</SelectItem>\n {workflows.map((w) => (\n <SelectItem key={w.external_id} value={w.external_id}>\n {w.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {error && (\n <p role=\"alert\" className=\"min-w-0 truncate text-xs text-destructive\" title={error}>\n {error}\n </p>\n )}\n <div className=\"ml-auto flex items-center gap-1.5\">\n <VisibilityToggle\n items={{ shared }}\n onToggle={setShared}\n label={shared ? l.shared : l.private}\n disabled={isPending}\n data-testid=\"thread-launcher-visibility\"\n />\n {onLater && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 text-muted-foreground\"\n disabled={!valid || isPending}\n onClick={() => onLater(values)}\n aria-label={l.schedule}\n title={l.schedule}\n data-testid=\"thread-launcher-later\"\n >\n <CalendarClock className=\"size-4\" />\n </Button>\n )}\n <Button\n size=\"icon\"\n className=\"size-8\"\n disabled={!valid || isPending}\n onClick={() => void start()}\n aria-label={startLabel ?? l.start}\n title={startLabel ?? l.start}\n data-testid=\"thread-launcher-start\"\n >\n {isPending ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <SendHorizontal className=\"size-4\" />\n )}\n </Button>\n </div>\n </div>\n </div>\n </div>\n </div>\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\">&nbsp;</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.\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 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 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 const link = <span aria-hidden className=\"wf-link wf-kind-start max-w-6\" data-done />\n // The step a person went to (from a group, the list, a \"Working\" pill); none = where the run is.\n const [selected, setSelected] = useState<string | null>(null)\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 {link}\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 <>\n <span aria-hidden className=\"wf-link max-w-6\" />\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 )}\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 icon={glyphOf}\n kindOf={stepKindOf}\n labels={{ waitingFor: l.waitingFor, ...barLabels }}\n tid={(suffix) => `workflow-thread-${suffix}`}\n />\n </div>\n )\n}\n","/**\n * Linked runs, read from a thread's activity log: the signals its steps raised (`step_signal`), the\n * linked workflows each one started (`linked_run`, pointing at the new thread), and, for a thread a\n * signal started, where it came from (its `created` event's `linked_from`). The thread's top bar\n * shows them (`WorkflowThreadStrip`); the host resolves the threads' titles and navigation.\n */\n\nimport type { WorkflowActivityEvent } from '../workflows/run'\n\n/** A thread a signal started. */\nexport interface WorkflowLinkedRunRef {\n conversationId: string\n /** The workflow that started on the signal (`wfl-…`). */\n workflowId?: string\n}\n\n/** A signal one of the thread's steps raised, and the linked threads it started. */\nexport interface WorkflowRaisedSignal {\n step: string\n signal: string\n runs: WorkflowLinkedRunRef[]\n}\n\n/** Where a linked run came from: the step (and its signal) in the parent thread that started it. */\nexport interface WorkflowRunOrigin {\n conversationId: string\n step?: string\n signal?: string\n}\n\nexport interface WorkflowRunLinks {\n raised: WorkflowRaisedSignal[]\n startedBy?: WorkflowRunOrigin\n}\n\nconst text = (v: unknown): string | undefined => (typeof v === 'string' && v ? v : undefined)\n\n/** The thread's linked runs from its activity log (oldest first). */\nexport function linkedRunsFromActivity(\n events: readonly WorkflowActivityEvent[] | null | undefined\n): WorkflowRunLinks {\n const raised: WorkflowRaisedSignal[] = []\n let startedBy: WorkflowRunOrigin | undefined\n const entry = (step: string, signal: string): WorkflowRaisedSignal => {\n let found = raised.find((r) => r.step === step && r.signal === signal)\n if (!found) raised.push((found = { step, signal, runs: [] }))\n return found\n }\n for (const e of events ?? []) {\n const d = e.detail ?? {}\n const step = text(d.step)\n const signal = text(d.signal)\n if (e.kind === 'step_signal' && step && signal) entry(step, signal)\n else if (e.kind === 'linked_run' && step && signal) {\n const conversationId = text(d.conversation_ext_id)\n const runs = entry(step, signal).runs\n if (conversationId && !runs.some((r) => r.conversationId === conversationId))\n runs.push({ conversationId, workflowId: text(d.workflow_ext_id) })\n } else if (e.kind === 'created' && d.linked_from && typeof d.linked_from === 'object') {\n const from = d.linked_from as Record<string, unknown>\n const conversationId = text(from.conversation_ext_id)\n if (conversationId)\n startedBy = { conversationId, step: text(from.step), signal: text(from.signal) }\n }\n }\n return startedBy ? { raised, startedBy } : { raised }\n}\n","import type { TaskActivityEvent } from './TaskActivityTimeline'\nimport { eventWaitingDocuments, waitingForDocumentsText } from '../workflows/run'\n\nexport interface CompactThreadActivity {\n event: TaskActivityEvent\n label: string\n recipients: string[]\n}\n\nconst STEP_LABELS: Record<string, string> = {\n step_started: 'Step started',\n step_done: 'Step done',\n step_skipped: 'Step skipped',\n step_failed: 'Step failed',\n step_waiting: 'Waiting',\n step_progress: 'Signed',\n step_sent_back: 'Sent back',\n}\n\n/** What happened to a named step: \"Summarise key risks done\". */\nconst STEP_VERBS: Record<string, string> = {\n step_started: 'started',\n step_done: 'done',\n step_skipped: 'skipped',\n step_failed: 'failed',\n step_sent_back: 'sent back',\n}\n\n/**\n * Only user-facing actions. Notification batches group by their persisted source message. A step's\n * events are named after the step (`stepTitleOf`, from the run's plan) when it is known.\n */\nexport function compactThreadActivity(\n events: readonly TaskActivityEvent[],\n stepTitleOf?: (stepId: string) => string | undefined\n): CompactThreadActivity[] {\n const result: CompactThreadActivity[] = []\n const batches = new Map<string, CompactThreadActivity>()\n for (const event of events) {\n if (event.kind === 'notified') {\n if (\n ['conversation_ready', 'conversation_done'].includes(\n String(event.detail?.notification_type)\n )\n )\n continue\n const source = event.detail?.batch_ext_id ?? event.detail?.message_ext_id\n const key =\n typeof source === 'string' && source ? `${event.actor_ext_id}:${source}` : event.external_id\n let entry = batches.get(key)\n if (!entry) {\n entry = { event, label: 'Notified 1 user', recipients: [] }\n batches.set(key, entry)\n result.push(entry)\n }\n if (event.to_ext_id && !entry.recipients.includes(event.to_ext_id))\n entry.recipients.push(event.to_ext_id)\n const count = Math.max(1, entry.recipients.length)\n entry.label = `Notified ${count} ${count === 1 ? 'user' : 'users'}`\n } else if (STEP_LABELS[event.kind]) {\n // A workflow step's progress: the thread's step strip shows it as the step's own status.\n const documents = eventWaitingDocuments(event.detail)\n const title =\n typeof event.detail?.step === 'string' ? stepTitleOf?.(event.detail.step) : undefined\n result.push({\n event,\n label: documents\n ? waitingForDocumentsText(documents.length)\n : title && STEP_VERBS[event.kind]\n ? `${title} ${STEP_VERBS[event.kind]}`\n : STEP_LABELS[event.kind],\n recipients: [],\n })\n } else if (\n ['artifact_created', 'artifact_edited', 'document_added', 'document_removed'].includes(\n event.kind\n )\n ) {\n const labels: Record<string, string> = {\n artifact_created: 'Generated',\n artifact_edited: 'Edited document',\n document_added: 'Added document',\n document_removed: 'Removed document',\n }\n result.push({ event, label: labels[event.kind], recipients: [] })\n } else if (event.kind === 'call') {\n // A thread call's log card: one row per call, updated in place when it ends.\n result.push({\n event,\n label: event.detail?.ended_at ? 'Call' : 'Call started',\n recipients: [],\n })\n } else if (event.kind === 'recording') {\n // A stopped call recording: its Recording card.\n result.push({ event, label: 'Recording', recipients: [] })\n } else if (\n [\n 'created',\n 'participant_joined',\n 'assistant_responded',\n 'assistant_stopped',\n 'done',\n ].includes(event.kind)\n ) {\n const labels: Record<string, string> = {\n created: 'Started thread',\n participant_joined: 'Followed Up',\n assistant_responded: 'Answered',\n // A stopped turn logs its own crumb, so the header no longer reads the previous\n // answer's \"Answered\" as the outcome of the turn that was stopped.\n assistant_stopped: 'Stopped',\n done: 'Marked done',\n }\n result.push({\n event,\n label: labels[event.kind],\n recipients: [],\n })\n }\n }\n return result\n}\n","import { MessageSquare } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface TaskThreadChipLabels {\n open: string\n watch: string\n none: string\n}\n\nexport const DEFAULT_TASK_THREAD_CHIP_LABELS: TaskThreadChipLabels = {\n open: 'Open thread',\n watch: 'Watch live',\n none: 'No thread yet',\n}\n\nexport interface TaskThreadChipProps {\n /** Task id: keys the test id (`task-thread-{id}`). */\n id: string\n /** The task's conversation (a task is a conversation: its own id). */\n conversationId?: string | null\n /** An agent is writing into the thread right now. */\n generating?: boolean\n onOpen: (conversationId: string) => void\n testId?: string\n labels?: Partial<TaskThreadChipLabels>\n}\n\n/** The link from a task to its thread — live-pulsing while the agent works, muted before there is one. */\nexport function TaskThreadChip({\n id,\n conversationId,\n generating = false,\n onOpen,\n testId,\n labels,\n}: TaskThreadChipProps) {\n const l = { ...DEFAULT_TASK_THREAD_CHIP_LABELS, ...labels }\n if (!conversationId) {\n return (\n <span\n className=\"inline-flex items-center gap-1 text-xs text-muted-foreground\"\n data-testid={testIdOr(testId, { testId: `task-thread-${id}` })}\n data-state=\"none\"\n >\n <MessageSquare className=\"size-3.5 opacity-50\" aria-hidden />\n {l.none}\n </span>\n )\n }\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-7 gap-1.5 px-2 text-xs pointer-coarse:h-11',\n generating && 'text-ai-ink hover:text-ai-ink'\n )}\n onClick={() => onOpen(conversationId)}\n data-testid={testIdOr(testId, { testId: `task-thread-${id}` })}\n data-state={generating ? 'live' : 'idle'}\n >\n <span className=\"relative flex size-3.5 items-center justify-center\">\n {generating && (\n <span className=\"absolute inline-flex size-full animate-ping rounded-full bg-ai-soft\" />\n )}\n <MessageSquare className=\"relative size-3.5\" aria-hidden />\n </span>\n {generating ? l.watch : l.open}\n </Button>\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 { ListTodo, Plus, Workflow } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { TabHeader, type Tab } from '../../shell/TabHeader'\n\n/** Fixed strings of the Tasks page chrome. */\nexport interface TasksChromeLabels {\n tasksTab: string\n newTask: string\n}\n\nexport const DEFAULT_TASKS_CHROME_LABELS: TasksChromeLabels = {\n tasksTab: 'Tasks',\n newTask: 'New task',\n}\n\nexport interface TasksToolbarProps {\n /** Number of tasks (shown on the single \"Tasks\" tab). */\n count: number\n onNewTask: () => void\n testIds?: Partial<{ tab: string; newTask: string }>\n labels?: Partial<TasksChromeLabels>\n}\n\n/** The Tasks page header: one \"Tasks\" tab with a count, and New task (the page's primary action). */\nexport function TasksToolbar({ count, onNewTask, testIds, labels }: TasksToolbarProps) {\n const l = { ...DEFAULT_TASKS_CHROME_LABELS, ...labels }\n const tabs: Tab[] = [\n {\n id: 'tasks',\n label: l.tasksTab,\n icon: <ListTodo className=\"size-4\" />,\n count,\n testId: testIdOr(testIds?.tab, { testId: 'tasks-tab' }),\n },\n ]\n return (\n <div className=\"sticky top-0 z-10 bg-background\" data-slot=\"tasks-toolbar\">\n <TabHeader\n tabs={tabs}\n activeTabId=\"tasks\"\n onTabChange={() => {}}\n rightContent={\n <Button\n onClick={onNewTask}\n data-testid={testIdOr(testIds?.newTask, { testId: 'task-new' })}\n >\n <Plus size={16} className=\"mr-1.5\" />\n {l.newTask}\n </Button>\n }\n />\n </div>\n )\n}\n\n/** Fixed strings of the Workflows page chrome. */\nexport interface WorkflowsChromeLabels {\n workflowsTab: string\n newWorkflow: string\n}\n\nexport const DEFAULT_WORKFLOWS_CHROME_LABELS: WorkflowsChromeLabels = {\n workflowsTab: 'Workflows',\n newWorkflow: 'New workflow',\n}\n\nexport interface WorkflowsToolbarProps {\n /** Number of workflows (shown on the single \"Workflows\" tab). */\n count: number\n onNewWorkflow: () => void\n testIds?: Partial<{ tab: string; newWorkflow: string }>\n labels?: Partial<WorkflowsChromeLabels>\n}\n\n/** The Workflows page header: one \"Workflows\" tab with a count, and New workflow. */\nexport function WorkflowsToolbar({ count, onNewWorkflow, testIds, labels }: WorkflowsToolbarProps) {\n const l = { ...DEFAULT_WORKFLOWS_CHROME_LABELS, ...labels }\n const tabs: Tab[] = [\n {\n id: 'workflows',\n label: l.workflowsTab,\n icon: <Workflow className=\"size-4\" />,\n count,\n testId: testIdOr(testIds?.tab, { testId: 'workflows-tab' }),\n },\n ]\n return (\n <div className=\"sticky top-0 z-10 bg-background\" data-slot=\"workflows-toolbar\">\n <TabHeader\n tabs={tabs}\n activeTabId=\"workflows\"\n onTabChange={() => {}}\n rightContent={\n <Button\n onClick={onNewWorkflow}\n data-testid={testIdOr(testIds?.newWorkflow, { testId: 'workflow-new' })}\n >\n <Plus size={16} className=\"mr-1.5\" />\n {l.newWorkflow}\n </Button>\n }\n />\n </div>\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 renderScope?: (\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode\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 renderScope,\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={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 renderScope,\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={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 { useEffect, useState } from 'react'\nimport {\n Button,\n Checkbox,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n Input,\n} from '@arbidocs/react/ui'\n\n/** Notifications are invitations to follow up in the thread, without assigning a review stage. */\nexport function ThreadNotifyDialog({\n open,\n onOpenChange,\n people,\n isShared,\n onNotify,\n}: {\n open: boolean\n onOpenChange: (open: boolean) => void\n people: readonly { id: string; label: string }[]\n isShared: boolean\n onNotify: (ids: string[]) => Promise<unknown>\n}) {\n const [selected, setSelected] = useState<string[]>([])\n const [query, setQuery] = useState('')\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string | null>(null)\n useEffect(() => {\n if (open) {\n setSelected([])\n setQuery('')\n setError(null)\n }\n }, [open])\n return (\n <Dialog\n open={open}\n onOpenChange={(value) => {\n if (!busy) onOpenChange(value)\n }}\n >\n <DialogContent className=\"max-w-sm\" data-testid=\"thread-notify-dialog\">\n <DialogTitle>Notify</DialogTitle>\n <DialogDescription>\n {isShared\n ? 'Ask someone to follow up in this thread.'\n : 'Notifying someone shares this thread with your workspace.'}\n </DialogDescription>\n <Input\n aria-label=\"Find people\"\n placeholder=\"Find someone…\"\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n />\n <div className=\"max-h-64 overflow-y-auto space-y-1\">\n {people\n .filter((person) => person.label.toLowerCase().includes(query.toLowerCase()))\n .map((person) => (\n <label\n key={person.id}\n className=\"flex cursor-pointer items-center gap-2 rounded px-2 py-2 hover:bg-muted\"\n >\n <Checkbox\n disabled={busy}\n checked={selected.includes(person.id)}\n onCheckedChange={(checked) =>\n setSelected((old) =>\n checked ? [...old, person.id] : old.filter((id) => id !== person.id)\n )\n }\n />\n {person.label}\n </label>\n ))}\n {!people.length && (\n <p className=\"text-sm text-muted-foreground\">No other workspace members yet.</p>\n )}\n </div>\n {error && (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n {error}\n </p>\n )}\n <Button\n disabled={busy || !selected.length}\n data-testid=\"thread-notify-submit\"\n onClick={async () => {\n setBusy(true)\n setError(null)\n try {\n await onNotify(selected)\n onOpenChange(false)\n } catch (failure) {\n setError(failure instanceof Error ? failure.message : 'Could not notify people')\n } finally {\n setBusy(false)\n }\n }}\n >\n {busy ? 'Notifying…' : 'Notify'}\n </Button>\n </DialogContent>\n </Dialog>\n )\n}\n","import { 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 = 'ARBI',\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 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","/**\n * How an agent step LOOKS: its icon and accent colour, and the model-tier and model icons beside\n * it. What a step says (label, narrative, the current step) is plain data in `@arbidocs/sdk`\n * (`chat/agent-steps`). Icons are a rendering concern, not part of the wire protocol: the backend\n * sends the semantic identity (`step` and `detail[].tool`), mapped to lucide icons here. The step\n * map is keyed by the generated `step` literal, so a backend step without an icon is a compile\n * error.\n */\n\nimport type React from 'react'\nimport type { LucideIcon } from 'lucide-react'\nimport {\n getAgentStepLabel,\n getCurrentStep,\n getStepTool,\n type AgentStepEvent,\n type DocInfoMap,\n} from '@arbidocs/sdk/browser'\nimport {\n Search,\n FileText,\n List,\n Image,\n ImagePlus,\n Globe,\n Link,\n Telescope,\n Terminal,\n Bot,\n ClipboardList,\n FilePlus,\n Languages,\n MessageCircleQuestion,\n Reply,\n Bookmark,\n Brain,\n Milestone,\n Target,\n MessageSquare,\n ListChecks,\n Cog,\n Zap,\n Sparkles,\n Wrench,\n CornerDownRight,\n Glasses,\n Crown,\n} from 'lucide-react'\nimport type { components } from '@arbidocs/client'\n\ntype StepName = NonNullable<components['schemas']['AgentStepEvent']['step']>\n\n/** Lifecycle step → icon. Exhaustive: a new backend step value is a compile error. */\nexport const STEP_ICON_MAP: Record<StepName, LucideIcon> = {\n goal: Target,\n interjection: CornerDownRight,\n planning: ClipboardList,\n tool_progress: Cog,\n goal_progress: Target,\n answering: MessageSquare,\n evaluation: ListChecks,\n skill: Wrench,\n // The agent answering a message directly. Distinct from `answering` (which\n // ends a goal run) and from `interjection` (which interrupts one).\n reply: Reply,\n}\n\n/** Tool → icon. Best-effort: tools are open-ended (incl. MCP) → Sparkles fallback. */\nexport const TOOL_ICON_MAP: Record<string, LucideIcon> = {\n search_inside_documents: Search,\n read_document: FileText,\n get_table_of_contents: List,\n view_document_pages: Image,\n web_search: Globe,\n read_url: Link,\n deep_research: Telescope,\n spawn_coding_agent: Terminal,\n execute_code: Terminal,\n run_skill: Wrench,\n // Sub-agent verifier steps are relayed tagged `goal_progress` so the goal-gate\n // check resolves to the same target icon as the lifecycle step.\n goal_progress: Target,\n personal_agent: Bot,\n create_plan: ClipboardList,\n create_artifact: FilePlus,\n // A generated image (the `/image` command and the Generate image workflow).\n create_image: ImagePlus,\n translate_document: Languages,\n ask_user: MessageCircleQuestion,\n save_skill: Bookmark,\n // Recording a fact — same Milestone glyph the Facts page and sidebar wear, so\n // the step in the trace and the thing it created read as one entity. Brain is\n // deliberately not reused here: it means the *wise model tier* just below, and\n // semantic search elsewhere.\n save_memory: Milestone,\n}\n\n/** Goal-step icon by model tier (from `model_recommendation`). */\nexport const MODEL_TIER_ICON_MAP: Record<string, LucideIcon> = {\n fast: Zap,\n wise: Brain,\n premium: Sparkles,\n}\n\n/** Tooltip text for MODEL_TIER_ICON_MAP — the glyph alone reads as noise. */\nexport const MODEL_TIER_LABELS: Record<string, string> = {\n fast: 'Answered with the fast model',\n wise: 'Answered with the reasoning model',\n premium: 'Answered with the premium model',\n}\n\n/**\n * Resolve the icon for an agent step: prefer the tool (tool-call / tool_progress\n * steps), then the lifecycle step, then a generic fallback.\n */\nexport function getAgentStepIcon(\n step: string | null | undefined,\n tool?: string | null\n): LucideIcon {\n if (tool && TOOL_ICON_MAP[tool]) return TOOL_ICON_MAP[tool]\n if (step && step in STEP_ICON_MAP) return STEP_ICON_MAP[step as StepName]\n return Sparkles\n}\n\nexport interface AgentStepPresentation {\n step: AgentStepEvent\n tool?: string\n Icon: LucideIcon\n description: string\n}\n\n/**\n * The semantic identity shared by every compact/current-step renderer. Keeping\n * icon and description together prevents the collapsed bar and expanded trace\n * from independently interpreting the same event and drifting apart.\n */\nexport function getAgentStepPresentation(\n step: AgentStepEvent,\n docInfo: DocInfoMap = {}\n): AgentStepPresentation {\n const tool = getStepTool(step)\n return {\n step,\n tool,\n Icon: getAgentStepIcon(step.step, tool),\n description: getAgentStepLabel(step, docInfo),\n }\n}\n\nexport function getCurrentAgentStepPresentation(\n steps: AgentStepEvent[],\n docInfo: DocInfoMap = {}\n): AgentStepPresentation | undefined {\n const step = getCurrentStep(steps)\n return step ? getAgentStepPresentation(step, docInfo) : undefined\n}\n\nexport interface StepAccent {\n bg: string\n fg: string\n ring: string\n ping: string\n}\n\nconst ACCENTS = {\n primary: {\n bg: 'bg-primary/10',\n fg: 'text-primary',\n ring: 'ring-primary/20',\n ping: 'bg-primary',\n },\n cyan: {\n bg: 'bg-theme-cyan/10',\n fg: 'text-theme-cyan',\n ring: 'ring-theme-cyan/25',\n ping: 'bg-theme-cyan',\n },\n green: {\n bg: 'bg-green-bg',\n fg: 'text-green-text',\n ring: 'ring-green-border',\n ping: 'bg-green-text',\n },\n amber: {\n bg: 'bg-yellow-bg',\n fg: 'text-yellow-text',\n ring: 'ring-yellow-border',\n ping: 'bg-yellow-text',\n },\n muted: {\n bg: 'bg-muted',\n fg: 'text-muted-foreground',\n ring: 'ring-border',\n ping: 'bg-muted-foreground',\n },\n} as const satisfies Record<string, StepAccent>\n\nconst TOOL_ACCENT: Record<string, StepAccent> = {\n web_search: ACCENTS.cyan,\n read_url: ACCENTS.cyan,\n deep_research: ACCENTS.cyan,\n spawn_coding_agent: ACCENTS.green,\n execute_code: ACCENTS.green,\n search_inside_documents: ACCENTS.amber,\n read_document: ACCENTS.amber,\n get_table_of_contents: ACCENTS.amber,\n view_document_pages: ACCENTS.amber,\n create_artifact: ACCENTS.amber,\n create_image: ACCENTS.amber,\n translate_document: ACCENTS.amber,\n run_skill: ACCENTS.primary,\n save_skill: ACCENTS.primary,\n save_memory: ACCENTS.primary,\n memory_search: ACCENTS.primary,\n personal_agent: ACCENTS.primary,\n ask_user: ACCENTS.amber,\n}\n\nconst STEP_ACCENT: Record<string, StepAccent> = {\n goal: ACCENTS.primary,\n planning: ACCENTS.cyan,\n answering: ACCENTS.primary,\n evaluation: ACCENTS.green,\n goal_progress: ACCENTS.green,\n interjection: ACCENTS.amber,\n skill: ACCENTS.primary,\n}\n\n/** Colour a step by what it *is* — the tool it ran, else its lifecycle kind. */\nexport function stepAccent(step: AgentStepEvent, tool?: string): StepAccent {\n const t = tool ?? getStepTool(step)\n if (t && TOOL_ACCENT[t]) return TOOL_ACCENT[t]\n if (step.step && STEP_ACCENT[step.step]) return STEP_ACCENT[step.step]\n return ACCENTS.muted\n}\n\n/** Tag → icon + color, matching ModelSelector */\nexport const TAG_ICONS: Record<\n string,\n {\n icon: React.ComponentType<{ className?: string; style?: React.CSSProperties }>\n className: string\n }\n> = {\n Standard: { icon: Zap, className: 'text-secondary fill-secondary' },\n Reasoning: { icon: Glasses, className: 'text-primary' },\n Premium: { icon: Crown, className: 'text-yellow-500 fill-yellow-500' },\n}\n\n/**\n * The two Standard-tier models are identified by NAME, not a tag (they only\n * carry the generic 'Standard' tag): Fast → lightning, Wise → glasses.\n */\nexport const MODEL_NAME_ICONS: typeof TAG_ICONS = {\n Fast: { icon: Zap, className: 'text-secondary fill-secondary' },\n Wise: { icon: Glasses, className: 'text-primary' },\n}\n\n/** Icon for a model: by name for the Fast/Wise aliases, otherwise by tag. */\nexport function getModelIcon(modelName?: string | null, tag?: string | null) {\n if (modelName && MODEL_NAME_ICONS[modelName]) return MODEL_NAME_ICONS[modelName]\n if (tag && TAG_ICONS[tag]) return TAG_ICONS[tag]\n return null\n}\n","/**\n * AssistantEntity Component\n *\n * Single source of truth for displaying AI assistants across the application.\n * Shows a tag icon (Zap/Glasses/Crown) when a known model tag is provided,\n * otherwise falls back to the ARBI mark.\n *\n * The assistant is backed by a config (cfg-) entity which may have a title.\n * If no title is set (like the default config), shows \"ARBI\".\n *\n * Variants:\n * - pill: Icon + name in a rounded container (default)\n * - icon: Just the icon with hover tooltip\n */\n\nimport React from 'react'\nimport { EntityChip } from '../../components/EntityChip'\nimport { ARBI_MARK_SRC, ProviderIcon, UserEntity, cn } from '@arbidocs/react/ui'\nimport { getModelIcon } from '../runs/step-presentation'\n\nconst DEFAULT_ASSISTANT_NAME = 'ARBI'\n\ninterface AssistantEntityProps {\n /** Config title/name - if not provided, defaults to \"ARBI\" */\n name?: string | null\n /** Model name to show in tooltip (e.g., \"claude-3-opus\") */\n modelName?: string | null\n /** Model tag (e.g., \"Standard\", \"Reasoning\", \"Premium\") — shows matching icon */\n tag?: string | null\n /** Size of the icon in pixels */\n size?: number\n /** 'icon' shows just the icon, 'pill' shows icon + name */\n variant?: 'icon' | 'pill'\n /** Size variant for pill: 'sm' for compact, 'base' for larger */\n pillSize?: 'sm' | 'base'\n /** Additional CSS classes */\n className?: string\n /** When true (default), icon variant shows tooltip on hover */\n showTooltip?: boolean\n}\n\nexport function AssistantEntity({\n name,\n modelName,\n tag,\n size = 20,\n variant = 'pill',\n pillSize = 'sm',\n className,\n showTooltip = true,\n}: AssistantEntityProps): React.JSX.Element {\n const displayName = name || DEFAULT_ASSISTANT_NAME\n\n // Icon by model name (Fast/Wise) first, then by tag; otherwise favicon.\n const tagConfig = getModelIcon(modelName, tag)\n\n if (!tagConfig && tag !== 'Premium')\n return (\n <UserEntity\n size={size <= 20 ? 'xs' : 'sm'}\n variant={variant}\n interactive={false}\n picture={ARBI_MARK_SRC}\n avatarImageClassName=\"object-contain p-0.5\"\n initials={displayName.charAt(0)}\n displayName={displayName}\n showTooltip={showTooltip}\n // Same content as the EntityChip branch below: without it the icon's tooltip opened\n // EMPTY for every model with no tag icon (any model the icon/tag maps don't know).\n tooltipContent={\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"font-medium\">{displayName}</span>\n {modelName && modelName !== displayName && (\n <span className=\"text-xs text-muted-foreground\">{modelName}</span>\n )}\n </div>\n }\n className={className}\n />\n )\n\n const iconWrapper =\n tag === 'Premium' ? (\n // Premium models show their brand mark (Claude/GPT/Gemini…), Crown as fallback.\n <span className=\"inline-flex items-center\">\n <ProviderIcon modelName={modelName ?? undefined} size={size} className={className} />\n </span>\n ) : tagConfig ? (\n <span className=\"inline-flex items-center\">\n <tagConfig.icon\n className={cn(tagConfig.className, className)}\n style={{ width: size, height: size }}\n />\n </span>\n ) : (\n <img\n src={ARBI_MARK_SRC}\n alt={displayName}\n className={cn('rounded-full object-contain p-0.5', className)}\n style={{ width: size, height: size }}\n />\n )\n\n return (\n <EntityChip\n variant={variant}\n icon={iconWrapper}\n label={displayName}\n detail={modelName}\n showTooltip={showTooltip}\n size={pillSize}\n className={className}\n {...(variant === 'pill' ? { testId: 'assistant-entity-pill' } : {})}\n />\n )\n}\n","/**\n * Display helpers for threads and workflows: who an activity batch reached, a stop a later message\n * superseded, and when a workflow fires.\n */\nimport { formatFriendlyDate } from '@arbidocs/react/ui'\nimport { describeRRule } from './rrule'\nimport { type TaskActivityEvent } from './TaskActivityTimeline'\nimport type { components } from '@arbidocs/client'\n\ntype Workflow = components['schemas']['WorkflowResponse']\n\n/** These are actual persisted notification types accepted by the scheduler. */\nexport const AUTOMATION_EVENTS = [\n { id: 'workflow_completed', label: 'Workflow completed' },\n { id: 'doc_shared', label: 'Document shared' },\n { id: 'docx_mention', label: 'Mentioned in a document comment' },\n { id: 'mention', label: 'Mentioned in a thread' },\n { id: 'conversation_notified', label: 'Asked to look at a thread' },\n { id: 'conversation_ready', label: 'AI output ready' },\n { id: 'conversation_done', label: 'Thread marked done' },\n] satisfies { id: components['schemas']['NotificationType']; label: string }[]\n\n/** Mentioned people (other than the author) that no notification reached. */\nexport function unnotifiedMentions(\n mentions: ReadonlyArray<{ type: string; user_ext_id?: string | null }> | null | undefined,\n notifiedExtIds: readonly string[],\n authorExtId: string | null | undefined\n): string[] {\n const mentioned = (mentions ?? [])\n .filter((m) => m.type === 'user' && m.user_ext_id && m.user_ext_id !== authorExtId)\n .map((m) => m.user_ext_id as string)\n return [...new Set(mentioned)].filter((id) => !notifiedExtIds.includes(id))\n}\n\n/** Newest message time in ms, or 0 when none has a usable timestamp. */\nexport function latestMessageTime(messages: ReadonlyArray<{ created_at?: string | null }>): number {\n return messages.reduce(\n (latest, message) => Math.max(latest, Date.parse(message.created_at ?? '') || 0),\n 0\n )\n}\n\n/**\n * A stop describes only the turn it ended. Once a message is posted after it (a follow-up, or its\n * answer), the header must not keep reading \"Stopped\" while another run is going.\n */\nexport function isSupersededStop(event: TaskActivityEvent, latestMessageAt: number): boolean {\n return event.kind === 'assistant_stopped' && Date.parse(event.created_at) < latestMessageAt\n}\n\n/** Activity wording for a notification batch: who was told, and which mentioned person was not. */\nexport function notifiedLabel(notified: string[], missed: string[]): string {\n if (!missed.length) return `Notified ${notified.join(', ')}`\n if (!notified.length) return `Not notified: ${missed.join(', ')}`\n return `Notified ${notified.join(', ')}, not ${missed.join(', ')}`\n}\n\n/** Short human summary of when a workflow fires, for its trigger chip. */\nexport function describeTrigger(\n workflow: Pick<Workflow, 'rrule' | 'run_at' | 'event_kind' | 'after_conversation_ext_id'>\n): string {\n if (workflow.after_conversation_ext_id) return 'After a thread is marked done'\n if (workflow.event_kind)\n return (\n AUTOMATION_EVENTS.find((event) => event.id === workflow.event_kind)?.label ??\n workflow.event_kind.replaceAll('_', ' ')\n )\n if (workflow.rrule) return describeRRule(workflow.rrule)\n return workflow.run_at ? formatFriendlyDate(workflow.run_at) : 'One-time'\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 { useState } from 'react'\nimport type { ReactNode } from 'react'\nimport {\n Check,\n CheckCircle2,\n CheckSquare,\n ChevronDown,\n ChevronRight,\n Loader2,\n Square,\n TriangleAlert,\n} from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { prefixedTestId, testIdOr } from '../../chat/test-id'\n\n// ── Trace ───────────────────────────────────────────────────────────────────────────────────\n\nexport interface StepTraceProps {\n /** The rows (StepRow / SubAgentLane). */\n children: ReactNode\n /** Totals footer (see StepTraceSummary). */\n summary?: ReactNode\n className?: string\n /** Root id (default `agent-steps`). */\n testId?: string\n /** List id (default `agent-steps-list`). */\n listTestId?: string\n}\n\n/** The agent's step timeline: a numbered list with a rail, plus an optional totals footer. */\nexport function StepTrace({ children, summary, className, testId, listTestId }: StepTraceProps) {\n return (\n <div\n className={cn('border-b border-border', className)}\n data-slot=\"step-trace\"\n data-testid={testIdOr(testId, { testId: 'agent-steps' })}\n >\n <ul\n className=\"space-y-0 px-1.5 py-2.5\"\n data-testid={testIdOr(listTestId, { testId: 'agent-steps-list' })}\n >\n {children}\n </ul>\n {summary}\n </div>\n )\n}\n\n/** Every fixed string of the agent step parts. Pass a partial `labels` to a part to reword. */\nexport interface AgentStepsLabels {\n nearBudget: string\n goalMet: string\n reviewingGoal: string\n subAgent: string\n running: string\n failed: string\n done: string\n}\n\nexport const DEFAULT_AGENT_STEPS_LABELS: AgentStepsLabels = {\n nearBudget: 'Near shared AI usage budget',\n goalMet: 'Goal met',\n reviewingGoal: 'Reviewing goal',\n subAgent: 'sub-agent',\n running: 'Running',\n failed: 'Failed',\n done: 'Done',\n}\n\nexport interface StepTraceSummaryProps {\n /** \"3 steps · 2 tool calls · 12.0s ...\" */\n left: string\n /** Shows the \"near shared AI usage budget\" warning. */\n isNearBudget?: boolean\n /** \"Total: £0.12\" */\n total: string\n labels?: Partial<AgentStepsLabels>\n testId?: string\n}\n\nexport function StepTraceSummary({\n left,\n isNearBudget,\n total,\n labels,\n testId,\n}: StepTraceSummaryProps) {\n const l = { ...DEFAULT_AGENT_STEPS_LABELS, ...labels }\n return (\n <div\n className=\"flex items-center justify-between border-t border-border px-3 py-2 text-sm text-muted-foreground\"\n data-testid={testIdOr(testId, { testId: 'agent-steps-usage-summary' })}\n >\n <span>{left}</span>\n <div className=\"flex items-center gap-2\">\n {isNearBudget && <span className=\"font-medium text-yellow-text\">{l.nearBudget}</span>}\n <span>{total}</span>\n </div>\n </div>\n )\n}\n\n// ── Row ─────────────────────────────────────────────────────────────────────────────────────\n\n/** Tone classes of a step's icon node. */\nexport interface StepAccentClasses {\n bg: string\n fg: string\n ring: string\n}\n\nconst numberGutter =\n 'w-4 shrink-0 pt-[5px] text-right text-sm font-medium leading-none tabular-nums text-muted-foreground'\n\nexport interface StepRowProps {\n /** Step index: drives `agent-step-{index}`. */\n index: number\n /** Display number (\"3\" or \"3.2\"). */\n number: string\n depth: number\n /** The last row has no rail below it. */\n isLast: boolean\n /** The step running right now: pending treatment + ping. */\n isActive: boolean\n accent: StepAccentClasses\n icon: ReactNode\n /** Row semantic identity (`narration`, `goal`, `tool`...), mirrored as data-step. */\n kind: string\n /** The step's title. */\n title: ReactNode\n /** Test id of the title text (set on the active row). */\n titleTestId?: string\n /** Prefix of the row id: `<prefix>-<index>` (default `agent-step`). */\n testIdPrefix?: string\n /** Tier glyph beside the title (host wraps its tooltip). */\n badge?: ReactNode\n /** Right-aligned meta: model, tokens, £ cost, duration. */\n meta?: ReactNode\n /** Summary, detail lines, outcome, criteria, folded sub-steps. */\n children?: ReactNode\n}\n\n/** One step: number gutter, rail, icon node, title row, then body parts. */\nexport function StepRow({\n index,\n number,\n depth,\n isLast,\n isActive,\n accent,\n icon,\n kind,\n title,\n titleTestId,\n testIdPrefix,\n badge,\n meta,\n children,\n}: StepRowProps) {\n return (\n <li\n className=\"relative flex gap-2 pb-2.5 last:pb-0\"\n data-slot=\"step-row\"\n data-testid={prefixedTestId(testIdPrefix, index, { testId: `agent-step-${index}` })}\n data-depth={depth}\n data-step={kind}\n >\n <span className={numberGutter}>{number}</span>\n\n {/* Rail: connects this node to the next. Sits on the node's centre (number column 16px +\n gap 8px + half the 22px node). */}\n {!isLast && (\n <span aria-hidden=\"true\" className=\"absolute bottom-0 left-[33px] top-6 w-px bg-border\" />\n )}\n\n {/* Node: the running step uses the pending (orange) treatment; settled steps keep their\n per-type accent. */}\n <span\n className={cn(\n 'relative z-10 mt-0.5 flex size-[22px] shrink-0 items-center justify-center rounded-full ring-1',\n isActive\n ? 'bg-yellow-bg text-yellow-text ring-yellow-border'\n : cn(accent.bg, accent.fg, accent.ring)\n )}\n >\n {isActive && (\n <span\n aria-hidden=\"true\"\n className=\"absolute inset-0 animate-ping rounded-full bg-yellow-text opacity-30\"\n />\n )}\n <span className=\"relative flex\">{icon}</span>\n </span>\n\n <div className=\"min-w-0 flex-1 pt-[3px]\">\n <div className=\"flex items-baseline gap-2\">\n <span\n className={cn(\n 'truncate text-sm font-medium leading-tight',\n isActive ? 'text-yellow-text' : 'text-foreground'\n )}\n >\n <span data-testid={titleTestId}>{title}</span>\n </span>\n {badge}\n <span className=\"ml-auto flex shrink-0 items-center gap-1.5 text-sm tabular-nums text-muted-foreground\">\n {meta}\n </span>\n </div>\n {children}\n </div>\n </li>\n )\n}\n\n/** One-line summary under a step title (clamped unless multi-line). */\nexport function StepSummary({\n index,\n multiLine,\n children,\n testIdPrefix,\n}: {\n index: number\n multiLine?: boolean\n children: ReactNode\n /** Default `agent-step-summary` (`<prefix>-<index>`). */\n testIdPrefix?: string\n}) {\n return (\n <p\n className={cn(\n 'mt-0.5 text-sm leading-snug text-muted-foreground',\n multiLine ? 'whitespace-pre-wrap' : 'line-clamp-2'\n )}\n data-testid={prefixedTestId(testIdPrefix, index, { testId: `agent-step-summary-${index}` })}\n >\n {children}\n </p>\n )\n}\n\n/** Narration (the model writing prose to the user); the host renders the markdown. */\nexport function StepNarration({\n index,\n children,\n testIdPrefix,\n}: {\n index: number\n children: ReactNode\n /** Default `agent-step-summary` (`<prefix>-<index>`). */\n testIdPrefix?: string\n}) {\n return (\n <div\n className=\"markdown-content mt-0.5 text-sm leading-snug text-muted-foreground\"\n data-testid={prefixedTestId(testIdPrefix, index, { testId: `agent-step-summary-${index}` })}\n >\n {children}\n </div>\n )\n}\n\n/** What the narrative displaced: the tool's target or a plan's checklist line. */\nexport function StepDetail({\n index,\n children,\n testIdPrefix,\n}: {\n index: number\n children: ReactNode\n /** Default `agent-step-detail` (`<prefix>-<index>`). */\n testIdPrefix?: string\n}) {\n return (\n <p\n className=\"mt-0.5 whitespace-pre-wrap text-sm leading-snug text-muted-foreground\"\n data-testid={prefixedTestId(testIdPrefix, index, { testId: `agent-step-detail-${index}` })}\n >\n {children}\n </p>\n )\n}\n\n/** Outcome chip: neutral tick, or a warning when the step failed. */\nexport function StepOutcome({\n index,\n failed,\n children,\n testIdPrefix,\n}: {\n index: number\n failed: boolean\n children: ReactNode\n /** Default `agent-step-outcome` (`<prefix>-<index>`). */\n testIdPrefix?: string\n}) {\n return (\n <span\n className={cn(\n 'mt-1 inline-flex items-center gap-1 rounded-full px-1.5 py-px text-sm leading-5',\n failed ? 'bg-yellow-bg text-yellow-text' : 'bg-muted text-muted-foreground'\n )}\n data-testid={prefixedTestId(testIdPrefix, index, { testId: `agent-step-outcome-${index}` })}\n data-outcome-failed={failed ? 'true' : 'false'}\n >\n {failed ? (\n <TriangleAlert size={12} className=\"text-yellow-text\" />\n ) : (\n <Check size={12} className=\"text-green-text\" />\n )}\n {children}\n </span>\n )\n}\n\n/** Raw tool params (developer affordance). */\nexport function StepParams({ children }: { children: ReactNode }) {\n return <p className=\"mt-0.5 truncate text-sm text-muted-foreground\">{children}</p>\n}\n\n// ── Goal criteria ───────────────────────────────────────────────────────────────────────────\n\nexport interface GoalCriterionView {\n key: string\n text: string\n note?: string\n met: boolean\n}\n\n/** The goal gate's criteria as ticked / unticked checkboxes plus the overall verdict. */\nexport function GoalCriteria({\n criteria,\n labels,\n testIds,\n}: {\n criteria: GoalCriterionView[]\n labels?: Partial<AgentStepsLabels>\n /** Part ids; defaults are the current ids. */\n testIds?: Partial<Record<'list' | 'verdict', string>>\n}) {\n const l = { ...DEFAULT_AGENT_STEPS_LABELS, ...labels }\n const ticked = criteria.filter((c) => c.met).length\n const done = criteria.length > 0 && ticked === criteria.length\n return (\n <div className=\"mt-1.5\">\n <ul className=\"space-y-1\" data-testid={testIdOr(testIds?.list, { testId: 'goal-criteria' })}>\n {criteria.map((c) => (\n <li\n key={c.key}\n className=\"flex items-start gap-1.5\"\n data-goal-criterion-met={c.met ? 'true' : 'false'}\n >\n {c.met ? (\n <CheckSquare size={13} className=\"mt-px shrink-0 text-green-text\" />\n ) : (\n <Square size={13} className=\"mt-px shrink-0 text-muted-foreground\" />\n )}\n <span className={cn('text-sm', c.met ? 'text-foreground' : 'text-muted-foreground')}>\n {c.text}\n {c.note && !c.met && <span className=\"text-muted-foreground\"> — {c.note}</span>}\n </span>\n </li>\n ))}\n </ul>\n {/* Overall assessment: green once every box is ticked, pending while the gate reviews. */}\n <span\n className={cn(\n 'mt-1.5 inline-flex items-center gap-1 rounded-md px-1.5 py-0.5 text-sm font-semibold',\n done ? 'bg-primary/12 text-green-text' : 'bg-yellow-bg text-yellow-text'\n )}\n data-testid={testIdOr(testIds?.verdict, { testId: 'watch-run-goal' })}\n data-goal-done={done ? 'true' : 'false'}\n >\n {done ? <CheckCircle2 size={12} /> : <Loader2 size={12} className=\"animate-spin\" />}\n {done ? l.goalMet : l.reviewingGoal} · {ticked}/{criteria.length}\n </span>\n </div>\n )\n}\n\n// ── Folds ───────────────────────────────────────────────────────────────────────────────────\n\nexport interface SubStepGroupProps {\n /** Parent step index. */\n parentIndex: number\n /** \"3 searches, 2 reads\". */\n summary: string\n /** Colour class applied to the summary while open (the parent's accent). */\n openClassName?: string\n /** Rendered only while open. */\n renderSteps: () => ReactNode\n /** Prefixes (`<prefix>-<parent index>`); defaults `sub-steps-toggle` / `sub-steps`. */\n testIds?: Partial<Record<'toggle' | 'list', string>>\n}\n\n/** Inner steps of a sub-agent, folded under their parent (collapsed, self-describing). */\nexport function SubStepGroup({\n parentIndex,\n summary,\n openClassName,\n renderSteps,\n testIds,\n}: SubStepGroupProps) {\n const [open, setOpen] = useState(false)\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n aria-expanded={open}\n className=\"mt-1 flex items-center gap-1 rounded px-1 py-0.5 text-sm text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring pointer-coarse:min-h-11\"\n data-testid={prefixedTestId(testIds?.toggle, parentIndex, {\n testId: `sub-steps-toggle-${parentIndex}`,\n })}\n >\n {open ? <ChevronDown size={12} /> : <ChevronRight size={12} />}\n <span className={cn('tabular-nums', open && openClassName)}>{summary}</span>\n </button>\n {open && (\n <ul\n className=\"mt-1\"\n data-testid={prefixedTestId(testIds?.list, parentIndex, {\n testId: `sub-steps-${parentIndex}`,\n })}\n >\n {renderSteps()}\n </ul>\n )}\n </>\n )\n}\n\nexport type SubAgentStatus = 'running' | 'failed' | 'done'\n\nexport interface SubAgentLaneProps {\n handle: string\n /** Display number of the lane row. */\n number: number\n /** The lane's job name, never the raw handle. */\n job: string\n /** The child's task (tooltip). */\n task?: string\n status: SubAgentStatus\n /** Count of the child's own steps. */\n innerCount: number\n /** What the child is doing right now (shown while collapsed and running). */\n liveFocus?: string\n /** Rendered only while open. */\n renderSteps: () => ReactNode\n labels?: Partial<AgentStepsLabels>\n /**\n * Prefixes (`<prefix>-<handle>`); defaults `subagent-lane`, `subagent-lane-toggle`,\n * `subagent-lane-status`, `subagent-lane-live`.\n */\n testIds?: Partial<Record<'lane' | 'toggle' | 'status' | 'live', string>>\n}\n\nconst LANE_TONE: Record<SubAgentStatus, string> = {\n running: 'border-yellow-border/60 bg-yellow-bg/40',\n failed: 'border-red-border/50 bg-red-bg/40',\n done: 'border-border bg-muted',\n}\nconst LANE_PILL: Record<SubAgentStatus, string> = {\n running: 'bg-yellow-bg text-yellow-text',\n failed: 'bg-red-bg text-red-text',\n done: 'bg-primary/12 text-green-text',\n}\n\n/** A concurrently-running sub-agent as its own live lane; collapsed by default, expands on demand. */\nexport function SubAgentLane({\n handle,\n number,\n job,\n task,\n status,\n innerCount,\n liveFocus,\n renderSteps,\n labels,\n testIds,\n}: SubAgentLaneProps) {\n const l = { ...DEFAULT_AGENT_STEPS_LABELS, ...labels }\n const [open, setOpen] = useState(false)\n const running = status === 'running'\n return (\n <li\n className=\"relative flex gap-2 pb-2.5 last:pb-0\"\n data-slot=\"subagent-lane\"\n data-testid={prefixedTestId(testIds?.lane, handle, { testId: `subagent-lane-${handle}` })}\n >\n <span className={numberGutter}>{number}</span>\n <div className=\"min-w-0 flex-1\">\n <div className={cn('rounded-md border', LANE_TONE[status])}>\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className=\"flex w-full items-center gap-2 px-2.5 py-1.5 text-left pointer-coarse:min-h-11\"\n aria-expanded={open}\n data-testid={prefixedTestId(testIds?.toggle, handle, {\n testId: `subagent-lane-toggle-${handle}`,\n })}\n >\n {open ? (\n <ChevronDown size={13} className=\"shrink-0 text-muted-foreground\" />\n ) : (\n <ChevronRight size={13} className=\"shrink-0 text-muted-foreground\" />\n )}\n <span className=\"shrink-0 rounded bg-muted px-1 py-0.5 text-xs font-semibold uppercase leading-none tracking-wide text-muted-foreground\">\n {l.subAgent}\n </span>\n <span\n className=\"min-w-0 flex-1 truncate text-sm font-medium text-foreground\"\n title={task || job}\n >\n {job}\n </span>\n <span\n className={cn(\n 'flex shrink-0 items-center gap-1 rounded-full px-1.5 py-px text-sm font-medium',\n LANE_PILL[status]\n )}\n data-testid={prefixedTestId(testIds?.status, handle, {\n testId: `subagent-lane-status-${handle}`,\n })}\n data-status={status}\n >\n {running ? (\n <Loader2 size={12} className=\"animate-spin\" />\n ) : status === 'failed' ? (\n <TriangleAlert size={12} />\n ) : (\n <CheckCircle2 size={12} />\n )}\n {l[status]}\n {innerCount > 0 && <span className=\"tabular-nums opacity-70\"> · {innerCount}</span>}\n </span>\n </button>\n {/* Collapsed but running: a live line so the folded lane does not read as stalled. */}\n {!open && running && liveFocus && (\n <p\n className=\"flex items-center gap-1.5 border-t border-yellow-border/30 px-2.5 py-1.5 text-sm text-yellow-text\"\n data-testid={prefixedTestId(testIds?.live, handle, {\n testId: `subagent-lane-live-${handle}`,\n })}\n >\n <Loader2 size={12} className=\"shrink-0 animate-spin\" />\n <span className=\"truncate\">{liveFocus}</span>\n </p>\n )}\n {open && innerCount > 0 && (\n <ul className=\"space-y-0 border-t border-border px-2.5 py-2\">{renderSteps()}</ul>\n )}\n </div>\n </div>\n </li>\n )\n}\n","import { useState, type ReactNode } from 'react'\nimport {\n CheckCircle2,\n ChevronDown,\n ChevronRight,\n SquareArrowOutUpRight,\n TriangleAlert,\n} from 'lucide-react'\nimport { Tooltip, TooltipContent, TooltipTrigger, cn } from '@arbidocs/react/ui'\nimport type { SubAgentStatus } from './AgentSteps'\n\n/** One sub-agent line of the roster. */\nexport interface SubagentRosterLane {\n handle: string\n status: SubAgentStatus\n /** The delegated task (or its job name): the line's text and tooltip. */\n task: string\n /** Count of the child's own steps; a child with none has nothing to expand. */\n stepCount: number\n /** Present when the child has its own thread to step into. */\n canOpenThread?: boolean\n}\n\n/** Every fixed string of the roster. */\nexport interface SubagentRosterLabels {\n badge: string\n hideSteps: string\n showSteps: string\n openThread: string\n openThreadAria: string\n /** Visible text on the open-thread control. */\n openThreadShort: string\n}\n\nexport const DEFAULT_SUBAGENT_ROSTER_LABELS: SubagentRosterLabels = {\n badge: 'sub-agent',\n hideSteps: \"Hide this sub-agent's steps\",\n showSteps: \"Show this sub-agent's steps\",\n openThread: 'Open thread',\n openThreadAria: \"Open this sub-agent's own thread\",\n openThreadShort: 'Thread',\n}\n\nexport interface SubagentRosterProps {\n lanes: SubagentRosterLane[]\n /** The child's own steps, rendered only while its line is expanded. */\n renderSteps: (handle: string) => ReactNode\n onOpenThread: (handle: string) => void\n className?: string\n labels?: Partial<SubagentRosterLabels>\n}\n\nconst LINE = 'flex min-w-0 flex-1 items-center gap-1.5 pl-3 text-sm leading-snug'\n\n/**\n * Live roster of a turn's sub-agents, indented under the agent's status line: one compact line\n * per child (static dot while running, check / alert once settled), each expandable to its own\n * steps. Ids: `running-subagents`, `running-subagent-<h>`, `-toggle-<h>`, `-open-thread-<h>`,\n * `-steps-<h>`.\n */\nexport function SubagentRoster({\n lanes,\n renderSteps,\n onOpenThread,\n className,\n labels,\n}: SubagentRosterProps) {\n const l = { ...DEFAULT_SUBAGENT_ROSTER_LABELS, ...labels }\n const [openHandles, setOpenHandles] = useState<Record<string, boolean>>({})\n const toggle = (handle: string) =>\n setOpenHandles((prev) => ({ ...prev, [handle]: !prev[handle] }))\n\n return (\n <div\n className={cn('space-y-0.5 px-3 pb-1.5', className)}\n data-slot=\"subagent-roster\"\n data-testid=\"running-subagents\"\n role=\"list\"\n >\n {lanes.map((lane) => {\n const running = lane.status === 'running'\n const expandable = lane.stepCount > 0\n const open = expandable && !!openHandles[lane.handle]\n\n const line = (\n <>\n <span aria-hidden className=\"select-none font-mono text-muted-foreground/30\">\n └\n </span>\n {/* Fixed-width slot so a non-expandable line aligns with expandable siblings. */}\n <span className=\"flex w-3.5 shrink-0 justify-center\">\n {expandable &&\n (open ? (\n <ChevronDown size={12} className=\"text-muted-foreground/60\" />\n ) : (\n <ChevronRight size={12} className=\"text-muted-foreground/60\" />\n ))}\n </span>\n {/* Static dot while running: the agent's own spinner carries the motion. */}\n {running ? (\n <span aria-hidden className=\"size-1.5 shrink-0 rounded-full bg-yellow-text\" />\n ) : lane.status === 'failed' ? (\n <TriangleAlert size={11} className=\"shrink-0 text-red-text\" />\n ) : (\n <CheckCircle2 size={11} className=\"shrink-0 text-green-text\" />\n )}\n <span className=\"shrink-0 rounded bg-muted px-1 py-0.5 text-sm font-semibold uppercase leading-none tracking-wide text-muted-foreground/80\">\n {l.badge}\n </span>\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n className={cn(\n 'min-w-0 flex-1 truncate text-left',\n running ? 'text-foreground/90' : 'text-muted-foreground'\n )}\n >\n {lane.task}\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"top\">{lane.task}</TooltipContent>\n </Tooltip>\n {expandable && (\n <span className=\"shrink-0 tabular-nums text-muted-foreground/40\">\n {lane.stepCount}\n </span>\n )}\n </>\n )\n\n return (\n <div\n key={lane.handle}\n role=\"listitem\"\n data-testid={`running-subagent-${lane.handle}`}\n data-status={lane.status}\n data-expanded={open ? 'true' : 'false'}\n >\n <div className=\"flex w-full items-center gap-1\">\n {expandable ? (\n <button\n type=\"button\"\n onClick={() => toggle(lane.handle)}\n aria-expanded={open}\n aria-label={open ? l.hideSteps : l.showSteps}\n className={cn(\n LINE,\n 'rounded transition-colors hover:bg-muted/60 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring pointer-coarse:min-h-11'\n )}\n data-testid={`running-subagent-toggle-${lane.handle}`}\n >\n {line}\n </button>\n ) : (\n <div className={LINE}>{line}</div>\n )}\n {lane.canOpenThread && (\n <button\n type=\"button\"\n onClick={() => onOpenThread(lane.handle)}\n aria-label={l.openThreadAria}\n title={l.openThread}\n className=\"ml-2 flex shrink-0 items-center gap-1 rounded px-1.5 py-1 text-xs text-muted-foreground/70 transition-colors hover:bg-muted/60 hover:text-foreground focus-visible:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring pointer-coarse:min-h-11 pointer-coarse:min-w-11 pointer-coarse:justify-center\"\n data-testid={`running-subagent-open-thread-${lane.handle}`}\n >\n {/* Not a chevron: beside the steps toggle a chevron read as \"show more\", and clicks\n meant to expand the row opened the sub-agent's thread instead. */}\n <SquareArrowOutUpRight size={12} aria-hidden />\n <span>{l.openThreadShort}</span>\n </button>\n )}\n </div>\n {open && (\n <div\n className=\"ml-3 border-l border-border/50 pl-2\"\n data-testid={`running-subagent-steps-${lane.handle}`}\n >\n {renderSteps(lane.handle)}\n </div>\n )}\n </div>\n )\n })}\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'\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: 'Collaborator',\n guest: '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"]}