@arbidocs/blocks 0.4.163 → 0.4.165

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/bin/arbidocs-copy-pdf-assets.mjs +6 -29
  2. package/bin/pdfjs-shims.mjs +54 -0
  3. package/dist/{ConnectedNativeDocxComparison-LKIMKOTA.js → ConnectedNativeDocxComparison-7WXIDRDY.js} +17 -17
  4. package/dist/{ConnectedStreamedWordArtifact-432HT7DK.js.map → ConnectedNativeDocxComparison-7WXIDRDY.js.map} +1 -1
  5. package/dist/{ConnectedNativeDocxComparison-GLHOGUP6.cjs → ConnectedNativeDocxComparison-XV2UHRBQ.cjs} +18 -18
  6. package/dist/{ConnectedNativeDocxComparison-GLHOGUP6.cjs.map → ConnectedNativeDocxComparison-XV2UHRBQ.cjs.map} +1 -1
  7. package/dist/{ConnectedNativeDocxEditor-6LNYWZ3P.js → ConnectedNativeDocxEditor-X3FEGMRT.js} +15 -15
  8. package/dist/{ConnectedNativeDocxEditor-6LNYWZ3P.js.map → ConnectedNativeDocxEditor-X3FEGMRT.js.map} +1 -1
  9. package/dist/{ConnectedNativeDocxEditor-M3UGWL6K.cjs → ConnectedNativeDocxEditor-Z7KSH5RK.cjs} +17 -17
  10. package/dist/{ConnectedNativeDocxEditor-M3UGWL6K.cjs.map → ConnectedNativeDocxEditor-Z7KSH5RK.cjs.map} +1 -1
  11. package/dist/{ConnectedStreamedWordArtifact-432HT7DK.js → ConnectedStreamedWordArtifact-JV56WYWK.js} +17 -17
  12. package/dist/{ConnectedNativeDocxComparison-LKIMKOTA.js.map → ConnectedStreamedWordArtifact-JV56WYWK.js.map} +1 -1
  13. package/dist/{ConnectedStreamedWordArtifact-COEXL5IT.cjs → ConnectedStreamedWordArtifact-UNZIAYWQ.cjs} +18 -18
  14. package/dist/ConnectedStreamedWordArtifact-UNZIAYWQ.cjs.map +1 -0
  15. package/dist/{NativeDocxEditor-T2PJIZMU.cjs → NativeDocxEditor-WAUI2YRU.cjs} +8 -8
  16. package/dist/{NativeDocxEditor-T2PJIZMU.cjs.map → NativeDocxEditor-WAUI2YRU.cjs.map} +1 -1
  17. package/dist/{NativeDocxEditor-TBTBD6TC.js → NativeDocxEditor-XEDC4UFE.js} +4 -4
  18. package/dist/{NativeDocxEditor-TBTBD6TC.js.map → NativeDocxEditor-XEDC4UFE.js.map} +1 -1
  19. package/dist/{WorkspaceTableView-AQTF5F6T.cjs → WorkspaceTableView-OMBC2G5K.cjs} +12 -12
  20. package/dist/{WorkspaceTableView-AQTF5F6T.cjs.map → WorkspaceTableView-OMBC2G5K.cjs.map} +1 -1
  21. package/dist/{WorkspaceTableView-PTB5BPVA.js → WorkspaceTableView-QVOLTH5Z.js} +10 -10
  22. package/dist/{WorkspaceTableView-PTB5BPVA.js.map → WorkspaceTableView-QVOLTH5Z.js.map} +1 -1
  23. package/dist/agents/index.cjs +269 -269
  24. package/dist/agents/index.js +12 -12
  25. package/dist/auth/index.cjs +30 -30
  26. package/dist/auth/index.js +1 -1
  27. package/dist/calls/index.cjs +3 -3
  28. package/dist/calls/index.js +2 -2
  29. package/dist/chat/index.cjs +140 -140
  30. package/dist/chat/index.js +6 -6
  31. package/dist/{chunk-ANLTECZ6.cjs → chunk-2MX3RAF4.cjs} +13 -13
  32. package/dist/{chunk-ANLTECZ6.cjs.map → chunk-2MX3RAF4.cjs.map} +1 -1
  33. package/dist/{chunk-K7CZFNJ2.js → chunk-2NTQH63V.js} +13 -13
  34. package/dist/{chunk-K7CZFNJ2.js.map → chunk-2NTQH63V.js.map} +1 -1
  35. package/dist/{chunk-2AMYT2HQ.js → chunk-4Q4W5WEO.js} +31 -7
  36. package/dist/chunk-4Q4W5WEO.js.map +1 -0
  37. package/dist/{chunk-WKSP73RU.js → chunk-5BKVKWKQ.js} +7 -7
  38. package/dist/{chunk-WKSP73RU.js.map → chunk-5BKVKWKQ.js.map} +1 -1
  39. package/dist/{chunk-FMJGVAWX.js → chunk-6RKMFTUJ.js} +8 -8
  40. package/dist/{chunk-FMJGVAWX.js.map → chunk-6RKMFTUJ.js.map} +1 -1
  41. package/dist/{chunk-3PQIWOTZ.js → chunk-6SOWJFWJ.js} +4 -4
  42. package/dist/{chunk-3PQIWOTZ.js.map → chunk-6SOWJFWJ.js.map} +1 -1
  43. package/dist/{chunk-NOXGEQQR.js → chunk-A7HNGO5F.js} +3 -3
  44. package/dist/{chunk-NOXGEQQR.js.map → chunk-A7HNGO5F.js.map} +1 -1
  45. package/dist/{chunk-4WWM3GQ5.js → chunk-ABEKUV6L.js} +11 -6
  46. package/dist/chunk-ABEKUV6L.js.map +1 -0
  47. package/dist/{chunk-TNESYDBR.cjs → chunk-AXCTDWFH.cjs} +3 -3
  48. package/dist/{chunk-TNESYDBR.cjs.map → chunk-AXCTDWFH.cjs.map} +1 -1
  49. package/dist/{chunk-5C7DRQQE.cjs → chunk-C3GS4WQE.cjs} +4 -4
  50. package/dist/{chunk-5C7DRQQE.cjs.map → chunk-C3GS4WQE.cjs.map} +1 -1
  51. package/dist/{chunk-5A2QQAF5.cjs → chunk-C45WOKZW.cjs} +3 -3
  52. package/dist/{chunk-5A2QQAF5.cjs.map → chunk-C45WOKZW.cjs.map} +1 -1
  53. package/dist/{chunk-AVXRXPII.js → chunk-EJHJQKUF.js} +3 -3
  54. package/dist/{chunk-AVXRXPII.js.map → chunk-EJHJQKUF.js.map} +1 -1
  55. package/dist/chunk-EQ3WRY2N.js +49 -0
  56. package/dist/chunk-EQ3WRY2N.js.map +1 -0
  57. package/dist/{chunk-WU34CHU5.js → chunk-FPFMKSSB.js} +3 -3
  58. package/dist/{chunk-WU34CHU5.js.map → chunk-FPFMKSSB.js.map} +1 -1
  59. package/dist/{chunk-ZW2AWACP.js → chunk-GMJZ4FO7.js} +4 -4
  60. package/dist/{chunk-ZW2AWACP.js.map → chunk-GMJZ4FO7.js.map} +1 -1
  61. package/dist/{chunk-4GITK3Q5.cjs → chunk-HCAXURWO.cjs} +3 -3
  62. package/dist/{chunk-4GITK3Q5.cjs.map → chunk-HCAXURWO.cjs.map} +1 -1
  63. package/dist/{chunk-6XIXNH26.js → chunk-HDJSU5IS.js} +3 -3
  64. package/dist/{chunk-6XIXNH26.js.map → chunk-HDJSU5IS.js.map} +1 -1
  65. package/dist/{chunk-OHCYJFV2.cjs → chunk-HHNYVJV3.cjs} +7 -7
  66. package/dist/{chunk-OHCYJFV2.cjs.map → chunk-HHNYVJV3.cjs.map} +1 -1
  67. package/dist/{chunk-5WLORPGX.js → chunk-HQYN5EFX.js} +3 -3
  68. package/dist/{chunk-5WLORPGX.js.map → chunk-HQYN5EFX.js.map} +1 -1
  69. package/dist/{chunk-BGXWPVHR.js → chunk-HZJQQVKL.js} +3 -3
  70. package/dist/{chunk-BGXWPVHR.js.map → chunk-HZJQQVKL.js.map} +1 -1
  71. package/dist/{chunk-UORU5S7Y.js → chunk-I4HFM5HB.js} +3 -3
  72. package/dist/{chunk-UORU5S7Y.js.map → chunk-I4HFM5HB.js.map} +1 -1
  73. package/dist/{chunk-LQYPOWKN.cjs → chunk-IHPQO2TG.cjs} +5 -5
  74. package/dist/{chunk-LQYPOWKN.cjs.map → chunk-IHPQO2TG.cjs.map} +1 -1
  75. package/dist/{chunk-NUAC5GTQ.cjs → chunk-JB4EXO3V.cjs} +6 -6
  76. package/dist/{chunk-NUAC5GTQ.cjs.map → chunk-JB4EXO3V.cjs.map} +1 -1
  77. package/dist/{chunk-GWSGIZQ5.js → chunk-KCIYZ76I.js} +3 -3
  78. package/dist/{chunk-GWSGIZQ5.js.map → chunk-KCIYZ76I.js.map} +1 -1
  79. package/dist/{chunk-I6I34FDU.cjs → chunk-M7C4FHLU.cjs} +12 -12
  80. package/dist/{chunk-I6I34FDU.cjs.map → chunk-M7C4FHLU.cjs.map} +1 -1
  81. package/dist/{chunk-7RGLTF76.cjs → chunk-MEMWZ72Y.cjs} +11 -6
  82. package/dist/chunk-MEMWZ72Y.cjs.map +1 -0
  83. package/dist/{chunk-ETJFC6MO.cjs → chunk-MPXUHCEV.cjs} +4 -4
  84. package/dist/{chunk-ETJFC6MO.cjs.map → chunk-MPXUHCEV.cjs.map} +1 -1
  85. package/dist/{chunk-3UDVQTXA.js → chunk-NKT6CO5F.js} +4 -4
  86. package/dist/{chunk-3UDVQTXA.js.map → chunk-NKT6CO5F.js.map} +1 -1
  87. package/dist/{chunk-X3XPXEIM.cjs → chunk-OGQSYL3P.cjs} +13 -13
  88. package/dist/{chunk-X3XPXEIM.cjs.map → chunk-OGQSYL3P.cjs.map} +1 -1
  89. package/dist/chunk-OSWZ4K34.cjs +18 -0
  90. package/dist/{chunk-VYTK2WJB.cjs.map → chunk-OSWZ4K34.cjs.map} +1 -1
  91. package/dist/chunk-PMHAJRKF.cjs +18 -0
  92. package/dist/{chunk-AR6A2PMV.cjs.map → chunk-PMHAJRKF.cjs.map} +1 -1
  93. package/dist/{chunk-J7YHBMBB.js → chunk-QARJQJAX.js} +3 -3
  94. package/dist/{chunk-J7YHBMBB.js.map → chunk-QARJQJAX.js.map} +1 -1
  95. package/dist/{chunk-3VW7ZXQ6.cjs → chunk-R2N5VIVI.cjs} +4 -4
  96. package/dist/{chunk-3VW7ZXQ6.cjs.map → chunk-R2N5VIVI.cjs.map} +1 -1
  97. package/dist/{chunk-JTJCCL2E.js → chunk-SLLNLFFP.js} +4 -4
  98. package/dist/{chunk-JTJCCL2E.js.map → chunk-SLLNLFFP.js.map} +1 -1
  99. package/dist/chunk-TM2D4XT4.cjs +52 -0
  100. package/dist/chunk-TM2D4XT4.cjs.map +1 -0
  101. package/dist/{chunk-KNCJSPXV.js → chunk-UKKTT3JE.js} +6 -6
  102. package/dist/{chunk-KNCJSPXV.js.map → chunk-UKKTT3JE.js.map} +1 -1
  103. package/dist/{chunk-6UTIAHQG.cjs → chunk-V24UHHL4.cjs} +67 -67
  104. package/dist/chunk-V24UHHL4.cjs.map +1 -0
  105. package/dist/{chunk-57OTWUBC.cjs → chunk-VDGLAVVM.cjs} +3 -3
  106. package/dist/chunk-VDGLAVVM.cjs.map +1 -0
  107. package/dist/{chunk-TQUYWUEE.cjs → chunk-VIV56KDN.cjs} +7 -7
  108. package/dist/{chunk-TQUYWUEE.cjs.map → chunk-VIV56KDN.cjs.map} +1 -1
  109. package/dist/{chunk-XER3JLC7.js → chunk-VTTDCHBZ.js} +3 -3
  110. package/dist/{chunk-XER3JLC7.js.map → chunk-VTTDCHBZ.js.map} +1 -1
  111. package/dist/{chunk-HRDVQERS.cjs → chunk-W7IFDFOZ.cjs} +31 -5
  112. package/dist/chunk-W7IFDFOZ.cjs.map +1 -0
  113. package/dist/{chunk-B3FMUFAW.cjs → chunk-WE5DABTC.cjs} +4 -4
  114. package/dist/{chunk-B3FMUFAW.cjs.map → chunk-WE5DABTC.cjs.map} +1 -1
  115. package/dist/{chunk-NS7NVX4E.cjs → chunk-WLFMHGHK.cjs} +6 -6
  116. package/dist/{chunk-NS7NVX4E.cjs.map → chunk-WLFMHGHK.cjs.map} +1 -1
  117. package/dist/{chunk-O5E3NKPI.cjs → chunk-X6Z6IWRY.cjs} +6 -6
  118. package/dist/{chunk-O5E3NKPI.cjs.map → chunk-X6Z6IWRY.cjs.map} +1 -1
  119. package/dist/{chunk-KQWC4YBX.js → chunk-XA6QWXOQ.js} +4 -4
  120. package/dist/{chunk-KQWC4YBX.js.map → chunk-XA6QWXOQ.js.map} +1 -1
  121. package/dist/{chunk-ZDOKJD44.js → chunk-XBTOPW6B.js} +4 -4
  122. package/dist/{chunk-ZDOKJD44.js.map → chunk-XBTOPW6B.js.map} +1 -1
  123. package/dist/{chunk-PCL7IEZO.js → chunk-YG3BXG5M.js} +4 -4
  124. package/dist/{chunk-PCL7IEZO.js.map → chunk-YG3BXG5M.js.map} +1 -1
  125. package/dist/{chunk-AYJZRBHG.cjs → chunk-YMWMVV4H.cjs} +4 -4
  126. package/dist/{chunk-AYJZRBHG.cjs.map → chunk-YMWMVV4H.cjs.map} +1 -1
  127. package/dist/{chunk-GFVIFXWT.cjs → chunk-YNLWAD57.cjs} +5 -5
  128. package/dist/{chunk-GFVIFXWT.cjs.map → chunk-YNLWAD57.cjs.map} +1 -1
  129. package/dist/{chunk-RY2SODRN.js → chunk-ZSDL36BI.js} +4 -4
  130. package/dist/{chunk-RY2SODRN.js.map → chunk-ZSDL36BI.js.map} +1 -1
  131. package/dist/citations/index.cjs +1 -1
  132. package/dist/citations/index.js +1 -1
  133. package/dist/components/ErrorBoundary.d.ts +33 -0
  134. package/dist/connect/docx.cjs +21 -21
  135. package/dist/connect/docx.js +17 -17
  136. package/dist/connect/index.cjs +688 -688
  137. package/dist/connect/index.cjs.map +1 -1
  138. package/dist/connect/index.js +36 -36
  139. package/dist/connect/index.js.map +1 -1
  140. package/dist/connect/viewer.cjs +82 -72
  141. package/dist/connect/viewer.cjs.map +1 -1
  142. package/dist/connect/viewer.js +30 -20
  143. package/dist/connect/viewer.js.map +1 -1
  144. package/dist/document-tools/index.cjs +20 -20
  145. package/dist/document-tools/index.js +3 -3
  146. package/dist/docx/index.cjs +51 -51
  147. package/dist/docx/index.js +4 -4
  148. package/dist/facts/index.cjs +58 -58
  149. package/dist/facts/index.js +8 -8
  150. package/dist/files/index.cjs +241 -241
  151. package/dist/files/index.js +9 -9
  152. package/dist/home/index.cjs +30 -30
  153. package/dist/home/index.js +5 -5
  154. package/dist/index.cjs +975 -958
  155. package/dist/index.cjs.map +1 -1
  156. package/dist/index.d.ts +1 -0
  157. package/dist/index.js +26 -25
  158. package/dist/index.js.map +1 -1
  159. package/dist/lib/start-inset.d.ts +13 -0
  160. package/dist/retrieval/index.cjs +1 -1
  161. package/dist/retrieval/index.js +1 -1
  162. package/dist/settings/index.cjs +174 -174
  163. package/dist/settings/index.js +5 -5
  164. package/dist/shell/InstallPrompt.d.ts +2 -1
  165. package/dist/shell/index.cjs +62 -54
  166. package/dist/shell/index.d.ts +1 -0
  167. package/dist/shell/index.js +5 -5
  168. package/dist/studio/index.cjs +7 -7
  169. package/dist/studio/index.js +6 -6
  170. package/dist/workflow-canvas/index.cjs +25 -25
  171. package/dist/workflow-canvas/index.js +12 -12
  172. package/dist/workspaces/index.cjs +2 -2
  173. package/dist/workspaces/index.js +2 -2
  174. package/node_modules/@arbidocs/coedit/package.json +1 -1
  175. package/node_modules/@docx-editor.dev/core/dist/chunk-LWDSDCMO.js +1 -1
  176. package/node_modules/@docx-editor.dev/core/dist/chunk-RCHS4ZEH.cjs +1 -1
  177. package/package.json +5 -5
  178. package/dist/ConnectedStreamedWordArtifact-COEXL5IT.cjs.map +0 -1
  179. package/dist/chunk-2AMYT2HQ.js.map +0 -1
  180. package/dist/chunk-4WWM3GQ5.js.map +0 -1
  181. package/dist/chunk-57OTWUBC.cjs.map +0 -1
  182. package/dist/chunk-6UTIAHQG.cjs.map +0 -1
  183. package/dist/chunk-7RGLTF76.cjs.map +0 -1
  184. package/dist/chunk-AR6A2PMV.cjs +0 -18
  185. package/dist/chunk-HRDVQERS.cjs.map +0 -1
  186. package/dist/chunk-VYTK2WJB.cjs +0 -18
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/agents/workflows/scopeRender.tsx","../src/agents/workflows/useWorkflowPreview.ts","../src/agents/definitions/AgentCard.tsx","../src/agents/definitions/AgentGallery.tsx","../src/agents/skills/SkillCard.tsx","../src/agents/skills/SkillRow.tsx","../src/agents/tasks/TaskPlan.tsx","../src/agents/tasks/elapsed.ts","../src/agents/tasks/UploadTaskItem.tsx","../src/agents/tasks/UploadTaskList.tsx","../src/agents/tasks/rrule.ts","../src/agents/tasks/RecurrenceBuilder.tsx","../src/agents/tasks/TaskOutputsCell.tsx","../src/agents/tasks/TaskMoveDialog.tsx","../src/agents/tasks/TaskRowMenu.tsx","../src/agents/tasks/TaskStatusPill.tsx","../src/agents/tasks/taskColumns.tsx","../src/agents/tasks/gridWidth.ts","../src/agents/tasks/taskRows.ts","../src/agents/tasks/taskTableLabels.ts","../src/agents/tasks/TaskTable.tsx","../src/agents/tasks/TaskInbox.tsx","../src/agents/tasks/ThreadStatusLine.tsx","../src/components/EntityChip.tsx","../src/agents/tasks/ConversationListView.tsx","../src/agents/tasks/TaskStartDialog.tsx","../src/agents/tasks/DueDateMenu.tsx","../src/agents/tasks/PillSelect.tsx","../src/agents/tasks/taskRequest.ts","../src/agents/tasks/NewThreadDialog.tsx","../src/agents/tasks/TaskFlow.tsx","../src/agents/tasks/ThreadLauncher.tsx","../src/agents/tasks/WorkflowRunStatus.tsx","../src/agents/tasks/WorkflowThreadStrip.tsx","../src/agents/tasks/linkedRuns.ts","../src/agents/tasks/compact-thread-activity.ts","../src/agents/tasks/TaskThreadChip.tsx","../src/agents/tasks/TasksChrome.tsx","../src/agents/tasks/taskComposerTypes.ts","../src/agents/tasks/WorkflowComposer.tsx","../src/agents/tasks/TaskComposer.tsx","../src/agents/tasks/ThreadNotifyDialog.tsx","../src/agents/tasks/ConversationTurnSpeaker.tsx","../src/agents/config/TupleArrayField.tsx","../src/agents/config/schema-utils.ts","../src/agents/config/ConfigField.tsx","../src/agents/config/ConfigForm.tsx","../src/agents/runs/AgentBar.tsx","../src/agents/runs/AgentSteps.tsx","../src/agents/runs/SubagentRoster.tsx","../src/agents/approvals/ConsentPage.tsx","../src/agents/approvals/ConsentParts.tsx","../src/agents/approvals/AuthorizeAgentParts.tsx"],"names":["jsx","ScopePicker","isWorkflowScope","workflowSteps","useState","initialRunInputs","useRef","useEffect","stepPhase","composeStepPrompt","useWorkflowView","formatCount","goalProgress","jsxs","cn","testIdOr","ActionLink","Button","MessageSquare","Eye","ClipboardList","Pencil","Copy","Trash2","EmptyState","Bot","Sparkles","Plus","activateOnKey","SkillTypeBadge","SkillGlobalBadge","SkillActionButton","Download","Lock","Globe","ListChecks","Fragment","Loader2","text","Badge","Label","Textarea","Slider","minutes","Check","X","SkipForward","FileX","AlertTriangle","StatusIcon","pad2","Input","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","DropdownMenu","DropdownMenuTrigger","FileText","DropdownMenuContent","DropdownMenuItem","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","CornerDownRight","MoreHorizontal","KeyRound","RotateCcw","CheckCheck","History","ListPlus","DropdownMenuSeparator","CircleDashed","asTaskStatus","STATUS_LABELS","STATUS_TONE","ToneBadge","AlertCircle","STATUS_ORDER","useMemo","PersonPill","ChevronDown","ChevronRight","Workflow","VisibilityToggle","ChevronsUpDown","ChevronsDownUp","ListTodo","GridView","SelectionBar","SelectionBarAction","TabHeader","FilterInput","TriStateFilterMenu","Hand","Clock","CircleCheck","Tooltip","TooltipTrigger","TooltipContent","EntityPill","useIsPhone","ThreadVisibilityIcon","CellHoverIcon","useMentionAutocomplete","toMessageMentions","extractMentions","DialogClose","MentionMenu","Popover","PopoverTrigger","PopoverContent","Command","CommandInput","CommandList","CommandEmpty","CommandItem","composeWorkflowPrompt","ModalHeader","Switch","CalendarClock","useLayoutEffect","StepChip","StepDocumentButton","NO_PEOPLE","ArrowUpRight","SendHorizontal","stepLevels","isRunFinished","activeStepId","stepKindOf","DEFAULT_STEP_KIND_LABELS","DEFAULT_STEP_DOCUMENT_LABELS","DEFAULT_STEP_RECORD_LABELS","CornerLeftUp","Flag","PopoverClose","DEFAULT_STEP_BAR_LABELS","STEP_KIND_ICONS","waitingDocuments","waitingForDocumentsText","stepDocuments","STEP_LABEL_CURRENT","STEP_LABEL","STEP_LABEL_MAX","CornerUpLeft","StepDocumentCards","StepRecord","splitDocRef","Zap","MessagesSquare","StepBarFrame","eventWaitingDocuments","defaultInputs","GLYPH","useControllableState","validateInputs","AddFilesFirst","SchemaForm","Play","id","formatDue","Checkbox","ARBI_MARK_SRC","UserEntity","value","useBlocksEnvironment","memo","Collapsible","CollapsibleTrigger","CollapsibleContent","ChevronUp","Pause","Activity","Hourglass","forwardRef","AgentBarIconButton","MoreVertical","prefixedTestId","TriangleAlert","CheckSquare","Square","CheckCircle2","SquareArrowOutUpRight","ArrowLeft","MultiSelect"],"mappings":"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","file":"chunk-V24UHHL4.cjs","sourcesContent":["import type { ReactNode } from 'react'\nimport { ScopePicker } from '../../home/ScopePicker'\nimport type { WorkflowScopeSource } from './WorkflowConfigDialog'\nimport type { WorkflowDefinition, WorkflowField, WorkflowInputs, WorkflowScope } from './types'\nimport { isWorkflowScope } from './workflow'\n\n/** The folder/label picker over the workspace's files: what a `scope` field renders by default. */\nexport function defaultScopeRenderer(\n scopeSource: WorkflowScopeSource | undefined\n):\n | ((\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode)\n | undefined {\n if (!scopeSource) return undefined\n return function renderScope(_field, value, onChange) {\n return (\n <ScopePicker\n folders={scopeSource.folders}\n unfiledCount={scopeSource.unfiledCount}\n labels={scopeSource.labels}\n totalCount={scopeSource.totalCount}\n matchedCount={scopeSource.countMatching(value)}\n scope={value}\n onScopeChange={onChange}\n />\n )\n }\n}\n\n/**\n * The inputs with every `scope` field resolved to explicit file ids (`documents`), so what is sent says\n * exactly which files a run is bound to. The folders and labels stay, for showing the pick again.\n */\nexport function resolveScopeInputs(\n workflow: Pick<WorkflowDefinition, 'inputs'>,\n inputs: WorkflowInputs,\n scopeSource: Pick<WorkflowScopeSource, 'resolveDocuments'> | undefined\n): WorkflowInputs {\n if (!scopeSource?.resolveDocuments) return inputs\n const next: WorkflowInputs = { ...inputs }\n for (const field of workflow.inputs) {\n if (field.type !== 'scope') continue\n const raw = inputs[field.name]\n const scope: WorkflowScope = isWorkflowScope(raw) ? raw : { folders: [], labels: [] }\n next[field.name] = { ...scope, documents: scopeSource.resolveDocuments(scope) }\n }\n return next\n}\n","/**\n * A stepped workflow run on screen only (the builder's preview): agent steps run one at a time,\n * the way the server does, and answer with the prompt they would send; action steps just finish.\n * No thread, no agent.\n */\n\nimport { useEffect, useRef, useState } from 'react'\nimport {\n composeStepPrompt,\n initialRunInputs,\n stepPhase,\n workflowSteps,\n type StepComposeOptions,\n} from './run'\nimport type { WorkflowDefinition, WorkflowInputs, WorkflowStepState } from './types'\nimport { useWorkflowView, type WorkflowRunView } from './useWorkflowView'\n\nexport interface UseWorkflowPreviewOptions extends StepComposeOptions {\n /** What a stand-in agent step answers; `{prompt}` is replaced with the prompt it would send. */\n answer?: string\n /** How long a stand-in step takes. */\n delayMs?: number\n}\n\nexport function useWorkflowPreview(\n workflow: WorkflowDefinition,\n { answer = '{prompt}', delayMs = 400, resolveWorkflow, compose }: UseWorkflowPreviewOptions = {}\n): WorkflowRunView {\n const steps = workflowSteps(workflow)\n const [inputs, setInputs] = useState<WorkflowInputs>(() => initialRunInputs(workflow))\n const [states, setStates] = useState<Record<string, WorkflowStepState>>({})\n const set = (id: string, state: WorkflowStepState) => setStates((s) => ({ ...s, [id]: state }))\n\n // A stand-in step's timer outlives the re-render its start causes; it is cleared on unmount, and\n // a step it cut short starts again (StrictMode mounts twice).\n const timers = useRef(new Map<string, ReturnType<typeof setTimeout>>())\n useEffect(() => {\n const pending = timers.current\n return () => {\n for (const t of pending.values()) clearTimeout(t)\n pending.clear()\n setStates((s) =>\n Object.fromEntries(\n Object.entries(s).map(([id, v]) => [\n id,\n v.status === 'running' ? { status: 'pending' } : v,\n ])\n )\n )\n }\n }, [])\n\n // One turn at a time: start the first ready agent step when nothing is running.\n useEffect(() => {\n if (Object.values(states).some((s) => s.status === 'running')) return\n // An action step (a signature, an email, a review) stands in the same way, with no answer.\n const next = steps.find(\n (s) =>\n (s.kind === 'agent' || s.kind === 'action') && stepPhase(steps, states, s.id) === 'ready'\n )\n if (!next || (next.kind !== 'agent' && next.kind !== 'action')) return\n const prompt =\n next.kind === 'agent'\n ? composeStepPrompt(workflow, next, inputs, { resolveWorkflow, compose })\n : ''\n set(next.id, { status: 'running', startedAt: new Date().toISOString() })\n timers.current.set(\n next.id,\n setTimeout(() => {\n timers.current.delete(next.id)\n set(\n next.id,\n next.kind === 'agent'\n ? { status: 'done', text: answer.replace('{prompt}', prompt) }\n : { status: 'done' }\n )\n }, delayMs)\n )\n // `inputs` are read when a step starts, not watched.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [states, steps, workflow])\n\n return useWorkflowView({\n steps,\n states,\n inputs,\n setInput: (name, value) => setInputs((i) => ({ ...i, [name]: value })),\n complete: async (step) => set(step.id, { status: 'done' }),\n skip: async (id) => set(id, { status: 'skipped' }),\n retry: async (id) => set(id, { status: 'pending' }),\n isLocked: (id) => states[id]?.status === 'done',\n })\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { ClipboardList, Copy, Eye, MessageSquare, Pencil, Trash2 } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { ActionLink } from '../../components/ActionLink'\nimport { testIdOr } from '../../chat/test-id'\nimport { formatCount } from '../../lib/format'\n\nexport interface AgentCardLabels {\n running: string\n /** Pulse indicator aria-label. */\n runningIndicator: string\n /** Chip text; receives the running count. */\n runningCount: (count: number) => string\n /** Chip text; receives the task count (0 -> none yet). */\n taskCount: (count: number) => string\n goalMet: (met: number, total: number) => string\n watch: string\n message: string\n assignTask: string\n edit: string\n copyAddress: string\n deleteAgent: (name: string) => string\n}\n\nexport const DEFAULT_AGENT_CARD_LABELS: AgentCardLabels = {\n running: 'Running',\n runningIndicator: 'Running',\n runningCount: (count) => `${count} running`,\n taskCount: (count) =>\n count > 0 ? formatCount(count, { one: 'task', other: 'tasks' }) : 'no tasks yet',\n goalMet: (met, total) => `✓ ${met}/${total} met`,\n watch: 'Watch',\n message: 'Message',\n assignTask: 'Assign task',\n edit: 'Edit',\n copyAddress: 'Copy address',\n deleteAgent: (name) => `Delete agent ${name}`,\n}\n\nexport interface AgentCardTestIds {\n root: string\n watch: string\n message: string\n assignTask: string\n edit: string\n copyAddress: string\n delete: string\n}\n\nexport interface AgentCardProps {\n /** Display name; also the key in the test ids (`agent-card-{name}`, `agent-edit-{name}`...). */\n name: string\n /** The agent's avatar (the app supplies its entity avatar). */\n avatar: ReactNode\n /** Tasks currently running for this agent; shows a pulse + chip when > 0. */\n runningCount: number\n /** All tasks assigned to this agent. */\n taskCount: number\n /** Extra content under the chips (the app shows what the agent can access). */\n details?: ReactNode\n /** Criteria progress of the agent's most recent goal task. */\n goalProgress?: { met: number; total: number } | null\n /** When set, a Watch action opens the live run. */\n onWatch?: () => void\n /** Each action is optional: the button is omitted when its handler is absent. */\n onMessage?: () => void\n onAssignTask?: () => void\n onEdit?: () => void\n /** When set, a ghost \"Copy address\" action copies the agent's address (it is not shown raw). */\n onCopyAddress?: () => void\n onDelete?: () => void\n /**\n * Destination of the agent; the name becomes a real link. `onSelect` fires on a plain click\n * (modified clicks go to the browser).\n */\n href?: string\n onSelect?: () => void\n labels?: Partial<AgentCardLabels>\n /** Overrides for the default `agent-card-{name}` / `agent-watch-run-{name}` ... ids. */\n testIds?: Partial<AgentCardTestIds>\n testId?: string\n className?: string\n}\n\nconst ACTION = 'h-9 gap-1.5 px-2 text-sm pointer-coarse:h-11'\n\n/** One agent in the gallery: avatar, live task chips, and Watch / Assign task / Edit / Delete. */\nexport function AgentCard({\n name,\n avatar,\n runningCount,\n taskCount,\n goalProgress,\n details,\n onWatch,\n onMessage,\n onAssignTask,\n onEdit,\n onCopyAddress,\n onDelete,\n href,\n onSelect,\n labels,\n testIds,\n testId,\n className,\n ...rest\n}: AgentCardProps & Omit<HTMLAttributes<HTMLDivElement>, keyof AgentCardProps>) {\n const l = { ...DEFAULT_AGENT_CARD_LABELS, ...labels }\n return (\n <div\n {...rest}\n className={cn('rounded-lg bg-muted p-4', className)}\n data-testid={testIdOr(testId ?? testIds?.root, { testId: `agent-card-${name}` })}\n data-slot=\"agent-card\"\n >\n <div className=\"flex items-start gap-3\">\n <div className=\"relative shrink-0\">\n {avatar}\n {runningCount > 0 && (\n <span\n className=\"absolute -right-0.5 -top-0.5 size-2.5 rounded-full bg-ai-ink\"\n role=\"img\"\n aria-label={l.runningIndicator}\n >\n <span className=\"absolute inset-0 animate-ping rounded-full bg-ai-ink opacity-60\" />\n </span>\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n {href ? (\n <ActionLink\n href={href}\n onSelect={onSelect}\n className=\"block max-w-full truncate text-left font-medium hover:underline\"\n >\n {name}\n </ActionLink>\n ) : (\n <p className=\"truncate font-medium\">{name}</p>\n )}\n <div className=\"mt-1.5 flex flex-wrap gap-1 text-xs text-muted-foreground\">\n {runningCount > 0 ? (\n <span className=\"rounded-full bg-ai-soft px-2 py-px text-ai-ink\">\n {l.runningCount(runningCount)}\n </span>\n ) : (\n <span className=\"rounded-full bg-background px-2 py-px\">\n {l.taskCount(taskCount)}\n </span>\n )}\n {goalProgress && (\n <span className=\"rounded-full bg-background px-2 py-px\">\n {l.goalMet(goalProgress.met, goalProgress.total)}\n </span>\n )}\n </div>\n {details}\n </div>\n </div>\n\n <div className=\"mt-3 flex flex-wrap items-center gap-1 pt-1\">\n {onMessage && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={ACTION}\n onClick={onMessage}\n data-testid={testIdOr(testIds?.message, { testId: `agent-message-${name}` })}\n >\n <MessageSquare size={14} /> {l.message}\n </Button>\n )}\n {onWatch && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(ACTION, 'text-ai-ink hover:text-ai-ink')}\n onClick={onWatch}\n data-testid={testIdOr(testIds?.watch, { testId: `agent-watch-run-${name}` })}\n >\n <Eye size={14} /> {l.watch}\n </Button>\n )}\n {onAssignTask && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={ACTION}\n onClick={onAssignTask}\n data-testid={testIdOr(testIds?.assignTask, { testId: `agent-assign-task-${name}` })}\n >\n <ClipboardList size={14} /> {l.assignTask}\n </Button>\n )}\n {onEdit && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={ACTION}\n onClick={onEdit}\n data-testid={testIdOr(testIds?.edit, { testId: `agent-edit-${name}` })}\n >\n <Pencil size={14} /> {l.edit}\n </Button>\n )}\n {onCopyAddress && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(ACTION, 'text-muted-foreground')}\n onClick={onCopyAddress}\n data-testid={testIdOr(testIds?.copyAddress, { testId: `agent-copy-address-${name}` })}\n >\n <Copy size={14} /> {l.copyAddress}\n </Button>\n )}\n {onDelete && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(ACTION, 'ml-auto text-muted-foreground hover:text-red-text')}\n onClick={onDelete}\n aria-label={l.deleteAgent(name)}\n data-testid={testIdOr(testIds?.delete, { testId: `agent-delete-${name}` })}\n >\n <Trash2 size={14} />\n </Button>\n )}\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Bot, Plus, Sparkles } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { EmptyState } from '../../components/EmptyState'\n\nexport interface AgentGalleryLabels {\n /** Intro line next to the New agent button. */\n description: string\n emptyTitle: string\n emptyDescription: string\n emptyCta: string\n newAgent: string\n}\n\nexport const DEFAULT_AGENT_GALLERY_LABELS: AgentGalleryLabels = {\n description: 'Personas that work for you, on demand.',\n emptyTitle: 'Create your first agent',\n emptyDescription:\n 'Describe a persona, pick its tools, generate an avatar, then hand it work from an agent card and watch it converge.',\n emptyCta: 'Create an agent',\n newAgent: 'New agent',\n}\n\nexport interface AgentGalleryTestIds {\n emptyCta: string\n createButton: string\n gallery: string\n}\n\nexport interface AgentGalleryProps {\n /** Number of agents; 0 shows the first-run empty state instead of the grid. */\n count: number\n onCreate: () => void\n /** The AgentCard children. */\n children?: ReactNode\n /** Intro line next to the New agent button (wins over `labels.description`). */\n description?: string\n labels?: Partial<AgentGalleryLabels>\n testIds?: Partial<AgentGalleryTestIds>\n className?: string\n}\n\n/** Agents grid with an intro row + New agent action, or a first-run empty state. */\nexport function AgentGallery({\n count,\n onCreate,\n children,\n description,\n labels,\n testIds,\n className,\n}: AgentGalleryProps) {\n const l = { ...DEFAULT_AGENT_GALLERY_LABELS, ...labels }\n if (count === 0) {\n return (\n <div className={cn('mt-8', className)}>\n <EmptyState\n className=\"rounded-lg border-0 bg-muted\"\n icon={Bot}\n title={l.emptyTitle}\n description={l.emptyDescription}\n action={\n <Button\n onClick={onCreate}\n className=\"gap-1.5\"\n data-testid={testIdOr(testIds?.emptyCta, { testId: 'agent-empty-cta' })}\n >\n <Sparkles size={16} /> {l.emptyCta}\n </Button>\n }\n />\n </div>\n )\n }\n return (\n <div className={className}>\n <div className=\"mb-4 flex flex-wrap items-center justify-between gap-x-3 gap-y-2\">\n <p className=\"min-w-0 text-sm text-muted-foreground\">{description ?? l.description}</p>\n <Button\n size=\"sm\"\n onClick={onCreate}\n className=\"h-8 gap-1.5 pointer-coarse:h-11\"\n data-testid={testIdOr(testIds?.createButton, { testId: 'agent-create-button' })}\n >\n <Plus size={16} /> {l.newAgent}\n </Button>\n </div>\n <div\n className=\"grid grid-cols-[repeat(auto-fill,minmax(16rem,1fr))] gap-4\"\n data-testid={testIdOr(testIds?.gallery, { testId: 'agent-gallery' })}\n data-slot=\"agent-gallery\"\n >\n {children}\n </div>\n </div>\n )\n}\n","import type { HTMLAttributes, MouseEvent, ReactNode } from 'react'\nimport { Download, Eye, Globe, Lock, Pencil } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { ActionLink } from '../../components/ActionLink'\nimport { testIdOr } from '../../chat/test-id'\nimport {\n SkillActionButton,\n SkillGlobalBadge,\n SkillTypeBadge,\n activateOnKey,\n type SkillGlobalBadgeLabels,\n} from './SkillParts'\n\nexport interface SkillCardLabels extends SkillGlobalBadgeLabels {\n preview: string\n edit: string\n export: string\n makePrivate: string\n makePrivateTooltip: string\n publish: string\n}\n\nexport const DEFAULT_SKILL_CARD_LABELS: SkillCardLabels = {\n global: 'Global',\n globalTitle: 'Shared with everyone in the marketplace',\n preview: 'Preview skill',\n edit: 'Edit skill',\n export: 'Export skill',\n makePrivate: 'Make private',\n makePrivateTooltip: 'Make private (unpublish)',\n publish: 'Publish to marketplace',\n}\n\nexport interface SkillCardTestIds {\n root: string\n preview: string\n edit: string\n export: string\n toggleVisibility: string\n}\n\nexport interface SkillCardProps {\n name: string\n description: string\n /** Skill type; a small badge is shown when not `markdown`. */\n type?: string\n /** `global` shows a badge and drives the publish toggle. */\n visibility?: 'mine' | 'global'\n /** Only owners see the publish toggle. */\n isOwner?: boolean\n /** Leading icon (the app supplies its skill entity icon). */\n icon?: ReactNode\n /** Invoke the skill (row click / Enter / Space). */\n onClick: () => void\n onPreview: (e: MouseEvent) => void\n onEdit: (e: MouseEvent) => void\n onExport: (e: MouseEvent) => void\n /** Publish / unpublish. Owner-only; omit to hide. */\n onToggleVisibility?: (e: MouseEvent) => void\n /** Destination of the skill; the name becomes a real link (modified clicks go to the browser). */\n href?: string\n labels?: Partial<SkillCardLabels>\n testId?: string\n testIds?: Partial<SkillCardTestIds>\n className?: string\n}\n\n/**\n * Horizontal skill row: icon + `/name` + badges + description, with preview / edit / export /\n * publish actions. All actions are always visible (nothing is hover-only).\n */\nexport function SkillCard({\n name,\n description,\n type,\n visibility = 'mine',\n isOwner = true,\n icon,\n onClick,\n onPreview,\n onEdit,\n onExport,\n onToggleVisibility,\n href,\n labels,\n testId,\n testIds,\n className,\n ...rest\n}: SkillCardProps & Omit<HTMLAttributes<HTMLDivElement>, keyof SkillCardProps | 'onClick'>) {\n const l = { ...DEFAULT_SKILL_CARD_LABELS, ...labels }\n const isGlobal = visibility === 'global'\n return (\n <div\n {...rest}\n role=\"button\"\n tabIndex={0}\n className={cn(\n 'flex w-full cursor-pointer flex-wrap items-center gap-x-3 gap-y-1 rounded-lg bg-muted px-4 py-3 transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className\n )}\n onClick={onClick}\n onKeyDown={activateOnKey(onClick)}\n data-skill-name={name}\n data-testid={testIdOr(testId ?? testIds?.root, { testId: 'skill-card' })}\n data-slot=\"skill-card\"\n >\n {icon && <span className=\"shrink-0 text-primary [&>svg]:size-5\">{icon}</span>}\n {href ? (\n // The link owns plain + modified clicks; stop the row handler from double-firing.\n <span onClick={(e) => e.stopPropagation()}>\n <ActionLink\n href={href}\n onSelect={onClick}\n className=\"whitespace-nowrap font-mono text-sm font-medium\"\n >\n /{name}\n </ActionLink>\n </span>\n ) : (\n <span className=\"whitespace-nowrap font-mono text-sm font-medium\">/{name}</span>\n )}\n {type && type !== 'markdown' && <SkillTypeBadge type={type} />}\n {isGlobal && <SkillGlobalBadge labels={l} />}\n <span className=\"min-w-0 text-sm text-muted-foreground max-sm:order-last max-sm:w-full max-sm:line-clamp-2 sm:flex-1 sm:truncate\">\n {description}\n </span>\n <span className=\"ml-auto flex shrink-0 items-center gap-1\" data-slot=\"skill-card-actions\">\n <SkillActionButton\n label={l.preview}\n onClick={onPreview}\n testId={testIdOr(testIds?.preview, { testId: 'preview-skill-button' })}\n >\n <Eye className=\"size-4 text-muted-foreground\" />\n </SkillActionButton>\n <SkillActionButton\n label={l.edit}\n onClick={onEdit}\n testId={testIdOr(testIds?.edit, { testId: 'edit-skill-button' })}\n >\n <Pencil className=\"size-4 text-muted-foreground\" />\n </SkillActionButton>\n <SkillActionButton\n label={l.export}\n onClick={onExport}\n testId={testIdOr(testIds?.export, { testId: 'export-skill-button' })}\n >\n <Download className=\"size-4 text-muted-foreground\" />\n </SkillActionButton>\n {isOwner && onToggleVisibility && (\n <SkillActionButton\n label={isGlobal ? l.makePrivate : l.publish}\n tooltip={isGlobal ? l.makePrivateTooltip : l.publish}\n onClick={onToggleVisibility}\n testId={testIdOr(testIds?.toggleVisibility, {\n testId: 'toggle-skill-visibility-button',\n })}\n >\n {isGlobal ? (\n <Lock className=\"size-4 text-muted-foreground\" />\n ) : (\n <Globe className=\"size-4 text-primary\" />\n )}\n </SkillActionButton>\n )}\n </span>\n </div>\n )\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { Eye, Globe, Lock, Pencil, Trash2 } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { ActionLink } from '../../components/ActionLink'\nimport { testIdOr } from '../../chat/test-id'\nimport {\n SkillActionButton,\n SkillGlobalBadge,\n SkillTypeBadge,\n activateOnKey,\n type SkillGlobalBadgeLabels,\n} from './SkillParts'\n\nexport interface SkillRowLabels extends SkillGlobalBadgeLabels {\n preview: string\n edit: string\n makePrivate: string\n publish: string\n delete: string\n /** Row tooltip; receives the skill name. */\n insertTitle: (name: string) => string\n}\n\nexport const DEFAULT_SKILL_ROW_LABELS: SkillRowLabels = {\n global: 'Global',\n globalTitle: 'Shared with everyone in the marketplace',\n preview: 'Preview',\n edit: 'Edit',\n makePrivate: 'Make private',\n publish: 'Publish to marketplace',\n delete: 'Delete',\n insertTitle: (name) => `Insert /${name} into the chat`,\n}\n\nexport interface SkillRowProps {\n name: string\n description?: string\n type?: string\n isGlobal?: boolean\n icon?: ReactNode\n /** Invoke the skill (inserts `/name` into the chat). */\n onInvoke: () => void\n onPreview: () => void\n /** Owner-only actions: omit to hide. */\n onEdit?: () => void\n onTogglePublish?: () => void\n onDelete?: () => void\n /** Destination of the skill; the name becomes a real link (modified clicks go to the browser). */\n href?: string\n labels?: Partial<SkillRowLabels>\n /** Overrides the default `skills-panel-row-{name}` id. */\n testId?: string\n className?: string\n}\n\n/** Compact two-line skill row for side panels. Actions are always visible. */\nexport function SkillRow({\n name,\n description,\n type,\n isGlobal = false,\n icon,\n onInvoke,\n onPreview,\n onEdit,\n onTogglePublish,\n onDelete,\n href,\n labels,\n testId,\n className,\n ...rest\n}: SkillRowProps & Omit<HTMLAttributes<HTMLDivElement>, keyof SkillRowProps | 'onClick'>) {\n const l = { ...DEFAULT_SKILL_ROW_LABELS, ...labels }\n return (\n <div\n {...rest}\n role=\"button\"\n tabIndex={0}\n className={cn(\n 'flex cursor-pointer items-center gap-2 px-4 py-2 hover:bg-accent/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring',\n className\n )}\n onClick={onInvoke}\n onKeyDown={activateOnKey(onInvoke)}\n data-testid={testIdOr(testId, { testId: `skills-panel-row-${name}` })}\n data-slot=\"skill-row\"\n title={l.insertTitle(name)}\n >\n {icon && <span className=\"shrink-0 text-primary [&>svg]:size-4\">{icon}</span>}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-1.5\">\n {href ? (\n // The link owns plain + modified clicks; stop the row handler from double-firing.\n <span className=\"min-w-0\" onClick={(e) => e.stopPropagation()}>\n <ActionLink href={href} onSelect={onInvoke} className=\"truncate font-mono text-sm\">\n /{name}\n </ActionLink>\n </span>\n ) : (\n <span className=\"truncate font-mono text-sm\">/{name}</span>\n )}\n {type && type !== 'markdown' && <SkillTypeBadge type={type} />}\n {isGlobal && <SkillGlobalBadge labels={l} />}\n </div>\n {description && <div className=\"truncate text-xs text-muted-foreground\">{description}</div>}\n </div>\n <div className=\"flex shrink-0 items-center gap-0.5\">\n <SkillActionButton label={l.preview} onClick={() => onPreview()}>\n <Eye className=\"size-4\" />\n </SkillActionButton>\n {onEdit && (\n <SkillActionButton label={l.edit} onClick={() => onEdit()}>\n <Pencil className=\"size-4\" />\n </SkillActionButton>\n )}\n {onTogglePublish && (\n <SkillActionButton\n label={isGlobal ? l.makePrivate : l.publish}\n onClick={() => onTogglePublish()}\n >\n {isGlobal ? <Lock className=\"size-4\" /> : <Globe className=\"size-4 text-primary\" />}\n </SkillActionButton>\n )}\n {onDelete && (\n <SkillActionButton label={l.delete} onClick={() => onDelete()}>\n <Trash2 className=\"size-4 text-destructive\" />\n </SkillActionButton>\n )}\n </div>\n </div>\n )\n}\n","import { ListChecks, Loader2, Plus, Sparkles, Trash2 } from 'lucide-react'\nimport { Badge, Button, Label, Slider, Textarea } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface TaskPlanCriterionView {\n id: string\n text: string\n}\n\n/** Reviewable definition-of-done for a goal task. Extra fields on the caller's type are preserved. */\nexport interface TaskPlanView {\n goal: string\n criteria: TaskPlanCriterionView[]\n max_passes: number\n documents: string[]\n}\n\n/** Fixed strings of the goal-plan editor. */\nexport interface TaskPlanLabels {\n emptyTitle: string\n emptyBody: string\n drafting: string\n generate: string\n needWorkspace: string\n needObjective: string\n goalTask: string\n /** \"scoped to {workspace}\" prefix. */\n scopedTo: string\n redraft: string\n removePlan: string\n goal: string\n goalPlaceholder: string\n checklist: string\n /** e.g. \"3 criteria\". */\n criteriaCount: (count: number) => string\n add: string\n noCriteria: string\n criterionPlaceholder: string\n removeCriterion: (n: number) => string\n retryBudget: string\n /** e.g. \"up to 3 passes\". */\n passes: (count: number) => string\n passesHelp: string\n workingDocuments: string\n workingDocumentsHelp: string\n}\n\nexport const DEFAULT_TASK_PLAN_LABELS: TaskPlanLabels = {\n emptyTitle: 'Draft a plan to review',\n emptyBody:\n 'The assistant writes a short checklist of what its work must cover. You can edit it, and it checks its own draft against it before handing it to you.',\n drafting: 'Drafting plan…',\n generate: 'Draft a plan',\n needWorkspace: 'Open a workspace to plan: the checklist is encrypted under its key.',\n needObjective: 'Say what the assistant should do first: the plan is drafted from it.',\n goalTask: 'Drafted for your review',\n scopedTo: 'for',\n redraft: 'Redraft',\n removePlan: 'Remove plan',\n goal: 'Objective',\n goalPlaceholder: 'What should the finished work achieve?',\n checklist: 'The draft must',\n criteriaCount: (count) => `${count} ${count === 1 ? 'criterion' : 'criteria'}`,\n add: 'Add',\n noCriteria: 'Nothing yet. Add at least one thing the draft must cover.',\n criterionPlaceholder: 'Something specific you can check…',\n removeCriterion: (n) => `Remove item ${n}`,\n retryBudget: 'Revision rounds',\n passes: (count) => `up to ${count} ${count === 1 ? 'round' : 'rounds'}`,\n passesHelp: 'How many times the assistant may revise its own draft before it hands it over.',\n workingDocuments: 'Documents it will use',\n workingDocumentsHelp: 'The plan limits the assistant to these documents.',\n}\n\nexport interface TaskPlanTestIds {\n generate: string\n editor: string\n regenerate: string\n remove: string\n goal: string\n addCriterion: string\n criteria: string\n passes: string\n documents: string\n /** Per criterion index (default `task-plan-criterion-{idx}`). */\n criterion: (idx: number) => string\n /** Per criterion index (default `task-plan-remove-criterion-{idx}`). */\n removeCriterionButton: (idx: number) => string\n}\n\nexport interface TaskPlanProps<P extends TaskPlanView> {\n /** The current plan, or null when the task has no plan yet. */\n plan: P | null\n /** Called with the edited plan, or null when the plan is removed. */\n onChange: (plan: P | null) => void\n /** Draft a plan from the objective. */\n onGenerate: () => void\n isGenerating: boolean\n /** The active workspace the plan is scoped to (null: none open, so generating is disabled). */\n workspaceName: string | null\n /** The objective the planner drafts from (the task's prompt). */\n objective: string\n /** Document id → file name, so the plan shows names instead of ids. */\n documentNames?: Record<string, string>\n testIds?: Partial<TaskPlanTestIds>\n labels?: Partial<TaskPlanLabels>\n}\n\n/** Stable, collision-free criterion ids (c1, c2, ...) by high-water mark, independent of order. */\nexport function nextCriterionId(criteria: TaskPlanCriterionView[]): string {\n const max = criteria.reduce((m, c) => {\n const n = Number(/^c(\\d+)$/.exec(c.id)?.[1] ?? 0)\n return Number.isFinite(n) && n > m ? n : m\n }, 0)\n return `c${max + 1}`\n}\n\n/**\n * Goal-plan editor: empty-state pitch with a single Generate action, or (with a plan) goal,\n * acceptance checklist, retry budget and working documents.\n */\nexport function TaskPlan<P extends TaskPlanView>({\n plan,\n onChange,\n onGenerate,\n isGenerating,\n workspaceName,\n objective,\n documentNames,\n testIds,\n labels,\n}: TaskPlanProps<P>) {\n const l = { ...DEFAULT_TASK_PLAN_LABELS, ...labels }\n const canGenerate = !!workspaceName && !!objective.trim() && !isGenerating\n\n if (!plan) {\n return (\n <div\n className=\"flex flex-col gap-3 rounded-lg bg-muted p-4 sm:flex-row sm:items-center sm:justify-between\"\n data-slot=\"task-plan-empty\"\n >\n <div className=\"flex min-w-0 items-start gap-3\">\n <ListChecks className=\"mt-0.5 size-5 shrink-0 text-muted-foreground\" aria-hidden />\n <div className=\"space-y-0.5\">\n <p className=\"text-sm font-medium\">{l.emptyTitle}</p>\n <p className=\"max-w-md text-xs text-muted-foreground\">{l.emptyBody}</p>\n {!workspaceName ? (\n <p className=\"text-xs text-muted-foreground\">{l.needWorkspace}</p>\n ) : !objective.trim() ? (\n <p className=\"text-xs text-muted-foreground\">{l.needObjective}</p>\n ) : null}\n </div>\n </div>\n <Button\n type=\"button\"\n onClick={onGenerate}\n disabled={!canGenerate}\n className=\"shrink-0\"\n data-testid={testIdOr(testIds?.generate, { testId: 'task-plan-generate' })}\n >\n {isGenerating ? (\n <>\n <Loader2 className=\"size-4 animate-spin\" />\n {l.drafting}\n </>\n ) : (\n <>\n <Sparkles className=\"size-4\" />\n {l.generate}\n </>\n )}\n </Button>\n </div>\n )\n }\n\n const patch = (fields: Partial<TaskPlanView>) => onChange({ ...plan, ...fields })\n const setCriterion = (idx: number, text: string) =>\n patch({ criteria: plan.criteria.map((c, i) => (i === idx ? { ...c, text } : c)) })\n const addCriterion = () =>\n patch({ criteria: [...plan.criteria, { id: nextCriterionId(plan.criteria), text: '' }] })\n const removeCriterion = (idx: number) =>\n patch({ criteria: plan.criteria.filter((_, i) => i !== idx) })\n\n const count = plan.criteria.length\n return (\n <div\n className=\"space-y-5\"\n data-testid={testIdOr(testIds?.editor, { testId: 'task-plan-editor' })}\n data-slot=\"task-plan\"\n >\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <Badge variant=\"default\" className=\"gap-1\">\n <ListChecks className=\"size-3.5\" />\n {l.goalTask}\n </Badge>\n {workspaceName && (\n <span className=\"truncate text-xs text-muted-foreground\">\n {l.scopedTo} <span className=\"font-medium\">{workspaceName}</span>\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={onGenerate}\n disabled={!canGenerate}\n data-testid={testIdOr(testIds?.regenerate, { testId: 'task-plan-regenerate' })}\n >\n {isGenerating ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Sparkles className=\"size-4\" />\n )}\n {l.redraft}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onChange(null)}\n data-testid={testIdOr(testIds?.remove, { testId: 'task-plan-remove' })}\n >\n {l.removePlan}\n </Button>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-plan-goal\">{l.goal}</Label>\n <Textarea\n id=\"task-plan-goal\"\n value={plan.goal}\n onChange={(e) => patch({ goal: e.target.value })}\n placeholder={l.goalPlaceholder}\n rows={2}\n data-testid={testIdOr(testIds?.goal, { testId: 'task-plan-goal' })}\n />\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label>\n {l.checklist}\n <span className=\"ml-1.5 text-xs font-normal text-muted-foreground\">\n {l.criteriaCount(count)}\n </span>\n </Label>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={addCriterion}\n data-testid={testIdOr(testIds?.addCriterion, { testId: 'task-plan-add-criterion' })}\n >\n <Plus className=\"size-4\" />\n {l.add}\n </Button>\n </div>\n\n {count === 0 ? (\n <p className=\"py-2 text-sm text-muted-foreground\">{l.noCriteria}</p>\n ) : (\n <ul\n className=\"space-y-2\"\n data-testid={testIdOr(testIds?.criteria, { testId: 'task-plan-criteria' })}\n >\n {plan.criteria.map((c, idx) => (\n <li key={c.id} className=\"flex items-start gap-2\">\n <span className=\"mt-1.5 flex size-6 shrink-0 select-none items-center justify-center rounded-full bg-muted text-xs font-medium text-muted-foreground\">\n {idx + 1}\n </span>\n <Textarea\n value={c.text}\n rows={2}\n onChange={(e) => setCriterion(idx, e.target.value)}\n placeholder={l.criterionPlaceholder}\n className=\"field-sizing-content min-h-[3.25rem] resize-none\"\n data-testid={testIdOr(testIds?.criterion?.(idx), {\n testId: `task-plan-criterion-${idx}`,\n })}\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"mt-0.5 shrink-0 text-muted-foreground hover:text-destructive pointer-coarse:size-11\"\n onClick={() => removeCriterion(idx)}\n aria-label={l.removeCriterion(idx + 1)}\n data-testid={testIdOr(testIds?.removeCriterionButton?.(idx), {\n testId: `task-plan-remove-criterion-${idx}`,\n })}\n >\n <Trash2 className=\"size-4\" />\n </Button>\n </li>\n ))}\n </ul>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-plan-passes\">\n {l.retryBudget}\n <span className=\"ml-1.5 text-xs font-normal text-muted-foreground\">\n {l.passes(plan.max_passes)}\n </span>\n </Label>\n <Slider\n id=\"task-plan-passes\"\n min={1}\n max={8}\n step={1}\n value={[plan.max_passes]}\n onValueChange={([v]) => patch({ max_passes: v })}\n data-testid={testIdOr(testIds?.passes, { testId: 'task-plan-passes' })}\n />\n <p className=\"text-xs text-muted-foreground\">{l.passesHelp}</p>\n </div>\n\n {plan.documents.length > 0 && (\n <div className=\"space-y-2\">\n <Label>{l.workingDocuments}</Label>\n <div\n className=\"flex flex-wrap gap-1.5\"\n data-testid={testIdOr(testIds?.documents, { testId: 'task-plan-documents' })}\n >\n {plan.documents.map((d) => (\n <Badge key={d} variant=\"secondary\" className=\"text-xs\" title={d}>\n {documentNames?.[d] ?? d}\n </Badge>\n ))}\n </div>\n <p className=\"text-xs text-muted-foreground\">{l.workingDocumentsHelp}</p>\n </div>\n )}\n </div>\n )\n}\n","/** Compact elapsed time: 123ms, 5s, 2m 30s, 1h 15m. */\nexport function formatElapsed(startTime: number, endTime?: number): string {\n const elapsedMs = (endTime || Date.now()) - startTime\n if (elapsedMs < 1000) return `${Math.round(elapsedMs)}ms`\n if (elapsedMs < 60000) return `${Math.round(elapsedMs / 1000)}s`\n if (elapsedMs < 3600000) {\n const minutes = Math.floor(elapsedMs / 60000)\n const seconds = Math.round((elapsedMs % 60000) / 1000)\n return seconds > 0 ? `${minutes}m ${seconds}s` : `${minutes}m`\n }\n const hours = Math.floor(elapsedMs / 3600000)\n const minutes = Math.round((elapsedMs % 3600000) / 60000)\n return minutes > 0 ? `${hours}h ${minutes}m` : `${hours}h`\n}\n","import { useEffect, useState, type ReactNode } from 'react'\nimport { AlertTriangle, Check, FileX, Loader2, SkipForward, X, type LucideIcon } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { formatElapsed } from './elapsed'\n\nconst ACTIVE_STATUSES = new Set(['parsing', 'encrypting', 'indexing', 'analysing'])\nconst RUNNING_STATUSES = new Set(['queued', ...ACTIVE_STATUSES])\n\ninterface StatusTone {\n text: string\n bar: string\n Icon: LucideIcon\n}\n\nconst TONES: Record<string, StatusTone> = {\n completed: { text: 'text-green-text', bar: 'bg-green-text/90', Icon: Check },\n failed: { text: 'text-red-text', bar: 'bg-red-text/90', Icon: X },\n parsing: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n encrypting: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n indexing: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n analysing: { text: 'text-blue-text', bar: 'bg-blue-text/90', Icon: Loader2 },\n queued: { text: 'text-yellow-text', bar: 'bg-yellow-text/90', Icon: Loader2 },\n skipped: { text: 'text-gray-text', bar: 'bg-gray-text/90', Icon: SkipForward },\n empty: { text: 'text-yellow-text', bar: 'bg-yellow-text/90', Icon: FileX },\n 'low-content': { text: 'text-yellow-text', bar: 'bg-yellow-text/90', Icon: AlertTriangle },\n}\nconst DEFAULT_TONE: StatusTone = { text: 'text-gray-text', bar: 'bg-blue-text/90', Icon: Loader2 }\n\nexport interface UploadTaskItemLabels {\n /** Delete action text (failed rows). */\n delete: string\n /** Delete action tooltip. */\n deleteTitle: string\n /** aria-label of the progress bar. */\n progress: (fileName: string) => string\n /** Status line text; the default capitalises the raw status. */\n status: (status: string, percent: number) => string\n}\n\nexport const DEFAULT_UPLOAD_TASK_ITEM_LABELS: UploadTaskItemLabels = {\n delete: 'Delete',\n deleteTitle: 'Delete file',\n progress: (fileName) => `${fileName} progress`,\n status: (status, percent) => `${status.charAt(0).toUpperCase() + status.slice(1)} - ${percent}%`,\n}\n\n/** Per-row test ids derived from the task id (defaults `task-item-{id}`, ...). */\nexport interface UploadTaskItemTestIds {\n item: (taskId: string) => string\n fileName: (taskId: string) => string\n progressBar: (taskId: string) => string\n status: (taskId: string) => string\n delete: (taskId: string) => string\n}\n\nexport interface UploadTaskItemProps {\n taskId: string\n fileName: string\n /** queued | parsing | encrypting | indexing | analysing | completed | failed | skipped | empty | low-content */\n status: string\n /** 0-1 fraction or 0-100 percentage. */\n progress: number\n startTime?: number\n endTime?: number\n /** File-type icon for the row (the app maps the extension). */\n fileIcon?: ReactNode\n /** Shown as a Delete action on failed tasks. */\n onDelete?: (taskId: string) => void\n testIds?: Partial<UploadTaskItemTestIds>\n labels?: Partial<UploadTaskItemLabels>\n className?: string\n}\n\n/** One document-processing row: status icon, file, progress bar, status text + elapsed time. */\nexport function UploadTaskItem({\n taskId,\n fileName,\n status,\n progress,\n startTime,\n endTime,\n fileIcon,\n onDelete,\n testIds,\n labels,\n className,\n}: UploadTaskItemProps) {\n const l = { ...DEFAULT_UPLOAD_TASK_ITEM_LABELS, ...labels }\n const [elapsed, setElapsed] = useState('')\n\n useEffect(() => {\n if (!startTime) {\n setElapsed('')\n return\n }\n if (RUNNING_STATUSES.has(status)) {\n const tick = () => setElapsed(formatElapsed(startTime))\n tick()\n const interval = setInterval(tick, 1000)\n return () => clearInterval(interval)\n }\n setElapsed(formatElapsed(startTime, endTime))\n }, [startTime, endTime, status])\n\n const percent = progress > 1 ? progress : progress * 100\n const tone = TONES[status] ?? DEFAULT_TONE\n const StatusIcon = tone.Icon\n\n return (\n <div\n className={cn(\n 'mb-2 w-full max-w-full overflow-hidden rounded-md bg-muted p-2 box-border',\n className\n )}\n data-testid={testIdOr(testIds?.item?.(taskId), { testId: `task-item-${taskId}` })}\n data-slot=\"upload-task-item\"\n >\n <div className=\"mb-1 flex w-full max-w-full items-center gap-2 overflow-hidden\">\n <div className={cn('shrink-0', tone.text)}>\n <StatusIcon className={cn('size-4', ACTIVE_STATUSES.has(status) && 'animate-spin')} />\n </div>\n {fileIcon && <div className=\"shrink-0\">{fileIcon}</div>}\n <div\n className=\"min-w-0 flex-1 truncate text-sm font-medium\"\n title={fileName}\n data-testid={testIdOr(testIds?.fileName?.(taskId), { testId: `task-filename-${taskId}` })}\n >\n {fileName}\n </div>\n </div>\n\n <div\n className=\"mb-1 h-2 w-full max-w-full overflow-hidden rounded-md bg-background\"\n data-testid={testIdOr(testIds?.progressBar?.(taskId), {\n testId: `task-progress-bar-${taskId}`,\n })}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={Math.round(percent)}\n aria-label={l.progress(fileName)}\n >\n <div\n className={cn('h-2 rounded-md transition-all duration-300 ease-in-out', tone.bar)}\n style={{ width: `${percent}%` }}\n />\n </div>\n\n <div className=\"flex w-full max-w-full items-center justify-between overflow-hidden text-sm\">\n <span\n className=\"truncate text-gray-text\"\n data-testid={testIdOr(testIds?.status?.(taskId), { testId: `task-status-${taskId}` })}\n >\n {l.status(status, Math.round(percent))}\n {elapsed && <span className=\"ml-2 text-muted-foreground\">({elapsed})</span>}\n </span>\n\n {status === 'failed' && onDelete && (\n <button\n type=\"button\"\n onClick={() => onDelete(taskId)}\n className=\"shrink-0 text-sm text-red-text hover:text-red-text/80 pointer-coarse:min-h-11 pointer-coarse:px-3\"\n title={l.deleteTitle}\n data-testid={testIdOr(testIds?.delete?.(taskId), { testId: `delete-task-${taskId}` })}\n >\n {l.delete}\n </button>\n )}\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { UploadTaskItem, type UploadTaskItemLabels } from './UploadTaskItem'\n\nexport interface UploadTaskView {\n fileName: string\n status: string\n progress: number\n startTime?: number\n endTime?: number\n}\n\nexport interface UploadTaskListProps {\n tasks: Record<string, UploadTaskView>\n /** Include only matching tasks. */\n filter?: (taskId: string, task: UploadTaskView) => boolean\n title?: string\n onDelete?: (taskId: string) => void\n /** File-type icon per file name. */\n renderFileIcon?: (fileName: string) => ReactNode\n /** Render the \"No documents in this category\" message when empty (default true). */\n showEmptyState?: boolean\n testIds?: Partial<{ root: string; empty: string; title: string }>\n labels?: Partial<UploadTaskListLabels>\n /** Labels forwarded to every row. */\n itemLabels?: Partial<UploadTaskItemLabels>\n className?: string\n}\n\nexport interface UploadTaskListLabels {\n title: string\n empty: string\n}\n\nexport const DEFAULT_UPLOAD_TASK_LIST_LABELS: UploadTaskListLabels = {\n title: 'Active Tasks',\n empty: 'No documents in this category',\n}\n\nexport function UploadTaskList({\n tasks,\n filter,\n title,\n onDelete,\n renderFileIcon,\n showEmptyState = true,\n testIds,\n labels,\n itemLabels,\n className,\n}: UploadTaskListProps) {\n const l = { ...DEFAULT_UPLOAD_TASK_LIST_LABELS, ...labels }\n const heading = title ?? l.title\n const safeTasks = typeof tasks === 'object' && tasks !== null ? tasks : {}\n let entries = Object.entries(safeTasks)\n if (filter) entries = entries.filter(([id, task]) => filter(id, task))\n\n if (entries.length === 0) {\n return showEmptyState ? (\n <div\n className=\"text-sm italic text-muted-foreground\"\n data-testid={testIdOr(testIds?.empty, { testId: 'task-list-empty-state' })}\n >\n {l.empty}\n </div>\n ) : null\n }\n\n return (\n <div\n data-testid={testIdOr(testIds?.root, { testId: 'task-status-list' })}\n data-slot=\"upload-task-list\"\n className={cn('box-border w-full max-w-full', className)}\n >\n {heading && (\n <h3\n className=\"mb-2 truncate text-sm font-semibold\"\n data-testid={testIdOr(testIds?.title, { testId: 'task-list-title' })}\n >\n {heading}\n </h3>\n )}\n <div className=\"box-border w-full max-w-full overflow-hidden\">\n {entries.map(([taskId, task]) => (\n <UploadTaskItem\n key={taskId}\n taskId={taskId}\n fileName={task.fileName}\n status={task.status}\n progress={task.progress}\n startTime={task.startTime}\n endTime={task.endTime}\n fileIcon={renderFileIcon?.(task.fileName)}\n onDelete={onDelete}\n labels={itemLabels}\n className=\"box-border max-w-full\"\n />\n ))}\n </div>\n </div>\n )\n}\n","/**\n * Minimal RRULE helpers for the Tasks recurrence builder.\n *\n * We only generate the constrained subset the friendly builder needs\n * (FREQ=DAILY|WEEKLY|MONTHLY with BYDAY / BYMONTHDAY + BYHOUR/BYMINUTE). The\n * backend (dateutil) is the source of truth for validation — these strings are\n * a valid subset of iCal RRULE. Power users can still hand-write any RRULE in\n * the advanced field; `describeRRule` falls back to the raw string for rules\n * outside the builder's subset.\n */\n\nexport type RecurrenceFrequency = 'daily' | 'weekly' | 'monthly'\n\n/** iCal two-letter weekday codes, in display order (Mon-first). */\nexport const WEEKDAYS = ['MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU'] as const\nexport type Weekday = (typeof WEEKDAYS)[number]\n\nconst WEEKDAY_LABELS: Record<Weekday, string> = {\n MO: 'Mon',\n TU: 'Tue',\n WE: 'Wed',\n TH: 'Thu',\n FR: 'Fri',\n SA: 'Sat',\n SU: 'Sun',\n}\n\nexport interface RecurrencePreset {\n frequency: RecurrenceFrequency\n /** Selected weekdays (weekly only). */\n weekdays: Weekday[]\n /** Day of month 1-31 (monthly only). */\n monthDay: number\n /** Hour 0-23. */\n hour: number\n /** Minute 0-59. */\n minute: number\n}\n\nexport const DEFAULT_RECURRENCE: RecurrencePreset = {\n frequency: 'daily',\n weekdays: ['MO'],\n monthDay: 1,\n hour: 9,\n minute: 0,\n}\n\nconst pad2 = (n: number) => String(n).padStart(2, '0')\n\n/** Build an RRULE string from the friendly preset. */\nexport function buildRRule(preset: RecurrencePreset): string {\n const parts: string[] = []\n if (preset.frequency === 'daily') {\n parts.push('FREQ=DAILY')\n } else if (preset.frequency === 'weekly') {\n parts.push('FREQ=WEEKLY')\n const days = preset.weekdays.length > 0 ? preset.weekdays : ['MO']\n parts.push(`BYDAY=${days.join(',')}`)\n } else {\n parts.push('FREQ=MONTHLY')\n parts.push(`BYMONTHDAY=${preset.monthDay}`)\n }\n parts.push(`BYHOUR=${preset.hour}`)\n parts.push(`BYMINUTE=${preset.minute}`)\n return parts.join(';')\n}\n\n/** Parse an RRULE token map (UPPERCASE keys → string values). */\nfunction tokenize(rrule: string): Record<string, string> {\n const out: Record<string, string> = {}\n for (const segment of rrule.split(';')) {\n const [rawKey, rawVal] = segment.split('=')\n if (rawKey && rawVal !== undefined) out[rawKey.trim().toUpperCase()] = rawVal.trim()\n }\n return out\n}\n\n/**\n * Best-effort parse of an RRULE back into the builder's preset. Returns null\n * for rules outside the supported subset (so the editor shows the advanced\n * raw field instead).\n */\nexport function parseRRule(rrule: string | null | undefined): RecurrencePreset | null {\n if (!rrule) return null\n const t = tokenize(rrule)\n const freq = t.FREQ?.toUpperCase()\n if (freq !== 'DAILY' && freq !== 'WEEKLY' && freq !== 'MONTHLY') return null\n\n // Reject anything with modifiers the builder can't represent (INTERVAL>1,\n // COUNT, UNTIL, BYSETPOS, …) so we don't silently drop them on round-trip.\n const allowed = new Set(['FREQ', 'BYDAY', 'BYMONTHDAY', 'BYHOUR', 'BYMINUTE'])\n if (Object.keys(t).some((k) => !allowed.has(k))) return null\n\n const hour = t.BYHOUR !== undefined ? Number(t.BYHOUR) : DEFAULT_RECURRENCE.hour\n const minute = t.BYMINUTE !== undefined ? Number(t.BYMINUTE) : 0\n if (!Number.isInteger(hour) || hour < 0 || hour > 23) return null\n if (!Number.isInteger(minute) || minute < 0 || minute > 59) return null\n\n if (freq === 'DAILY') {\n if (t.BYDAY || t.BYMONTHDAY) return null\n return { ...DEFAULT_RECURRENCE, frequency: 'daily', hour, minute }\n }\n if (freq === 'WEEKLY') {\n if (t.BYMONTHDAY) return null\n const weekdays = (t.BYDAY ? t.BYDAY.split(',') : ['MO'])\n .map((d) => d.trim().toUpperCase())\n .filter((d): d is Weekday => (WEEKDAYS as readonly string[]).includes(d))\n if (weekdays.length === 0) return null\n return { ...DEFAULT_RECURRENCE, frequency: 'weekly', weekdays, hour, minute }\n }\n // MONTHLY\n if (t.BYDAY) return null\n const monthDay = t.BYMONTHDAY !== undefined ? Number(t.BYMONTHDAY) : 1\n if (!Number.isInteger(monthDay) || monthDay < 1 || monthDay > 31) return null\n return { ...DEFAULT_RECURRENCE, frequency: 'monthly', monthDay, hour, minute }\n}\n\nconst ordinal = (n: number): string => {\n const s = ['th', 'st', 'nd', 'rd']\n const v = n % 100\n return n + (s[(v - 20) % 10] || s[v] || s[0])\n}\n\n/** Human-readable summary of an RRULE; falls back to the raw rule when unknown. */\nexport function describeRRule(rrule: string | null | undefined): string {\n if (!rrule) return 'Recurring'\n const preset = parseRRule(rrule)\n if (!preset) return rrule // advanced/raw rule — show as-is\n const time = `${pad2(preset.hour)}:${pad2(preset.minute)}`\n if (preset.frequency === 'daily') return `Daily at ${time}`\n if (preset.frequency === 'weekly') {\n const days = preset.weekdays.map((d) => WEEKDAY_LABELS[d]).join(', ')\n return `Weekly on ${days} at ${time}`\n }\n return `Monthly on the ${ordinal(preset.monthDay)} at ${time}`\n}\n","/**\n * Friendly recurrence builder for a recurring Task. Generates an RRULE from a\n * frequency + time (+ weekdays / day-of-month) and offers a collapsible\n * \"Advanced\" field for hand-writing any RRULE the presets can't express.\n */\nimport { useEffect, useState } from 'react'\nimport {\n Button,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n cn,\n} from '@arbidocs/react/ui'\nimport {\n buildRRule,\n DEFAULT_RECURRENCE,\n parseRRule,\n type RecurrenceFrequency,\n type RecurrencePreset,\n type Weekday,\n WEEKDAYS,\n} from './rrule'\nimport { testIdOr } from '../../chat/test-id'\n\n/** Fixed strings of the recurrence builder. */\nexport interface RecurrenceBuilderLabels {\n rruleLabel: string\n rrulePlaceholder: string\n backToSimple: string\n repeat: string\n daily: string\n weekly: string\n monthly: string\n onDay: string\n at: string\n on: string\n advanced: string\n /** Single-letter weekday chips. */\n weekdayShort: Record<Weekday, string>\n}\n\nexport const DEFAULT_RECURRENCE_BUILDER_LABELS: RecurrenceBuilderLabels = {\n rruleLabel: 'Custom schedule (iCalendar rule)',\n rrulePlaceholder: 'FREQ=WEEKLY;BYDAY=MO;BYHOUR=8',\n backToSimple: '← Back to simple',\n repeat: 'Repeat',\n daily: 'Daily',\n weekly: 'Weekly',\n monthly: 'Monthly',\n onDay: 'On day',\n at: 'At',\n on: 'On',\n advanced: 'Custom schedule…',\n weekdayShort: { MO: 'M', TU: 'T', WE: 'W', TH: 'T', FR: 'F', SA: 'S', SU: 'S' },\n}\n\nexport interface RecurrenceBuilderTestIds {\n rruleRaw: string\n simple: string\n builder: string\n frequency: string\n monthDay: string\n time: string\n advanced: string\n /** Per weekday chip (default `task-weekday-{MO..SU}`). */\n weekday: (day: Weekday) => string\n}\n\nexport interface RecurrenceBuilderProps {\n rrule: string\n onChange: (rrule: string) => void\n testIds?: Partial<RecurrenceBuilderTestIds>\n labels?: Partial<RecurrenceBuilderLabels>\n}\n\nconst pad2 = (n: number) => String(n).padStart(2, '0')\n\nexport function RecurrenceBuilder({ rrule, onChange, testIds, labels }: RecurrenceBuilderProps) {\n const l = { ...DEFAULT_RECURRENCE_BUILDER_LABELS, ...labels }\n // Advanced when there's a rule we can't represent in the preset builder.\n const [advanced, setAdvanced] = useState(() => !!rrule && parseRRule(rrule) === null)\n const [preset, setPreset] = useState<RecurrencePreset>(\n () => parseRRule(rrule) ?? DEFAULT_RECURRENCE\n )\n\n // Seed the parent with a valid default rule on first mount when empty.\n useEffect(() => {\n if (!rrule) onChange(buildRRule(DEFAULT_RECURRENCE))\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const update = (next: RecurrencePreset) => {\n setPreset(next)\n onChange(buildRRule(next))\n }\n\n const toggleWeekday = (day: Weekday) => {\n const has = preset.weekdays.includes(day)\n const weekdays = has ? preset.weekdays.filter((d) => d !== day) : [...preset.weekdays, day]\n update({ ...preset, weekdays: weekdays.length > 0 ? weekdays : preset.weekdays })\n }\n\n const onTimeChange = (value: string) => {\n const [h, m] = value.split(':').map(Number)\n if (Number.isInteger(h) && Number.isInteger(m)) update({ ...preset, hour: h, minute: m })\n }\n\n if (advanced) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-rrule-raw\">{l.rruleLabel}</Label>\n <Input\n id=\"task-rrule-raw\"\n value={rrule}\n onChange={(e) => onChange(e.target.value)}\n placeholder={l.rrulePlaceholder}\n data-testid={testIdOr(testIds?.rruleRaw, { testId: 'task-rrule-raw' })}\n />\n <button\n type=\"button\"\n className=\"text-sm text-muted-foreground hover:text-foreground\"\n onClick={() => {\n const parsed = parseRRule(rrule)\n setPreset(parsed ?? DEFAULT_RECURRENCE)\n if (!parsed) onChange(buildRRule(DEFAULT_RECURRENCE))\n setAdvanced(false)\n }}\n data-testid={testIdOr(testIds?.simple, { testId: 'task-recurrence-simple' })}\n >\n {l.backToSimple}\n </button>\n </div>\n )\n }\n\n return (\n <div\n className=\"space-y-3\"\n data-testid={testIdOr(testIds?.builder, { testId: 'task-recurrence-builder' })}\n >\n <div className=\"flex items-end gap-3\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-frequency\">{l.repeat}</Label>\n <Select\n value={preset.frequency}\n onValueChange={(v) => update({ ...preset, frequency: v as RecurrenceFrequency })}\n >\n <SelectTrigger\n id=\"task-frequency\"\n className=\"w-[140px]\"\n data-testid={testIdOr(testIds?.frequency, { testId: 'task-frequency' })}\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"daily\">{l.daily}</SelectItem>\n <SelectItem value=\"weekly\">{l.weekly}</SelectItem>\n <SelectItem value=\"monthly\">{l.monthly}</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n {preset.frequency === 'monthly' && (\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-monthday\">{l.onDay}</Label>\n <Input\n id=\"task-monthday\"\n type=\"number\"\n min={1}\n max={31}\n className=\"w-20\"\n value={preset.monthDay}\n onChange={(e) => {\n const d = Math.min(31, Math.max(1, Number(e.target.value) || 1))\n update({ ...preset, monthDay: d })\n }}\n data-testid={testIdOr(testIds?.monthDay, { testId: 'task-monthday' })}\n />\n </div>\n )}\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"task-time\">{l.at}</Label>\n <Input\n id=\"task-time\"\n type=\"time\"\n className=\"w-28\"\n value={`${pad2(preset.hour)}:${pad2(preset.minute)}`}\n onChange={(e) => onTimeChange(e.target.value)}\n data-testid={testIdOr(testIds?.time, { testId: 'task-time' })}\n />\n </div>\n </div>\n\n {preset.frequency === 'weekly' && (\n <div className=\"space-y-2\">\n <Label>{l.on}</Label>\n <div className=\"flex gap-1\">\n {WEEKDAYS.map((day) => (\n <Button\n key={day}\n type=\"button\"\n size=\"icon\"\n variant={preset.weekdays.includes(day) ? 'default' : 'outline'}\n className={cn('h-8 w-8 rounded-full text-xs')}\n onClick={() => toggleWeekday(day)}\n data-testid={testIdOr(testIds?.weekday?.(day), { testId: `task-weekday-${day}` })}\n aria-pressed={preset.weekdays.includes(day)}\n >\n {l.weekdayShort[day]}\n </Button>\n ))}\n </div>\n </div>\n )}\n\n <button\n type=\"button\"\n className=\"text-sm text-muted-foreground hover:text-foreground\"\n onClick={() => setAdvanced(true)}\n data-testid={testIdOr(testIds?.advanced, { testId: 'task-recurrence-advanced' })}\n >\n {l.advanced}\n </button>\n </div>\n )\n}\n","import { FileText } from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\n/** A document a task produced, as the Outputs cell needs it. */\nexport interface TaskOutput {\n id: string\n name: string\n}\n\nexport interface TaskOutputsCellLabels {\n none: string\n /** Menu trigger's accessible name. */\n open: (count: number) => string\n /** \"+2\" next to the first file name. */\n more: (count: number) => string\n}\n\nexport const DEFAULT_TASK_OUTPUTS_CELL_LABELS: TaskOutputsCellLabels = {\n none: '—',\n open: (count) => `${count} ${count === 1 ? 'output' : 'outputs'}`,\n more: (count) => `+${count}`,\n}\n\nexport interface TaskOutputsCellProps {\n /** Task id: keys the test ids (`task-outputs-{id}`, `task-output-{id}-{docId}`). */\n id: string\n outputs?: readonly TaskOutput[]\n onOpen: (documentId: string) => void\n testId?: string\n labels?: Partial<TaskOutputsCellLabels>\n}\n\n/** The documents a task generated: the first file name and a count, with a menu that opens each. */\nexport function TaskOutputsCell({ id, outputs, onOpen, testId, labels }: TaskOutputsCellProps) {\n const l = { ...DEFAULT_TASK_OUTPUTS_CELL_LABELS, ...labels }\n const base = testIdOr(testId, { testId: `task-outputs-${id}` })\n if (!outputs || outputs.length === 0) {\n return (\n <span className=\"text-xs text-muted-foreground\" data-testid={base} data-state=\"none\">\n {l.none}\n </span>\n )\n }\n const [first] = outputs\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 max-w-full gap-1.5 px-2 text-xs\"\n aria-label={l.open(outputs.length)}\n data-testid={base}\n data-count={outputs.length}\n >\n <FileText className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{first.name}</span>\n {outputs.length > 1 && (\n <span className=\"shrink-0 text-muted-foreground\">{l.more(outputs.length - 1)}</span>\n )}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\">\n {outputs.map((o) => (\n <DropdownMenuItem\n key={o.id}\n onSelect={() => onOpen(o.id)}\n data-testid={`task-output-${id}-${o.id}`}\n >\n <FileText className=\"mr-2 size-4\" aria-hidden />\n <span className=\"truncate\">{o.name}</span>\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","import { useState } from 'react'\nimport { CornerDownRight } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n Input,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface TaskMoveOption {\n id: string\n label: string\n}\n\nexport interface TaskMoveDialogLabels {\n title: string\n none: string\n search: string\n empty: string\n cancel: string\n}\n\nexport interface TaskMoveDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** Where the task can go (the host excludes the task itself and its descendants). */\n options: TaskMoveOption[]\n /** The task's current parent, marked in the list. */\n currentParentId?: string | null\n /** `null` moves the task to the top level. */\n onPick: (parentId: string | null) => void\n labels: TaskMoveDialogLabels\n testId?: string\n}\n\n/** A parent picker: choose the task another task becomes a sub-task of, or the top level. */\nexport function TaskMoveDialog({\n open,\n onOpenChange,\n options,\n currentParentId,\n onPick,\n labels,\n testId,\n}: TaskMoveDialogProps) {\n const [query, setQuery] = useState('')\n const id = testIdOr(testId, { testId: 'task-move' })\n const q = query.trim().toLowerCase()\n const shown = q ? options.filter((o) => o.label.toLowerCase().includes(q)) : options\n const pick = (parentId: string | null) => {\n onPick(parentId)\n onOpenChange(false)\n }\n return (\n <Dialog\n open={open}\n onOpenChange={(next) => {\n if (!next) setQuery('')\n onOpenChange(next)\n }}\n >\n <DialogContent presentation=\"sheet\" className=\"max-h-[80dvh] sm:max-w-md\" data-testid={id}>\n <DialogHeader>\n <DialogTitle>{labels.title}</DialogTitle>\n <DialogDescription className=\"sr-only\">{labels.title}</DialogDescription>\n </DialogHeader>\n <Input\n value={query}\n placeholder={labels.search}\n aria-label={labels.search}\n onChange={(e) => setQuery(e.target.value)}\n data-testid={`${id}-search`}\n />\n <ul\n className=\"flex max-h-[50dvh] flex-col gap-1 overflow-y-auto\"\n data-testid={`${id}-list`}\n >\n {!q && (\n <li>\n <Button\n variant=\"ghost\"\n className=\"h-9 w-full justify-start gap-2 pointer-coarse:h-11\"\n disabled={!currentParentId}\n onClick={() => pick(null)}\n data-testid={`${id}-none`}\n >\n {labels.none}\n </Button>\n </li>\n )}\n {shown.map((o) => (\n <li key={o.id}>\n <Button\n variant=\"ghost\"\n className=\"h-9 w-full justify-start gap-2 pointer-coarse:h-11\"\n disabled={o.id === currentParentId}\n onClick={() => pick(o.id)}\n data-testid={`${id}-option-${o.id}`}\n >\n <CornerDownRight className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{o.label}</span>\n </Button>\n </li>\n ))}\n {shown.length === 0 && (\n <li className=\"px-2 py-4 text-center text-sm text-muted-foreground\">{labels.empty}</li>\n )}\n </ul>\n <div className=\"flex justify-end\">\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n {labels.cancel}\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n","import { useState } from 'react'\nimport {\n CheckCheck,\n KeyRound,\n CornerDownRight,\n ListPlus,\n MoreHorizontal,\n History,\n Pencil,\n RotateCcw,\n Trash2,\n} from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@arbidocs/react/ui'\nimport { isPlainTodo, type TaskListRow } from './taskRows'\nimport type { TaskStatusKey } from './taskLabels'\nimport type { TaskListLabels } from './taskTableLabels'\n\nexport interface TaskRowMenuProps {\n task: TaskListRow\n status: TaskStatusKey\n busy: boolean\n /** The viewer owns the task: only they delete it, grant its agent access, or change who sees it. */\n isOwner: boolean\n /** The viewer may change who sees it and delete it: its creator, or an owner of the workspace. */\n canAdmin: boolean\n /** The viewer can edit it: its owner, or an editor of the workspace a shared task sits in. */\n canEdit: boolean\n labels: TaskListLabels\n /** Explicit completion permission; otherwise follows the existing edit permission. */\n canMarkDone?: boolean\n /** Hide when the containing view already offers a reopen control. */\n canReopen?: boolean\n selected?: boolean\n onToggleSelected?: () => void\n onMarkDone: () => void\n onReopen: () => void\n onAddSubtask?: () => void\n onEdit: () => void\n onDelete?: () => void\n onMoveTo?: () => void\n onNotify?: () => void\n /** Open the task's activity timeline. */\n onToggleShared?: () => void\n onOpenActivity?: () => void\n /** Present only when a run is waiting for access. */\n onGrantAccess?: () => void\n}\n\nexport function TaskRowMenu({\n task,\n status,\n busy,\n isOwner,\n canAdmin,\n canEdit,\n labels,\n canMarkDone = canEdit,\n canReopen = canEdit,\n selected = false,\n onToggleSelected,\n onMarkDone,\n onReopen,\n onAddSubtask,\n onEdit,\n onDelete,\n onMoveTo,\n onOpenActivity,\n onToggleShared,\n onGrantAccess,\n}: TaskRowMenuProps) {\n const [open, setOpen] = useState(false)\n const id = task.external_id\n // An editor can do everything but delete and grant access (the owner's). A guest only reads.\n // A plain chat is not run, finished or reopened: it can be renamed, moved and deleted.\n const isChat = status === 'chat'\n const done = status === 'done'\n return (\n <DropdownMenu open={open} onOpenChange={setOpen}>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 pointer-coarse:size-11\"\n aria-label={labels.moreActions}\n data-testid={`task-menu-${id}`}\n >\n <MoreHorizontal className=\"size-4\" aria-hidden />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {onToggleSelected && (\n <DropdownMenuItem onSelect={onToggleSelected} data-testid={`task-select-${id}`}>\n {selected ? 'Deselect task' : 'Select task'}\n </DropdownMenuItem>\n )}\n {isOwner && onGrantAccess && task.pending_auth_request_id && (\n <DropdownMenuItem\n onSelect={onGrantAccess}\n data-testid={`task-grant-${id}`}\n className=\"text-destructive\"\n >\n <KeyRound className=\"mr-2 size-4\" aria-hidden />\n {labels.grantAccess}\n </DropdownMenuItem>\n )}\n {isChat || !canEdit\n ? null\n : done\n ? canReopen && (\n <DropdownMenuItem\n disabled={busy}\n onSelect={onReopen}\n data-testid={`task-reopen-${id}`}\n >\n <RotateCcw className=\"mr-2 size-4\" aria-hidden />\n {labels.reopen}\n </DropdownMenuItem>\n )\n : canMarkDone && (\n <DropdownMenuItem\n disabled={busy}\n onSelect={onMarkDone}\n data-testid={`task-mark-done-${id}`}\n >\n <CheckCheck className=\"mr-2 size-4\" aria-hidden />\n {labels.markDone}\n </DropdownMenuItem>\n )}\n {!isChat && onOpenActivity && (\n <DropdownMenuItem onSelect={onOpenActivity} data-testid={`task-activity-${id}`}>\n <History className=\"mr-2 size-4\" aria-hidden />\n {labels.activity}\n </DropdownMenuItem>\n )}\n {isOwner && onToggleShared && (\n <DropdownMenuItem disabled={busy} onSelect={onToggleShared}>\n {task.is_shared ? 'Make private' : 'Share with workspace'}\n </DropdownMenuItem>\n )}\n {canEdit && onAddSubtask && (\n <DropdownMenuItem onSelect={onAddSubtask} data-testid={`task-add-subtask-${id}`}>\n <ListPlus className=\"mr-2 size-4\" aria-hidden />\n {labels.addSubtask}\n </DropdownMenuItem>\n )}\n {canEdit && onMoveTo && (\n <DropdownMenuItem onSelect={onMoveTo} data-testid={`task-move-${id}`}>\n <CornerDownRight className=\"mr-2 size-4\" aria-hidden />\n {labels.moveTo}\n </DropdownMenuItem>\n )}\n {canEdit && (\n <DropdownMenuItem onSelect={onEdit} data-testid={`task-edit-${id}`}>\n <Pencil className=\"mr-2 size-4\" aria-hidden />\n {isChat ? labels.rename : labels.edit}\n </DropdownMenuItem>\n )}\n {canEdit && onDelete && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n disabled={busy || !canAdmin}\n onSelect={onDelete}\n title={canAdmin ? undefined : labels.deleteOwnerOnly}\n className=\"text-destructive focus:text-destructive\"\n data-testid={`task-delete-${id}`}\n >\n <Trash2 className=\"mr-2 size-4\" aria-hidden />\n {labels.delete}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n","import { useEffect, useState } from 'react'\nimport { AlertCircle, Check, CircleDashed, Loader2, MessageSquare } from 'lucide-react'\nimport { ToneBadge } from '../../components/ToneBadge'\nimport { testIdOr } from '../../chat/test-id'\nimport { formatElapsed } from './elapsed'\nimport { STATUS_LABELS, STATUS_TONE, asTaskStatus, type TaskStatusKey } from './taskLabels'\n\nexport interface TaskStatusPillLabels {\n waitingForAccess: string\n lastRunFailed: string\n /** The visible word beside the status when the last run failed. */\n failed: string\n}\n\nexport const DEFAULT_TASK_STATUS_PILL_LABELS: TaskStatusPillLabels = {\n waitingForAccess: 'Waiting for access',\n lastRunFailed: 'Last run failed',\n failed: 'Failed',\n}\n\nexport interface TaskStatusPillProps {\n /** Task id: keys the test id (`task-status-{id}`). */\n id: string\n status: string | null | undefined\n /** When the in-flight run started (ISO); a generating pill shows a live elapsed time. */\n runStartedAt?: string | null\n /** The last run's error, shown as a danger dot with the message on hover. */\n lastError?: string | null\n /** A run is waiting for the owner to grant workspace access. */\n awaitingAccess?: boolean\n testId?: string\n labels?: Partial<TaskStatusPillLabels>\n /** Tooltip with the latest step (\"To do · 2 min ago\"). */\n hint?: string\n}\n\nconst ICON = 'size-3'\n\nfunction StatusIcon({ status }: { status: TaskStatusKey }) {\n switch (status) {\n case 'generating':\n return <Loader2 className={`${ICON} animate-spin`} aria-hidden />\n case 'done':\n return <Check className={ICON} aria-hidden />\n case 'chat':\n return <MessageSquare className={ICON} aria-hidden />\n default:\n return <CircleDashed className={ICON} aria-hidden />\n }\n}\n\n/** Ticks once a second while mounted, so a generating pill's elapsed time stays live. */\nfunction useNow(active: boolean): number {\n const [now, setNow] = useState(() => Date.now())\n useEffect(() => {\n if (!active) return\n const timer = setInterval(() => setNow(Date.now()), 1000)\n return () => clearInterval(timer)\n }, [active])\n return now\n}\n\n/** A task's workflow status as one tinted pill: To do, Generating (live), Done. */\nexport function TaskStatusPill({\n id,\n status,\n runStartedAt,\n lastError,\n awaitingAccess = false,\n testId,\n labels,\n hint,\n}: TaskStatusPillProps) {\n const l = { ...DEFAULT_TASK_STATUS_PILL_LABELS, ...labels }\n const key = asTaskStatus(status)\n const generating = key === 'generating'\n const now = useNow(generating && Boolean(runStartedAt))\n const started = runStartedAt ? Date.parse(runStartedAt) : NaN\n\n let text: string = STATUS_LABELS[key]\n let tone = STATUS_TONE[key]\n if (awaitingAccess) {\n text = l.waitingForAccess\n tone = 'danger'\n }\n const elapsed = generating && !Number.isNaN(started) ? formatElapsed(started, now) : null\n\n return (\n <span className=\"inline-flex items-center gap-1.5\" data-slot=\"task-status\" title={hint}>\n <ToneBadge\n tone={tone}\n icon={<StatusIcon status={key} />}\n data-status={key}\n data-testid={testIdOr(testId, { testId: `task-status-${id}` })}\n >\n {text}\n {elapsed && <span className=\"tabular-nums opacity-70\">· {elapsed}</span>}\n </ToneBadge>\n {lastError && !generating && (\n <span\n role=\"img\"\n aria-label={l.lastRunFailed}\n title={`${l.lastRunFailed}: ${lastError}`}\n className=\"inline-flex shrink-0 items-center gap-1 text-xs font-medium text-red-text\"\n data-testid={`task-error-${id}`}\n >\n <AlertCircle className=\"size-3.5\" aria-hidden />\n {l.failed}\n </span>\n )}\n </span>\n )\n}\n","/**\n * Column definitions for the tasks grid. Every column has an\n * explicit `colId` (AG Grid persists column state by id: see CLAUDE.md). The table supplies behaviour and\n * the cells that need it through slots; the structure, widths and headers live here. The slots must be\n * stable functions (the table keeps the latest handlers behind them) so the definitions are built once\n * and the grid never refreshes its columns on a selection or expand.\n *\n * Every conversation is a task: Owner (who has the next step), due, shared, thread link,\n * status, outputs. Rows are `TaskGridRow`s: a task plus where it sits in the sub-task tree, so the\n * order is the tree's. A column's header still shows and reports the sort, but the grid's own sort is\n * a no-op (`keepOrder`): that would tear sub-tasks away from their parent, so the table sorts within\n * each level instead (see `buildTaskRows`).\n */\nimport type { ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport type { TaskGridRow, TaskListRow } from './taskRows'\nimport type { TaskListLabels } from './taskTableLabels'\n\n/** The actions column's width: Allow access and the menu (the widest row). */\nexport const ACTIONS_WIDTH = 160\nconst NARROW_ACTIONS_WIDTH = 56\n\nexport const TASK_COLUMN_ORDER = [\n 'name',\n 'owner',\n 'due',\n 'status',\n 'outputs',\n 'shared',\n 'actions',\n] as const\n\nexport type TaskColumnId = (typeof TASK_COLUMN_ORDER)[number]\n\nexport interface CreateTaskColumnsOptions<T extends TaskListRow> {\n labels: TaskListLabels\n renderName: (row: TaskGridRow<T>) => ReactNode\n /** Who has the next step. */\n renderOwner: (row: TaskGridRow<T>) => ReactNode\n renderDue: (row: TaskGridRow<T>) => ReactNode\n renderShared: (row: TaskGridRow<T>) => ReactNode\n /** The documents the task generated. */\n renderOutputs: (row: TaskGridRow<T>) => ReactNode\n /** A phone-width grid: the actions column is just the menu. */\n narrow?: boolean\n /** Whether the Outputs column is shown: only worth the room once some task has outputs. */\n showOutputs?: boolean\n renderStatus: (row: TaskGridRow<T>) => ReactNode\n /** Who is in the thread (Threads view). */\n renderActions: (row: TaskGridRow<T>) => ReactNode\n /** Plain text of the owner cell, for sorting, filters and the clipboard. */\n getOwnerName: (row: TaskGridRow<T>) => string\n}\n\n/** Grid-side comparator that keeps the table's order: the table sorts each level itself. */\nconst keepOrder = () => 0\n\n/** Columns the user can sort by, per view. */\nexport const SORTABLE_TASK_COLUMNS = [\n 'name',\n 'owner',\n 'due',\n 'status',\n 'updated',\n 'messages',\n] as const\nexport type SortableTaskColumn = (typeof SORTABLE_TASK_COLUMNS)[number]\n\n/** The cell renderer for a slot: a missing row (AG Grid's loading shell) renders nothing. */\nfunction cell<T extends TaskListRow>(render: (row: TaskGridRow<T>) => ReactNode) {\n return (params: ICellRendererParams<TaskGridRow<T>>): ReactNode =>\n params.data ? render(params.data) : null\n}\n\nexport function createTaskColumns<T extends TaskListRow>(\n o: CreateTaskColumnsOptions<T>\n): ColDef<TaskGridRow<T>>[] {\n const l = o.labels\n const sortable = {\n sortable: true,\n comparator: keepOrder,\n sortingOrder: ['asc' as const, 'desc' as const, null],\n }\n const base: Partial<ColDef<TaskGridRow<T>>> = {\n sortable: false,\n suppressMovable: true,\n // Keyboard focus lands on the name cell only (arrow keys expand and collapse sub-tasks there).\n suppressNavigable: true,\n cellStyle: { display: 'flex', alignItems: 'center' },\n }\n const name: ColDef<TaskGridRow<T>> = {\n ...base,\n colId: 'name',\n ...sortable,\n suppressNavigable: false,\n headerName: l.colTask,\n flex: 3,\n minWidth: 200,\n cellRenderer: cell(o.renderName),\n }\n const shared: ColDef<TaskGridRow<T>> = {\n ...base,\n colId: 'shared',\n headerName: l.colShared,\n headerTooltip: l.shared,\n width: 90,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'center' },\n valueGetter: (p) => p.data?.task.is_shared ?? false,\n cellRenderer: cell(o.renderShared),\n }\n const actions = (): ColDef<TaskGridRow<T>> => ({\n ...base,\n colId: 'actions',\n headerName: '',\n // Always in view, even if the rest has to scroll.\n pinned: 'right',\n lockPinned: true,\n width: o.narrow ? NARROW_ACTIONS_WIDTH : ACTIONS_WIDTH,\n minWidth: NARROW_ACTIONS_WIDTH,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'flex-end' },\n cellRenderer: cell(o.renderActions),\n })\n\n // Left to right: the title, who has the next step, when, how it stands, then who sees it and the\n // thread link, with the actions (Approve included) last, at the right edge.\n return [\n name,\n {\n ...base,\n colId: 'owner',\n ...sortable,\n headerName: l.colOwner,\n headerTooltip: l.ownerHint,\n flex: 1.4,\n minWidth: 150,\n valueGetter: (p) => (p.data ? o.getOwnerName(p.data) : ''),\n cellRenderer: cell(o.renderOwner),\n },\n {\n ...base,\n colId: 'due',\n ...sortable,\n headerName: l.colDue,\n flex: 1,\n minWidth: 140,\n valueGetter: (p) => p.data?.task.due_at ?? '',\n cellRenderer: cell(o.renderDue),\n },\n {\n ...base,\n colId: 'status',\n ...sortable,\n headerName: l.colStatus,\n // Wide enough for \"Generating\" and \"Waiting for access\" in full, with the elapsed time.\n flex: 1.3,\n minWidth: 170,\n valueGetter: (p) => p.data?.task.status ?? '',\n cellRenderer: cell(o.renderStatus),\n },\n ...(o.showOutputs\n ? [\n {\n ...base,\n colId: 'outputs',\n headerName: l.colOutputs,\n flex: 1.2,\n minWidth: 130,\n cellRenderer: cell(o.renderOutputs),\n } as ColDef<TaskGridRow<T>>,\n ]\n : []),\n shared,\n actions(),\n ]\n}\n","/**\n * Drop the least useful columns as a grid gets narrower, so the actions column (Approve, Run, the menu)\n * is never pushed off the edge. Each rule keeps its column while the grid is at least `minWidth` wide.\n */\nimport type { GridApi } from 'ag-grid-community'\n\nexport interface ColumnWidthRule {\n colId: string\n /** The narrowest grid (px) that still shows the column. */\n minWidth: number\n}\n\nexport function applyColumnWidthRules(\n api: Pick<GridApi, 'getColumn' | 'setColumnsVisible'>,\n gridWidth: number,\n rules: readonly ColumnWidthRule[]\n): void {\n for (const rule of rules) {\n if (api.getColumn(rule.colId)) api.setColumnsVisible([rule.colId], gridWidth >= rule.minWidth)\n }\n}\n","import { STATUS_ORDER, asTaskStatus, type TaskStatusKey } from './taskLabels'\n\n/**\n * The deepest a task may nest, counting the top-level task as level 1 (a task, its sub-tasks, their\n * sub-tasks, and so on). The table indents no further than the last level, and \"Move to…\" offers\n * only parents that keep the moved subtree within it. The backend is asked to enforce the same cap.\n */\nexport const MAX_TASK_DEPTH = 5\n\n/**\n * The fields of a task the table reads. A task is a conversation with a `status`\n * (`GET /v1/conversation/list`); callers' richer conversation types are accepted as-is, and the\n * host keeps only the rows whose `status` is set (a chat has none).\n */\nexport interface TaskListRow {\n external_id: string\n /** The conversation title; null until a run (which holds the key) names it. */\n title?: string | null\n description?: string | null\n /** `todo | generating | done`; null for a plain chat. */\n status?: string | null\n in_progress?: boolean | null\n run_started_at?: string | null\n due_at?: string | null\n last_error?: string | null\n /** Set while a run waits for the owner to grant access. */\n pending_auth_request_id?: string | null\n goal_state?: unknown\n /** Shared with the workspace's members (false = private to its owner). */\n is_shared?: boolean | null\n /** False for a teammate's shared task: they can finish it, but not run, share or delete it. */\n is_owner?: boolean | null\n /** The person who created the task (it is assigned to them when no agent works on it). */\n owner_ext_id?: string | null\n /** The task this is a sub-task of. */\n parent_conversation_ext_id?: string | null\n /** The workflow that created it, if any. */\n workflow_ext_id?: string | null\n /** The agent that prepares the work (none for a plain to-do). */\n agent_ext_id?: string | null\n /** Work for the default assistant need not have a named agent. */\n has_agent_action?: boolean\n skill_ref?: string | null\n /** Who started the thread. */\n created_by_ext_id?: string | null\n message_count?: number | null\n updated_at?: string | null\n}\n\n/**\n * Who owns a task: the person who created it (never the agent that did the work). They are notified\n * when its run finishes.\n */\nexport const ownerExtId = (task: TaskListRow): string | null =>\n task.owner_ext_id || task.created_by_ext_id || null\n\n/** A plain to-do (no agent, no skill): nothing to run, a person just marks it done. */\nexport const isPlainTodo = (task: TaskListRow): boolean =>\n !task.agent_ext_id && !task.has_agent_action && !task.skill_ref\n\nexport type TaskFilter = 'all' | TaskStatusKey\n\n/** One line of the table: a task, how deep it sits under its parent and what its children add up to. */\nexport interface TaskGridRow<T extends TaskListRow> {\n external_id: string\n task: T\n depth: number\n /** Present when the task has sub-tasks (all of them, whatever the filter shows). */\n childStats?: { done: number; total: number }\n expanded: boolean\n parentId: string | null\n /** Number of siblings shown at this level, and this row's 1-based place among them. */\n setSize: number\n posInSet: number\n /** Shown only as the ancestor of a match (the filter or search did not select it itself). */\n context: boolean\n}\n\n/** The parent/child index of a task list. A parent that is not in the list (hidden, deleted) is ignored. */\nexport interface TaskTree<T extends TaskListRow> {\n byId: Map<string, T>\n kids: Map<string, T[]>\n parentOf: Map<string, string>\n}\n\nexport function indexTasks<T extends TaskListRow>(tasks: T[]): TaskTree<T> {\n const byId = new Map(tasks.map((t) => [t.external_id, t]))\n const kids = new Map<string, T[]>()\n const parentOf = new Map<string, string>()\n for (const task of tasks) {\n const parent = task.parent_conversation_ext_id\n if (parent && parent !== task.external_id && byId.has(parent)) {\n parentOf.set(task.external_id, parent)\n const list = kids.get(parent)\n if (list) list.push(task)\n else kids.set(parent, [task])\n }\n }\n return { byId, kids, parentOf }\n}\n\n/** Every task below `id`, at any depth (collapsed or filtered out included), without repeats. */\nexport function descendantIds<T extends TaskListRow>(tree: TaskTree<T>, id: string): string[] {\n const out: string[] = []\n const seen = new Set<string>([id])\n const stack = [id]\n while (stack.length) {\n for (const child of tree.kids.get(stack.pop() as string) ?? []) {\n if (seen.has(child.external_id)) continue\n seen.add(child.external_id)\n out.push(child.external_id)\n stack.push(child.external_id)\n }\n }\n return out\n}\n\n/** 1 for a task with no children, 2 for one with children, and so on. */\nfunction subtreeLevels<T extends TaskListRow>(\n tree: TaskTree<T>,\n id: string,\n seen = new Set<string>()\n): number {\n if (seen.has(id)) return 0\n const next = new Set(seen).add(id)\n let deepest = 0\n for (const child of tree.kids.get(id) ?? []) {\n deepest = Math.max(deepest, subtreeLevels(tree, child.external_id, next))\n }\n return 1 + deepest\n}\n\n/** The level of a task: 1 for a top-level task. */\nfunction levelOf<T extends TaskListRow>(tree: TaskTree<T>, id: string): number {\n let level = 1\n const seen = new Set<string>([id])\n for (let at = tree.parentOf.get(id); at && !seen.has(at); at = tree.parentOf.get(at)) {\n seen.add(at)\n level += 1\n }\n return level\n}\n\n/**\n * The tasks `task` can be moved under: any other task that is not one of its own descendants and\n * keeps the moved subtree within {@link MAX_TASK_DEPTH}.\n */\nexport function moveTargets<T extends TaskListRow>(tasks: T[], task: T): T[] {\n const tree = indexTasks(tasks)\n const banned = new Set([task.external_id, ...descendantIds(tree, task.external_id)])\n const height = subtreeLevels(tree, task.external_id)\n return tasks.filter(\n (t) => !banned.has(t.external_id) && levelOf(tree, t.external_id) + height <= MAX_TASK_DEPTH\n )\n}\n\ninterface TreeNode<T extends TaskListRow> {\n task: T\n depth: number\n context: boolean\n children: TreeNode<T>[]\n}\n\nexport interface BuildTaskRowsOptions<T extends TaskListRow> {\n /** Case-insensitive text matched against the title and description. */\n query?: string\n /** The text shown for a task (defaults to its title): what the search reads. */\n titleOf?: (task: T) => string\n /**\n * Rows built last time, by id. A row whose task, depth, place and counts are unchanged is reused\n * (same object), so the grid only refreshes the rows that really changed. Updated in place.\n */\n cache?: Map<string, TaskGridRow<T>>\n}\n\nconst sameStats = (a: TaskGridRow<never>['childStats'], b: TaskGridRow<never>['childStats']) =>\n a === b || (a !== undefined && b !== undefined && a.done === b.done && a.total === b.total)\n\n/**\n * The table's lines, in order. The full view is the sub-task forest grouped by the status of each root\n * (what an agent is generating first, then to-dos, and finally what is done). A\n * status filter or a search keeps every match together with its ancestors, which show as `context`\n * rows rather than leaving their children orphaned. A task whose parent is not in the list (not\n * visible, or deleted) is top-level, and a collapsed task hides its sub-tasks.\n *\n * With `compare` (the user sorted a column) tasks are sorted within their own level: roots among roots\n * (no longer grouped by status) and each task's sub-tasks among themselves, so a sub-task never leaves\n * its parent. AG Grid cannot do this itself without its Enterprise tree data.\n */\nexport function buildTaskRows<T extends TaskListRow>(\n tasks: T[],\n filter: TaskFilter,\n collapsed: ReadonlySet<string>,\n compare?: (a: T, b: T) => number,\n options: BuildTaskRowsOptions<T> = {}\n): TaskGridRow<T>[] {\n const tree = indexTasks(tasks)\n const { kids, parentOf } = tree\n const sorted = (list: T[]): T[] => (compare ? [...list].sort(compare) : list)\n const query = options.query?.trim().toLowerCase() ?? ''\n const titleOf = options.titleOf ?? ((t: T) => t.title ?? '')\n\n // With a filter or a search only the matches and their ancestors are shown.\n let included: Set<string> | null = null\n let matched: Set<string> | null = null\n if (filter !== 'all' || query) {\n matched = new Set()\n included = new Set()\n for (const task of tasks) {\n const statusOk = filter === 'all' || asTaskStatus(task.status) === filter\n const textOk =\n !query || `${titleOf(task)} ${task.description ?? ''}`.toLowerCase().includes(query)\n if (!statusOk || !textOk) continue\n matched.add(task.external_id)\n for (\n let at: string | undefined = task.external_id;\n at && !included.has(at);\n at = parentOf.get(at)\n ) {\n included.add(at)\n }\n }\n }\n const shown = (list: T[]): T[] =>\n included ? list.filter((t) => (included as Set<string>).has(t.external_id)) : list\n\n const build = (task: T, depth: number, seen: Set<string>): TreeNode<T> => {\n const nextSeen = new Set(seen).add(task.external_id)\n return {\n task,\n depth,\n context: matched ? !matched.has(task.external_id) : false,\n children: sorted(shown(kids.get(task.external_id) ?? []))\n .filter((child) => !nextSeen.has(child.external_id))\n .map((child) => build(child, depth + 1, nextSeen)),\n }\n }\n\n // Without a sort the sections are the statuses; with one there is a single section in sorted order.\n const sections = new Map<TaskStatusKey | 'sorted', TreeNode<T>[]>([\n ...STATUS_ORDER.map((s) => [s, []] as [TaskStatusKey, TreeNode<T>[]]),\n ['sorted', []],\n ])\n const sectionOf = (task: T): TaskStatusKey | 'sorted' =>\n compare ? 'sorted' : asTaskStatus(task.status)\n const roots = tasks.filter((t) => !parentOf.has(t.external_id))\n for (const task of sorted(shown(roots))) {\n sections.get(sectionOf(task))?.push(build(task, 0, new Set()))\n }\n\n const cache = options.cache\n const used = new Set<string>()\n const rows: TaskGridRow<T>[] = []\n const walk = (node: TreeNode<T>, parentId: string | null, setSize: number, posInSet: number) => {\n const id = node.task.external_id\n const expanded = !collapsed.has(id)\n const all = kids.get(id)\n const childStats = all\n ? { done: all.filter((c) => asTaskStatus(c.status) === 'done').length, total: all.length }\n : undefined\n let row: TaskGridRow<T> = {\n external_id: id,\n task: node.task,\n depth: node.depth,\n childStats,\n expanded,\n parentId,\n setSize,\n posInSet,\n context: node.context,\n }\n const prev = cache?.get(id)\n if (\n prev &&\n prev.task === row.task &&\n prev.depth === row.depth &&\n prev.expanded === row.expanded &&\n prev.parentId === row.parentId &&\n prev.setSize === row.setSize &&\n prev.posInSet === row.posInSet &&\n prev.context === row.context &&\n sameStats(prev.childStats, row.childStats)\n ) {\n row = prev\n }\n used.add(id)\n cache?.set(id, row)\n rows.push(row)\n if (expanded) {\n node.children.forEach((child, i) => walk(child, id, node.children.length, i + 1))\n }\n }\n const ordered = [...STATUS_ORDER, 'sorted' as const].flatMap((s) => sections.get(s) ?? [])\n ordered.forEach((node, i) => walk(node, null, ordered.length, i + 1))\n if (cache) for (const id of [...cache.keys()]) if (!used.has(id)) cache.delete(id)\n return rows\n}\n","import type { TaskStatusKey } from './taskLabels'\n\nexport interface TaskListLabels {\n agent: string\n filterAll: string\n emptyTitle: string\n emptyMessage: string\n noMatches: string\n due: (when: string) => string\n overdue: (when: string) => string\n colTask: string\n colOwner: string\n ownerHint: string\n colOutputs: string\n preparedBy: (agentName: string) => string\n colDue: string\n colStatus: string\n me: string\n someone: string\n noDue: string\n colShared: string\n shared: string\n sharedOwnerOnly: string\n deleteOwnerOnly: string\n goalMet: (met: number, total: number) => string\n subtasksDone: (done: number, total: number) => string\n expandSubtasks: string\n collapseSubtasks: string\n selectAll: string\n selectTask: (name: string) => string\n markDone: string\n reopen: string\n markDoneMany: string\n markDoneManyHint: string\n deleteMany: string\n moveTo: string\n untitled: string\n fromWorkflow: (workflowName: string) => string\n searchLabel: string\n searchPlaceholder: string\n expandAll: string\n collapseAll: string\n moveToTitle: (taskName: string) => string\n moveToNone: string\n moveToSearch: string\n moveToEmpty: string\n moveToCancel: string\n subtasksSelected: (count: number) => string\n addSubtask: string\n edit: string\n rename: string\n delete: string\n grantAccess: string\n allowAccess: string\n moreActions: string\n activity: string\n /** Status tooltip: the latest step and how long ago. */\n statusHint: (status: string, ago: string) => string\n status: Partial<Record<TaskStatusKey, string>>\n}\n\nexport const DEFAULT_TASK_LIST_LABELS: TaskListLabels = {\n filterAll: 'All',\n emptyTitle: 'No tasks yet',\n emptyMessage:\n 'Use New to add one: just type what you need, or add a due date. Automations that create tasks live on the Workflows page. You always decide when a task is done.',\n noMatches: 'No tasks match.',\n due: (when) => when,\n overdue: (when) => `${when} · overdue`,\n agent: 'Agent',\n colTask: 'Task',\n colOwner: 'Owner',\n ownerHint: 'Who created the task. They are notified when its run finishes.',\n colOutputs: 'Outputs',\n preparedBy: (agent) => `Prepared by ${agent}`,\n colDue: 'Due',\n colStatus: 'Status',\n me: 'Me',\n someone: 'Someone',\n noDue: '—',\n colShared: 'Shared',\n shared: 'Shared with the workspace',\n sharedOwnerOnly: 'Only the creator can change who can see this',\n deleteOwnerOnly: 'Only the creator or workspace owner can delete this',\n goalMet: (met, total) => `${met}/${total} met`,\n subtasksDone: (done, total) => `${done}/${total} sub-tasks done`,\n expandSubtasks: 'Show sub-tasks',\n collapseSubtasks: 'Hide sub-tasks',\n selectAll: 'Select all tasks',\n selectTask: (name) => `Select ${name}`,\n markDone: 'Mark done',\n reopen: 'Reopen',\n markDoneMany: 'Mark done',\n markDoneManyHint: 'Marks the selected tasks done.',\n deleteMany: 'Delete',\n moveTo: 'Move to…',\n untitled: 'Untitled task',\n fromWorkflow: (name) => `From “${name}”`,\n searchLabel: 'Search tasks',\n searchPlaceholder: 'Search tasks…',\n expandAll: 'Expand all',\n collapseAll: 'Collapse all',\n moveToTitle: (name) => `Move “${name}” to…`,\n moveToNone: 'No parent (top level)',\n moveToSearch: 'Search tasks…',\n moveToEmpty: 'No task to move it under.',\n moveToCancel: 'Cancel',\n subtasksSelected: (count) => `${count} ${count === 1 ? 'sub-task' : 'sub-tasks'} included`,\n addSubtask: 'Add sub-task',\n edit: 'Edit',\n rename: 'Rename',\n delete: 'Delete',\n grantAccess: 'Allow access and continue',\n allowAccess: 'Allow access',\n moreActions: 'More actions',\n activity: 'Activity',\n statusHint: (status, ago) => `${status} · ${ago}`,\n status: {},\n}\n","import { useEffect, useMemo, useRef, useState, type ReactNode } from 'react'\nimport type { CellKeyDownEvent, GridApi, GridOptions } from 'ag-grid-community'\nimport {\n ChevronDown,\n ChevronRight,\n ChevronsDownUp,\n ChevronsUpDown,\n CheckCheck,\n KeyRound,\n ListTodo,\n Trash2,\n Workflow,\n} from 'lucide-react'\nimport { Button, Input, VisibilityToggle, cn } from '@arbidocs/react/ui'\nimport { EmptyState } from '../../components/EmptyState'\nimport { ToneBadge } from '../../components/ToneBadge'\nimport { GridView } from '../../files/GridView'\nimport { SelectionBar, SelectionBarAction } from '../../files/SelectionBar'\nimport { testIdOr } from '../../chat/test-id'\nimport { PersonPill, type TaskPerson } from './PersonPill'\nimport { TaskOutputsCell, type TaskOutput, type TaskOutputsCellLabels } from './TaskOutputsCell'\nimport { TaskMoveDialog } from './TaskMoveDialog'\nimport { TaskRowMenu } from './TaskRowMenu'\nimport {\n DEFAULT_TASK_STATUS_PILL_LABELS,\n TaskStatusPill,\n type TaskStatusPillLabels,\n} from './TaskStatusPill'\nimport type { TaskThreadChipLabels } from './TaskThreadChip'\nimport { createTaskColumns, type SortableTaskColumn } from './taskColumns'\nimport { applyColumnWidthRules, type ColumnWidthRule } from './gridWidth'\nimport { STATUS_LABELS, STATUS_ORDER, asTaskStatus, goalProgress } from './taskLabels'\nimport {\n buildTaskRows,\n ownerExtId,\n descendantIds,\n indexTasks,\n isPlainTodo,\n moveTargets,\n type TaskFilter,\n type TaskGridRow,\n type TaskListRow,\n} from './taskRows'\nimport { DEFAULT_TASK_LIST_LABELS, type TaskListLabels } from './taskTableLabels'\n\nexport interface TaskTableProps<T extends TaskListRow> {\n /** The workspace's tasks: the conversations that have a status (the host drops plain chats). */\n tasks: T[]\n isLoading?: boolean\n /** Friendly display of an ISO timestamp. */\n formatDate: (iso: string) => string\n /** Open the task's thread (its conversation). */\n onOpenThread: (conversationId: string, task: T) => void\n /** A person marks a task done / reopens a finished one. */\n onMarkDone: (task: T) => void\n onReopen: (task: T) => void\n /** People in the workspace, by id: names the Owner column. */\n people?: { id: string; label: string }[]\n /** Agent names by id, for the Assigned to column (falls back to \"Agent\"). */\n agentNames?: Record<string, string>\n /** Workflow names by id: names a task whose title the run has not generated yet, and its origin chip. */\n workflowNames?: Record<string, string>\n /**\n * How a person appears in the Owner column. Defaults to the app's user pill from\n * `@arbidocs/react`; a host with presence and direct messages passes its own.\n */\n renderPerson?: (person: TaskPerson) => ReactNode\n /** Share a task with the workspace or make it private (the shared/private toggle appears with it). */\n onToggleShared?: (task: T, shouldShare: boolean) => void\n onEdit: (task: T) => void\n onDelete: (task: T) => void\n /** Start a new task that is a child of this one. */\n onAddSubtask?: (task: T) => void\n /** Re-parent a task (`null` = top level). With it, the row menu offers \"Move to…\". */\n onMove?: (task: T, parentId: string | null) => void\n /** Bulk actions on the selected rows (the selection bar shows only the ones provided). */\n onMarkDoneMany?: (tasks: T[]) => void\n onDeleteMany?: (tasks: T[]) => void\n /** When set, a run waiting for access shows a one-click \"allow access\" action. */\n onGrantAccess?: (task: T) => void\n /** Task id with a request in flight: its row disables its actions. */\n busyId?: string | null\n /** Slot above the table (e.g. a live-runs banner). */\n header?: ReactNode\n /**\n * Extra bulk actions for the selection bar (an export, a share): called with the selected tasks, whether\n * the bar is compact, and a function that clears the selection.\n */\n selectionActions?: (selected: T[], isCompact: boolean, clearSelection: () => void) => ReactNode\n /** Text from outside the table (a topbar filter) that narrows the rows like the search box does. */\n filterText?: string\n /**\n * The viewer edits the workspace (owner or collaborator): a row they do not own is always shared, and\n * they may then edit, run, move, mark done and add sub-tasks to it. The share toggle, Delete and Allow\n * access stay with the row's owner. A guest leaves this off and only reads.\n */\n canEditShared?: boolean\n /** The viewer owns the workspace: with a row's creator, the only one who deletes it. Who can see it stays the creator's alone. */\n isWorkspaceOwner?: boolean\n /** Saved column state key (AG Grid persists by it). */\n gridId?: string\n labels?: Partial<TaskListLabels>\n testId?: string\n statusPillLabels?: Partial<TaskStatusPillLabels>\n threadChipLabels?: Partial<TaskThreadChipLabels>\n /** Generated documents per task id (latest versions only); a task with none shows a dash. */\n outputsByTask?: Record<string, readonly TaskOutput[]>\n /** Open one generated document (Tasks view's Outputs column). */\n onOpenOutput?: (documentId: string, task: T) => void\n outputsLabels?: Partial<TaskOutputsCellLabels>\n /** Open a task's activity timeline (row menu: \"Activity\"). */\n onOpenActivity?: (task: T) => void\n /** \"2 min ago\" for the status tooltip; without it the tooltip is left out. */\n formatRelative?: (iso: string) => string\n}\n\nconst ROW_HEIGHT = 56\n/** Taller on a phone, where the status sits under the title. */\nconst NARROW_ROW_HEIGHT = 76\n/** Sub-tasks stop indenting after this depth (the table stays readable at any nesting). */\nconst MAX_INDENT_DEPTH = 4\n/** Above this many rows the grid stops animating row changes. */\nconst ANIMATE_ROWS_UP_TO = 500\n\n/** Below this grid width the table is one column and a menu. */\nconst NARROW_GRID = 640\n\n/** What goes first as the grid narrows (the grid is the page minus the sidebar). */\nconst WIDTH_RULES: readonly ColumnWidthRule[] = [\n { colId: 'shared', minWidth: 1050 },\n { colId: 'due', minWidth: 850 },\n { colId: 'outputs', minWidth: 930 },\n { colId: 'owner', minWidth: 730 },\n { colId: 'status', minWidth: NARROW_GRID },\n]\n\ntype Row<T extends TaskListRow> = TaskGridRow<T>\n\n/** The tooltip on the status pill: the latest step and how long ago. */\nfunction statusHint<T extends TaskListRow>(\n task: T,\n ctx: {\n props: TaskTableProps<T>\n l: TaskListLabels\n }\n): string | undefined {\n const { props: p, l } = ctx\n if (!p.formatRelative || !task.updated_at) return undefined\n const key = asTaskStatus(task.status)\n const pill = { ...DEFAULT_TASK_STATUS_PILL_LABELS, ...p.statusPillLabels }\n const label = task.pending_auth_request_id ? pill.waitingForAccess : STATUS_LABELS[key]\n return l.statusHint(label, p.formatRelative(task.updated_at))\n}\n\n/**\n * The tasks of a workspace as a person's work list, in the same grid as every other list in the app:\n * what an agent is generating first, then to-dos and, last, what is done.\n * Sub-tasks sit indented under their parent. Rows are selected with the grid's checkboxes (shift-click\n * for a range; ticking a parent ticks its sub-tasks) and acted on from the selection bar. Agents prepare\n * work; only a person closes it.\n */\nexport function TaskTable<T extends TaskListRow>(props: TaskTableProps<T>) {\n const { tasks: allTasks, isLoading, busyId, header, testId } = props\n const l: TaskListLabels = {\n ...DEFAULT_TASK_LIST_LABELS,\n ...props.labels,\n status: { ...STATUS_LABELS, ...props.labels?.status },\n }\n const [filter, setFilter] = useState<TaskFilter>('all')\n const [query, setQuery] = useState('')\n const [collapsed, setCollapsed] = useState<Set<string>>(new Set())\n const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set())\n const [sort, setSort] = useState<{ colId: SortableTaskColumn; dir: 'asc' | 'desc' } | null>(null)\n const [moving, setMoving] = useState<T | null>(null)\n const tasks = allTasks\n const apiRef = useRef<GridApi<Row<T>> | null>(null)\n // A phone-width grid: one column and a menu, the status under the title (see onGridSizeChanged).\n const [narrow, setNarrow] = useState(false)\n const rowCache = useRef(new Map<string, Row<T>>())\n\n const tree = useMemo(() => indexTasks(tasks), [tasks])\n const peopleNames = useMemo(\n () => new Map((props.people ?? []).map((p) => [p.id, p.label])),\n [props.people]\n )\n /** What a task is called: its title, else the workflow that made it, else \"Untitled\". */\n const nameOf = (task: T): string =>\n task.title?.trim() ||\n (task.workflow_ext_id && props.workflowNames?.[task.workflow_ext_id]) ||\n l.untitled\n /** Who owns the task: its creator. */\n const owner = (task: T): TaskPerson => {\n const id = ownerExtId(task)\n const mine = task.is_owner !== false\n return {\n id,\n label: mine ? l.me : ((id && peopleNames.get(id)) ?? l.someone),\n isMe: mine,\n }\n }\n /** Who started a thread. */\n const starter = (task: T): TaskPerson => {\n const id = task.created_by_ext_id ?? task.owner_ext_id\n const mine = task.is_owner !== false\n return {\n id,\n label: mine ? l.me : ((id && peopleNames.get(id)) ?? l.someone),\n isMe: mine,\n }\n }\n const renderPerson =\n props.renderPerson ?? ((person: TaskPerson) => <PersonPill person={person} />)\n\n const q = (query.trim() || (props.filterText ?? '').trim()).toLowerCase()\n const counts = useMemo(() => {\n const map = new Map<string, number>(STATUS_ORDER.map((s) => [s, 0]))\n let all = 0\n for (const task of tasks) {\n const text = `${nameOf(task)} ${task.description ?? ''}`.toLowerCase()\n if (q && !text.includes(q)) continue\n all += 1\n const s = asTaskStatus(task.status)\n map.set(s, (map.get(s) ?? 0) + 1)\n }\n map.set('all', all)\n return map\n // nameOf reads the labels and workflow names the table was given.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tasks, q, props.workflowNames, l.untitled])\n\n const compare = useMemo(() => {\n if (!sort) return undefined\n // A sort key is computed once per task, not once per comparison.\n const keys = new Map<T, string | number>()\n const compute = (t: T): string | number => {\n switch (sort.colId) {\n case 'name':\n return nameOf(t).toLowerCase()\n case 'owner':\n return owner(t).label.toLowerCase()\n case 'updated':\n return t.updated_at ? Date.parse(t.updated_at) : 0\n case 'messages':\n return t.message_count ?? 0\n case 'due':\n return t.due_at ? Date.parse(t.due_at) : Number.POSITIVE_INFINITY\n default:\n return STATUS_ORDER.indexOf(asTaskStatus(t.status))\n }\n }\n const key = (t: T): string | number => {\n let k = keys.get(t)\n if (k === undefined) {\n k = compute(t)\n keys.set(t, k)\n }\n return k\n }\n const sign = sort.dir === 'asc' ? 1 : -1\n return (a: T, b: T) => {\n const [x, y] = [key(a), key(b)]\n if (typeof x === 'number' && typeof y === 'number') return (x - y) * sign\n return String(x).localeCompare(String(y)) * sign\n }\n // The name lookups close over the people, agents and workflows the table was given.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n sort,\n peopleNames,\n props.agentNames,\n props.workflowNames,\n l.me,\n l.agent,\n l.someone,\n l.untitled,\n ])\n\n const rows = useMemo(\n () =>\n buildTaskRows(tasks, filter, collapsed, compare, {\n query: query.trim() || props.filterText,\n titleOf: nameOf,\n cache: rowCache.current,\n }),\n // nameOf reads the labels and workflow names the table was given.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [tasks, filter, collapsed, compare, query, props.filterText, props.workflowNames, l.untitled]\n )\n\n // Selection lives here (the grid mirrors it), so a parent can carry its sub-tasks with it, even\n // the collapsed or filtered-out ones the grid does not show.\n const selectedRows = useMemo(\n () => rows.filter((r) => selectedIds.has(r.external_id)),\n [rows, selectedIds]\n )\n const selectedTasks = useMemo(\n () => tasks.filter((t) => selectedIds.has(t.external_id)),\n [tasks, selectedIds]\n )\n const subtasksIncluded = useMemo(\n () =>\n selectedTasks.filter((t) => {\n const parent = tree.parentOf.get(t.external_id)\n return parent !== undefined && selectedIds.has(parent)\n }).length,\n [selectedTasks, selectedIds, tree]\n )\n // Only a task is marked done: a plain chat has no status to finish.\n const markable = selectedTasks.filter(\n (t) =>\n t.status != null &&\n (t.is_owner !== false || props.canEditShared) &&\n isPlainTodo(t) &&\n asTaskStatus(t.status) !== 'done'\n )\n const deletable = selectedTasks.filter((t) => t.is_owner !== false || props.isWorkspaceOwner)\n\n const rowsRef = useRef(rows)\n rowsRef.current = rows\n const handleSelectionChange = (picked: Row<T>[]) => {\n const visible = new Set(rowsRef.current.map((r) => r.external_id))\n const pickedIds = new Set(picked.map((r) => r.external_id))\n setSelectedIds((prev) => {\n const added = [...pickedIds].filter((id) => !prev.has(id))\n const removed = [...prev].filter((id) => visible.has(id) && !pickedIds.has(id))\n if (added.length === 0 && removed.length === 0) return prev\n const next = new Set(prev)\n const nested = true\n for (const id of added) {\n next.add(id)\n if (nested) for (const d of descendantIds(tree, id)) next.add(d)\n }\n for (const id of removed) {\n next.delete(id)\n if (!nested) continue\n for (const d of descendantIds(tree, id)) next.delete(d)\n // A parent is no longer fully selected once one of its sub-tasks is not.\n for (let at = tree.parentOf.get(id); at; at = tree.parentOf.get(at)) next.delete(at)\n }\n return next\n })\n }\n\n const setExpanded = (id: string, expanded: boolean) =>\n setCollapsed((prev) => {\n if (prev.has(id) === !expanded) return prev\n const next = new Set(prev)\n if (expanded) next.delete(id)\n else next.add(id)\n return next\n })\n const expandAll = () => setCollapsed(new Set())\n const collapseAll = () => setCollapsed(new Set(tree.kids.keys()))\n\n // The column definitions are built once. Their cells read the latest props and lookups through\n // this ref, so a selection, a filter or an expand never makes the grid rebuild its columns.\n const latest = useRef({ props, l, owner, starter, renderPerson, nameOf, setExpanded, narrow })\n latest.current = { props, l, owner, starter, renderPerson, nameOf, setExpanded, narrow }\n\n // The Outputs column earns its room once some task has produced something.\n const showOutputs = Object.values(props.outputsByTask ?? {}).some((o) => o.length > 0)\n const columnDefs = useMemo(\n () =>\n createTaskColumns<T>({\n narrow,\n labels: l,\n getOwnerName: (row) => latest.current.owner(row.task).label,\n renderName: (row) => {\n const { l: lb, props: p, nameOf: name } = latest.current\n const { task, depth, childStats, expanded } = row\n const id = task.external_id\n const status = asTaskStatus(task.status)\n const goal = goalProgress(task)\n const workflowName = task.workflow_ext_id ? p.workflowNames?.[task.workflow_ext_id] : null\n return (\n <div\n className=\"flex min-w-0 flex-1 items-center gap-1.5\"\n style={\n depth > 0\n ? { paddingLeft: `${Math.min(depth, MAX_INDENT_DEPTH) * 1.5}rem` }\n : undefined\n }\n data-depth={depth}\n aria-level={depth + 1}\n aria-setsize={row.setSize}\n aria-posinset={row.posInSet}\n data-context={row.context || undefined}\n >\n {childStats ? (\n <button\n type=\"button\"\n onClick={() => latest.current.setExpanded(id, !expanded)}\n aria-expanded={expanded}\n aria-label={expanded ? lb.collapseSubtasks : lb.expandSubtasks}\n className=\"flex size-5 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n data-testid={`task-expand-${id}`}\n >\n {expanded ? (\n <ChevronDown className=\"size-4\" aria-hidden />\n ) : (\n <ChevronRight className=\"size-4\" aria-hidden />\n )}\n </button>\n ) : depth > 0 ? (\n <span className=\"size-5 shrink-0\" aria-hidden />\n ) : null}\n <div className=\"min-w-0 flex-1 leading-tight\">\n <div className=\"flex min-w-0 items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => latest.current.props.onOpenThread(id, task)}\n // The agent that prepared the work is not a column: it is named here, on hover.\n title={\n task.agent_ext_id\n ? lb.preparedBy(p.agentNames?.[task.agent_ext_id] || lb.agent)\n : undefined\n }\n className={cn(\n // The title has priority: it keeps at least 12 characters before it ellipsises.\n 'min-w-[12ch] truncate text-left text-sm font-medium hover:underline focus-visible:underline focus-visible:outline-none',\n status === 'done' && 'text-muted-foreground line-through'\n )}\n data-testid={`task-name-${id}`}\n >\n {name(task)}\n </button>\n {goal && (\n <ToneBadge\n tone={goal.done ? 'success' : 'neutral'}\n data-testid={`task-goal-progress-${id}`}\n >\n {goal.done ? '✓ ' : ''}\n {lb.goalMet(goal.met, goal.total)}\n </ToneBadge>\n )}\n </div>\n {/* A phone has no Status column: the status sits under the title. */}\n {latest.current.narrow && (\n <div className=\"pt-0.5\">\n <TaskStatusPill\n id={id}\n status={status}\n runStartedAt={task.run_started_at}\n lastError={task.last_error}\n awaitingAccess={Boolean(task.pending_auth_request_id)}\n labels={p.statusPillLabels}\n />\n </div>\n )}\n {/* Second line: what it is (or where it came from) and the sub-task count, which never\n squeezes the title above it. */}\n {(task.description || workflowName || childStats) && (\n <div className=\"flex min-w-0 items-center gap-2 text-xs text-muted-foreground\">\n {task.description ? (\n <p className=\"min-w-0 truncate\">{task.description}</p>\n ) : workflowName ? (\n <span\n className=\"inline-flex min-w-0 items-center gap-1.5\"\n data-testid={`task-workflow-${id}`}\n >\n <Workflow className=\"size-3.5 shrink-0\" aria-hidden />\n <span className=\"truncate\">{lb.fromWorkflow(workflowName)}</span>\n </span>\n ) : null}\n {childStats && (\n <span\n className=\"shrink-0 tabular-nums\"\n data-testid={`task-subtask-progress-${id}`}\n >\n {lb.subtasksDone(childStats.done, childStats.total)}\n </span>\n )}\n </div>\n )}\n </div>\n </div>\n )\n },\n // Who has the next step: the person pill, with the \"Me\" treatment. A plain chat is its starter's.\n renderOwner: (row) => (\n <span data-testid={`task-owner-${row.external_id}`} className=\"flex min-w-0\">\n {latest.current.renderPerson(\n row.task.status ? latest.current.owner(row.task) : latest.current.starter(row.task)\n )}\n </span>\n ),\n renderDue: (row) => {\n const { l: lb, props: p } = latest.current\n const { task } = row\n const dueMs = task.due_at ? Date.parse(task.due_at) : NaN\n const overdue =\n asTaskStatus(task.status) !== 'done' && !Number.isNaN(dueMs) && dueMs < Date.now()\n return (\n <span\n className={cn(\n 'truncate text-sm',\n overdue ? 'font-medium text-red-text' : 'text-muted-foreground'\n )}\n data-testid={`task-due-${task.external_id}`}\n data-overdue={overdue}\n >\n {task.due_at\n ? overdue\n ? lb.overdue(p.formatDate(task.due_at))\n : lb.due(p.formatDate(task.due_at))\n : lb.noDue}\n </span>\n )\n },\n renderShared: (row) => {\n const { l: lb, props: p } = latest.current\n const { task } = row\n // A teammate cannot change the owner's visibility choice.\n if (!p.onToggleShared) return null\n return (\n <VisibilityToggle\n items={{ shared: task.is_shared ?? false }}\n onToggle={(shouldShare) => latest.current.props.onToggleShared?.(task, shouldShare)}\n disabled={task.is_owner === false}\n disabledTooltip={lb.sharedOwnerOnly}\n showLabel={false}\n data-testid={`task-shared-${task.external_id}`}\n />\n )\n },\n showOutputs,\n renderOutputs: (row) => (\n <TaskOutputsCell\n id={row.external_id}\n outputs={latest.current.props.outputsByTask?.[row.external_id]}\n onOpen={(docId) => latest.current.props.onOpenOutput?.(docId, row.task)}\n labels={latest.current.props.outputsLabels}\n />\n ),\n renderStatus: (row) => (\n <TaskStatusPill\n id={row.external_id}\n status={asTaskStatus(row.task.status)}\n runStartedAt={row.task.run_started_at}\n lastError={row.task.last_error}\n awaitingAccess={Boolean(row.task.pending_auth_request_id)}\n labels={latest.current.props.statusPillLabels}\n hint={statusHint(row.task, latest.current)}\n />\n ),\n renderActions: (row) => {\n const { l: lb, props: p } = latest.current\n const { task } = row\n const id = task.external_id\n const status = asTaskStatus(task.status)\n const busy = p.busyId === id\n const isOwner = task.is_owner !== false\n const canEdit = isOwner || Boolean(p.canEditShared)\n const canAdmin = isOwner || Boolean(p.isWorkspaceOwner)\n return (\n <div className=\"flex items-center justify-end gap-2\">\n {!latest.current.narrow &&\n isOwner &&\n task.pending_auth_request_id &&\n p.onGrantAccess && (\n <Button\n size=\"sm\"\n className=\"h-8 gap-1.5 pointer-coarse:h-11\"\n onClick={() => p.onGrantAccess?.(task)}\n data-testid={`task-allow-access-${id}`}\n >\n <KeyRound className=\"size-3.5\" aria-hidden />\n {lb.allowAccess}\n </Button>\n )}\n <TaskRowMenu\n task={task}\n status={status}\n busy={busy}\n isOwner={isOwner}\n canAdmin={canAdmin}\n canEdit={canEdit}\n labels={lb}\n onMarkDone={() => p.onMarkDone(task)}\n onReopen={() => p.onReopen(task)}\n onAddSubtask={p.onAddSubtask ? () => p.onAddSubtask?.(task) : undefined}\n onMoveTo={p.onMove ? () => setMoving(task) : undefined}\n onEdit={() => p.onEdit(task)}\n onDelete={() => p.onDelete(task)}\n onOpenActivity={p.onOpenActivity ? () => p.onOpenActivity?.(task) : undefined}\n onGrantAccess={p.onGrantAccess ? () => p.onGrantAccess?.(task) : undefined}\n />\n </div>\n )\n },\n }),\n // Stable on purpose: only the header texts rebuild the columns (see `latest`).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n l.colTask,\n l.colOwner,\n l.colDue,\n l.colStatus,\n l.colShared,\n l.colOutputs,\n l.shared,\n showOutputs,\n narrow,\n ]\n )\n\n // Cells read their data through `latest`, so a change in the lookups they draw from (people, agents,\n // workflow names, the row in flight) redraws the cells once, rather than on every interaction.\n useEffect(() => {\n apiRef.current?.refreshCells({ force: true })\n }, [\n busyId,\n props.people,\n props.agentNames,\n props.workflowNames,\n props.outputsByTask,\n props.renderPerson,\n props.labels,\n props.canEditShared,\n props.isWorkspaceOwner,\n narrow,\n ])\n\n const animate = rows.length <= ANIMATE_ROWS_UP_TO\n const gridOptions = useMemo<Partial<GridOptions<Row<T>>>>(\n () => ({\n suppressClickEdit: true,\n // Keyboard focus lives on the name column only (the others are not navigable): ArrowRight\n // opens a task's sub-tasks and ArrowLeft closes them, or steps up to the parent.\n suppressCellFocus: false,\n suppressColumnVirtualisation: true,\n animateRows: animate,\n getRowClass: (p) => (p.data?.context ? 'opacity-60' : undefined),\n // The grid shows and reports the sort; the table orders each level (see buildTaskRows).\n onSortChanged: (event) => {\n const sorted = event.api.getColumnState().find((c) => c.sort)\n setSort(\n sorted?.colId\n ? { colId: sorted.colId as SortableTaskColumn, dir: sorted.sort ?? 'asc' }\n : null\n )\n },\n onGridSizeChanged: (event) => {\n applyColumnWidthRules(event.api, event.clientWidth, WIDTH_RULES)\n setNarrow(event.clientWidth < NARROW_GRID)\n },\n onCellKeyDown: (event: CellKeyDownEvent<Row<T>>) => {\n const row = event.data\n const key = (event.event as KeyboardEvent | null)?.key\n if (!row || event.column.getColId() !== 'name') return\n if (key === 'ArrowRight' && row.childStats && !row.expanded) {\n event.event?.preventDefault()\n latest.current.setExpanded(row.external_id, true)\n } else if (key === 'ArrowLeft') {\n if (row.childStats && row.expanded) {\n event.event?.preventDefault()\n latest.current.setExpanded(row.external_id, false)\n } else if (row.parentId) {\n event.event?.preventDefault()\n const parent = event.api.getRowNode(row.parentId)\n if (parent?.rowIndex != null) {\n event.api.ensureIndexVisible(parent.rowIndex)\n event.api.setFocusedCell(parent.rowIndex, 'name')\n }\n }\n }\n },\n }),\n [animate]\n )\n\n const clearSelection = () => setSelectedIds(new Set())\n // A Chat chip only once there is a plain chat, so the chips add up to All.\n const filterKeys = (['all', ...STATUS_ORDER] as TaskFilter[]).filter(\n (key) => key !== 'chat' || (counts.get(key) ?? 0) > 0\n )\n const hasChildren = tree.kids.size > 0\n\n return (\n <div\n className=\"flex min-h-0 flex-1 flex-col gap-3\"\n data-testid={testIdOr(testId, { testId: 'task-list' })}\n >\n {header}\n <div className=\"flex flex-wrap items-center gap-2\">\n <div role=\"tablist\" aria-label=\"Filter tasks\" className=\"flex flex-wrap gap-1.5\">\n {filterKeys.map((key) => {\n const count = counts.get(key) ?? 0\n const isSelected = filter === key\n return (\n <button\n key={key}\n type=\"button\"\n role=\"tab\"\n aria-selected={isSelected}\n onClick={() => setFilter(key)}\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full border px-3 py-1 text-xs font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11',\n isSelected\n ? 'border-primary bg-primary/10 text-primary'\n : 'border-border text-muted-foreground hover:bg-accent'\n )}\n data-testid={`task-filter-${key}`}\n >\n {key === 'all' ? l.filterAll : l.status[key]}\n <span className=\"tabular-nums opacity-70\">{count}</span>\n </button>\n )\n })}\n </div>\n <Input\n type=\"search\"\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n placeholder={l.searchPlaceholder}\n aria-label={l.searchLabel}\n className=\"h-8 max-w-56 text-xs pointer-coarse:h-11\"\n data-testid=\"task-search\"\n />\n {hasChildren && (\n <div className=\"ml-auto flex gap-1\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1.5 text-xs pointer-coarse:h-11\"\n onClick={expandAll}\n data-testid=\"task-expand-all\"\n >\n <ChevronsUpDown className=\"size-3.5\" aria-hidden />\n {l.expandAll}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1.5 text-xs pointer-coarse:h-11\"\n onClick={collapseAll}\n data-testid=\"task-collapse-all\"\n >\n <ChevronsDownUp className=\"size-3.5\" aria-hidden />\n {l.collapseAll}\n </Button>\n </div>\n )}\n </div>\n {tasks.length === 0 && !isLoading ? (\n <EmptyState\n icon={ListTodo}\n title={l.emptyTitle}\n description={l.emptyMessage}\n testId=\"task-list-empty\"\n />\n ) : (\n <div className=\"min-h-0 flex-1\">\n <GridView<Row<T>>\n testId=\"task-grid\"\n gridId={props.gridId ?? 'tasks-grid-v4'}\n items={rows}\n columnDefs={columnDefs}\n getItemId={(row) => row.external_id}\n getRowTestId={(row) => `task-row-${row.external_id}`}\n isLoading={isLoading}\n showEmpty={rows.length === 0}\n emptyState={{ title: l.noMatches }}\n rowHeight={narrow ? NARROW_ROW_HEIGHT : ROW_HEIGHT}\n height=\"100%\"\n onGridReady={({ api }) => {\n apiRef.current = api\n }}\n selection={{\n mode: 'multiple',\n controlled: true,\n selected: selectedRows,\n onSelectionChange: handleSelectionChange,\n }}\n gridOptions={gridOptions}\n />\n </div>\n )}\n <SelectionBar\n count={selectedTasks.length}\n onClear={clearSelection}\n status={\n selectedTasks.length > 0 && subtasksIncluded > 0 ? (\n <span className=\"text-xs text-muted-foreground\" data-testid=\"task-selection-subtasks\">\n {l.subtasksSelected(subtasksIncluded)}\n </span>\n ) : undefined\n }\n >\n {(isCompact) => (\n <>\n {props.selectionActions?.(selectedTasks, isCompact, clearSelection)}\n {props.onMarkDoneMany && (\n <SelectionBarAction\n icon={CheckCheck}\n label={l.markDoneMany}\n onClick={() => {\n props.onMarkDoneMany?.(markable)\n clearSelection()\n }}\n disabled={markable.length === 0}\n isCompact={isCompact}\n tooltip={l.markDoneManyHint}\n testId=\"task-bulk-done\"\n />\n )}\n {props.onDeleteMany && (\n <SelectionBarAction\n icon={Trash2}\n label={l.deleteMany}\n onClick={() => {\n props.onDeleteMany?.(deletable)\n clearSelection()\n }}\n disabled={deletable.length === 0}\n isCompact={isCompact}\n className=\"border-red-border text-red-text hover:bg-red-bg hover:text-red-text\"\n testId=\"task-bulk-delete\"\n />\n )}\n </>\n )}\n </SelectionBar>\n {moving && props.onMove && (\n <TaskMoveDialog\n open\n onOpenChange={(open) => !open && setMoving(null)}\n options={moveTargets(tasks, moving).map((t) => ({ id: t.external_id, label: nameOf(t) }))}\n currentParentId={moving.parent_conversation_ext_id}\n onPick={(parentId) => props.onMove?.(moving, parentId)}\n labels={{\n title: l.moveToTitle(nameOf(moving)),\n none: l.moveToNone,\n search: l.moveToSearch,\n empty: l.moveToEmpty,\n cancel: l.moveToCancel,\n }}\n />\n )}\n </div>\n )\n}\n","import { useState } from 'react'\nimport {\n CheckCheck,\n ListTodo,\n ChevronDown,\n ChevronRight,\n FileText,\n MoreHorizontal,\n Plus,\n Trash2,\n Workflow,\n} from 'lucide-react'\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport { FilterInput, type FilterField } from '../../shell/FilterInput'\nimport { TriStateFilterMenu, type TriState } from '../../settings/TriStateFilterMenu'\nimport { TabHeader } from '../../shell/TabHeader'\nimport { SelectionBar, SelectionBarAction } from '../../files/SelectionBar'\nimport { EmptyState } from '../../components/EmptyState'\nimport { PersonPill } from './PersonPill'\nimport { TaskStatusPill } from './TaskStatusPill'\nimport { TaskRowMenu } from './TaskRowMenu'\nimport { TaskMoveDialog } from './TaskMoveDialog'\nimport { DEFAULT_TASK_LIST_LABELS } from './taskTableLabels'\nimport { asTaskStatus } from './taskLabels'\nimport { isPlainTodo, moveTargets, ownerExtId, type TaskListRow } from './taskRows'\nimport type { TaskTableProps } from './TaskTable'\n\nexport interface TaskInboxWorkflow {\n external_id: string\n name: string\n active: boolean\n is_owner?: boolean\n last_error?: string | null\n summary?: string\n next_fire_at?: string | null\n}\nexport interface TaskInboxWorkflowActions {\n workflows?: readonly TaskInboxWorkflow[]\n onEditWorkflow?: (id: string) => void\n onCreateWorkflow?: () => void\n onToggleWorkflow?: (id: string, active: boolean) => void\n onDeleteWorkflow?: (id: string) => void\n onWorkflowHistory?: (id: string) => void\n}\nexport interface TaskInboxProps<T extends TaskListRow>\n extends TaskTableProps<T>, TaskInboxWorkflowActions {\n onFilterTextChange?: (text: string) => void\n onCreate?: () => void\n onNotify?: (task: T) => void\n}\n/** Tasks and saved workflows form one list. A workflow contains its runs; a task contains its substeps. */\nexport function TaskInbox<T extends TaskListRow>(p: TaskInboxProps<T>) {\n const [filterOpen, setFilterOpen] = useState(false)\n const [statusFilters, setStatusFilters] = useState<Map<string, TriState>>(\n () => new Map([['done', 'exclude']])\n )\n const [localQuery, setLocalQuery] = useState('')\n const [searchFields, setSearchFields] = useState<FilterField[]>(['text', 'labels'])\n const [selected, setSelected] = useState<Set<string>>(new Set())\n const [collapsed, setCollapsed] = useState<Set<string>>(new Set())\n const [moving, setMoving] = useState<T | null>(null)\n const l = { ...DEFAULT_TASK_LIST_LABELS, ...p.labels }\n const nameOf = (t: T) =>\n t.title?.trim() || (t.workflow_ext_id && p.workflowNames?.[t.workflow_ext_id]) || l.untitled\n const all = p.tasks.filter((t) => t.status != null)\n const filterText = p.filterText ?? localQuery\n const q = filterText.trim().toLowerCase()\n const included = [...statusFilters].filter(([, state]) => state === 'include').map(([id]) => id)\n const statusMatches = (t: T) =>\n statusFilters.get(asTaskStatus(t.status)) !== 'exclude' &&\n (!included.length || included.includes(asTaskStatus(t.status)))\n const rows = all.filter(\n (t) =>\n statusMatches(t) &&\n (!q ||\n [\n searchFields.includes('text') ? `${nameOf(t)} ${t.description ?? ''}` : '',\n searchFields.includes('labels') && t.workflow_ext_id\n ? (p.workflowNames?.[t.workflow_ext_id] ?? '')\n : '',\n ]\n .join(' ')\n .toLowerCase()\n .includes(q))\n )\n const hasActiveFilters = !!q || [...statusFilters.values()].some((state) => state != null)\n const selectedTasks = all.filter((t) => selected.has(t.external_id))\n const canEdit = (t: T) => t.is_owner !== false || Boolean(p.canEditShared)\n const markable = (t: T) =>\n t.status !== 'done' && t.status !== 'generating' && canEdit(t) && !t.in_progress\n const markableTasks = selectedTasks.filter(markable)\n const deletableTasks = selectedTasks.filter((t) => t.is_owner !== false || p.isWorkspaceOwner)\n const clearSelection = () => setSelected(new Set())\n const toggle = (set: React.Dispatch<React.SetStateAction<Set<string>>>, id: string) =>\n set((old) => {\n const next = new Set(old)\n if (next.has(id)) next.delete(id)\n else next.add(id)\n return next\n })\n const person = (t: T) => {\n const id = ownerExtId(t)\n return {\n id,\n label:\n t.is_owner !== false ? 'You' : (p.people?.find((x) => x.id === id)?.label ?? l.someone),\n isMe: t.is_owner !== false,\n }\n }\n const renderPerson = p.renderPerson ?? ((value) => <PersonPill person={value} />)\n const taskById = new Map(all.map((t) => [t.external_id, t]))\n const visible = new Set(rows.map((t) => t.external_id))\n // Keep the parent as context when only a child matches a filter.\n for (const task of rows) {\n let id = task.parent_conversation_ext_id\n const seen = new Set<string>()\n while (id && taskById.has(id) && !seen.has(id)) {\n seen.add(id)\n visible.add(id)\n id = taskById.get(id)?.parent_conversation_ext_id\n }\n }\n const listed = all.filter((t) => visible.has(t.external_id))\n const roots = listed.filter(\n (t) => !t.parent_conversation_ext_id || !visible.has(t.parent_conversation_ext_id)\n )\n const workflows = (p.workflows ?? []).filter((w) => {\n const runs = roots.filter((t) => t.workflow_ext_id === w.external_id)\n return runs.length > 0 || (!included.length && (!q || w.name.toLowerCase().includes(q)))\n })\n const workflowIds = new Set(workflows.map((w) => w.external_id))\n const order = (a: T, b: T) => {\n const weight = (t: T) =>\n t.pending_auth_request_id || t.last_error\n ? 0\n : t.status === 'todo'\n ? 1\n : t.status === 'generating'\n ? 2\n : 3\n return weight(a) - weight(b) || (b.updated_at ?? '').localeCompare(a.updated_at ?? '')\n }\n const renderTask = (task: T, depth = 0): React.ReactNode => {\n const id = task.external_id\n const status = asTaskStatus(task.status)\n const busy = p.busyId === id\n const children = listed.filter((t) => t.parent_conversation_ext_id === id).sort(order)\n const outputs = p.outputsByTask?.[id] ?? []\n return (\n <li key={id} data-testid={`task-inbox-row-${id}`}>\n <div\n className={cn(\n 'relative flex cursor-pointer items-start gap-2 border-b py-3 hover:bg-muted/40',\n selected.has(id) && 'bg-muted/60'\n )}\n onClick={(event) => {\n if (\n !(event.target as HTMLElement).closest(\n 'button, a, input, select, textarea, [role=\"menuitem\"], [role=\"checkbox\"], [role=\"combobox\"]'\n )\n ) {\n p.onOpenThread(id, task)\n }\n }}\n style={{ paddingLeft: `${Math.min(depth, 5) * 20}px` }}\n >\n {children.length > 0 && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 shrink-0\"\n aria-label={`${collapsed.has(id) ? 'Expand' : 'Collapse'} ${nameOf(task)}`}\n onClick={() => toggle(setCollapsed, id)}\n >\n {collapsed.has(id) ? (\n <ChevronRight className=\"size-4\" />\n ) : (\n <ChevronDown className=\"size-4\" />\n )}\n </Button>\n )}\n <div className=\"min-w-0 flex-1\">\n <button\n className={cn(\n 'block w-full text-left text-sm font-medium hover:underline',\n status === 'done' && 'text-muted-foreground'\n )}\n data-testid={`task-open-${id}`}\n onClick={() => p.onOpenThread(id, task)}\n >\n {nameOf(task)}\n </button>\n <div className=\"mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-muted-foreground\">\n {status !== 'todo' && (\n <TaskStatusPill\n id={id}\n status={task.status}\n runStartedAt={task.run_started_at}\n lastError={task.last_error}\n awaitingAccess={Boolean(task.pending_auth_request_id)}\n />\n )}\n {task.due_at && <span>Due {p.formatDate(task.due_at)}</span>}\n {children.length > 0 && (\n <span>\n {\n all.filter((t) => t.parent_conversation_ext_id === id && t.status === 'done')\n .length\n }\n /{all.filter((t) => t.parent_conversation_ext_id === id).length} steps complete\n </span>\n )}\n </div>\n {outputs.length > 0 && (\n <div className=\"mt-2 flex flex-wrap gap-2\" aria-label=\"Outputs\">\n {outputs.map((output) => (\n <Button\n key={output.id}\n variant=\"link\"\n size=\"sm\"\n className=\"h-auto max-w-full gap-1 px-0 py-1 text-xs\"\n disabled={!p.onOpenOutput}\n onClick={() => p.onOpenOutput?.(output.id, task)}\n data-testid={`task-output-${id}-${output.id}`}\n >\n <FileText className=\"size-3.5 shrink-0\" />\n <span className=\"truncate\">{output.name}</span>\n </Button>\n ))}\n </div>\n )}\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {task.pending_auth_request_id && task.is_owner !== false && p.onGrantAccess && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n disabled={busy}\n onClick={() => p.onGrantAccess?.(task)}\n >\n Allow access\n </Button>\n )}\n <TaskRowMenu\n task={task}\n status={status}\n busy={busy}\n isOwner={task.is_owner !== false}\n canAdmin={task.is_owner !== false || Boolean(p.isWorkspaceOwner)}\n canEdit={canEdit(task)}\n canMarkDone={markable(task)}\n canReopen={canEdit(task)}\n selected={selected.has(id)}\n onToggleSelected={\n p.selectionActions || p.onMarkDoneMany || p.onDeleteMany\n ? () => toggle(setSelected, id)\n : undefined\n }\n labels={l}\n onMarkDone={() => p.onMarkDone(task)}\n onNotify={p.onNotify ? () => p.onNotify?.(task) : undefined}\n onReopen={() => p.onReopen(task)}\n onEdit={() => p.onEdit(task)}\n onAddSubtask={p.onAddSubtask ? () => p.onAddSubtask?.(task) : undefined}\n onMoveTo={p.onMove ? () => setMoving(task) : undefined}\n onOpenActivity={p.onOpenActivity ? () => p.onOpenActivity?.(task) : undefined}\n onToggleShared={\n p.onToggleShared ? () => p.onToggleShared?.(task, !task.is_shared) : undefined\n }\n />\n </div>\n </div>\n {children.length > 0 && !collapsed.has(id) && (\n <ul>{children.map((child) => renderTask(child, depth + 1))}</ul>\n )}\n </li>\n )\n }\n return (\n <div className=\"flex min-h-0 flex-1 flex-col\" data-testid={p.testId ?? 'task-inbox'}>\n <TabHeader\n testId=\"tasks-tab-header\"\n tabs={[\n {\n id: 'tasks',\n label: '',\n count: rows.length,\n countPlacement: 'leading',\n countIcon: <ListTodo className=\"size-3.5\" />,\n hasActiveFilters,\n testId: 'tasks-tab',\n presentation: 'count',\n },\n ]}\n activeTabId=\"tasks\"\n onTabChange={() => {}}\n firstTabContent={\n <FilterInput\n value={filterText}\n onChange={p.onFilterTextChange ?? setLocalQuery}\n fields={searchFields}\n onFieldsChange={setSearchFields}\n labels={{ fieldNames: { text: 'Task', labels: 'Workflow' } }}\n className=\"w-44 max-w-[40vw]\"\n testIds={{\n root: 'tasks-filter',\n input: 'tasks-filter-input',\n fieldsButton: 'tasks-filter-fields',\n }}\n filter={\n <TriStateFilterMenu\n testId=\"tasks-status-filter\"\n open={filterOpen}\n onOpenChange={setFilterOpen}\n filterStates={statusFilters}\n onFiltersChange={setStatusFilters}\n options={[\n {\n id: 'todo',\n label: 'To do',\n count: all.filter((t) => t.status === 'todo').length,\n },\n {\n id: 'generating',\n label: 'Generating',\n count: all.filter((t) => t.status === 'generating').length,\n },\n {\n id: 'done',\n label: 'Completed',\n count: all.filter((t) => t.status === 'done').length,\n },\n ]}\n groups={[{ label: 'Status', options: ['todo', 'generating', 'done'] }]}\n triggerClassName=\"flex h-5 items-center gap-0.5 rounded px-1 text-muted-foreground hover:text-foreground pointer-coarse:h-11! pointer-coarse:min-w-11 pointer-coarse:justify-center\"\n renderChevron\n disableHoverOpen\n />\n }\n />\n }\n rightContent={\n p.onCreate ? (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button data-testid=\"new-task-button\">\n <Plus className=\"mr-1 size-4\" />\n New\n <ChevronDown className=\"ml-1 size-3\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n <DropdownMenuItem onSelect={p.onCreate}>Task</DropdownMenuItem>\n {p.onCreateWorkflow && (\n <DropdownMenuItem onSelect={p.onCreateWorkflow}>Saved workflow</DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n ) : (\n p.header\n )\n }\n />\n <div className=\"min-h-0 flex-1 overflow-y-auto\" aria-busy={p.isLoading}>\n {p.isLoading ? (\n <p className=\"py-12 text-center text-sm text-muted-foreground\">Loading work…</p>\n ) : !listed.length && !workflows.length ? (\n <EmptyState\n title={q ? 'No matches' : all.length ? 'You’re all caught up' : 'No work here yet'}\n description=\"Create a task from a prompt or a saved workflow. Keep its drafts and outputs together.\"\n />\n ) : (\n <ul>\n {workflows.map((w) => {\n const runs = roots.filter((t) => t.workflow_ext_id === w.external_id).sort(order)\n const editable = w.is_owner !== false || p.canEditShared\n return (\n <li key={w.external_id} data-testid={`task-workflow-${w.external_id}`}>\n <div className=\"flex items-start gap-2 border-b py-3\">\n {runs.length > 0 ? (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={`${collapsed.has(w.external_id) ? 'Expand' : 'Collapse'} ${w.name}`}\n onClick={() => toggle(setCollapsed, w.external_id)}\n >\n {collapsed.has(w.external_id) ? (\n <ChevronRight className=\"size-4\" />\n ) : (\n <ChevronDown className=\"size-4\" />\n )}\n </Button>\n ) : (\n <Workflow className=\"mx-1 mt-1 size-4 shrink-0 text-muted-foreground\" />\n )}\n <div className=\"min-w-0 flex-1\">\n <button\n className=\"block text-left text-sm font-medium hover:underline\"\n disabled={!editable}\n onClick={() => p.onEditWorkflow?.(w.external_id)}\n >\n {w.name}\n </button>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n Saved workflow · {w.summary ?? 'Run when needed'}\n {!w.active ? ' · Paused' : ''}\n {runs.length\n ? ` · ${runs.length} ${runs.length === 1 ? 'task' : 'tasks'}`\n : ''}\n </p>\n {w.last_error && (\n <p className=\"mt-1 text-xs text-destructive\">{w.last_error}</p>\n )}\n </div>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8\"\n aria-label={`Actions for ${w.name}`}\n >\n <MoreHorizontal className=\"size-4\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {p.onWorkflowHistory && (\n <DropdownMenuItem onSelect={() => p.onWorkflowHistory?.(w.external_id)}>\n Run history\n </DropdownMenuItem>\n )}\n {editable && p.onToggleWorkflow && (\n <DropdownMenuItem\n onSelect={() => p.onToggleWorkflow?.(w.external_id, !w.active)}\n >\n {w.active ? 'Pause' : 'Resume'}\n </DropdownMenuItem>\n )}\n {(w.is_owner !== false || p.isWorkspaceOwner) && p.onDeleteWorkflow && (\n <DropdownMenuItem onSelect={() => p.onDeleteWorkflow?.(w.external_id)}>\n Delete workflow\n </DropdownMenuItem>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n {!collapsed.has(w.external_id) && runs.length > 0 && (\n <ul>{runs.map((t) => renderTask(t, 1))}</ul>\n )}\n </li>\n )\n })}\n {roots\n .filter((t) => !t.workflow_ext_id || !workflowIds.has(t.workflow_ext_id))\n .sort(order)\n .map((t) => renderTask(t))}\n </ul>\n )}\n </div>\n <SelectionBar count={selectedTasks.length} onClear={clearSelection}>\n {(isCompact) => (\n <>\n {p.selectionActions?.(selectedTasks, isCompact, clearSelection)}\n {p.onMarkDoneMany && (\n <SelectionBarAction\n icon={CheckCheck}\n label={l.markDoneMany}\n isCompact={isCompact}\n disabled={!markableTasks.length}\n onClick={() => {\n p.onMarkDoneMany?.(markableTasks)\n clearSelection()\n }}\n testId=\"task-bulk-done\"\n />\n )}\n {p.onDeleteMany && (\n <SelectionBarAction\n icon={Trash2}\n label={l.deleteMany}\n isCompact={isCompact}\n disabled={!deletableTasks.length}\n onClick={() => {\n p.onDeleteMany?.(deletableTasks)\n clearSelection()\n }}\n className=\"text-red-text hover:bg-red-bg hover:text-red-text\"\n testId=\"task-bulk-delete\"\n />\n )}\n </>\n )}\n </SelectionBar>\n {moving && p.onMove && (\n <TaskMoveDialog\n open\n onOpenChange={(open) => !open && setMoving(null)}\n options={moveTargets(all, moving).map((t) => ({ id: t.external_id, label: nameOf(t) }))}\n currentParentId={moving.parent_conversation_ext_id}\n onPick={(id) => p.onMove?.(moving, id)}\n labels={{\n title: l.moveToTitle(nameOf(moving)),\n none: l.moveToNone,\n search: l.moveToSearch,\n empty: l.moveToEmpty,\n cancel: l.moveToCancel,\n }}\n />\n )}\n </div>\n )\n}\n","/**\n * Where a thread stands, in one word and one look for every row of a list — a plain chat, a to-do,\n * a workflow run — as a list of agents says it: Generating, Needs you, Up next, Ready, To do,\n * Done, Failed. An icon and the word in the state's colour, then what it is about (the next step).\n */\n\nimport type { ReactNode } from 'react'\nimport {\n AlertCircle,\n CheckCheck,\n CircleCheck,\n CircleDashed,\n Clock,\n Hand,\n KeyRound,\n Loader2,\n} from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport type ThreadState =\n 'generating' | 'needs' | 'next' | 'ready' | 'todo' | 'done' | 'failed' | 'queued' | 'access'\n\nexport interface ThreadStateLabels {\n generating: string\n /** `{name}` is replaced (\"you\", a person). */\n needs: string\n next: string\n ready: string\n todo: string\n done: string\n failed: string\n queued: string\n access: string\n}\n\nexport const DEFAULT_THREAD_STATE_LABELS: ThreadStateLabels = {\n generating: 'Generating',\n needs: 'Needs {name}',\n next: 'Up next',\n ready: 'Ready',\n todo: 'To do',\n done: 'Done',\n failed: 'Failed',\n queued: 'Queued',\n access: 'Needs access',\n}\n\nconst LOOK: Record<ThreadState, { icon: ReactNode; className: string }> = {\n generating: {\n icon: <Loader2 className=\"animate-spin\" />,\n className: 'text-amber-700 dark:text-amber-300',\n },\n needs: { icon: <Hand />, className: 'text-orange-700 dark:text-orange-300' },\n next: { icon: <Clock />, className: 'text-muted-foreground' },\n ready: { icon: <CircleCheck />, className: 'text-emerald-700 dark:text-emerald-400' },\n todo: { icon: <CircleDashed />, className: 'text-muted-foreground' },\n done: { icon: <CheckCheck />, className: 'text-muted-foreground' },\n failed: { icon: <AlertCircle />, className: 'text-red-text' },\n queued: { icon: <Clock />, className: 'text-amber-700 dark:text-amber-300' },\n access: { icon: <KeyRound />, className: 'text-red-text' },\n}\n\nexport interface ThreadStatusLineProps {\n state: ThreadState\n /** Who a `needs` state waits for (\"you\", a name). */\n name?: string\n /** What it is about, after the word (the next step's title). */\n detail?: string\n /** After the word, e.g. a live elapsed time. */\n extra?: ReactNode\n labels?: Partial<ThreadStateLabels>\n className?: string\n testId?: string\n}\n\nexport function ThreadStatusLine({\n state,\n name = 'you',\n detail,\n extra,\n labels,\n className,\n testId,\n}: ThreadStatusLineProps) {\n const l = { ...DEFAULT_THREAD_STATE_LABELS, ...labels }\n const { icon, className: tone } = LOOK[state]\n const word = l[state].replace('{name}', name)\n return (\n <span\n className={cn('flex min-w-0 items-center gap-1.5 text-xs leading-tight', className)}\n title={detail ? `${word} · ${detail}` : word}\n data-state={state}\n data-testid={testId}\n >\n <span className={cn('flex shrink-0 [&_svg]:size-3.5', tone)} aria-hidden>\n {icon}\n </span>\n <span className={cn('shrink-0 font-medium', tone)}>{word}</span>\n {extra}\n {detail && <span className=\"min-w-0 truncate text-foreground\">· {detail}</span>}\n </span>\n )\n}\n","import type { MouseEvent, ReactNode } from 'react'\nimport { EntityPill, Tooltip, TooltipContent, TooltipTrigger, cn } from '@arbidocs/react/ui'\n\nexport interface EntityChipProps {\n /** `pill`: glyph + label in an EntityPill; `icon`: the bare glyph (tooltip shows the details). */\n variant?: 'icon' | 'pill'\n icon: ReactNode\n label: string\n /** Second line of the icon variant's tooltip (e.g. \"Shared\", a model name). */\n detail?: ReactNode\n /** Tooltip of the pill variant (e.g. \"Open conversation\"). */\n pillTooltip?: ReactNode\n /** Tooltip of the icon variant; defaults to label + detail. Set false to drop it. */\n showTooltip?: boolean\n href?: string\n onClick?: (e: MouseEvent) => void\n size?: 'sm' | 'base'\n labelMaxWidth?: string\n className?: string\n testId?: string\n}\n\n/**\n * The shared shape of an entity reference (conversation, message, assistant ...): a bare glyph\n * with a tooltip, or a pill with the label. Clickable when it has `onClick` or `href`.\n */\nexport function EntityChip({\n variant = 'pill',\n icon,\n label,\n detail,\n pillTooltip,\n showTooltip = true,\n href,\n onClick,\n size = 'sm',\n labelMaxWidth,\n className,\n testId,\n}: EntityChipProps) {\n if (variant === 'icon') {\n const glyph = (\n <span\n data-slot=\"entity-chip\"\n className={cn('inline-flex items-center', (onClick || href) && 'cursor-pointer', className)}\n onClick={onClick}\n data-testid={testId}\n >\n {href ? (\n <a href={href} target=\"_blank\" rel=\"noopener noreferrer\">\n {icon}\n </a>\n ) : (\n icon\n )}\n </span>\n )\n if (!showTooltip) return glyph\n return (\n <Tooltip>\n <TooltipTrigger className=\"inline-flex\">{glyph}</TooltipTrigger>\n <TooltipContent side=\"bottom\">\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"font-medium\">{label}</span>\n {detail && <span className=\"text-xs text-muted-foreground\">{detail}</span>}\n </div>\n </TooltipContent>\n </Tooltip>\n )\n }\n\n return (\n <EntityPill\n icon={icon}\n label={label}\n size={size}\n shape=\"rounded\"\n href={href}\n onClick={onClick}\n tooltipContent={pillTooltip}\n labelMaxWidth={labelMaxWidth}\n className={className}\n data-testid={testId}\n />\n )\n}\n","import { useMemo, useRef, useState, type ReactNode } from 'react'\nimport { MessageSquare } from 'lucide-react'\nimport { ThreadVisibilityIcon } from '@arbidocs/react/ui'\nimport { ThreadStatusLine } from './ThreadStatusLine'\nimport { EntityChip } from '../../components/EntityChip'\nimport { CellHoverIcon } from '../../files/cells/HoverIconCell'\nimport type { ColDef, ICellRendererParams, ValueGetterParams } from 'ag-grid-community'\nimport { GridView } from '../../files/GridView'\nimport { SelectionBar } from '../../files/SelectionBar'\nimport { TabHeader } from '../../shell/TabHeader'\nimport { FilterInput } from '../../shell/FilterInput'\nimport { useIsPhone } from '../../lib/use-media-query'\n\n/** Only fields on the conversation object: no message or participant fetches. */\nexport interface ConversationListRow {\n external_id: string\n title?: string | null\n created_at?: string | null\n updated_at?: string | null\n created_by_ext_id?: string | null\n assistant_mode?: string | null\n message_count?: number | null\n is_shared?: boolean | null\n is_owner?: boolean | null\n status?: string | null\n in_progress?: boolean | null\n last_message_role?: string | null\n last_message_updated_at?: string | null\n last_message_actor?: {\n external_id: string\n given_name: string\n family_name?: string | null\n picture?: string | null\n parent_ext_id?: string | null\n } | null\n last_message_status?: string | null\n /** Set when the thread is a call's meeting chat. */\n meeting_call_ext_id?: string | null\n}\n\nexport interface ConversationListViewProps<T extends ConversationListRow> {\n conversations: T[]\n isLoading?: boolean\n visibilityFilters?: { me: 'include' | 'exclude' | null; workspace: 'include' | 'exclude' | null }\n doneFilter?: 'include' | 'exclude' | null\n /** \"Meetings\": only (include) or no (exclude) meeting threads. */\n meetingFilter?: 'include' | 'exclude' | null\n filterText?: string\n header?: ReactNode\n /** Below the list: the launcher that starts a new thread from here. */\n footer?: ReactNode\n showHeader?: boolean\n formatDate: (iso: string) => string\n renderThread?: (conversation: T) => ReactNode\n renderBy?: (conversation: T) => ReactNode\n renderStatus?: (conversation: T) => ReactNode\n renderOwner?: (conversation: T) => ReactNode\n renderLabels?: (conversation: T) => ReactNode\n labelText?: (conversation: T) => string\n onOpen: (conversation: T) => void\n onRename: (conversation: T) => void\n onDelete: (conversation: T) => void\n canEditShared?: boolean\n isWorkspaceOwner?: boolean\n selectionActions?: (selected: T[], compact: boolean, clear: () => void) => ReactNode\n}\n\n/** Shared title/label filtering and latest-activity ordering for the header and grid. */\nexport function filterConversationRows<T extends ConversationListRow>(\n conversations: T[],\n query: string,\n labelText?: (row: T) => string,\n doneFilter: 'include' | 'exclude' | null = 'exclude',\n visibilityFilters?: { me: 'include' | 'exclude' | null; workspace: 'include' | 'exclude' | null },\n meetingFilter: 'include' | 'exclude' | null = null\n): T[] {\n const q = query.trim().toLowerCase()\n return [...conversations]\n .sort(\n (a, b) =>\n (Date.parse(b.last_message_updated_at || b.updated_at || b.created_at || '') || 0) -\n (Date.parse(a.last_message_updated_at || a.updated_at || a.created_at || '') || 0)\n )\n .filter((row) =>\n doneFilter === 'exclude'\n ? row.status !== 'done'\n : doneFilter === 'include'\n ? row.status === 'done'\n : true\n )\n .filter((row) => {\n const state = row.is_shared ? visibilityFilters?.workspace : visibilityFilters?.me\n const hasIncluded =\n visibilityFilters?.me === 'include' || visibilityFilters?.workspace === 'include'\n return state !== 'exclude' && (!hasIncluded || state === 'include')\n })\n .filter((row) =>\n meetingFilter === 'include'\n ? !!row.meeting_call_ext_id\n : meetingFilter === 'exclude'\n ? !row.meeting_call_ext_id\n : true\n )\n .filter((row) => !q || `${row.title ?? ''} ${labelText?.(row) ?? ''}`.toLowerCase().includes(q))\n}\n\n/** Conversation history ordered by activity, including conversations attached to work. */\nexport function ConversationListView<T extends ConversationListRow>(\n p: ConversationListViewProps<T>\n) {\n const liveProps = useRef(p)\n liveProps.current = p\n const [query, setQuery] = useState('')\n const [selected, setSelected] = useState<Set<string>>(new Set())\n const q = `${query} ${p.filterText ?? ''}`.trim().toLowerCase()\n // On a phone the thread name and labels stay; the other columns are hidden. Labels get a fixed\n // width there so the grid overflows and scrolls sideways instead of squeezing them into the edge.\n const isPhone = useIsPhone()\n const rows = useMemo(\n () =>\n filterConversationRows(\n p.conversations,\n q,\n p.labelText,\n p.doneFilter,\n p.visibilityFilters,\n p.meetingFilter\n ),\n [p.conversations, q, p.labelText, p.doneFilter, p.visibilityFilters, p.meetingFilter]\n )\n const selectedRows = p.conversations.filter((c) => selected.has(c.external_id))\n const hasLabels = p.conversations.some((c) => !!p.labelText?.(c))\n const columns = useMemo<ColDef<T>[]>(\n () => [\n {\n colId: 'name',\n headerName: 'Thread',\n flex: 2,\n minWidth: 200,\n valueGetter: ({ data }) => data?.title?.trim() || 'Untitled thread',\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data && (\n <div className=\"group flex h-full min-w-0 items-center gap-2\">\n <div className=\"min-w-0\">\n {liveProps.current.renderThread ? (\n liveProps.current.renderThread(data)\n ) : (\n <EntityChip\n icon={\n <ThreadVisibilityIcon shared={data.is_shared ?? false} className=\"size-4\" />\n }\n label={data.title?.trim() || 'Untitled thread'}\n pillTooltip=\"Open conversation\"\n labelMaxWidth=\"max-w-full\"\n onClick={() => liveProps.current.onOpen(data)}\n testId={`thread-open-${data.external_id}`}\n />\n )}\n </div>\n {/* How long it is, beside its name (not a column of its own). */}\n {(data.message_count ?? 0) > 0 && (\n <span\n className=\"inline-flex h-5 shrink-0 items-center gap-0.5 self-center rounded-full bg-muted px-1.5 text-[10px] font-medium leading-none tabular-nums text-muted-foreground\"\n title={`${data.message_count} ${data.message_count === 1 ? 'message' : 'messages'}`}\n data-testid={`thread-messages-${data.external_id}`}\n >\n <MessageSquare className=\"size-3\" aria-hidden />\n {data.message_count}\n </span>\n )}\n {(data.is_owner !== false || liveProps.current.canEditShared) && (\n <button\n type=\"button\"\n aria-label={`Rename ${data.title?.trim() || 'Untitled thread'}`}\n onClick={() => liveProps.current.onRename(data)}\n data-testid={`thread-rename-${data.external_id}`}\n className=\"shrink-0 pointer-coarse:flex pointer-coarse:size-11 pointer-coarse:items-center pointer-coarse:justify-center\"\n >\n <CellHoverIcon />\n </button>\n )}\n </div>\n ),\n },\n // Labels only when a thread has some (an empty column only takes the names' room), and never\n // on a phone, where the status is what a row must say.\n ...(liveProps.current.renderLabels && hasLabels && !isPhone\n ? [\n {\n colId: 'labels',\n headerName: 'Labels',\n flex: 0.5,\n minWidth: 100,\n valueGetter: ({ data }: ValueGetterParams<T>) =>\n data ? (liveProps.current.labelText?.(data) ?? '') : '',\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data && liveProps.current.renderLabels?.(data),\n },\n ]\n : []),\n {\n colId: 'status',\n headerName: 'Status',\n width: isPhone ? 170 : 240,\n valueGetter: ({ data }) => data?.status,\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data &&\n (liveProps.current.renderStatus ? (\n liveProps.current.renderStatus(data)\n ) : (\n <ThreadStatusLine\n state={data.status === 'done' ? 'done' : data.status === 'todo' ? 'todo' : 'ready'}\n />\n )),\n },\n // Who spoke last (their face) and when: the two read together, at the row's end.\n ...(liveProps.current.renderBy || liveProps.current.renderOwner\n ? [\n {\n colId: liveProps.current.renderBy ? 'by' : 'owner',\n headerName: liveProps.current.renderBy ? 'By' : 'Owner',\n width: 64,\n hide: isPhone,\n sortable: false,\n resizable: false,\n cellRenderer: ({ data }: ICellRendererParams<T>) =>\n data && (liveProps.current.renderBy || liveProps.current.renderOwner)?.(data),\n },\n ]\n : []),\n {\n colId: 'activity',\n initialSort: 'desc',\n headerName: 'Updated',\n width: 128,\n hide: isPhone,\n valueGetter: ({ data }) =>\n data?.last_message_updated_at || data?.updated_at || data?.created_at || '',\n valueFormatter: ({ value }) => (value ? liveProps.current.formatDate(value) : '—'),\n cellClass: 'flex items-center text-xs text-muted-foreground/80',\n },\n ],\n [\n Boolean(p.renderThread),\n Boolean(p.renderLabels),\n Boolean(p.renderOwner),\n Boolean(p.renderBy),\n Boolean(p.renderStatus),\n isPhone,\n hasLabels,\n ]\n )\n // Every cell's content sits in the middle of its row (a two-line title makes rows taller).\n const centred = useMemo(\n () => columns.map((c) => ({ cellClass: 'flex items-center', ...c })),\n [columns]\n )\n return (\n <div className=\"flex min-h-0 flex-1 flex-col\" data-testid=\"conversation-list-view\">\n {p.showHeader !== false && (\n <TabHeader\n testId=\"threads-tab-header\"\n tabs={[\n {\n id: 'threads',\n label: '',\n count: rows.length,\n countIcon: <MessageSquare className=\"size-3.5\" />,\n countPlacement: 'leading',\n presentation: 'count',\n hasActiveFilters: !!q,\n },\n ]}\n activeTabId=\"threads\"\n onTabChange={() => {}}\n firstTabContent={\n <FilterInput\n value={query}\n hideFieldPicker\n ariaLabel=\"Search threads\"\n onChange={setQuery}\n fields={['text']}\n onFieldsChange={() => {}}\n labels={{\n placeholder: 'Find a thread…',\n fieldNames: { text: 'Thread' },\n }}\n className=\"w-44 max-w-[40vw]\"\n />\n }\n rightContent={p.header}\n />\n )}\n <div className=\"min-h-0 flex-1\">\n <GridView<T>\n testId=\"threads-grid\"\n items={rows}\n columnDefs={centred}\n getItemId={(row) => row.external_id}\n getRowTestId={(row) => `thread-row-${row.external_id}`}\n onRowClick={p.onOpen}\n height=\"100%\"\n isLoading={p.isLoading}\n loadingMessage=\"Loading threads…\"\n emptyState={{\n title: q ? 'No threads match' : 'No conversations yet',\n message: p.footer\n ? 'Type below to ask ARBI, bring in people, or both.'\n : 'Use New Task to ask ARBI, bring in people, or both.',\n }}\n selection={\n p.selectionActions\n ? {\n mode: 'multiple',\n controlled: true,\n selected: selectedRows,\n onSelectionChange: (items) =>\n setSelected(new Set(items.map((item) => item.external_id))),\n }\n : undefined\n }\n gridOptions={{\n suppressClickEdit: true,\n onCellKeyDown: (event) => {\n if (\n (event.event as KeyboardEvent | undefined)?.key === 'Enter' &&\n 'column' in event &&\n event.column.getColId() === 'name' &&\n event.data\n )\n p.onOpen(event.data)\n },\n }}\n />\n </div>\n {p.footer}\n {p.selectionActions && (\n <SelectionBar count={selectedRows.length} onClear={() => setSelected(new Set())}>\n {(compact) => p.selectionActions?.(selectedRows, compact, () => setSelected(new Set()))}\n </SelectionBar>\n )}\n </div>\n )\n}\n","import { useEffect, useRef, useState } from 'react'\nimport { TabHeader } from '../../shell/TabHeader'\nimport { MentionMenu } from '../../chat/MentionMenu'\nimport { useMentionAutocomplete } from '../../chat/useMentionAutocomplete'\nimport {\n extractMentions,\n toMessageMentions,\n type MentionCandidate,\n type MessageMentionRef,\n} from '../../chat/mentions'\nimport { X } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n DialogClose,\n Label,\n Textarea,\n VisibilityToggle,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@arbidocs/react/ui'\n\nexport interface TaskStartValues {\n prompt: string\n workflowId: string | null\n todo: boolean\n shared: boolean\n /** The people @mentioned in the prompt. */\n mentions: MessageMentionRef[]\n}\n\nconst NO_PEOPLE: ReadonlyArray<MentionCandidate> = []\n\nexport interface TaskStartDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n workflows: readonly { external_id: string; name: string }[]\n /** Who can be @mentioned in the prompt: the workspace's people (the assistant is not one). */\n people?: ReadonlyArray<MentionCandidate>\n isPending?: boolean\n error?: string | null\n /** Replaces the start button's label (e.g. \"Look again\" while a started task's thread is late). */\n startLabel?: string\n onStart: (values: TaskStartValues) => void | Promise<void>\n onLater: (values: TaskStartValues) => void\n}\n\n/** One entry point: write a prompt, run a saved recipe, or keep a simple to-do. */\nexport function TaskStartDialog({\n open,\n onOpenChange,\n workflows,\n people = NO_PEOPLE,\n isPending,\n error,\n startLabel,\n onStart,\n onLater,\n}: TaskStartDialogProps) {\n const [prompt, setPrompt] = useState('')\n const [choice, setChoice] = useState('prompt')\n const [shared, setShared] = useState(false)\n const [sourceOpen, setSourceOpen] = useState(false)\n // The host keeps this component mounted, so a closed dialog would otherwise reopen with the last\n // unsent prompt. A failed start keeps the dialog open, so its draft is still kept for a retry.\n useEffect(() => {\n if (open) return\n setPrompt('')\n setChoice('prompt')\n setShared(false)\n setSourceOpen(false)\n }, [open])\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const mention = useMentionAutocomplete({\n value: prompt,\n onValueChange: setPrompt,\n candidates: people,\n textareaRef,\n })\n const todo = choice === 'todo'\n // The field asks ARBI unless the work is a to-do.\n const promptHint = todo ? 'What needs doing?' : 'What should ARBI do?'\n const workflowId = choice === 'prompt' || todo ? null : choice\n const valid = workflowId\n ? workflows.some((w) => w.external_id === workflowId)\n : Boolean(prompt.trim())\n const values: TaskStartValues = {\n prompt: prompt.trim(),\n workflowId,\n todo,\n shared,\n mentions: toMessageMentions(extractMentions(prompt, people)),\n }\n return (\n <Dialog modal={false} open={open} onOpenChange={(next) => !isPending && onOpenChange(next)}>\n <DialogContent\n presentation=\"right\"\n hideCloseButton\n onInteractOutside={(event) => event.preventDefault()}\n onEscapeKeyDown={(event) => {\n // Escape with the \"Who does the work\" menu open closes only the menu.\n if (!sourceOpen) return\n event.preventDefault()\n setSourceOpen(false)\n }}\n className=\"flex flex-col gap-0 overflow-hidden p-0 shadow-lg\"\n data-testid=\"task-start-dialog\"\n >\n <DialogTitle className=\"sr-only\">New task</DialogTitle>\n <DialogDescription className=\"sr-only\">\n Describe the task, then start it now or schedule it.\n </DialogDescription>\n <TabHeader\n tabs={[{ id: 'new-task', label: 'New task', presentation: 'count' }]}\n activeTabId=\"new-task\"\n onTabChange={() => {}}\n rightContent={\n <DialogClose asChild>\n <Button variant=\"ghost\" size=\"icon\" aria-label=\"Close\" disabled={isPending}>\n <X className=\"size-4\" />\n </Button>\n </DialogClose>\n }\n />\n <div className=\"min-h-0 flex-1 overflow-y-auto px-3 py-3\">\n {!workflowId ? (\n <>\n <Label className=\"sr-only\" htmlFor=\"task-start-prompt\">\n {promptHint}\n </Label>\n <div className=\"relative\">\n <Textarea\n id=\"task-start-prompt\"\n ref={textareaRef}\n autoFocus\n value={prompt}\n onChange={(event) => mention.onValueChange(event.target.value)}\n onKeyDown={mention.nav.handleKeyDown}\n {...(mention.isOpen ? mention.nav.comboboxProps : {})}\n {...mention.textareaProps}\n disabled={isPending}\n placeholder={promptHint}\n className=\"min-h-44 resize-y shadow-none\"\n />\n <MentionMenu\n open={mention.isOpen}\n placement=\"below\"\n items={mention.items}\n selectedIndex={mention.nav.selectedIndex}\n setSelectedIndex={mention.nav.setSelectedIndex}\n listboxId={mention.nav.listboxId}\n onSelect={mention.pick}\n />\n </div>\n </>\n ) : (\n <p className=\"text-sm\">\n {workflows.find((workflow) => workflow.external_id === workflowId)?.name}\n </p>\n )}\n <Select\n value={choice}\n onValueChange={setChoice}\n open={sourceOpen}\n onOpenChange={setSourceOpen}\n disabled={isPending}\n >\n <SelectTrigger\n id=\"task-start-source\"\n aria-label=\"Who does the work\"\n className=\"mt-3 h-7 w-auto max-w-full border-0 bg-transparent px-1 text-xs font-normal text-muted-foreground shadow-none hover:bg-muted\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"prompt\">With ARBI</SelectItem>\n <SelectItem value=\"todo\">To-do</SelectItem>\n {workflows.map((workflow) => (\n <SelectItem key={workflow.external_id} value={workflow.external_id}>\n {workflow.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {error && (\n <p role=\"alert\" className=\"mt-3 text-sm text-destructive\">\n {error}\n </p>\n )}\n </div>\n <div className=\"flex flex-wrap items-center justify-between gap-2 border-t px-3 py-2\">\n <Button\n variant=\"ghost\"\n disabled={!valid || isPending}\n onClick={() => onLater(values)}\n data-testid=\"task-start-later\"\n className=\"h-8 px-2 text-sm font-medium\"\n >\n Schedule\n </Button>\n <div className=\"ml-auto flex items-center gap-3\">\n <VisibilityToggle\n items={{ shared }}\n onToggle={setShared}\n label={shared ? 'Workspace' : 'Only Me'}\n disabled={isPending}\n data-testid=\"task-start-visibility\"\n />\n <Button\n disabled={!valid || isPending}\n data-testid=\"task-start-now\"\n className=\"h-8 px-3 text-sm font-medium\"\n onClick={async () => {\n try {\n await onStart(values)\n } catch {\n /* Host displays the failure; preserve the draft. */\n }\n }}\n >\n {isPending\n ? 'Starting…'\n : startLabel\n ? startLabel\n : todo\n ? 'Create task'\n : 'Start now'}\n </Button>\n </div>\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n","import { X } from 'lucide-react'\nimport { Button, Input, Label } from '@arbidocs/react/ui'\n\nexport interface DueDateMenuLabels {\n today: string\n tomorrow: string\n nextMonday: string\n inAWeek: string\n pick: string\n clear: string\n}\n\nexport const DEFAULT_DUE_DATE_MENU_LABELS: DueDateMenuLabels = {\n today: 'Today',\n tomorrow: 'Tomorrow',\n nextMonday: 'Next Monday',\n inAWeek: 'In a week',\n pick: 'Or pick a date and time',\n clear: 'Clear date',\n}\n\n/** The end of the working day, which a quick choice means. */\nconst END_OF_DAY_HOUR = 17\n\nconst pad = (n: number) => String(n).padStart(2, '0')\n\n/** A date as the `datetime-local` value the form holds: \"2026-10-12T17:00\" (local time). */\nexport function toLocalInput(date: Date): string {\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(date.getMinutes())}`\n}\n\nexport interface DuePreset {\n id: 'today' | 'tomorrow' | 'nextMonday' | 'inAWeek'\n value: string\n}\n\n/**\n * The quick choices, each at the end of the working day. \"Today\" is left out once that time has passed.\n * `now` is a parameter so the choices are testable.\n */\nexport function duePresets(now: Date = new Date()): DuePreset[] {\n const at = (daysAhead: number) => {\n const d = new Date(now)\n d.setDate(d.getDate() + daysAhead)\n d.setHours(END_OF_DAY_HOUR, 0, 0, 0)\n return d\n }\n const untilMonday = (8 - now.getDay()) % 7 || 7\n const presets: DuePreset[] = []\n if (now.getHours() < END_OF_DAY_HOUR) presets.push({ id: 'today', value: toLocalInput(at(0)) })\n presets.push(\n { id: 'tomorrow', value: toLocalInput(at(1)) },\n { id: 'nextMonday', value: toLocalInput(at(untilMonday)) },\n { id: 'inAWeek', value: toLocalInput(at(7)) }\n )\n return presets\n}\n\ninterface DueDateMenuProps {\n value: string\n onChange: (value: string) => void\n /** Keys the input's id and test ids. */\n id: string\n /** The accessible name of the date input. */\n label: string\n labels?: Partial<DueDateMenuLabels>\n}\n\n/** The body of a due-date popover: quick choices first, the exact date and time for the rest. */\nexport function DueDateMenu({ value, onChange, id, label, labels }: DueDateMenuProps) {\n const l = { ...DEFAULT_DUE_DATE_MENU_LABELS, ...labels }\n return (\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-menu`}>\n <div className=\"flex flex-wrap gap-1.5\">\n {duePresets().map((preset) => (\n <Button\n key={preset.id}\n type=\"button\"\n variant={value === preset.value ? 'secondary' : 'outline'}\n size=\"sm\"\n className=\"h-8 pointer-coarse:h-11\"\n onClick={() => onChange(preset.value)}\n data-testid={`${id}-preset-${preset.id}`}\n >\n {l[preset.id]}\n </Button>\n ))}\n </div>\n <div className=\"flex items-center gap-2\">\n <Label htmlFor={`${id}-input`} className=\"sr-only\">\n {label}\n </Label>\n <Input\n id={`${id}-input`}\n type=\"datetime-local\"\n aria-label={l.pick}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n data-testid={id}\n />\n {value && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n aria-label={l.clear}\n onClick={() => onChange('')}\n >\n <X className=\"size-4\" aria-hidden />\n </Button>\n )}\n </div>\n </div>\n )\n}\n","import { useState, type ReactNode } from 'react'\nimport { Check, ChevronDown } from 'lucide-react'\nimport {\n Command,\n CommandEmpty,\n CommandInput,\n CommandItem,\n CommandList,\n EntityPill,\n Popover,\n PopoverContent,\n PopoverTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface PillOption {\n id: string\n label: string\n /** Small line after the label in the list (e.g. a role). */\n description?: string\n /** Glyph before the label in the list and, when chosen, on the pill. */\n icon?: ReactNode\n}\n\nexport interface PillSelectLabels {\n /** The search box placeholder. */\n search: string\n /** Shown when the search matches nothing. */\n empty: string\n}\n\nexport const DEFAULT_PILL_SELECT_LABELS: PillSelectLabels = {\n search: 'Search…',\n empty: 'No match.',\n}\n\nexport interface PillSelectProps {\n /** The pill's glyph when nothing (or an option without its own icon) is chosen. */\n icon: ReactNode\n /** Names the property on the pill: \"Sign-off: Me\". */\n prefix: string\n /** The chosen option id; `''` is the \"none\" entry when `noneOption` is set. */\n value: string\n options: PillOption[]\n onChange: (id: string) => void\n /** Adds an entry that clears the choice (id `''`), e.g. \"Me\" or \"Nothing\". */\n noneOption?: PillOption\n /** Show a search box (for long lists such as people or tasks). */\n searchable?: boolean\n disabled?: boolean\n testId?: string\n labels?: Partial<PillSelectLabels>\n className?: string\n}\n\n/**\n * A property as a pill that opens a list, like every other entity reference in the app: the pill shows\n * `Prefix: choice`, the popover lists the options (searchable when long), one is chosen and it closes.\n */\nexport function PillSelect({\n icon,\n prefix,\n value,\n options,\n onChange,\n noneOption,\n searchable = false,\n disabled = false,\n testId,\n labels,\n className,\n}: PillSelectProps) {\n const l = { ...DEFAULT_PILL_SELECT_LABELS, ...labels }\n const [open, setOpen] = useState(false)\n const all = noneOption ? [noneOption, ...options] : options\n const chosen = all.find((o) => o.id === value)\n const id = testIdOr(testId, { testId: 'pill-select' })\n\n const choose = (next: string) => {\n onChange(next)\n setOpen(false)\n }\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild disabled={disabled}>\n <EntityPill\n icon={chosen?.icon ?? icon}\n label={`${prefix}: ${chosen?.label ?? ''}`.replace(/: $/, '')}\n secondaryText={<ChevronDown className=\"size-3\" aria-hidden />}\n size=\"sm\"\n disabled={disabled}\n labelMaxWidth=\"max-w-[220px]\"\n className={cn('h-7 pointer-coarse:min-h-11', className)}\n data-testid={id}\n />\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-64 p-0\" data-testid={`${id}-list`}>\n <Command>\n {searchable && <CommandInput placeholder={l.search} data-testid={`${id}-search`} />}\n <CommandList>\n <CommandEmpty>{l.empty}</CommandEmpty>\n {all.map((o) => (\n <CommandItem\n key={o.id || '__none__'}\n value={`${o.label} ${o.description ?? ''}`}\n onSelect={() => choose(o.id)}\n data-testid={`${id}-option-${o.id || 'none'}`}\n >\n <span className=\"mr-2 flex size-4 shrink-0 items-center justify-center\">\n {o.icon}\n </span>\n <span className=\"min-w-0 flex-1 truncate\">{o.label}</span>\n {o.description && (\n <span className=\"ml-2 shrink-0 text-xs text-muted-foreground\">\n {o.description}\n </span>\n )}\n {o.id === value && <Check className=\"ml-2 size-4 shrink-0\" aria-hidden />}\n </CommandItem>\n ))}\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n )\n}\n","/**\n * TaskComposer values to API requests (and back): the pure mapping every host would write the same\n * way. No SDK call is made here; hand the result to the hooks from `@arbidocs/react`.\n *\n * \"Now\" (or a plain to-do) creates work: a conversation with a status (`useCreateWork`). Any other\n * start (a date, a repeat, an event, after another task) saves a workflow (`useCreateWorkflow`) that\n * creates the work when it fires.\n */\nimport type { components } from '@arbidocs/client'\nimport { composeWorkflowPrompt, type WorkflowComposeContext } from '../workflows/workflow'\nimport type { WorkflowDefinition, WorkflowInputs } from '../workflows/types'\nimport type { TaskComposerValues, TaskWhen } from './taskComposerTypes'\nimport type { MessageMentionRef } from '../../chat/mentions'\n\ntype Schemas = components['schemas']\ntype ConversationResponse = Schemas['ConversationResponse']\ntype CreateWorkRequest = Schemas['CreateWorkRequest']\ntype CreateWorkflowRequest = Schemas['CreateWorkflowRequest']\ntype TaskPlan = Schemas['TaskPlan']\ntype TaskOptions = Schemas['TaskOptions']\ntype UpdateConversationRequest = Schemas['UpdateConversationRequest']\ntype UpdateWorkflowRequest = Schemas['UpdateWorkflowRequest']\ntype WorkflowResponse = Schemas['WorkflowResponse']\n\n/** The authorization tier of a run (the same three values for work and for workflows). */\nexport type TaskAuthMode = CreateWorkRequest['auth_mode']\n\n/**\n * The plain-language access choice becomes the backend authorisation tier: run-now work is\n * authorised for that one run, a workflow either keeps standing access or asks each run.\n */\nexport function authModeFor(values: Pick<TaskComposerValues, 'when' | 'access'>): TaskAuthMode {\n if (values.when === 'now' || values.when === 'manual') return 'run_now_temp'\n return values.access === 'standing' ? 'scheduled_permanent' : 'scheduled_require_auth'\n}\n\n/** `datetime-local` value (no zone) to an ISO instant. Throws on an empty or invalid value. */\nexport function localInputToIso(local: string): string {\n const d = new Date(local)\n if (!local || Number.isNaN(d.getTime())) throw new Error('Pick a valid date and time.')\n return d.toISOString()\n}\n\n/** An ISO instant to the `datetime-local` value the composer edits; empty for none or invalid. */\nexport function isoToLocalInput(iso: string | null | undefined): string {\n if (!iso) return ''\n const d = new Date(iso)\n if (Number.isNaN(d.getTime())) return ''\n return new Date(d.getTime() - d.getTimezoneOffset() * 60000).toISOString().slice(0, 16)\n}\n\nexport interface WorkflowTaskFields {\n /** The title of the work or the name of the workflow. */\n name: string\n action?: Schemas['DocumentAutomationAction']\n prompt: string\n skill_ref: string | null\n /** The skill's saved inputs (only for a skill). */\n skill_inputs: WorkflowInputs | null\n}\n\n/** How many words of an instruction a derived name keeps. */\nexport const DERIVED_NAME_WORDS = 6\n\n/** The first `count` words of a text, with an ellipsis when there is more; empty for blank text. */\nexport function firstWords(text: string, count = DERIVED_NAME_WORDS): string {\n const words = text.trim().split(/\\s+/).filter(Boolean)\n if (words.length <= count) return words.join(' ')\n return `${words.slice(0, count).join(' ')}…`\n}\n\n/**\n * The name a workflow (or task) gets when its owner types none: the template's title or, for a template\n * that is a free-text instruction or reminder (its form is just an `instruction` or `message`), the\n * first few words of what was written, falling back to the title while it is still blank.\n */\nexport function deriveWorkflowName(workflow: WorkflowDefinition, inputs: WorkflowInputs): string {\n for (const field of ['instruction', 'message']) {\n if (workflow.inputs.some((i) => i.name === field)) {\n const written = inputs[field]\n return (typeof written === 'string' && firstWords(written)) || workflow.title\n }\n }\n return workflow.title\n}\n\n/**\n * How a workflow definition becomes an action:\n * - `options.agent === false` is a reminder: the composed text is the title and there is no prompt or\n * skill (the backend makes a to-do and notifies the owner);\n * - a definition with a `skill` runs that skill, its `args` input being the arguments;\n * - anything else is an agent prompt, the composed workflow prompt.\n * `name` (typed by the user) wins over the derived one (see {@link deriveWorkflowName}).\n */\n/** Does any input name files (an explicit pick, or a resolved scope)? Those bind the run. */\nexport const hasDocumentInputs = (inputs: WorkflowInputs): boolean =>\n Object.values(inputs).some(\n (v) =>\n v !== null &&\n typeof v === 'object' &&\n Array.isArray((v as { documents?: unknown }).documents) &&\n ((v as { documents: unknown[] }).documents.length ?? 0) > 0\n )\n\nexport function workflowTaskFields(\n workflow: WorkflowDefinition,\n inputs: WorkflowInputs,\n name?: string,\n context?: WorkflowComposeContext\n): WorkflowTaskFields {\n if (workflow.documentAction) {\n const scope =\n inputs.scope && typeof inputs.scope === 'object' ? inputs.scope : { labels: [], folders: [] }\n return {\n name: name?.trim() || workflow.title,\n prompt: '',\n skill_ref: null,\n skill_inputs: inputs,\n action: {\n type: workflow.documentAction,\n documents: {\n doc_ext_ids: scope.documents ?? [],\n label_ext_ids: scope.labels ?? [],\n latest: inputs.latest === true,\n },\n tag_ext_ids: typeof inputs.output === 'string' && inputs.output ? [inputs.output] : [],\n overwrite: inputs.overwrite === true,\n },\n }\n }\n for (const value of Object.values(inputs)) {\n if (!value || typeof value !== 'object') continue\n const scope = value as { documents?: unknown[]; folders?: unknown[]; labels?: unknown[] }\n if (\n Array.isArray(scope.documents) &&\n !scope.documents.length &&\n ((scope.folders?.length ?? 0) > 0 || (scope.labels?.length ?? 0) > 0)\n ) {\n throw new Error(\n 'The selected file scope has no documents. Choose a scope containing files before running.'\n )\n }\n }\n const typed = name?.trim()\n if (workflow.options?.agent === false) {\n const message = composeWorkflowPrompt(workflow, inputs, context)\n return { name: typed || message, prompt: '', skill_ref: null, skill_inputs: null }\n }\n const derived = typed || deriveWorkflowName(workflow, inputs)\n if (workflow.skill) {\n return {\n name: derived,\n prompt: typeof inputs.args === 'string' ? inputs.args.trim() : '',\n skill_ref: workflow.skill,\n skill_inputs: inputs,\n }\n }\n return {\n name: derived,\n prompt: composeWorkflowPrompt(workflow, inputs, context),\n skill_ref: null,\n // The files a run is bound to travel in the saved inputs, whatever the template: the server binds\n // the run to the ids listed under any input's `documents`.\n skill_inputs: hasDocumentInputs(inputs) ? inputs : null,\n }\n}\n\n/** Does this workflow need a workspace to run (everything except a plain reminder)? */\nexport const isAgenticWorkflow = (workflow: WorkflowDefinition): boolean =>\n workflow.options?.agent !== false\n\nexport interface TaskRequestContext {\n /** File names for the prompt's wording (\"the document <name>\"), by file id. */\n documentTitles?: Record<string, string>\n workflow: WorkflowDefinition\n values: TaskComposerValues\n /** The goal checklist drafted for agent work, if any. */\n plan?: TaskPlan | null\n}\n\n/** Does this composer submission create work straight away (rather than save a workflow)? */\nexport const createsWork = (values: Pick<TaskComposerValues, 'assignee' | 'when'>): boolean =>\n values.assignee === 'me' || values.when === 'now' || values.when === 'manual'\n\n/**\n * The create-work request: a plain to-do (a title, no agent) or agent work that starts now. Agent work\n * throws when there is no workspace open.\n */\nexport function composerToWorkRequest(\n { workflow, values, plan, documentTitles }: TaskRequestContext,\n workspaceId: string | undefined\n): CreateWorkRequest {\n const common = {\n description: values.description.trim(),\n due_at: values.dueAt ? localInputToIso(values.dueAt) : null,\n parent_conversation_ext_id: values.parentTaskId || null,\n shared: values.shared,\n }\n // A task for me is a plain to-do: a title, no prompt and no agent (`auth_mode` is required, and only\n // matters for a run).\n if (values.assignee === 'me') {\n return { ...common, title: values.name.trim(), auth_mode: 'run_now_temp' }\n }\n const fields = workflowTaskFields(workflow, values.inputs, values.name, { documentTitles })\n if (isAgenticWorkflow(workflow) && !workspaceId) {\n throw new Error('Open a workspace to run an agent task.')\n }\n return {\n ...common,\n title: fields.name,\n prompt: fields.prompt || null,\n skill_ref: fields.skill_ref,\n ...(fields.skill_inputs ? { skill_inputs: fields.skill_inputs } : {}),\n agent_ext_id: values.agentId || null,\n auth_mode: 'run_now_temp',\n ...(fields.skill_ref === null && fields.prompt && plan ? { plan } : {}),\n }\n}\n\n/**\n * Run now is a plain assistant query that carries `task` options: the thread it starts becomes a task\n * (generating, then open again). The query is the person's own run, so there is no agent and no\n * access tier. The host turns this into a `POST /v1/responses` body.\n */\nexport interface TaskQuery {\n /** The message sent: the prompt, or `/skill-name arguments` for a skill. */\n input: string\n workspaceId: string\n /** Files the run is bound to (the ids under any input's `documents`). */\n docIds: string[]\n /** People @mentioned in the prompt: the server shares the thread with them and notifies them. */\n mentions?: MessageMentionRef[]\n task: TaskOptions\n}\n\n/** A thread to start: a task's query, or (no `task`) a plain conversation. */\nexport type ThreadQuery = Omit<TaskQuery, 'task'> & { task?: TaskOptions }\n\n/** The ids of the files a form's inputs name (an explicit pick, or a resolved scope), without repeats. */\nexport function inputDocumentIds(inputs: WorkflowInputs): string[] {\n const ids = new Set<string>()\n for (const v of Object.values(inputs)) {\n const docs =\n v !== null && typeof v === 'object' ? (v as { documents?: unknown }).documents : null\n if (Array.isArray(docs)) for (const d of docs) if (typeof d === 'string') ids.add(d)\n }\n return [...ids]\n}\n\n/** The query that runs agent work now (a prompt or a skill) as the person asking. Throws without a workspace. */\nexport function composerToTaskQuery(\n { workflow, values, plan, documentTitles }: TaskRequestContext,\n workspaceId: string | undefined\n): TaskQuery {\n if (!workspaceId) throw new Error('Open a workspace to run an agent task.')\n const fields = workflowTaskFields(workflow, values.inputs, values.name, { documentTitles })\n const input = fields.skill_ref\n ? `/${fields.skill_ref}${fields.prompt ? ` ${fields.prompt}` : ''}`\n : fields.prompt\n return {\n input,\n workspaceId,\n docIds: inputDocumentIds(values.inputs),\n task: {\n title: fields.name,\n description: values.description.trim(),\n due_at: values.dueAt ? localInputToIso(values.dueAt) : null,\n parent_conversation_ext_id: values.parentTaskId || null,\n shared: values.shared,\n ...(fields.skill_ref === null && fields.prompt && plan ? { plan } : {}),\n },\n }\n}\n\n/** The fields shared by creating and updating a workflow: the trigger. Others stay `null` on an update. */\nfunction workflowTrigger(values: TaskComposerValues, clearOthers: boolean) {\n const none = clearOthers ? null : undefined\n return {\n rrule: values.when === 'repeat' ? values.rrule.trim() : none,\n run_at: values.when === 'once' ? localInputToIso(values.runAt) : none,\n event_kind: values.when === 'event' ? values.eventKind.trim() : none,\n event_filter: values.when === 'event' ? (values.eventFilter ?? none) : none,\n after_conversation_ext_id: values.when === 'task' ? values.afterTaskId : none,\n // Saving a run-now template creates an on-demand workflow; other triggers clear it.\n on_demand: values.when === 'now' || values.when === 'manual',\n }\n}\n\nconst withoutUndefined = <T extends object>(o: T): T =>\n Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined)) as T\n\n/**\n * The create-workflow request: exactly one trigger (a date, a repeat, an event, or another task being\n * done) and the action it runs. An agent workflow throws when there is no workspace open.\n */\nexport function composerToWorkflowRequest(\n { workflow, values, plan, documentTitles }: TaskRequestContext,\n workspaceId: string | undefined\n): CreateWorkflowRequest {\n const fields = workflowTaskFields(workflow, values.inputs, values.name, { documentTitles })\n // A workflow belongs to a workspace, a reminder included.\n if (!workspaceId) throw new Error('Open a workspace to save a workflow.')\n return withoutUndefined({\n name: fields.name,\n description: values.description.trim(),\n active: true,\n shared: values.shared,\n timezone: values.timezone,\n ...workflowTrigger(values, false),\n ...(fields.action ? { action: fields.action } : {}),\n prompt: fields.prompt,\n skill_ref: fields.skill_ref,\n skill_inputs: fields.skill_inputs,\n agent_ext_id: values.agentId || null,\n auth_mode: authModeFor(values),\n workspace_ext_id: workspaceId,\n // The plan grades every run of a free-instruction workflow (a skill's run is not a goal run).\n ...(fields.skill_ref === null && fields.prompt && plan ? { plan } : {}),\n })\n}\n\n/** What a composer submission asks the host to do. */\nexport type ComposerCreate =\n | { kind: 'work'; body: CreateWorkRequest }\n | { kind: 'query'; query: TaskQuery }\n | { kind: 'workflow'; body: CreateWorkflowRequest }\n\n/**\n * Route a submission: agent work now is an assistant query, a plain to-do or reminder creates work,\n * every other start creates a workflow.\n * `forceWorkflow` is for the workflow dialog, where even a reminder is saved as a workflow.\n */\nexport function taskComposerToCreateRequest(\n ctx: TaskRequestContext,\n workspaceId: string | undefined,\n forceWorkflow = false\n): ComposerCreate {\n if (forceWorkflow || ctx.workflow.documentAction || !createsWork(ctx.values)) {\n return { kind: 'workflow', body: composerToWorkflowRequest(ctx, workspaceId) }\n }\n // A to-do for me, or a reminder, is a plain task; agent work run now is an assistant query.\n return ctx.values.assignee === 'me' || !isAgenticWorkflow(ctx.workflow)\n ? { kind: 'work', body: composerToWorkRequest(ctx, workspaceId) }\n : { kind: 'query', query: composerToTaskQuery(ctx, workspaceId) }\n}\n\n/**\n * The patch for editing a task (`PATCH /v1/conversation/{id}`): title, description, due date, parent\n * (`null` detaches) and sharing. What the agent was told to do stays as created.\n */\nexport function taskComposerToUpdateRequest({\n values,\n plan,\n}: TaskRequestContext): UpdateConversationRequest {\n return {\n title: values.name.trim(),\n description: values.description.trim(),\n due_at: values.dueAt ? localInputToIso(values.dueAt) : null,\n shared: values.shared,\n parent_conversation_ext_id: values.parentTaskId || null,\n ...(plan !== undefined ? { plan } : {}),\n }\n}\n\n/** The patch for editing a workflow: name, trigger (the other triggers are cleared) and action. */\nexport function composerToWorkflowUpdate({\n workflow,\n values,\n plan,\n documentTitles,\n}: TaskRequestContext): UpdateWorkflowRequest {\n const fields = workflowTaskFields(workflow, values.inputs, values.name, { documentTitles })\n return {\n name: fields.name,\n description: values.description.trim(),\n shared: values.shared,\n timezone: values.timezone,\n ...workflowTrigger(values, true),\n action: fields.action ?? null,\n prompt: fields.prompt,\n skill_ref: fields.skill_ref,\n skill_inputs: fields.skill_inputs,\n agent_ext_id: values.agentId || null,\n auth_mode: authModeFor(values),\n // Omission preserves the plan; explicit null removes a stored free-instruction plan.\n ...(fields.skill_ref === null && fields.prompt && plan !== undefined ? { plan } : {}),\n }\n}\n\n/** Does the task need the owner to authorise workspace access before it can run? */\nexport const taskNeedsAccess = (\n task: Pick<ConversationResponse, 'pending_auth_request_id'>\n): boolean => !!task.pending_auth_request_id\n\nexport interface TaskValuesWorkflows {\n /** The workflow that stands for an instruction task (its first input is `instruction`). */\n customWorkflowId: string\n /** The workflow that stands for a reminder (its first input is `message`). */\n reminderWorkflowId: string\n /** The definitions a saved skill can be matched to (by `skill`), to restore a skill workflow's form. */\n definitions?: WorkflowDefinition[]\n}\n\n/** What an existing task (a conversation with a status) looks like when reopened in the composer. */\nexport function taskToComposerValues(\n task: ConversationResponse,\n workflows: TaskValuesWorkflows\n): Partial<TaskComposerValues> {\n const forMe = !task.agent_ext_id && !task.skill_ref && !task.has_agent_action\n return {\n assignee: forMe ? 'me' : 'agent',\n workflowId: forMe ? workflows.reminderWorkflowId : workflows.customWorkflowId,\n inputs: {},\n when: 'now',\n parentTaskId: task.parent_conversation_ext_id ?? '',\n shared: task.is_shared ?? true,\n description: task.description ?? '',\n dueAt: isoToLocalInput(task.due_at),\n agentId: task.agent_ext_id ?? '',\n name: task.title ?? '',\n }\n}\n\n/** Which start a saved workflow has. */\nexport function workflowWhen(workflow: WorkflowResponse): TaskWhen {\n if (workflow.on_demand) return 'now'\n if (workflow.after_conversation_ext_id) return 'task'\n if (workflow.event_kind) return 'event'\n if (workflow.rrule) return 'repeat'\n return workflow.run_at ? 'once' : 'now'\n}\n\n/** What an existing workflow looks like when reopened in the workflow dialog. */\nexport function workflowToComposerValues(\n workflow: WorkflowResponse,\n workflows: TaskValuesWorkflows\n): Partial<TaskComposerValues> {\n const reminder = !workflow.prompt && !workflow.skill_ref\n const skill = workflow.skill_ref\n ? workflows.definitions?.find((d) => d.skill === workflow.skill_ref)\n : undefined\n const base = {\n assignee: 'agent' as const,\n when: workflowWhen(workflow),\n runAt: isoToLocalInput(workflow.run_at),\n rrule: workflow.rrule ?? '',\n timezone: workflow.timezone,\n eventKind: workflow.event_kind ?? 'mention',\n eventFilter: (workflow.event_filter ?? null) as TaskComposerValues['eventFilter'],\n afterTaskId: workflow.after_conversation_ext_id ?? '',\n shared: workflow.shared,\n description: workflow.description ?? '',\n agentId: workflow.agent_ext_id ?? '',\n name: workflow.name,\n access:\n workflow.auth_mode === 'scheduled_permanent'\n ? ('standing' as const)\n : ('ask_each_run' as const),\n }\n if (workflow.action) {\n const definition = workflows.definitions?.find(\n (d) => d.documentAction === workflow.action?.type\n )\n return {\n ...base,\n workflowId: definition?.id ?? workflows.customWorkflowId,\n inputs: {\n scope: {\n folders: [],\n labels: workflow.action.documents?.label_ext_ids ?? [],\n documents: workflow.action.documents?.doc_ext_ids ?? [],\n },\n output: workflow.action.tag_ext_ids?.[0] ?? '',\n overwrite: workflow.action.overwrite ?? false,\n latest: workflow.action.documents?.latest ?? false,\n },\n }\n }\n if (skill) {\n return {\n ...base,\n workflowId: skill.id,\n inputs: (workflow.skill_inputs as WorkflowInputs | null | undefined) ?? {\n args: workflow.prompt,\n },\n }\n }\n return reminder\n ? { ...base, workflowId: workflows.reminderWorkflowId, inputs: { message: workflow.name } }\n : {\n ...base,\n // A name made from the instruction follows it when the instruction is edited.\n name: workflow.name === firstWords(workflow.prompt ?? '') ? '' : workflow.name,\n workflowId: workflows.customWorkflowId,\n inputs: {\n ...((workflow.skill_inputs as WorkflowInputs | null | undefined) ?? {}),\n instruction: workflow.prompt,\n },\n }\n}\n\n/** What the New task dialog collects: a prompt, who sees it, and optional task details. */\nexport interface NewThreadValues {\n /** What to ask or get done: the first message, which the assistant answers. The title is made from it. */\n prompt: string\n /** A name instead of the generated one. Optional. */\n title: string\n /** Shared with the workspace's members (the default), or private to its creator. */\n shared: boolean\n /** datetime-local value; empty = none. A task field. */\n dueAt: string\n /** The task this is a sub-task of (`con-…`); `''` = none. A task field. */\n parentId: string\n /** Whether the assistant starts on the prompt now. Off: it is a to-do, tracked and not run. */\n assistant: boolean\n}\n\nexport const EMPTY_NEW_THREAD: NewThreadValues = {\n prompt: '',\n title: '',\n shared: false,\n dueAt: '',\n parentId: '',\n assistant: true,\n}\n\n/** Is any task detail filled in (the dialog opens its details when one is preset)? */\nexport const hasTaskFields = (v: NewThreadValues): boolean => Boolean(v.dueAt || v.parentId)\n\n/** A new task: the prompt as the first message (the assistant answers it) and the task's options. */\nexport interface NewThreadRequest {\n input: string\n shared: boolean\n task: TaskOptions\n /** False: nothing is asked of the assistant: the host adds a plain to-do from `todo`. */\n startAssistant: boolean\n /** The to-do to add when `startAssistant` is false: a title and the rest of what the person wrote. */\n todo?: { title: string; description: string }\n}\n\n/** The first line of a prompt, kept to a title's length. */\nexport function titleFromPrompt(prompt: string, max = 80): string {\n const first = prompt.trim().split('\\n')[0].trim()\n return first.length > max ? `${first.slice(0, max - 1).trimEnd()}…` : first\n}\n\n/**\n * The request for a New task submission. Every ask is a task, so the options always ride along; the due\n * date and parent are only set when filled in. The title is only sent when the person wrote one;\n * otherwise the server names the task from the prompt. With the assistant switched off nothing is run: it\n * is a to-do.\n */\nexport function newThreadToRequest(values: NewThreadValues): NewThreadRequest {\n const input = values.prompt.trim()\n const title = values.title.trim()\n const task: TaskOptions = {\n ...(title ? { title } : {}),\n due_at: values.dueAt ? localInputToIso(values.dueAt) : null,\n parent_conversation_ext_id: values.parentId || null,\n shared: values.shared,\n }\n if (!values.assistant) {\n const name = title || titleFromPrompt(input)\n return {\n input,\n shared: values.shared,\n task,\n startAssistant: false,\n todo: { title: name, description: input === name ? '' : input },\n }\n }\n return { input, shared: values.shared, task, startAssistant: true }\n}\n","import { DueDateMenu } from './DueDateMenu'\nimport { useMemo, useState } from 'react'\nimport { CalendarClock, ChevronDown, CornerDownRight, Loader2, X } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n EntityPill,\n Input,\n Label,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Textarea,\n Switch,\n VisibilityToggle,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { ModalHeader } from '../../settings/ModalScaffold'\nimport { PillSelect, type PillOption } from './PillSelect'\nimport type { TaskOption } from './taskComposerTypes'\nimport { EMPTY_NEW_THREAD, hasTaskFields, type NewThreadValues } from './taskRequest'\n\nexport interface NewThreadDialogLabels {\n title: string\n description: string\n promptLabel: string\n promptPlaceholder: string\n titleLabel: string\n titlePlaceholder: string\n visibility: string\n taskDetails: string\n /** Under the prompt: which files the assistant can use. */\n files: (count: number) => string\n taskDetailsHint: string\n due: string\n dueNone: string\n dueClear: string\n parentTask: string\n parentTaskNone: string\n search: string\n empty: string\n cancel: string\n createTask: string\n /** The switch under the prompt, and the button when it is off. */\n assistantStart: string\n assistantStartHint: string\n addTodo: string\n saving: string\n}\n\nexport const DEFAULT_NEW_THREAD_DIALOG_LABELS: NewThreadDialogLabels = {\n title: 'New',\n description:\n 'Ask for anything, like a normal chat: the assistant gets on it. Add a due date if it matters.',\n promptLabel: 'What do you want to ask or get done?',\n promptPlaceholder: 'Ask a question, or describe what needs doing…',\n titleLabel: 'Title',\n titlePlaceholder: 'Made from your prompt unless you write one',\n visibility: 'Shared with',\n taskDetails: 'Task details',\n files: (count) =>\n count === 0\n ? 'No files in this workspace yet: answers come from general knowledge.'\n : `Can use the ${count} file${count === 1 ? '' : 's'} in this workspace.`,\n taskDetailsHint: 'Optional.',\n due: 'Due',\n dueNone: 'No date',\n dueClear: 'Clear date',\n parentTask: 'Part of',\n parentTaskNone: 'Nothing (top-level)',\n search: 'Search…',\n empty: 'No match.',\n cancel: 'Cancel',\n createTask: 'Start with ARBI',\n assistantStart: 'Assistant starts on it now',\n assistantStartHint: 'Switch off to just keep track of it as a to-do.',\n addTodo: 'Add to-do',\n saving: 'Creating…',\n}\n\nexport interface NewThreadDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** Tasks this can be a sub-task of. Omit or leave empty to hide the field. */\n tasks?: TaskOption[]\n initialValues?: Partial<NewThreadValues>\n /** How many files the assistant will be able to use; omit to say nothing. */\n fileCount?: number\n isPending?: boolean\n onSubmit: (values: NewThreadValues) => void | Promise<void>\n labels?: Partial<NewThreadDialogLabels>\n testId?: string\n}\n\nconst GLYPH = 'size-3.5 shrink-0'\n\n/** A datetime-local value as \"Fri 14 Oct, 09:00\"; the raw value if it is not a date. */\nfunction formatDue(local: string): string {\n const d = new Date(local)\n if (Number.isNaN(d.getTime())) return local\n return d.toLocaleString(undefined, {\n weekday: 'short',\n day: 'numeric',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n })\n}\n\n/**\n * \"New task\": the one way to start something. Type the prompt (what to ask or get done) and who sees it (the\n * workspace, by default); the title is made from the prompt. Every ask is a task: the details (due date,\n * parent, a title of your own) are optional and folded away.\n */\nexport function NewThreadDialog({\n open,\n onOpenChange,\n tasks = [],\n initialValues,\n fileCount,\n isPending,\n onSubmit,\n labels,\n testId,\n}: NewThreadDialogProps) {\n const l: NewThreadDialogLabels = { ...DEFAULT_NEW_THREAD_DIALOG_LABELS, ...labels }\n const seed = useMemo(\n () => ({ ...EMPTY_NEW_THREAD, ...initialValues }),\n // Seeded once per open.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [open]\n )\n const [values, setValues] = useState<NewThreadValues>(seed)\n const [detailsOpen, setDetailsOpen] = useState(hasTaskFields(seed))\n const [submitError, setSubmitError] = useState<string | null>(null)\n\n const id = testIdOr(testId, { testId: 'new-thread' })\n const set = <K extends keyof NewThreadValues>(key: K, value: NewThreadValues[K]) =>\n setValues((v) => ({ ...v, [key]: value }))\n const canSubmit = values.prompt.trim() !== '' && !isPending\n const pillLabels = { search: l.search, empty: l.empty }\n const taskOptions: PillOption[] = tasks.map((t) => ({\n id: t.id,\n label: t.name,\n icon: <CornerDownRight className={GLYPH} aria-hidden />,\n }))\n\n return (\n <Dialog modal={false} open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"right\"\n onInteractOutside={(event) => event.preventDefault()}\n className=\"flex flex-col overflow-hidden p-0\"\n data-testid={id}\n >\n <ModalHeader>\n <DialogTitle>{l.title}</DialogTitle>\n <DialogDescription className=\"sr-only\">{l.description}</DialogDescription>\n </ModalHeader>\n <form\n className=\"flex min-h-0 flex-1 flex-col\"\n onSubmit={async (event) => {\n event.preventDefault()\n if (!canSubmit) return\n setSubmitError(null)\n try {\n await onSubmit(values)\n setValues(EMPTY_NEW_THREAD)\n setDetailsOpen(false)\n } catch (error) {\n setSubmitError(error instanceof Error ? error.message : 'Could not create the thread')\n }\n }}\n >\n <div className=\"flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto px-6 pb-4\">\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"new-thread-prompt\" className=\"sr-only\">\n {l.promptLabel}\n </Label>\n <Textarea\n id=\"new-thread-prompt\"\n value={values.prompt}\n placeholder={l.promptPlaceholder}\n rows={4}\n onChange={(e) => set('prompt', e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey) && canSubmit) onSubmit(values)\n }}\n autoFocus\n className=\"min-h-24 text-base\"\n data-testid={`${id}-prompt`}\n />\n <label className=\"flex items-center gap-2 text-sm\" data-testid={`${id}-assistant`}>\n <Switch\n checked={values.assistant}\n onCheckedChange={(on) => set('assistant', on)}\n data-testid={`${id}-assistant-switch`}\n />\n <span>{l.assistantStart}</span>\n <span className=\"text-xs text-muted-foreground\">{l.assistantStartHint}</span>\n </label>\n {fileCount !== undefined && values.assistant && (\n <p className=\"text-xs text-muted-foreground\" data-testid={`${id}-files`}>\n {l.files(fileCount)}\n </p>\n )}\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <VisibilityToggle\n items={{ shared: values.shared }}\n onToggle={(share) => set('shared', share)}\n label={l.visibility}\n presentation=\"select\"\n data-testid={`${id}-visibility`}\n />\n </div>\n\n <section className=\"flex flex-col gap-3\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1 self-start px-2 pointer-coarse:h-11\"\n onClick={() => setDetailsOpen((v) => !v)}\n aria-expanded={detailsOpen}\n data-testid={`${id}-details-toggle`}\n >\n {l.taskDetails}\n <ChevronDown\n className={cn('size-3.5 transition-transform', detailsOpen && 'rotate-180')}\n aria-hidden\n />\n </Button>\n {detailsOpen && (\n <div className=\"flex flex-col gap-3\" data-testid={`${id}-details`}>\n <p className=\"text-xs text-muted-foreground\">{l.taskDetailsHint}</p>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Popover>\n <PopoverTrigger asChild>\n <EntityPill\n icon={<CalendarClock className={GLYPH} aria-hidden />}\n label={`${l.due}: ${values.dueAt ? formatDue(values.dueAt) : l.dueNone}`}\n secondaryText={<ChevronDown className=\"size-3\" aria-hidden />}\n size=\"sm\"\n className=\"h-7 pointer-coarse:min-h-11\"\n data-testid={`${id}-due-pill`}\n />\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-auto p-2\">\n <DueDateMenu\n id={`${id}-due`}\n label={l.due}\n value={values.dueAt}\n onChange={(v) => set('dueAt', v)}\n labels={{ clear: l.dueClear }}\n />\n </PopoverContent>\n </Popover>\n {tasks.length > 0 && (\n <PillSelect\n icon={<CornerDownRight className={GLYPH} aria-hidden />}\n prefix={l.parentTask}\n value={values.parentId}\n options={taskOptions}\n noneOption={{ id: '', label: l.parentTaskNone }}\n onChange={(v) => set('parentId', v)}\n searchable\n labels={pillLabels}\n testId={`${id}-parent`}\n />\n )}\n </div>\n <Label htmlFor=\"new-thread-title\" className=\"sr-only\">\n {l.titleLabel}\n </Label>\n <Input\n id=\"new-thread-title\"\n value={values.title}\n placeholder={l.titlePlaceholder}\n onChange={(e) => set('title', e.target.value)}\n data-testid={`${id}-title`}\n />\n </div>\n )}\n </section>\n </div>\n {submitError && (\n <p role=\"alert\" className=\"px-6 pb-2 text-sm text-destructive\">\n {submitError}\n </p>\n )}\n <div className=\"flex flex-col-reverse gap-2 border-t border-border px-6 py-3 sm:flex-row sm:justify-end\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n data-testid={`${id}-cancel`}\n className=\"pointer-coarse:min-h-11\"\n >\n {l.cancel}\n </Button>\n <Button\n type=\"submit\"\n disabled={!canSubmit}\n data-testid={`${id}-submit`}\n className=\"gap-1.5 pointer-coarse:min-h-11\"\n >\n {isPending && <Loader2 className=\"size-4 animate-spin\" />}\n {isPending ? l.saving : !values.assistant ? l.addTodo : l.createTask}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","import { useLayoutEffect, useRef, type ReactNode } from 'react'\nimport { cn, Popover, PopoverContent, PopoverTrigger } from '@arbidocs/react/ui'\nimport { StepChip } from '../workflows/StepChip'\nimport { StepDocumentButton } from '../workflows/StepDocuments'\nimport type { WorkflowStepPhase } from '../workflows/run'\n\nexport interface TaskFlowItem {\n id: string\n avatar: ReactNode\n /** Who acted (a person's id, `assistant`…): their face shows once however often they acted. */\n actor?: string\n /**\n * A workflow step's event: drawn in the transcript as that step's chip (its kind's colour and\n * icon, the phase the event put it in), as the thread's bar draws the step.\n */\n stepChip?: {\n kind: string\n phase: WorkflowStepPhase\n icon?: ReactNode\n /** The document the event produced: opened from beside the chip. */\n document?: { name: string; onOpen: () => void }\n }\n label: string\n description?: string\n time: string\n exactTime?: string\n current?: boolean\n detail?: ReactNode\n onSelect?: () => void\n}\n\n/** Chronological history, initially scrolled to the latest step. Hosts supply events and permissions. */\nexport function TaskFlow({\n items,\n className,\n}: {\n items: readonly TaskFlowItem[]\n className?: string\n}) {\n const scroll = useRef<HTMLDivElement>(null)\n const following = useRef(true)\n const latest = items.at(-1)?.id\n useLayoutEffect(() => {\n const el = scroll.current\n if (!el) return\n const follow = () => {\n if (following.current) el.scrollLeft = el.scrollWidth\n }\n follow()\n const resize = new ResizeObserver(follow)\n resize.observe(el)\n return () => resize.disconnect()\n }, [latest])\n return (\n <div\n ref={scroll}\n className={cn('min-w-0 flex-1 overflow-x-auto overscroll-x-contain', className)}\n data-testid=\"thread-flow\"\n role=\"region\"\n aria-label=\"Thread activity\"\n tabIndex={0}\n onScroll={(e) => {\n const el = e.currentTarget\n following.current = el.scrollWidth - el.scrollLeft - el.clientWidth < 24\n }}\n >\n <ol className=\"flex w-max min-w-full items-center gap-1 py-0.5\">\n {items.map((item, i) => {\n // Each entry is a chip in the ad hoc colour, its actor's face as the badge, as the steps\n // of a workflow run are chips in their kinds' colours.\n const chip = (props: Record<string, unknown>) => (\n <StepChip\n kind=\"adhoc\"\n phase=\"ready\"\n icon={item.avatar}\n label={item.label}\n current={item.current}\n labelClassName=\"max-w-32 truncate\"\n title={item.description ?? item.label}\n className=\"shrink-0 [&_.wf-badge]:bg-transparent\"\n {...props}\n >\n <span\n className=\"shrink-0 text-[10px] font-normal text-muted-foreground\"\n title={item.exactTime}\n >\n {item.time}\n </span>\n </StepChip>\n )\n return (\n <li\n key={item.id}\n className=\"flex shrink-0 items-center gap-1\"\n data-testid={`thread-flow-${item.id}`}\n >\n {i > 0 && (\n <span aria-hidden className=\"wf-link wf-kind-adhoc w-3 flex-none\" data-done />\n )}\n {item.onSelect ? (\n chip({ onClick: item.onSelect })\n ) : item.detail ? (\n <Popover>\n <PopoverTrigger asChild>{chip({})}</PopoverTrigger>\n <PopoverContent className=\"max-h-72 overflow-y-auto text-sm whitespace-pre-wrap\">\n {item.detail}\n </PopoverContent>\n </Popover>\n ) : (\n chip({ inert: true })\n )}\n </li>\n )\n })}\n </ol>\n </div>\n )\n}\n\n/** A persisted activity entry inside the transcript, separate from participant message bubbles. */\nexport function ThreadActivity({ item, children }: { item: TaskFlowItem; children?: ReactNode }) {\n if (item.stepChip) {\n const { kind, phase, icon, document } = item.stepChip\n const done = phase === 'done' || phase === 'skipped'\n return (\n <div\n className={cn(`wf-kind-${kind}`, 'flex flex-col items-center gap-1 px-3 py-2')}\n data-testid={`thread-activity-${item.id}`}\n title={item.description}\n >\n <div className=\"flex w-full max-w-xl items-center gap-2\">\n <span aria-hidden className=\"wf-link\" data-done={done || undefined} />\n <StepChip\n inert\n kind={kind}\n phase={phase}\n icon={icon}\n label={item.label}\n className={cn('shrink-0', document && 'rounded-r-none')}\n >\n <time\n className=\"shrink-0 text-[10px] font-normal text-muted-foreground\"\n title={item.exactTime}\n >\n {item.time}\n </time>\n </StepChip>\n {document && (\n <StepDocumentButton\n kind={kind}\n name={document.name}\n onOpen={document.onOpen}\n showName\n testId={`thread-activity-${item.id}-open-document`}\n />\n )}\n <span aria-hidden className=\"wf-link\" data-done={done || undefined} />\n </div>\n {children}\n </div>\n )\n }\n return (\n <div className=\"flex justify-center px-3 py-2\" data-testid={`thread-activity-${item.id}`}>\n <div\n className=\"max-w-full text-center text-xs text-muted-foreground\"\n title={item.description}\n >\n <div className=\"flex flex-wrap items-center justify-center gap-1.5\">\n {item.avatar}\n <span>{item.label}</span>\n <time title={item.exactTime}>{item.time}</time>\n </div>\n {children}\n {item.detail && (\n <div className=\"mt-1 whitespace-pre-wrap break-words text-left\">{item.detail}</div>\n )}\n </div>\n </div>\n )\n}\n","/**\n * The threads list's launcher: a composer at the bottom of the list that starts a thread where you\n * are. Type what you need (@mention people), or pick a saved workflow or a to-do, and press Enter:\n * the thread starts and joins the list, and the launcher offers to open it — it never takes you\n * there by itself, so several can be started one after another, as agents are dispatched.\n */\n\nimport { useRef, useState } from 'react'\nimport { ArrowUpRight, CalendarClock, Check, Loader2, SendHorizontal, X } from 'lucide-react'\nimport {\n Button,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Textarea,\n VisibilityToggle,\n cn,\n} from '@arbidocs/react/ui'\nimport { MentionMenu } from '../../chat/MentionMenu'\nimport { useMentionAutocomplete } from '../../chat/useMentionAutocomplete'\nimport { extractMentions, toMessageMentions, type MentionCandidate } from '../../chat/mentions'\nimport type { TaskStartValues } from './TaskStartDialog'\n\nexport interface ThreadLauncherLabels {\n placeholder: string\n todoPlaceholder: string\n withArbi: string\n todo: string\n source: string\n start: string\n schedule: string\n /** A started thread; `{title}` is replaced. */\n started: string\n open: string\n dismiss: string\n shared: string\n private: string\n}\n\nexport const DEFAULT_THREAD_LAUNCHER_LABELS: ThreadLauncherLabels = {\n placeholder: 'Start a new thread: ask ARBI, or @mention people…',\n todoPlaceholder: 'What needs doing?',\n withArbi: 'With ARBI',\n todo: 'To-do',\n source: 'Who does the work',\n start: 'Start',\n schedule: 'Schedule',\n started: 'Started “{title}”',\n open: 'Open',\n dismiss: 'Dismiss',\n shared: 'Workspace',\n private: 'Only Me',\n}\n\n/** What a start made, as the launcher offers it. */\nexport interface ThreadLauncherStarted {\n id: string\n title: string\n}\n\nexport interface ThreadLauncherProps {\n workflows: readonly { external_id: string; name: string }[]\n /** Who can be @mentioned: the workspace's people. */\n people?: ReadonlyArray<MentionCandidate>\n isPending?: boolean\n error?: string | null\n /** Replaces the start button's label (e.g. \"Look again\" while a thread is late). */\n startLabel?: string\n /** Start it; resolves to the thread it made (offered with Open), or nothing. Throws to keep the draft. */\n onStart: (values: TaskStartValues) => Promise<ThreadLauncherStarted | null | undefined>\n /** Start it later: the host's scheduler. */\n onLater?: (values: TaskStartValues) => void\n onOpen: (id: string) => void\n /** Focus the field when the launcher appears (the header's New Task brought you here). */\n autoFocus?: boolean\n labels?: Partial<ThreadLauncherLabels>\n className?: string\n}\n\nconst NO_PEOPLE: ReadonlyArray<MentionCandidate> = []\n\nexport function ThreadLauncher({\n workflows,\n people = NO_PEOPLE,\n isPending,\n error,\n startLabel,\n onStart,\n onLater,\n onOpen,\n autoFocus,\n labels,\n className,\n}: ThreadLauncherProps) {\n const l = { ...DEFAULT_THREAD_LAUNCHER_LABELS, ...labels }\n const [prompt, setPrompt] = useState('')\n const [choice, setChoice] = useState('prompt')\n const [shared, setShared] = useState(false)\n const [started, setStarted] = useState<ThreadLauncherStarted | null>(null)\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n const mention = useMentionAutocomplete({\n value: prompt,\n onValueChange: setPrompt,\n candidates: people,\n textareaRef,\n })\n const todo = choice === 'todo'\n const workflowId = choice === 'prompt' || todo ? null : choice\n const workflow = workflows.find((w) => w.external_id === workflowId)\n const valid = workflowId ? Boolean(workflow) : Boolean(prompt.trim())\n const values: TaskStartValues = {\n prompt: prompt.trim(),\n workflowId,\n todo,\n shared,\n mentions: toMessageMentions(extractMentions(prompt, people)),\n }\n\n const start = async () => {\n if (!valid || isPending) return\n try {\n const made = await onStart(values)\n setStarted(made ?? null)\n setPrompt('')\n setChoice('prompt')\n textareaRef.current?.focus()\n } catch {\n /* The host shows why; the draft stays for a retry. */\n }\n }\n\n return (\n <div\n className={cn('shrink-0 border-t border-border bg-background px-3 pb-3 pt-2', className)}\n data-testid=\"thread-launcher\"\n >\n <div className=\"mx-auto w-full max-w-3xl\">\n {started && (\n <div\n className=\"mb-2 flex min-w-0 items-center gap-2 text-xs\"\n role=\"status\"\n data-testid=\"thread-launcher-started\"\n >\n <span className=\"flex size-4 shrink-0 items-center justify-center rounded-full bg-emerald-600 text-white dark:bg-emerald-500\">\n <Check className=\"size-3\" strokeWidth={3} />\n </span>\n <span className=\"min-w-0 truncate text-muted-foreground\">\n {l.started.replace('{title}', started.title)}\n </span>\n <Button\n variant=\"link\"\n size=\"sm\"\n className=\"h-auto shrink-0 gap-0.5 p-0 text-xs\"\n onClick={() => onOpen(started.id)}\n data-testid=\"thread-launcher-open\"\n >\n {l.open}\n <ArrowUpRight className=\"size-3\" />\n </Button>\n <button\n type=\"button\"\n className=\"ml-auto shrink-0 rounded p-0.5 text-muted-foreground hover:bg-muted hover:text-foreground\"\n aria-label={l.dismiss}\n onClick={() => setStarted(null)}\n >\n <X className=\"size-3.5\" />\n </button>\n </div>\n )}\n <div className=\"rounded-lg border border-border bg-card shadow-sm focus-within:border-ring\">\n {workflow ? (\n <p className=\"px-3 pt-2.5 text-sm font-medium\" data-testid=\"thread-launcher-workflow\">\n {workflow.name}\n </p>\n ) : (\n <div className=\"relative\">\n <Textarea\n ref={textareaRef}\n value={prompt}\n rows={1}\n autoFocus={autoFocus}\n onChange={(event) => mention.onValueChange(event.target.value)}\n onKeyDown={(event) => {\n mention.nav.handleKeyDown(event)\n if (event.defaultPrevented || mention.isOpen) return\n if (event.key === 'Enter' && !event.shiftKey && !event.nativeEvent.isComposing) {\n event.preventDefault()\n void start()\n }\n }}\n {...(mention.isOpen ? mention.nav.comboboxProps : {})}\n {...mention.textareaProps}\n disabled={isPending}\n placeholder={todo ? l.todoPlaceholder : l.placeholder}\n aria-label={todo ? l.todoPlaceholder : l.placeholder}\n className=\"field-sizing-content max-h-40 min-h-10 resize-none border-0 bg-transparent px-3 pt-2.5 shadow-none focus-visible:ring-0\"\n data-testid=\"thread-launcher-input\"\n />\n <MentionMenu\n open={mention.isOpen}\n placement=\"above\"\n items={mention.items}\n selectedIndex={mention.nav.selectedIndex}\n setSelectedIndex={mention.nav.setSelectedIndex}\n listboxId={mention.nav.listboxId}\n onSelect={mention.pick}\n />\n </div>\n )}\n <div className=\"flex items-center gap-2 px-2 pb-1.5\">\n <Select value={choice} onValueChange={setChoice} disabled={isPending}>\n <SelectTrigger\n aria-label={l.source}\n className=\"h-7 w-auto max-w-[45%] border-0 bg-transparent px-1.5 text-xs font-normal text-muted-foreground shadow-none hover:bg-muted\"\n data-testid=\"thread-launcher-source\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"prompt\">{l.withArbi}</SelectItem>\n <SelectItem value=\"todo\">{l.todo}</SelectItem>\n {workflows.map((w) => (\n <SelectItem key={w.external_id} value={w.external_id}>\n {w.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {error && (\n <p role=\"alert\" className=\"min-w-0 truncate text-xs text-destructive\" title={error}>\n {error}\n </p>\n )}\n <div className=\"ml-auto flex items-center gap-1.5\">\n <VisibilityToggle\n items={{ shared }}\n onToggle={setShared}\n label={shared ? l.shared : l.private}\n disabled={isPending}\n data-testid=\"thread-launcher-visibility\"\n />\n {onLater && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 text-muted-foreground\"\n disabled={!valid || isPending}\n onClick={() => onLater(values)}\n aria-label={l.schedule}\n title={l.schedule}\n data-testid=\"thread-launcher-later\"\n >\n <CalendarClock className=\"size-4\" />\n </Button>\n )}\n <Button\n size=\"icon\"\n className=\"size-8\"\n disabled={!valid || isPending}\n onClick={() => void start()}\n aria-label={startLabel ?? l.start}\n title={startLabel ?? l.start}\n data-testid=\"thread-launcher-start\"\n >\n {isPending ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <SendHorizontal className=\"size-4\" />\n )}\n </Button>\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n","/**\n * Where a workflow run is, in a line of a list (the threads list's status), on two lines. First a\n * track with one segment per step in its kind's colour — filled once done, pulsing while it runs,\n * outlined while still to come — centred on the step the run is at, with \"…\" where a long run has\n * more before or after. Then where it stands, in words, about the NEXT step (what happens now):\n * Generating, Needs you, Up next, Failed — or Ready once every step is done (Done once a person\n * marked it so). The thread bar's chips in miniature, so a list of runs reads like a list of agents.\n */\n\nimport { cn } from '@arbidocs/react/ui'\nimport { isRunFinished, stepLevels, stepPhase, type WorkflowStepPhase } from '../workflows/run'\nimport { activeStepId } from '../workflows/stepWindow'\nimport { stepKindOf } from '../workflows/stepKinds'\nimport type { WorkflowStep, WorkflowStepState } from '../workflows/types'\nimport { ThreadStatusLine, type ThreadState, type ThreadStateLabels } from './ThreadStatusLine'\n\nexport interface WorkflowRunStatusLabels extends ThreadStateLabels {\n /** A finished run's detail; `{count}` is replaced. */\n allDone: string\n}\n\nexport const DEFAULT_WORKFLOW_RUN_STATUS_LABELS: Partial<WorkflowRunStatusLabels> = {\n allDone: 'all {count} steps done',\n}\n\nexport interface WorkflowRunStatusProps {\n steps: WorkflowStep[]\n /** Each step's state (from `stepStatesFromActivity`). */\n states: Record<string, WorkflowStepState>\n /** Who a step is for, in words (`assigneeName`): a person's step \"needs\" them. */\n assigneeOf?: (step: WorkflowStep) => string | undefined\n labels?: Partial<WorkflowRunStatusLabels>\n /** The states are still loading: the track shows the steps only, with no position yet. */\n isLoading?: boolean\n /** The thread's own status (To do / Done), which a person sets: a finished run marked done is Done. */\n workStatus?: string | null\n /** The most steps the track shows; a longer run is trimmed around the step it is at. */\n maxSegments?: number\n className?: string\n testId?: string\n}\n\nconst SEGMENT: Record<WorkflowStepPhase, string> = {\n done: 'bg-[hsl(var(--wf-accent))]',\n running: 'bg-[hsl(var(--wf-accent))] animate-pulse',\n waiting: 'bg-[hsl(var(--wf-accent)/0.3)] ring-1 ring-inset ring-[hsl(var(--wf-accent))]',\n failed: 'bg-destructive',\n skipped: 'ring-1 ring-inset ring-muted-foreground/40',\n ready: 'ring-1 ring-inset ring-[hsl(var(--wf-accent)/0.7)]',\n blocked: 'ring-1 ring-inset ring-[hsl(var(--wf-accent)/0.7)]',\n}\n\nexport function WorkflowRunStatus({\n steps,\n states,\n assigneeOf,\n labels,\n isLoading,\n workStatus,\n maxSegments = 7,\n className,\n testId = 'workflow-run-status',\n}: WorkflowRunStatusProps) {\n const l = { ...DEFAULT_WORKFLOW_RUN_STATUS_LABELS, ...labels }\n const ordered = stepLevels(steps).flat()\n const phaseOf = (id: string): WorkflowStepPhase =>\n isLoading ? 'blocked' : stepPhase(steps, states, id)\n const finished = !isLoading && isRunFinished(steps, states)\n // The step the run is at: the next one to happen (running, waiting on someone, or to do).\n const atId = finished || isLoading ? undefined : activeStepId(stepLevels(steps), phaseOf)\n const at = ordered.find((s) => s.id === atId)\n const phase = at ? phaseOf(at.id) : 'done'\n const assignee = at && ['ready', 'waiting'].includes(phase) ? assigneeOf?.(at) : undefined\n\n const state: ThreadState = finished\n ? workStatus === 'done'\n ? 'done'\n : 'ready'\n : phase === 'running'\n ? 'generating'\n : phase === 'failed'\n ? 'failed'\n : assignee\n ? 'needs'\n : 'next'\n const detail = at\n ? at.title\n : finished\n ? (l.allDone ?? '').replace('{count}', String(ordered.length))\n : undefined\n\n // The track's window: centred on the step the run is at (the last one once finished).\n const n = ordered.length\n const size = Math.min(maxSegments, n)\n const centre = at ? ordered.indexOf(at) : n - 1\n const start = Math.max(0, Math.min(n - size, centre - Math.floor(size / 2)))\n const shown = ordered.slice(start, start + size)\n const ellipsis = (side: string) => (\n <span\n className=\"px-0.5 text-[10px] leading-none text-muted-foreground\"\n data-testid={`${testId}-more-${side}`}\n >\n …\n </span>\n )\n\n return (\n <div\n className={cn('flex min-w-0 flex-col justify-center gap-1', className)}\n data-testid={testId}\n data-phase={phase}\n >\n <span className=\"flex items-center gap-0.5\" aria-hidden>\n {start > 0 && ellipsis('before')}\n {shown.map((s) => (\n <span\n key={s.id}\n className={cn(\n `wf-kind-${stepKindOf(s)}`,\n 'h-1.5 w-3 shrink-0 rounded-full',\n SEGMENT[phaseOf(s.id)],\n s.id === atId && 'w-5'\n )}\n title={s.title}\n data-phase={phaseOf(s.id)}\n />\n ))}\n {start + size < n && ellipsis('after')}\n </span>\n {isLoading ? (\n <span className=\"text-xs leading-tight\">&nbsp;</span>\n ) : (\n <ThreadStatusLine\n state={state}\n name={assignee}\n detail={detail}\n labels={labels}\n testId={`${testId}-line`}\n />\n )}\n </div>\n )\n}\n","/**\n * The top bar of a thread that runs a workflow, in the builder canvas's own look (`StepChip`: each\n * kind of step in its colour, the start as the canvas's start pill): where the run is — the previous, current and next\n * steps by name, the rest behind ‹ › and \"…\", parallel steps as a \"+N\" chip, and every running step\n * out of view as \"Working: <title>\" (`StepBarFrame`, the same model as the runner's stepper) — with\n * everything that actually happened in the thread attached to the step it happened\n * during — the assistant's turns, a draft sent back, people's messages and edits, notifications.\n * Each step shows who acted during it (their faces, and how many entries); what happened before the\n * first step sits on the start pill, and what happened after the last on an \"After\" chip.\n * Linked runs show too: a signal a step raised and the linked thread it started (after the step),\n * and, for a thread a signal started, \"Started by <step> in <thread>\" (before the steps).\n * A thread without a workflow shows `TaskFlow` instead.\n */\n\nimport { useState, type ReactNode } from 'react'\nimport { ArrowUpRight, CornerLeftUp, CornerUpLeft, Flag, MessagesSquare, Zap } from 'lucide-react'\nimport { cn, Popover, PopoverClose, PopoverContent, PopoverTrigger } from '@arbidocs/react/ui'\nimport {\n isRunFinished,\n splitDocRef,\n stepLevels,\n stepPhase,\n waitingDocuments,\n waitingForDocumentsText,\n type WorkflowStepPhase,\n} from '../workflows/run'\nimport {\n STEP_LABEL,\n STEP_LABEL_MAX,\n STEP_LABEL_CURRENT,\n DEFAULT_STEP_BAR_LABELS,\n StepBarFrame,\n type StepBarLabels,\n} from '../workflows/StepBarFrame'\nimport { StepChip } from '../workflows/StepChip'\nimport {\n DEFAULT_STEP_KIND_LABELS,\n STEP_KIND_ICONS,\n stepKindOf,\n type WorkflowStepKind,\n} from '../workflows/stepKinds'\nimport { activeStepId } from '../workflows/stepWindow'\nimport {\n DEFAULT_STEP_DOCUMENT_LABELS,\n DEFAULT_STEP_RECORD_LABELS,\n StepDocumentButton,\n StepDocumentCards,\n StepRecord,\n stepDocuments,\n type StepDocumentLabels,\n type StepRecordLabels,\n} from '../workflows/StepDocuments'\nimport type { WorkflowStep, WorkflowStepState } from '../workflows/types'\nimport type { TaskFlowItem } from './TaskFlow'\n\n/** An activity entry, with what the strip needs to place it. */\nexport interface WorkflowThreadItem extends TaskFlowItem {\n /** The activity kind (`step_started`, `assistant_responded`, …). */\n kind?: string\n /** For a step event: the step it is about. */\n step?: string\n}\n\nexport interface GroupedThreadActivity<T> {\n before: T[]\n byStep: Record<string, T[]>\n after: T[]\n}\n\nconst STEP_KINDS = new Set([\n 'step_started',\n 'step_waiting',\n 'step_done',\n 'step_skipped',\n 'step_failed',\n])\n\n/**\n * Place each activity entry (oldest first): an entry belongs to the step whose event came last\n * before it — or, once that step has finished, to the step the run now waits on (the first one not\n * finished). Entries before any step event come before the steps, and entries once every step has\n * finished come after them. Step events themselves are the steps' own status, not entries.\n */\nexport function groupThreadActivity<T extends { kind?: string; step?: string }>(\n steps: WorkflowStep[],\n items: readonly T[]\n): GroupedThreadActivity<T> {\n const out: GroupedThreadActivity<T> = { before: [], byStep: {}, after: [] }\n const states: Record<string, WorkflowStepState> = {}\n let current: string | undefined\n for (const item of items) {\n if (item.kind && STEP_KINDS.has(item.kind) && item.step) {\n current = item.step\n states[item.step] = {\n status:\n item.kind === 'step_started'\n ? 'running'\n : item.kind === 'step_waiting'\n ? 'waiting'\n : item.kind === 'step_done'\n ? 'done'\n : item.kind === 'step_skipped'\n ? 'skipped'\n : 'failed',\n }\n continue\n }\n if (current === undefined) out.before.push(item)\n else if (isRunFinished(steps, states)) out.after.push(item)\n else {\n // Once the last step to move has finished, what follows is about the step the run waits on.\n const status = states[current]?.status\n const at =\n status === 'done' || status === 'skipped'\n ? (steps.find((s) => !['done', 'skipped'].includes(states[s.id]?.status ?? ''))?.id ??\n current)\n : current\n ;(out.byStep[at] ??= []).push(item)\n }\n }\n return out\n}\n\nexport interface WorkflowThreadStripLabels {\n /** The popover heading of a step's entries; `{count}` is replaced. */\n happened: string\n /** What the count on a step is; `{count}` is replaced. */\n updates: string\n nothingYet: string\n skip: string\n /** A linked run's origin; `{step}` and `{thread}` are replaced. */\n startedBy: string\n /** A raised signal's tooltip; `{signal}` is replaced. */\n signalled: string\n /** A linked thread's tooltip; `{signal}` is replaced. */\n linkedRun: string\n /** A step that waits for someone; `{name}` is replaced. */\n waitingFor: string\n /** A step the work was sent back to. */\n sentBack: string\n /** The start pill: the run began. */\n started: string\n /** The chip of what happened once every step had finished. */\n after: string\n /** The start pill's list, and the \"After\" chip's. */\n beforeSteps: string\n afterSteps: string\n /** Each kind's name, on the step in view. */\n kinds: Record<WorkflowStepKind, string>\n documents: StepDocumentLabels\n record: StepRecordLabels\n}\n\nexport const DEFAULT_WORKFLOW_THREAD_STRIP_LABELS: WorkflowThreadStripLabels = {\n happened: '{count} in this step',\n updates: '{count} updates in this step',\n nothingYet: 'Nothing here yet.',\n skip: 'Skip this step',\n startedBy: 'Started by {step} in {thread}',\n signalled: 'This step signalled “{signal}”',\n linkedRun: 'Started on “{signal}”: open its thread',\n waitingFor: 'Waiting for {name}',\n sentBack: 'Sent back to be done again',\n started: 'Started',\n after: 'After',\n beforeSteps: 'Before the first step',\n afterSteps: 'After the last step',\n kinds: DEFAULT_STEP_KIND_LABELS,\n documents: DEFAULT_STEP_DOCUMENT_LABELS,\n record: DEFAULT_STEP_RECORD_LABELS,\n}\n\n/** A linked thread a signal started, as the host names it. */\nexport interface WorkflowThreadLinkedRun {\n id: string\n /** The thread's title, or its workflow's name. */\n label: string\n onSelect?: () => void\n}\n\n/** A signal one of the run's steps raised, and the linked threads it started. */\nexport interface WorkflowThreadSignal {\n step: string\n signal: string\n runs: WorkflowThreadLinkedRun[]\n}\n\n/** Where a linked run came from: the step and the parent thread whose signal started it. */\nexport interface WorkflowThreadOrigin {\n stepTitle: string\n threadTitle: string\n signal?: string\n onSelect?: () => void\n}\n\nexport interface WorkflowThreadStripProps {\n steps: WorkflowStep[]\n /** Each step's state (from `stepStatesFromActivity`). */\n states: Record<string, WorkflowStepState>\n /** The thread's activity, oldest first, as `TaskFlow` items with their kind (and step). */\n items: readonly WorkflowThreadItem[]\n renderIcon?: (key: string) => ReactNode\n /**\n * Skip a step (any unfinished one that is not running: the plan guides the thread, it does not\n * hold it). Absent = no skipping here.\n */\n onSkip?: (stepId: string) => void\n /** The host's action for a person's step (fill in the form, approve…), shown in its popover. */\n renderStepAction?: (step: WorkflowStep, phase: WorkflowStepPhase) => ReactNode\n /** Signals the steps raised and the linked threads they started (`linkedRunsFromActivity`). */\n signals?: readonly WorkflowThreadSignal[]\n /** For a thread a signal started: where it came from. */\n startedBy?: WorkflowThreadOrigin\n /** Who a step is for, in words (`assigneeName`): shown on the step while it waits for them. */\n assigneeOf?: (step: WorkflowStep) => string | undefined\n /**\n * The documents: a step's popover leads with the versions it drafted, or for an approval the\n * versions it approves (`stepDocuments`), named by `nameOfDoc` and opened by `onOpenDocument`.\n */\n nameOfDoc?: (id: string) => string | undefined\n onOpenDocument?: (ref: string) => void\n /** The run's answers (`skill_inputs`) and people's names: a finished step shows what it recorded. */\n inputs?: Record<string, unknown>\n nameOf?: (id: string) => string | undefined\n labels?: Partial<WorkflowThreadStripLabels>\n /** The bar's own wording (arrows, \"…\", \"Working: <title>\", status words). */\n barLabels?: Partial<StepBarLabels>\n className?: string\n}\n\n/** \"Started by <step> in <thread>\": a linked run's way back to the thread that started it. */\nexport function WorkflowThreadStartedBy({\n origin,\n labels,\n}: {\n origin: WorkflowThreadOrigin\n labels?: Partial<WorkflowThreadStripLabels>\n}) {\n const l = { ...DEFAULT_WORKFLOW_THREAD_STRIP_LABELS, ...labels }\n const text = l.startedBy\n .replace('{step}', origin.stepTitle)\n .replace('{thread}', origin.threadTitle)\n const className =\n 'flex max-w-64 shrink-0 items-center gap-1 truncate rounded-full border border-border px-2 py-0.5 text-[11px] text-muted-foreground'\n const content = (\n <>\n <CornerLeftUp className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{text}</span>\n </>\n )\n return origin.onSelect ? (\n <button\n type=\"button\"\n onClick={origin.onSelect}\n title={origin.signal ? `${text} (${origin.signal})` : text}\n className={cn(className, 'hover:border-primary/40 hover:text-primary')}\n data-testid=\"workflow-thread-started-by\"\n >\n {content}\n </button>\n ) : (\n <span className={className} title={text} data-testid=\"workflow-thread-started-by\">\n {content}\n </span>\n )\n}\n\n/** A raised signal after its step, with the linked threads it started. */\nfunction SignalPill({ signal, l }: { signal: WorkflowThreadSignal; l: WorkflowThreadStripLabels }) {\n return (\n <span\n className=\"flex shrink-0 items-center gap-1 rounded-full border border-amber-500/40 bg-amber-500/10 px-1.5 py-0.5 text-[11px] text-amber-700 dark:text-amber-300\"\n title={l.signalled.replace('{signal}', signal.signal)}\n data-testid={`workflow-thread-signal-${signal.step}-${signal.signal}`}\n >\n <Flag className=\"size-3 shrink-0\" />\n <span className=\"font-mono\">{signal.signal}</span>\n {signal.runs.map((run) => (\n <button\n key={run.id}\n type=\"button\"\n onClick={run.onSelect}\n disabled={!run.onSelect}\n title={l.linkedRun.replace('{signal}', signal.signal)}\n className=\"flex max-w-40 items-center gap-0.5 truncate rounded-full bg-background/80 px-1.5 text-foreground hover:text-primary disabled:cursor-default\"\n data-testid={`workflow-thread-linked-${run.id}`}\n >\n <ArrowUpRight className=\"size-3 shrink-0\" />\n <span className=\"truncate\">{run.label}</span>\n </button>\n ))}\n </span>\n )\n}\n\nfunction Entry({ item }: { item: WorkflowThreadItem }) {\n const content = (\n <>\n <span className=\"shrink-0\">{item.avatar}</span>\n <span className=\"min-w-0 text-left\">\n <span className=\"block max-w-40 truncate text-[11px] font-medium leading-tight\">\n {item.label}\n </span>\n <span\n className=\"block text-[10px] leading-tight text-muted-foreground\"\n title={item.exactTime}\n >\n {item.time}\n </span>\n </span>\n </>\n )\n // Going to what happened closes the popover it is listed in.\n return item.onSelect ? (\n <PopoverClose asChild>\n <button\n type=\"button\"\n onClick={item.onSelect}\n className=\"flex w-full items-center gap-1.5 rounded-md px-1 py-0.5 hover:bg-accent\"\n data-testid={`thread-flow-${item.id}`}\n >\n {content}\n </button>\n </PopoverClose>\n ) : (\n <span className=\"flex items-center gap-1.5 px-1 py-0.5\" data-testid={`thread-flow-${item.id}`}>\n {content}\n </span>\n )\n}\n\n/** The room a step's faces take on its chip, and its document button beside it. */\nconst BEADS_PX = 32\nconst DOC_BUTTON_PX = 34\n\n/** Who acted in these entries: each face once (latest last), then how many entries there are. */\nfunction Beads({ items, label }: { items: readonly WorkflowThreadItem[]; label: string }) {\n if (!items.length) return null\n const faces = new Map<string, ReactNode>()\n for (const item of items) {\n const key = item.actor ?? item.id\n faces.delete(key)\n faces.set(key, item.avatar)\n }\n const shown = [...faces.entries()].slice(-3)\n return (\n <span\n className=\"flex shrink-0 items-center gap-1\"\n title={label.replace('{count}', String(items.length))}\n >\n <span className=\"wf-beads [&_svg]:size-4\" aria-hidden>\n {shown.map(([key, avatar]) => (\n <span key={key}>{avatar}</span>\n ))}\n </span>\n <span className=\"text-[10px] font-normal tabular-nums text-muted-foreground\" aria-hidden>\n {items.length}\n </span>\n <span className=\"sr-only\">{label.replace('{count}', String(items.length))}</span>\n </span>\n )\n}\n\n/** A popover's heading, as the chip that opened it: the kind's badge, its name and the title. */\nfunction PopoverHeading({\n kind,\n icon,\n overline,\n title,\n}: {\n kind: string\n icon: ReactNode\n overline: string\n title: string\n}) {\n return (\n <div className={cn(`wf-kind-${kind}`, 'flex items-center gap-2 px-1 pb-1')}>\n <span className=\"wf-badge flex size-7 shrink-0 items-center justify-center rounded-md [&_svg]:size-4\">\n {icon}\n </span>\n <span className=\"min-w-0\">\n <span className=\"wf-kind-text block truncate text-[10px] font-semibold uppercase tracking-wider\">\n {overline}\n </span>\n <span className=\"block truncate text-sm font-semibold leading-snug\">{title}</span>\n </span>\n </div>\n )\n}\n\n/** A chip for entries outside the steps (the start, after the end), listing them on demand. */\nfunction EntriesChip({\n kind,\n icon,\n label,\n items,\n extra,\n heading,\n testId,\n}: {\n kind: 'start' | 'adhoc'\n icon: ReactNode\n label: string\n items: readonly WorkflowThreadItem[]\n extra?: ReactNode\n heading: string\n testId: string\n}) {\n const latest = items.at(-1)\n return (\n <Popover>\n <PopoverTrigger asChild>\n <StepChip\n kind={kind}\n phase=\"ready\"\n icon={icon}\n label={label}\n labelClassName=\"max-w-40 truncate\"\n title={latest ? `${label} · ${latest.label} · ${latest.time}` : label}\n className=\"shrink-0\"\n data-testid={testId}\n >\n <Beads items={items} label={heading} />\n </StepChip>\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-72 space-y-1 p-2\" data-testid={`${testId}-menu`}>\n <PopoverHeading kind={kind} icon={icon} overline={heading} title={label} />\n {extra}\n {items.map((item) => (\n <Entry key={item.id} item={item} />\n ))}\n </PopoverContent>\n </Popover>\n )\n}\n\nexport function WorkflowThreadStrip({\n steps,\n states,\n items,\n renderIcon,\n onSkip,\n renderStepAction,\n signals = [],\n startedBy,\n assigneeOf,\n nameOfDoc,\n onOpenDocument,\n inputs = {},\n nameOf,\n labels,\n barLabels,\n className,\n}: WorkflowThreadStripProps) {\n const l = { ...DEFAULT_WORKFLOW_THREAD_STRIP_LABELS, ...labels }\n const barL = { ...DEFAULT_STEP_BAR_LABELS, ...barLabels }\n const grouped = groupThreadActivity(steps, items)\n // A signal from a step the plan no longer names still shows, after the steps.\n const strays = signals.filter((s) => !steps.some((step) => step.id === s.step))\n const link = <span aria-hidden className=\"wf-link wf-kind-start max-w-6\" data-done />\n // The step a person went to (from a group, the list, a \"Working\" pill); none = where the run is.\n const [selected, setSelected] = useState<string | null>(null)\n // The step whose popover (what happened in it, its action) is open.\n const [open, setOpen] = useState<string | null>(null)\n const phaseOf = (id: string) => stepPhase(steps, states, id)\n const iconOf = (step: WorkflowStep) =>\n step.icon && renderIcon ? renderIcon(step.icon) : undefined\n // The host's icon for a step, else its kind's (as on the canvas).\n const glyphOf = (step: WorkflowStep) => {\n const KindIcon = STEP_KIND_ICONS[stepKindOf(step)]\n return iconOf(step) ?? <KindIcon />\n }\n\n const waitingOf = (id: string) => {\n const step = steps.find((s) => s.id === id)\n const phase = phaseOf(id)\n const documents = waitingDocuments(states[id])\n if (documents.length) return waitingForDocumentsText(documents.length)\n const name = step && (phase === 'ready' || phase === 'waiting') ? assigneeOf?.(step) : undefined\n return name ? l.waitingFor.replace('{name}', name) : undefined\n }\n\n const pill = (step: WorkflowStep, isCurrent: boolean) => {\n const phase = phaseOf(step.id)\n const happened = grouped.byStep[step.id] ?? []\n const assignee = phase === 'ready' || phase === 'waiting' ? assigneeOf?.(step) : undefined\n // Whom it waits for, or the documents it waits on to finish processing.\n const waiting = waitingOf(step.id)\n const sentBack = states[step.id]?.sentBack\n const kind = stepKindOf(step)\n const documents = stepDocuments(steps, states, step.id)\n // The step's document, one click from its chip: the latest version.\n const latestDoc = onOpenDocument ? documents.at(-1) : undefined\n const finished = ['done', 'skipped', 'failed'].includes(phase)\n const chip = (\n <Popover\n open={open === step.id}\n onOpenChange={(o) => {\n setOpen(o ? step.id : null)\n // The step whose popover is open is the step in view (ringed, headed).\n if (o) setSelected(step.id)\n }}\n >\n <PopoverTrigger asChild>\n <StepChip\n kind={kind}\n phase={phase}\n icon={glyphOf(step)}\n label={step.title}\n current={isCurrent}\n heading={\n <>\n {l.kinds[kind]}\n {assignee && (\n <span data-testid={`workflow-thread-step-${step.id}-assignee`}>\n {' · '}\n {waiting}\n </span>\n )}\n </>\n }\n labelClassName={isCurrent ? STEP_LABEL_CURRENT : cn(STEP_LABEL, STEP_LABEL_MAX)}\n className={cn(latestDoc && 'rounded-r-none')}\n title={waiting ? `${step.title} · ${waiting}` : step.title}\n data-testid={`workflow-thread-step-${step.id}`}\n >\n {sentBack && (\n <CornerUpLeft\n className=\"size-3 shrink-0 text-amber-600 dark:text-amber-400\"\n aria-label={l.sentBack}\n data-testid={`workflow-thread-step-${step.id}-sent-back`}\n />\n )}\n <Beads items={happened} label={l.updates} />\n </StepChip>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className=\"w-80 space-y-1.5 p-2\"\n data-testid={`workflow-thread-step-${step.id}-menu`}\n >\n <PopoverHeading\n kind={kind}\n icon={glyphOf(step)}\n // Where it stands, said once, as on its chip: whom it waits for, else its phase.\n overline={`${l.kinds[kind]} · ${waiting ?? barL.phases[phase]}`}\n title={step.title}\n />\n {sentBack && (\n <p className=\"px-1 text-xs text-amber-700 dark:text-amber-300\">{l.sentBack}</p>\n )}\n {/* The document first: what was drafted, or what is being approved. */}\n <StepDocumentCards\n refs={documents}\n heading={\n step.kind === 'review'\n ? phase === 'done'\n ? l.documents.approved\n : l.documents.toApprove\n : l.documents.produced\n }\n nameOfDoc={nameOfDoc}\n onOpen={onOpenDocument}\n labels={l.documents}\n testId={`workflow-thread-step-${step.id}-docs`}\n />\n <StepRecord\n step={step}\n state={states[step.id]}\n inputs={inputs}\n nameOf={nameOf}\n labels={l.record}\n testId={`workflow-thread-step-${step.id}-record`}\n />\n {(happened.length > 0 || !finished) && (\n <p className=\"px-1 text-xs font-medium text-muted-foreground\">\n {happened.length\n ? l.happened.replace('{count}', String(happened.length))\n : l.nothingYet}\n </p>\n )}\n {happened.map((item) => (\n <Entry key={item.id} item={item} />\n ))}\n {renderStepAction?.(step, phase)}\n {onSkip && ['ready', 'blocked', 'failed', 'waiting'].includes(phase) && (\n <button\n type=\"button\"\n onClick={() => onSkip(step.id)}\n className=\"w-full rounded-md px-1 py-1 text-left text-xs text-muted-foreground hover:bg-accent\"\n data-testid={`workflow-thread-step-${step.id}-skip`}\n >\n {l.skip}\n </button>\n )}\n </PopoverContent>\n </Popover>\n )\n return latestDoc ? (\n <span className=\"flex min-w-0 items-center\">\n {chip}\n <StepDocumentButton\n kind={kind}\n name={nameOfDoc?.(splitDocRef(latestDoc).id) ?? latestDoc}\n onOpen={() => onOpenDocument?.(latestDoc)}\n testId={`workflow-thread-step-${step.id}-open-document`}\n />\n </span>\n ) : (\n chip\n )\n }\n\n // The start pill: how the run began (a linked run's origin), and what happened before step one.\n const leading =\n startedBy || grouped.before.length ? (\n <div className=\"flex shrink-0 items-center gap-1\">\n {grouped.before.length ? (\n <EntriesChip\n kind=\"start\"\n icon={<Zap />}\n label={l.started}\n items={grouped.before}\n heading={l.beforeSteps}\n extra={startedBy && <WorkflowThreadStartedBy origin={startedBy} labels={labels} />}\n testId=\"workflow-thread-start\"\n />\n ) : (\n startedBy && <WorkflowThreadStartedBy origin={startedBy} labels={labels} />\n )}\n {link}\n </div>\n ) : null\n const trailing =\n grouped.after.length || strays.length ? (\n <div className=\"flex shrink-0 items-center gap-1\">\n {grouped.after.length > 0 && (\n <>\n <span aria-hidden className=\"wf-link max-w-6\" />\n <EntriesChip\n kind=\"adhoc\"\n icon={<MessagesSquare />}\n label={l.after}\n items={grouped.after}\n heading={l.afterSteps}\n testId=\"workflow-thread-after\"\n />\n </>\n )}\n {strays.map((s) => (\n <SignalPill key={`${s.step}-${s.signal}`} signal={s} l={l} />\n ))}\n </div>\n ) : null\n\n // The start pill, the \"After\" chip and what the step in view waits on take room of their own.\n const at = steps.find((s) => s.id === (selected ?? activeStepId(stepLevels(steps), phaseOf)))\n // The step in view is as wide as its heading (kind · whom it waits for, small caps) when that is\n // longer than its name; each step someone acted in carries their faces.\n const headingPx = (step: WorkflowStep) =>\n `${l.kinds[stepKindOf(step)]} · ${waitingOf(step.id) ?? ''}`.length * 5.6 -\n step.title.length * 6.5\n const reserve = {\n always:\n (at ? Math.max(0, headingPx(at)) : 0) +\n steps.filter((s) => grouped.byStep[s.id]?.length).length * BEADS_PX +\n (onOpenDocument\n ? steps.filter((s) => stepDocuments(steps, states, s.id).length).length * DOC_BUTTON_PX\n : 0),\n leading: leading ? 150 : 0,\n trailing: trailing ? 120 : 0,\n }\n\n return (\n <div className={cn('min-w-0 flex-1', className)} data-testid=\"workflow-thread-strip\">\n <StepBarFrame\n levels={stepLevels(steps)}\n phaseOf={phaseOf}\n current={selected}\n onSelect={(id) => {\n setSelected(id)\n setOpen(id)\n }}\n renderStep={(step, _level, win) =>\n pill(step, step.id === win.levels[win.currentLevel]?.primary.id || step.id === selected)\n }\n renderAfter={(level) =>\n signals\n .filter((s) => level.steps.some((step) => step.id === s.step))\n .map((s) => <SignalPill key={`${s.step}-${s.signal}`} signal={s} l={l} />)\n }\n leading={leading}\n trailing={trailing}\n reservePx={reserve}\n icon={glyphOf}\n kindOf={stepKindOf}\n labels={{ waitingFor: l.waitingFor, ...barLabels }}\n tid={(suffix) => `workflow-thread-${suffix}`}\n />\n </div>\n )\n}\n","/**\n * Linked runs, read from a thread's activity log: the signals its steps raised (`step_signal`), the\n * linked workflows each one started (`linked_run`, pointing at the new thread), and, for a thread a\n * signal started, where it came from (its `created` event's `linked_from`). The thread's top bar\n * shows them (`WorkflowThreadStrip`); the host resolves the threads' titles and navigation.\n */\n\nimport type { WorkflowActivityEvent } from '../workflows/run'\n\n/** A thread a signal started. */\nexport interface WorkflowLinkedRunRef {\n conversationId: string\n /** The workflow that started on the signal (`wfl-…`). */\n workflowId?: string\n}\n\n/** A signal one of the thread's steps raised, and the linked threads it started. */\nexport interface WorkflowRaisedSignal {\n step: string\n signal: string\n runs: WorkflowLinkedRunRef[]\n}\n\n/** Where a linked run came from: the step (and its signal) in the parent thread that started it. */\nexport interface WorkflowRunOrigin {\n conversationId: string\n step?: string\n signal?: string\n}\n\nexport interface WorkflowRunLinks {\n raised: WorkflowRaisedSignal[]\n startedBy?: WorkflowRunOrigin\n}\n\nconst text = (v: unknown): string | undefined => (typeof v === 'string' && v ? v : undefined)\n\n/** The thread's linked runs from its activity log (oldest first). */\nexport function linkedRunsFromActivity(\n events: readonly WorkflowActivityEvent[] | null | undefined\n): WorkflowRunLinks {\n const raised: WorkflowRaisedSignal[] = []\n let startedBy: WorkflowRunOrigin | undefined\n const entry = (step: string, signal: string): WorkflowRaisedSignal => {\n let found = raised.find((r) => r.step === step && r.signal === signal)\n if (!found) raised.push((found = { step, signal, runs: [] }))\n return found\n }\n for (const e of events ?? []) {\n const d = e.detail ?? {}\n const step = text(d.step)\n const signal = text(d.signal)\n if (e.kind === 'step_signal' && step && signal) entry(step, signal)\n else if (e.kind === 'linked_run' && step && signal) {\n const conversationId = text(d.conversation_ext_id)\n const runs = entry(step, signal).runs\n if (conversationId && !runs.some((r) => r.conversationId === conversationId))\n runs.push({ conversationId, workflowId: text(d.workflow_ext_id) })\n } else if (e.kind === 'created' && d.linked_from && typeof d.linked_from === 'object') {\n const from = d.linked_from as Record<string, unknown>\n const conversationId = text(from.conversation_ext_id)\n if (conversationId)\n startedBy = { conversationId, step: text(from.step), signal: text(from.signal) }\n }\n }\n return startedBy ? { raised, startedBy } : { raised }\n}\n","import type { TaskActivityEvent } from './TaskActivityTimeline'\nimport { eventWaitingDocuments, waitingForDocumentsText } from '../workflows/run'\n\nexport interface CompactThreadActivity {\n event: TaskActivityEvent\n label: string\n recipients: string[]\n}\n\nconst STEP_LABELS: Record<string, string> = {\n step_started: 'Step started',\n step_done: 'Step done',\n step_skipped: 'Step skipped',\n step_failed: 'Step failed',\n step_waiting: 'Waiting',\n step_progress: 'Signed',\n step_sent_back: 'Sent back',\n}\n\n/** What happened to a named step: \"Summarise key risks done\". */\nconst STEP_VERBS: Record<string, string> = {\n step_started: 'started',\n step_done: 'done',\n step_skipped: 'skipped',\n step_failed: 'failed',\n step_sent_back: 'sent back',\n}\n\n/**\n * Only user-facing actions. Notification batches group by their persisted source message. A step's\n * events are named after the step (`stepTitleOf`, from the run's plan) when it is known.\n */\nexport function compactThreadActivity(\n events: readonly TaskActivityEvent[],\n stepTitleOf?: (stepId: string) => string | undefined\n): CompactThreadActivity[] {\n const result: CompactThreadActivity[] = []\n const batches = new Map<string, CompactThreadActivity>()\n for (const event of events) {\n if (event.kind === 'notified') {\n if (\n ['conversation_ready', 'conversation_done'].includes(\n String(event.detail?.notification_type)\n )\n )\n continue\n const source = event.detail?.batch_ext_id ?? event.detail?.message_ext_id\n const key =\n typeof source === 'string' && source ? `${event.actor_ext_id}:${source}` : event.external_id\n let entry = batches.get(key)\n if (!entry) {\n entry = { event, label: 'Notified 1 user', recipients: [] }\n batches.set(key, entry)\n result.push(entry)\n }\n if (event.to_ext_id && !entry.recipients.includes(event.to_ext_id))\n entry.recipients.push(event.to_ext_id)\n const count = Math.max(1, entry.recipients.length)\n entry.label = `Notified ${count} ${count === 1 ? 'user' : 'users'}`\n } else if (STEP_LABELS[event.kind]) {\n // A workflow step's progress: the thread's step strip shows it as the step's own status.\n const documents = eventWaitingDocuments(event.detail)\n const title =\n typeof event.detail?.step === 'string' ? stepTitleOf?.(event.detail.step) : undefined\n result.push({\n event,\n label: documents\n ? waitingForDocumentsText(documents.length)\n : title && STEP_VERBS[event.kind]\n ? `${title} ${STEP_VERBS[event.kind]}`\n : STEP_LABELS[event.kind],\n recipients: [],\n })\n } else if (\n ['artifact_created', 'artifact_edited', 'document_added', 'document_removed'].includes(\n event.kind\n )\n ) {\n const labels: Record<string, string> = {\n artifact_created: 'Generated',\n artifact_edited: 'Edited document',\n document_added: 'Added document',\n document_removed: 'Removed document',\n }\n result.push({ event, label: labels[event.kind], recipients: [] })\n } else if (event.kind === 'call') {\n // A thread call's log card: one row per call, updated in place when it ends.\n result.push({\n event,\n label: event.detail?.ended_at ? 'Call' : 'Call started',\n recipients: [],\n })\n } else if (event.kind === 'recording') {\n // A stopped call recording: its Recording card.\n result.push({ event, label: 'Recording', recipients: [] })\n } else if (\n [\n 'created',\n 'participant_joined',\n 'assistant_responded',\n 'assistant_stopped',\n 'done',\n ].includes(event.kind)\n ) {\n const labels: Record<string, string> = {\n created: 'Started thread',\n participant_joined: 'Followed Up',\n assistant_responded: 'Answered',\n // A stopped turn logs its own crumb, so the header no longer reads the previous\n // answer's \"Answered\" as the outcome of the turn that was stopped.\n assistant_stopped: 'Stopped',\n done: 'Marked done',\n }\n result.push({\n event,\n label: labels[event.kind],\n recipients: [],\n })\n }\n }\n return result\n}\n","import { MessageSquare } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface TaskThreadChipLabels {\n open: string\n watch: string\n none: string\n}\n\nexport const DEFAULT_TASK_THREAD_CHIP_LABELS: TaskThreadChipLabels = {\n open: 'Open thread',\n watch: 'Watch live',\n none: 'No thread yet',\n}\n\nexport interface TaskThreadChipProps {\n /** Task id: keys the test id (`task-thread-{id}`). */\n id: string\n /** The task's conversation (a task is a conversation: its own id). */\n conversationId?: string | null\n /** An agent is writing into the thread right now. */\n generating?: boolean\n onOpen: (conversationId: string) => void\n testId?: string\n labels?: Partial<TaskThreadChipLabels>\n}\n\n/** The link from a task to its thread — live-pulsing while the agent works, muted before there is one. */\nexport function TaskThreadChip({\n id,\n conversationId,\n generating = false,\n onOpen,\n testId,\n labels,\n}: TaskThreadChipProps) {\n const l = { ...DEFAULT_TASK_THREAD_CHIP_LABELS, ...labels }\n if (!conversationId) {\n return (\n <span\n className=\"inline-flex items-center gap-1 text-xs text-muted-foreground\"\n data-testid={testIdOr(testId, { testId: `task-thread-${id}` })}\n data-state=\"none\"\n >\n <MessageSquare className=\"size-3.5 opacity-50\" aria-hidden />\n {l.none}\n </span>\n )\n }\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={cn(\n 'h-7 gap-1.5 px-2 text-xs pointer-coarse:h-11',\n generating && 'text-ai-ink hover:text-ai-ink'\n )}\n onClick={() => onOpen(conversationId)}\n data-testid={testIdOr(testId, { testId: `task-thread-${id}` })}\n data-state={generating ? 'live' : 'idle'}\n >\n <span className=\"relative flex size-3.5 items-center justify-center\">\n {generating && (\n <span className=\"absolute inline-flex size-full animate-ping rounded-full bg-ai-soft\" />\n )}\n <MessageSquare className=\"relative size-3.5\" aria-hidden />\n </span>\n {generating ? l.watch : l.open}\n </Button>\n )\n}\n","import { ListTodo, Plus, Workflow } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { TabHeader, type Tab } from '../../shell/TabHeader'\n\n/** Fixed strings of the Tasks page chrome. */\nexport interface TasksChromeLabels {\n tasksTab: string\n newTask: string\n}\n\nexport const DEFAULT_TASKS_CHROME_LABELS: TasksChromeLabels = {\n tasksTab: 'Tasks',\n newTask: 'New task',\n}\n\nexport interface TasksToolbarProps {\n /** Number of tasks (shown on the single \"Tasks\" tab). */\n count: number\n onNewTask: () => void\n testIds?: Partial<{ tab: string; newTask: string }>\n labels?: Partial<TasksChromeLabels>\n}\n\n/** The Tasks page header: one \"Tasks\" tab with a count, and New task (the page's primary action). */\nexport function TasksToolbar({ count, onNewTask, testIds, labels }: TasksToolbarProps) {\n const l = { ...DEFAULT_TASKS_CHROME_LABELS, ...labels }\n const tabs: Tab[] = [\n {\n id: 'tasks',\n label: l.tasksTab,\n icon: <ListTodo className=\"size-4\" />,\n count,\n testId: testIdOr(testIds?.tab, { testId: 'tasks-tab' }),\n },\n ]\n return (\n <div className=\"sticky top-0 z-10 bg-background\" data-slot=\"tasks-toolbar\">\n <TabHeader\n tabs={tabs}\n activeTabId=\"tasks\"\n onTabChange={() => {}}\n rightContent={\n <Button\n onClick={onNewTask}\n data-testid={testIdOr(testIds?.newTask, { testId: 'task-new' })}\n >\n <Plus size={16} className=\"mr-1.5\" />\n {l.newTask}\n </Button>\n }\n />\n </div>\n )\n}\n\n/** Fixed strings of the Workflows page chrome. */\nexport interface WorkflowsChromeLabels {\n workflowsTab: string\n newWorkflow: string\n}\n\nexport const DEFAULT_WORKFLOWS_CHROME_LABELS: WorkflowsChromeLabels = {\n workflowsTab: 'Workflows',\n newWorkflow: 'New workflow',\n}\n\nexport interface WorkflowsToolbarProps {\n /** Number of workflows (shown on the single \"Workflows\" tab). */\n count: number\n onNewWorkflow: () => void\n testIds?: Partial<{ tab: string; newWorkflow: string }>\n labels?: Partial<WorkflowsChromeLabels>\n}\n\n/** The Workflows page header: one \"Workflows\" tab with a count, and New workflow. */\nexport function WorkflowsToolbar({ count, onNewWorkflow, testIds, labels }: WorkflowsToolbarProps) {\n const l = { ...DEFAULT_WORKFLOWS_CHROME_LABELS, ...labels }\n const tabs: Tab[] = [\n {\n id: 'workflows',\n label: l.workflowsTab,\n icon: <Workflow className=\"size-4\" />,\n count,\n testId: testIdOr(testIds?.tab, { testId: 'workflows-tab' }),\n },\n ]\n return (\n <div className=\"sticky top-0 z-10 bg-background\" data-slot=\"workflows-toolbar\">\n <TabHeader\n tabs={tabs}\n activeTabId=\"workflows\"\n onTabChange={() => {}}\n rightContent={\n <Button\n onClick={onNewWorkflow}\n data-testid={testIdOr(testIds?.newWorkflow, { testId: 'workflow-new' })}\n >\n <Plus size={16} className=\"mr-1.5\" />\n {l.newWorkflow}\n </Button>\n }\n />\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport type { AgentOption } from '../workflows/AgentSelect'\nimport type { SchemaFormLabels } from '../workflows/SchemaForm'\nimport type { WorkflowScopeSource } from '../workflows/WorkflowConfigDialog'\nimport type {\n WorkflowDefinition,\n WorkflowField,\n WorkflowInputs,\n WorkflowScope,\n} from '../workflows/types'\nimport { defaultInputs } from '../workflows/workflow'\nimport type { RecurrenceBuilderProps } from './RecurrenceBuilder'\n\n/**\n * When the assistant starts. `manual` means it only acts when asked (an @mention, or sending work back);\n * `now` starts it at once; `once`, `repeat`, `event` and `task` (after another task is signed off) start\n * it unattended.\n */\nexport type TaskWhen = 'manual' | 'now' | 'once' | 'repeat' | 'event' | 'task'\n\nexport type TaskAccessMode = 'ask_each_run' | 'standing'\n\n/**\n * Whether the assistant has been given work. Every task has an assistant; `agent` means it was configured\n * to prepare the task (it has an instruction and a start), `me` means it is on standby.\n */\nexport type TaskAssignee = 'me' | 'agent'\n\n/** Everything the composer collects. The host maps it onto its API. */\nexport interface TaskComposerValues {\n assignee: TaskAssignee\n workflowId: string\n inputs: WorkflowInputs\n when: TaskWhen\n /** datetime-local value (`once`). */\n runAt: string\n rrule: string\n timezone: string\n eventKind: string\n /** `task`: the id (`con-…`) of the task (conversation) this one waits on. */\n afterTaskId: string\n /** The task this is a sub-task of (`con-…`); `''` = a top-level task. */\n parentTaskId: string\n /** Shared with the workspace's members (like a document); off keeps it private to its owner. */\n shared: boolean\n /** What the task is, in the owner's words. */\n description: string\n /** datetime-local value; empty = no due date. */\n dueAt: string\n /** `''` = the user's own assistant. */\n agentId: string\n /** The task's title. */\n name: string\n /** The owner is always told when the assistant finishes; kept so hosts can map it. */\n notifyOnComplete: boolean\n /** Only asked for tasks the assistant starts unattended. */\n access: TaskAccessMode\n /** A workflow's saved equality filters on its event; carried through an edit unchanged (no control). */\n eventFilter?: Record<string, string | number | boolean> | null\n}\n\nexport interface TaskComposerLabels {\n titleNew: string\n titleEdit: string\n description: string\n titleNewWorkflow: string\n titleRunTemplate: (name: string) => string\n titleEditWorkflow: string\n descriptionWorkflow: string\n workflowNamePlaceholder: string\n createWorkflow: string\n /** The workflow dialog's three required parts, in order, and what is missing from each. */\n whenHeading: string\n whoHeading: string\n /** \"Run as\": the person themself (the default for Run now) or an agent (required for a scheduled run). */\n runAs: string\n runLater: string\n addFilesReason: string\n needDocument: string\n addPlan: string\n hidePlan: string\n /** The toggle when the workflow already has a plan. */\n showPlan: string\n runAsMe: string\n runAsAgentHint: string\n needAgent: string\n runNow: string\n saveWorkflow: string\n needWhat: string\n needRunAt: string\n needRrule: string\n needEvent: string\n needAfterTask: string\n /** The \"More options\" disclosure (name, details, visibility, plan, unattended access). */\n moreOptions: string\n fewerOptions: string\n nameHint: string\n titleLabel: string\n titlePlaceholder: string\n descriptionLabel: string\n descriptionPlaceholder: string\n due: string\n dueNone: string\n dueClear: string\n parentTask: string\n parentTaskNone: string\n visibility: string\n visibilityWorkspace: string\n visibilityPrivate: string\n assistant: string\n assistantStandby: string\n assistantPreparing: (when: string) => string\n configure: string\n configureClose: string\n what: string\n template: string\n whatPlaceholder: string\n plan: string\n planHint: string\n start: string\n whenOptions: Record<TaskWhen, string>\n runAt: string\n /** Shown when the start time is already past: the server refuses it. */\n runAtPast: string\n event: string\n eventPlaceholder: string\n eventHint: ReactNode\n afterTask: string\n afterTaskPlaceholder: string\n which: string\n myAssistant: string\n permission: string\n /** The disclosure that holds who runs it, access, name, owner and visibility. */\n runOptions: string\n /** Its summary line: \"Runs as Assistant · ask me each time\". */\n runOptionsSummary: (agent: string, access: string) => string\n permissionHint: string\n accessOptions: Record<TaskAccessMode, { label: string; hint: string }>\n timezone: string\n search: string\n empty: string\n cancel: string\n addTask: string\n addAndStart: string\n addAndSchedule: string\n save: string\n saving: string\n}\n\nexport const DEFAULT_TASK_COMPOSER_LABELS: TaskComposerLabels = {\n titleNew: 'New task',\n titleEdit: 'Edit task',\n description: 'Add a task. Every task has an assistant; configure it to have it prepare the work.',\n titleNewWorkflow: 'New workflow',\n /** The title while a template is picked: \"Run Summarise\". */\n titleRunTemplate: (name: string) => `Run ${name}`,\n titleEditWorkflow: 'Edit workflow',\n descriptionWorkflow:\n 'Run it now, or choose Run later to have it start on a date, repeat, or follow an event.',\n workflowNamePlaceholder: 'Name this workflow',\n createWorkflow: 'Create workflow',\n whenHeading: 'When should it run?',\n whoHeading: 'Which agent runs it?',\n runAs: 'Run as',\n runLater: 'Run later',\n addFilesReason: 'This needs files to work on. Add some, then run it.',\n needDocument: 'Pick or add a document',\n addPlan: 'Add a plan',\n hidePlan: 'Hide the plan',\n showPlan: 'Show the plan',\n runAsMe: 'Me',\n runAsAgentHint:\n 'Nobody is there when a saved workflow runs, so an agent runs it. Your Assistant is the default.',\n needAgent: 'Choose the agent that runs it.',\n runNow: 'Run now',\n saveWorkflow: 'Save workflow',\n needWhat: 'Say what it should do: choose a template and fill it in, or write an instruction.',\n needRunAt: 'Pick the date and time it should run.',\n needRrule: 'Choose how often it repeats.',\n needEvent: 'Say which event starts it.',\n needAfterTask: 'Choose the task it follows.',\n moreOptions: 'More options',\n fewerOptions: 'Fewer options',\n nameHint: 'Leave blank to use the name shown.',\n titleLabel: 'Title',\n titlePlaceholder: 'What needs doing?',\n descriptionLabel: 'Description',\n descriptionPlaceholder: 'Add details (optional)',\n due: 'Due',\n dueNone: 'No date',\n dueClear: 'Clear date',\n parentTask: 'Part of',\n parentTaskNone: 'Nothing (top-level)',\n visibility: 'Visibility',\n visibilityWorkspace: 'Workspace',\n visibilityPrivate: 'Only me',\n assistant: 'Task Assistant',\n assistantStandby: 'On standby. It replies when you @mention it in the task’s thread.',\n assistantPreparing: (when) => `Will work on this task ${when}. You mark it done when it is.`,\n configure: 'Configure',\n configureClose: 'Done',\n what: 'What should it do?',\n template: 'Skill',\n whatPlaceholder: 'Choose…',\n plan: 'Plan',\n planHint: 'The checklist it is held to. You see how it did when it finishes.',\n start: 'Start',\n whenOptions: {\n manual: 'When asked',\n now: 'Now',\n once: 'On a date',\n repeat: 'Repeat',\n event: 'When something happens',\n task: 'After another task',\n },\n runAt: 'Start at',\n runAtPast: 'Pick a time in the future.',\n event: 'Event',\n eventPlaceholder: 'mention',\n eventHint: 'It starts whenever this kind of notification reaches you.',\n afterTask: 'After',\n afterTaskPlaceholder: 'Choose a task…',\n which: 'Assistant',\n myAssistant: 'Mine',\n permission: 'Access',\n runOptions: 'Run options',\n runOptionsSummary: (agent, access) => `Runs as ${agent} · ${access.toLowerCase()}`,\n permissionHint:\n 'It starts while you are away, so it needs your permission to use this workspace.',\n accessOptions: {\n ask_each_run: {\n label: 'Ask me each time',\n hint: 'When it is due, it waits until you allow it.',\n },\n standing: {\n label: 'Always allowed',\n hint: 'It joins the workspace and can work while you are away. Only for assistants you trust.',\n },\n },\n timezone: 'Timezone',\n search: 'Search…',\n empty: 'No match.',\n cancel: 'Cancel',\n addTask: 'Add task',\n addAndStart: 'Start now',\n addAndSchedule: 'Schedule',\n save: 'Save changes',\n saving: 'Saving…',\n}\n\nexport interface TaskOption {\n id: string\n name: string\n}\n\nexport interface TaskComposerProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n /**\n * `work` (default) adds a task: \"Now\" starts it at once and any other start saves a workflow.\n * `workflow` is the workflow dialog itself (new or edit): a trigger and an action are required, and\n * the task-only properties (due date, parent) are hidden.\n */\n kind?: 'work' | 'workflow'\n /** Saving a reusable workflow; on-demand creates a recipe rather than starting work. */\n saveOnly?: boolean\n /** Hide the \"Run later\" button (scheduling is off): a workflow can only be started now. */\n hideRunLater?: boolean\n /**\n * Editing an existing task, or a workflow. A task keeps the start and assistant it was created with;\n * a workflow can change both.\n */\n isEdit?: boolean\n /** Workflows the assistant can run. The host includes its \"my own instruction\" entry. */\n workflows: WorkflowDefinition[]\n agents: AgentOption[]\n /** Tasks a new task can be part of, or wait on (`when: 'task'`) — conversations with a status. */\n tasks?: TaskOption[]\n /**\n * The owner's Assistant (an agent id). A scheduled workflow needs an agent, so switching away from\n * \"Now\" selects this one when \"Run as\" is still the person themself.\n */\n defaultAgentId?: string\n /** Controlled values; omit to let the composer hold them (seeded by `initialValues`). */\n values?: TaskComposerValues\n initialValues?: Partial<TaskComposerValues>\n onValuesChange?: (values: TaskComposerValues) => void\n timezones?: string[]\n /** Supported event triggers, supplied by the host instead of asking users for backend codes. */\n eventOptions?: readonly { id: string; label: string }[]\n eventWorkflowOptions?: readonly { id: string; label: string }[]\n /** The plan editor, shown inline when the assistant is configured. Omit when not applicable. */\n goal?: ReactNode | ((values: TaskComposerValues) => ReactNode)\n /** What \"always allowed\" means for this assistant (e.g. the workspaces it will hold standing access to). */\n standingAccess?: ReactNode | ((values: TaskComposerValues) => ReactNode)\n isPending?: boolean\n /** A plan is being drafted: saving waits for it, or the plan would be dropped. */\n planDrafting?: boolean\n /** The plan already stored (an edit): the toggle offers to show it rather than to add one. */\n hasPlan?: boolean\n onSubmit: (values: TaskComposerValues, options?: { runOnce?: boolean }) => void\n /**\n * The workspace's files behind `scope` fields (the folder/label picker) and a `documents` field (an\n * explicit pick). The host owns the file data; without these those fields render nothing. A scope pick\n * is resolved to explicit file ids on submit (`scopeSource.resolveDocuments`).\n */\n scopeSource?: WorkflowScopeSource\n renderScope?: (\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode\n renderDocuments?: (\n field: WorkflowField,\n value: WorkflowScope,\n onChange: (s: WorkflowScope) => void\n ) => ReactNode\n /** The host's \"Add files\" control, offered instead of the form when a template needs files and there are none. */\n addFilesAction?: ReactNode\n /** Files dropped on the \"add files\" state: the host uploads them. */\n onDropFiles?: (files: File[]) => void\n /** The assistant's workflow input forms: `renderIcon` maps a field option's icon key. */\n renderIcon?: (key: string) => ReactNode\n labels?: Partial<TaskComposerLabels>\n formLabels?: Partial<SchemaFormLabels>\n recurrence?: Pick<RecurrenceBuilderProps, 'testIds' | 'labels'>\n testId?: string\n}\n\nexport function defaultTaskComposerValues(\n workflows: WorkflowDefinition[],\n initial?: Partial<TaskComposerValues>\n): TaskComposerValues {\n const workflowId = initial?.workflowId ?? workflows[0]?.id ?? ''\n const workflow = workflows.find((w) => w.id === workflowId)\n return {\n assignee: 'me',\n workflowId,\n inputs: workflow ? { ...defaultInputs(workflow), ...initial?.inputs } : { ...initial?.inputs },\n when: 'manual',\n runAt: '',\n rrule: '',\n timezone: 'UTC',\n eventKind: 'mention',\n afterTaskId: '',\n parentTaskId: '',\n shared: false,\n description: '',\n dueAt: '',\n agentId: '',\n name: '',\n notifyOnComplete: true,\n access: 'ask_each_run',\n ...initial,\n }\n}\n","import { useEffect, useMemo, useState } from 'react'\nimport { Bot, CornerDownRight, KeyRound, Loader2, Play, ChevronDown, Zap, X } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogClose,\n DialogDescription,\n DialogTitle,\n Input,\n Label,\n Textarea,\n VisibilityToggle,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { TabHeader } from '../../shell/TabHeader'\nimport { useControllableState } from '../../lib/useControllableState'\nimport { AddFilesFirst } from '../../home/AddFilesFirst'\nimport { SchemaForm } from '../workflows/SchemaForm'\nimport { defaultScopeRenderer, resolveScopeInputs } from '../workflows/scopeRender'\nimport type { WorkflowInputValue } from '../workflows/types'\nimport { defaultInputs, validateInputs } from '../workflows/workflow'\nimport { PillSelect, type PillOption } from './PillSelect'\nimport { RecurrenceBuilder } from './RecurrenceBuilder'\nimport {\n DEFAULT_TASK_COMPOSER_LABELS,\n defaultTaskComposerValues,\n type TaskAccessMode,\n type TaskComposerLabels,\n type TaskComposerProps,\n type TaskComposerValues,\n type TaskWhen,\n} from './taskComposerTypes'\nimport { deriveWorkflowName } from './taskRequest'\n\n/** A workflow starts at a time, on a repeat, on an event or after a task: never \"now\". */\nconst WHEN_ORDER: TaskWhen[] = ['now', 'once', 'repeat', 'event', 'task']\nconst GLYPH = 'size-3.5 shrink-0'\n\n/** What is still missing from the trigger, as the label key that says so; null when it is complete. */\nfunction missingWhen(values: TaskComposerValues, runAtPast: boolean) {\n if (values.when === 'now' || values.when === 'manual') return null\n if (values.when === 'once') return !values.runAt || runAtPast ? 'needRunAt' : null\n if (values.when === 'repeat') return values.rrule.trim() ? null : 'needRrule'\n if (values.when === 'event') return values.eventKind.trim() ? null : 'needEvent'\n if (values.when === 'task') return values.afterTaskId ? null : 'needAfterTask'\n return null\n}\n\n/**\n * The workflow dialog, where a skill is run: what it does, when it runs (Now by default, or on a date, a\n * repeat, an event or after a task) and who runs it (the person, or an agent), up front and in that\n * order, each saying in plain words what is missing. \"Now\" runs it at once and saves nothing; every\n * other start saves a workflow, which needs an agent because nobody is present when it fires. The name, details, visibility, plan and unattended\n * access are optional and sit behind \"More options\". A blank name is derived from the template or the\n * instruction and shown as the placeholder, so the Create button needs only the three required parts.\n */\nexport function WorkflowComposer({\n open,\n onOpenChange,\n isEdit = false,\n saveOnly = false,\n hideRunLater = false,\n workflows,\n agents,\n tasks = [],\n values: valuesProp,\n initialValues,\n onValuesChange,\n timezones = [],\n eventOptions,\n eventWorkflowOptions,\n goal,\n standingAccess,\n scopeSource,\n renderScope,\n renderDocuments,\n addFilesAction,\n onDropFiles,\n defaultAgentId,\n isPending,\n planDrafting = false,\n hasPlan = false,\n onSubmit,\n renderIcon,\n labels,\n formLabels,\n recurrence,\n testId,\n}: TaskComposerProps) {\n const l: TaskComposerLabels = {\n ...DEFAULT_TASK_COMPOSER_LABELS,\n ...labels,\n whenOptions: {\n ...DEFAULT_TASK_COMPOSER_LABELS.whenOptions,\n ...labels?.whenOptions,\n ...(saveOnly ? { now: 'When needed' } : {}),\n },\n accessOptions: { ...DEFAULT_TASK_COMPOSER_LABELS.accessOptions, ...labels?.accessOptions },\n }\n const seed = useMemo(\n () => defaultTaskComposerValues(workflows, initialValues),\n // Seeded once per open; the host re-keys the composer for a different workflow.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [workflows, open]\n )\n const [values, setValues] = useControllableState<TaskComposerValues>(\n valuesProp,\n seed,\n onValuesChange\n )\n const [runOnce, setRunOnce] = useState(false)\n const [automationWhen, setAutomationWhen] = useState(seed.when)\n const [planOpen, setPlanOpen] = useState(false)\n const [moreOpen, setMoreOpen] = useState(false)\n // The agent was filled in for a scheduled start (not chosen): said inline, and undone going back to Now.\n const [agentAutoSet, setAgentAutoSet] = useState(false)\n // Each open starts from the seed again (uncontrolled only), with the extras folded away.\n useEffect(() => {\n if (open) {\n if (valuesProp === undefined) setValues(seed)\n setRunOnce(false)\n setPlanOpen(false)\n setAgentAutoSet(false)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const id = testIdOr(testId, { testId: 'task-composer' })\n const set = <K extends keyof TaskComposerValues>(key: K, value: TaskComposerValues[K]) =>\n setValues({ ...values, [key]: value })\n\n const workflow = workflows.find((w) => w.id === values.workflowId)\n // An unattended run has no one to scope files for, so scope fields are not asked.\n const fields = workflow?.inputs ?? []\n // The template needs files and the workspace has none: offer to add some instead of an unusable form.\n // A template with its own file pick shows an empty state with Add files in that field; one that only\n // takes a scope has nothing to show without files, so the whole form gives way to the offer.\n const noFiles = Boolean(\n workflow?.requiresFiles &&\n scopeSource &&\n scopeSource.totalCount === 0 &&\n addFilesAction &&\n !fields.some((f) => f.type === 'documents')\n )\n // A required file pick that is still empty says so in plain words.\n const missingDocument = Boolean(\n workflow &&\n fields.some((f) => {\n if (f.type !== 'documents' || !f.required) return false\n const v = values.inputs[f.name]\n const docs =\n v && typeof v === 'object' ? (v as { documents?: string[] }).documents : undefined\n return !docs?.length\n })\n )\n const whatMissing =\n !workflow ||\n Object.keys(validateInputs({ ...workflow, inputs: fields }, values.inputs)).length > 0\n\n // A start time already past is refused by the server; an unchanged one (editing a spent workflow) is not ours to block.\n const runAtPast =\n values.when === 'once' &&\n values.runAt !== '' &&\n values.runAt !== initialValues?.runAt &&\n new Date(values.runAt).getTime() <= Date.now()\n const whenMissing = missingWhen(values, runAtPast)\n // \"Run later\": the schedule, the agent and the access are asked. A saved workflow is always later.\n const scheduled = values.when !== 'now' && values.when !== 'manual'\n const agentMissing = scheduled && values.agentId === ''\n const canSubmit =\n !whatMissing && !noFiles && whenMissing === null && !agentMissing && !isPending && !planDrafting\n\n const derivedName = workflow ? deriveWorkflowName(workflow, values.inputs) : ''\n const pickWorkflow = (next: string) => {\n const def = workflows.find((w) => w.id === next)\n setValues({\n ...values,\n workflowId: next,\n inputs: def ? defaultInputs(def) : {},\n ...(def?.documentAction ? { access: 'standing' as const } : {}),\n })\n }\n\n const pickWhen = (next: TaskWhen) => {\n const goesScheduled = next !== 'now' && next !== 'manual'\n if (goesScheduled && values.agentId === '' && defaultAgentId) {\n setAgentAutoSet(true)\n setValues({ ...values, when: next, agentId: defaultAgentId })\n } else if (!goesScheduled && agentAutoSet) {\n setAgentAutoSet(false)\n setValues({ ...values, when: next, agentId: '' })\n } else {\n setValues({ ...values, when: next })\n }\n }\n // The assistants can arrive after \"Run later\" was picked: fill the default in then, not only on the pick.\n useEffect(() => {\n if (scheduled && values.agentId === '' && defaultAgentId) {\n setAgentAutoSet(true)\n setValues({ ...values, agentId: defaultAgentId })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [scheduled, defaultAgentId, values.agentId])\n const pickAgent = (agentId: string) => {\n setAgentAutoSet(false)\n set('agentId', agentId)\n }\n\n const submit = () => {\n const submitted: TaskComposerValues = {\n ...values,\n // A scope pick is bound to explicit file ids before anything is sent.\n inputs:\n workflow && !workflow.documentAction\n ? resolveScopeInputs(workflow, values.inputs, scopeSource)\n : values.inputs,\n assignee: 'agent',\n notifyOnComplete: true,\n name: values.name.trim(),\n }\n if (runOnce) onSubmit(submitted, { runOnce: true })\n else onSubmit(submitted)\n }\n\n const pillLabels = { search: l.search, empty: l.empty }\n const taskOptions: PillOption[] = tasks.map((t) => ({\n id: t.id,\n label: t.name,\n icon: <CornerDownRight className={GLYPH} aria-hidden />,\n }))\n // \"Run now\" is the footer's primary action, so the start list holds only the later starts.\n const whenOptions: PillOption[] = [\n { id: 'manual', label: 'Start now' },\n { id: 'schedule', label: 'Schedule' },\n { id: 'event', label: 'Notification' },\n ]\n const assistantOptions: PillOption[] = agents.map((a) => ({ id: a.id, label: a.label }))\n // Shared workflows may reference an agent outside the viewer's own agent list.\n if (values.agentId && !assistantOptions.some((a) => a.id === values.agentId)) {\n assistantOptions.push({ id: values.agentId, label: 'Assigned agent' })\n }\n const goalNode = typeof goal === 'function' ? goal(values) : goal\n // A template picked from the list names the dialog (\"Run Summarise\"); the own-instruction entry does not.\n const pickedTemplate = workflows.find((w) => w.id === values.workflowId && !w.generic)\n const hint = (key: 'needWhat' | 'needRunAt' | 'needRrule' | 'needEvent' | 'needAfterTask') =>\n l[key]\n\n return (\n <Dialog modal={false} open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"right\"\n hideCloseButton\n onInteractOutside={(event) => event.preventDefault()}\n className=\"flex flex-col gap-0 overflow-hidden p-0 shadow-lg\"\n data-testid={id}\n >\n <DialogTitle className=\"sr-only\">Automation settings</DialogTitle>\n <DialogDescription className=\"sr-only\">{l.descriptionWorkflow}</DialogDescription>\n <TabHeader\n tabs={[\n {\n id: 'automation-setup',\n label: isEdit\n ? l.titleEditWorkflow\n : pickedTemplate\n ? l.titleRunTemplate(pickedTemplate.title)\n : l.titleNewWorkflow,\n presentation: 'count',\n },\n ...((saveOnly || isEdit) && !workflow?.documentAction\n ? [{ id: 'start-task', label: 'Start task' }]\n : []),\n ]}\n activeTabId={runOnce ? 'start-task' : 'automation-setup'}\n onTabChange={(tab) => {\n if (tab === 'start-task' && !runOnce) {\n setAutomationWhen(values.when)\n set('when', 'now')\n setRunOnce(true)\n } else if (tab === 'automation-setup' && runOnce) {\n set('when', automationWhen)\n setRunOnce(false)\n }\n }}\n rightContent={\n <DialogClose asChild>\n <Button variant=\"ghost\" size=\"icon\" aria-label=\"Close\">\n <X className=\"size-4\" />\n </Button>\n </DialogClose>\n }\n />\n\n <form\n className=\"flex min-h-0 flex-1 flex-col\"\n onSubmit={(event) => {\n event.preventDefault()\n if (canSubmit) submit()\n }}\n >\n <div className=\"flex min-h-0 flex-1 flex-col gap-5 overflow-y-auto px-6 pb-4\">\n {/* What it does: the template and its form (all there is until Run later) */}\n <section className=\"flex flex-col gap-2\" data-testid={`${id}-what`}>\n <h3 className=\"text-sm font-medium\">{l.what}</h3>\n <PillSelect\n icon={<Bot className={GLYPH} aria-hidden />}\n prefix={l.template}\n value={values.workflowId}\n options={workflows.map((w) => ({ id: w.id, label: w.title }))}\n onChange={pickWorkflow}\n labels={pillLabels}\n testId={`${id}-workflow`}\n className=\"self-start\"\n />\n {noFiles && (\n <div\n onDragOver={(e) => e.preventDefault()}\n onDrop={(e) => {\n e.preventDefault()\n const files = Array.from(e.dataTransfer?.files ?? [])\n if (files.length) onDropFiles?.(files)\n }}\n data-testid={`${id}-dropzone`}\n >\n <AddFilesFirst\n reason={l.addFilesReason}\n action={addFilesAction}\n testId={`${id}-empty-state`}\n />\n </div>\n )}\n {!noFiles && workflow && fields.length > 0 && (\n <SchemaForm\n fields={fields}\n values={values.inputs}\n onChange={(name: string, value: WorkflowInputValue) =>\n set('inputs', { ...values.inputs, [name]: value })\n }\n renderScope={renderScope ?? defaultScopeRenderer(scopeSource)}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n labels={formLabels}\n testIdPrefix={`${id}-field`}\n />\n )}\n {/* A template names its own required fields; only a free instruction needs a hint. */}\n {missingDocument && (\n <p className=\"text-xs text-muted-foreground\" data-testid={`${id}-document-hint`}>\n {l.needDocument}\n </p>\n )}\n {whatMissing && workflow?.inputs.some((i) => i.name === 'instruction') && (\n <p className=\"text-xs text-muted-foreground\" data-testid={`${id}-what-hint`}>\n {hint('needWhat')}\n </p>\n )}\n </section>\n\n {/* A plan rides with the run, now or saved with the workflow (it grades each scheduled run): a quiet,\n collapsed extra */}\n {goalNode != null && (\n <section className=\"flex flex-col gap-2\" data-testid={`${id}-assistant`}>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1 self-start px-2 pointer-coarse:h-11\"\n onClick={() => setPlanOpen((v) => !v)}\n aria-expanded={planOpen}\n data-testid={`${id}-plan-toggle`}\n >\n {planOpen ? l.hidePlan : hasPlan ? l.showPlan : l.addPlan}\n <ChevronDown\n className={cn('size-3.5 transition-transform', planOpen && 'rotate-180')}\n aria-hidden\n />\n </Button>\n {planOpen && (\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-plan`}>\n <p className=\"text-xs text-muted-foreground\">{l.planHint}</p>\n {goalNode}\n </div>\n )}\n </section>\n )}\n\n {!runOnce && (scheduled || isEdit) && (\n <>\n {/* When it runs */}\n <section className=\"flex flex-col gap-2\" data-testid={`${id}-when-section`}>\n <h3 className=\"text-sm font-medium\">{l.whenHeading}</h3>\n <PillSelect\n icon={<Play className={GLYPH} aria-hidden />}\n prefix={l.start}\n value={\n values.when === 'once' || values.when === 'repeat'\n ? 'schedule'\n : values.when === 'task'\n ? 'event'\n : values.when === 'now'\n ? 'manual'\n : values.when\n }\n options={whenOptions}\n onChange={(v) => pickWhen(v === 'schedule' ? 'once' : (v as TaskWhen))}\n labels={pillLabels}\n testId={`${id}-when`}\n className=\"self-start\"\n />\n {(values.when === 'once' || values.when === 'repeat') && (\n <PillSelect\n icon={<Play className={GLYPH} aria-hidden />}\n prefix=\"Schedule\"\n value={values.when}\n options={[\n { id: 'once', label: 'Once' },\n { id: 'repeat', label: 'Repeat' },\n ]}\n onChange={(value) => pickWhen(value as TaskWhen)}\n labels={pillLabels}\n testId={`${id}-schedule-mode`}\n className=\"self-start\"\n />\n )}\n {values.when === 'once' && (\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"task-composer-runat\" className=\"sr-only\">\n {l.runAt}\n </Label>\n <Input\n id=\"task-composer-runat\"\n type=\"datetime-local\"\n value={values.runAt}\n onChange={(e) => set('runAt', e.target.value)}\n className=\"max-w-xs\"\n aria-invalid={runAtPast || undefined}\n data-testid={`${id}-run-at`}\n />\n {runAtPast && (\n <p className=\"text-xs text-destructive\" data-testid={`${id}-run-at-past`}>\n {l.runAtPast}\n </p>\n )}\n </div>\n )}\n {values.when === 'repeat' && (\n <>\n <RecurrenceBuilder\n rrule={values.rrule}\n onChange={(r) => set('rrule', r)}\n {...recurrence}\n />\n {timezones.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <Label htmlFor=\"task-composer-timezone\" className=\"text-xs\">\n {l.timezone}\n </Label>\n <Input\n id=\"task-composer-timezone\"\n list=\"task-composer-timezones\"\n value={values.timezone}\n onChange={(e) => set('timezone', e.target.value)}\n className=\"max-w-xs\"\n data-testid={`${id}-timezone`}\n />\n <datalist id=\"task-composer-timezones\">\n {timezones.map((tz) => (\n <option key={tz} value={tz} />\n ))}\n </datalist>\n </div>\n )}\n </>\n )}\n {values.when === 'event' && (\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"task-composer-event\" className=\"sr-only\">\n {l.event}\n </Label>\n {eventOptions ? (\n <PillSelect\n icon={<Zap className={GLYPH} aria-hidden />}\n prefix={l.event}\n value={values.eventKind}\n options={\n eventOptions.some((option) => option.id === values.eventKind) ||\n !values.eventKind\n ? [...eventOptions]\n : [\n ...eventOptions,\n {\n id: values.eventKind,\n label: values.eventKind.replaceAll('_', ' '),\n },\n ]\n }\n onChange={(event) => set('eventKind', event)}\n labels={pillLabels}\n testId={`${id}-event`}\n className=\"self-start\"\n />\n ) : (\n <Input\n id=\"task-composer-event\"\n value={values.eventKind}\n placeholder={l.eventPlaceholder}\n onChange={(e) => set('eventKind', e.target.value)}\n className=\"max-w-xs\"\n data-testid={`${id}-event`}\n />\n )}\n <p className=\"text-xs text-muted-foreground\">{l.eventHint}</p>\n </div>\n )}\n {values.when === 'event' &&\n values.eventKind === 'workflow_completed' &&\n eventWorkflowOptions && (\n <PillSelect\n icon={<Zap className={GLYPH} aria-hidden />}\n prefix=\"Automation\"\n value={\n typeof values.eventFilter?.workflow_ext_id === 'string'\n ? values.eventFilter.workflow_ext_id\n : ''\n }\n options={[{ id: '', label: 'Any automation' }, ...eventWorkflowOptions]}\n onChange={(id) =>\n set(\n 'eventFilter',\n id ? { ...values.eventFilter, workflow_ext_id: id } : null\n )\n }\n labels={pillLabels}\n testId={`${id}-event-workflow`}\n className=\"self-start\"\n />\n )}\n {values.when === 'task' && (\n <PillSelect\n icon={<CornerDownRight className={GLYPH} aria-hidden />}\n prefix={l.afterTask}\n value={values.afterTaskId}\n options={taskOptions}\n onChange={(v) => set('afterTaskId', v)}\n searchable\n labels={pillLabels}\n testId={`${id}-after-task`}\n className=\"self-start\"\n />\n )}\n {whenMissing && !runAtPast && (\n <p className=\"text-xs text-muted-foreground\" data-testid={`${id}-when-hint`}>\n {hint(whenMissing)}\n </p>\n )}\n </section>\n\n {/* Who runs it, the access it gets, its name and owner: sensible defaults, so folded away. */}\n <section className=\"flex flex-col gap-3\" data-testid={`${id}-more`}>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-auto min-h-8 flex-col items-start gap-0.5 self-start px-2 py-1 text-left pointer-coarse:min-h-11\"\n onClick={() => setMoreOpen((v) => !v)}\n aria-expanded={moreOpen || agentMissing}\n data-testid={`${id}-more-toggle`}\n >\n <span className=\"flex items-center gap-1\">\n {l.runOptions}\n <ChevronDown\n className={cn(\n 'size-3.5 transition-transform',\n (moreOpen || agentMissing) && 'rotate-180'\n )}\n aria-hidden\n />\n </span>\n <span className=\"text-xs font-normal text-muted-foreground\">\n {l.runOptionsSummary(\n assistantOptions.find((a) => a.id === values.agentId)?.label ?? l.runAsMe,\n l.accessOptions[values.access].label\n )}\n </span>\n </Button>\n {(moreOpen || agentMissing) && (\n <div className=\"flex flex-col gap-5\" data-testid={`${id}-more-body`}>\n {/* Which agent runs it: nobody is present when it fires */}\n <section className=\"flex flex-col gap-2\" data-testid={`${id}-who`}>\n <h3 className=\"text-sm font-medium\">{l.whoHeading}</h3>\n <PillSelect\n icon={<Bot className={GLYPH} aria-hidden />}\n prefix={l.runAs}\n value={values.agentId}\n options={assistantOptions}\n onChange={pickAgent}\n searchable={assistantOptions.length > 6}\n labels={pillLabels}\n testId={`${id}-agent`}\n className=\"self-start\"\n />\n <p\n className=\"text-xs text-muted-foreground\"\n data-testid={`${id}-agent-note`}\n >\n {l.runAsAgentHint}\n </p>\n {agentMissing && (\n <p\n className=\"text-xs text-muted-foreground\"\n data-testid={`${id}-agent-hint`}\n >\n {l.needAgent}\n </p>\n )}\n </section>\n\n {/* The access it gets while nobody is there */}\n <section className=\"flex flex-col gap-2\" data-testid={`${id}-config`}>\n <PillSelect\n icon={<KeyRound className={GLYPH} aria-hidden />}\n prefix={l.permission}\n value={values.access}\n options={(Object.keys(l.accessOptions) as TaskAccessMode[]).map(\n (mode) => ({\n id: mode,\n label: l.accessOptions[mode].label,\n })\n )}\n onChange={(v) => set('access', v as TaskAccessMode)}\n labels={pillLabels}\n testId={`${id}-access`}\n className=\"self-start\"\n />\n <div\n className=\"flex flex-col gap-1 rounded-md bg-muted p-2\"\n data-testid={`${id}-access-block`}\n >\n <p className=\"text-xs text-muted-foreground\">\n {l.permissionHint} {l.accessOptions[values.access].hint}\n </p>\n {values.access === 'standing' &&\n (typeof standingAccess === 'function'\n ? standingAccess(values)\n : standingAccess)}\n </div>\n </section>\n\n {/* Optional extras */}\n <section className=\"flex flex-col gap-3\" data-testid={`${id}-extras`}>\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"task-composer-title\" className=\"sr-only\">\n {l.titleLabel}\n </Label>\n <Input\n id=\"task-composer-title\"\n value={values.name}\n placeholder={derivedName || l.workflowNamePlaceholder}\n onChange={(e) => set('name', e.target.value)}\n className=\"h-10 text-base font-medium\"\n data-testid={`${id}-title`}\n />\n <p className=\"text-xs text-muted-foreground\">{l.nameHint}</p>\n <Label htmlFor=\"task-composer-description\" className=\"sr-only\">\n {l.descriptionLabel}\n </Label>\n <Textarea\n id=\"task-composer-description\"\n value={values.description}\n placeholder={l.descriptionPlaceholder}\n rows={2}\n onChange={(e) => set('description', e.target.value)}\n data-testid={`${id}-description`}\n />\n </div>\n <div\n className=\"flex flex-wrap items-center gap-2\"\n data-testid={`${id}-properties`}\n >\n <VisibilityToggle\n items={{ shared: values.shared }}\n onToggle={(share) => set('shared', share)}\n label={l.visibility}\n data-testid={`${id}-visibility`}\n />\n </div>\n </section>\n </div>\n )}\n </section>\n </>\n )}\n </div>\n\n <div className=\"flex flex-col-reverse gap-2 border-t border-border px-6 py-3 sm:flex-row sm:justify-end\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n data-testid={`${id}-cancel`}\n className=\"pointer-coarse:min-h-11\"\n >\n {l.cancel}\n </Button>\n {!isEdit && !saveOnly && !hideRunLater && (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => (scheduled ? pickWhen('now') : pickWhen('once'))}\n data-testid={scheduled ? `${id}-run-now-back` : `${id}-run-later`}\n className=\"pointer-coarse:min-h-11\"\n >\n {scheduled ? l.runNow : l.runLater}\n </Button>\n )}\n <Button\n type=\"submit\"\n disabled={!canSubmit}\n data-testid={`${id}-submit`}\n className=\"gap-1.5 pointer-coarse:min-h-11\"\n >\n {isPending && <Loader2 className=\"size-4 animate-spin\" />}\n {isPending\n ? l.saving\n : runOnce\n ? 'Start now'\n : isEdit\n ? l.save\n : saveOnly || scheduled\n ? l.saveWorkflow\n : l.runNow}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","import { DueDateMenu } from './DueDateMenu'\nimport { useEffect, useMemo, useState, type ReactNode } from 'react'\nimport {\n Bot,\n CalendarClock,\n ChevronDown,\n CornerDownRight,\n KeyRound,\n Loader2,\n Play,\n X,\n} from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n EntityPill,\n Input,\n Label,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Textarea,\n VisibilityToggle,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { ModalHeader } from '../../settings/ModalScaffold'\nimport { useControllableState } from '../../lib/useControllableState'\nimport type { AgentOption } from '../workflows/AgentSelect'\nimport { SchemaForm, type SchemaFormLabels } from '../workflows/SchemaForm'\nimport { defaultScopeRenderer, resolveScopeInputs } from '../workflows/scopeRender'\nimport type { WorkflowDefinition, WorkflowInputs, WorkflowInputValue } from '../workflows/types'\nimport { defaultInputs, validateInputs } from '../workflows/workflow'\nimport { PillSelect, type PillOption } from './PillSelect'\nimport { WorkflowComposer } from './WorkflowComposer'\nimport { RecurrenceBuilder } from './RecurrenceBuilder'\nimport {\n DEFAULT_TASK_COMPOSER_LABELS,\n defaultTaskComposerValues,\n type TaskAccessMode,\n type TaskComposerLabels,\n type TaskComposerProps,\n type TaskComposerValues,\n type TaskWhen,\n} from './taskComposerTypes'\n\nexport * from './taskComposerTypes'\n\n// The assistant starts now or on a trigger; `manual` is the standby state.\nconst WHEN_ORDER: TaskWhen[] = ['now', 'once', 'repeat', 'event', 'task']\n\n/** A datetime-local value as \"Fri 14 Oct, 09:00\" (the pill's label); the raw value if it is not a date. */\nfunction formatDue(local: string): string {\n const d = new Date(local)\n if (Number.isNaN(d.getTime())) return local\n return d.toLocaleString(undefined, {\n weekday: 'short',\n day: 'numeric',\n month: 'short',\n hour: '2-digit',\n minute: '2-digit',\n })\n}\n\nconst GLYPH = 'size-3.5 shrink-0'\n\n/**\n * One dialog to add a task, built from the app's own pills and lists. The task comes first, like a list\n * item: a title and details, then its properties as pills (due date, what it is part of, who can see it).\n * Every task has a Task Assistant; configuring it is optional. Left alone it is on standby and replies when\n * @mentioned. Give it work and it gets on with it; a person marks the task done. A person starting it\n * now is never asked about access; only an assistant that starts unattended needs permission up front.\n */\nfunction WorkTaskComposer({\n open,\n onOpenChange,\n isEdit = false,\n workflows,\n agents,\n tasks = [],\n values: valuesProp,\n initialValues,\n onValuesChange,\n timezones = [],\n goal,\n standingAccess,\n scopeSource,\n renderScope,\n renderDocuments,\n isPending,\n planDrafting = false,\n onSubmit,\n renderIcon,\n labels,\n formLabels,\n recurrence,\n testId,\n}: TaskComposerProps) {\n const l: TaskComposerLabels = {\n ...DEFAULT_TASK_COMPOSER_LABELS,\n ...labels,\n whenOptions: { ...DEFAULT_TASK_COMPOSER_LABELS.whenOptions, ...labels?.whenOptions },\n accessOptions: { ...DEFAULT_TASK_COMPOSER_LABELS.accessOptions, ...labels?.accessOptions },\n }\n const seed = useMemo(\n () => defaultTaskComposerValues(workflows, initialValues),\n // Seeded once per open; the host re-keys the composer for a different task.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [workflows, open]\n )\n const [values, setValues] = useControllableState<TaskComposerValues>(\n valuesProp,\n seed,\n onValuesChange\n )\n const [configOpen, setConfigOpen] = useState(seed.assignee === 'agent')\n // Each open starts from the seed again (uncontrolled only).\n useEffect(() => {\n if (open) {\n if (valuesProp === undefined) setValues(seed)\n setConfigOpen(seed.assignee === 'agent')\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const workflow = workflows.find((w) => w.id === values.workflowId)\n // The assistant runs unattended: file scoping is a chat-launch concern, so scope fields are not asked.\n const fields = workflow?.inputs ?? []\n const errors = workflow ? validateInputs({ ...workflow, inputs: fields }, values.inputs) : {}\n // Opening Configure only shows the options. The assistant is given work once its instruction is filled in.\n const hasWork = configOpen && Boolean(workflow) && Object.keys(errors).length === 0\n const unattended = hasWork && values.when !== 'now' && values.when !== 'manual'\n // The original task's kind cannot change after it exists.\n const canConfigure = !isEdit || seed.assignee === 'agent'\n // A task's start and assistant are fixed once it exists.\n const lockedStart = isEdit\n\n const set = <K extends keyof TaskComposerValues>(key: K, value: TaskComposerValues[K]) =>\n setValues({ ...values, [key]: value })\n\n const pickWorkflow = (id: string) => {\n const next = workflows.find((w) => w.id === id)\n setValues({ ...values, workflowId: id, inputs: next ? defaultInputs(next) : {} })\n }\n\n const openConfigure = () => {\n setConfigOpen(true)\n if (values.when === 'manual') setValues({ ...values, when: 'now' })\n }\n\n // A start time already past is refused by the server; an unchanged one (editing a spent workflow) is not ours to block.\n const runAtPast =\n values.when === 'once' &&\n values.runAt !== '' &&\n values.runAt !== initialValues?.runAt &&\n new Date(values.runAt).getTime() <= Date.now()\n const whenError =\n (values.when === 'once' && !values.runAt) ||\n runAtPast ||\n (values.when === 'repeat' && !values.rrule.trim()) ||\n (values.when === 'event' && !values.eventKind.trim()) ||\n (values.when === 'task' && !values.afterTaskId)\n const canSubmit =\n values.name.trim() !== '' && !(hasWork && whenError) && !isPending && !planDrafting\n const goalNode = typeof goal === 'function' ? goal(values) : goal\n\n // What the host receives: the assistant is only \"given work\" when it was configured with an instruction.\n const submit = () =>\n onSubmit({\n ...values,\n inputs: workflow ? resolveScopeInputs(workflow, values.inputs, scopeSource) : values.inputs,\n assignee: hasWork ? 'agent' : 'me',\n when: hasWork ? values.when : 'manual',\n notifyOnComplete: true,\n })\n\n const id = testIdOr(testId, { testId: 'task-composer' })\n const submitText = isPending\n ? l.saving\n : isEdit\n ? l.save\n : !hasWork\n ? l.addTask\n : values.when === 'now'\n ? l.addAndStart\n : l.addAndSchedule\n\n const taskOptions: PillOption[] = tasks.map((t) => ({\n id: t.id,\n label: t.name,\n icon: <CornerDownRight className={GLYPH} aria-hidden />,\n }))\n const whenOptions: PillOption[] = WHEN_ORDER.map((mode) => ({\n id: mode,\n label: l.whenOptions[mode],\n }))\n const assistantOptions: PillOption[] = agents.map((a) => ({ id: a.id, label: a.label }))\n const pillLabels = { search: l.search, empty: l.empty }\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"right\"\n className=\"flex flex-col overflow-hidden p-0\"\n data-testid={id}\n >\n <ModalHeader>\n <DialogTitle>{isEdit ? l.titleEdit : l.titleNew}</DialogTitle>\n <DialogDescription className=\"sr-only\">{l.description}</DialogDescription>\n </ModalHeader>\n\n <form\n className=\"flex min-h-0 flex-1 flex-col\"\n onSubmit={(event) => {\n event.preventDefault()\n if (canSubmit) submit()\n }}\n >\n <div className=\"flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto px-6 pb-4\">\n {/* The task, like a task-list item */}\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor=\"task-composer-title\" className=\"sr-only\">\n {l.titleLabel}\n </Label>\n <Input\n id=\"task-composer-title\"\n value={values.name}\n placeholder={l.titlePlaceholder}\n onChange={(e) => set('name', e.target.value)}\n autoFocus\n className=\"h-10 text-base font-medium\"\n data-testid={`${id}-title`}\n />\n <Label htmlFor=\"task-composer-description\" className=\"sr-only\">\n {l.descriptionLabel}\n </Label>\n <Textarea\n id=\"task-composer-description\"\n value={values.description}\n placeholder={l.descriptionPlaceholder}\n rows={2}\n onChange={(e) => set('description', e.target.value)}\n data-testid={`${id}-description`}\n />\n </div>\n\n {/* Its properties, as pills */}\n <div className=\"flex flex-wrap items-center gap-2\" data-testid={`${id}-properties`}>\n <Popover>\n <PopoverTrigger asChild>\n <EntityPill\n icon={<CalendarClock className={GLYPH} aria-hidden />}\n label={`${l.due}: ${values.dueAt ? formatDue(values.dueAt) : l.dueNone}`}\n secondaryText={<ChevronDown className=\"size-3\" aria-hidden />}\n size=\"sm\"\n className=\"h-7 pointer-coarse:min-h-11\"\n data-testid={`${id}-due-pill`}\n />\n </PopoverTrigger>\n <PopoverContent align=\"start\" className=\"w-auto p-2\">\n <DueDateMenu\n id={`${id}-due`}\n label={l.due}\n value={values.dueAt}\n onChange={(v) => set('dueAt', v)}\n labels={{ clear: l.dueClear }}\n />\n </PopoverContent>\n </Popover>\n\n {tasks.length > 0 && (\n <PillSelect\n icon={<CornerDownRight className={GLYPH} aria-hidden />}\n prefix={l.parentTask}\n value={values.parentTaskId}\n options={taskOptions}\n noneOption={{ id: '', label: l.parentTaskNone }}\n onChange={(v) => set('parentTaskId', v)}\n searchable\n labels={pillLabels}\n testId={`${id}-parent`}\n />\n )}\n\n {/* The same shared/private control every shareable thing in the app uses */}\n <VisibilityToggle\n items={{ shared: values.shared }}\n onToggle={(share) => set('shared', share)}\n label={l.visibility}\n presentation=\"select\"\n data-testid={`${id}-visibility`}\n />\n </div>\n\n {/* The Task Assistant, for a task being created or one that was given work. Editing a plain\n to-do has nothing to say about it. */}\n {canConfigure && (\n <section\n className=\"flex flex-col gap-3 rounded-lg border border-border bg-muted/30 p-3\"\n data-testid={`${id}-assistant`}\n data-state={hasWork ? 'working' : 'standby'}\n >\n <div className=\"flex items-center gap-2\">\n <EntityPill\n icon={<Bot className=\"size-3.5 shrink-0 text-ai-ink\" aria-hidden />}\n label={l.assistant}\n size=\"sm\"\n className=\"h-7 shrink-0 bg-ai-soft\"\n />\n <p className=\"min-w-0 flex-1 text-xs text-muted-foreground\">\n {hasWork\n ? l.assistantPreparing(l.whenOptions[values.when].toLowerCase())\n : l.assistantStandby}\n </p>\n {canConfigure && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 shrink-0 gap-1 px-2 pointer-coarse:h-11\"\n onClick={() => (configOpen ? setConfigOpen(false) : openConfigure())}\n aria-expanded={configOpen}\n data-testid={`${id}-configure`}\n >\n {configOpen ? l.configureClose : l.configure}\n <ChevronDown\n className={cn('size-3.5 transition-transform', configOpen && 'rotate-180')}\n aria-hidden\n />\n </Button>\n )}\n </div>\n\n {configOpen && (\n <div className=\"flex flex-col gap-3\" data-testid={`${id}-config`}>\n <div className=\"flex flex-col gap-1.5\">\n <Label className=\"text-xs text-muted-foreground\">{l.what}</Label>\n <PillSelect\n icon={<Bot className={GLYPH} aria-hidden />}\n prefix={l.template}\n value={values.workflowId}\n options={workflows.map((w) => ({ id: w.id, label: w.title }))}\n onChange={pickWorkflow}\n labels={pillLabels}\n testId={`${id}-workflow`}\n className=\"self-start\"\n />\n </div>\n {workflow && fields.length > 0 && (\n <SchemaForm\n fields={fields}\n values={values.inputs}\n onChange={(name: string, value: WorkflowInputValue) =>\n set('inputs', { ...values.inputs, [name]: value })\n }\n renderScope={renderScope ?? defaultScopeRenderer(scopeSource)}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n labels={formLabels}\n testIdPrefix={`${id}-field`}\n />\n )}\n\n {goalNode != null && (\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-plan`}>\n <div>\n <p className=\"text-sm font-medium\">{l.plan}</p>\n <p className=\"text-xs text-muted-foreground\">{l.planHint}</p>\n </div>\n {goalNode}\n </div>\n )}\n\n <div className=\"flex flex-wrap items-center gap-2\">\n <PillSelect\n icon={<Play className={GLYPH} aria-hidden />}\n prefix={l.start}\n value={values.when === 'manual' ? 'now' : values.when}\n options={whenOptions}\n onChange={(v) => set('when', v as TaskWhen)}\n disabled={lockedStart}\n labels={pillLabels}\n testId={`${id}-when`}\n />\n {agents.length > 1 && (\n <PillSelect\n icon={<Bot className={GLYPH} aria-hidden />}\n prefix={l.which}\n value={values.agentId}\n options={assistantOptions}\n noneOption={{ id: '', label: l.myAssistant }}\n onChange={(v) => set('agentId', v)}\n disabled={lockedStart}\n searchable={assistantOptions.length > 6}\n labels={pillLabels}\n testId={`${id}-agent`}\n />\n )}\n {unattended && (\n <PillSelect\n icon={<KeyRound className={GLYPH} aria-hidden />}\n prefix={l.permission}\n value={values.access}\n options={(Object.keys(l.accessOptions) as TaskAccessMode[]).map(\n (mode) => ({\n id: mode,\n label: l.accessOptions[mode].label,\n })\n )}\n onChange={(v) => set('access', v as TaskAccessMode)}\n labels={pillLabels}\n testId={`${id}-access`}\n />\n )}\n </div>\n\n {values.when === 'once' && (\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"task-composer-runat\" className=\"sr-only\">\n {l.runAt}\n </Label>\n <Input\n id=\"task-composer-runat\"\n type=\"datetime-local\"\n value={values.runAt}\n onChange={(e) => set('runAt', e.target.value)}\n className=\"max-w-xs\"\n aria-invalid={runAtPast || undefined}\n data-testid={`${id}-run-at`}\n />\n {runAtPast && (\n <p className=\"text-xs text-destructive\" data-testid={`${id}-run-at-past`}>\n {l.runAtPast}\n </p>\n )}\n </div>\n )}\n {values.when === 'repeat' && (\n <RecurrenceBuilder\n rrule={values.rrule}\n onChange={(r) => set('rrule', r)}\n {...recurrence}\n />\n )}\n {values.when === 'event' && (\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"task-composer-event\" className=\"sr-only\">\n {l.event}\n </Label>\n <Input\n id=\"task-composer-event\"\n value={values.eventKind}\n placeholder={l.eventPlaceholder}\n onChange={(e) => set('eventKind', e.target.value)}\n className=\"max-w-xs\"\n data-testid={`${id}-event`}\n />\n <p className=\"text-xs text-muted-foreground\">{l.eventHint}</p>\n </div>\n )}\n {values.when === 'task' && (\n <PillSelect\n icon={<CornerDownRight className={GLYPH} aria-hidden />}\n prefix={l.afterTask}\n value={values.afterTaskId}\n options={taskOptions}\n onChange={(v) => set('afterTaskId', v)}\n searchable\n labels={pillLabels}\n testId={`${id}-after-task`}\n className=\"self-start\"\n />\n )}\n {unattended && (\n <div\n className=\"flex flex-col gap-1 rounded-md bg-muted p-2\"\n data-testid={`${id}-access-block`}\n >\n <p className=\"text-xs text-muted-foreground\">\n {l.permissionHint} {l.accessOptions[values.access].hint}\n </p>\n {values.access === 'standing' &&\n (typeof standingAccess === 'function'\n ? standingAccess(values)\n : standingAccess)}\n </div>\n )}\n {values.when === 'repeat' && timezones.length > 0 && (\n <div className=\"flex items-center gap-2\">\n <Label htmlFor=\"task-composer-timezone\" className=\"text-xs\">\n {l.timezone}\n </Label>\n <Input\n id=\"task-composer-timezone\"\n list=\"task-composer-timezones\"\n value={values.timezone}\n onChange={(e) => set('timezone', e.target.value)}\n className=\"max-w-xs\"\n data-testid={`${id}-timezone`}\n />\n <datalist id=\"task-composer-timezones\">\n {timezones.map((tz) => (\n <option key={tz} value={tz} />\n ))}\n </datalist>\n </div>\n )}\n </div>\n )}\n </section>\n )}\n </div>\n\n <div className=\"flex flex-col-reverse gap-2 border-t border-border px-6 py-3 sm:flex-row sm:justify-end\">\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => onOpenChange(false)}\n data-testid={`${id}-cancel`}\n className=\"pointer-coarse:min-h-11\"\n >\n {l.cancel}\n </Button>\n <Button\n type=\"submit\"\n disabled={!canSubmit}\n data-testid={`${id}-submit`}\n className=\"gap-1.5 pointer-coarse:min-h-11\"\n >\n {isPending && <Loader2 className=\"size-4 animate-spin\" />}\n {submitText}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n\n/**\n * The dialog behind \"New task\" (a title, with the assistant optional) and, with `kind=\"workflow\"`, the\n * workflow dialog (see {@link WorkflowComposer}: what, when and who up front, the rest under More\n * options).\n */\nexport function TaskComposer(props: TaskComposerProps) {\n return props.kind === 'workflow' ? (\n <WorkflowComposer {...props} />\n ) : (\n <WorkTaskComposer {...props} />\n )\n}\n","import { useEffect, useState } from 'react'\nimport {\n Button,\n Checkbox,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogTitle,\n Input,\n} from '@arbidocs/react/ui'\n\n/** Notifications are invitations to follow up in the thread, without assigning a review stage. */\nexport function ThreadNotifyDialog({\n open,\n onOpenChange,\n people,\n isShared,\n onNotify,\n}: {\n open: boolean\n onOpenChange: (open: boolean) => void\n people: readonly { id: string; label: string }[]\n isShared: boolean\n onNotify: (ids: string[]) => Promise<unknown>\n}) {\n const [selected, setSelected] = useState<string[]>([])\n const [query, setQuery] = useState('')\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string | null>(null)\n useEffect(() => {\n if (open) {\n setSelected([])\n setQuery('')\n setError(null)\n }\n }, [open])\n return (\n <Dialog\n open={open}\n onOpenChange={(value) => {\n if (!busy) onOpenChange(value)\n }}\n >\n <DialogContent className=\"max-w-sm\" data-testid=\"thread-notify-dialog\">\n <DialogTitle>Notify</DialogTitle>\n <DialogDescription>\n {isShared\n ? 'Ask someone to follow up in this thread.'\n : 'Notifying someone shares this thread with your workspace.'}\n </DialogDescription>\n <Input\n aria-label=\"Find people\"\n placeholder=\"Find someone…\"\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n />\n <div className=\"max-h-64 overflow-y-auto space-y-1\">\n {people\n .filter((person) => person.label.toLowerCase().includes(query.toLowerCase()))\n .map((person) => (\n <label\n key={person.id}\n className=\"flex cursor-pointer items-center gap-2 rounded px-2 py-2 hover:bg-muted\"\n >\n <Checkbox\n disabled={busy}\n checked={selected.includes(person.id)}\n onCheckedChange={(checked) =>\n setSelected((old) =>\n checked ? [...old, person.id] : old.filter((id) => id !== person.id)\n )\n }\n />\n {person.label}\n </label>\n ))}\n {!people.length && (\n <p className=\"text-sm text-muted-foreground\">No other workspace members yet.</p>\n )}\n </div>\n {error && (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n {error}\n </p>\n )}\n <Button\n disabled={busy || !selected.length}\n data-testid=\"thread-notify-submit\"\n onClick={async () => {\n setBusy(true)\n setError(null)\n try {\n await onNotify(selected)\n onOpenChange(false)\n } catch (failure) {\n setError(failure instanceof Error ? failure.message : 'Could not notify people')\n } finally {\n setBusy(false)\n }\n }}\n >\n {busy ? 'Notifying…' : 'Notify'}\n </Button>\n </DialogContent>\n </Dialog>\n )\n}\n","import { ARBI_MARK_SRC, UserEntity } from '@arbidocs/react/ui'\n\nexport interface TurnSpeakerProfile {\n external_id: string\n given_name: string\n family_name?: string | null\n picture?: string | null\n parent_ext_id?: string | null\n}\n\n/** A last-turn speaker, using only metadata returned with the conversation list. */\nexport function ConversationTurnSpeaker({\n role,\n actor,\n currentUserId,\n colorClass,\n platformName = 'ARBI',\n platformLogoSrc = ARBI_MARK_SRC,\n variant = 'pill',\n}: {\n role?: string | null\n actor?: TurnSpeakerProfile | null\n currentUserId?: string\n colorClass?: string\n platformName?: string\n platformLogoSrc?: string\n /** `icon`: the face alone (its name on hover), for a narrow column. */\n variant?: 'icon' | 'pill'\n}) {\n if (!role) return <span className=\"text-muted-foreground\">—</span>\n if (role === 'assistant' && !actor)\n return (\n <UserEntity\n size=\"sm\"\n variant={variant}\n interactive={false}\n picture={platformLogoSrc}\n avatarImageClassName=\"object-contain p-0.5\"\n initials={platformName.charAt(0)}\n displayName={platformName}\n />\n )\n if (!actor) return <span className=\"text-muted-foreground\">Unknown participant</span>\n const isMe = actor.external_id === currentUserId\n const displayName = isMe ? 'You' : [actor.given_name, actor.family_name].filter(Boolean).join(' ')\n return (\n <UserEntity\n size=\"sm\"\n variant={variant}\n interactive={false}\n isMe={isMe}\n isAgent={actor.external_id.startsWith('agt-')}\n displayName={displayName}\n initials={`${actor.given_name.charAt(0)}${actor.family_name?.charAt(0) ?? ''}`.toUpperCase()}\n picture={actor.picture}\n colorClass={colorClass}\n />\n )\n}\n","/**\n * TupleArrayField Component\n *\n * Specialized component for handling arrays of tuples, particularly for\n * few-shot examples where each tuple contains multiple string elements.\n * Displays in a clean table format for better organization.\n */\n\nimport { Plus, Trash2 } from 'lucide-react'\nimport { Button, Label, Textarea } from '@arbidocs/react/ui'\n\nexport interface TupleArrayFieldLabels {\n addRow: string\n empty: string\n jsonArrayPlaceholder: string\n /** Placeholder of one cell; receives the lower-cased column label. */\n cellPlaceholder: (column: string) => string\n /** aria-label of the remove button; receives the 1-based row number. */\n removeRow: (row: number) => string\n /** Column labels of 2-tuple few-shot examples. */\n pairColumns: string[]\n /** Column labels of 3-tuple few-shot examples. */\n tripleColumns: string[]\n /** Generic column label; receives the 1-based column number. */\n column: (n: number) => string\n}\n\nexport const DEFAULT_TUPLE_ARRAY_FIELD_LABELS: TupleArrayFieldLabels = {\n addRow: 'Add Row',\n empty: 'No examples added yet. Click \"Add Row\" to start.',\n jsonArrayPlaceholder: 'Enter JSON array...',\n cellPlaceholder: (column) => `Enter ${column}...`,\n removeRow: (row) => `Remove row ${row}`,\n pairColumns: ['Query with Context', 'Reformulated Query'],\n tripleColumns: ['Input', 'Expected Output', 'Explanation'],\n column: (n) => `Field ${n}`,\n}\n\nexport interface TupleArrayFieldProps {\n fieldId: string\n label: string\n description?: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChange: (value: any) => void\n labels?: Partial<TupleArrayFieldLabels>\n}\n\nexport function TupleArrayField({\n fieldId,\n label,\n description,\n value,\n onChange,\n labels,\n}: TupleArrayFieldProps) {\n const l = { ...DEFAULT_TUPLE_ARRAY_FIELD_LABELS, ...labels }\n // Ensure value is an array\n const examples = Array.isArray(value) ? value : []\n\n // Determine if this looks like a tuple array (array of arrays)\n const isTupleArray = examples.length === 0 || (examples.length > 0 && Array.isArray(examples[0]))\n\n // If not a tuple array, fall back to regular JSON editing\n if (!isTupleArray) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n <Textarea\n id={fieldId}\n value={JSON.stringify(value, null, 2)}\n onChange={(e) => {\n try {\n const parsed = JSON.parse(e.target.value)\n onChange(parsed)\n } catch {\n // Keep the string value if JSON parsing fails\n }\n }}\n placeholder={l.jsonArrayPlaceholder}\n rows={6}\n className=\"font-mono text-sm bg-background\"\n />\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n </div>\n )\n }\n\n // Determine the tuple structure (number of elements per tuple)\n const tupleLength = examples.length > 0 && Array.isArray(examples[0]) ? examples[0].length : 2 // Default to pairs if empty\n\n const handleAddExample = () => {\n const newExample = Array(tupleLength).fill('')\n onChange([...examples, newExample])\n }\n\n const handleRemoveExample = (index: number) => {\n const newExamples = examples.filter((_, i) => i !== index)\n onChange(newExamples)\n }\n\n const handleUpdateExample = (exampleIndex: number, elementIndex: number, newValue: string) => {\n const newExamples = [...examples]\n if (!Array.isArray(newExamples[exampleIndex])) {\n newExamples[exampleIndex] = Array(tupleLength).fill('')\n }\n newExamples[exampleIndex][elementIndex] = newValue\n onChange(newExamples)\n }\n\n // Determine field labels based on common patterns\n const getFieldLabels = () => {\n // Check if this looks like few-shot examples\n if (\n label.toLowerCase().includes('example') ||\n label.toLowerCase().includes('few_shot') ||\n fieldId.toLowerCase().includes('example')\n ) {\n if (tupleLength === 2) {\n return l.pairColumns\n }\n if (tupleLength === 3) {\n return l.tripleColumns\n }\n }\n // Default labels\n return Array.from({ length: tupleLength }, (_, i) => l.column(i + 1))\n }\n\n const fieldLabels = getFieldLabels()\n\n return (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <Label>{label}</Label>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={handleAddExample}\n className=\"h-7 text-sm\"\n >\n <Plus className=\"size-3 mr-1\" />\n {l.addRow}\n </Button>\n </div>\n\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n\n {examples.length === 0 ? (\n <div className=\"text-center py-8 text-sm text-muted-foreground rounded-md bg-muted\">\n {l.empty}\n </div>\n ) : (\n <div className=\"overflow-hidden rounded-md border border-border\">\n <table className=\"w-full\">\n <thead className=\"bg-muted border-b border-border\">\n <tr>\n <th className=\"px-3 py-2 text-left text-sm font-medium text-muted-foreground w-12\">\n #\n </th>\n {fieldLabels.map((fieldLabel, index) => (\n <th\n key={index}\n className=\"px-3 py-2 text-left text-sm font-medium text-muted-foreground\"\n >\n {fieldLabel}\n </th>\n ))}\n <th className=\"px-3 py-2 w-10\"></th>\n </tr>\n </thead>\n <tbody>\n {examples.map((example, exampleIndex) => {\n const tupleElements = Array.isArray(example) ? example : [example]\n\n return (\n <tr\n key={exampleIndex}\n className=\"border-b border-border last:border-b-0 hover:bg-muted/50 transition-colors\"\n >\n <td className=\"px-3 py-2 text-sm text-muted-foreground font-medium\">\n {exampleIndex + 1}\n </td>\n {fieldLabels.map((_, elementIndex) => {\n const value = tupleElements[elementIndex] || ''\n const isLongText = value.includes('\\n')\n\n return (\n <td key={elementIndex} className=\"px-3 py-2\">\n <Textarea\n value={value}\n onChange={(e) =>\n handleUpdateExample(exampleIndex, elementIndex, e.target.value)\n }\n placeholder={l.cellPlaceholder(\n (\n fieldLabels[elementIndex] ?? l.column(elementIndex + 1)\n ).toLowerCase()\n )}\n rows={isLongText ? 3 : 1}\n className=\"text-sm bg-background resize-none min-h-[32px] w-full\"\n />\n </td>\n )\n })}\n <td className=\"px-3 py-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => handleRemoveExample(exampleIndex)}\n aria-label={l.removeRow(exampleIndex + 1)}\n className=\"size-8 p-0 text-destructive hover:bg-destructive/10 pointer-coarse:size-11\"\n >\n <Trash2 className=\"size-4\" />\n </Button>\n </td>\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n )}\n </div>\n )\n}\n","/** Minimal JSON-schema property shape used by the config form. */\nexport interface SchemaProperty {\n type?: string\n title?: string\n description?: string\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n default?: any\n minimum?: number\n maximum?: number\n enum?: string[]\n format?: string\n properties?: Record<string, SchemaProperty>\n}\n\n/**\n * Humanize a PascalCase / acronym section key into a normal-case title:\n * \"QueryLLM\" -> \"Query LLM\", \"DocTagLLM\" -> \"Doc Tag LLM\", \"Agents\" -> \"Agents\".\n */\nexport function humanizeSection(name: string): string {\n return name\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n .replace(/_/g, ' ')\n .trim()\n}\n\n/** A readable label from an UPPER_SNAKE / snake_case key: SAVE_SOURCES -> \"Save sources\". */\nexport function prettifyKey(key: string): string {\n const spaced = key.replace(/_/g, ' ').trim().toLowerCase()\n return spaced.charAt(0).toUpperCase() + spaced.slice(1)\n}\n\n/** True for a non-null, non-array object, i.e. something we can render as fields. */\nexport function isPlainObject(val: unknown): val is Record<string, unknown> {\n return typeof val === 'object' && val !== null && !Array.isArray(val)\n}\n\n/**\n * Best-effort JSON-schema `type` inferred from a raw value, so a nested config object the schema\n * did not declare sub-properties for still renders as structured fields instead of raw JSON.\n */\nexport function inferType(val: unknown): SchemaProperty['type'] {\n if (typeof val === 'boolean') return 'boolean'\n if (typeof val === 'number') return 'number'\n if (Array.isArray(val)) return 'array'\n if (isPlainObject(val)) return 'object'\n return 'string'\n}\n\n/** True when `value` is a number and lies outside [minimum, maximum]. */\nexport function isOutOfBounds(value: unknown, minimum?: number, maximum?: number): boolean {\n if (typeof value !== 'number' || Number.isNaN(value)) return false\n if (minimum !== undefined && value < minimum) return true\n if (maximum !== undefined && value > maximum) return true\n return false\n}\n","/** One config field, rendered from its schema type. Memoized independently. */\n\nimport { memo, useState, type ReactNode } from 'react'\nimport {\n Button,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Switch,\n Textarea,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport {\n DEFAULT_TUPLE_ARRAY_FIELD_LABELS,\n TupleArrayField,\n type TupleArrayFieldLabels,\n} from './TupleArrayField'\nimport {\n inferType,\n isOutOfBounds,\n isPlainObject,\n prettifyKey,\n type SchemaProperty,\n} from './schema-utils'\n\nexport interface ConfigFieldLabels extends TupleArrayFieldLabels {\n editAsFields: string\n editAsJson: string\n jsonPlaceholder: string\n /** Select placeholder; receives the lower-cased field label. */\n selectPlaceholder: (label: string) => string\n /** Text input placeholder; receives the lower-cased field label. */\n enterPlaceholder: (label: string) => string\n /** Out-of-range hint; receives the range text (`1–5`, `≥ 1`, `≤ 5`). */\n allowedRange: (range: string) => string\n /** Out-of-range notification; `range` may be empty. */\n outOfRange: (label: string, range: string, value: unknown) => string\n}\n\nexport const DEFAULT_CONFIG_FIELD_LABELS: ConfigFieldLabels = {\n ...DEFAULT_TUPLE_ARRAY_FIELD_LABELS,\n editAsFields: 'Edit as fields',\n editAsJson: 'Edit as JSON',\n jsonPlaceholder: 'Enter JSON...',\n selectPlaceholder: (label) => `Select ${label}...`,\n enterPlaceholder: (label) => `Enter ${label}...`,\n allowedRange: (range) => `Allowed range: ${range}`,\n outOfRange: (label, range, value) =>\n `${label} must be ${range || 'within the allowed range'} (got ${String(value)}).`,\n}\n\nexport interface ConfigFieldTestIds {\n /** Test id of a boolean/number control; default `config-field-{section}-{field with dots as dashes}`. */\n field: (section: string, fieldName: string) => string\n /** Test id of the object \"Edit as JSON\" toggle; default `config-json-toggle-{fieldId}`. */\n jsonToggle: (fieldId: string) => string\n}\n\nexport interface ConfigFieldSlots {\n /** Custom control for the QueryLLM MODEL_NAME field (the app supplies its model picker). */\n renderModelSelect?: (props: { value: string; onChange: (value: string) => void }) => ReactNode\n}\n\nexport interface ConfigFieldProps extends ConfigFieldSlots {\n section: string\n fieldName: string\n fieldSchema: SchemaProperty\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChange: (section: string, field: string, value: any) => void\n labels?: Partial<ConfigFieldLabels>\n testIds?: Partial<ConfigFieldTestIds>\n}\n\nfunction ConfigFieldComponent({\n section,\n fieldName,\n fieldSchema,\n value,\n onChange,\n renderModelSelect,\n labels,\n testIds,\n}: ConfigFieldProps) {\n const l = { ...DEFAULT_CONFIG_FIELD_LABELS, ...labels }\n const fieldTestId = testIdOr(testIds?.field?.(section, fieldName), {\n testId: `config-field-${section}-${fieldName.replace(/\\./g, '-')}`,\n })\n const { notify } = useBlocksEnvironment()\n const fieldId = `${section}-${fieldName}`\n // Prefer a schema-provided title; else humanize the leaf key (SAVE_SOURCES →\n // \"Save sources\") rather than showing the raw UPPER_SNAKE name.\n const label = fieldSchema.title || prettifyKey(fieldName.split('.').pop() ?? fieldName)\n const description = fieldSchema.description || ''\n // Object fields render as structured sub-fields by default; this is the\n // power-user escape hatch to edit the raw JSON. `jsonDraft` buffers in-progress\n // (possibly invalid) edits so a half-typed object doesn't corrupt the value.\n const [rawJson, setRawJson] = useState(false)\n const [jsonDraft, setJsonDraft] = useState<string | null>(null)\n // SmartSearch and Retriever (with agent / smart_search profiles) sections\n // contain long prompts and verbose descriptions — give their text boxes\n // more vertical room so the content isn't clipped.\n const isLargePromptSection =\n section === 'SmartSearch' ||\n section === 'Retriever' ||\n section === 'SmartRetriever' ||\n section === 'AgentRetriever'\n const longTextRows = isLargePromptSection ? 12 : 4\n\n // Special handling for MODEL_NAME field - use ModelSelector for QueryLLM section\n if (fieldName === 'MODEL_NAME' && section === 'QueryLLM' && renderModelSelect) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n {renderModelSelect({\n value: value || '',\n onChange: (val) => onChange(section, fieldName, val),\n })}\n </div>\n )\n }\n\n // JSON-textarea fallback, shared by complex types and the `object`\n // case when it has no declared sub-properties. Extracted so the\n // `object` case can return it explicitly rather than falling through\n // to `default` (which `noFallthroughCasesInSwitch` rejects).\n const renderJsonFallback = () => (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n <Textarea\n id={fieldId}\n value={typeof value === 'object' ? JSON.stringify(value, null, 2) : value || ''}\n onChange={(e) => {\n try {\n const parsed = JSON.parse(e.target.value)\n onChange(section, fieldName, parsed)\n } catch {\n onChange(section, fieldName, e.target.value)\n }\n }}\n placeholder={l.jsonPlaceholder}\n rows={longTextRows}\n className=\"font-mono text-sm bg-background resize-y\"\n />\n </div>\n )\n\n // A nested object rendered as a GROUP of structured sub-fields (switches,\n // inputs, …) inferred from its values — instead of one raw JSON blob. Each\n // key recurses through this same component, so booleans become switches,\n // numbers become number inputs, nested objects nest again, etc. An\n // \"Edit as JSON\" toggle keeps the raw view one click away.\n const renderObjectEditor = () => {\n const entries = Object.entries(value as Record<string, unknown>)\n return (\n <div className=\"space-y-3 rounded-lg bg-muted p-4\">\n <div className=\"flex items-center justify-between gap-2\">\n <Label className=\"text-sm font-semibold\">{label}</Label>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 shrink-0 px-2 text-xs text-muted-foreground pointer-coarse:h-11\"\n onClick={() => {\n setJsonDraft(null)\n setRawJson((v) => !v)\n }}\n data-testid={testIdOr(testIds?.jsonToggle?.(fieldId), {\n testId: `config-json-toggle-${fieldId}`,\n })}\n >\n {rawJson ? l.editAsFields : l.editAsJson}\n </Button>\n </div>\n {description && (\n <p className=\"text-sm text-muted-foreground whitespace-normal break-words leading-relaxed\">\n {description}\n </p>\n )}\n {rawJson ? (\n <Textarea\n id={fieldId}\n value={jsonDraft ?? JSON.stringify(value, null, 2)}\n onChange={(e) => {\n setJsonDraft(e.target.value)\n try {\n onChange(section, fieldName, JSON.parse(e.target.value))\n } catch {\n // Keep the draft; don't propagate a half-typed invalid object.\n }\n }}\n rows={longTextRows}\n className=\"font-mono text-sm bg-background resize-y\"\n />\n ) : (\n <div className=\"space-y-3\">\n {entries.map(([subKey, subVal]) => (\n <ConfigField\n renderModelSelect={renderModelSelect}\n key={`${fieldName}.${subKey}`}\n section={section}\n fieldName={`${fieldName}.${subKey}`}\n fieldSchema={{ type: inferType(subVal), title: prettifyKey(subKey) }}\n value={subVal}\n onChange={onChange}\n />\n ))}\n </div>\n )}\n </div>\n )\n }\n\n // Object values (declared or inferred) → structured fields; everything else\n // (arrays, primitives, empty objects) → the raw JSON textarea.\n const renderComplex = () =>\n isPlainObject(value) && Object.keys(value).length > 0\n ? renderObjectEditor()\n : renderJsonFallback()\n\n // Handle different field types\n switch (fieldSchema.type) {\n case 'boolean':\n return (\n <div className=\"flex items-center justify-between space-y-2\">\n <div className=\"space-y-0.5\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n </div>\n <Switch\n id={fieldId}\n checked={value || false}\n onCheckedChange={(checked) => onChange(section, fieldName, checked)}\n data-testid={fieldTestId}\n />\n </div>\n )\n\n case 'integer':\n case 'number': {\n const outOfBounds = isOutOfBounds(value, fieldSchema.minimum, fieldSchema.maximum)\n const rangeHint =\n fieldSchema.minimum !== undefined && fieldSchema.maximum !== undefined\n ? `${fieldSchema.minimum}–${fieldSchema.maximum}`\n : fieldSchema.minimum !== undefined\n ? `≥ ${fieldSchema.minimum}`\n : fieldSchema.maximum !== undefined\n ? `≤ ${fieldSchema.maximum}`\n : ''\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n <Input\n id={fieldId}\n type=\"number\"\n value={value ?? fieldSchema.default ?? ''}\n onChange={(e) => {\n const val = e.target.value === '' ? null : Number(e.target.value)\n onChange(section, fieldName, val)\n }}\n onBlur={() => {\n if (isOutOfBounds(value, fieldSchema.minimum, fieldSchema.maximum)) {\n notify(l.outOfRange(label, rangeHint, value), 'error')\n }\n }}\n min={fieldSchema.minimum}\n max={fieldSchema.maximum}\n placeholder={fieldSchema.default?.toString()}\n className={cn(\n 'bg-background',\n outOfBounds && 'border-destructive focus-visible:ring-destructive'\n )}\n aria-invalid={outOfBounds}\n data-testid={fieldTestId}\n />\n {outOfBounds && rangeHint && (\n <p className=\"text-sm text-destructive\">{l.allowedRange(rangeHint)}</p>\n )}\n </div>\n )\n }\n\n case 'string':\n // Check if it's an enum (select dropdown)\n if (fieldSchema.enum && fieldSchema.enum.length > 0) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n <Select value={value || ''} onValueChange={(val) => onChange(section, fieldName, val)}>\n <SelectTrigger className=\"bg-background\">\n <SelectValue placeholder={l.selectPlaceholder(label.toLowerCase())} />\n </SelectTrigger>\n <SelectContent>\n {fieldSchema.enum.map((option) => (\n <SelectItem key={option} value={option}>\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )\n }\n\n // Check if it's a long text field (use textarea)\n if (fieldName.includes('INSTRUCTION') || fieldName.includes('PROMPT')) {\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n <Textarea\n id={fieldId}\n value={value || ''}\n onChange={(e) => onChange(section, fieldName, e.target.value)}\n placeholder={fieldSchema.default || l.enterPlaceholder(label.toLowerCase())}\n rows={longTextRows}\n className=\"resize-y bg-background\"\n />\n </div>\n )\n }\n\n // Default to regular input\n return (\n <div className=\"space-y-2\">\n <Label htmlFor={fieldId}>{label}</Label>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n <Input\n id={fieldId}\n value={value || ''}\n onChange={(e) => onChange(section, fieldName, e.target.value)}\n placeholder={fieldSchema.default || l.enterPlaceholder(label.toLowerCase())}\n className=\"bg-background\"\n />\n </div>\n )\n\n case 'array': {\n // Check if this is an array of tuples/arrays (for few-shot examples)\n const isArrayOfArrays = Array.isArray(value) && value.length > 0 && Array.isArray(value[0])\n const looksLikeExamples =\n fieldName.toLowerCase().includes('example') ||\n fieldName.toLowerCase().includes('few_shot') ||\n fieldName.toLowerCase().includes('samples')\n\n if (isArrayOfArrays || looksLikeExamples) {\n // Use specialized TupleArrayField for better UX\n return (\n <TupleArrayField\n fieldId={fieldId}\n label={label}\n description={description}\n value={value}\n onChange={(newValue) => onChange(section, fieldName, newValue)}\n labels={labels}\n />\n )\n }\n\n // Fall through to default JSON handling for other arrays\n break\n }\n\n case 'object':\n // Render nested properties as a grouped sub-form\n if (fieldSchema.properties) {\n return (\n <div\n className={cn(\n 'space-y-3 rounded-lg bg-muted p-4',\n isLargePromptSection && 'min-h-[12rem]'\n )}\n >\n <Label className=\"text-sm font-semibold\">{label}</Label>\n {description && (\n <p className=\"text-sm text-muted-foreground whitespace-normal break-words leading-relaxed\">\n {description}\n </p>\n )}\n <div className=\"space-y-3\">\n {Object.entries(fieldSchema.properties).map(([subFieldName, subFieldSchema]) => (\n <ConfigField\n renderModelSelect={renderModelSelect}\n key={`${fieldName}.${subFieldName}`}\n section={section}\n fieldName={`${fieldName}.${subFieldName}`}\n fieldSchema={subFieldSchema}\n value={value?.[subFieldName]}\n onChange={onChange}\n labels={labels}\n testIds={testIds}\n />\n ))}\n </div>\n </div>\n )\n }\n // No declared sub-properties — infer structured fields from the value\n // (falling back to JSON for arrays/primitives/empty objects).\n return renderComplex()\n\n default:\n // Unknown/complex types — infer structured fields when it's an object,\n // else a JSON textarea.\n return renderComplex()\n }\n}\n\n// Memo with custom comparison: only re-render if value actually changed.\nexport const ConfigField = memo(ConfigFieldComponent, (prev, next) => {\n return (\n prev.value === next.value &&\n prev.section === next.section &&\n prev.fieldName === next.fieldName &&\n prev.onChange === next.onChange &&\n prev.renderModelSelect === next.renderModelSelect &&\n prev.labels === next.labels &&\n prev.testIds === next.testIds\n )\n})\n","/**\n * ConfigForm: renders a backend JSON-schema config as collapsible sections of typed fields\n * (switches, numbers, selects, prompts, tuples, nested objects).\n */\n\nimport { memo, useState, useMemo } from 'react'\nimport { ChevronDown, ChevronRight } from 'lucide-react'\nimport {\n Button,\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n Switch,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport {\n ConfigField,\n type ConfigFieldLabels,\n type ConfigFieldSlots,\n type ConfigFieldTestIds,\n DEFAULT_CONFIG_FIELD_LABELS,\n} from './ConfigField'\nimport { humanizeSection, type SchemaProperty } from './schema-utils'\n\nexport interface ConfigFormLabels extends ConfigFieldLabels {\n collapseAll: string\n expandAll: string\n enabled: string\n disabled: string\n}\n\nexport const DEFAULT_CONFIG_FORM_LABELS: ConfigFormLabels = {\n ...DEFAULT_CONFIG_FIELD_LABELS,\n collapseAll: 'Collapse all',\n expandAll: 'Expand all',\n enabled: 'Enabled',\n disabled: 'Disabled',\n}\n\nexport interface ConfigFormTestIds extends ConfigFieldTestIds {\n form: string\n toggleAll: string\n /** Default `config-section-{name}`. */\n section: (name: string) => string\n /** Default `config-section-toggle-{name}`. */\n sectionToggle: (name: string) => string\n /** Default `config-section-enabled-toggle-{name}`. */\n sectionEnabled: (name: string) => string\n}\n\nexport interface ConfigFormProps extends ConfigFieldSlots {\n /** Section name -> JSON schema ({ properties }). */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n schema: Record<string, any>\n /** Current values: section -> field -> value. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n values: Record<string, any>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChange: (section: string, field: string, value: any) => void\n labels?: Partial<ConfigFormLabels>\n testIds?: Partial<ConfigFormTestIds>\n className?: string\n}\n\nfunction ConfigFormComponent({\n schema,\n values,\n onChange,\n renderModelSelect,\n labels,\n testIds,\n className,\n}: ConfigFormProps) {\n const l = { ...DEFAULT_CONFIG_FORM_LABELS, ...labels }\n // Track which sections are expanded/collapsed. Start fully collapsed.\n const [expandedSections, setExpandedSections] = useState<Set<string>>(new Set())\n\n const expandableSectionNames = useMemo(\n () =>\n Object.entries(schema)\n .filter(\n ([, sectionSchema]) =>\n sectionSchema?.properties && Object.keys(sectionSchema.properties).length > 0\n )\n .map(([name]) => name),\n [schema]\n )\n\n const allExpanded =\n expandableSectionNames.length > 0 &&\n expandableSectionNames.every((name) => expandedSections.has(name))\n\n const toggleAllSections = () => {\n setExpandedSections(allExpanded ? new Set() : new Set(expandableSectionNames))\n }\n\n const toggleSection = (sectionName: string) => {\n setExpandedSections((prev) => {\n const newSet = new Set(prev)\n if (newSet.has(sectionName)) {\n newSet.delete(sectionName)\n } else {\n newSet.add(sectionName)\n }\n return newSet\n })\n }\n\n const handleEnabledChange = (sectionName: string, enabled: boolean) => {\n // Update the ENABLED value\n onChange(sectionName, 'ENABLED', enabled)\n\n // Also update the expanded state\n setExpandedSections((prev) => {\n const newSet = new Set(prev)\n if (enabled) {\n newSet.add(sectionName)\n } else {\n newSet.delete(sectionName)\n }\n return newSet\n })\n }\n\n return (\n <div\n className={cn('space-y-3', className)}\n data-testid={testIdOr(testIds?.form, { testId: 'config-schema-form' })}\n >\n <div className=\"flex justify-end\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-7 px-2 text-xs text-muted-foreground pointer-coarse:h-11\"\n onClick={toggleAllSections}\n data-testid={testIdOr(testIds?.toggleAll, { testId: 'config-toggle-all-sections' })}\n >\n {allExpanded ? l.collapseAll : l.expandAll}\n </Button>\n </div>\n\n {Object.entries(schema).map(([sectionName, sectionSchema]) => {\n if (!sectionSchema.properties || Object.keys(sectionSchema.properties).length === 0) {\n return null\n }\n\n const sectionTitle = humanizeSection(sectionName)\n\n // Check if this section has an ENABLED field\n const hasEnabledField = 'ENABLED' in sectionSchema.properties\n const isEnabled = hasEnabledField ? (values[sectionName]?.ENABLED ?? true) : true\n const isExpanded = expandedSections.has(sectionName)\n\n // Get all fields except ENABLED for the collapsible content\n const otherFields = Object.entries(sectionSchema.properties).filter(\n ([fieldName]) => fieldName !== 'ENABLED'\n )\n\n return (\n <div\n key={sectionName}\n className={cn(\n 'rounded-lg bg-muted p-4 transition-colors',\n hasEnabledField && !isEnabled && 'opacity-60'\n )}\n data-testid={testIdOr(testIds?.section?.(sectionName), {\n testId: `config-section-${sectionName}`,\n })}\n >\n <Collapsible open={isExpanded} onOpenChange={() => toggleSection(sectionName)}>\n {/* Section header with optional enabled toggle */}\n <div className=\"flex items-center justify-between\">\n <CollapsibleTrigger\n className=\"flex flex-1 items-center gap-2 text-left transition-opacity hover:opacity-80 pointer-coarse:min-h-11\"\n data-testid={testIdOr(testIds?.sectionToggle?.(sectionName), {\n testId: `config-section-toggle-${sectionName}`,\n })}\n >\n {isExpanded ? (\n <ChevronDown className=\"size-4 shrink-0\" />\n ) : (\n <ChevronRight className=\"size-4 shrink-0\" />\n )}\n <h3 className=\"text-left text-sm font-semibold text-foreground\">\n {sectionTitle}\n </h3>\n </CollapsibleTrigger>\n\n {/* Only show enabled toggle if this section has an ENABLED field in the schema */}\n {hasEnabledField && (\n <div className=\"flex items-center gap-2 ml-4\">\n <span className=\"text-sm text-muted-foreground\">\n {isEnabled ? l.enabled : l.disabled}\n </span>\n <Switch\n checked={isEnabled}\n onCheckedChange={(checked) => handleEnabledChange(sectionName, checked)}\n className=\"data-[state=unchecked]:bg-border\"\n data-testid={testIdOr(testIds?.sectionEnabled?.(sectionName), {\n testId: `config-section-enabled-toggle-${sectionName}`,\n })}\n />\n </div>\n )}\n </div>\n\n {/* Collapsible content with other fields */}\n {otherFields.length > 0 && (\n <CollapsibleContent className=\"pt-4\">\n <div className=\"space-y-4\">\n {otherFields.map(([fieldName, fieldSchema]) => (\n <div\n key={`${sectionName}-${fieldName}`}\n className={\n hasEnabledField && !isEnabled ? 'pointer-events-none opacity-50' : ''\n }\n >\n <ConfigField\n section={sectionName}\n fieldName={fieldName}\n fieldSchema={fieldSchema as SchemaProperty}\n value={values[sectionName]?.[fieldName]}\n onChange={onChange}\n renderModelSelect={renderModelSelect}\n labels={labels}\n testIds={testIds}\n />\n </div>\n ))}\n </div>\n </CollapsibleContent>\n )}\n </Collapsible>\n </div>\n )\n })}\n </div>\n )\n}\n\nexport const ConfigForm = memo(ConfigFormComponent)\n","import {\n forwardRef,\n type ButtonHTMLAttributes,\n type ReactNode,\n type Ref,\n type UIEventHandler,\n} from 'react'\nimport {\n Activity,\n ChevronDown,\n ChevronUp,\n Hourglass,\n Loader2,\n MoreVertical,\n Pause,\n} from 'lucide-react'\nimport {\n cn,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\n/** Every fixed string of the agent bar parts. Pass a partial `labels` to a part to reword. */\nexport interface AgentBarLabels {\n steps: string\n hideSteps: string\n showSteps: string\n /** Step toggle text: \"Step 3\". */\n stepN: (count: number) => string\n checkingIn: string\n agentActions: string\n queuedMessage: string\n statusUpdate: string\n}\n\nexport const DEFAULT_AGENT_BAR_LABELS: AgentBarLabels = {\n steps: 'Steps',\n hideSteps: 'Hide steps',\n showSteps: 'Show steps',\n stepN: (count) => `Step ${count}`,\n checkingIn: 'Checking in…',\n agentActions: 'Agent actions',\n queuedMessage: 'Queued message',\n statusUpdate: 'Status update',\n}\n\n/* ── Bar ──────────────────────────────────────────────────────────────────────────────────── */\n\nexport interface AgentBarProps {\n /** The turn is still running (tonal surface); a settled bar is a hairline outline. */\n isStreaming: boolean\n testId?: string\n /** Mirrors run-control state onto `data-control-state`. */\n controlState?: string\n /** Number of rows the steps drawer would show; 0 hides the toggle. */\n stepCount: number\n isDrawerOpen: boolean\n onToggleDrawer: () => void\n /** The steps list. Rendered in a drawer that opens UPWARD above the bar row. */\n drawer?: ReactNode\n drawerRef?: Ref<HTMLDivElement>\n onDrawerScroll?: UIEventHandler<HTMLDivElement>\n /** Left: what the agent is doing now ({@link AgentBarStatus}), or \"Answered in Xs\". */\n status: ReactNode\n /** Run totals (tool calls) shown beside the controls. */\n stats?: ReactNode\n /** Right: Stop and the actions menu. */\n controls?: ReactNode\n /** Under the bar row: queued message, status-update answer. */\n below?: ReactNode\n className?: string\n labels?: Partial<AgentBarLabels>\n /** Test id of the steps toggle. */\n stepsToggleTestId?: string\n}\n\n/**\n * The agent turn bar: current step + timer, steps drawer, stop and actions. One chrome for the\n * live bar above the composer and the settled bar inside a message, so it is learned once.\n */\nexport function AgentBar({\n isStreaming,\n testId,\n controlState,\n stepCount,\n isDrawerOpen,\n onToggleDrawer,\n drawer,\n drawerRef,\n onDrawerScroll,\n status,\n stats,\n controls,\n below,\n className,\n labels,\n stepsToggleTestId,\n}: AgentBarProps) {\n const l = { ...DEFAULT_AGENT_BAR_LABELS, ...labels }\n return (\n <div\n data-slot=\"agent-bar\"\n className={cn(\n 'overflow-hidden rounded-lg',\n isStreaming ? 'bg-muted' : 'border border-border bg-transparent',\n className\n )}\n data-testid={testId}\n data-control-state={controlState}\n >\n {isDrawerOpen && stepCount > 0 && (\n <div className=\"border-b border-border bg-background/60\">\n <p className=\"px-1.5 pt-2 text-xs font-semibold uppercase tracking-wider text-muted-foreground\">\n {l.steps}\n </p>\n <div ref={drawerRef} onScroll={onDrawerScroll} className=\"max-h-72 overflow-y-auto\">\n {drawer}\n </div>\n </div>\n )}\n\n <div className=\"flex items-center gap-2 px-1.5 py-2\">\n {stepCount > 0 && (\n <button\n type=\"button\"\n onClick={onToggleDrawer}\n className=\"flex shrink-0 items-center gap-1 rounded-md px-1.5 py-0.5 text-sm text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11\"\n aria-expanded={isDrawerOpen}\n aria-label={isDrawerOpen ? l.hideSteps : l.showSteps}\n data-testid={testIdOr(stepsToggleTestId, { testId: 'steps-toggle' })}\n >\n {isDrawerOpen ? <ChevronDown className=\"h-4 w-4\" /> : <ChevronUp className=\"h-4 w-4\" />}\n <span className=\"tabular-nums\">{l.stepN(stepCount)}</span>\n </button>\n )}\n {status}\n <div className=\"ml-auto flex items-center gap-2.5\">\n {stats}\n <div className=\"flex items-center gap-1\">{controls}</div>\n </div>\n </div>\n\n {below}\n </div>\n )\n}\n\n/* ── Status line variants ─────────────────────────────────────────────────────────────────── */\n\nexport type AgentBarState = 'pausing' | 'paused' | 'resuming'\n\nexport interface AgentBarStatusProps {\n /** Run-control state other than `running`. */\n state?: AgentBarState\n stateLabel?: string\n /** A status probe is awaiting the agent's answer. */\n isProbing?: boolean\n /** Waiting on delegated sub-agents: names who. */\n waitingLabel?: string\n /** Current step: icon + description. */\n stepLabel?: string\n stepIcon?: ReactNode\n /** Live elapsed-seconds ticker. */\n timer?: ReactNode\n labels?: Partial<AgentBarLabels>\n /** Per-variant test ids; defaults are the current ids. */\n testIds?: Partial<{ control: string; probe: string; waiting: string; step: string }>\n}\n\n/** The left-hand status line. Exactly one of its variants renders, in priority order. */\nexport function AgentBarStatus({\n state,\n stateLabel,\n isProbing,\n waitingLabel,\n stepLabel,\n stepIcon,\n timer,\n labels,\n testIds,\n}: AgentBarStatusProps) {\n const l = { ...DEFAULT_AGENT_BAR_LABELS, ...labels }\n if (state) {\n return (\n <span\n className={cn(\n 'flex items-center gap-1 rounded-md px-2 py-0.5 text-sm font-medium',\n state === 'paused' ? 'bg-ai-soft text-ai-ink' : 'text-muted-foreground'\n )}\n data-testid={testIdOr(testIds?.control, { testId: 'agent-control-status' })}\n >\n {state === 'paused' ? (\n <Pause className=\"h-3.5 w-3.5\" />\n ) : (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin text-yellow-text\" />\n )}\n {stateLabel}\n </span>\n )\n }\n if (isProbing) {\n return (\n <span\n className=\"flex items-center gap-1 text-sm font-medium text-muted-foreground\"\n data-testid={testIdOr(testIds?.probe, { testId: 'agent-probe-pending' })}\n >\n <Activity className=\"h-3.5 w-3.5 animate-pulse\" />\n {l.checkingIn}\n </span>\n )\n }\n if (waitingLabel) {\n return (\n <span\n className=\"flex min-w-0 items-center gap-1.5 text-sm text-muted-foreground\"\n data-testid={testIdOr(testIds?.waiting, { testId: 'agent-waiting-on-subagents' })}\n >\n <Hourglass className=\"h-4 w-4 shrink-0 text-yellow-text\" aria-hidden=\"true\" />\n <span className=\"truncate\">{waitingLabel}</span>\n {timer && <span className=\"shrink-0 tabular-nums text-muted-foreground\">{timer}</span>}\n </span>\n )\n }\n return (\n <span className=\"flex min-w-0 items-center gap-1.5 text-sm text-muted-foreground\">\n {stepIcon}\n <span\n className=\"truncate\"\n data-testid={testIdOr(testIds?.step, { testId: 'agent-current-step-description' })}\n >\n {stepLabel}\n </span>\n {timer && <span className=\"shrink-0 tabular-nums text-muted-foreground\">{timer}</span>}\n </span>\n )\n}\n\n/* ── Controls ─────────────────────────────────────────────────────────────────────────────── */\n\n/** Small icon button in the bar's control cluster (44px on touch). */\nexport const AgentBarIconButton = forwardRef<\n HTMLButtonElement,\n ButtonHTMLAttributes<HTMLButtonElement>\n>(function AgentBarIconButton({ className, type = 'button', ...rest }, ref) {\n return (\n <button\n ref={ref}\n type={type}\n data-slot=\"agent-bar-button\"\n className={cn(\n 'rounded-md p-1 text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:p-3',\n className\n )}\n {...rest}\n />\n )\n})\n\nexport interface AgentBarMenuItem {\n id: string\n label: string\n icon?: ReactNode\n onSelect: () => void\n disabled?: boolean\n testId?: string\n}\n\n/** The ⋮ menu. Non-modal: the composer stays usable while it is open. */\nexport function AgentBarMenu({\n items,\n labels,\n testId = 'agent-control-menu',\n}: {\n items: ReadonlyArray<AgentBarMenuItem>\n labels?: Partial<AgentBarLabels>\n testId?: string\n}) {\n const l = { ...DEFAULT_AGENT_BAR_LABELS, ...labels }\n return (\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <AgentBarIconButton title={l.agentActions} aria-label={l.agentActions} data-testid={testId}>\n <MoreVertical className=\"h-4 w-4\" />\n </AgentBarIconButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {items.map((item) => (\n <DropdownMenuItem\n key={item.id}\n onClick={item.onSelect}\n disabled={item.disabled}\n data-testid={item.testId}\n >\n {item.icon}\n {item.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n\n/* ── Notes under the bar ──────────────────────────────────────────────────────────────────── */\n\n/** Wrapper for the notes under the bar row. */\nexport function AgentBarNotes({\n children,\n className,\n}: {\n children: ReactNode\n className?: string\n}) {\n return <div className={cn('mx-3 mb-2 space-y-1.5', className)}>{children}</div>\n}\n\nexport function AgentBarQueuedNote({\n text,\n isAcknowledged,\n labels,\n testId = 'agent-queued-message',\n}: {\n text: string\n isAcknowledged: boolean\n labels?: Partial<AgentBarLabels>\n testId?: string\n}) {\n const l = { ...DEFAULT_AGENT_BAR_LABELS, ...labels }\n return (\n <div\n className=\"flex min-w-0 items-start gap-2 rounded-md bg-background px-2.5 py-2\"\n data-testid={testId}\n >\n <Hourglass className=\"mt-0.5 h-3.5 w-3.5 shrink-0 text-yellow-text\" aria-hidden=\"true\" />\n <div className=\"min-w-0 flex-1\">\n <p\n className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\"\n data-queue-acknowledged={isAcknowledged}\n >\n {l.queuedMessage}\n </p>\n <p className=\"line-clamp-2 whitespace-pre-line text-sm text-foreground\" title={text}>\n {text}\n </p>\n </div>\n </div>\n )\n}\n\nexport function AgentBarProbeAnswer({\n answer,\n labels,\n testId = 'agent-probe-answer',\n}: {\n answer: string\n labels?: Partial<AgentBarLabels>\n testId?: string\n}) {\n const l = { ...DEFAULT_AGENT_BAR_LABELS, ...labels }\n return (\n <div className=\"rounded-md bg-background px-2.5 py-1.5\" data-testid={testId}>\n <p className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {l.statusUpdate}\n </p>\n <p className=\"mt-0.5 whitespace-pre-line text-sm text-foreground\">{answer}</p>\n </div>\n )\n}\n","import { useState } from 'react'\nimport type { ReactNode } from 'react'\nimport {\n Check,\n CheckCircle2,\n CheckSquare,\n ChevronDown,\n ChevronRight,\n Loader2,\n Square,\n TriangleAlert,\n} from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { prefixedTestId, testIdOr } from '../../chat/test-id'\n\n// ── Trace ───────────────────────────────────────────────────────────────────────────────────\n\nexport interface StepTraceProps {\n /** The rows (StepRow / SubAgentLane). */\n children: ReactNode\n /** Totals footer (see StepTraceSummary). */\n summary?: ReactNode\n className?: string\n /** Root id (default `agent-steps`). */\n testId?: string\n /** List id (default `agent-steps-list`). */\n listTestId?: string\n}\n\n/** The agent's step timeline: a numbered list with a rail, plus an optional totals footer. */\nexport function StepTrace({ children, summary, className, testId, listTestId }: StepTraceProps) {\n return (\n <div\n className={cn('border-b border-border', className)}\n data-slot=\"step-trace\"\n data-testid={testIdOr(testId, { testId: 'agent-steps' })}\n >\n <ul\n className=\"space-y-0 px-1.5 py-2.5\"\n data-testid={testIdOr(listTestId, { testId: 'agent-steps-list' })}\n >\n {children}\n </ul>\n {summary}\n </div>\n )\n}\n\n/** Every fixed string of the agent step parts. Pass a partial `labels` to a part to reword. */\nexport interface AgentStepsLabels {\n nearBudget: string\n goalMet: string\n reviewingGoal: string\n subAgent: string\n running: string\n failed: string\n done: string\n}\n\nexport const DEFAULT_AGENT_STEPS_LABELS: AgentStepsLabels = {\n nearBudget: 'Near shared AI usage budget',\n goalMet: 'Goal met',\n reviewingGoal: 'Reviewing goal',\n subAgent: 'sub-agent',\n running: 'Running',\n failed: 'Failed',\n done: 'Done',\n}\n\nexport interface StepTraceSummaryProps {\n /** \"3 steps · 2 tool calls · 12.0s ...\" */\n left: string\n /** Shows the \"near shared AI usage budget\" warning. */\n isNearBudget?: boolean\n /** \"Total: £0.12\" */\n total: string\n labels?: Partial<AgentStepsLabels>\n testId?: string\n}\n\nexport function StepTraceSummary({\n left,\n isNearBudget,\n total,\n labels,\n testId,\n}: StepTraceSummaryProps) {\n const l = { ...DEFAULT_AGENT_STEPS_LABELS, ...labels }\n return (\n <div\n className=\"flex items-center justify-between border-t border-border px-3 py-2 text-sm text-muted-foreground\"\n data-testid={testIdOr(testId, { testId: 'agent-steps-usage-summary' })}\n >\n <span>{left}</span>\n <div className=\"flex items-center gap-2\">\n {isNearBudget && <span className=\"font-medium text-yellow-text\">{l.nearBudget}</span>}\n <span>{total}</span>\n </div>\n </div>\n )\n}\n\n// ── Row ─────────────────────────────────────────────────────────────────────────────────────\n\n/** Tone classes of a step's icon node. */\nexport interface StepAccentClasses {\n bg: string\n fg: string\n ring: string\n}\n\nconst numberGutter =\n 'w-4 shrink-0 pt-[5px] text-right text-sm font-medium leading-none tabular-nums text-muted-foreground'\n\nexport interface StepRowProps {\n /** Step index: drives `agent-step-{index}`. */\n index: number\n /** Display number (\"3\" or \"3.2\"). */\n number: string\n depth: number\n /** The last row has no rail below it. */\n isLast: boolean\n /** The step running right now: pending treatment + ping. */\n isActive: boolean\n accent: StepAccentClasses\n icon: ReactNode\n /** Row semantic identity (`narration`, `goal`, `tool`...), mirrored as data-step. */\n kind: string\n /** The step's title. */\n title: ReactNode\n /** Test id of the title text (set on the active row). */\n titleTestId?: string\n /** Prefix of the row id: `<prefix>-<index>` (default `agent-step`). */\n testIdPrefix?: string\n /** Tier glyph beside the title (host wraps its tooltip). */\n badge?: ReactNode\n /** Right-aligned meta: model, tokens, £ cost, duration. */\n meta?: ReactNode\n /** Summary, detail lines, outcome, criteria, folded sub-steps. */\n children?: ReactNode\n}\n\n/** One step: number gutter, rail, icon node, title row, then body parts. */\nexport function StepRow({\n index,\n number,\n depth,\n isLast,\n isActive,\n accent,\n icon,\n kind,\n title,\n titleTestId,\n testIdPrefix,\n badge,\n meta,\n children,\n}: StepRowProps) {\n return (\n <li\n className=\"relative flex gap-2 pb-2.5 last:pb-0\"\n data-slot=\"step-row\"\n data-testid={prefixedTestId(testIdPrefix, index, { testId: `agent-step-${index}` })}\n data-depth={depth}\n data-step={kind}\n >\n <span className={numberGutter}>{number}</span>\n\n {/* Rail: connects this node to the next. Sits on the node's centre (number column 16px +\n gap 8px + half the 22px node). */}\n {!isLast && (\n <span aria-hidden=\"true\" className=\"absolute bottom-0 left-[33px] top-6 w-px bg-border\" />\n )}\n\n {/* Node: the running step uses the pending (orange) treatment; settled steps keep their\n per-type accent. */}\n <span\n className={cn(\n 'relative z-10 mt-0.5 flex size-[22px] shrink-0 items-center justify-center rounded-full ring-1',\n isActive\n ? 'bg-yellow-bg text-yellow-text ring-yellow-border'\n : cn(accent.bg, accent.fg, accent.ring)\n )}\n >\n {isActive && (\n <span\n aria-hidden=\"true\"\n className=\"absolute inset-0 animate-ping rounded-full bg-yellow-text opacity-30\"\n />\n )}\n <span className=\"relative flex\">{icon}</span>\n </span>\n\n <div className=\"min-w-0 flex-1 pt-[3px]\">\n <div className=\"flex items-baseline gap-2\">\n <span\n className={cn(\n 'truncate text-sm font-medium leading-tight',\n isActive ? 'text-yellow-text' : 'text-foreground'\n )}\n >\n <span data-testid={titleTestId}>{title}</span>\n </span>\n {badge}\n <span className=\"ml-auto flex shrink-0 items-center gap-1.5 text-sm tabular-nums text-muted-foreground\">\n {meta}\n </span>\n </div>\n {children}\n </div>\n </li>\n )\n}\n\n/** One-line summary under a step title (clamped unless multi-line). */\nexport function StepSummary({\n index,\n multiLine,\n children,\n testIdPrefix,\n}: {\n index: number\n multiLine?: boolean\n children: ReactNode\n /** Default `agent-step-summary` (`<prefix>-<index>`). */\n testIdPrefix?: string\n}) {\n return (\n <p\n className={cn(\n 'mt-0.5 text-sm leading-snug text-muted-foreground',\n multiLine ? 'whitespace-pre-wrap' : 'line-clamp-2'\n )}\n data-testid={prefixedTestId(testIdPrefix, index, { testId: `agent-step-summary-${index}` })}\n >\n {children}\n </p>\n )\n}\n\n/** Narration (the model writing prose to the user); the host renders the markdown. */\nexport function StepNarration({\n index,\n children,\n testIdPrefix,\n}: {\n index: number\n children: ReactNode\n /** Default `agent-step-summary` (`<prefix>-<index>`). */\n testIdPrefix?: string\n}) {\n return (\n <div\n className=\"markdown-content mt-0.5 text-sm leading-snug text-muted-foreground\"\n data-testid={prefixedTestId(testIdPrefix, index, { testId: `agent-step-summary-${index}` })}\n >\n {children}\n </div>\n )\n}\n\n/** What the narrative displaced: the tool's target or a plan's checklist line. */\nexport function StepDetail({\n index,\n children,\n testIdPrefix,\n}: {\n index: number\n children: ReactNode\n /** Default `agent-step-detail` (`<prefix>-<index>`). */\n testIdPrefix?: string\n}) {\n return (\n <p\n className=\"mt-0.5 whitespace-pre-wrap text-sm leading-snug text-muted-foreground\"\n data-testid={prefixedTestId(testIdPrefix, index, { testId: `agent-step-detail-${index}` })}\n >\n {children}\n </p>\n )\n}\n\n/** Outcome chip: neutral tick, or a warning when the step failed. */\nexport function StepOutcome({\n index,\n failed,\n children,\n testIdPrefix,\n}: {\n index: number\n failed: boolean\n children: ReactNode\n /** Default `agent-step-outcome` (`<prefix>-<index>`). */\n testIdPrefix?: string\n}) {\n return (\n <span\n className={cn(\n 'mt-1 inline-flex items-center gap-1 rounded-full px-1.5 py-px text-sm leading-5',\n failed ? 'bg-yellow-bg text-yellow-text' : 'bg-muted text-muted-foreground'\n )}\n data-testid={prefixedTestId(testIdPrefix, index, { testId: `agent-step-outcome-${index}` })}\n data-outcome-failed={failed ? 'true' : 'false'}\n >\n {failed ? (\n <TriangleAlert size={12} className=\"text-yellow-text\" />\n ) : (\n <Check size={12} className=\"text-green-text\" />\n )}\n {children}\n </span>\n )\n}\n\n/** Raw tool params (developer affordance). */\nexport function StepParams({ children }: { children: ReactNode }) {\n return <p className=\"mt-0.5 truncate text-sm text-muted-foreground\">{children}</p>\n}\n\n// ── Goal criteria ───────────────────────────────────────────────────────────────────────────\n\nexport interface GoalCriterionView {\n key: string\n text: string\n note?: string\n met: boolean\n}\n\n/** The goal gate's criteria as ticked / unticked checkboxes plus the overall verdict. */\nexport function GoalCriteria({\n criteria,\n labels,\n testIds,\n}: {\n criteria: GoalCriterionView[]\n labels?: Partial<AgentStepsLabels>\n /** Part ids; defaults are the current ids. */\n testIds?: Partial<Record<'list' | 'verdict', string>>\n}) {\n const l = { ...DEFAULT_AGENT_STEPS_LABELS, ...labels }\n const ticked = criteria.filter((c) => c.met).length\n const done = criteria.length > 0 && ticked === criteria.length\n return (\n <div className=\"mt-1.5\">\n <ul className=\"space-y-1\" data-testid={testIdOr(testIds?.list, { testId: 'goal-criteria' })}>\n {criteria.map((c) => (\n <li\n key={c.key}\n className=\"flex items-start gap-1.5\"\n data-goal-criterion-met={c.met ? 'true' : 'false'}\n >\n {c.met ? (\n <CheckSquare size={13} className=\"mt-px shrink-0 text-green-text\" />\n ) : (\n <Square size={13} className=\"mt-px shrink-0 text-muted-foreground\" />\n )}\n <span className={cn('text-sm', c.met ? 'text-foreground' : 'text-muted-foreground')}>\n {c.text}\n {c.note && !c.met && <span className=\"text-muted-foreground\"> — {c.note}</span>}\n </span>\n </li>\n ))}\n </ul>\n {/* Overall assessment: green once every box is ticked, pending while the gate reviews. */}\n <span\n className={cn(\n 'mt-1.5 inline-flex items-center gap-1 rounded-md px-1.5 py-0.5 text-sm font-semibold',\n done ? 'bg-primary/12 text-green-text' : 'bg-yellow-bg text-yellow-text'\n )}\n data-testid={testIdOr(testIds?.verdict, { testId: 'watch-run-goal' })}\n data-goal-done={done ? 'true' : 'false'}\n >\n {done ? <CheckCircle2 size={12} /> : <Loader2 size={12} className=\"animate-spin\" />}\n {done ? l.goalMet : l.reviewingGoal} · {ticked}/{criteria.length}\n </span>\n </div>\n )\n}\n\n// ── Folds ───────────────────────────────────────────────────────────────────────────────────\n\nexport interface SubStepGroupProps {\n /** Parent step index. */\n parentIndex: number\n /** \"3 searches, 2 reads\". */\n summary: string\n /** Colour class applied to the summary while open (the parent's accent). */\n openClassName?: string\n /** Rendered only while open. */\n renderSteps: () => ReactNode\n /** Prefixes (`<prefix>-<parent index>`); defaults `sub-steps-toggle` / `sub-steps`. */\n testIds?: Partial<Record<'toggle' | 'list', string>>\n}\n\n/** Inner steps of a sub-agent, folded under their parent (collapsed, self-describing). */\nexport function SubStepGroup({\n parentIndex,\n summary,\n openClassName,\n renderSteps,\n testIds,\n}: SubStepGroupProps) {\n const [open, setOpen] = useState(false)\n return (\n <>\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n aria-expanded={open}\n className=\"mt-1 flex items-center gap-1 rounded px-1 py-0.5 text-sm text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring pointer-coarse:min-h-11\"\n data-testid={prefixedTestId(testIds?.toggle, parentIndex, {\n testId: `sub-steps-toggle-${parentIndex}`,\n })}\n >\n {open ? <ChevronDown size={12} /> : <ChevronRight size={12} />}\n <span className={cn('tabular-nums', open && openClassName)}>{summary}</span>\n </button>\n {open && (\n <ul\n className=\"mt-1\"\n data-testid={prefixedTestId(testIds?.list, parentIndex, {\n testId: `sub-steps-${parentIndex}`,\n })}\n >\n {renderSteps()}\n </ul>\n )}\n </>\n )\n}\n\nexport type SubAgentStatus = 'running' | 'failed' | 'done'\n\nexport interface SubAgentLaneProps {\n handle: string\n /** Display number of the lane row. */\n number: number\n /** The lane's job name, never the raw handle. */\n job: string\n /** The child's task (tooltip). */\n task?: string\n status: SubAgentStatus\n /** Count of the child's own steps. */\n innerCount: number\n /** What the child is doing right now (shown while collapsed and running). */\n liveFocus?: string\n /** Rendered only while open. */\n renderSteps: () => ReactNode\n labels?: Partial<AgentStepsLabels>\n /**\n * Prefixes (`<prefix>-<handle>`); defaults `subagent-lane`, `subagent-lane-toggle`,\n * `subagent-lane-status`, `subagent-lane-live`.\n */\n testIds?: Partial<Record<'lane' | 'toggle' | 'status' | 'live', string>>\n}\n\nconst LANE_TONE: Record<SubAgentStatus, string> = {\n running: 'border-yellow-border/60 bg-yellow-bg/40',\n failed: 'border-red-border/50 bg-red-bg/40',\n done: 'border-border bg-muted',\n}\nconst LANE_PILL: Record<SubAgentStatus, string> = {\n running: 'bg-yellow-bg text-yellow-text',\n failed: 'bg-red-bg text-red-text',\n done: 'bg-primary/12 text-green-text',\n}\n\n/** A concurrently-running sub-agent as its own live lane; collapsed by default, expands on demand. */\nexport function SubAgentLane({\n handle,\n number,\n job,\n task,\n status,\n innerCount,\n liveFocus,\n renderSteps,\n labels,\n testIds,\n}: SubAgentLaneProps) {\n const l = { ...DEFAULT_AGENT_STEPS_LABELS, ...labels }\n const [open, setOpen] = useState(false)\n const running = status === 'running'\n return (\n <li\n className=\"relative flex gap-2 pb-2.5 last:pb-0\"\n data-slot=\"subagent-lane\"\n data-testid={prefixedTestId(testIds?.lane, handle, { testId: `subagent-lane-${handle}` })}\n >\n <span className={numberGutter}>{number}</span>\n <div className=\"min-w-0 flex-1\">\n <div className={cn('rounded-md border', LANE_TONE[status])}>\n <button\n type=\"button\"\n onClick={() => setOpen((v) => !v)}\n className=\"flex w-full items-center gap-2 px-2.5 py-1.5 text-left pointer-coarse:min-h-11\"\n aria-expanded={open}\n data-testid={prefixedTestId(testIds?.toggle, handle, {\n testId: `subagent-lane-toggle-${handle}`,\n })}\n >\n {open ? (\n <ChevronDown size={13} className=\"shrink-0 text-muted-foreground\" />\n ) : (\n <ChevronRight size={13} className=\"shrink-0 text-muted-foreground\" />\n )}\n <span className=\"shrink-0 rounded bg-muted px-1 py-0.5 text-xs font-semibold uppercase leading-none tracking-wide text-muted-foreground\">\n {l.subAgent}\n </span>\n <span\n className=\"min-w-0 flex-1 truncate text-sm font-medium text-foreground\"\n title={task || job}\n >\n {job}\n </span>\n <span\n className={cn(\n 'flex shrink-0 items-center gap-1 rounded-full px-1.5 py-px text-sm font-medium',\n LANE_PILL[status]\n )}\n data-testid={prefixedTestId(testIds?.status, handle, {\n testId: `subagent-lane-status-${handle}`,\n })}\n data-status={status}\n >\n {running ? (\n <Loader2 size={12} className=\"animate-spin\" />\n ) : status === 'failed' ? (\n <TriangleAlert size={12} />\n ) : (\n <CheckCircle2 size={12} />\n )}\n {l[status]}\n {innerCount > 0 && <span className=\"tabular-nums opacity-70\"> · {innerCount}</span>}\n </span>\n </button>\n {/* Collapsed but running: a live line so the folded lane does not read as stalled. */}\n {!open && running && liveFocus && (\n <p\n className=\"flex items-center gap-1.5 border-t border-yellow-border/30 px-2.5 py-1.5 text-sm text-yellow-text\"\n data-testid={prefixedTestId(testIds?.live, handle, {\n testId: `subagent-lane-live-${handle}`,\n })}\n >\n <Loader2 size={12} className=\"shrink-0 animate-spin\" />\n <span className=\"truncate\">{liveFocus}</span>\n </p>\n )}\n {open && innerCount > 0 && (\n <ul className=\"space-y-0 border-t border-border px-2.5 py-2\">{renderSteps()}</ul>\n )}\n </div>\n </div>\n </li>\n )\n}\n","import { useState, type ReactNode } from 'react'\nimport {\n CheckCircle2,\n ChevronDown,\n ChevronRight,\n SquareArrowOutUpRight,\n TriangleAlert,\n} from 'lucide-react'\nimport { Tooltip, TooltipContent, TooltipTrigger, cn } from '@arbidocs/react/ui'\nimport type { SubAgentStatus } from './AgentSteps'\n\n/** One sub-agent line of the roster. */\nexport interface SubagentRosterLane {\n handle: string\n status: SubAgentStatus\n /** The delegated task (or its job name): the line's text and tooltip. */\n task: string\n /** Count of the child's own steps; a child with none has nothing to expand. */\n stepCount: number\n /** Present when the child has its own thread to step into. */\n canOpenThread?: boolean\n}\n\n/** Every fixed string of the roster. */\nexport interface SubagentRosterLabels {\n badge: string\n hideSteps: string\n showSteps: string\n openThread: string\n openThreadAria: string\n /** Visible text on the open-thread control. */\n openThreadShort: string\n}\n\nexport const DEFAULT_SUBAGENT_ROSTER_LABELS: SubagentRosterLabels = {\n badge: 'sub-agent',\n hideSteps: \"Hide this sub-agent's steps\",\n showSteps: \"Show this sub-agent's steps\",\n openThread: 'Open thread',\n openThreadAria: \"Open this sub-agent's own thread\",\n openThreadShort: 'Thread',\n}\n\nexport interface SubagentRosterProps {\n lanes: SubagentRosterLane[]\n /** The child's own steps, rendered only while its line is expanded. */\n renderSteps: (handle: string) => ReactNode\n onOpenThread: (handle: string) => void\n className?: string\n labels?: Partial<SubagentRosterLabels>\n}\n\nconst LINE = 'flex min-w-0 flex-1 items-center gap-1.5 pl-3 text-sm leading-snug'\n\n/**\n * Live roster of a turn's sub-agents, indented under the agent's status line: one compact line\n * per child (static dot while running, check / alert once settled), each expandable to its own\n * steps. Ids: `running-subagents`, `running-subagent-<h>`, `-toggle-<h>`, `-open-thread-<h>`,\n * `-steps-<h>`.\n */\nexport function SubagentRoster({\n lanes,\n renderSteps,\n onOpenThread,\n className,\n labels,\n}: SubagentRosterProps) {\n const l = { ...DEFAULT_SUBAGENT_ROSTER_LABELS, ...labels }\n const [openHandles, setOpenHandles] = useState<Record<string, boolean>>({})\n const toggle = (handle: string) =>\n setOpenHandles((prev) => ({ ...prev, [handle]: !prev[handle] }))\n\n return (\n <div\n className={cn('space-y-0.5 px-3 pb-1.5', className)}\n data-slot=\"subagent-roster\"\n data-testid=\"running-subagents\"\n role=\"list\"\n >\n {lanes.map((lane) => {\n const running = lane.status === 'running'\n const expandable = lane.stepCount > 0\n const open = expandable && !!openHandles[lane.handle]\n\n const line = (\n <>\n <span aria-hidden className=\"select-none font-mono text-muted-foreground/30\">\n └\n </span>\n {/* Fixed-width slot so a non-expandable line aligns with expandable siblings. */}\n <span className=\"flex w-3.5 shrink-0 justify-center\">\n {expandable &&\n (open ? (\n <ChevronDown size={12} className=\"text-muted-foreground/60\" />\n ) : (\n <ChevronRight size={12} className=\"text-muted-foreground/60\" />\n ))}\n </span>\n {/* Static dot while running: the agent's own spinner carries the motion. */}\n {running ? (\n <span aria-hidden className=\"size-1.5 shrink-0 rounded-full bg-yellow-text\" />\n ) : lane.status === 'failed' ? (\n <TriangleAlert size={11} className=\"shrink-0 text-red-text\" />\n ) : (\n <CheckCircle2 size={11} className=\"shrink-0 text-green-text\" />\n )}\n <span className=\"shrink-0 rounded bg-muted px-1 py-0.5 text-sm font-semibold uppercase leading-none tracking-wide text-muted-foreground/80\">\n {l.badge}\n </span>\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n className={cn(\n 'min-w-0 flex-1 truncate text-left',\n running ? 'text-foreground/90' : 'text-muted-foreground'\n )}\n >\n {lane.task}\n </span>\n </TooltipTrigger>\n <TooltipContent side=\"top\">{lane.task}</TooltipContent>\n </Tooltip>\n {expandable && (\n <span className=\"shrink-0 tabular-nums text-muted-foreground/40\">\n {lane.stepCount}\n </span>\n )}\n </>\n )\n\n return (\n <div\n key={lane.handle}\n role=\"listitem\"\n data-testid={`running-subagent-${lane.handle}`}\n data-status={lane.status}\n data-expanded={open ? 'true' : 'false'}\n >\n <div className=\"flex w-full items-center gap-1\">\n {expandable ? (\n <button\n type=\"button\"\n onClick={() => toggle(lane.handle)}\n aria-expanded={open}\n aria-label={open ? l.hideSteps : l.showSteps}\n className={cn(\n LINE,\n 'rounded transition-colors hover:bg-muted/60 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring pointer-coarse:min-h-11'\n )}\n data-testid={`running-subagent-toggle-${lane.handle}`}\n >\n {line}\n </button>\n ) : (\n <div className={LINE}>{line}</div>\n )}\n {lane.canOpenThread && (\n <button\n type=\"button\"\n onClick={() => onOpenThread(lane.handle)}\n aria-label={l.openThreadAria}\n title={l.openThread}\n className=\"ml-2 flex shrink-0 items-center gap-1 rounded px-1.5 py-1 text-xs text-muted-foreground/70 transition-colors hover:bg-muted/60 hover:text-foreground focus-visible:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring pointer-coarse:min-h-11 pointer-coarse:min-w-11 pointer-coarse:justify-center\"\n data-testid={`running-subagent-open-thread-${lane.handle}`}\n >\n {/* Not a chevron: beside the steps toggle a chevron read as \"show more\", and clicks\n meant to expand the row opened the sub-agent's thread instead. */}\n <SquareArrowOutUpRight size={12} aria-hidden />\n <span>{l.openThreadShort}</span>\n </button>\n )}\n </div>\n {open && (\n <div\n className=\"ml-3 border-l border-border/50 pl-2\"\n data-testid={`running-subagent-steps-${lane.handle}`}\n >\n {renderSteps(lane.handle)}\n </div>\n )}\n </div>\n )\n })}\n </div>\n )\n}\n","import type { HTMLAttributes, ReactNode } from 'react'\nimport { Check, Copy } from 'lucide-react'\nimport { Button, cn } from '@arbidocs/react/ui'\n\nexport interface ConsentActionsLabels {\n deny: string\n allow: string\n loading: string\n}\n\nexport const DEFAULT_CONSENT_ACTIONS_LABELS: ConsentActionsLabels = {\n deny: 'Deny',\n allow: 'Allow',\n loading: 'Connecting…',\n}\n\nexport interface CopyableUrlLabels {\n copy: string\n copied: string\n}\n\nexport const DEFAULT_COPYABLE_URL_LABELS: CopyableUrlLabels = {\n copy: 'Copy to clipboard',\n copied: 'Copied',\n}\n\n/** Full-screen centered stage for a consent / authorization card. */\nexport function ConsentPage({\n children,\n className,\n testId,\n ...rest\n}: {\n children: ReactNode\n className?: string\n testId?: string\n} & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'className'>) {\n return (\n <div\n {...rest}\n className={cn('flex min-h-screen items-center justify-center bg-background p-6', className)}\n data-testid={testId}\n data-slot=\"consent-page\"\n >\n {children}\n </div>\n )\n}\n\nconst CARD_WIDTH = { sm: 'max-w-sm', md: 'max-w-md' } as const\n\n/** The grouping tile holding a consent flow's sections. */\nexport function ConsentCard({\n children,\n size = 'sm',\n className,\n ...rest\n}: {\n children: ReactNode\n size?: keyof typeof CARD_WIDTH\n className?: string\n} & Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'className'>) {\n return (\n <div\n {...rest}\n className={cn('w-full rounded-lg bg-muted', CARD_WIDTH[size], className)}\n data-slot=\"consent-card\"\n >\n {children}\n </div>\n )\n}\n\n/** Icon + title + description block at the top of a card. */\nexport function ConsentHeader({\n icon,\n title,\n children,\n}: {\n /** Icon (or logo) shown above (default) or beside the title. */\n icon?: ReactNode\n title: ReactNode\n /** Description paragraph content. */\n children?: ReactNode\n}) {\n return (\n <div className=\"px-6 py-5\" data-slot=\"consent-header\">\n {icon && (\n <div className=\"mb-3 flex size-10 items-center justify-center rounded-lg bg-accent text-primary [&>svg]:size-5\">\n {icon}\n </div>\n )}\n <h1 className=\"text-xl font-semibold text-foreground\">{title}</h1>\n {children && <p className=\"mt-1 text-sm text-muted-foreground\">{children}</p>}\n </div>\n )\n}\n\n/** Titled section of a consent card (e.g. \"This will allow\"). */\nexport function ConsentSection({ title, children }: { title: string; children: ReactNode }) {\n return (\n <div className=\"px-6 py-4\" data-slot=\"consent-section\">\n <p className=\"mb-3 text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {title}\n </p>\n {children}\n </div>\n )\n}\n\n/** Checkmarked list of permissions. */\nexport function ConsentPermissionList({ items }: { items: ReactNode[] }) {\n return (\n <ul className=\"space-y-2 text-sm text-foreground\">\n {items.map((item, i) => (\n <li key={i} className=\"flex items-center gap-2\">\n <Check className=\"size-4 shrink-0 text-primary\" aria-hidden />\n {item}\n </li>\n ))}\n </ul>\n )\n}\n\nconst NOTICE_TONES = {\n error: 'bg-destructive/10 text-destructive',\n success: 'bg-green-bg text-green-text',\n warning: 'bg-yellow-bg text-yellow-text',\n} as const\n\n/** Tinted inline notice (no box border): error, success or warning. */\nexport function ConsentNotice({\n tone,\n title,\n children,\n className,\n}: {\n tone: keyof typeof NOTICE_TONES\n title?: string\n children?: ReactNode\n className?: string\n}) {\n return (\n <div\n role={tone === 'error' ? 'alert' : 'status'}\n className={cn('mx-6 mb-2 rounded-lg px-4 py-3 text-sm', NOTICE_TONES[tone], className)}\n data-slot=\"consent-notice\"\n >\n {title && <p className=\"font-medium\">{title}</p>}\n {children && <div className={title ? 'mt-1' : undefined}>{children}</div>}\n </div>\n )\n}\n\n/** Deny / Allow footer; Allow is the single primary action. */\nexport function ConsentActions({\n onDeny,\n onAllow,\n isLoading,\n denyLabel,\n allowLabel,\n loadingLabel,\n labels,\n}: {\n onDeny: () => void\n onAllow: () => void\n isLoading?: boolean\n denyLabel?: string\n allowLabel?: string\n loadingLabel?: string\n /** Bundle form of the three label props; the single-string props win. */\n labels?: Partial<ConsentActionsLabels>\n}) {\n const l = { ...DEFAULT_CONSENT_ACTIONS_LABELS, ...labels }\n return (\n <div className=\"flex gap-3 px-6 py-4\" data-slot=\"consent-actions\">\n <Button\n type=\"button\"\n variant=\"outline\"\n className=\"flex-1 pointer-coarse:h-11\"\n onClick={onDeny}\n disabled={isLoading}\n >\n {denyLabel ?? l.deny}\n </Button>\n <Button\n type=\"button\"\n className=\"flex-1 pointer-coarse:h-11\"\n onClick={onAllow}\n disabled={isLoading}\n >\n {isLoading ? (loadingLabel ?? l.loading) : (allowLabel ?? l.allow)}\n </Button>\n </div>\n )\n}\n\n/** Read-only URL with a copy button (clipboard handled by the caller). */\nexport function CopyableUrl({\n url,\n copied,\n onCopy,\n labels,\n}: {\n url: string\n copied: boolean\n onCopy: () => void\n labels?: Partial<CopyableUrlLabels>\n}) {\n const l = { ...DEFAULT_COPYABLE_URL_LABELS, ...labels }\n return (\n <div className=\"flex items-stretch gap-2\" data-slot=\"copyable-url\">\n <code className=\"flex-1 overflow-x-auto break-all rounded-lg bg-background px-3 py-2 text-xs text-foreground\">\n {url}\n </code>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"h-auto shrink-0 pointer-coarse:size-11\"\n onClick={onCopy}\n title={l.copy}\n aria-label={copied ? l.copied : l.copy}\n >\n {copied ? <Check className=\"size-4 text-primary\" /> : <Copy className=\"size-4\" />}\n </Button>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { ConsentCard } from './ConsentPage'\n\nconst MESSAGE_TONES = {\n error: { card: 'p-6', title: 'mb-2 text-destructive', body: 'text-muted-foreground' },\n warning: {\n card: 'bg-yellow-bg px-6 py-8',\n title: 'text-yellow-text',\n body: 'mt-2 text-yellow-text',\n },\n} as const\n\n/** A card that only says something (an invalid request, \"close this tab\"): title and a message. */\nexport function ConsentMessage({\n tone,\n title,\n children,\n}: {\n tone: keyof typeof MESSAGE_TONES\n title: string\n children: ReactNode\n}) {\n const t = MESSAGE_TONES[tone]\n return (\n <ConsentCard className={cn('text-center', t.card)}>\n <h1 className={cn('text-xl font-semibold', t.title)}>{title}</h1>\n <p className={cn('text-sm', t.body)}>{children}</p>\n </ConsentCard>\n )\n}\n\n/** Bulleted list of what is being agreed to; each item can carry bold lead-in text. */\nexport function ConsentBulletList({ items }: { items: ReactNode[] }) {\n return (\n <ul data-slot=\"consent-bullets\" className=\"mb-5 space-y-2 text-sm text-foreground\">\n {items.map((item, i) => (\n <li key={i} className=\"flex gap-2\">\n <span aria-hidden=\"true\">•</span>\n <span>{item}</span>\n </li>\n ))}\n </ul>\n )\n}\n\n/** Paragraph of a consent card: `body` explains, `footnote` is small print under an action. */\nexport function ConsentText({\n variant = 'body',\n children,\n}: {\n variant?: 'body' | 'footnote' | 'hint'\n children: ReactNode\n}) {\n return (\n <p\n data-slot=\"consent-text\"\n className={cn(\n 'text-muted-foreground',\n variant === 'body' && 'mb-5 text-sm',\n variant === 'footnote' && 'mt-3 text-center text-xs',\n variant === 'hint' && 'mt-3 text-xs'\n )}\n >\n {children}\n </p>\n )\n}\n\n/** Small print under the actions of a card, centred in the card's padding. */\nexport function ConsentFootnote({ children }: { children: ReactNode }) {\n return (\n <p data-slot=\"consent-footnote\" className=\"px-6 pb-4 text-center text-xs text-muted-foreground\">\n {children}\n </p>\n )\n}\n\n/** Emphasised lead-in inside running text (\"**Read files** — lets…\"). */\nexport function ConsentStrong({ children }: { children: ReactNode }) {\n return <span className=\"font-medium text-foreground\">{children}</span>\n}\n","import { useMemo, type ReactNode } from 'react'\nimport { ArrowLeft } from 'lucide-react'\nimport { Button, Input, Label } from '@arbidocs/react/ui'\nimport { MultiSelect } from '../../settings/MultiSelect'\n\n/** Every fixed string of the agent modal. */\nexport interface AuthorizeAgentLabels {\n editIntro: (agentName: string) => string\n mainIntro: string\n noAssistant: string\n connectExternal: string\n optional: string\n createdIntro: string\n email: string\n signingKey: string\n configure: string\n hideConfiguration: string\n done: string\n backToMain: string\n connectIntro: string\n name: string\n namePlaceholder: string\n nameHint: string\n workspaces: string\n workspacesPlaceholder: string\n roleTitle: string\n collaborator: string\n guest: string\n cancel: string\n create: string\n creating: string\n}\n\nexport const DEFAULT_AUTHORIZE_AGENT_LABELS: AuthorizeAgentLabels = {\n editIntro: (n) => `Configure what ${n} can do — tools, persona, and skills.`,\n mainIntro:\n 'Configure your assistant — the tools it can use, its persona, and which skills it can run.',\n noAssistant: 'No assistant is set up yet. You can connect an external agent below.',\n connectExternal: 'Connect an external agent',\n optional: '(optional)',\n createdIntro:\n 'Assistant created. Save this signing key — it is shown only once and cannot be recovered. It is the credential an external CLI agent uses to sign in as this assistant.',\n email: 'Email: ',\n signingKey: 'Signing key: ',\n configure: 'Configure',\n hideConfiguration: 'Hide configuration',\n done: 'Done',\n backToMain: 'Back to configuring your assistant',\n connectIntro:\n 'Connect an external agent: create a persistent agent with its own login and connect it to ARBI from another machine. Optional — most users just configure their assistant above.',\n name: 'Name',\n namePlaceholder: 'e.g. research-bot, qa-assistant',\n nameHint: \"Letters, digits, hyphens, underscores. Used in the agent's email address.\",\n workspaces: 'Workspaces',\n workspacesPlaceholder: 'Select workspaces to share...',\n roleTitle: 'Role in shared workspaces',\n collaborator: 'Collaborator',\n guest: 'Guest',\n cancel: 'Cancel',\n create: 'Create Assistant',\n creating: 'Creating...',\n}\n\nconst INTRO = 'text-sm text-muted-foreground'\nconst LINK =\n 'inline-flex items-center gap-1.5 text-xs text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11'\n\nfunction useLabels(labels?: Partial<AuthorizeAgentLabels>): AuthorizeAgentLabels {\n return useMemo(() => ({ ...DEFAULT_AUTHORIZE_AGENT_LABELS, ...labels }), [labels])\n}\n\nexport interface AgentEditViewProps {\n agentName: string\n /** The agent's config editor (host component: it owns the data). */\n config: ReactNode\n labels?: Partial<AuthorizeAgentLabels>\n}\n\n/** Edit variant: straight into the config editor of an existing agent. */\nexport function AgentEditView({ agentName, config, labels }: AgentEditViewProps) {\n const l = useLabels(labels)\n return (\n <div className=\"space-y-4\" data-testid=\"agent-edit-config\">\n <p className={INTRO}>{l.editIntro(agentName)}</p>\n {config}\n </div>\n )\n}\n\nexport interface AgentMainViewProps {\n /** The main assistant's config editor; omit when no assistant exists yet. */\n config?: ReactNode\n onConnectExternal: () => void\n labels?: Partial<AuthorizeAgentLabels>\n}\n\n/** Primary view: configure the main assistant; connecting an external agent is secondary. */\nexport function AgentMainView({ config, onConnectExternal, labels }: AgentMainViewProps) {\n const l = useLabels(labels)\n return (\n <div className=\"space-y-4\" data-testid=\"agent-main-config\">\n <p className={INTRO}>{l.mainIntro}</p>\n {config ?? <p className={`py-4 ${INTRO}`}>{l.noAssistant}</p>}\n <div className=\"border-t pt-3\">\n <button\n type=\"button\"\n onClick={onConnectExternal}\n className={LINK}\n data-testid=\"connect-external-agent-link\"\n >\n {l.connectExternal}\n <span className=\"opacity-70\">{l.optional}</span>\n </button>\n </div>\n </div>\n )\n}\n\nexport interface AgentCreatedViewProps {\n email: string\n signingKey: string\n /** Connection instructions (host component). */\n instructions: ReactNode\n /** The inline config editor, rendered while `isConfigOpen`. */\n config: ReactNode\n isConfigOpen: boolean\n onToggleConfig: () => void\n onDone: () => void\n labels?: Partial<AuthorizeAgentLabels>\n}\n\n/** After creating an external agent: the one-time signing key, instructions, optional config. */\nexport function AgentCreatedView({\n email,\n signingKey,\n instructions,\n config,\n isConfigOpen,\n onToggleConfig,\n onDone,\n labels,\n}: AgentCreatedViewProps) {\n const l = useLabels(labels)\n return (\n <div className=\"space-y-4\">\n <p className={INTRO}>{l.createdIntro}</p>\n\n <div className=\"space-y-2 rounded-md bg-muted p-4 font-mono text-sm\">\n <div>\n <span className=\"text-muted-foreground\">{l.email}</span>\n <span className=\"select-all font-semibold\">{email}</span>\n </div>\n <div className=\"break-all\">\n <span className=\"text-muted-foreground\">{l.signingKey}</span>\n <span className=\"select-all font-semibold\">{signingKey}</span>\n </div>\n </div>\n\n {instructions}\n\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" onClick={onToggleConfig} data-testid=\"configure-agent-button\">\n {isConfigOpen ? l.hideConfiguration : l.configure}\n </Button>\n <Button onClick={onDone}>{l.done}</Button>\n </div>\n\n {/* Revealed inline: no nested dialog. */}\n {isConfigOpen && <div className=\"border-t pt-4\">{config}</div>}\n </div>\n )\n}\n\nexport type AgentWorkspaceRole = 'collaborator' | 'guest'\n\nexport interface AgentCreateViewProps {\n name: string\n onNameChange: (name: string) => void\n workspaces: { id: string; name: string }[]\n selectedWorkspaces: string[]\n onSelectedWorkspacesChange: (ids: string[]) => void\n role: AgentWorkspaceRole\n onRoleChange: (role: AgentWorkspaceRole) => void\n isSubmitting: boolean\n onBack: () => void\n onCancel: () => void\n onCreate: () => void\n labels?: Partial<AuthorizeAgentLabels>\n}\n\n/** Form to create an external agent: name, optional workspaces to share, role. */\nexport function AgentCreateView({\n name,\n onNameChange,\n workspaces,\n selectedWorkspaces,\n onSelectedWorkspacesChange,\n role,\n onRoleChange,\n isSubmitting,\n onBack,\n onCancel,\n onCreate,\n labels,\n}: AgentCreateViewProps) {\n const l = useLabels(labels)\n return (\n <div className=\"space-y-5\">\n <button type=\"button\" onClick={onBack} className={LINK} data-testid=\"back-to-main-config\">\n <ArrowLeft className=\"size-3.5\" />\n {l.backToMain}\n </button>\n <p className={INTRO}>{l.connectIntro}</p>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"agentName\" className=\"text-sm font-medium\">\n {l.name} <span className=\"text-destructive\">*</span>\n </Label>\n <Input\n id=\"agentName\"\n placeholder={l.namePlaceholder}\n value={name}\n onChange={(e) => onNameChange(e.target.value)}\n />\n <p className={INTRO}>{l.nameHint}</p>\n </div>\n\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium\">\n {l.workspaces} <span className=\"font-normal text-muted-foreground\">{l.optional}</span>\n </Label>\n <MultiSelect\n data={workspaces.map((ws) => ({ label: ws.name, value: ws.id }))}\n value={selectedWorkspaces}\n onChange={onSelectedWorkspacesChange}\n placeholder={l.workspacesPlaceholder}\n searchable={workspaces.length > 5}\n clearable\n size=\"sm\"\n />\n </div>\n\n {selectedWorkspaces.length > 0 && (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium\">{l.roleTitle}</Label>\n <div className=\"flex gap-2\">\n {(['collaborator', 'guest'] as const).map((r) => (\n <Button\n key={r}\n variant={role === r ? 'default' : 'outline'}\n size=\"sm\"\n onClick={() => onRoleChange(r)}\n >\n {l[r]}\n </Button>\n ))}\n </div>\n </div>\n )}\n\n <div className=\"flex justify-end gap-2 pt-2\">\n <Button variant=\"outline\" onClick={onCancel}>\n {l.cancel}\n </Button>\n <Button onClick={onCreate} disabled={!name.trim() || isSubmitting}>\n {isSubmitting ? l.creating : l.create}\n </Button>\n </div>\n </div>\n )\n}\n"]}