@arbidocs/blocks 0.4.135 → 0.4.137
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/index.cjs +422 -367
- package/dist/agents/index.js +8 -9
- package/dist/agents/skills/index.d.ts +2 -0
- package/dist/agents/skills/skillFiles.d.ts +65 -0
- package/dist/agents/skills/skillImport.d.ts +36 -0
- package/dist/agents/workflows/WorkflowDocumentsField.d.ts +42 -5
- package/dist/agents/workflows/index.d.ts +3 -3
- package/dist/agents/workflows/workflow.d.ts +19 -0
- package/dist/agents/workflows/workspaceScope.d.ts +12 -0
- package/dist/chat/index.cjs +138 -138
- package/dist/chat/index.js +3 -3
- package/dist/chunk-2KUCVSFF.js +51 -0
- package/dist/chunk-2KUCVSFF.js.map +1 -0
- package/dist/{chunk-GDBDHOI4.js → chunk-3RJN2VTL.js} +36 -6
- package/dist/chunk-3RJN2VTL.js.map +1 -0
- package/dist/{chunk-6AALMYPS.cjs → chunk-6F7SZCVL.cjs} +23 -2
- package/dist/chunk-6F7SZCVL.cjs.map +1 -0
- package/dist/{chunk-PUCY3UXN.js → chunk-7M4C6CK7.js} +3 -3
- package/dist/{chunk-PUCY3UXN.js.map → chunk-7M4C6CK7.js.map} +1 -1
- package/dist/{chunk-2PNNCEPH.js → chunk-ATJUVHVB.js} +1545 -8
- package/dist/chunk-ATJUVHVB.js.map +1 -0
- package/dist/{chunk-4S5IDT5F.cjs → chunk-BUNZWOPX.cjs} +5 -5
- package/dist/{chunk-4S5IDT5F.cjs.map → chunk-BUNZWOPX.cjs.map} +1 -1
- package/dist/{chunk-KYDRUFWT.cjs → chunk-C3ZRLULA.cjs} +5 -5
- package/dist/{chunk-KYDRUFWT.cjs.map → chunk-C3ZRLULA.cjs.map} +1 -1
- package/dist/{chunk-SARREDFP.cjs → chunk-CHVCTKF4.cjs} +1620 -47
- package/dist/chunk-CHVCTKF4.cjs.map +1 -0
- package/dist/chunk-CQCC7LE7.js +210 -0
- package/dist/chunk-CQCC7LE7.js.map +1 -0
- package/dist/{chunk-4UMXQPNA.js → chunk-E5OYHJMU.js} +3 -3
- package/dist/{chunk-4UMXQPNA.js.map → chunk-E5OYHJMU.js.map} +1 -1
- package/dist/{chunk-PJJY6CYL.cjs → chunk-EHOPZBAX.cjs} +11 -11
- package/dist/{chunk-PJJY6CYL.cjs.map → chunk-EHOPZBAX.cjs.map} +1 -1
- package/dist/{chunk-4QIIDXLF.cjs → chunk-HDYWXEQU.cjs} +8 -8
- package/dist/{chunk-4QIIDXLF.cjs.map → chunk-HDYWXEQU.cjs.map} +1 -1
- package/dist/{chunk-GZPTWHP5.cjs → chunk-HLB4DIYV.cjs} +5 -5
- package/dist/{chunk-GZPTWHP5.cjs.map → chunk-HLB4DIYV.cjs.map} +1 -1
- package/dist/{chunk-TT6XV6WM.cjs → chunk-JY73DJOS.cjs} +78 -1274
- package/dist/chunk-JY73DJOS.cjs.map +1 -0
- package/dist/{chunk-ARDHLU73.cjs → chunk-KDUGTKVI.cjs} +21 -2
- package/dist/chunk-KDUGTKVI.cjs.map +1 -0
- package/dist/{chunk-UMIY4SQS.js → chunk-KMNZ2RVO.js} +17 -1191
- package/dist/chunk-KMNZ2RVO.js.map +1 -0
- package/dist/{chunk-6S5FLMWG.js → chunk-KSHKTOY2.js} +203 -7
- package/dist/chunk-KSHKTOY2.js.map +1 -0
- package/dist/{chunk-4RLCRFZS.js → chunk-L2PAPOZ5.js} +21 -3
- package/dist/chunk-L2PAPOZ5.js.map +1 -0
- package/dist/{chunk-QYTYW74G.js → chunk-L3T7OJRX.js} +4 -4
- package/dist/{chunk-QYTYW74G.js.map → chunk-L3T7OJRX.js.map} +1 -1
- package/dist/{chunk-ENDP7JER.js → chunk-M33QUNFH.js} +3 -3
- package/dist/{chunk-ENDP7JER.js.map → chunk-M33QUNFH.js.map} +1 -1
- package/dist/chunk-RFIBUWLF.cjs +232 -0
- package/dist/chunk-RFIBUWLF.cjs.map +1 -0
- package/dist/{chunk-N26CXGXC.cjs → chunk-RQ2Y7USX.cjs} +201 -3
- package/dist/chunk-RQ2Y7USX.cjs.map +1 -0
- package/dist/chunk-UUHUQHXR.cjs +56 -0
- package/dist/chunk-UUHUQHXR.cjs.map +1 -0
- package/dist/{chunk-SZX44LCT.js → chunk-VMESMX7N.js} +3 -3
- package/dist/{chunk-SZX44LCT.js.map → chunk-VMESMX7N.js.map} +1 -1
- package/dist/{chunk-QDEODGXE.cjs → chunk-WS5EX7DN.cjs} +37 -6
- package/dist/chunk-WS5EX7DN.cjs.map +1 -0
- package/dist/{chunk-2DFDFOM7.js → chunk-YOMPLCP6.js} +22 -3
- package/dist/chunk-YOMPLCP6.js.map +1 -0
- package/dist/connect/docx.cjs +4 -4
- package/dist/connect/docx.js +3 -3
- package/dist/connect/index.cjs +463 -97
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.d.ts +5 -2
- package/dist/connect/index.js +387 -49
- package/dist/connect/index.js.map +1 -1
- package/dist/connection/ConnectedSkillUpload.d.ts +26 -2
- package/dist/connection/ConnectedWorkflowBuilder.d.ts +24 -12
- package/dist/connection/ConnectedWorkflowLauncher.d.ts +35 -0
- package/dist/connection/ConnectedWorkflowsTable.d.ts +62 -0
- package/dist/connection/ConnectionProvider.d.ts +17 -0
- package/dist/connection/workspaceData.d.ts +45 -0
- package/dist/facts/index.cjs +1 -1
- package/dist/facts/index.js +1 -1
- package/dist/files/index.cjs +1 -1
- package/dist/files/index.js +1 -1
- package/dist/home/index.cjs +20 -21
- package/dist/home/index.cjs.map +1 -1
- package/dist/home/index.js +2 -3
- package/dist/home/index.js.map +1 -1
- package/dist/index.cjs +610 -555
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +14 -15
- package/dist/index.js.map +1 -1
- package/dist/settings/index.cjs +11 -11
- package/dist/settings/index.js +2 -2
- package/dist/shell/index.cjs +1 -1
- package/dist/shell/index.js +1 -1
- package/dist/site/index.cjs +5 -5
- package/dist/site/index.js +1 -1
- package/dist/studio/index.cjs +7 -7
- package/dist/studio/index.js +5 -5
- package/dist/workflow-canvas/index.cjs +122 -96
- package/dist/workflow-canvas/index.cjs.map +1 -1
- package/dist/workflow-canvas/index.d.ts +1 -1
- package/dist/workflow-canvas/index.js +73 -48
- package/dist/workflow-canvas/index.js.map +1 -1
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +4 -4
- package/dist/chunk-2DFDFOM7.js.map +0 -1
- package/dist/chunk-2PNNCEPH.js.map +0 -1
- package/dist/chunk-4RLCRFZS.js.map +0 -1
- package/dist/chunk-4XJZ6AAY.js +0 -407
- package/dist/chunk-4XJZ6AAY.js.map +0 -1
- package/dist/chunk-6AALMYPS.cjs.map +0 -1
- package/dist/chunk-6S5FLMWG.js.map +0 -1
- package/dist/chunk-7D737FLE.cjs +0 -43
- package/dist/chunk-7D737FLE.cjs.map +0 -1
- package/dist/chunk-ARDHLU73.cjs.map +0 -1
- package/dist/chunk-GDBDHOI4.js.map +0 -1
- package/dist/chunk-N26CXGXC.cjs.map +0 -1
- package/dist/chunk-QDEODGXE.cjs.map +0 -1
- package/dist/chunk-S5HZBXZA.cjs +0 -430
- package/dist/chunk-S5HZBXZA.cjs.map +0 -1
- package/dist/chunk-SARREDFP.cjs.map +0 -1
- package/dist/chunk-TT6XV6WM.cjs.map +0 -1
- package/dist/chunk-UMIY4SQS.js.map +0 -1
- package/dist/chunk-XD2M6LIG.js +0 -41
- package/dist/chunk-XD2M6LIG.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/agents/workflows/SchemaForm.tsx","../src/agents/workflows/planSteps.ts","../src/agents/workflows/useWorkflowView.ts","../src/agents/workflows/stepWindow.ts","../src/agents/workflows/StepBarFrame.tsx","../src/agents/workflows/StepParts.tsx","../src/agents/workflows/WorkflowStepBar.tsx","../src/agents/workflows/WorkflowRunner.tsx","../src/agents/tasks/TaskActivityTimeline.tsx"],"names":["jsx","Input","Textarea","Switch","compact","prefixedTestId","jsxs","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","isWorkflowScope","cn","TONE_SURFACE","TONE_SOLID_BORDER","TONE_BORDER","Check","TONE_DOT","Label","Fragment","useState","testIdOr","FoldSection","runFields","composeStepPrompt","workflowSteps","canAssign","isRunFinished","useRef","useEffect","useCallback","nextAction","act","validateStep","useMemo","stepPhase","failedUpstream","assigneeName","runFieldsOf","useElementSize","StepBadgeMark","Popover","PopoverTrigger","PopoverContent","ChevronLeft","ChevronRight","StepChip","Loader2","splitDocRef","FileText","UserRound","CornerUpLeft","sendBackTargets","Button","ShieldCheck","formatDate","MessageSquare","shownValue","Hourglass","Clock","PenLine","X","ExternalLink","Mail","Table2","stepKindOf","STEP_KIND_ICONS","DEFAULT_STEP_KIND_LABELS","stepLevels","waitingDocuments","Card","CheckCircle2","stepDependencies","UploadDropzone","reviewInstructions","ArrowLeft","ArrowRight","AlertTriangle","RotateCw","GitBranch","isPersonStep","Sparkles","Play","Lock","KeyRound","RotateCcw","UserRoundCog","Square","MessageSquareReply","Phone","Disc","Flag","BellRing","ArrowUpRight","eventWaitingDocuments","waitingForDocumentsText"],"mappings":"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","file":"chunk-SARREDFP.cjs","sourcesContent":["import { useState, type ReactNode } from 'react'\nimport { Check } from 'lucide-react'\nimport {\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Switch,\n Textarea,\n cn,\n} from '@arbidocs/react/ui'\nimport { prefixedTestId, testIdOr } from '../../chat/test-id'\nimport { TONE_BORDER, TONE_DOT, TONE_SOLID_BORDER, TONE_SURFACE } from '../../components/tones'\nimport { FoldSection } from '../../home/FoldSection'\nimport { isWorkflowScope } from './workflow'\nimport type {\n WorkflowErrors,\n WorkflowField,\n WorkflowFieldError,\n WorkflowFieldOption,\n WorkflowInputs,\n WorkflowInputValue,\n WorkflowScope,\n} from './types'\n\nexport interface SchemaFormLabels {\n /** Appended to the label of an optional field. */\n optional: string\n /** Heading of the folded block that holds `advanced` fields. */\n advanced: string\n errors: Record<WorkflowFieldError, string>\n}\n\nexport const DEFAULT_SCHEMA_FORM_LABELS: SchemaFormLabels = {\n optional: '(optional)',\n advanced: 'More options',\n errors: {\n required: 'This is needed to continue',\n min: 'Too small',\n max: 'Too large',\n number: 'Enter a number',\n },\n}\n\nexport interface SchemaFormProps {\n fields: WorkflowField[]\n values: WorkflowInputs\n onChange: (name: string, value: WorkflowInputValue) => void\n /** Per-field problems to show (the dialog passes them once a launch was attempted). */\n errors?: WorkflowErrors\n /** Renders a `scope` field: the host owns the file data behind the picker. */\n renderScope?: (\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode\n /** Renders a `documents` field (an explicit file pick): the host owns the file list. */\n renderDocuments?: (\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode\n /** Maps an option's `icon` key to a mark. */\n renderIcon?: (key: string) => ReactNode\n /** Who a `person` field offers (the workspace's members); without them it takes an id. */\n people?: ReadonlyArray<{ value: string; label: string }>\n /**\n * Plain Enter in a multi-line field submits the form (Shift+Enter inserts the newline), the\n * chat's own convention. Single-line fields submit natively.\n */\n onEnterSubmit?: () => void\n /** Prefix of field ids: `<prefix>-<field name>`; default `workflow-field`. */\n testIdPrefix?: string\n labels?: Partial<SchemaFormLabels>\n className?: string\n}\n\n/** Selects with at most this many options render as tiles; more fall back to a dropdown. */\nconst TILE_MAX = 4\n\ninterface FieldProps {\n field: WorkflowField\n value: WorkflowInputValue | undefined\n error?: WorkflowFieldError\n onChange: (value: WorkflowInputValue) => void\n l: SchemaFormLabels\n idFor: (suffix?: string) => string\n renderScope: SchemaFormProps['renderScope']\n renderDocuments: SchemaFormProps['renderDocuments']\n renderIcon: SchemaFormProps['renderIcon']\n onEnterSubmit: SchemaFormProps['onEnterSubmit']\n people?: SchemaFormProps['people']\n}\n\nfunction FieldControl({\n field,\n value,\n error,\n onChange,\n l,\n idFor,\n renderScope,\n renderDocuments,\n renderIcon,\n onEnterSubmit,\n people,\n}: FieldProps) {\n const id = `${idFor()}-control`\n const testId = idFor()\n switch (field.type) {\n case 'text':\n return (\n <Input\n id={id}\n data-testid={testId}\n value={String(value ?? '')}\n placeholder={field.placeholder}\n aria-required={field.required || undefined}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? idFor('error') : undefined}\n onChange={(e) => onChange(e.target.value)}\n />\n )\n case 'longtext':\n return (\n <Textarea\n id={id}\n data-testid={testId}\n value={String(value ?? '')}\n placeholder={field.placeholder}\n aria-required={field.required || undefined}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? idFor('error') : undefined}\n className=\"min-h-[96px]\"\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={(e) => {\n if (onEnterSubmit && e.key === 'Enter' && !e.shiftKey && !e.nativeEvent.isComposing) {\n e.preventDefault()\n onEnterSubmit()\n }\n }}\n />\n )\n case 'number':\n return (\n <Input\n id={id}\n data-testid={testId}\n type=\"number\"\n inputMode=\"decimal\"\n min={field.min}\n max={field.max}\n value={value === undefined ? '' : String(value)}\n placeholder={field.placeholder}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? idFor('error') : undefined}\n onChange={(e) => onChange(e.target.value === '' ? '' : Number(e.target.value))}\n />\n )\n case 'date':\n return (\n <Input\n id={id}\n data-testid={testId}\n type=\"date\"\n value={String(value ?? '')}\n aria-invalid={error ? true : undefined}\n aria-describedby={error ? idFor('error') : undefined}\n onChange={(e) => onChange(e.target.value)}\n />\n )\n case 'boolean':\n return (\n <Switch\n id={id}\n data-testid={testId}\n checked={Boolean(value)}\n onCheckedChange={(checked) => onChange(checked)}\n />\n )\n case 'select': {\n const options = field.options ?? []\n if (options.length > 0 && options.length <= TILE_MAX) {\n // Short choices (no icon or description) are buttons, not cards.\n const compact = options.every((o) => !o.icon && !o.description)\n return (\n <div\n role=\"radiogroup\"\n aria-label={field.label}\n // Each tile is as wide as its label and wraps onto a new line when the row is full\n // (a narrow side panel); one wider than the whole row wraps its own text instead.\n className=\"flex flex-wrap gap-2\"\n data-testid={testId}\n >\n {options.map((option) => (\n <ChoiceTile\n key={option.value}\n option={option}\n selected={value === option.value}\n compact={compact}\n renderIcon={renderIcon}\n testId={prefixedTestId(testId, option.value, {\n testId: `workflow-field-${field.name}-${option.value}`,\n })}\n onSelect={() => onChange(option.value)}\n />\n ))}\n </div>\n )\n }\n return (\n <Select value={String(value ?? '')} onValueChange={(v) => onChange(v)}>\n <SelectTrigger id={id} data-testid={testId} className=\"pointer-coarse:min-h-11\">\n <SelectValue placeholder={field.placeholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map((o) => (\n <SelectItem key={o.value} value={o.value}>\n {o.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n }\n case 'scope': {\n const scope = isWorkflowScope(value) ? value : { folders: [], labels: [] }\n return <div data-testid={testId}>{renderScope?.(field, scope, onChange)}</div>\n }\n case 'documents': {\n const picked = isWorkflowScope(value) ? value : { folders: [], labels: [], documents: [] }\n return <div data-testid={testId}>{renderDocuments?.(field, picked, onChange)}</div>\n }\n case 'person':\n return people?.length ? (\n <select\n id={id}\n data-testid={testId}\n value={String(value ?? '')}\n aria-required={field.required || undefined}\n aria-invalid={error ? true : undefined}\n onChange={(e) => onChange(e.target.value)}\n className=\"flex h-9 w-full rounded-md border border-input bg-background px-2 text-sm shadow-sm\"\n >\n <option value=\"\">{field.placeholder ?? ''}</option>\n {people.map((p) => (\n <option key={p.value} value={p.value}>\n {p.label}\n </option>\n ))}\n </select>\n ) : (\n <Input\n id={id}\n data-testid={testId}\n value={String(value ?? '')}\n placeholder={field.placeholder ?? 'usr-…'}\n aria-required={field.required || undefined}\n aria-invalid={error ? true : undefined}\n onChange={(e) => onChange(e.target.value)}\n />\n )\n }\n}\n\n/**\n * One choice of a tiled select. A toned option shows its tone chosen or not: a dot and a tinted\n * border at rest, the tone's surface once chosen. The label and a check mark carry the state too,\n * so it never rests on colour alone.\n */\nfunction ChoiceTile({\n option,\n selected,\n compact,\n renderIcon,\n testId,\n onSelect,\n}: {\n option: WorkflowFieldOption\n selected: boolean\n compact: boolean\n renderIcon: SchemaFormProps['renderIcon']\n testId: string\n onSelect: () => void\n}) {\n const tone = option.tone\n return (\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n data-testid={testId}\n data-tone={tone}\n onClick={onSelect}\n className={cn(\n // Sized to its label (flex-basis auto), growing to share the row, never wider than it.\n 'flex max-w-full min-w-[min(4rem,100%)] flex-auto flex-col items-center justify-center gap-1.5 rounded-lg border text-center transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n compact\n ? 'min-h-9 px-3 py-1.5 pointer-coarse:min-h-11'\n : 'min-h-24 p-3 pointer-coarse:min-h-28',\n tone\n ? selected\n ? cn(TONE_SURFACE[tone], TONE_SOLID_BORDER[tone])\n : cn(TONE_BORDER[tone], 'bg-card [&:hover]:bg-muted')\n : selected\n ? 'border-primary bg-primary/10'\n : 'border-border bg-card [&:hover]:border-primary [&:hover]:bg-muted'\n )}\n >\n {option.icon && renderIcon && (\n <span className=\"text-muted-foreground\">{renderIcon(option.icon)}</span>\n )}\n <span\n className={cn(\n 'flex max-w-full items-center gap-1.5 text-sm font-medium',\n tone && selected ? undefined : 'text-foreground'\n )}\n >\n {selected ? (\n <Check className=\"size-3.5 shrink-0\" aria-hidden />\n ) : (\n tone && (\n <span aria-hidden className={cn('size-2 shrink-0 rounded-full', TONE_DOT[tone])} />\n )\n )}\n <span className=\"min-w-0 break-words\">{option.label}</span>\n </span>\n {option.description && (\n <span className=\"max-w-full text-xs break-words text-muted-foreground\">\n {option.description}\n </span>\n )}\n </button>\n )\n}\n\nfunction FormField(props: FieldProps) {\n const { field, error, l, idFor } = props\n const isBoolean = field.type === 'boolean'\n const showOptional = !field.required && field.type !== 'boolean' && field.type !== 'scope'\n const label = (\n <Label\n htmlFor={`${idFor()}-control`}\n className={isBoolean ? 'cursor-pointer font-normal' : undefined}\n >\n {field.label}\n {showOptional && (\n <>\n {' '}\n <span className=\"font-normal text-muted-foreground\">{l.optional}</span>\n </>\n )}\n </Label>\n )\n return (\n <div className=\"flex flex-col gap-1.5\" data-slot=\"schema-field\" data-field={field.name}>\n {isBoolean ? (\n <div className=\"flex items-center gap-2.5 pointer-coarse:min-h-11\">\n <FieldControl {...props} />\n {label}\n </div>\n ) : (\n <>\n {field.type !== 'scope' && label}\n <FieldControl {...props} />\n </>\n )}\n {field.description && <p className=\"text-xs text-muted-foreground\">{field.description}</p>}\n {error && (\n <p\n id={idFor('error')}\n role=\"alert\"\n className=\"text-xs text-destructive\"\n data-testid={idFor('error')}\n >\n {l.errors[error]}\n </p>\n )}\n </div>\n )\n}\n\n/**\n * Renders a workflow's declared inputs as a form. Controlled: the caller owns `values` (see\n * `defaultInputs`) and decides when to validate (`validateInputs`) and show `errors`.\n */\nexport function SchemaForm({\n fields,\n values,\n onChange,\n errors,\n renderScope,\n renderDocuments,\n renderIcon,\n onEnterSubmit,\n people,\n testIdPrefix,\n labels,\n className,\n}: SchemaFormProps) {\n const l: SchemaFormLabels = {\n ...DEFAULT_SCHEMA_FORM_LABELS,\n ...labels,\n errors: { ...DEFAULT_SCHEMA_FORM_LABELS.errors, ...labels?.errors },\n }\n const [advancedOpen, setAdvancedOpen] = useState(false)\n const common = fields.filter((f) => !f.advanced)\n const advanced = fields.filter((f) => f.advanced)\n\n const render = (field: WorkflowField) => (\n <FormField\n key={field.name}\n field={field}\n value={values[field.name]}\n error={errors?.[field.name]}\n onChange={(v) => onChange(field.name, v)}\n l={l}\n idFor={(suffix) =>\n suffix\n ? `${testIdOr(testIdPrefix, { testId: 'workflow-field' })}-${field.name}-${suffix}`\n : `${testIdOr(testIdPrefix, { testId: 'workflow-field' })}-${field.name}`\n }\n renderScope={renderScope}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n onEnterSubmit={onEnterSubmit}\n people={people}\n />\n )\n\n return (\n <div className={cn('flex flex-col gap-4', className)} data-slot=\"schema-form\">\n {common.map(render)}\n {advanced.length > 0 && (\n <FoldSection\n label={l.advanced}\n open={advancedOpen}\n onOpenChange={setAdvancedOpen}\n testId={`${testIdOr(testIdPrefix, { testId: 'workflow-field' })}-advanced-toggle`}\n >\n <div className=\"flex flex-col gap-4\">{advanced.map(render)}</div>\n </FoldSection>\n )}\n </div>\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 * The screen side of a stepped run: which step is in view, form problems, and what the primary\n * button does. The run itself happens elsewhere (the thread on the server, `useWorkflowThread`, or\n * the builder's preview): this hook gets each step's state and the host's actions, so every host\n * shows a run the same way (`WorkflowRunner`).\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport {\n assigneeName,\n canAssign,\n failedUpstream,\n isRunFinished,\n nextAction,\n runFieldsOf,\n stepPhase,\n validateStep,\n type WorkflowNextAction,\n type WorkflowStepPhase,\n} from './run'\nimport type {\n WorkflowErrors,\n WorkflowInputValue,\n WorkflowInputs,\n WorkflowStep,\n WorkflowStepState,\n} from './types'\n\nexport interface UseWorkflowViewOptions {\n steps: WorkflowStep[]\n /** Each step's state (missing = pending). */\n states: Record<string, WorkflowStepState>\n inputs: WorkflowInputs\n setInput: (name: string, value: WorkflowInputValue) => void\n /** Finish a person's step (a form, an upload, a review's approval). A throw keeps the user on it. */\n complete: (step: WorkflowStep) => Promise<void>\n /** Give up on a step so what waits for it can go on. */\n skip: (stepId: string) => Promise<void>\n /** Run a failed agent step again. */\n retry?: (stepId: string) => Promise<void>\n /**\n * Start the run's ready agent or action step when nothing else will (`needsStart`): create the\n * run's thread, or ask the server to run it again. Absent = the host's runs start by themselves.\n */\n start?: () => Promise<void>\n /** No run is under way to start a ready agent or action step (see `start`). */\n needsStart?: boolean\n /** Why the run could not start or go on, as the server said (shown on a step not started). */\n runError?: string | null\n /** A form step whose inputs can no longer change (committed, or recorded on the thread). */\n isLocked?: (stepId: string) => boolean\n /**\n * Whether `states` are known yet (a run opened later: its thread's log has arrived). Until then\n * the view waits to open the run where it is, instead of at its first step. Default true.\n */\n loaded?: boolean\n /** Send the work back from a ready step to an earlier one, with a note. */\n sendBack?: (stepId: string, to: string, note?: string) => Promise<void>\n /** A signer refuses a signature step, with a note. */\n decline?: (stepId: string, note?: string) => Promise<void>\n /** A member's name by id (`usr-…` / `agt-…`): assignees and signers are shown by name. */\n nameOf?: (id: string) => string | undefined\n}\n\n/** What `WorkflowRunner` shows and does. */\nexport interface WorkflowRunView {\n steps: WorkflowStep[]\n /** The step in view; `undefined` once the run's completion is shown. */\n step: WorkflowStep | undefined\n current: string | null\n isComplete: boolean\n inputs: WorkflowInputs\n setInput: (name: string, value: WorkflowInputValue) => void\n stateOf: (stepId: string) => WorkflowStepState | undefined\n phaseOf: (stepId: string) => WorkflowStepPhase\n /** The steps `stepId` waits for that failed (still, or skipped after failing). */\n failedUpstreamOf: (stepId: string) => ReturnType<typeof failedUpstream>\n isLocked: (stepId: string) => boolean\n /** The form step in view's problems, shown once moving on was attempted. */\n errors: WorkflowErrors\n /** An action is under way (completing, skipping). */\n busy: boolean\n actionError: string | null\n /** Some agent step is running. */\n isRunning: boolean\n /** A ready agent or action step starts only when the person starts it (`action` is `start`). */\n needsStart: boolean\n /** Why the run could not start or go on, as the server said. */\n runError: string | null\n action: WorkflowNextAction\n canBack: boolean\n next: () => Promise<void>\n back: () => void\n /** View a step (one further down the plan too: it can be skipped from there). */\n goTo: (stepId: string) => void\n skip: (stepId: string) => Promise<void>\n retry?: (stepId: string) => Promise<void>\n /** Send the work back from `stepId` to `to` (it is then in view). Absent = not offered. */\n sendBack?: (stepId: string, to: string, note?: string) => Promise<void>\n /** Decline a signature step. Absent = not offered. */\n decline?: (stepId: string, note?: string) => Promise<void>\n /** A member's name by id. */\n nameOf?: (id: string) => string | undefined\n /** Who a step is for, in words (a person step, a signature, an email), if anyone. */\n assigneeOf: (stepId: string) => string | undefined\n /** Show the run from the start again (a host that starts a new run resets its own state). */\n restart: () => void\n}\n\nconst errorMessage = (e: unknown): string =>\n e instanceof Error ? e.message : typeof e === 'string' ? e : 'Something went wrong.'\n\n/** The first step that is not finished yet: where a run opens. */\nfunction firstOpen(\n steps: WorkflowStep[],\n states: Record<string, WorkflowStepState>\n): string | null {\n const open = steps.find((s) => !['done', 'skipped'].includes(states[s.id]?.status ?? 'pending'))\n return open?.id ?? (steps.length && isRunFinished(steps, states) ? null : (steps[0]?.id ?? null))\n}\n\nexport function useWorkflowView(options: UseWorkflowViewOptions): WorkflowRunView {\n const { steps, states, inputs, setInput, loaded = true } = options\n const [current, setCurrent] = useState<string | null>(() => firstOpen(steps, states))\n const [showErrors, setShowErrors] = useState(false)\n const [busy, setBusy] = useState(false)\n const [actionError, setActionError] = useState<string | null>(null)\n const optionsRef = useRef(options)\n optionsRef.current = options\n\n // A run loaded after the first render (its steps or its thread's log arrived) opens where it is:\n // its current step, or its completion when every step has finished.\n const placed = useRef(steps.length > 0 && loaded)\n useEffect(() => {\n if (placed.current || steps.length === 0 || !loaded) return\n placed.current = true\n setCurrent(firstOpen(steps, states))\n }, [steps, states, loaded])\n\n const step = steps.find((s) => s.id === current)\n const following = useCallback(\n (id: string | null): string | null => {\n const i = steps.findIndex((s) => s.id === id)\n return steps[i + 1]?.id ?? null\n },\n [steps]\n )\n // Where to go once the step in view is finished (completed or skipped): the next one still to\n // do, else simply the next one. The step just finished counts as finished whatever the states\n // say yet (they may not have caught up).\n const onward = useCallback(\n (id: string): string | null => {\n const { steps: s, states: st } = optionsRef.current\n const i = s.findIndex((x) => x.id === id)\n const open = s\n .slice(i + 1)\n .find((x) => !['done', 'skipped'].includes(st[x.id]?.status ?? 'pending'))\n return open?.id ?? following(id)\n },\n [following]\n )\n const actionOptions = useCallback(\n (o: UseWorkflowViewOptions) => ({\n needsStart: !!o.start && !!o.needsStart,\n canRetry: !!o.retry,\n }),\n []\n )\n const action: WorkflowNextAction = busy\n ? 'wait'\n : nextAction(steps, states, current, actionOptions(options))\n\n const next = useCallback(async () => {\n const { steps: s, states: st, inputs: values } = optionsRef.current\n const at = s.find((x) => x.id === current)\n const act = nextAction(s, st, current, actionOptions(optionsRef.current))\n if (!at || act === 'wait' || busy) return\n setActionError(null)\n if (act === 'finish') return setCurrent(null)\n if (act === 'move') return setCurrent(following(current))\n setBusy(true)\n try {\n // Starting or retrying keeps the step in view: it is what runs now.\n if (act === 'start' || act === 'retry') {\n await (act === 'start' ? optionsRef.current.start?.() : optionsRef.current.retry?.(at.id))\n return\n }\n if (Object.keys(validateStep(at, values)).length > 0) {\n setShowErrors(true)\n return\n }\n await optionsRef.current.complete(at)\n setShowErrors(false)\n setCurrent(onward(at.id) ?? current)\n } catch (e) {\n setActionError(errorMessage(e))\n } finally {\n setBusy(false)\n }\n }, [current, busy, following, onward, actionOptions])\n\n const goTo = useCallback((stepId: string) => {\n setShowErrors(false)\n setActionError(null)\n setCurrent(stepId)\n }, [])\n\n const index = steps.findIndex((s) => s.id === current)\n const back = useCallback(() => {\n const i = steps.findIndex((s) => s.id === current)\n const to = i < 0 ? steps[steps.length - 1] : steps[i - 1]\n if (to) goTo(to.id)\n }, [steps, current, goTo])\n\n const act = useCallback(\n (fn: ((id: string) => Promise<void>) | undefined) =>\n fn &&\n (async (stepId: string) => {\n setBusy(true)\n setActionError(null)\n try {\n await fn(stepId)\n } catch (e) {\n setActionError(errorMessage(e))\n } finally {\n setBusy(false)\n }\n }),\n []\n )\n // A skip moves the view on the way completing does (when it was the step in view).\n const currentRef = useRef(current)\n currentRef.current = current\n const skip = useMemo(\n () =>\n act(async (id) => {\n await optionsRef.current.skip(id)\n if (currentRef.current !== id) return\n setShowErrors(false)\n setCurrent(onward(id) ?? id)\n }) as (id: string) => Promise<void>,\n [act, onward]\n )\n const retry = useMemo(\n () =>\n options.retry ? act((id) => optionsRef.current.retry?.(id) ?? Promise.resolve()) : undefined,\n // Only whether the host offers retry matters here.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [act, !!options.retry]\n )\n\n const sendBack = useMemo(\n () =>\n options.sendBack\n ? async (stepId: string, to: string, note?: string) => {\n setBusy(true)\n setActionError(null)\n try {\n await optionsRef.current.sendBack?.(stepId, to, note)\n setShowErrors(false)\n setCurrent(to)\n } catch (e) {\n setActionError(errorMessage(e))\n } finally {\n setBusy(false)\n }\n }\n : undefined,\n // Only whether the host offers it matters here.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [!!options.sendBack]\n )\n const declineWithNote = useMemo(\n () =>\n options.decline\n ? async (stepId: string, note?: string) => {\n setBusy(true)\n setActionError(null)\n try {\n await optionsRef.current.decline?.(stepId, note)\n } catch (e) {\n setActionError(errorMessage(e))\n } finally {\n setBusy(false)\n }\n }\n : undefined,\n // Only whether the host offers it matters here.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [!!options.decline]\n )\n\n const isLocked = useCallback(\n (stepId: string) => optionsRef.current.isLocked?.(stepId) ?? false,\n []\n )\n\n return {\n steps,\n step,\n current,\n isComplete: current === null,\n inputs,\n setInput,\n stateOf: (id) => states[id],\n phaseOf: (id) => stepPhase(steps, states, id),\n failedUpstreamOf: (id) => failedUpstream(steps, states, id),\n isLocked,\n errors: showErrors && step && !isLocked(step.id) ? validateStep(step, inputs) : {},\n busy,\n actionError,\n isRunning: Object.values(states).some((s) => s.status === 'running'),\n needsStart: !!options.start && !!options.needsStart,\n runError: options.runError ?? null,\n action,\n canBack: (current === null || index > 0) && !busy,\n next,\n back,\n goTo,\n skip,\n retry,\n sendBack,\n decline: declineWithNote,\n nameOf: options.nameOf,\n assigneeOf: (id) => {\n const s = steps.find((x) => x.id === id)\n if (!s || !canAssign(s)) return undefined\n return assigneeName(s.assignee, {\n nameOf: options.nameOf,\n inputs,\n fields: runFieldsOf(steps),\n announcedTo: states[id]?.announcedTo,\n })\n },\n restart: () => {\n setShowErrors(false)\n setActionError(null)\n setCurrent(steps[0]?.id ?? null)\n },\n }\n}\n","/**\n * What a step bar shows of a run: a window of a few levels of the graph (`stepLevels`) around the\n * step in view — previous, current, next — with how many steps it hides on either side, each\n * parallel level collapsed to one primary step plus the rest, and the running and failed steps the\n * window does not show (so work that is still going on, or broke, is never out of sight). Pure: both bars\n * (`WorkflowStepBar` in a runner, `WorkflowThreadStrip` on a thread) render from it.\n */\n\nimport type { WorkflowStepPhase } from './run'\n\n/** A step label's widest before it is cut (px): 20rem; the step in view's is wider (26rem). */\nexport const LABEL_MAX_PX = 320\n/** About one character of a label (12px text). */\nconst CHAR_PX = 6.5\n/** A level's room beyond its label: badge, padding, gaps and the shortest line. */\nconst LEVEL_CHROME_PX = 60\n/** A parallel level's \"+N\" chip. */\nconst GROUP_CHIP_PX = 32\n\n/**\n * The room a level needs to show its name uncut (up to `LABEL_MAX_PX`): a bar shows a flow whole\n * only when every level has this, so names are never squeezed for the sake of showing it all.\n */\nexport function levelRoomPx(titles: string[]): number {\n const label = Math.max(0, ...titles.map((t) => Math.min(LABEL_MAX_PX, t.length * CHAR_PX)))\n return Math.ceil(label + LEVEL_CHROME_PX + (titles.length > 1 ? GROUP_CHIP_PX : 0))\n}\n\n/** A step as far as the window is concerned. */\nexport interface StepWindowStep {\n id: string\n}\n\n/** One level of the graph: a step, or steps that run side by side (a parallel group). */\nexport interface StepWindowLevel<T extends StepWindowStep> {\n index: number\n steps: T[]\n /** The step the bar shows for the level: the running one, else the one in view, else … */\n primary: T\n /** The level's other steps, behind a \"+N\" chip. */\n others: T[]\n /** Where the level stands relative to the step in view. */\n role: 'previous' | 'current' | 'next' | 'other'\n}\n\nexport interface StepWindow<T extends StepWindowStep> {\n levels: StepWindowLevel<T>[]\n /** The levels in the window, in order. */\n visible: StepWindowLevel<T>[]\n /** The window's first level and the one after its last. */\n start: number\n end: number\n /** The level of the step in view. */\n currentLevel: number\n /** Steps in the levels before and after the window. */\n hiddenBefore: number\n hiddenAfter: number\n canBack: boolean\n canForward: boolean\n /** Running steps the bar does not show: outside the window, or collapsed in a group. */\n runningHidden: T[]\n /** Failed steps the bar does not show, likewise: a failure is always in sight. */\n failedHidden: T[]\n /** 1-based position of the step in view among all steps, and how many there are. */\n position: number\n total: number\n}\n\nexport interface StepWindowOptions<T extends StepWindowStep> {\n levels: T[][]\n phaseOf: (id: string) => WorkflowStepPhase\n /** The step in view; none (or unknown) = the step the run is at (`activeStepId`). */\n current?: string | null\n /** The window's first level, as the arrows moved it; none = around the step in view. */\n start?: number | null\n /** How many levels the window shows (3: previous, current, next). */\n span?: number\n}\n\n/** Where a person's attention goes first in a level, after a running step and the one in view. */\nconst ATTENTION: WorkflowStepPhase[] = ['waiting', 'failed', 'ready']\n\n/**\n * The step a run is at, when nothing else says which step is in view: a running one, else one\n * waiting on someone, else one that failed, else one ready to do, else the last one.\n */\nexport function activeStepId<T extends StepWindowStep>(\n levels: T[][],\n phaseOf: (id: string) => WorkflowStepPhase\n): string | undefined {\n const all = levels.flat()\n for (const phase of ['running', ...ATTENTION] as WorkflowStepPhase[]) {\n const hit = all.find((s) => phaseOf(s.id) === phase)\n if (hit) return hit.id\n }\n return all[all.length - 1]?.id\n}\n\nfunction primaryOf<T extends StepWindowStep>(\n steps: T[],\n phaseOf: (id: string) => WorkflowStepPhase,\n current: string | undefined\n): T {\n return (\n steps.find((s) => phaseOf(s.id) === 'running') ??\n steps.find((s) => s.id === current) ??\n ATTENTION.map((p) => steps.find((s) => phaseOf(s.id) === p)).find(Boolean) ??\n steps[0]\n )\n}\n\nexport function stepWindow<T extends StepWindowStep>({\n levels: raw,\n phaseOf,\n current,\n start: requested,\n span = 3,\n}: StepWindowOptions<T>): StepWindow<T> {\n const levelsIn = raw.filter((l) => l.length > 0)\n const known = current && levelsIn.some((l) => l.some((s) => s.id === current))\n const at = known ? (current as string) : activeStepId(levelsIn, phaseOf)\n const currentLevel = Math.max(\n 0,\n levelsIn.findIndex((l) => l.some((s) => s.id === at))\n )\n const n = levelsIn.length\n const size = Math.max(1, Math.min(span, n))\n const maxStart = Math.max(0, n - size)\n // Around the step in view: one level before it when the window has room for three, else it\n // leads (narrow: current and next). Clamped, so the window is always full.\n const auto = currentLevel - (size >= 3 ? 1 : 0)\n const start = Math.min(maxStart, Math.max(0, requested ?? auto))\n const end = start + size\n\n const levels: StepWindowLevel<T>[] = levelsIn.map((steps, index) => {\n const primary = primaryOf(steps, phaseOf, at)\n return {\n index,\n steps,\n primary,\n others: steps.filter((s) => s !== primary),\n role:\n index === currentLevel\n ? 'current'\n : index === currentLevel - 1\n ? 'previous'\n : index === currentLevel + 1\n ? 'next'\n : 'other',\n }\n })\n const visible = levels.slice(start, end)\n const count = (ls: StepWindowLevel<T>[]) => ls.reduce((sum, l) => sum + l.steps.length, 0)\n const shown = new Set(visible.map((l) => l.primary.id))\n const all = levelsIn.flat()\n return {\n levels,\n visible,\n start,\n end,\n currentLevel,\n hiddenBefore: count(levels.slice(0, start)),\n hiddenAfter: count(levels.slice(end)),\n canBack: start > 0,\n canForward: end < n,\n runningHidden: all.filter((s) => phaseOf(s.id) === 'running' && !shown.has(s.id)),\n failedHidden: all.filter((s) => phaseOf(s.id) === 'failed' && !shown.has(s.id)),\n position: Math.max(1, all.findIndex((s) => s.id === at) + 1),\n total: all.length,\n }\n}\n","/**\n * The frame both step bars share (`WorkflowStepBar` in a runner, `WorkflowThreadStrip` on a\n * thread): `‹ … [previous] [CURRENT] [next] … ›`, from `stepWindow`. Each visible level shows one\n * step by name (its pill is the host's), a parallel level adds a \"+N\" chip that lists the group,\n * \"…\" on either side lists every step, and every running step the window does not show gets a\n * \"Working: <title>\" pill at the end, every failed one a \"Failed: <title>\" pill. The bar is a nav landmark; ←/→ (Home/End) move the window.\n * Steps look as they do on the builder's canvas (`StepChip`): each kind in its own colour, and the\n * line out of a finished step in that step's colour.\n */\n\nimport { useEffect, useRef, useState, type KeyboardEvent, type ReactNode } from 'react'\nimport { ChevronLeft, ChevronRight, Loader2 } from 'lucide-react'\nimport { cn, Popover, PopoverContent, PopoverTrigger } from '@arbidocs/react/ui'\nimport { useElementSize } from '../../lib/useElementSize'\nimport type { WorkflowStepPhase } from './run'\nimport { StepBadgeMark, StepChip } from './StepChip'\nimport {\n levelRoomPx,\n stepWindow,\n type StepWindow,\n type StepWindowLevel,\n type StepWindowStep,\n} from './stepWindow'\n\nexport interface StepBarLabels {\n nav: string\n back: string\n forward: string\n /** The \"…\" before the window; `{count}` is replaced. */\n hiddenBefore: string\n /** The \"…\" after the window; `{count}` is replaced. */\n hiddenAfter: string\n /** The full list's heading; `{position}` and `{total}` are replaced. */\n position: string\n /** A parallel group's chip; `{count}` is replaced. */\n parallel: string\n inParallel: string\n /** A running step out of view; `{title}` is replaced. */\n working: string\n /** Several more running out of view; `{count}` is replaced. */\n moreWorking: string\n /** A failed step out of view; `{title}` is replaced. */\n failedStep: string\n /** A step that waits for someone; `{name}` is replaced. */\n waitingFor: string\n phases: Record<WorkflowStepPhase, string>\n}\n\nexport const DEFAULT_STEP_BAR_LABELS: StepBarLabels = {\n nav: 'Workflow steps',\n back: 'Earlier steps',\n forward: 'Later steps',\n hiddenBefore: '{count} earlier steps',\n hiddenAfter: '{count} later steps',\n position: 'Step {position} of {total}',\n parallel: '{count} more in parallel',\n inParallel: 'In parallel',\n working: 'Working: {title}',\n moreWorking: '+{count} working',\n failedStep: 'Failed: {title}',\n waitingFor: 'Waiting for {name}',\n phases: {\n blocked: 'Not started',\n ready: 'To do',\n running: 'Working',\n waiting: 'Waiting',\n done: 'Done',\n skipped: 'Skipped',\n failed: 'Failed',\n },\n}\n\n/**\n * A label is the full title, cut with an ellipsis only when very long (in full in `title`) or when\n * the bar is out of room — connectors give up their room first. Its widest is `LABEL_MAX_PX`\n * (20rem).\n */\nexport const STEP_LABEL = 'min-w-[2.5rem] truncate'\nexport const STEP_LABEL_MAX = 'max-w-[20rem]'\n/**\n * The step in view's label: wider (26rem), and the last to give up room (what is around it shrinks\n * a million times harder, so it is not cut while anything else on its chip or the bar can still\n * give). Its chip already has two lines (the kind above the name), so it is cut, not wrapped.\n */\nexport const STEP_LABEL_CURRENT = 'block min-w-[2.5rem] max-w-[26rem] truncate'\n/**\n * What follows a name on its pill (\"Waiting for …\"): cut before the name is. Flex shares a shortage\n * in proportion, so the factor is huge: even a sliver taken from the name would show an ellipsis.\n */\nexport const STEP_EXTRA = 'min-w-[3rem] shrink-[1000000] truncate font-normal opacity-80'\n\nconst fill = (template: string, values: Record<string, string | number>) =>\n Object.entries(values).reduce((s, [k, v]) => s.replace(`{${k}}`, String(v)), template)\n\n/** A step in the frame's lists: its title, for naming it. */\nexport interface StepBarStep extends StepWindowStep {\n title: string\n}\n\nexport interface StepBarFrameProps<T extends StepBarStep> {\n levels: T[][]\n phaseOf: (id: string) => WorkflowStepPhase\n /** The step in view (none = where the run is). */\n current?: string | null\n /** Go to a step: from a group, the full list or a \"Working\" pill. */\n onSelect: (id: string) => void\n /** The pill of a level's primary step (a button or a popover trigger). */\n renderStep: (step: T, level: StepWindowLevel<T>, win: StepWindow<T>, narrow: boolean) => ReactNode\n /** What follows a level's pill (signals it raised…). */\n renderAfter?: (level: StepWindowLevel<T>) => ReactNode\n /** Before the steps / after them: shown while the window is at that end. */\n leading?: ReactNode\n trailing?: ReactNode\n /**\n * Room the bar needs beyond the levels' names: always (a wider step in view), and for `leading`\n * and `trailing` while the window reaches that end. A window is only as wide as fits with it.\n */\n reservePx?: { always?: number; leading?: number; trailing?: number }\n /** Steps that cannot be gone to (the completion marker). */\n isSelectable?: (id: string) => boolean\n icon?: (step: T) => ReactNode\n /** A step's kind (`agent`, `review`…), for its colour; none = neutral. */\n kindOf?: (step: T) => string\n disabled?: boolean\n labels?: Partial<StepBarLabels>\n tid: (suffix: string) => string\n className?: string\n}\n\n/** Below this width the window shows two levels: the current one and the next. */\nconst NARROW_PX = 560\n/** The ‹ › arrows, and a \"…N\" counter on a side that hides steps. */\nconst ARROWS_PX = 56\nconst HIDDEN_PX = 40\n\nexport function StepBarFrame<T extends StepBarStep>({\n levels,\n phaseOf,\n current,\n onSelect,\n renderStep,\n renderAfter,\n leading,\n trailing,\n reservePx = {},\n isSelectable = () => true,\n icon,\n kindOf = () => 'adhoc',\n disabled,\n labels,\n tid,\n className,\n}: StepBarFrameProps<T>) {\n const l = { ...DEFAULT_STEP_BAR_LABELS, ...labels }\n const box = useRef<HTMLElement>(null)\n const { width } = useElementSize(box)\n const narrow = width > 0 && width < NARROW_PX\n // The arrows' window start; none = around the step in view. A new step in view re-centres it.\n const [start, setStart] = useState<number | null>(null)\n useEffect(() => setStart(null), [current])\n // Narrow: the step in view alone, with a \"3/12\" counter. Wider: as many levels around it as have\n // room for their names uncut — the whole flow when it all fits — down to the step in view alone.\n const roomOf = (lv: T[]) => levelRoomPx(lv.map((s) => s.title))\n const fits = (k: number) => {\n const w = stepWindow({ levels, phaseOf, current, start, span: k })\n const reserve =\n (reservePx.always ?? 0) +\n (w.start === 0 ? (reservePx.leading ?? 0) : 0) +\n (w.canForward ? 0 : (reservePx.trailing ?? 0)) +\n ARROWS_PX +\n (w.hiddenBefore ? HIDDEN_PX : 0) +\n (w.hiddenAfter ? HIDDEN_PX : 0)\n return width - reserve >= w.visible.reduce((sum, lv) => sum + roomOf(lv.steps), 0)\n }\n // Not measured yet (no layout): previous, current and next.\n let span = width > 0 ? 1 : 3\n if (!narrow && width > 0)\n for (let k = levels.length; k > 1; k--)\n if (fits(k)) {\n span = k\n break\n }\n const win = stepWindow({ levels, phaseOf, current, start, span })\n const [listOpen, setListOpen] = useState<'before' | 'after' | null>(null)\n\n const move = (to: number) => setStart(Math.max(0, Math.min(win.levels.length - 1, to)))\n // Moved from the keyboard: the focus goes to the window's first step, so it never stays on a\n // step the window has scrolled away from.\n const keyMoved = useRef(false)\n useEffect(() => {\n if (!keyMoved.current) return\n keyMoved.current = false\n box.current?.querySelector<HTMLElement>('[data-role] button')?.focus()\n }, [win.start])\n const select = (id: string) => {\n setListOpen(null)\n setStart(null)\n onSelect(id)\n }\n const onKeyDown = (e: KeyboardEvent<HTMLElement>) => {\n // Popovers are portalled but their keys bubble here through React: only the bar's own.\n if (!box.current?.contains(e.target as Node)) return\n const to =\n e.key === 'ArrowLeft'\n ? win.start - 1\n : e.key === 'ArrowRight'\n ? win.start + 1\n : e.key === 'Home'\n ? 0\n : e.key === 'End'\n ? win.levels.length\n : null\n if (to === null) return\n e.preventDefault()\n keyMoved.current = true\n move(to)\n }\n\n const row = (s: T, isCurrent: boolean) => {\n const phase = phaseOf(s.id)\n const selectable = isSelectable(s.id)\n return (\n <button\n key={s.id}\n type=\"button\"\n disabled={!selectable || disabled}\n onClick={() => select(s.id)}\n aria-current={isCurrent ? 'step' : undefined}\n className={cn(\n `wf-kind-${kindOf(s)}`,\n 'flex w-full min-w-0 items-center gap-2 rounded-md px-2 py-1 text-left text-xs hover:bg-accent disabled:cursor-default disabled:hover:bg-transparent',\n isCurrent && 'bg-accent font-semibold'\n )}\n data-phase={phase}\n data-testid={tid(`list-step-${s.id}`)}\n >\n <span\n className={cn(\n 'wf-badge flex size-5 shrink-0 items-center justify-center rounded-md [&_svg]:size-3',\n phase === 'done' && 'bg-[hsl(var(--wf-accent))] text-card',\n phase === 'blocked' && 'opacity-60'\n )}\n aria-hidden\n >\n <StepBadgeMark phase={phase} icon={icon?.(s)} />\n </span>\n <span className=\"min-w-0 flex-1 truncate\" title={s.title}>\n {s.title}\n </span>\n <span className=\"shrink-0 text-[10px] font-normal text-muted-foreground\">\n {l.phases[phase]}\n </span>\n </button>\n )\n }\n const at = win.levels[win.currentLevel]\n const atId = at && (at.steps.find((s) => s.id === current) ?? at.primary).id\n\n // The full list opens at the step in view, focused (a 40-step list starts where you are).\n const focusCurrent = (e: Event) => {\n const el = (e.currentTarget as HTMLElement | null)?.querySelector<HTMLElement>(\n '[aria-current=\"step\"]'\n )\n if (!el) return\n e.preventDefault()\n el.focus()\n el.scrollIntoView?.({ block: 'nearest' })\n }\n // A list of steps: all of them (the narrow counter), or those a \"…N\" hides on its side.\n const stepList = (side?: 'before' | 'after') => (\n <>\n <p className=\"px-2 py-1 text-[11px] font-medium text-muted-foreground\">\n {side\n ? fill(side === 'before' ? l.hiddenBefore : l.hiddenAfter, {\n count: side === 'before' ? win.hiddenBefore : win.hiddenAfter,\n })\n : fill(l.position, { position: win.position, total: win.total })}\n </p>\n <ol>\n {(side === 'before'\n ? win.levels.slice(0, win.start)\n : side === 'after'\n ? win.levels.slice(win.end)\n : win.levels\n ).map((level) => (\n <li\n key={level.index}\n className={cn(level.steps.length > 1 && 'my-0.5 border-l-2 border-border pl-1')}\n >\n {level.steps.length > 1 && (\n <p className=\"px-2 text-[10px] uppercase tracking-wide text-muted-foreground\">\n {l.inParallel}\n </p>\n )}\n {level.steps.map((s) => row(s, s.id === atId))}\n </li>\n ))}\n </ol>\n </>\n )\n\n // \"…\": how many steps the window hides on that side; it opens the whole list.\n // Narrow, one counter (\"3/12\") after the steps stands for both.\n const overflow = (side: 'before' | 'after', count: number) =>\n narrow && side === 'before' ? null : narrow && side === 'after' ? (\n win.hiddenBefore + win.hiddenAfter > 0 ? (\n <Popover open={listOpen === side} onOpenChange={(o) => setListOpen(o ? side : null)}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"flex shrink-0 items-center rounded-full px-1.5 py-1 text-[11px] tabular-nums text-muted-foreground hover:bg-accent hover:text-foreground\"\n aria-label={fill(l.position, { position: win.position, total: win.total })}\n title={fill(l.position, { position: win.position, total: win.total })}\n data-testid={tid('steps-count')}\n >\n {win.position}/{win.total}\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"end\"\n className=\"max-h-[min(24rem,70vh)] w-72 overflow-y-auto p-1\"\n onOpenAutoFocus={focusCurrent}\n data-testid={tid('all-steps')}\n >\n {stepList()}\n </PopoverContent>\n </Popover>\n ) : null\n ) : count > 0 ? (\n <Popover open={listOpen === side} onOpenChange={(o) => setListOpen(o ? side : null)}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"flex shrink-0 items-center gap-0.5 rounded-full px-1.5 py-1 text-xs text-muted-foreground hover:bg-accent hover:text-foreground\"\n aria-label={fill(side === 'before' ? l.hiddenBefore : l.hiddenAfter, { count })}\n title={fill(side === 'before' ? l.hiddenBefore : l.hiddenAfter, { count })}\n data-testid={tid(`hidden-${side}`)}\n >\n <span aria-hidden>…</span>\n <span className=\"tabular-nums\">{count}</span>\n </button>\n </PopoverTrigger>\n <PopoverContent\n align={side === 'before' ? 'start' : 'end'}\n className=\"max-h-[min(24rem,70vh)] w-80 overflow-y-auto p-1\"\n onOpenAutoFocus={focusCurrent}\n data-testid={tid('all-steps')}\n >\n {stepList(side)}\n </PopoverContent>\n </Popover>\n ) : null\n\n const arrow = (dir: 'back' | 'forward') => {\n const can = dir === 'back' ? win.canBack : win.canForward\n const Icon = dir === 'back' ? ChevronLeft : ChevronRight\n return (\n <button\n type=\"button\"\n onClick={() => move(win.start + (dir === 'back' ? -1 : 1))}\n disabled={!can}\n aria-label={dir === 'back' ? l.back : l.forward}\n title={dir === 'back' ? l.back : l.forward}\n className=\"flex size-6 shrink-0 items-center justify-center rounded-full text-muted-foreground hover:bg-accent hover:text-foreground disabled:pointer-events-none disabled:opacity-30\"\n data-testid={tid(`steps-${dir}`)}\n >\n <Icon className=\"size-4\" />\n </button>\n )\n }\n\n const running = win.runningHidden\n const outOfViewChip = (s: T, kind: 'working' | 'failedStep') => (\n <StepChip\n key={s.id}\n kind={kindOf(s)}\n phase={kind === 'working' ? 'running' : 'failed'}\n label={fill(l[kind], { title: s.title })}\n labelClassName={narrow ? 'sr-only' : 'truncate'}\n onClick={() => select(s.id)}\n className=\"max-w-[14rem] shrink\"\n title={fill(l[kind], { title: s.title })}\n data-testid={tid(`${kind === 'working' ? 'working' : 'failed'}-${s.id}`)}\n />\n )\n\n return (\n <nav\n ref={box}\n aria-label={l.nav}\n onKeyDown={onKeyDown}\n className={cn('flex min-w-0 items-center gap-1', className)}\n data-testid={tid('steps')}\n data-narrow={narrow || undefined}\n >\n {arrow('back')}\n {win.start === 0 && leading}\n {overflow('before', win.hiddenBefore)}\n <ol className=\"flex min-w-0 flex-[1_1_auto] items-center gap-1\">\n {win.visible.map((level, i) => (\n <li\n key={level.steps.map((s) => s.id).join('+')}\n // Levels take their names' room and the connectors what is left. Short of room, the\n // connectors give theirs first (down to a stub), then the \"Working\" pills, then the\n // other levels' names, then what follows the current name (\"Waiting for …\"), and only\n // then is the current name wrapped and cut — never below a readable start. Flex shares\n // a shortage in proportion, so the other levels shrink a million times harder: even a\n // sliver taken from the current name would show an ellipsis. (The current level keeps\n // a factor of 1: factors summing under 1 would leave part of the shortage unabsorbed.)\n className={cn(\n 'flex min-w-[5.5rem] basis-auto items-center gap-1',\n i === win.visible.length - 1 ? 'grow-0' : 'grow',\n level.index === win.currentLevel ? 'shrink' : 'shrink-[1000000]'\n )}\n data-role={level.role}\n >\n {renderStep(level.primary, level, win, narrow)}\n {level.others.length > 0 && (\n <GroupChip\n level={level}\n label={fill(l.parallel, { count: level.others.length })}\n heading={l.inParallel}\n row={(s) => row(s, s.id === atId)}\n tid={tid}\n />\n )}\n {renderAfter?.(level)}\n {i < win.visible.length - 1 && !narrow && (\n <span\n aria-hidden\n className={cn('wf-link', `wf-kind-${kindOf(level.primary)}`)}\n data-done={\n level.steps.every((s) => ['done', 'skipped'].includes(phaseOf(s.id))) || undefined\n }\n />\n )}\n </li>\n ))}\n </ol>\n {overflow('after', win.hiddenAfter)}\n {!win.canForward && trailing}\n {arrow('forward')}\n {running.length > 0 && (\n <div\n className={cn('flex shrink-[1000] items-center gap-1', !narrow && 'min-w-[6.5rem]')}\n data-testid={tid('working')}\n >\n {(running.length > 2 ? running.slice(0, 1) : running).map((s) =>\n outOfViewChip(s, 'working')\n )}\n {running.length > 2 && (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"flex shrink-0 items-center gap-1 rounded-lg border border-border bg-card px-2 py-1 text-xs text-muted-foreground hover:text-foreground\"\n data-testid={tid('working-more')}\n >\n <Loader2 className=\"size-3.5 animate-spin\" />\n {fill(l.moreWorking, { count: running.length - 1 })}\n </button>\n </PopoverTrigger>\n <PopoverContent align=\"end\" className=\"w-72 p-1\">\n {running.slice(1).map((s) => row(s, false))}\n </PopoverContent>\n </Popover>\n )}\n </div>\n )}\n {win.failedHidden.length > 0 && (\n <div\n className={cn('flex shrink-[1000] items-center gap-1', !narrow && 'min-w-[6.5rem]')}\n data-testid={tid('failed')}\n >\n {win.failedHidden.map((s) => outOfViewChip(s, 'failedStep'))}\n </div>\n )}\n </nav>\n )\n}\n\n/** \"+N\": the rest of a parallel level, listed on demand. */\nfunction GroupChip<T extends StepBarStep>({\n level,\n label,\n heading,\n row,\n tid,\n}: {\n level: StepWindowLevel<T>\n label: string\n heading: string\n row: (s: T) => ReactNode\n tid: (suffix: string) => string\n}) {\n return (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"shrink-0 rounded-md border border-border bg-card px-1.5 py-0.5 text-[11px] font-medium tabular-nums text-muted-foreground shadow-sm hover:text-foreground\"\n aria-label={label}\n title={label}\n data-testid={tid(`group-${level.steps[0].id}`)}\n >\n +{level.others.length}\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className=\"w-72 p-1\"\n data-testid={tid(`group-${level.steps[0].id}-list`)}\n >\n <p className=\"px-2 py-1 text-[11px] font-medium text-muted-foreground\">{heading}</p>\n {level.steps.map(row)}\n </PopoverContent>\n </Popover>\n )\n}\n","/**\n * The runner's step parts beyond a form, an upload and an agent's answer: an action step (a\n * signature, an email draft, a tabular review), a review's fields, its send-back and what it\n * approved, the \"Waiting for <person>\" line, and \"Open in Editor\" for a tracked-changes version.\n * Everything that leaves the runner (opening a document, mail, a grid, the sign flow) goes through\n * the host's `WorkflowRunnerActions`.\n */\n\nimport { useState, type ReactNode } from 'react'\nimport {\n Check,\n Clock,\n CornerUpLeft,\n ExternalLink,\n FileText,\n Hourglass,\n Loader2,\n Mail,\n MessageSquare,\n PenLine,\n ShieldCheck,\n Table2,\n UserRound,\n X,\n} from 'lucide-react'\nimport { Button, Textarea, cn } from '@arbidocs/react/ui'\nimport { sendBackTargets, splitDocRef } from './run'\nimport { formatDate, shownValue } from './StepDocuments'\nimport type { WorkflowRunView } from './useWorkflowView'\nimport type {\n WorkflowActionStep,\n WorkflowAgentStep,\n WorkflowReviewStep,\n WorkflowStepState,\n} from './types'\n\n/** Where the runner hands off to the host. Each is optional: absent, its button is not shown. */\nexport interface WorkflowRunnerActions {\n /** Open a document, or one version of it (`doc-…@v3`). */\n openDocument?: (ref: string) => void\n /** Open the document of a signature step to sign it (the signer's turn). */\n sign?: (step: WorkflowActionStep, state: WorkflowStepState) => void\n /** Open an email step's draft in native mail. */\n openDraft?: (draftId: string, mailbox?: string) => void\n /** Open a finished tabular review's grid: its columns (labels) over its documents. */\n openReview?: (tags: string[], documents: string[]) => void\n /** Open a tracked-changes version in the Word editor, to accept or reject the changes. */\n openRedline?: (ref: string) => void\n /** Show a step's answer where it is in the thread. */\n openMessage?: (messageId: string) => void\n /** The person on screen (`usr-…`): a signature offers \"Open and sign\" to its signers only. */\n me?: string\n}\n\nexport interface WorkflowStepPartsLabels {\n waitingFor: string\n sendBack: string\n sendBackTo: string\n sendBackNote: string\n cancel: string\n sentBackHere: string\n approvedBy: string\n approvedAt: string\n approvedWhat: string\n viewAnswer: string\n fieldsHeading: string\n signers: string\n signed: string\n notSigned: string\n openAndSign: string\n decline: string\n declineNote: string\n declineConfirm: string\n declined: string\n signedVersion: string\n preparingSign: string\n expires: string\n preparingDraft: string\n draftReady: string\n openDraft: string\n emailSent: string\n reviewRunning: string\n reviewDone: string\n openReview: string\n openInEditor: string\n redlineHint: string\n someone: string\n}\n\nexport const DEFAULT_WORKFLOW_STEP_PARTS_LABELS: WorkflowStepPartsLabels = {\n waitingFor: 'Waiting for {name}',\n sendBack: 'Send back',\n sendBackTo: 'Send back to',\n sendBackNote: 'What needs to change? (optional)',\n cancel: 'Cancel',\n sentBackHere: 'This step was sent back to be done again.',\n approvedBy: 'Approved by {name}',\n approvedAt: '{date}',\n approvedWhat: 'What was approved',\n viewAnswer: 'View the answer',\n fieldsHeading: 'Recorded with the approval',\n signers: 'Signers',\n signed: 'Signed',\n notSigned: 'Not signed yet',\n openAndSign: 'Open and sign',\n decline: 'Decline',\n declineNote: 'Why are you declining? (optional)',\n declineConfirm: 'Decline to sign',\n declined: 'Declined by {name}.',\n signedVersion: 'Open the signed version',\n preparingSign: 'Preparing the signature request…',\n expires: 'Expires {date}',\n preparingDraft: 'Preparing the draft…',\n draftReady: 'The draft is ready in native mail. Check it, send it, then mark it as sent.',\n openDraft: 'Open draft',\n emailSent: 'Sent.',\n reviewRunning: 'Reviewing the documents…',\n reviewDone: 'Reviewed {docs} documents in {cols} columns.',\n openReview: 'Open the review',\n openInEditor: 'Open in Editor',\n redlineHint: 'The edits are tracked changes: accept or reject each one in Word.',\n someone: 'someone',\n}\n\nconst docName = (ref: string, nameOfDoc?: (id: string) => string | undefined) => {\n const { id, version } = splitDocRef(ref)\n const name = nameOfDoc?.(id) ?? id\n return version ? `${name} · v${version}` : name\n}\n\n/** A document version as a chip, opening it when the host can. */\nfunction DocChip({\n docRef,\n actions,\n nameOfDoc,\n testId,\n}: {\n docRef: string\n actions?: WorkflowRunnerActions\n nameOfDoc?: (id: string) => string | undefined\n testId?: string\n}) {\n const label = docName(docRef, nameOfDoc)\n const cls =\n 'inline-flex max-w-full items-center gap-1 rounded-md border border-border px-1.5 py-0.5 text-xs'\n return actions?.openDocument ? (\n <button\n type=\"button\"\n onClick={() => actions.openDocument?.(docRef)}\n className={cn(cls, 'hover:border-primary/40 hover:text-primary')}\n title={docRef}\n data-testid={testId}\n >\n <FileText className=\"size-3 shrink-0\" /> <span className=\"truncate\">{label}</span>\n </button>\n ) : (\n <span className={cls} title={docRef} data-testid={testId}>\n <FileText className=\"size-3 shrink-0\" /> <span className=\"truncate\">{label}</span>\n </span>\n )\n}\n\n/** \"Waiting for Sophie Lindqvist\" on a step a person has to do. */\nexport function AssigneeLine({\n run,\n stepId,\n l,\n testId,\n}: {\n run: WorkflowRunView\n stepId: string\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const name = run.assigneeOf(stepId)\n const phase = run.phaseOf(stepId)\n if (!name || !['ready', 'waiting', 'blocked'].includes(phase)) return null\n return (\n <p\n className=\"flex items-center gap-1.5 text-xs text-muted-foreground\"\n data-testid={`${testId}-assignee`}\n >\n <UserRound className=\"size-3.5\" /> {l.waitingFor.replace('{name}', name)}\n </p>\n )\n}\n\n/** A step reopened by a send-back says so. */\nexport function SentBackNote({\n state,\n l,\n testId,\n}: {\n state: WorkflowStepState | undefined\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n if (!state?.sentBack) return null\n return (\n <p\n className=\"flex items-center gap-1.5 rounded-md bg-amber-500/10 px-2 py-1 text-xs text-amber-700 dark:text-amber-300\"\n data-testid={`${testId}-sent-back`}\n >\n <CornerUpLeft className=\"size-3.5\" /> {l.sentBackHere}\n </p>\n )\n}\n\n/** \"Send back\" on a ready step: pick the earlier step to redo and say what needs to change. */\nexport function SendBackControl({\n run,\n step,\n l,\n testId,\n}: {\n run: WorkflowRunView\n step: WorkflowReviewStep\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const states = Object.fromEntries(\n run.steps.map((s) => [s.id, run.stateOf(s.id) ?? { status: 'pending' as const }])\n )\n const targets = sendBackTargets(run.steps, states, step.id)\n const [open, setOpen] = useState(false)\n const [to, setTo] = useState(targets[0]?.id ?? '')\n const [note, setNote] = useState('')\n if (!run.sendBack || run.phaseOf(step.id) !== 'ready' || targets.length === 0) return null\n if (!open)\n return (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setOpen(true)}\n disabled={run.busy}\n data-testid={`${testId}-send-back`}\n >\n <CornerUpLeft className=\"size-4\" /> {l.sendBack}\n </Button>\n )\n const target = targets.some((t) => t.id === to) ? to : targets[0].id\n return (\n <div\n className=\"space-y-2 rounded-md border border-border p-3\"\n data-testid={`${testId}-send-back-form`}\n >\n <label className=\"block space-y-1 text-xs font-medium\">\n {l.sendBackTo}\n <select\n className=\"flex h-8 w-full rounded-md border border-input bg-background px-2 text-sm\"\n value={target}\n onChange={(e) => setTo(e.target.value)}\n data-testid={`${testId}-send-back-to`}\n >\n {targets.map((t) => (\n <option key={t.id} value={t.id}>\n {t.title}\n </option>\n ))}\n </select>\n </label>\n <Textarea\n rows={3}\n value={note}\n placeholder={l.sendBackNote}\n aria-label={l.sendBackNote}\n onChange={(e) => setNote(e.target.value)}\n data-testid={`${testId}-send-back-note`}\n />\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setOpen(false)}>\n {l.cancel}\n </Button>\n <Button\n size=\"sm\"\n disabled={run.busy}\n onClick={() => void run.sendBack?.(step.id, target, note.trim() || undefined)}\n data-testid={`${testId}-send-back-confirm`}\n >\n <CornerUpLeft className=\"size-4\" /> {l.sendBack}\n </Button>\n </div>\n </div>\n )\n}\n\n/** What a completed review recorded: who approved, the answers and versions, the fields. */\nexport function ApprovalEvidence({\n run,\n step,\n actions,\n nameOfDoc,\n l,\n testId,\n}: {\n run: WorkflowRunView\n step: WorkflowReviewStep\n actions?: WorkflowRunnerActions\n nameOfDoc?: (id: string) => string | undefined\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const state = run.stateOf(step.id)\n if (state?.status !== 'done') return null\n const approver = state.by ? (run.nameOf?.(state.by) ?? l.someone) : undefined\n const evidence = state.approved ?? []\n const titleOf = (id: string) => run.steps.find((s) => s.id === id)?.title ?? id\n return (\n <div className=\"space-y-2 rounded-md bg-muted/40 p-3\" data-testid={`${testId}-evidence`}>\n <p className=\"flex flex-wrap items-center gap-1.5 text-sm font-medium\">\n <ShieldCheck className=\"size-4 text-primary\" />\n {approver ? l.approvedBy.replace('{name}', approver) : null}\n {state.at && (\n <span className=\"text-xs font-normal text-muted-foreground\">\n {l.approvedAt.replace('{date}', formatDate(state.at))}\n </span>\n )}\n </p>\n {evidence.length > 0 && (\n <div className=\"space-y-1.5\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {l.approvedWhat}\n </p>\n {evidence.map((e) => (\n <div\n key={e.step}\n className=\"flex flex-wrap items-center gap-1.5 text-xs\"\n data-testid={`${testId}-evidence-${e.step}`}\n >\n <span className=\"font-medium\">{titleOf(e.step)}</span>\n {e.response_id &&\n (actions?.openMessage ? (\n <button\n type=\"button\"\n onClick={() => actions.openMessage?.(e.response_id as string)}\n className=\"inline-flex items-center gap-1 text-primary hover:underline\"\n data-testid={`${testId}-evidence-${e.step}-answer`}\n >\n <MessageSquare className=\"size-3\" /> {l.viewAnswer}\n </button>\n ) : null)}\n {(e.documents ?? []).map((d) => (\n <DocChip key={d} docRef={d} actions={actions} nameOfDoc={nameOfDoc} />\n ))}\n </div>\n ))}\n </div>\n )}\n {(step.fields ?? []).length > 0 && (\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5 text-xs\">\n {(step.fields ?? []).map((f) => (\n <div key={f.name} className=\"contents\">\n <dt className=\"text-muted-foreground\">{f.label}</dt>\n <dd data-testid={`${testId}-evidence-field-${f.name}`}>\n {shownValue(run.inputs[f.name], f, run.nameOf)}\n </dd>\n </div>\n ))}\n </dl>\n )}\n </div>\n )\n}\n\n/** \"Open in Editor\" for an agent step that edited a document with tracked changes. */\nexport function RedlineOpen({\n step,\n state,\n actions,\n l,\n testId,\n}: {\n step: WorkflowAgentStep\n state: WorkflowStepState | undefined\n actions?: WorkflowRunnerActions\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const version = state?.status === 'done' ? state.documents?.[0] : undefined\n if (!step.editDocument || !version || !actions?.openRedline) return null\n return (\n <div className=\"flex flex-wrap items-center gap-2\" data-testid={`${testId}-redline`}>\n <Button\n size=\"sm\"\n onClick={() => actions.openRedline?.(version)}\n data-testid={`${testId}-open-word`}\n >\n <FileText className=\"size-4\" /> {l.openInEditor}\n </Button>\n <span className=\"text-xs text-muted-foreground\">{l.redlineHint}</span>\n </div>\n )\n}\n\n/** A platform action step: where it is, and what its person can do now. */\nexport function ActionStepBody({\n step,\n run,\n actions,\n nameOfDoc,\n heading,\n l,\n testId,\n}: {\n step: WorkflowActionStep\n run: WorkflowRunView\n actions?: WorkflowRunnerActions\n nameOfDoc?: (id: string) => string | undefined\n heading: ReactNode\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const state = run.stateOf(step.id)\n const phase = run.phaseOf(step.id)\n // On its way: running, or ready with a run under way to start it (else it waits for Start).\n const underWay = phase === 'running' || (phase === 'ready' && !run.needsStart)\n const name = (id: string) => run.nameOf?.(id) ?? id\n const [declining, setDeclining] = useState(false)\n const [note, setNote] = useState('')\n const a = step.action\n const working = (text: string) => (\n <p\n className=\"flex items-center gap-2 text-sm text-muted-foreground\"\n data-testid={`${testId}-working`}\n >\n <Loader2 className=\"size-4 animate-spin\" /> {text}\n </p>\n )\n\n let body: ReactNode = null\n if (a.type === 'sign') {\n const waiting = state?.waiting\n const signers = waiting?.signers ?? []\n const signed = new Set(waiting?.signed ?? [])\n const mine = !actions?.me || (signers.includes(actions.me) && !signed.has(actions.me))\n const signedRef = state?.status === 'done' ? state.documents?.[0] : undefined\n body = (\n <>\n {underWay && working(l.preparingSign)}\n {phase === 'waiting' && waiting?.doc_ext_id && (\n <DocChip\n docRef={`${waiting.doc_ext_id}${waiting.version ? `@v${waiting.version}` : ''}`}\n actions={actions}\n nameOfDoc={nameOfDoc}\n testId={`${testId}-document`}\n />\n )}\n {signers.length > 0 && (\n <div className=\"space-y-1\" data-testid={`${testId}-signers`}>\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {l.signers}\n </p>\n {signers.map((id) => (\n <p\n key={id}\n className=\"flex items-center gap-2 text-sm\"\n data-signed={signed.has(id) || undefined}\n data-testid={`${testId}-signer-${id}`}\n >\n {signed.has(id) ? (\n <Check className=\"size-3.5 text-primary\" />\n ) : (\n <Hourglass className=\"size-3.5 text-muted-foreground\" />\n )}\n <span className=\"font-medium\">{name(id)}</span>\n <span className=\"text-xs text-muted-foreground\">\n {signed.has(id) ? l.signed : l.notSigned}\n </span>\n </p>\n ))}\n </div>\n )}\n {waiting?.expires_at && phase === 'waiting' && (\n <p className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Clock className=\"size-3.5\" />{' '}\n {l.expires.replace('{date}', formatDate(waiting.expires_at))}\n </p>\n )}\n {phase === 'waiting' && mine && !declining && (\n <div className=\"flex flex-wrap gap-2\">\n {actions?.sign && state && (\n <Button\n size=\"sm\"\n onClick={() => actions.sign?.(step, state)}\n data-testid={`${testId}-open-sign`}\n >\n <PenLine className=\"size-4\" /> {l.openAndSign}\n </Button>\n )}\n {run.decline && (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => setDeclining(true)}\n data-testid={`${testId}-decline`}\n >\n <X className=\"size-4\" /> {l.decline}\n </Button>\n )}\n </div>\n )}\n {declining && (\n <div className=\"space-y-2\" data-testid={`${testId}-decline-form`}>\n <Textarea\n rows={2}\n value={note}\n placeholder={l.declineNote}\n aria-label={l.declineNote}\n onChange={(e) => setNote(e.target.value)}\n data-testid={`${testId}-decline-note`}\n />\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setDeclining(false)}>\n {l.cancel}\n </Button>\n <Button\n size=\"sm\"\n variant=\"destructive\"\n disabled={run.busy}\n onClick={async () => {\n await run.decline?.(step.id, note.trim() || undefined)\n setDeclining(false)\n }}\n data-testid={`${testId}-decline-confirm`}\n >\n {l.declineConfirm}\n </Button>\n </div>\n </div>\n )}\n {phase === 'failed' && state?.declinedBy && (\n <p className=\"text-sm text-destructive\" data-testid={`${testId}-declined`}>\n {l.declined.replace('{name}', name(state.declinedBy))}\n </p>\n )}\n {signedRef && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {actions?.openDocument ? (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => actions.openDocument?.(signedRef)}\n data-testid={`${testId}-signed-version`}\n >\n <ExternalLink className=\"size-4\" /> {l.signedVersion}\n </Button>\n ) : (\n <DocChip docRef={signedRef} nameOfDoc={nameOfDoc} />\n )}\n </div>\n )}\n </>\n )\n } else if (a.type === 'email_draft') {\n const draftId =\n state?.waiting?.draft_id ??\n (typeof state?.output?.draft_id === 'string' ? state.output.draft_id : undefined)\n body = (\n <>\n {underWay && working(l.preparingDraft)}\n {phase === 'waiting' && <p className=\"text-sm text-muted-foreground\">{l.draftReady}</p>}\n {phase === 'done' && (\n <p className=\"flex items-center gap-1.5 text-sm\" data-testid={`${testId}-sent`}>\n <Check className=\"size-4 text-primary\" /> {l.emailSent}\n </p>\n )}\n {draftId && actions?.openDraft && phase !== 'done' && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => actions.openDraft?.(draftId, state?.waiting?.mailbox)}\n data-testid={`${testId}-open-draft`}\n >\n <Mail className=\"size-4\" /> {l.openDraft}\n </Button>\n )}\n </>\n )\n } else {\n const tags = (state?.output?.tag_ext_ids as string[] | undefined) ?? a.tags\n const docs = (state?.output?.doc_ext_ids as string[] | undefined) ?? []\n body = (\n <>\n {underWay && working(l.reviewRunning)}\n {phase === 'done' && (\n <>\n <p className=\"text-sm text-muted-foreground\" data-testid={`${testId}-reviewed`}>\n {l.reviewDone\n .replace('{docs}', String(docs.length))\n .replace('{cols}', String(tags.length))}\n </p>\n {actions?.openReview && (\n <Button\n size=\"sm\"\n onClick={() => actions.openReview?.(tags, docs)}\n data-testid={`${testId}-open-review`}\n >\n <Table2 className=\"size-4\" /> {l.openReview}\n </Button>\n )}\n </>\n )}\n </>\n )\n }\n\n return (\n <div className=\"space-y-3\">\n {heading}\n <SentBackNote state={state} l={l} testId={testId} />\n <AssigneeLine run={run} stepId={step.id} l={l} testId={testId} />\n {body}\n {phase === 'failed' && !state?.declinedBy && (\n <p className=\"text-sm text-destructive\" data-testid={`${testId}-failed`}>\n {state?.error || ''}\n </p>\n )}\n </div>\n )\n}\n","/**\n * The run's stepper: where you are, what is done, what is next and what is still running. It\n * names the previous, current and next steps of the graph (`StepBarFrame` over `stepLevels`); the\n * rest is a click away (‹ ›, \"…\"), a parallel level is one step plus a \"+N\" chip, and a running\n * step out of view shows as \"Working: <title>\". The run's completion is the last step.\n */\n\nimport type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport type { WorkflowStepPhase } from './run'\nimport type { WorkflowRunView } from './useWorkflowView'\nimport type { WorkflowStep } from './types'\nimport {\n DEFAULT_STEP_BAR_LABELS,\n STEP_EXTRA,\n STEP_LABEL,\n STEP_LABEL_MAX,\n STEP_LABEL_CURRENT,\n StepBarFrame,\n type StepBarLabels,\n} from './StepBarFrame'\nimport { StepChip } from './StepChip'\nimport { DEFAULT_STEP_KIND_LABELS, STEP_KIND_ICONS, stepKindOf } from './stepKinds'\n\n/** The completion marker's id in the bar (not a step of the plan). */\nconst DONE = '__done'\n\nexport interface WorkflowStepBarProps {\n run: WorkflowRunView\n levels: WorkflowStep[][]\n doneTitle: string\n doneIcon?: ReactNode\n icon: (key?: string) => ReactNode\n tid: (suffix: string) => string\n labels?: Partial<StepBarLabels>\n}\n\nexport function WorkflowStepBar({\n run,\n levels,\n doneTitle,\n doneIcon,\n icon,\n tid,\n labels,\n}: WorkflowStepBarProps) {\n const l = { ...DEFAULT_STEP_BAR_LABELS, ...labels }\n const done = { id: DONE, title: doneTitle } as WorkflowStep\n const phaseOf = (id: string): WorkflowStepPhase =>\n id === DONE ? (run.isComplete ? 'done' : 'blocked') : run.phaseOf(id)\n const current = run.isComplete ? DONE : run.current\n\n const pill = (s: WorkflowStep) => {\n const phase = phaseOf(s.id)\n const isCurrent = s.id === current\n // Who it waits for, on a step that is theirs to do now.\n const assignee = ['ready', 'waiting'].includes(phase) ? run.assigneeOf(s.id) : undefined\n const waiting = assignee ? l.waitingFor.replace('{name}', assignee) : undefined\n // A failure says why on the pill's tooltip (and so does a step skipped after failing).\n const state = s.id === DONE ? undefined : run.stateOf(s.id)\n const failure =\n (phase === 'failed' || state?.skippedAfterFailure) && state?.error\n ? `${l.phases.failed}: ${state.error}`\n : undefined\n const title = [s.title, waiting, failure].filter(Boolean).join(' · ')\n const name = `${title} (${l.phases[phase]})`\n if (s.id === DONE)\n return (\n <StepChip\n inert\n kind=\"start\"\n phase={run.isComplete ? 'done' : 'ready'}\n icon={doneIcon}\n label={doneTitle}\n labelClassName={cn(STEP_LABEL, STEP_LABEL_MAX)}\n current={isCurrent}\n aria-label={name}\n title={doneTitle}\n data-testid={tid('step-done')}\n />\n )\n const kind = stepKindOf(s)\n const KindIcon = STEP_KIND_ICONS[kind]\n return (\n <StepChip\n kind={kind}\n phase={phase}\n icon={icon(s.icon) ?? <KindIcon />}\n label={s.title}\n current={isCurrent}\n heading={DEFAULT_STEP_KIND_LABELS[kind]}\n labelClassName={isCurrent ? STEP_LABEL_CURRENT : cn(STEP_LABEL, STEP_LABEL_MAX)}\n labelTestId={tid(`step-${s.id}-label`)}\n onClick={() => run.goTo(s.id)}\n disabled={run.busy}\n className=\"disabled:cursor-default\"\n aria-label={name}\n title={title}\n data-testid={tid(`step-${s.id}`)}\n >\n {assignee && isCurrent && (\n <span\n className={cn(STEP_EXTRA, 'max-w-[12rem]')}\n data-testid={tid(`step-${s.id}-assignee`)}\n >\n · {waiting}\n </span>\n )}\n </StepChip>\n )\n }\n\n return (\n <StepBarFrame\n levels={[...levels, [done]]}\n phaseOf={phaseOf}\n current={current}\n onSelect={(id) => id !== DONE && run.goTo(id)}\n isSelectable={(id) => id !== DONE}\n renderStep={(s) => pill(s)}\n icon={(s) => (s.id === DONE ? doneIcon : icon(s.icon))}\n kindOf={(s) => (s.id === DONE ? 'start' : stepKindOf(s))}\n disabled={run.busy}\n labels={labels}\n tid={tid}\n className=\"w-full\"\n />\n )\n}\n","/**\n * A stepped workflow run, end to end: the stepper, the step in view (a form, an upload, an agent\n * step or a review) and moving on. The stepper lays the graph out by depth: a sequence is one row,\n * steps side by side stack in a column. The run comes from `useWorkflowThread` (a thread on the\n * server) or `useWorkflowPreview`; wording and the agent output's rendering come from the host.\n */\n\nimport { useEffect, useRef, useState, type ReactNode } from 'react'\nimport {\n AlertTriangle,\n ArrowLeft,\n ArrowRight,\n Check,\n CheckCircle2,\n FileText,\n GitBranch,\n Hourglass,\n Loader2,\n RotateCw,\n X,\n} from 'lucide-react'\nimport { Button, Card, cn } from '@arbidocs/react/ui'\nimport { UploadDropzone } from '../../files/UploadDropzone'\nimport { SchemaForm, type SchemaFormProps } from './SchemaForm'\nimport {\n isPersonStep,\n reviewInstructions,\n splitDocRef,\n stepDependencies,\n stepLevels,\n waitingDocuments,\n} from './run'\nimport { WorkflowStepBar } from './WorkflowStepBar'\nimport {\n ActionStepBody,\n ApprovalEvidence,\n AssigneeLine,\n DEFAULT_WORKFLOW_STEP_PARTS_LABELS,\n RedlineOpen,\n SendBackControl,\n SentBackNote,\n type WorkflowRunnerActions,\n type WorkflowStepPartsLabels,\n} from './StepParts'\nimport type { WorkflowRunView } from './useWorkflowView'\nimport type {\n WorkflowAgentStep,\n WorkflowDefinition,\n WorkflowReviewStep,\n WorkflowStep,\n WorkflowStepState,\n WorkflowUploadStep,\n} from './types'\n\nexport interface WorkflowRunnerLabels {\n back: string\n next: string\n /** Skips the step in view (any unfinished step: the plan guides the thread, it does not hold it). */\n skipStep: string\n finish: string\n approve: string\n working: string\n /** An agent step under way: `{step}` is its title, `{elapsed}` how long it has run (m:ss). */\n stepWorking: string\n /** An agent step about to start (the run will pick it up). */\n starting: string\n /** The primary button on a ready agent or action step nothing has started (no run under way). */\n start: string\n /** A ready agent or action step not started yet, waiting for Start. */\n notStarted: string\n retry: string\n failed: string\n /** A step waiting on one that failed; `{step}` is its title, `{error}` why it failed. */\n upstreamFailed: string\n /** A step going on without one that failed and was skipped; `{step}` and `{error}` as above. */\n upstreamSkippedAfterFailure: string\n /** A skipped step that had failed; `{error}` is why. */\n skippedAfterFailure: string\n /** A step whose dependencies have not finished; `{steps}` is replaced with their titles. */\n blocked: string\n awaitingReview: string\n approved: string\n skipped: string\n /** An agent step that runs off the main line and delivers its result to it. */\n branch: string\n /** The default finish heading (the workflow's `completion.title` wins). */\n complete: string\n restart: string\n /** The upload step's list of what else the workspace holds (folded); `{count}` is replaced. */\n filesHeading: string\n /** The upload step's list of the files added on it in this run; `{count}` is replaced. */\n addedHeading: string\n noFiles: string\n /** A file's processing status on the upload step. */\n fileReading: string\n fileReady: string\n fileFailed: string\n /** Continue on an upload step while its files are read; `{current}` and `{count}` are replaced. */\n readingFiles: string\n /** Continue on an upload step while its files are sent; `{count}` is replaced (more than one). */\n uploadingFiles: string\n uploadingFile: string\n /** Continue while the host is uploading files it does not list one by one. */\n uploadingAny: string\n /** Continue on an upload step with files that did not upload; `{count}` is replaced (more than one). */\n uploadsFailed: string\n uploadFailed: string\n /** A file's row while it is sent, and when it did not upload (its error follows). */\n fileUploading: string\n fileUploadFailed: string\n retryUpload: string\n removeUpload: string\n /**\n * An agent step waiting for documents to finish processing before its turn starts; `{count}` is\n * replaced (more than one).\n */\n waitingForDocuments: string\n waitingForDocument: string\n /** The primary button on an email step waiting to be sent. */\n markSent: string\n}\n\nexport const DEFAULT_WORKFLOW_RUNNER_LABELS: WorkflowRunnerLabels = {\n back: 'Back',\n next: 'Continue',\n skipStep: 'Skip this step',\n finish: 'Finish',\n approve: 'Approve',\n working: 'Working…',\n stepWorking: '{step}… {elapsed}',\n starting: 'Starting…',\n start: 'Start',\n notStarted: 'Not started yet. Press Start to run this step.',\n retry: 'Retry',\n failed: 'This step did not finish.',\n upstreamFailed: '“{step}” failed{error}. Retry it before this step can go on.',\n upstreamSkippedAfterFailure:\n '“{step}” failed{error} and was skipped: this step goes on without its result.',\n skippedAfterFailure: 'Skipped after it failed{error}.',\n blocked: 'Starts after {steps}.',\n awaitingReview: 'Waiting for approval.',\n approved: 'Approved.',\n skipped: 'Skipped.',\n branch: 'Runs alongside; its result joins the thread',\n complete: 'Done',\n restart: 'Start again',\n filesHeading: 'Already in the workspace ({count})',\n addedHeading: 'Added for this step ({count})',\n noFiles: 'No files yet.',\n fileReading: 'Reading…',\n fileReady: 'Ready',\n fileFailed: 'Could not be read',\n readingFiles: 'Reading {current} of {count} files…',\n uploadingFiles: 'Uploading {count} files…',\n uploadingFile: 'Uploading 1 file…',\n uploadingAny: 'Uploading…',\n uploadsFailed: 'Retry or remove the {count} files that did not upload',\n uploadFailed: 'Retry or remove the file that did not upload',\n fileUploading: 'Uploading…',\n fileUploadFailed: 'Did not upload',\n retryUpload: 'Retry',\n removeUpload: 'Remove',\n waitingForDocuments: 'Waiting for {count} documents to finish processing',\n waitingForDocument: 'Waiting for 1 document to finish processing',\n markSent: 'Mark as sent',\n}\n\n/** A file the upload step lists (what is in the run's workspace). */\nexport interface WorkflowRunnerFile {\n id: string\n name: string\n /**\n * Where it is: still being sent (`uploading`; no document yet), not sent (`upload-failed`, with\n * `error`), being read (`processing`), `ready`, or not readable (`failed`). Absent = not known.\n */\n status?: 'uploading' | 'upload-failed' | 'processing' | 'ready' | 'failed'\n /** Why it did not upload (`upload-failed`). */\n error?: string\n /** The upload step it was added on in this run (listed first there, and holds it while read). */\n addedFor?: string\n}\n\nexport interface WorkflowRunnerProps extends Pick<\n SchemaFormProps,\n 'renderScope' | 'renderDocuments' | 'renderIcon' | 'people'\n> {\n workflow: WorkflowDefinition\n run: WorkflowRunView\n /** An agent step's output (its answer, a drafted document). */\n renderAgentOutput: (step: WorkflowAgentStep, state: WorkflowStepState | undefined) => ReactNode\n /** A review's extras while it waits (e.g. who to ask). */\n renderReview?: (step: WorkflowReviewStep) => ReactNode\n /** Upload step: the host performs the upload into the run's workspace. */\n onUpload?: (files: File[], step: WorkflowUploadStep) => void | Promise<void>\n /**\n * The host is uploading files (the step cannot be completed until they are back). A host that\n * lists them one by one (`files` with `uploading` / `upload-failed`) need not set it.\n */\n uploading?: boolean\n /** What the run's workspace holds, listed on the upload step. */\n files?: WorkflowRunnerFile[]\n /** A file that did not upload: send it again. Absent: no retry. */\n onRetryUpload?: (file: WorkflowRunnerFile) => void\n /** A file that did not upload: drop it, so the step can go on without it. */\n onRemoveUpload?: (file: WorkflowRunnerFile) => void\n /** Replaces an upload step's body. */\n renderUpload?: (step: WorkflowUploadStep) => ReactNode\n /** Extra content under a step's body (e.g. what a commit created). */\n renderStepNote?: (step: WorkflowStep, run: WorkflowRunView) => ReactNode\n /** Replaces the finish screen. */\n renderComplete?: (run: WorkflowRunView) => ReactNode\n /** Leave out the stepper (the host shows it elsewhere, e.g. above the run's thread). */\n hideStepBar?: boolean\n /** A narrow panel beside a thread: tighter cards, the full width they are given. */\n compact?: boolean\n /** Where the runner hands off to the host: documents, the sign flow, mail, a review grid. */\n actions?: WorkflowRunnerActions\n /** A document's name by id (chips show it instead of the id). */\n nameOfDoc?: (id: string) => string | undefined\n labels?: Partial<WorkflowRunnerLabels>\n /** The wording of action steps, assignees, send-backs and approvals. */\n partsLabels?: Partial<WorkflowStepPartsLabels>\n /**\n * Test ids: `<prefix>-step-<id>` (pill), `<prefix>-<id>` (body), `<prefix>-field-<name>`,\n * `<prefix>-next` / `-back`, `<prefix>-done`.\n */\n testIdPrefix?: string\n className?: string\n}\n\nexport function WorkflowRunner({\n workflow,\n run,\n renderAgentOutput,\n renderReview,\n onUpload,\n uploading = false,\n files,\n onRetryUpload,\n onRemoveUpload,\n renderUpload,\n renderStepNote,\n renderComplete,\n renderScope,\n renderDocuments,\n renderIcon,\n people,\n actions,\n nameOfDoc,\n hideStepBar,\n compact,\n labels,\n partsLabels,\n testIdPrefix = 'workflow-run',\n className,\n}: WorkflowRunnerProps) {\n const l = { ...DEFAULT_WORKFLOW_RUNNER_LABELS, ...labels }\n const pl = { ...DEFAULT_WORKFLOW_STEP_PARTS_LABELS, ...partsLabels }\n // A step's card: a readable column on its own, the panel's width beside a thread.\n const box = compact ? 'p-4' : 'max-w-2xl p-6'\n const { steps, step, isComplete, action } = run\n const completion = workflow.run.kind === 'steps' ? workflow.run.completion : undefined\n const tid = (suffix: string) => `${testIdPrefix}-${suffix}`\n const levels = stepLevels(steps)\n const icon = (key?: string) => (key && renderIcon ? renderIcon(key) : undefined)\n\n // An upload step's files are read before the run goes on (it can still be skipped).\n const added = step?.kind === 'upload' ? (files ?? []).filter((f) => f.addedFor === step.id) : []\n const unread = added.filter((f) => f.status === 'processing').length\n const reading = action === 'complete' && unread > 0\n // Nor does it go on while its files are being sent: completing records the files it took, and a\n // file still on its way has no document yet. One that did not upload is retried or removed first.\n const sending = added.filter((f) => f.status === 'uploading').length\n const unsent = added.filter((f) => f.status === 'upload-failed').length\n const uploadHold = step?.kind === 'upload' && (sending > 0 || uploading || unsent > 0)\n\n // An agent step whose turn waits for documents to finish processing is on its way, too.\n const docsWait = !!step && waitingDocuments(run.stateOf(step.id)).length > 0\n\n const nextLabel = sending\n ? sending === 1\n ? l.uploadingFile\n : l.uploadingFiles.replace('{count}', String(sending))\n : uploadHold && uploading\n ? l.uploadingAny\n : uploadHold\n ? unsent === 1\n ? l.uploadFailed\n : l.uploadsFailed.replace('{count}', String(unsent))\n : reading\n ? l.readingFiles\n .replace('{current}', String(Math.min(added.length - unread + 1, added.length)))\n .replace('{count}', String(added.length))\n : action === 'start'\n ? l.start\n : action === 'retry'\n ? l.retry\n : action === 'finish'\n ? l.finish\n : action === 'complete' && step?.kind === 'review'\n ? l.approve\n : action === 'complete' && step?.kind === 'action'\n ? l.markSent\n : action === 'wait' && (run.isRunning || run.busy || docsWait)\n ? l.working\n : ((step && !run.isLocked(step.id) ? step.nextLabel : undefined) ?? l.next)\n\n return (\n <div className={cn(compact ? 'space-y-3' : 'space-y-6', className)} data-testid={testIdPrefix}>\n {!hideStepBar && (\n <WorkflowStepBar\n run={run}\n levels={levels}\n doneTitle={completion?.title ?? l.complete}\n doneIcon={icon(completion?.icon)}\n icon={icon}\n tid={tid}\n />\n )}\n\n {isComplete ? (\n (renderComplete?.(run) ?? (\n <Card className=\"mx-auto max-w-lg p-8 text-center\" data-testid={tid('done')}>\n <CheckCircle2 className=\"mx-auto size-12 text-primary\" />\n <h2 className=\"mt-4 text-xl font-semibold\">{completion?.title ?? l.complete}</h2>\n {completion?.description && (\n <p className=\"mt-1 text-sm text-muted-foreground\">{completion.description}</p>\n )}\n <Button\n variant=\"outline\"\n className=\"mt-6\"\n onClick={run.restart}\n data-testid={tid('restart')}\n >\n {l.restart}\n </Button>\n </Card>\n ))\n ) : step ? (\n <div key={step.id} className=\"space-y-3\">\n <StepNotices run={run} step={step} l={l} tid={tid} />\n {run.phaseOf(step.id) === 'blocked' ? (\n <Card className={cn(box, 'p-6')} data-testid={tid(step.id)}>\n <p className=\"text-sm text-muted-foreground\" data-testid={tid(`${step.id}-blocked`)}>\n {l.blocked.replace(\n '{steps}',\n stepDependencies(steps, step.id)\n .map((d) => steps.find((s) => s.id === d)?.title ?? d)\n .join(', ')\n )}\n </p>\n </Card>\n ) : step.kind === 'form' ? (\n <Card className={cn(box, 'space-y-4')} data-testid={tid(step.id)}>\n <StepHeading step={step} icon={icon(step.icon)} testId={tid(`${step.id}-title`)} />\n <SentBackNote state={run.stateOf(step.id)} l={pl} testId={tid(step.id)} />\n <AssigneeLine run={run} stepId={step.id} l={pl} testId={tid(step.id)} />\n <fieldset disabled={run.isLocked(step.id)} className=\"contents\">\n <SchemaForm\n fields={step.inputs}\n values={run.inputs}\n onChange={run.setInput}\n errors={run.errors}\n renderScope={renderScope}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n people={people}\n onEnterSubmit={() => void run.next()}\n testIdPrefix={tid('field')}\n />\n </fieldset>\n {run.actionError && (\n <p className=\"text-sm text-destructive\" data-testid={tid('action-error')}>\n {run.actionError}\n </p>\n )}\n {renderStepNote?.(step, run)}\n </Card>\n ) : step.kind === 'upload' ? (\n <Card className={cn(box, 'space-y-4')} data-testid={tid(step.id)}>\n <SentBackNote state={run.stateOf(step.id)} l={pl} testId={tid(step.id)} />\n <AssigneeLine run={run} stepId={step.id} l={pl} testId={tid(step.id)} />\n {renderUpload?.(step) ?? (\n <>\n <UploadDropzone\n onFiles={(picked) => void onUpload?.(picked, step)}\n uploading={uploading}\n disabled={!onUpload}\n accept={step.accept}\n title={step.title}\n description={step.description}\n hint={step.hint}\n testId={tid(`${step.id}-drop`)}\n />\n {files && (\n <UploadFiles\n onRetry={onRetryUpload}\n onRemove={onRemoveUpload}\n added={added}\n others={files.filter((f) => f.addedFor !== step.id)}\n l={l}\n testId={tid(`${step.id}-files`)}\n />\n )}\n </>\n )}\n {run.actionError && <p className=\"text-sm text-destructive\">{run.actionError}</p>}\n {renderStepNote?.(step, run)}\n </Card>\n ) : step.kind === 'review' ? (\n <Card className={cn(box, 'space-y-4')} data-testid={tid(step.id)}>\n <StepHeading step={step} icon={icon(step.icon)} />\n <SentBackNote state={run.stateOf(step.id)} l={pl} testId={tid(step.id)} />\n <p className=\"whitespace-pre-line text-sm text-muted-foreground\">\n {reviewInstructions(step, run.inputs)}\n </p>\n <AssigneeLine run={run} stepId={step.id} l={pl} testId={tid(step.id)} />\n {/* A recorded approval says who approved below; without one, the status says it. */}\n {!(run.phaseOf(step.id) === 'done' && run.stateOf(step.id)?.by) && (\n <p className=\"text-sm\" data-testid={tid(`${step.id}-status`)}>\n {run.phaseOf(step.id) === 'done'\n ? l.approved\n : run.phaseOf(step.id) === 'skipped'\n ? l.skipped\n : l.awaitingReview}\n </p>\n )}\n {(step.fields ?? []).length > 0 && run.phaseOf(step.id) === 'ready' && (\n <SchemaForm\n fields={step.fields ?? []}\n values={run.inputs}\n onChange={run.setInput}\n errors={run.errors}\n renderScope={renderScope}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n people={people}\n testIdPrefix={tid('field')}\n />\n )}\n <ApprovalEvidence\n run={run}\n step={step}\n actions={actions}\n nameOfDoc={nameOfDoc}\n l={pl}\n testId={tid(step.id)}\n />\n {run.phaseOf(step.id) === 'ready' && renderReview?.(step)}\n <SendBackControl run={run} step={step} l={pl} testId={tid(step.id)} />\n {run.actionError && <p className=\"text-sm text-destructive\">{run.actionError}</p>}\n {renderStepNote?.(step, run)}\n </Card>\n ) : step.kind === 'action' ? (\n <Card className={cn(box, 'space-y-4')} data-testid={tid(step.id)}>\n <ActionStepBody\n step={step}\n run={run}\n actions={actions}\n nameOfDoc={nameOfDoc}\n heading={<StepHeading step={step} icon={icon(step.icon)} />}\n l={pl}\n testId={tid(step.id)}\n />\n {run.actionError && <p className=\"text-sm text-destructive\">{run.actionError}</p>}\n {renderStepNote?.(step, run)}\n </Card>\n ) : (\n <AgentStepBody\n step={step}\n run={run}\n renderAgentOutput={renderAgentOutput}\n icon={icon(step.icon)}\n renderStepNote={renderStepNote}\n compact={compact}\n nameOfDoc={nameOfDoc}\n extra={\n <>\n <SentBackNote state={run.stateOf(step.id)} l={pl} testId={tid(step.id)} />\n <RedlineOpen\n step={step}\n state={run.stateOf(step.id)}\n actions={actions}\n l={pl}\n testId={tid(step.id)}\n />\n </>\n }\n l={l}\n tid={tid}\n />\n )}\n </div>\n ) : null}\n\n {!isComplete && (\n <div\n className={cn(\n 'flex items-center justify-between border-t border-border pt-4',\n compact && 'flex-wrap gap-2 pt-3'\n )}\n >\n <Button\n variant=\"ghost\"\n onClick={run.back}\n disabled={!run.canBack}\n data-testid={tid('back')}\n >\n <ArrowLeft className=\"size-4\" /> {l.back}\n </Button>\n <div\n className={cn('flex items-center gap-2', compact && 'ml-auto flex-wrap justify-end')}\n >\n {step &&\n // A step that commits (creates the matter, starts the thread) is what the run stands on.\n !step.commit &&\n ['ready', 'blocked', 'failed'].includes(run.phaseOf(step.id)) && (\n <Button\n variant=\"ghost\"\n onClick={() => void run.skip(step.id)}\n disabled={run.busy}\n data-testid={tid('skip-step')}\n >\n {l.skipStep}\n </Button>\n )}\n <Button\n onClick={() => void run.next()}\n disabled={action === 'wait' || reading || uploadHold}\n data-testid={tid('next')}\n >\n {nextLabel}\n {reading ||\n (uploadHold && unsent === 0) ||\n (action === 'wait' && (run.isRunning || run.busy || docsWait)) ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <ArrowRight className=\"size-4\" />\n )}\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n}\n\n/** What the upload step lists: this step's files first, with their status; the rest folded. */\nfunction UploadFiles({\n added,\n others,\n onRetry,\n onRemove,\n l,\n testId,\n}: {\n added: WorkflowRunnerFile[]\n others: WorkflowRunnerFile[]\n onRetry?: (file: WorkflowRunnerFile) => void\n onRemove?: (file: WorkflowRunnerFile) => void\n l: WorkflowRunnerLabels\n testId: string\n}) {\n const heading = 'text-xs font-semibold uppercase tracking-wide text-muted-foreground'\n const row = (f: WorkflowRunnerFile) => (\n <div\n key={f.id}\n className=\"flex items-center gap-2 text-sm text-muted-foreground\"\n data-status={f.status}\n data-testid={`${testId}-file-${f.id}`}\n >\n <FileText className=\"size-3.5 shrink-0 text-primary\" />\n <span className=\"min-w-0 flex-1 truncate\" title={f.name}>\n {f.name}\n </span>\n {f.status === 'uploading' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs\">\n <Loader2 className=\"size-3 animate-spin\" /> {l.fileUploading}\n </span>\n )}\n {f.status === 'upload-failed' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs text-destructive\" role=\"alert\">\n <AlertTriangle className=\"size-3\" /> {l.fileUploadFailed}\n {f.error ? `: ${f.error}` : ''}\n {onRetry && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-2\"\n onClick={() => onRetry(f)}\n data-testid={`${testId}-file-${f.id}-retry`}\n >\n <RotateCw className=\"size-3\" /> {l.retryUpload}\n </Button>\n )}\n {onRemove && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-2\"\n onClick={() => onRemove(f)}\n data-testid={`${testId}-file-${f.id}-remove`}\n >\n <X className=\"size-3\" /> {l.removeUpload}\n </Button>\n )}\n </span>\n )}\n {f.status === 'processing' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs\">\n <Loader2 className=\"size-3 animate-spin\" /> {l.fileReading}\n </span>\n )}\n {f.status === 'ready' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs text-primary\">\n <Check className=\"size-3\" /> {l.fileReady}\n </span>\n )}\n {f.status === 'failed' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs text-destructive\">\n <AlertTriangle className=\"size-3\" /> {l.fileFailed}\n </span>\n )}\n </div>\n )\n return (\n <div className=\"space-y-3\" data-testid={testId}>\n {added.length > 0 && (\n <div className=\"space-y-1\" data-testid={`${testId}-added`}>\n <p className={heading}>{l.addedHeading.replace('{count}', String(added.length))}</p>\n {added.map(row)}\n </div>\n )}\n {added.length === 0 && others.length === 0 && (\n <p className=\"text-sm text-muted-foreground\">{l.noFiles}</p>\n )}\n {others.length > 0 && (\n <details className=\"space-y-1\" data-testid={`${testId}-others`}>\n <summary className={cn(heading, 'cursor-pointer select-none')}>\n {l.filesHeading.replace('{count}', String(others.length))}\n </summary>\n <div className=\"mt-1 max-h-48 space-y-1 overflow-y-auto\">{others.map(row)}</div>\n </details>\n )}\n </div>\n )\n}\n\nfunction StepHeading({\n step,\n icon,\n testId,\n}: {\n step: WorkflowStep\n icon?: ReactNode\n testId?: string\n}) {\n return (\n <div className=\"min-w-0\">\n <p className=\"flex items-center gap-2 text-sm font-medium\" data-testid={testId}>\n {icon && (\n <span className=\"flex size-4 items-center justify-center text-primary [&_svg]:size-4\">\n {icon}\n </span>\n )}\n {step.title}\n </p>\n {step.description && <p className=\"mt-1 text-xs text-muted-foreground\">{step.description}</p>}\n </div>\n )\n}\n\n/** m:ss (h:mm:ss past an hour). */\nexport function formatElapsed(ms: number): string {\n const total = Math.max(0, Math.floor(ms / 1000))\n const h = Math.floor(total / 3600)\n const m = Math.floor((total % 3600) / 60)\n const sec = String(total % 60).padStart(2, '0')\n return h ? `${h}:${String(m).padStart(2, '0')}:${sec}` : `${m}:${sec}`\n}\n\n/** \"<title>… 0:42\": the running step and how long it has run, ticking. */\nfunction StepWorking({ title, since, label }: { title: string; since?: string; label: string }) {\n // Without the server's start time, from when this screen first saw it running.\n const seen = useRef(Date.now())\n const start = (since && Date.parse(since)) || seen.current\n const [now, setNow] = useState(() => Date.now())\n useEffect(() => {\n const t = setInterval(() => setNow(Date.now()), 1000)\n return () => clearInterval(t)\n }, [])\n return (\n <span>{label.replace('{step}', title).replace('{elapsed}', formatElapsed(now - start))}</span>\n )\n}\n\nfunction AgentStepBody({\n step,\n run,\n renderAgentOutput,\n icon,\n renderStepNote,\n extra,\n compact,\n nameOfDoc,\n l,\n tid,\n}: {\n step: WorkflowAgentStep\n run: WorkflowRunView\n renderAgentOutput: WorkflowRunnerProps['renderAgentOutput']\n icon?: ReactNode\n renderStepNote?: WorkflowRunnerProps['renderStepNote']\n /** Under the status: a send-back note, \"Open in Editor\". */\n extra?: ReactNode\n compact?: boolean\n nameOfDoc?: (id: string) => string | undefined\n l: WorkflowRunnerLabels\n tid: (suffix: string) => string\n}) {\n const state = run.stateOf(step.id)\n const phase = run.phaseOf(step.id)\n // Waiting for documents to finish processing (named when the runner knows them).\n const pending = waitingDocuments(state)\n const pendingNames = pending.flatMap((ref) => nameOfDoc?.(splitDocRef(ref).id) ?? [])\n const header = (\n <div className=\"flex items-start justify-between gap-3\">\n <StepHeading step={step} icon={icon} />\n {phase === 'failed' && (\n <div className=\"flex shrink-0 items-center gap-2\">\n {run.retry && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => void run.retry?.(step.id)}\n disabled={run.busy}\n data-testid={tid(`${step.id}-retry`)}\n >\n <RotateCw className=\"size-4\" /> {l.retry}\n </Button>\n )}\n </div>\n )}\n </div>\n )\n const status = (\n <div className=\"space-y-1\">\n {step.branch && (\n <p className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <GitBranch className=\"size-3.5\" /> {l.branch}\n </p>\n )}\n {(phase === 'running' || (phase === 'ready' && !run.needsStart)) && !state?.text && (\n <p\n className=\"flex items-center gap-2 text-sm text-muted-foreground\"\n data-testid={tid(`${step.id}-working`)}\n >\n <Loader2 className=\"size-4 animate-spin\" />{' '}\n {phase === 'ready' ? (\n l.starting\n ) : (\n <StepWorking title={step.title} since={state?.startedAt} label={l.stepWorking} />\n )}\n </p>\n )}\n {pending.length > 0 && (\n <div\n className=\"space-y-0.5 text-sm text-muted-foreground\"\n data-testid={tid(`${step.id}-waiting-documents`)}\n >\n <p className=\"flex items-center gap-2\">\n <Hourglass className=\"size-4\" />\n {pending.length === 1\n ? l.waitingForDocument\n : l.waitingForDocuments.replace('{count}', String(pending.length))}\n </p>\n {pendingNames.length > 0 && <p className=\"pl-6 text-xs\">{pendingNames.join(', ')}</p>}\n </div>\n )}\n {phase === 'failed' && (\n <p className=\"text-sm text-destructive\" data-testid={tid(`${step.id}-failed`)}>\n {state?.error || l.failed}\n </p>\n )}\n {phase === 'skipped' && (\n <p className=\"text-sm text-muted-foreground\" data-testid={tid(`${step.id}-skipped`)}>\n {state?.skippedAfterFailure\n ? l.skippedAfterFailure.replace('{error}', state.error ? `: ${state.error}` : '')\n : l.skipped}\n </p>\n )}\n {extra}\n </div>\n )\n\n if (step.output === 'artifact' && !compact) {\n return (\n <div\n className=\"grid gap-4 lg:grid-cols-[minmax(0,18rem)_minmax(0,1fr)]\"\n data-testid={tid(step.id)}\n >\n <Card className=\"h-fit space-y-3 p-5\">\n {header}\n {status}\n {renderStepNote?.(step, run)}\n </Card>\n <div className=\"min-w-0\">{renderAgentOutput(step, state)}</div>\n </div>\n )\n }\n return (\n <Card className={cn('space-y-3', compact ? 'p-4' : 'p-6')} data-testid={tid(step.id)}>\n {header}\n {status}\n {renderAgentOutput(step, state)}\n {renderStepNote?.(step, run)}\n </Card>\n )\n}\n\n/**\n * What the step in view must say before anything else: that it has not started and why (a ready\n * agent or action step no run is under way for), and every step it waits for that failed — still\n * failed (it is blocked until that is retried) or skipped after failing (it goes on without it).\n */\nfunction StepNotices({\n run,\n step,\n l,\n tid,\n}: {\n run: WorkflowRunView\n step: WorkflowStep\n l: WorkflowRunnerLabels\n tid: (suffix: string) => string\n}) {\n const notStarted = !isPersonStep(step) && run.needsStart && run.phaseOf(step.id) === 'ready'\n const failed = run.failedUpstreamOf(step.id)\n if (!notStarted && failed.length === 0) return null\n const why = (error?: string | null) => (error ? `: ${error}` : '')\n return (\n <div className=\"space-y-2\" data-testid={tid(`${step.id}-notices`)}>\n {notStarted && (\n <p\n className={cn(\n 'flex items-start gap-2 text-sm',\n run.runError ? 'text-destructive' : 'text-muted-foreground'\n )}\n data-testid={tid(`${step.id}-not-started`)}\n >\n {run.runError && <AlertTriangle className=\"mt-0.5 size-4 shrink-0\" />}\n {run.runError || l.notStarted}\n </p>\n )}\n {failed.map(({ step: s, state }) => (\n <p\n key={s.id}\n className={cn(\n 'flex items-start gap-2 rounded-md border px-3 py-2 text-sm',\n state.status === 'failed'\n ? 'border-destructive/40 text-destructive'\n : 'border-amber-500/40 text-amber-700 dark:text-amber-300'\n )}\n data-testid={tid(`${step.id}-upstream-${s.id}`)}\n >\n <AlertTriangle className=\"mt-0.5 size-4 shrink-0\" />\n {(state.status === 'failed' ? l.upstreamFailed : l.upstreamSkippedAfterFailure)\n .replace('{step}', s.title)\n .replace('{error}', why(state.error))}\n </p>\n ))}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { eventWaitingDocuments, waitingForDocumentsText } from '../workflows/run'\nimport {\n AlertTriangle,\n ArrowUpRight,\n CheckCircle2,\n Flag,\n KeyRound,\n Lock,\n MessageSquareReply,\n Phone,\n Disc,\n Play,\n RotateCcw,\n Sparkles,\n Square,\n UserRoundCog,\n BellRing,\n CornerUpLeft,\n Hourglass,\n PenLine,\n} from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport type TaskActivityKind =\n | 'created'\n | 'run_started'\n | 'awaiting_access'\n | 'access_granted'\n | 'done'\n | 'reopened'\n | 'failed'\n | 'participant_joined'\n | 'assistant_responded'\n | 'assistant_stopped'\n | 'artifact_created'\n | 'artifact_edited'\n | 'document_added'\n | 'document_removed'\n | 'notified'\n /** A thread call (its log card): `call_ext_id`, `started_by`, `invited`, … `ended_at`, `joined`. */\n | 'call'\n /** A stopped call recording (its Recording card): `call_ext_id`, `recording_ext_id`, … */\n | 'recording'\n // A workflow step's progress (detail.step names it).\n | 'step_started'\n | 'step_done'\n | 'step_skipped'\n | 'step_failed'\n // An action step waits on its people (detail.waiting), moves on (a signer signed), a person\n // sent the work back (detail.to), a step's person was told or reminded.\n | 'step_waiting'\n | 'step_progress'\n | 'step_sent_back'\n | 'step_ready'\n | 'step_reminded'\n // A step raised a signal (detail.step, detail.signal), and the linked thread it started\n // (detail.conversation_ext_id, detail.workflow_ext_id).\n | 'step_signal'\n | 'linked_run'\n\n/** One event of a task's history, as the backend returns it (oldest first). */\nexport interface TaskActivityEvent {\n external_id: string\n kind: TaskActivityKind\n actor_ext_id?: string | null\n /** Who a notification went to. */\n to_ext_id?: string | null\n /** `run_id`, `agent_ext_id`, `as_user`, `from_workflow`, `error`. */\n detail?: Record<string, unknown> | null\n created_at: string\n}\n\nexport interface TaskActivityLabels {\n title: string\n empty: string\n loading: string\n error: string\n close: string\n created: string\n createdFromWorkflow: string\n runStarted: string\n runStartedBy: (agentName: string) => string\n awaitingAccess: string\n accessGranted: string\n done: string\n reopened: string\n failed: string\n failureLine: (error: string) => string\n /** The actor is not known (a system step). */\n system: string\n}\n\nexport const DEFAULT_TASK_ACTIVITY_LABELS: TaskActivityLabels = {\n title: 'Activity',\n empty: 'Nothing has happened yet.',\n loading: 'Loading activity…',\n error: 'Could not load the activity.',\n close: 'Close',\n created: 'Created',\n createdFromWorkflow: 'Created from a workflow',\n runStarted: 'Run started',\n runStartedBy: (agent) => `Run started by ${agent}`,\n awaitingAccess: 'Waiting for access',\n accessGranted: 'Access granted',\n done: 'Marked done',\n reopened: 'Reopened',\n failed: 'Run failed',\n failureLine: (error) => error,\n system: 'System',\n}\n\nconst ICONS: Record<TaskActivityKind, ReactNode> = {\n created: <Sparkles className=\"size-3.5\" aria-hidden />,\n run_started: <Play className=\"size-3.5\" aria-hidden />,\n awaiting_access: <Lock className=\"size-3.5\" aria-hidden />,\n access_granted: <KeyRound className=\"size-3.5\" aria-hidden />,\n done: <CheckCircle2 className=\"size-3.5\" aria-hidden />,\n reopened: <RotateCcw className=\"size-3.5\" aria-hidden />,\n failed: <AlertTriangle className=\"size-3.5\" aria-hidden />,\n participant_joined: <UserRoundCog className=\"size-3.5\" aria-hidden />,\n assistant_responded: <Sparkles className=\"size-3.5\" aria-hidden />,\n assistant_stopped: <Square className=\"size-3.5\" aria-hidden />,\n artifact_created: <Sparkles className=\"size-3.5\" aria-hidden />,\n artifact_edited: <MessageSquareReply className=\"size-3.5\" aria-hidden />,\n document_added: <Sparkles className=\"size-3.5\" aria-hidden />,\n document_removed: <AlertTriangle className=\"size-3.5\" aria-hidden />,\n notified: <UserRoundCog className=\"size-3.5\" aria-hidden />,\n call: <Phone className=\"size-3.5\" aria-hidden />,\n recording: <Disc className=\"size-3.5\" aria-hidden />,\n step_started: <Play className=\"size-3.5\" aria-hidden />,\n step_done: <CheckCircle2 className=\"size-3.5\" aria-hidden />,\n step_skipped: <RotateCcw className=\"size-3.5\" aria-hidden />,\n step_failed: <AlertTriangle className=\"size-3.5\" aria-hidden />,\n step_signal: <Flag className=\"size-3.5\" aria-hidden />,\n step_waiting: <Hourglass className=\"size-3.5\" aria-hidden />,\n step_progress: <PenLine className=\"size-3.5\" aria-hidden />,\n step_sent_back: <CornerUpLeft className=\"size-3.5\" aria-hidden />,\n step_ready: <BellRing className=\"size-3.5\" aria-hidden />,\n step_reminded: <BellRing className=\"size-3.5\" aria-hidden />,\n linked_run: <ArrowUpRight className=\"size-3.5\" aria-hidden />,\n}\n\nconst asString = (v: unknown): string | null => (typeof v === 'string' && v.trim() ? v : null)\n\n/** A short line for an error: the first line, cut at a readable length. */\nfunction summarizeError(error: string): string {\n const first = error.split('\\n')[0].trim()\n return first.length > 160 ? `${first.slice(0, 157)}…` : first\n}\n\n/**\n * The one-line headline of a thread event (\"Marked done\", \"Step failed\"), without its actor. Shared\n * by the task timeline and the workspace activity feed so a kind reads the same in both.\n */\nexport function taskActivityHeadline(\n e: Pick<TaskActivityEvent, 'kind' | 'detail'>,\n labels: TaskActivityLabels = DEFAULT_TASK_ACTIVITY_LABELS,\n agentName?: (agentExtId: string) => string | undefined\n): string {\n const l = labels\n const detail = e.detail ?? {}\n const agentId = asString(detail.agent_ext_id)\n const agent = agentId ? agentName?.(agentId) : undefined\n switch (e.kind) {\n case 'participant_joined':\n return 'Joined the conversation'\n case 'assistant_responded':\n return 'Responded'\n case 'assistant_stopped':\n return 'Stopped'\n case 'artifact_created':\n return 'Created a document'\n case 'artifact_edited':\n return 'Edited a document'\n case 'document_added':\n return 'Added a document'\n case 'document_removed':\n return 'Removed a document'\n case 'notified':\n return 'Sent a notification'\n case 'call':\n return detail.ended_at ? 'Call ended' : 'Started a call'\n case 'recording':\n return 'Recorded the call'\n case 'step_started':\n return 'Step started'\n case 'step_done':\n return 'Step done'\n case 'step_skipped':\n return 'Step skipped'\n case 'step_waiting': {\n const documents = eventWaitingDocuments(detail)\n return documents ? waitingForDocumentsText(documents.length) : 'Waiting on people'\n }\n case 'step_progress': {\n const documents = eventWaitingDocuments(detail)\n return documents\n ? waitingForDocumentsText(documents.length)\n : detail.signed\n ? 'Signed'\n : 'Step moved on'\n }\n case 'step_sent_back':\n return 'Sent the work back'\n case 'step_ready':\n return 'Told whose turn it is'\n case 'step_reminded':\n return 'Sent a reminder'\n case 'step_signal':\n return `Signalled “${asString(detail.signal) ?? 'a signal'}”`\n case 'linked_run':\n return `Started a linked workflow on “${asString(detail.signal) ?? 'a signal'}”`\n case 'step_failed':\n return 'Step failed'\n case 'created':\n return detail.from_workflow ? l.createdFromWorkflow : l.created\n case 'run_started':\n return agent ? l.runStartedBy(agent) : l.runStarted\n case 'awaiting_access':\n return l.awaitingAccess\n case 'access_granted':\n return l.accessGranted\n case 'done':\n return l.done\n case 'reopened':\n return l.reopened\n case 'failed':\n return l.failed\n default:\n // A kind added on the server after this build: say something rather than nothing.\n return String(e.kind).replace(/_/g, ' ')\n }\n}\n\nexport interface TaskActivityTimelineProps {\n events: readonly TaskActivityEvent[]\n /** Draw a person (an id, or none for a system step). */\n renderPerson: (id: string | null | undefined) => ReactNode\n /** An agent's display name by id. */\n agentName?: (agentExtId: string) => string | undefined\n /** \"2 min ago\". */\n formatRelative: (iso: string) => string\n /** The exact time, shown on hover. */\n formatExact: (iso: string) => string\n labels?: Partial<TaskActivityLabels>\n testId?: string\n}\n\n/** A task's history as a vertical timeline, oldest first, one entry per event. */\nexport function TaskActivityTimeline({\n events,\n renderPerson,\n agentName,\n formatRelative,\n formatExact,\n labels,\n testId,\n}: TaskActivityTimelineProps) {\n const l = { ...DEFAULT_TASK_ACTIVITY_LABELS, ...labels }\n const base = testIdOr(testId, { testId: 'task-activity' })\n\n const describe = (e: TaskActivityEvent): { headline: ReactNode; extra?: ReactNode } => {\n const headline = taskActivityHeadline(e, l, agentName)\n const error = asString(e.detail?.error)\n if (e.kind === 'step_failed' && error)\n return { headline, extra: l.failureLine(summarizeError(error)) }\n if (e.kind === 'failed' && error)\n return {\n headline,\n extra: (\n <p className=\"text-xs text-destructive\" data-testid={`${base}-error-${e.external_id}`}>\n {l.failureLine(summarizeError(error))}\n </p>\n ),\n }\n return { headline }\n }\n\n return (\n <ol className=\"flex flex-col\" data-testid={`${base}-list`}>\n {events.map((e, i) => {\n const { headline, extra } = describe(e)\n const last = i === events.length - 1\n return (\n <li\n key={e.external_id}\n className=\"relative flex gap-3 pb-4 last:pb-0\"\n data-testid={`${base}-entry-${e.external_id}`}\n data-kind={e.kind}\n >\n {!last && (\n <span className=\"absolute left-3 top-6 -ml-px h-[calc(100%-1.5rem)] w-px bg-border\" />\n )}\n <span\n className={cn(\n 'z-10 flex size-6 shrink-0 items-center justify-center rounded-full border bg-background',\n e.kind === 'failed' ? 'text-destructive' : 'text-muted-foreground'\n )}\n data-testid={`${base}-icon-${e.external_id}`}\n >\n {ICONS[e.kind]}\n </span>\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-1 text-sm\">\n {e.actor_ext_id ? (\n <span className=\"inline-flex\" data-testid={`${base}-actor-${e.external_id}`}>\n {renderPerson(e.actor_ext_id)}\n </span>\n ) : (\n <span className=\"text-muted-foreground\">{l.system}</span>\n )}\n <span className=\"font-medium\">{headline}</span>\n <time\n dateTime={e.created_at}\n title={formatExact(e.created_at)}\n className=\"ml-auto text-xs text-muted-foreground\"\n data-testid={`${base}-time-${e.external_id}`}\n >\n {formatRelative(e.created_at)}\n </time>\n </div>\n {extra}\n </div>\n </li>\n )\n })}\n </ol>\n )\n}\n"]}
|