@arbidocs/blocks 0.5.117 → 0.5.118

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 (100) hide show
  1. package/dist/{ConnectedCallDock-OZBTU3IT.cjs → ConnectedCallDock-E7RMQMMT.cjs} +15 -15
  2. package/dist/{ConnectedCallDock-OZBTU3IT.cjs.map → ConnectedCallDock-E7RMQMMT.cjs.map} +1 -1
  3. package/dist/{ConnectedCallRoom-VMZE2NFP.cjs → ConnectedCallRoom-FF7X6LQ2.cjs} +8 -8
  4. package/dist/{ConnectedCallRoom-VMZE2NFP.cjs.map → ConnectedCallRoom-FF7X6LQ2.cjs.map} +1 -1
  5. package/dist/{ConnectedNativeDocxComparison-7OUKTKYP.cjs → ConnectedNativeDocxComparison-PB2LXT5U.cjs} +16 -16
  6. package/dist/{ConnectedNativeDocxComparison-7OUKTKYP.cjs.map → ConnectedNativeDocxComparison-PB2LXT5U.cjs.map} +1 -1
  7. package/dist/{ConnectedProductionSetDialog-4EAY6KAZ.cjs → ConnectedProductionSetDialog-LHB4VQWC.cjs} +3 -3
  8. package/dist/{ConnectedProductionSetDialog-4EAY6KAZ.cjs.map → ConnectedProductionSetDialog-LHB4VQWC.cjs.map} +1 -1
  9. package/dist/{ConnectedStreamedWordArtifact-7V24ZDAC.cjs → ConnectedStreamedWordArtifact-S7ICDK5T.cjs} +16 -16
  10. package/dist/{ConnectedStreamedWordArtifact-7V24ZDAC.cjs.map → ConnectedStreamedWordArtifact-S7ICDK5T.cjs.map} +1 -1
  11. package/dist/{DocumentReviewCard-OCPFVMLD.cjs → DocumentReviewCard-L472OMQS.cjs} +15 -15
  12. package/dist/{DocumentReviewCard-OCPFVMLD.cjs.map → DocumentReviewCard-L472OMQS.cjs.map} +1 -1
  13. package/dist/{FilesViewerDialog-KLRDIYEH.cjs → FilesViewerDialog-JK25HKKF.cjs} +43 -43
  14. package/dist/{FilesViewerDialog-KLRDIYEH.cjs.map → FilesViewerDialog-JK25HKKF.cjs.map} +1 -1
  15. package/dist/{WorkspaceTableView-IMAZICIZ.cjs → WorkspaceTableView-JCTDEMIL.cjs} +8 -8
  16. package/dist/{WorkspaceTableView-IMAZICIZ.cjs.map → WorkspaceTableView-JCTDEMIL.cjs.map} +1 -1
  17. package/dist/agents/index.cjs +296 -296
  18. package/dist/{ai-7U4B4CVF.cjs → ai-OBS67QV4.cjs} +20 -20
  19. package/dist/ai-OBS67QV4.cjs.map +1 -0
  20. package/dist/calls/index.cjs +121 -121
  21. package/dist/chat/index.cjs +1 -1
  22. package/dist/{chunk-Q6DQGGP4.cjs → chunk-325GVZE6.cjs} +3 -3
  23. package/dist/{chunk-Q6DQGGP4.cjs.map → chunk-325GVZE6.cjs.map} +1 -1
  24. package/dist/{chunk-WW6LXQY6.cjs → chunk-3LNUQYAF.cjs} +11 -11
  25. package/dist/{chunk-WW6LXQY6.cjs.map → chunk-3LNUQYAF.cjs.map} +1 -1
  26. package/dist/{chunk-OZVDOAXG.cjs → chunk-5XAJ4N2S.cjs} +4 -4
  27. package/dist/{chunk-OZVDOAXG.cjs.map → chunk-5XAJ4N2S.cjs.map} +1 -1
  28. package/dist/{chunk-BW5MF464.cjs → chunk-6ULADDBW.cjs} +4 -4
  29. package/dist/{chunk-BW5MF464.cjs.map → chunk-6ULADDBW.cjs.map} +1 -1
  30. package/dist/{chunk-7XT5B2DZ.cjs → chunk-7IPIKMCY.cjs} +46 -46
  31. package/dist/{chunk-7XT5B2DZ.cjs.map → chunk-7IPIKMCY.cjs.map} +1 -1
  32. package/dist/{chunk-H5OLHP2U.cjs → chunk-7OPOPYV6.cjs} +3 -3
  33. package/dist/{chunk-H5OLHP2U.cjs.map → chunk-7OPOPYV6.cjs.map} +1 -1
  34. package/dist/{chunk-4VZZWYEC.cjs → chunk-BQ5RIWWT.cjs} +3 -3
  35. package/dist/{chunk-4VZZWYEC.cjs.map → chunk-BQ5RIWWT.cjs.map} +1 -1
  36. package/dist/{chunk-D7ICHGWM.cjs → chunk-CB3YYZAU.cjs} +58 -58
  37. package/dist/{chunk-D7ICHGWM.cjs.map → chunk-CB3YYZAU.cjs.map} +1 -1
  38. package/dist/{chunk-MC4F2URI.cjs → chunk-CPG7II4E.cjs} +28 -28
  39. package/dist/{chunk-MC4F2URI.cjs.map → chunk-CPG7II4E.cjs.map} +1 -1
  40. package/dist/{chunk-VTYJAZDU.cjs → chunk-K6AUKKUN.cjs} +10 -10
  41. package/dist/{chunk-VTYJAZDU.cjs.map → chunk-K6AUKKUN.cjs.map} +1 -1
  42. package/dist/{chunk-UNDQYTRF.cjs → chunk-KHAO7ZTO.cjs} +6 -6
  43. package/dist/{chunk-UNDQYTRF.cjs.map → chunk-KHAO7ZTO.cjs.map} +1 -1
  44. package/dist/{chunk-UUENH4BJ.cjs → chunk-KXIRVKCJ.cjs} +3 -3
  45. package/dist/{chunk-UUENH4BJ.cjs.map → chunk-KXIRVKCJ.cjs.map} +1 -1
  46. package/dist/{chunk-XKDUPU7B.cjs → chunk-L6APDO3Y.cjs} +3 -3
  47. package/dist/{chunk-XKDUPU7B.cjs.map → chunk-L6APDO3Y.cjs.map} +1 -1
  48. package/dist/{chunk-E4DUXU5K.cjs → chunk-MMVDVHKE.cjs} +7 -7
  49. package/dist/{chunk-E4DUXU5K.cjs.map → chunk-MMVDVHKE.cjs.map} +1 -1
  50. package/dist/{chunk-5QUL5BZO.cjs → chunk-NNUK5ZM7.cjs} +4 -4
  51. package/dist/{chunk-5QUL5BZO.cjs.map → chunk-NNUK5ZM7.cjs.map} +1 -1
  52. package/dist/{chunk-4NPCDS2X.cjs → chunk-NY3YUCOW.cjs} +3 -3
  53. package/dist/{chunk-4NPCDS2X.cjs.map → chunk-NY3YUCOW.cjs.map} +1 -1
  54. package/dist/{chunk-E4BLRF2L.cjs → chunk-O4F77VSO.cjs} +5 -5
  55. package/dist/{chunk-E4BLRF2L.cjs.map → chunk-O4F77VSO.cjs.map} +1 -1
  56. package/dist/{chunk-6DCIZA3X.cjs → chunk-OPH4UZQN.cjs} +71 -71
  57. package/dist/{chunk-6DCIZA3X.cjs.map → chunk-OPH4UZQN.cjs.map} +1 -1
  58. package/dist/{chunk-TDN33HSK.cjs → chunk-P2MOLUFO.cjs} +6 -6
  59. package/dist/{chunk-TDN33HSK.cjs.map → chunk-P2MOLUFO.cjs.map} +1 -1
  60. package/dist/{chunk-3ODEWSRO.cjs → chunk-P77YTTJ3.cjs} +4 -4
  61. package/dist/{chunk-3ODEWSRO.cjs.map → chunk-P77YTTJ3.cjs.map} +1 -1
  62. package/dist/{chunk-3U36VYMD.cjs → chunk-PVPRVI54.cjs} +26 -26
  63. package/dist/{chunk-3U36VYMD.cjs.map → chunk-PVPRVI54.cjs.map} +1 -1
  64. package/dist/{chunk-LFRNBT2I.cjs → chunk-QOXK5O6M.cjs} +10 -10
  65. package/dist/{chunk-LFRNBT2I.cjs.map → chunk-QOXK5O6M.cjs.map} +1 -1
  66. package/dist/{chunk-2W5E62EY.cjs → chunk-SGYSDABK.cjs} +6 -6
  67. package/dist/{chunk-2W5E62EY.cjs.map → chunk-SGYSDABK.cjs.map} +1 -1
  68. package/dist/{chunk-57EE6CMW.cjs → chunk-SUYPXUE6.cjs} +13 -13
  69. package/dist/{chunk-57EE6CMW.cjs.map → chunk-SUYPXUE6.cjs.map} +1 -1
  70. package/dist/{chunk-4IOYQLKG.cjs → chunk-TP5PGWIO.cjs} +3 -3
  71. package/dist/{chunk-4IOYQLKG.cjs.map → chunk-TP5PGWIO.cjs.map} +1 -1
  72. package/dist/{chunk-7X3FS5HQ.cjs → chunk-TT4IF52H.cjs} +35 -35
  73. package/dist/{chunk-7X3FS5HQ.cjs.map → chunk-TT4IF52H.cjs.map} +1 -1
  74. package/dist/{chunk-GQXPNIRE.cjs → chunk-WAV762GP.cjs} +6 -6
  75. package/dist/{chunk-GQXPNIRE.cjs.map → chunk-WAV762GP.cjs.map} +1 -1
  76. package/dist/{chunk-MZ2KZXNU.cjs → chunk-WXUU3COI.cjs} +3 -3
  77. package/dist/{chunk-MZ2KZXNU.cjs.map → chunk-WXUU3COI.cjs.map} +1 -1
  78. package/dist/{chunk-LYTIQQQ2.cjs → chunk-XZYIS2JZ.cjs} +3 -3
  79. package/dist/{chunk-LYTIQQQ2.cjs.map → chunk-XZYIS2JZ.cjs.map} +1 -1
  80. package/dist/{chunk-BKY2LAV2.cjs → chunk-YDPLSXHB.cjs} +4 -4
  81. package/dist/{chunk-BKY2LAV2.cjs.map → chunk-YDPLSXHB.cjs.map} +1 -1
  82. package/dist/{chunk-7TEUGFIL.cjs → chunk-YGXOKB5Z.cjs} +4 -4
  83. package/dist/{chunk-7TEUGFIL.cjs.map → chunk-YGXOKB5Z.cjs.map} +1 -1
  84. package/dist/{chunk-VBL3SHWX.cjs → chunk-ZCIQBHH5.cjs} +45 -45
  85. package/dist/{chunk-VBL3SHWX.cjs.map → chunk-ZCIQBHH5.cjs.map} +1 -1
  86. package/dist/connect/docx.cjs +19 -19
  87. package/dist/connect/index.cjs +965 -965
  88. package/dist/connect/viewer.cjs +33 -33
  89. package/dist/embed/index.cjs +37 -37
  90. package/dist/files/index.cjs +224 -224
  91. package/dist/index.cjs +1581 -1581
  92. package/dist/settings/index.cjs +147 -147
  93. package/dist/shell/index.cjs +80 -80
  94. package/dist/studio/index.cjs +23 -23
  95. package/dist/workflow-canvas/index.cjs +52 -52
  96. package/node_modules/@arbidocs/coedit/package.json +1 -1
  97. package/node_modules/@docx-editor.dev/core/dist/chunk-T6K2QYNZ.cjs +1 -1
  98. package/node_modules/@docx-editor.dev/core/dist/chunk-U4JZVSOE.js +1 -1
  99. package/package.json +5 -5
  100. package/dist/ai-7U4B4CVF.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/EntityChip.tsx","../src/agents/workflows/planSteps.ts","../src/agents/tasks/rrule.ts","../src/agents/tasks/TaskFlow.tsx","../src/agents/tasks/linkedRuns.ts","../src/agents/tasks/compact-thread-activity.ts","../src/agents/runs/step-presentation.ts","../src/agents/tasks/AssistantEntity.tsx","../src/agents/tasks/taskHelpers.ts","../src/agents/runs/AgentSteps.tsx","../src/agents/runs/SubagentRoster.tsx"],"names":["jsx","cn","Tooltip","TooltipTrigger","TooltipContent","jsxs","EntityPill","runFields","composeStepPrompt","workflowSteps","canAssign","useRef","useLayoutEffect","ProgressChevronBar","StepChip","ProgressChevron","Popover","PopoverTrigger","PopoverContent","StepDocumentButton","eventWaitingDocuments","waitingForDocumentsText","Target","CornerDownRight","ClipboardList","Cog","MessageSquare","ListChecks","Wrench","Reply","Search","FileText","List","Image","Globe","Link","Telescope","Terminal","Bot","FilePlus","ImagePlus","Languages","MessageCircleQuestion","Bookmark","Milestone","Zap","Brain","Sparkles","getStepTool","getAgentStepLabel","getCurrentStep","Glasses","Crown","UserEntity","ARBI_MARK_SRC","ProviderIcon","workflowSignal","formatFriendlyDate","testIdOr","prefixedTestId","TriangleAlert","Check","CheckSquare","Square","CheckCircle2","Loader2","useState","Fragment","ChevronDown","ChevronRight","SquareArrowOutUpRight"],"mappings":"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","file":"chunk-4IOYQLKG.cjs","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 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 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 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","/**\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 * 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","import { useLayoutEffect, useRef, type ReactNode } from 'react'\nimport { cn, Popover, PopoverContent, PopoverTrigger } from '@arbidocs/react/ui'\nimport { StepChip } from '../workflows/StepChip'\nimport { ProgressChevron, ProgressChevronBar } from '../workflows/ProgressChevron'\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 <ProgressChevronBar className=\"w-max min-w-full py-0.5\">\n {items.map((item) => {\n // Each entry is a chip in the ad hoc colour, its actor's face as the badge, on a segment\n // of one chevron bar, as the steps of a workflow run are 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 <ProgressChevron\n key={item.id}\n kind=\"adhoc\"\n phase=\"done\"\n current={item.current}\n className=\"shrink-0\"\n data-testid={`thread-flow-${item.id}`}\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 </ProgressChevron>\n )\n })}\n </ProgressChevronBar>\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 * 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","/**\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 /** 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 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 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 { workflowSignal } from './workflowRows'\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/** What a workflow that starts on a step signal says it starts on. */\nconst describeSignalTrigger = (signal: string) => `When a step signals ${signal}`\n\n/** Short human summary of when a workflow fires, for its trigger chip. */\nexport function describeTrigger(\n workflow: Pick<\n Workflow,\n 'rrule' | 'run_at' | 'event_kind' | 'event_filter' | 'after_conversation_ext_id'\n >\n): string {\n if (workflow.after_conversation_ext_id) return 'After a thread is marked done'\n const signal = workflowSignal(workflow)\n if (signal) return describeSignalTrigger(signal)\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","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"]}
1
+ {"version":3,"sources":["../src/components/EntityChip.tsx","../src/agents/workflows/planSteps.ts","../src/agents/tasks/rrule.ts","../src/agents/tasks/TaskFlow.tsx","../src/agents/tasks/linkedRuns.ts","../src/agents/tasks/compact-thread-activity.ts","../src/agents/runs/step-presentation.ts","../src/agents/tasks/AssistantEntity.tsx","../src/agents/tasks/taskHelpers.ts","../src/agents/runs/AgentSteps.tsx","../src/agents/runs/SubagentRoster.tsx"],"names":["jsx","cn","Tooltip","TooltipTrigger","TooltipContent","jsxs","EntityPill","runFields","composeStepPrompt","workflowSteps","canAssign","useRef","useLayoutEffect","ProgressChevronBar","StepChip","ProgressChevron","Popover","PopoverTrigger","PopoverContent","StepDocumentButton","eventWaitingDocuments","waitingForDocumentsText","Target","CornerDownRight","ClipboardList","Cog","MessageSquare","ListChecks","Wrench","Reply","Search","FileText","List","Image","Globe","Link","Telescope","Terminal","Bot","FilePlus","ImagePlus","Languages","MessageCircleQuestion","Bookmark","Milestone","Zap","Brain","Sparkles","getStepTool","getAgentStepLabel","getCurrentStep","Glasses","Crown","UserEntity","ARBI_MARK_SRC","ProviderIcon","workflowSignal","formatFriendlyDate","testIdOr","prefixedTestId","TriangleAlert","Check","CheckSquare","Square","CheckCircle2","Loader2","useState","Fragment","ChevronDown","ChevronRight","SquareArrowOutUpRight"],"mappings":"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","file":"chunk-TP5PGWIO.cjs","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 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 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 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","/**\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 * 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","import { useLayoutEffect, useRef, type ReactNode } from 'react'\nimport { cn, Popover, PopoverContent, PopoverTrigger } from '@arbidocs/react/ui'\nimport { StepChip } from '../workflows/StepChip'\nimport { ProgressChevron, ProgressChevronBar } from '../workflows/ProgressChevron'\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 <ProgressChevronBar className=\"w-max min-w-full py-0.5\">\n {items.map((item) => {\n // Each entry is a chip in the ad hoc colour, its actor's face as the badge, on a segment\n // of one chevron bar, as the steps of a workflow run are 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 <ProgressChevron\n key={item.id}\n kind=\"adhoc\"\n phase=\"done\"\n current={item.current}\n className=\"shrink-0\"\n data-testid={`thread-flow-${item.id}`}\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 </ProgressChevron>\n )\n })}\n </ProgressChevronBar>\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 * 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","/**\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 /** 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 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 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 { workflowSignal } from './workflowRows'\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/** What a workflow that starts on a step signal says it starts on. */\nconst describeSignalTrigger = (signal: string) => `When a step signals ${signal}`\n\n/** Short human summary of when a workflow fires, for its trigger chip. */\nexport function describeTrigger(\n workflow: Pick<\n Workflow,\n 'rrule' | 'run_at' | 'event_kind' | 'event_filter' | 'after_conversation_ext_id'\n >\n): string {\n if (workflow.after_conversation_ext_id) return 'After a thread is marked done'\n const signal = workflowSignal(workflow)\n if (signal) return describeSignalTrigger(signal)\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","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"]}