@arbidocs/blocks 0.4.153 → 0.4.155

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 (248) hide show
  1. package/dist/{ConnectedNativeDocxComparison-OFPIXNJB.js → ConnectedNativeDocxComparison-OLWRQSRS.js} +11 -11
  2. package/dist/{ConnectedNativeDocxComparison-OFPIXNJB.js.map → ConnectedNativeDocxComparison-OLWRQSRS.js.map} +1 -1
  3. package/dist/{ConnectedNativeDocxComparison-Y5BNLNH6.cjs → ConnectedNativeDocxComparison-YORMOPPN.cjs} +12 -12
  4. package/dist/{ConnectedNativeDocxComparison-Y5BNLNH6.cjs.map → ConnectedNativeDocxComparison-YORMOPPN.cjs.map} +1 -1
  5. package/dist/{ConnectedNativeDocxEditor-LRYU5HPA.js → ConnectedNativeDocxEditor-34EBIIFS.js} +10 -10
  6. package/dist/{ConnectedNativeDocxEditor-LRYU5HPA.js.map → ConnectedNativeDocxEditor-34EBIIFS.js.map} +1 -1
  7. package/dist/{ConnectedNativeDocxEditor-HTEW5JAH.cjs → ConnectedNativeDocxEditor-EHTWGGX3.cjs} +12 -12
  8. package/dist/{ConnectedNativeDocxEditor-HTEW5JAH.cjs.map → ConnectedNativeDocxEditor-EHTWGGX3.cjs.map} +1 -1
  9. package/dist/{ConnectedStreamedWordArtifact-QW74LKHN.cjs → ConnectedStreamedWordArtifact-5DK6QGYN.cjs} +12 -12
  10. package/dist/ConnectedStreamedWordArtifact-5DK6QGYN.cjs.map +1 -0
  11. package/dist/{ConnectedStreamedWordArtifact-QAUVUCSX.js → ConnectedStreamedWordArtifact-GLIDLSAS.js} +11 -11
  12. package/dist/{ConnectedStreamedWordArtifact-QAUVUCSX.js.map → ConnectedStreamedWordArtifact-GLIDLSAS.js.map} +1 -1
  13. package/dist/WorkspaceTableView-5OWX53R5.js +376 -0
  14. package/dist/WorkspaceTableView-5OWX53R5.js.map +1 -0
  15. package/dist/WorkspaceTableView-ZFMAYHUD.cjs +378 -0
  16. package/dist/WorkspaceTableView-ZFMAYHUD.cjs.map +1 -0
  17. package/dist/agents/index.cjs +282 -282
  18. package/dist/agents/index.js +7 -7
  19. package/dist/{chunk-RQ2Y7USX.cjs → chunk-2VHYOTWW.cjs} +3 -3
  20. package/dist/chunk-2VHYOTWW.cjs.map +1 -0
  21. package/dist/{chunk-DTROMMDX.cjs → chunk-3VULDTNL.cjs} +4 -4
  22. package/dist/{chunk-DTROMMDX.cjs.map → chunk-3VULDTNL.cjs.map} +1 -1
  23. package/dist/{chunk-UTTTJSQU.cjs → chunk-4RPBUMHB.cjs} +4 -4
  24. package/dist/{chunk-UTTTJSQU.cjs.map → chunk-4RPBUMHB.cjs.map} +1 -1
  25. package/dist/chunk-53RCZPMR.cjs +496 -0
  26. package/dist/chunk-53RCZPMR.cjs.map +1 -0
  27. package/dist/chunk-5TDGVOR5.js +142 -0
  28. package/dist/chunk-5TDGVOR5.js.map +1 -0
  29. package/dist/chunk-6HMCF4AJ.js +1720 -0
  30. package/dist/chunk-6HMCF4AJ.js.map +1 -0
  31. package/dist/{chunk-CU2O32Z4.cjs → chunk-6QAAIDQQ.cjs} +62 -99
  32. package/dist/chunk-6QAAIDQQ.cjs.map +1 -0
  33. package/dist/chunk-7HHYMDPE.js +431 -0
  34. package/dist/chunk-7HHYMDPE.js.map +1 -0
  35. package/dist/{chunk-SMN32BQ3.cjs → chunk-7NL6WJER.cjs} +3 -160
  36. package/dist/chunk-7NL6WJER.cjs.map +1 -0
  37. package/dist/{chunk-IXWJGOM2.js → chunk-BQ77KSXU.js} +3 -3
  38. package/dist/{chunk-IXWJGOM2.js.map → chunk-BQ77KSXU.js.map} +1 -1
  39. package/dist/chunk-BTF4AZMG.js +148 -0
  40. package/dist/chunk-BTF4AZMG.js.map +1 -0
  41. package/dist/{chunk-HALD6ZB5.cjs → chunk-C3SMTA3C.cjs} +4 -4
  42. package/dist/{chunk-HALD6ZB5.cjs.map → chunk-C3SMTA3C.cjs.map} +1 -1
  43. package/dist/{chunk-GAYMJWTC.cjs → chunk-CB4TIDEX.cjs} +6 -6
  44. package/dist/{chunk-GAYMJWTC.cjs.map → chunk-CB4TIDEX.cjs.map} +1 -1
  45. package/dist/{chunk-KPZZ5FHE.cjs → chunk-CNHUJRQ4.cjs} +10 -6
  46. package/dist/chunk-CNHUJRQ4.cjs.map +1 -0
  47. package/dist/{chunk-Q4BY2CQQ.cjs → chunk-CQCNU5KT.cjs} +28 -28
  48. package/dist/{chunk-Q4BY2CQQ.cjs.map → chunk-CQCNU5KT.cjs.map} +1 -1
  49. package/dist/{chunk-GRGS5M6O.cjs → chunk-CROGFB46.cjs} +160 -3
  50. package/dist/chunk-CROGFB46.cjs.map +1 -0
  51. package/dist/{chunk-QN47Q4N7.js → chunk-CU6LDQ57.js} +3 -3
  52. package/dist/{chunk-QN47Q4N7.js.map → chunk-CU6LDQ57.js.map} +1 -1
  53. package/dist/{chunk-EF4ZLKRM.js → chunk-DEPF5LQI.js} +3 -3
  54. package/dist/{chunk-EF4ZLKRM.js.map → chunk-DEPF5LQI.js.map} +1 -1
  55. package/dist/{chunk-JAANWQGB.js → chunk-ETZ5A3GU.js} +3 -3
  56. package/dist/{chunk-JAANWQGB.js.map → chunk-ETZ5A3GU.js.map} +1 -1
  57. package/dist/{chunk-TBEVGWY3.js → chunk-F57LNUSZ.js} +10 -6
  58. package/dist/chunk-F57LNUSZ.js.map +1 -0
  59. package/dist/{chunk-GFNELPDP.cjs → chunk-FM3IRQJW.cjs} +10 -5
  60. package/dist/chunk-FM3IRQJW.cjs.map +1 -0
  61. package/dist/chunk-FPHTSNOE.js +465 -0
  62. package/dist/chunk-FPHTSNOE.js.map +1 -0
  63. package/dist/{chunk-OVR3XMYL.js → chunk-FYZXDZM7.js} +3 -3
  64. package/dist/{chunk-OVR3XMYL.js.map → chunk-FYZXDZM7.js.map} +1 -1
  65. package/dist/{chunk-2FLWPM3B.cjs → chunk-GC2FSPSQ.cjs} +7 -7
  66. package/dist/{chunk-2FLWPM3B.cjs.map → chunk-GC2FSPSQ.cjs.map} +1 -1
  67. package/dist/{chunk-DB2OXRQC.js → chunk-GO3BN76C.js} +7 -7
  68. package/dist/{chunk-DB2OXRQC.js.map → chunk-GO3BN76C.js.map} +1 -1
  69. package/dist/{chunk-XZIYRKLW.cjs → chunk-H32DV7XS.cjs} +5 -139
  70. package/dist/chunk-H32DV7XS.cjs.map +1 -0
  71. package/dist/{chunk-4236BRZK.js → chunk-HP2C4MD3.js} +29 -3
  72. package/dist/chunk-HP2C4MD3.js.map +1 -0
  73. package/dist/{chunk-ZP6Q3KXU.cjs → chunk-HUATKA3M.cjs} +4 -4
  74. package/dist/{chunk-ZP6Q3KXU.cjs.map → chunk-HUATKA3M.cjs.map} +1 -1
  75. package/dist/chunk-ISHFVKVU.js +304 -0
  76. package/dist/chunk-ISHFVKVU.js.map +1 -0
  77. package/dist/chunk-JUUOJP7I.cjs +164 -0
  78. package/dist/chunk-JUUOJP7I.cjs.map +1 -0
  79. package/dist/{chunk-4KMLM3GY.cjs → chunk-KBO75NLM.cjs} +7 -7
  80. package/dist/{chunk-4KMLM3GY.cjs.map → chunk-KBO75NLM.cjs.map} +1 -1
  81. package/dist/{chunk-Z4NQ3TED.js → chunk-KCSIX7CY.js} +3 -3
  82. package/dist/{chunk-Z4NQ3TED.js.map → chunk-KCSIX7CY.js.map} +1 -1
  83. package/dist/{chunk-DN2KI4BU.js → chunk-KDLX5AA7.js} +3 -3
  84. package/dist/{chunk-DN2KI4BU.js.map → chunk-KDLX5AA7.js.map} +1 -1
  85. package/dist/{chunk-WFA2GVZJ.js → chunk-MF5KQ4PS.js} +3 -3
  86. package/dist/{chunk-WFA2GVZJ.js.map → chunk-MF5KQ4PS.js.map} +1 -1
  87. package/dist/{chunk-YXNNNP57.js → chunk-MNG7N6M2.js} +4 -4
  88. package/dist/{chunk-YXNNNP57.js.map → chunk-MNG7N6M2.js.map} +1 -1
  89. package/dist/chunk-MSFQDELO.cjs +482 -0
  90. package/dist/chunk-MSFQDELO.cjs.map +1 -0
  91. package/dist/{chunk-T74Q3MCZ.cjs → chunk-MUDEL7UL.cjs} +25 -884
  92. package/dist/chunk-MUDEL7UL.cjs.map +1 -0
  93. package/dist/{chunk-KSHKTOY2.js → chunk-NUSBINUM.js} +3 -3
  94. package/dist/chunk-NUSBINUM.js.map +1 -0
  95. package/dist/{chunk-EYKISBDO.cjs → chunk-OALEDG67.cjs} +5 -5
  96. package/dist/{chunk-EYKISBDO.cjs.map → chunk-OALEDG67.cjs.map} +1 -1
  97. package/dist/{chunk-COCGRJLA.cjs → chunk-OFV3PRF2.cjs} +7 -7
  98. package/dist/{chunk-COCGRJLA.cjs.map → chunk-OFV3PRF2.cjs.map} +1 -1
  99. package/dist/chunk-OOU4QLRK.cjs +319 -0
  100. package/dist/chunk-OOU4QLRK.cjs.map +1 -0
  101. package/dist/chunk-OU3RGQFX.cjs +136 -0
  102. package/dist/chunk-OU3RGQFX.cjs.map +1 -0
  103. package/dist/{chunk-3PCBYOIZ.js → chunk-P6RIBIVN.js} +38 -7
  104. package/dist/chunk-P6RIBIVN.js.map +1 -0
  105. package/dist/{chunk-LXTOOUEN.cjs → chunk-Q7CQYYZW.cjs} +5 -5
  106. package/dist/{chunk-LXTOOUEN.cjs.map → chunk-Q7CQYYZW.cjs.map} +1 -1
  107. package/dist/{chunk-CROTH2BS.js → chunk-QKR5LWDO.js} +9 -40
  108. package/dist/{chunk-CROTH2BS.js.map → chunk-QKR5LWDO.js.map} +1 -1
  109. package/dist/chunk-REH7PX3N.cjs +145 -0
  110. package/dist/chunk-REH7PX3N.cjs.map +1 -0
  111. package/dist/chunk-RQKWYKZY.js +127 -0
  112. package/dist/chunk-RQKWYKZY.js.map +1 -0
  113. package/dist/{chunk-U6JQ4KMX.cjs → chunk-SN2GZ4ZM.cjs} +29 -2
  114. package/dist/chunk-SN2GZ4ZM.cjs.map +1 -0
  115. package/dist/{chunk-R6VCPDPF.js → chunk-SZSJGZSO.js} +156 -6
  116. package/dist/chunk-SZSJGZSO.js.map +1 -0
  117. package/dist/{chunk-US3S4DCB.js → chunk-TF7HN5EU.js} +10 -5
  118. package/dist/chunk-TF7HN5EU.js.map +1 -0
  119. package/dist/{chunk-YKQ2DPIP.js → chunk-VF5EUAIV.js} +3 -3
  120. package/dist/{chunk-YKQ2DPIP.js.map → chunk-VF5EUAIV.js.map} +1 -1
  121. package/dist/{chunk-KMZWKSKO.cjs → chunk-VZPFYZZU.cjs} +4 -4
  122. package/dist/{chunk-KMZWKSKO.cjs.map → chunk-VZPFYZZU.cjs.map} +1 -1
  123. package/dist/{chunk-HUJF2XM2.js → chunk-W7CWGURO.js} +28 -873
  124. package/dist/chunk-W7CWGURO.js.map +1 -0
  125. package/dist/{chunk-ZLEYLCE4.js → chunk-WK6FVIF7.js} +6 -156
  126. package/dist/chunk-WK6FVIF7.js.map +1 -0
  127. package/dist/chunk-WV4TD2HZ.cjs +1785 -0
  128. package/dist/chunk-WV4TD2HZ.cjs.map +1 -0
  129. package/dist/{chunk-COA3S3CZ.js → chunk-XI37A7HH.js} +4 -4
  130. package/dist/{chunk-COA3S3CZ.js.map → chunk-XI37A7HH.js.map} +1 -1
  131. package/dist/{chunk-LGBAZD37.js → chunk-XRL4R2TT.js} +7 -139
  132. package/dist/chunk-XRL4R2TT.js.map +1 -0
  133. package/dist/{chunk-4JNKXOFZ.cjs → chunk-YBJ4QGNH.cjs} +11 -11
  134. package/dist/{chunk-4JNKXOFZ.cjs.map → chunk-YBJ4QGNH.cjs.map} +1 -1
  135. package/dist/{chunk-GFOEWPAP.cjs → chunk-YF3QUHKN.cjs} +49 -12
  136. package/dist/chunk-YF3QUHKN.cjs.map +1 -0
  137. package/dist/{chunk-H4D7WKDY.js → chunk-YNMO3DSR.js} +3 -3
  138. package/dist/{chunk-H4D7WKDY.js.map → chunk-YNMO3DSR.js.map} +1 -1
  139. package/dist/citations/index.cjs +10 -10
  140. package/dist/citations/index.js +2 -2
  141. package/dist/collaboration/index.cjs +77 -77
  142. package/dist/collaboration/index.js +2 -2
  143. package/dist/connect/docx.cjs +14 -14
  144. package/dist/connect/docx.js +10 -10
  145. package/dist/connect/index.cjs +2820 -1043
  146. package/dist/connect/index.cjs.map +1 -1
  147. package/dist/connect/index.d.ts +4 -0
  148. package/dist/connect/index.js +2216 -504
  149. package/dist/connect/index.js.map +1 -1
  150. package/dist/connect/viewer.cjs +68 -72
  151. package/dist/connect/viewer.cjs.map +1 -1
  152. package/dist/connect/viewer.js +11 -15
  153. package/dist/connect/viewer.js.map +1 -1
  154. package/dist/connection/ConnectionProvider.d.ts +7 -0
  155. package/dist/connection/files/DocumentSyncGlyph.d.ts +28 -0
  156. package/dist/connection/files/explorer/ConnectedFilesExplorer.d.ts +56 -0
  157. package/dist/connection/files/explorer/FileTiles.d.ts +87 -0
  158. package/dist/connection/files/index.d.ts +5 -0
  159. package/dist/connection/files/store.d.ts +27 -0
  160. package/dist/connection/files/support.d.ts +38 -0
  161. package/dist/connection/projects/ConnectedProjectsPanel.d.ts +34 -0
  162. package/dist/connection/projects/index.d.ts +1 -0
  163. package/dist/connection/workspace-dashboard/ConnectedWorkspaceDashboard.d.ts +37 -0
  164. package/dist/connection/workspace-dashboard/dashboard-rows.d.ts +42 -0
  165. package/dist/connection/workspace-dashboard/index.d.ts +1 -0
  166. package/dist/connection/workspace-list/ConnectedWorkspaceList.d.ts +37 -0
  167. package/dist/connection/workspace-list/WorkspaceCardsView.d.ts +15 -0
  168. package/dist/connection/workspace-list/WorkspaceFilterMenu.d.ts +4 -0
  169. package/dist/connection/workspace-list/WorkspaceTableView.d.ts +13 -0
  170. package/dist/connection/workspace-list/index.d.ts +5 -0
  171. package/dist/connection/workspace-list/projectBilling.d.ts +21 -0
  172. package/dist/connection/workspace-list/useConnectedWorkspaceList.d.ts +251 -0
  173. package/dist/connection/workspace-list/workspaceTable.d.ts +58 -0
  174. package/dist/connection/workspace-settings/ConnectedWorkspaceMembers.d.ts +26 -0
  175. package/dist/connection/workspace-settings/ConnectedWorkspaceSettings.d.ts +7 -9
  176. package/dist/connection/workspace-settings/index.d.ts +2 -1
  177. package/dist/connection/workspace-settings/useConnectedWorkspaceSettings.d.ts +0 -1
  178. package/dist/facts/index.cjs +3 -3
  179. package/dist/facts/index.js +2 -2
  180. package/dist/files/DocStatusIcon.d.ts +5 -4
  181. package/dist/files/FailedStageIcon.d.ts +26 -0
  182. package/dist/files/folders/FolderProviderIcon.d.ts +29 -0
  183. package/dist/files/folders/folderPaths.d.ts +86 -0
  184. package/dist/files/folders/index.d.ts +2 -0
  185. package/dist/files/index.cjs +328 -240
  186. package/dist/files/index.d.ts +5 -0
  187. package/dist/files/index.js +4 -4
  188. package/dist/files/permissions.d.ts +28 -0
  189. package/dist/files/recently-deleted.d.ts +7 -0
  190. package/dist/files/visibility.d.ts +31 -0
  191. package/dist/home/index.cjs +119 -459
  192. package/dist/home/index.cjs.map +1 -1
  193. package/dist/home/index.js +13 -419
  194. package/dist/home/index.js.map +1 -1
  195. package/dist/index.cjs +480 -480
  196. package/dist/index.js +16 -16
  197. package/dist/provider/BlocksProvider.d.ts +9 -1
  198. package/dist/retrieval/index.cjs +4 -4
  199. package/dist/retrieval/index.js +2 -2
  200. package/dist/settings/index.cjs +169 -165
  201. package/dist/settings/index.d.ts +1 -0
  202. package/dist/settings/index.js +2 -2
  203. package/dist/settings/tri-state-filters.d.ts +13 -0
  204. package/dist/shell/index.cjs +44 -44
  205. package/dist/shell/index.js +3 -3
  206. package/dist/site/index.cjs +5 -5
  207. package/dist/site/index.js +1 -1
  208. package/dist/studio/index.cjs +14 -14
  209. package/dist/studio/index.js +6 -6
  210. package/dist/workflow-canvas/index.cjs +27 -27
  211. package/dist/workflow-canvas/index.js +9 -9
  212. package/dist/workspaces/index.cjs +110 -369
  213. package/dist/workspaces/index.cjs.map +1 -1
  214. package/dist/workspaces/index.d.ts +2 -0
  215. package/dist/workspaces/index.js +12 -350
  216. package/dist/workspaces/index.js.map +1 -1
  217. package/dist/workspaces/workspace-groups.d.ts +90 -0
  218. package/dist/workspaces/workspace-roles.d.ts +11 -0
  219. package/node_modules/@arbidocs/coedit/package.json +1 -1
  220. package/package.json +6 -5
  221. package/dist/ConnectedStreamedWordArtifact-QW74LKHN.cjs.map +0 -1
  222. package/dist/chunk-3PCBYOIZ.js.map +0 -1
  223. package/dist/chunk-4236BRZK.js.map +0 -1
  224. package/dist/chunk-CU2O32Z4.cjs.map +0 -1
  225. package/dist/chunk-EV7W64B6.js +0 -134
  226. package/dist/chunk-EV7W64B6.js.map +0 -1
  227. package/dist/chunk-GFNELPDP.cjs.map +0 -1
  228. package/dist/chunk-GFOEWPAP.cjs.map +0 -1
  229. package/dist/chunk-GRGS5M6O.cjs.map +0 -1
  230. package/dist/chunk-HUJF2XM2.js.map +0 -1
  231. package/dist/chunk-JGOST4IL.js +0 -648
  232. package/dist/chunk-JGOST4IL.js.map +0 -1
  233. package/dist/chunk-KPZZ5FHE.cjs.map +0 -1
  234. package/dist/chunk-KSHKTOY2.js.map +0 -1
  235. package/dist/chunk-LGBAZD37.js.map +0 -1
  236. package/dist/chunk-R6VCPDPF.js.map +0 -1
  237. package/dist/chunk-RQ2Y7USX.cjs.map +0 -1
  238. package/dist/chunk-RXK3XP62.cjs +0 -144
  239. package/dist/chunk-RXK3XP62.cjs.map +0 -1
  240. package/dist/chunk-SMN32BQ3.cjs.map +0 -1
  241. package/dist/chunk-T74Q3MCZ.cjs.map +0 -1
  242. package/dist/chunk-TBEVGWY3.js.map +0 -1
  243. package/dist/chunk-U6JQ4KMX.cjs.map +0 -1
  244. package/dist/chunk-US3S4DCB.js.map +0 -1
  245. package/dist/chunk-XZIYRKLW.cjs.map +0 -1
  246. package/dist/chunk-YAEXSCUW.cjs +0 -677
  247. package/dist/chunk-YAEXSCUW.cjs.map +0 -1
  248. package/dist/chunk-ZLEYLCE4.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/agents/workflows/planSteps.ts","../src/agents/workflows/skillMarkdown.ts","../src/agents/workflows/useWorkflowView.ts","../src/agents/workflows/stepWindow.ts","../src/agents/workflows/StepBarFrame.tsx","../src/agents/workflows/StepParts.tsx","../src/agents/workflows/WorkflowStepBar.tsx","../src/agents/workflows/WorkflowRunner.tsx","../src/agents/definitions/AgentEditorParts.tsx","../src/agents/definitions/AgentCreator.tsx","../src/agents/definitions/persona.ts","../src/agents/definitions/defaults.ts","../src/agents/definitions/AgentConnectInstructions.tsx","../src/agents/skills/SkillParts.tsx","../src/agents/skills/SkillForms.tsx","../src/agents/skills/SkillBrowserParts.tsx","../src/agents/skills/skillFiles.ts","../src/agents/skills/skillImport.ts","../src/agents/skills/skillLibrary.ts","../src/agents/skills/SkillLibraryDetail.tsx","../src/agents/tasks/TaskActivityTimeline.tsx","../src/agents/tasks/TaskActivityDialog.tsx","../src/agents/tasks/TaskRunsDialog.tsx"],"names":["runFields","composeStepPrompt","workflowSteps","canAssign","fieldToFrontmatter","workflowFromFrontmatter","isRunFinished","useState","useRef","useEffect","useCallback","nextAction","act","validateStep","useMemo","stepPhase","failedUpstream","assigneeName","runFieldsOf","useElementSize","jsxs","cn","jsx","StepBadgeMark","Fragment","Popover","PopoverTrigger","PopoverContent","ChevronLeft","ChevronRight","StepChip","Loader2","splitDocRef","FileText","UserRound","CornerUpLeft","sendBackTargets","Button","Textarea","ShieldCheck","formatDate","MessageSquare","shownValue","Check","Hourglass","Clock","PenLine","X","ExternalLink","Mail","Table2","stepKindOf","STEP_KIND_ICONS","DEFAULT_STEP_KIND_LABELS","compact","stepLevels","waitingDocuments","Card","CheckCircle2","stepDependencies","SchemaForm","UploadDropzone","reviewInstructions","ArrowLeft","ArrowRight","AlertTriangle","RotateCw","GitBranch","isPersonStep","testIdOr","Label","Bot","Wand2","useControllableState","Dialog","DialogContent","DialogHeader","DialogTitle","DialogDescription","Sparkles","Input","FoldSection","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Globe","Terminal","Telescope","ListChecks","ImageIcon","Brain","useBlocksEnvironment","Copy","Tooltip","TooltipTrigger","TooltipContent","LayoutGrid","List","unzip","strFromU8","mergeSkillWorkflows","Play","Pencil","Lock","Download","Trash2","KeyRound","RotateCcw","UserRoundCog","Square","MessageSquareReply","Phone","Disc","Flag","BellRing","ArrowUpRight","eventWaitingDocuments","waitingForDocumentsText","workflowRunStatusLabel","ActionLink","Eye","TabHeader","History","GridView"],"mappings":"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","file":"chunk-GFOEWPAP.cjs","sourcesContent":["/**\n * A stepped workflow as the plan a run thread carries (`TaskPlan.steps`) and back. The server reads\n * the structure to start each step: an agent step runs a skill (`skill` + `inputs` templates) or a\n * prompt (filled from the run's inputs as it starts); everything only a client shows (form fields,\n * icon, canvas position, which workflow a step names) rides along in `ui`.\n */\n\nimport type { components } from '@arbidocs/client'\nimport {\n canAssign,\n composeStepPrompt,\n runFields,\n workflowSteps,\n type StepComposeOptions,\n} from './run'\nimport type {\n WorkflowAction,\n WorkflowAgentStep,\n WorkflowAssignee,\n WorkflowDefinition,\n WorkflowDocumentRef,\n WorkflowField,\n WorkflowInputs,\n WorkflowSignal,\n WorkflowSignalWhen,\n WorkflowStep,\n} from './types'\n\nexport type TaskPlanStep = components['schemas']['TaskPlanStep']\n/** A step's signal as the plan carries it (plaintext config, like the step's prompt). */\ntype StepSignal = components['schemas']['StepSignal']\ntype StepAssignee = components['schemas']['StepAssignee']\ntype StepField = components['schemas']['StepField']\ntype PlanDocumentRef = string | components['schemas']['StepDocumentRef']\ntype PlanAction = NonNullable<TaskPlanStep['action']>\nexport type TaskPlan = components['schemas']['TaskPlan']\n\n/* ------------------------- people, documents, actions ------------------------- */\n\nexport function toPlanAssignee(a: WorkflowAssignee): StepAssignee {\n if ('user' in a) return { user: a.user }\n if ('input' in a) return { input: a.input }\n if ('runOwner' in a) return { run_owner: true }\n return { project_lead: true }\n}\n\nexport function fromPlanAssignee(a: StepAssignee | null | undefined): WorkflowAssignee | undefined {\n if (!a) return undefined\n if (a.user) return { user: a.user }\n if (a.input) return { input: a.input }\n if (a.run_owner) return { runOwner: true }\n if (a.project_lead) return { projectLead: true }\n return undefined\n}\n\nexport function toPlanDocumentRef(ref: WorkflowDocumentRef): PlanDocumentRef {\n if ('step' in ref) return { step: ref.step }\n if ('input' in ref) return { input: ref.input }\n return ref.id.trim()\n}\n\nexport function fromPlanDocumentRef(\n ref: PlanDocumentRef | null | undefined\n): WorkflowDocumentRef | undefined {\n if (!ref) return undefined\n if (typeof ref === 'string') return { id: ref }\n if (ref.step) return { step: ref.step }\n if (ref.input) return { input: ref.input }\n return undefined\n}\n\nconst docRefs = (refs: WorkflowDocumentRef[] | undefined): PlanDocumentRef[] =>\n (refs ?? []).map(toPlanDocumentRef)\nconst fromDocRefs = (refs: PlanDocumentRef[] | null | undefined): WorkflowDocumentRef[] =>\n (refs ?? []).flatMap((r) => {\n const ref = fromPlanDocumentRef(r)\n return ref ? [ref] : []\n })\n\nfunction toPlanAction(a: WorkflowAction): PlanAction {\n switch (a.type) {\n case 'sign':\n return {\n type: 'sign',\n // The builder may hold a signature step whose document is not chosen yet: the server\n // refuses it, and the builder says so before saving (`stepConfigProblems`).\n document: a.document ? toPlanDocumentRef(a.document) : '',\n signers: a.signers.map(toPlanAssignee),\n ...(a.message?.trim() ? { message: a.message.trim() } : {}),\n ...(a.expiresAfterHours ? { expires_after_hours: a.expiresAfterHours } : {}),\n }\n case 'email_draft':\n return {\n type: 'email_draft',\n to: a.to.map((t) => t.trim()).filter(Boolean),\n cc: (a.cc ?? []).map((t) => t.trim()).filter(Boolean),\n subject: a.subject,\n body_template: a.body,\n attachments: docRefs(a.attachments),\n }\n case 'tabular_review':\n return {\n type: 'tabular_review',\n tags: a.tags,\n documents: Array.isArray(a.documents) ? docRefs(a.documents) : a.documents,\n overwrite: !!a.overwrite,\n }\n }\n}\n\nfunction fromPlanAction(a: PlanAction | null | undefined): WorkflowAction {\n switch (a?.type) {\n case 'sign':\n return {\n type: 'sign',\n document: fromPlanDocumentRef(a.document),\n signers: (a.signers ?? []).flatMap((s) => {\n const one = fromPlanAssignee(s)\n return one ? [one] : []\n }),\n ...(a.message ? { message: a.message } : {}),\n ...(a.expires_after_hours ? { expiresAfterHours: a.expires_after_hours } : {}),\n }\n case 'email_draft':\n return {\n type: 'email_draft',\n to: a.to ?? [],\n ...(a.cc?.length ? { cc: a.cc } : {}),\n subject: a.subject ?? '',\n body: a.body_template ?? '',\n ...(a.attachments?.length ? { attachments: fromDocRefs(a.attachments) } : {}),\n }\n case 'tabular_review':\n return {\n type: 'tabular_review',\n tags: a.tags ?? [],\n documents: Array.isArray(a.documents)\n ? fromDocRefs(a.documents)\n : (a.documents ?? 'run_uploads'),\n ...(a.overwrite ? { overwrite: true } : {}),\n }\n default:\n // A plan from a newer server with an action this client does not know: shown as a review.\n return { type: 'tabular_review', tags: [], documents: 'run_uploads' }\n }\n}\n\n/** A field as a step's `fields` carries it (what completing the step is checked against). */\nfunction toStepField(f: WorkflowField): StepField {\n return {\n name: f.name,\n type: f.type,\n label: f.label,\n required: !!f.required,\n ...(f.options ? { options: f.options.map((o) => ({ value: o.value, label: o.label })) } : {}),\n ...(f.min !== undefined ? { min: f.min } : {}),\n ...(f.max !== undefined ? { max: f.max } : {}),\n } as StepField\n}\n\n/** What a step keeps for clients only (the server stores it as plain data). */\ninterface StepUi {\n description?: string\n icon?: string\n commit?: boolean\n next_label?: string\n fields?: WorkflowField[]\n required?: boolean\n accept?: string\n hint?: string\n output?: 'answer' | 'artifact'\n instructions?: string\n /** The skill or workflow an agent step names, and its input templates (the builder edits these). */\n workflow?: string\n with?: Record<string, string>\n prompt_template?: string\n position?: { x: number; y: number }\n}\n\nconst compact = <T extends object>(o: T): T =>\n Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined && v !== '')) as T\n\nexport interface ToPlanOptions extends StepComposeOptions {\n /**\n * The run's inputs when it starts: prompts are composed with them. Fields not given yet (or\n * absent altogether, saving a workflow to run later) keep `{{field}}` placeholders, which the\n * server fills from the run's inputs.\n */\n inputs?: WorkflowInputs\n}\n\n/** Each run field as its own `{{name}}` placeholder: composing with these keeps the template. */\nfunction placeholders(workflow: WorkflowDefinition): WorkflowInputs {\n return Object.fromEntries(runFields(workflow).map((f) => [f.name, `{{${f.name}}}`]))\n}\n\nfunction agentStep(\n workflow: WorkflowDefinition,\n step: WorkflowAgentStep,\n options: ToPlanOptions\n): Pick<TaskPlanStep, 'skill' | 'inputs' | 'prompt'> {\n const target = step.workflow ? options.resolveWorkflow?.(step.workflow) : undefined\n // A server skill: the server runs the skill itself with the step's inputs.\n if (target?.skill) return { skill: target.skill, inputs: step.with ?? {}, prompt: null }\n // A field still blank when the run starts (a later form fills it) keeps its placeholder, so the\n // server fills it from the run's inputs as the step starts.\n const given = Object.entries(options.inputs ?? {}).filter(\n ([, v]) => v !== undefined && v !== null && v !== ''\n )\n const inputs = { ...placeholders(workflow), ...Object.fromEntries(given) }\n return { skill: null, inputs: null, prompt: composeStepPrompt(workflow, step, inputs, options) }\n}\n\n/** The plan steps a run thread (or a saved workflow) carries for `workflow`. */\nexport function toPlanSteps(\n workflow: WorkflowDefinition,\n options: ToPlanOptions = {}\n): TaskPlanStep[] {\n const layout = workflow.run.kind === 'steps' ? workflow.run.layout : undefined\n return workflowSteps(workflow).map((step) => {\n const ui: StepUi = compact({\n description: step.description,\n icon: step.icon,\n commit: step.commit,\n next_label: step.nextLabel,\n position: layout?.[step.id],\n ...(step.kind === 'form' ? { fields: step.inputs } : {}),\n ...(step.kind === 'upload'\n ? { required: step.required, accept: step.accept, hint: step.hint }\n : {}),\n ...(step.kind === 'review'\n ? { instructions: step.instructions, fields: step.fields?.length ? step.fields : undefined }\n : {}),\n ...(step.kind === 'agent'\n ? {\n output: step.output,\n workflow: step.workflow,\n with: step.with,\n prompt_template: step.run?.kind === 'prompt' ? step.run.promptTemplate : undefined,\n }\n : {}),\n })\n return {\n id: step.id,\n title: step.title,\n kind: step.kind,\n after: step.after ?? null,\n branch: step.kind === 'agent' && !!step.branch,\n requires_files: false,\n ui: ui as Record<string, unknown>,\n // An unfinished signal (still being typed) is not saved: the server would refuse it.\n ...(step.signals?.some((s) => !isIncompleteSignal(s))\n ? { signals: step.signals.filter((s) => !isIncompleteSignal(s)).map(toPlanSignal) }\n : {}),\n ...(step.assignee && canAssign(step) ? { assignee: toPlanAssignee(step.assignee) } : {}),\n ...(step.remindAfterHours && canAssign(step)\n ? { remind_after_hours: step.remindAfterHours }\n : {}),\n // A review's fields are what approving it is checked against (the server's `fields`).\n ...(step.kind === 'review' && step.fields?.length\n ? { fields: step.fields.map(toStepField) }\n : {}),\n ...(step.kind === 'action' ? { action: toPlanAction(step.action) } : {}),\n ...(step.kind === 'agent' && step.editDocument && !step.branch\n ? { edit_document: toPlanDocumentRef(step.editDocument) }\n : {}),\n ...(step.kind === 'agent'\n ? agentStep(workflow, step, options)\n : { skill: null, inputs: null, prompt: null }),\n }\n })\n}\n\nfunction toPlanSignal(signal: WorkflowSignal): StepSignal {\n return signal.when ? { name: signal.name, when: signal.when } : { name: signal.name }\n}\n\n/** A signal the builder holds that is not finished yet: no name, or a condition with nothing in it. */\nexport function isIncompleteSignal(signal: WorkflowSignal): boolean {\n const when = signal.when\n if (!signal.name.trim()) return true\n if (!when) return false\n if ('field' in when) return !when.field || String(when.equals).trim() === ''\n if ('contains' in when) return !when.contains.trim()\n if ('matches' in when) return !when.matches.trim()\n return false\n}\n\n/** A plan's signal back as the builder's: exactly one condition shape, or none. */\nfunction fromPlanSignal(signal: StepSignal): WorkflowSignal {\n const w = signal.when\n const when: WorkflowSignalWhen | undefined =\n w?.field != null && w.equals != null\n ? { field: w.field, equals: w.equals }\n : w?.contains != null\n ? { contains: w.contains }\n : w?.matches != null\n ? { matches: w.matches }\n : w?.approved\n ? { approved: true }\n : undefined\n return when ? { name: signal.name, when } : { name: signal.name }\n}\n\n/** Steps from a run's (or a saved workflow's) plan: what the runner, the builder and the top bar show. */\nexport function fromPlanSteps(steps: TaskPlanStep[] | null | undefined): WorkflowStep[] {\n return (steps ?? []).map((p): WorkflowStep => {\n const ui = (p.ui ?? {}) as StepUi\n const base = {\n id: p.id,\n title: p.title,\n description: ui.description,\n icon: ui.icon,\n commit: ui.commit,\n nextLabel: ui.next_label,\n ...(p.after != null ? { after: p.after } : {}),\n ...(p.signals?.length ? { signals: p.signals.map(fromPlanSignal) } : {}),\n ...(fromPlanAssignee(p.assignee) ? { assignee: fromPlanAssignee(p.assignee) } : {}),\n ...(p.remind_after_hours ? { remindAfterHours: p.remind_after_hours } : {}),\n }\n switch (p.kind) {\n case 'form':\n return { ...base, kind: 'form', inputs: ui.fields ?? [] }\n case 'upload':\n return { ...base, kind: 'upload', required: ui.required, accept: ui.accept, hint: ui.hint }\n case 'review':\n return {\n ...base,\n kind: 'review',\n instructions: ui.instructions,\n // The client's copy of the fields (labels, options) when it kept one, else the plan's.\n ...(ui.fields?.length\n ? { fields: ui.fields }\n : p.fields?.length\n ? { fields: p.fields.map(fromStepField) }\n : {}),\n }\n case 'action':\n return { ...base, kind: 'action', action: fromPlanAction(p.action) }\n default: {\n const promptTemplate = ui.prompt_template ?? p.prompt ?? undefined\n return {\n ...base,\n kind: 'agent',\n workflow: ui.workflow ?? p.skill ?? undefined,\n with: ui.with ?? (p.inputs as Record<string, string> | null) ?? undefined,\n run:\n !ui.workflow && !p.skill && promptTemplate\n ? { kind: 'prompt', promptTemplate }\n : undefined,\n output: ui.output,\n branch: p.branch || undefined,\n ...(fromPlanDocumentRef(p.edit_document)\n ? { editDocument: fromPlanDocumentRef(p.edit_document) }\n : {}),\n }\n }\n }\n })\n}\n\n/** Where each step sits on the builder's canvas, as the plan keeps it. */\nexport function layoutFromPlanSteps(\n steps: TaskPlanStep[] | null | undefined\n): Record<string, { x: number; y: number }> | undefined {\n const entries = (steps ?? []).flatMap((p) => {\n const position = (p.ui as StepUi | null | undefined)?.position\n return position ? [[p.id, position] as const] : []\n })\n return entries.length ? Object.fromEntries(entries) : undefined\n}\n\nconst FIELD_TYPES = new Set<string>([\n 'text',\n 'longtext',\n 'boolean',\n 'select',\n 'number',\n 'date',\n 'scope',\n 'documents',\n 'person',\n])\n\nfunction fromStepField(f: StepField): WorkflowField {\n return {\n name: f.name,\n type: (FIELD_TYPES.has(f.type) ? f.type : 'text') as WorkflowField['type'],\n label: f.label ?? f.name,\n ...(f.required ? { required: true } : {}),\n ...(f.options?.length\n ? { options: f.options.map((o) => ({ value: o.value, label: o.label ?? o.value })) }\n : {}),\n ...(f.min != null ? { min: f.min } : {}),\n ...(f.max != null ? { max: f.max } : {}),\n }\n}\n","/**\n * A skill's form and prompt as SKILL.md text and back: how a built-in becomes a skill of the user's\n * own (\"Make a copy\"). A skill is one step; a flow of steps is a workflow (`toPlanSteps`).\n *\n * The frontmatter is the line-based `key: value` form the backend parser reads. `inputs` is one\n * line of JSON (valid YAML flow style): the backend ignores keys it does not know, and\n * `workflowFromSkillMarkdown` reads it back.\n */\n\nimport type { WorkflowDefinition } from './types'\nimport { fieldToFrontmatter, workflowFromFrontmatter } from './workflow'\n\nconst JSON_KEYS = new Set(['inputs'])\n\nconst oneLine = (text: string): string => text.replace(/\\s*\\n\\s*/g, ' ').trim()\n\n/** A skill slug: lowercase letters, digits and hyphens (what the backend accepts). */\nexport const skillSlug = (raw: string): string => raw.toLowerCase().replace(/[^a-z0-9-]/g, '')\n\n/** SKILL.md text for a prompt workflow: frontmatter (name, description, form) then the prompt. */\nexport function workflowToSkillMarkdown(workflow: WorkflowDefinition): string {\n const { run } = workflow\n if (run.kind !== 'prompt') throw new Error('Only skills that start a chat can be copied')\n const lines = [\n '---',\n `name: ${skillSlug(workflow.id)}`,\n `description: ${oneLine(workflow.description)}`,\n ]\n if (workflow.icon) lines.push(`icon: ${workflow.icon}`)\n if (workflow.landing !== 'chat') lines.push(`landing: ${workflow.landing}`)\n if (workflow.requiresFiles) lines.push('requires_files: true')\n if (workflow.inputs.length > 0) {\n lines.push(`inputs: ${JSON.stringify(workflow.inputs.map(fieldToFrontmatter))}`)\n }\n lines.push('---', '', run.promptTemplate.trim(), '')\n return lines.join('\\n')\n}\n\n/** Read a SKILL.md back into a workflow (the inverse of `workflowToSkillMarkdown`). */\nexport function workflowFromSkillMarkdown(id: string, text: string): WorkflowDefinition {\n const match = /^---\\n([\\s\\S]*?)\\n---\\n?([\\s\\S]*)$/.exec(text)\n const frontmatter: Record<string, unknown> = {}\n const body = match ? match[2] : text\n for (const line of (match ? match[1] : '').split('\\n')) {\n const i = line.indexOf(':')\n if (i < 1) continue\n const key = line.slice(0, i).trim()\n const value = line.slice(i + 1).trim()\n if (JSON_KEYS.has(key)) {\n try {\n frontmatter[key] = JSON.parse(value)\n } catch {\n // A hand-written YAML list: this reader only understands the JSON line.\n }\n } else if (value === 'true' || value === 'false') frontmatter[key] = value === 'true'\n else frontmatter[key] = value\n }\n return workflowFromFrontmatter(id, frontmatter, body)\n}\n","/**\n * The screen side of a stepped run: which step is in view, form problems, and what the primary\n * button does. The run itself happens elsewhere (the thread on the server, `useWorkflowThread`, or\n * the builder's preview): this hook gets each step's state and the host's actions, so every host\n * shows a run the same way (`WorkflowRunner`).\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport {\n assigneeName,\n canAssign,\n failedUpstream,\n isRunFinished,\n nextAction,\n runFieldsOf,\n stepPhase,\n validateStep,\n type WorkflowNextAction,\n type WorkflowStepPhase,\n} from './run'\nimport type {\n WorkflowErrors,\n WorkflowInputValue,\n WorkflowInputs,\n WorkflowStep,\n WorkflowStepState,\n} from './types'\n\nexport interface UseWorkflowViewOptions {\n steps: WorkflowStep[]\n /** Each step's state (missing = pending). */\n states: Record<string, WorkflowStepState>\n inputs: WorkflowInputs\n setInput: (name: string, value: WorkflowInputValue) => void\n /** Finish a person's step (a form, an upload, a review's approval). A throw keeps the user on it. */\n complete: (step: WorkflowStep) => Promise<void>\n /** Give up on a step so what waits for it can go on. */\n skip: (stepId: string) => Promise<void>\n /** Run a failed agent step again. */\n retry?: (stepId: string) => Promise<void>\n /**\n * Start the run's ready agent or action step when nothing else will (`needsStart`): create the\n * run's thread, or ask the server to run it again. Absent = the host's runs start by themselves.\n */\n start?: () => Promise<void>\n /** No run is under way to start a ready agent or action step (see `start`). */\n needsStart?: boolean\n /** Why the run could not start or go on, as the server said (shown on a step not started). */\n runError?: string | null\n /** A form step whose inputs can no longer change (committed, or recorded on the thread). */\n isLocked?: (stepId: string) => boolean\n /**\n * Whether `states` are known yet (a run opened later: its thread's log has arrived). Until then\n * the view waits to open the run where it is, instead of at its first step. Default true.\n */\n loaded?: boolean\n /** Send the work back from a ready step to an earlier one, with a note. */\n sendBack?: (stepId: string, to: string, note?: string) => Promise<void>\n /** A signer refuses a signature step, with a note. */\n decline?: (stepId: string, note?: string) => Promise<void>\n /** A member's name by id (`usr-…` / `agt-…`): assignees and signers are shown by name. */\n nameOf?: (id: string) => string | undefined\n}\n\n/** What `WorkflowRunner` shows and does. */\nexport interface WorkflowRunView {\n steps: WorkflowStep[]\n /** The step in view; `undefined` once the run's completion is shown. */\n step: WorkflowStep | undefined\n current: string | null\n isComplete: boolean\n inputs: WorkflowInputs\n setInput: (name: string, value: WorkflowInputValue) => void\n stateOf: (stepId: string) => WorkflowStepState | undefined\n phaseOf: (stepId: string) => WorkflowStepPhase\n /** The steps `stepId` waits for that failed (still, or skipped after failing). */\n failedUpstreamOf: (stepId: string) => ReturnType<typeof failedUpstream>\n isLocked: (stepId: string) => boolean\n /** The form step in view's problems, shown once moving on was attempted. */\n errors: WorkflowErrors\n /** An action is under way (completing, skipping). */\n busy: boolean\n actionError: string | null\n /** Some agent step is running. */\n isRunning: boolean\n /** A ready agent or action step starts only when the person starts it (`action` is `start`). */\n needsStart: boolean\n /** Why the run could not start or go on, as the server said. */\n runError: string | null\n action: WorkflowNextAction\n canBack: boolean\n next: () => Promise<void>\n back: () => void\n /** View a step (one further down the plan too: it can be skipped from there). */\n goTo: (stepId: string) => void\n skip: (stepId: string) => Promise<void>\n retry?: (stepId: string) => Promise<void>\n /** Send the work back from `stepId` to `to` (it is then in view). Absent = not offered. */\n sendBack?: (stepId: string, to: string, note?: string) => Promise<void>\n /** Decline a signature step. Absent = not offered. */\n decline?: (stepId: string, note?: string) => Promise<void>\n /** A member's name by id. */\n nameOf?: (id: string) => string | undefined\n /** Who a step is for, in words (a person step, a signature, an email), if anyone. */\n assigneeOf: (stepId: string) => string | undefined\n /** Show the run from the start again (a host that starts a new run resets its own state). */\n restart: () => void\n}\n\nconst errorMessage = (e: unknown): string =>\n e instanceof Error ? e.message : typeof e === 'string' ? e : 'Something went wrong.'\n\n/** The first step that is not finished yet: where a run opens. */\nfunction firstOpen(\n steps: WorkflowStep[],\n states: Record<string, WorkflowStepState>\n): string | null {\n const open = steps.find((s) => !['done', 'skipped'].includes(states[s.id]?.status ?? 'pending'))\n return open?.id ?? (steps.length && isRunFinished(steps, states) ? null : (steps[0]?.id ?? null))\n}\n\nexport function useWorkflowView(options: UseWorkflowViewOptions): WorkflowRunView {\n const { steps, states, inputs, setInput, loaded = true } = options\n const [current, setCurrent] = useState<string | null>(() => firstOpen(steps, states))\n const [showErrors, setShowErrors] = useState(false)\n const [busy, setBusy] = useState(false)\n const [actionError, setActionError] = useState<string | null>(null)\n const optionsRef = useRef(options)\n optionsRef.current = options\n\n // A run loaded after the first render (its steps or its thread's log arrived) opens where it is:\n // its current step, or its completion when every step has finished.\n const placed = useRef(steps.length > 0 && loaded)\n useEffect(() => {\n if (placed.current || steps.length === 0 || !loaded) return\n placed.current = true\n setCurrent(firstOpen(steps, states))\n }, [steps, states, loaded])\n\n const step = steps.find((s) => s.id === current)\n const following = useCallback(\n (id: string | null): string | null => {\n const i = steps.findIndex((s) => s.id === id)\n return steps[i + 1]?.id ?? null\n },\n [steps]\n )\n // Where to go once the step in view is finished (completed or skipped): the next one still to\n // do, else simply the next one. The step just finished counts as finished whatever the states\n // say yet (they may not have caught up).\n const onward = useCallback(\n (id: string): string | null => {\n const { steps: s, states: st } = optionsRef.current\n const i = s.findIndex((x) => x.id === id)\n const open = s\n .slice(i + 1)\n .find((x) => !['done', 'skipped'].includes(st[x.id]?.status ?? 'pending'))\n return open?.id ?? following(id)\n },\n [following]\n )\n const actionOptions = useCallback(\n (o: UseWorkflowViewOptions) => ({\n needsStart: !!o.start && !!o.needsStart,\n canRetry: !!o.retry,\n }),\n []\n )\n const action: WorkflowNextAction = busy\n ? 'wait'\n : nextAction(steps, states, current, actionOptions(options))\n\n const next = useCallback(async () => {\n const { steps: s, states: st, inputs: values } = optionsRef.current\n const at = s.find((x) => x.id === current)\n const act = nextAction(s, st, current, actionOptions(optionsRef.current))\n if (!at || act === 'wait' || busy) return\n setActionError(null)\n if (act === 'finish') return setCurrent(null)\n if (act === 'move') return setCurrent(following(current))\n setBusy(true)\n try {\n // Starting or retrying keeps the step in view: it is what runs now.\n if (act === 'start' || act === 'retry') {\n await (act === 'start' ? optionsRef.current.start?.() : optionsRef.current.retry?.(at.id))\n return\n }\n if (Object.keys(validateStep(at, values)).length > 0) {\n setShowErrors(true)\n return\n }\n await optionsRef.current.complete(at)\n setShowErrors(false)\n setCurrent(onward(at.id) ?? current)\n } catch (e) {\n setActionError(errorMessage(e))\n } finally {\n setBusy(false)\n }\n }, [current, busy, following, onward, actionOptions])\n\n const goTo = useCallback((stepId: string) => {\n setShowErrors(false)\n setActionError(null)\n setCurrent(stepId)\n }, [])\n\n const index = steps.findIndex((s) => s.id === current)\n const back = useCallback(() => {\n const i = steps.findIndex((s) => s.id === current)\n const to = i < 0 ? steps[steps.length - 1] : steps[i - 1]\n if (to) goTo(to.id)\n }, [steps, current, goTo])\n\n const act = useCallback(\n (fn: ((id: string) => Promise<void>) | undefined) =>\n fn &&\n (async (stepId: string) => {\n setBusy(true)\n setActionError(null)\n try {\n await fn(stepId)\n } catch (e) {\n setActionError(errorMessage(e))\n } finally {\n setBusy(false)\n }\n }),\n []\n )\n // A skip moves the view on the way completing does (when it was the step in view).\n const currentRef = useRef(current)\n currentRef.current = current\n const skip = useMemo(\n () =>\n act(async (id) => {\n await optionsRef.current.skip(id)\n if (currentRef.current !== id) return\n setShowErrors(false)\n setCurrent(onward(id) ?? id)\n }) as (id: string) => Promise<void>,\n [act, onward]\n )\n const retry = useMemo(\n () =>\n options.retry ? act((id) => optionsRef.current.retry?.(id) ?? Promise.resolve()) : undefined,\n // Only whether the host offers retry matters here.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [act, !!options.retry]\n )\n\n const sendBack = useMemo(\n () =>\n options.sendBack\n ? async (stepId: string, to: string, note?: string) => {\n setBusy(true)\n setActionError(null)\n try {\n await optionsRef.current.sendBack?.(stepId, to, note)\n setShowErrors(false)\n setCurrent(to)\n } catch (e) {\n setActionError(errorMessage(e))\n } finally {\n setBusy(false)\n }\n }\n : undefined,\n // Only whether the host offers it matters here.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [!!options.sendBack]\n )\n const declineWithNote = useMemo(\n () =>\n options.decline\n ? async (stepId: string, note?: string) => {\n setBusy(true)\n setActionError(null)\n try {\n await optionsRef.current.decline?.(stepId, note)\n } catch (e) {\n setActionError(errorMessage(e))\n } finally {\n setBusy(false)\n }\n }\n : undefined,\n // Only whether the host offers it matters here.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [!!options.decline]\n )\n\n const isLocked = useCallback(\n (stepId: string) => optionsRef.current.isLocked?.(stepId) ?? false,\n []\n )\n\n return {\n steps,\n step,\n current,\n isComplete: current === null,\n inputs,\n setInput,\n stateOf: (id) => states[id],\n phaseOf: (id) => stepPhase(steps, states, id),\n failedUpstreamOf: (id) => failedUpstream(steps, states, id),\n isLocked,\n errors: showErrors && step && !isLocked(step.id) ? validateStep(step, inputs) : {},\n busy,\n actionError,\n isRunning: Object.values(states).some((s) => s.status === 'running'),\n needsStart: !!options.start && !!options.needsStart,\n runError: options.runError ?? null,\n action,\n canBack: (current === null || index > 0) && !busy,\n next,\n back,\n goTo,\n skip,\n retry,\n sendBack,\n decline: declineWithNote,\n nameOf: options.nameOf,\n assigneeOf: (id) => {\n const s = steps.find((x) => x.id === id)\n if (!s || !canAssign(s)) return undefined\n return assigneeName(s.assignee, {\n nameOf: options.nameOf,\n inputs,\n fields: runFieldsOf(steps),\n announcedTo: states[id]?.announcedTo,\n })\n },\n restart: () => {\n setShowErrors(false)\n setActionError(null)\n setCurrent(steps[0]?.id ?? null)\n },\n }\n}\n","/**\n * What a step bar shows of a run: a window of a few levels of the graph (`stepLevels`) around the\n * step in view — previous, current, next — with how many steps it hides on either side, each\n * parallel level collapsed to one primary step plus the rest, and the running and failed steps the\n * window does not show (so work that is still going on, or broke, is never out of sight). Pure: both bars\n * (`WorkflowStepBar` in a runner, `WorkflowThreadStrip` on a thread) render from it.\n */\n\nimport type { WorkflowStepPhase } from './run'\n\n/** A step label's widest before it is cut (px): 20rem; the step in view's is wider (26rem). */\nexport const LABEL_MAX_PX = 320\n/** About one character of a label (12px text). */\nconst CHAR_PX = 6.5\n/** A level's room beyond its label: badge, padding, gaps and the shortest line. */\nconst LEVEL_CHROME_PX = 60\n/** A parallel level's \"+N\" chip. */\nconst GROUP_CHIP_PX = 32\n\n/**\n * The room a level needs to show its name uncut (up to `LABEL_MAX_PX`): a bar shows a flow whole\n * only when every level has this, so names are never squeezed for the sake of showing it all.\n */\nexport function levelRoomPx(titles: string[]): number {\n const label = Math.max(0, ...titles.map((t) => Math.min(LABEL_MAX_PX, t.length * CHAR_PX)))\n return Math.ceil(label + LEVEL_CHROME_PX + (titles.length > 1 ? GROUP_CHIP_PX : 0))\n}\n\n/** A step as far as the window is concerned. */\nexport interface StepWindowStep {\n id: string\n}\n\n/** One level of the graph: a step, or steps that run side by side (a parallel group). */\nexport interface StepWindowLevel<T extends StepWindowStep> {\n index: number\n steps: T[]\n /** The step the bar shows for the level: the running one, else the one in view, else … */\n primary: T\n /** The level's other steps, behind a \"+N\" chip. */\n others: T[]\n /** Where the level stands relative to the step in view. */\n role: 'previous' | 'current' | 'next' | 'other'\n}\n\nexport interface StepWindow<T extends StepWindowStep> {\n levels: StepWindowLevel<T>[]\n /** The levels in the window, in order. */\n visible: StepWindowLevel<T>[]\n /** The window's first level and the one after its last. */\n start: number\n end: number\n /** The level of the step in view. */\n currentLevel: number\n /** Steps in the levels before and after the window. */\n hiddenBefore: number\n hiddenAfter: number\n canBack: boolean\n canForward: boolean\n /** Running steps the bar does not show: outside the window, or collapsed in a group. */\n runningHidden: T[]\n /** Failed steps the bar does not show, likewise: a failure is always in sight. */\n failedHidden: T[]\n /** 1-based position of the step in view among all steps, and how many there are. */\n position: number\n total: number\n}\n\nexport interface StepWindowOptions<T extends StepWindowStep> {\n levels: T[][]\n phaseOf: (id: string) => WorkflowStepPhase\n /** The step in view; none (or unknown) = the step the run is at (`activeStepId`). */\n current?: string | null\n /** The window's first level, as the arrows moved it; none = around the step in view. */\n start?: number | null\n /** How many levels the window shows (3: previous, current, next). */\n span?: number\n}\n\n/** Where a person's attention goes first in a level, after a running step and the one in view. */\nconst ATTENTION: WorkflowStepPhase[] = ['waiting', 'failed', 'ready']\n\n/**\n * The step a run is at, when nothing else says which step is in view: a running one, else one\n * waiting on someone, else one that failed, else one ready to do, else the last one.\n */\nexport function activeStepId<T extends StepWindowStep>(\n levels: T[][],\n phaseOf: (id: string) => WorkflowStepPhase\n): string | undefined {\n const all = levels.flat()\n for (const phase of ['running', ...ATTENTION] as WorkflowStepPhase[]) {\n const hit = all.find((s) => phaseOf(s.id) === phase)\n if (hit) return hit.id\n }\n return all[all.length - 1]?.id\n}\n\nfunction primaryOf<T extends StepWindowStep>(\n steps: T[],\n phaseOf: (id: string) => WorkflowStepPhase,\n current: string | undefined\n): T {\n return (\n steps.find((s) => phaseOf(s.id) === 'running') ??\n steps.find((s) => s.id === current) ??\n ATTENTION.map((p) => steps.find((s) => phaseOf(s.id) === p)).find(Boolean) ??\n steps[0]\n )\n}\n\nexport function stepWindow<T extends StepWindowStep>({\n levels: raw,\n phaseOf,\n current,\n start: requested,\n span = 3,\n}: StepWindowOptions<T>): StepWindow<T> {\n const levelsIn = raw.filter((l) => l.length > 0)\n const known = current && levelsIn.some((l) => l.some((s) => s.id === current))\n const at = known ? (current as string) : activeStepId(levelsIn, phaseOf)\n const currentLevel = Math.max(\n 0,\n levelsIn.findIndex((l) => l.some((s) => s.id === at))\n )\n const n = levelsIn.length\n const size = Math.max(1, Math.min(span, n))\n const maxStart = Math.max(0, n - size)\n // Around the step in view: one level before it when the window has room for three, else it\n // leads (narrow: current and next). Clamped, so the window is always full.\n const auto = currentLevel - (size >= 3 ? 1 : 0)\n const start = Math.min(maxStart, Math.max(0, requested ?? auto))\n const end = start + size\n\n const levels: StepWindowLevel<T>[] = levelsIn.map((steps, index) => {\n const primary = primaryOf(steps, phaseOf, at)\n return {\n index,\n steps,\n primary,\n others: steps.filter((s) => s !== primary),\n role:\n index === currentLevel\n ? 'current'\n : index === currentLevel - 1\n ? 'previous'\n : index === currentLevel + 1\n ? 'next'\n : 'other',\n }\n })\n const visible = levels.slice(start, end)\n const count = (ls: StepWindowLevel<T>[]) => ls.reduce((sum, l) => sum + l.steps.length, 0)\n const shown = new Set(visible.map((l) => l.primary.id))\n const all = levelsIn.flat()\n return {\n levels,\n visible,\n start,\n end,\n currentLevel,\n hiddenBefore: count(levels.slice(0, start)),\n hiddenAfter: count(levels.slice(end)),\n canBack: start > 0,\n canForward: end < n,\n runningHidden: all.filter((s) => phaseOf(s.id) === 'running' && !shown.has(s.id)),\n failedHidden: all.filter((s) => phaseOf(s.id) === 'failed' && !shown.has(s.id)),\n position: Math.max(1, all.findIndex((s) => s.id === at) + 1),\n total: all.length,\n }\n}\n","/**\n * The frame both step bars share (`WorkflowStepBar` in a runner, `WorkflowThreadStrip` on a\n * thread): `‹ … [previous] [CURRENT] [next] … ›`, from `stepWindow`. Each visible level shows one\n * step by name (its pill is the host's), a parallel level adds a \"+N\" chip that lists the group,\n * \"…\" on either side lists every step, and every running step the window does not show gets a\n * \"Working: <title>\" pill at the end, every failed one a \"Failed: <title>\" pill. The bar is a nav landmark; ←/→ (Home/End) move the window.\n * Steps look as they do on the builder's canvas (`StepChip`): each kind in its own colour, and the\n * line out of a finished step in that step's colour.\n */\n\nimport { useEffect, useRef, useState, type KeyboardEvent, type ReactNode } from 'react'\nimport { ChevronLeft, ChevronRight, Loader2 } from 'lucide-react'\nimport { cn, Popover, PopoverContent, PopoverTrigger } from '@arbidocs/react/ui'\nimport { useElementSize } from '../../lib/useElementSize'\nimport type { WorkflowStepPhase } from './run'\nimport { StepBadgeMark, StepChip } from './StepChip'\nimport {\n levelRoomPx,\n stepWindow,\n type StepWindow,\n type StepWindowLevel,\n type StepWindowStep,\n} from './stepWindow'\n\nexport interface StepBarLabels {\n nav: string\n back: string\n forward: string\n /** The \"…\" before the window; `{count}` is replaced. */\n hiddenBefore: string\n /** The \"…\" after the window; `{count}` is replaced. */\n hiddenAfter: string\n /** The full list's heading; `{position}` and `{total}` are replaced. */\n position: string\n /** A parallel group's chip; `{count}` is replaced. */\n parallel: string\n inParallel: string\n /** A running step out of view; `{title}` is replaced. */\n working: string\n /** Several more running out of view; `{count}` is replaced. */\n moreWorking: string\n /** A failed step out of view; `{title}` is replaced. */\n failedStep: string\n /** A step that waits for someone; `{name}` is replaced. */\n waitingFor: string\n phases: Record<WorkflowStepPhase, string>\n}\n\nexport const DEFAULT_STEP_BAR_LABELS: StepBarLabels = {\n nav: 'Workflow steps',\n back: 'Earlier steps',\n forward: 'Later steps',\n hiddenBefore: '{count} earlier steps',\n hiddenAfter: '{count} later steps',\n position: 'Step {position} of {total}',\n parallel: '{count} more in parallel',\n inParallel: 'In parallel',\n working: 'Working: {title}',\n moreWorking: '+{count} working',\n failedStep: 'Failed: {title}',\n waitingFor: 'Waiting for {name}',\n phases: {\n blocked: 'Not started',\n ready: 'To do',\n running: 'Working',\n waiting: 'Waiting',\n done: 'Done',\n skipped: 'Skipped',\n failed: 'Failed',\n },\n}\n\n/**\n * A label is the full title, cut with an ellipsis only when very long (in full in `title`) or when\n * the bar is out of room — connectors give up their room first. Its widest is `LABEL_MAX_PX`\n * (20rem).\n */\nexport const STEP_LABEL = 'min-w-[2.5rem] truncate'\nexport const STEP_LABEL_MAX = 'max-w-[20rem]'\n/**\n * The step in view's label: wider (26rem), and the last to give up room (what is around it shrinks\n * a million times harder, so it is not cut while anything else on its chip or the bar can still\n * give). Its chip already has two lines (the kind above the name), so it is cut, not wrapped.\n */\nexport const STEP_LABEL_CURRENT = 'block min-w-[2.5rem] max-w-[26rem] truncate'\n/**\n * What follows a name on its pill (\"Waiting for …\"): cut before the name is. Flex shares a shortage\n * in proportion, so the factor is huge: even a sliver taken from the name would show an ellipsis.\n */\nexport const STEP_EXTRA = 'min-w-[3rem] shrink-[1000000] truncate font-normal opacity-80'\n\nconst fill = (template: string, values: Record<string, string | number>) =>\n Object.entries(values).reduce((s, [k, v]) => s.replace(`{${k}}`, String(v)), template)\n\n/** A step in the frame's lists: its title, for naming it. */\nexport interface StepBarStep extends StepWindowStep {\n title: string\n}\n\nexport interface StepBarFrameProps<T extends StepBarStep> {\n levels: T[][]\n phaseOf: (id: string) => WorkflowStepPhase\n /** The step in view (none = where the run is). */\n current?: string | null\n /** Go to a step: from a group, the full list or a \"Working\" pill. */\n onSelect: (id: string) => void\n /** The pill of a level's primary step (a button or a popover trigger). */\n renderStep: (step: T, level: StepWindowLevel<T>, win: StepWindow<T>, narrow: boolean) => ReactNode\n /** What follows a level's pill (signals it raised…). */\n renderAfter?: (level: StepWindowLevel<T>) => ReactNode\n /** Before the steps / after them: shown while the window is at that end. */\n leading?: ReactNode\n trailing?: ReactNode\n /**\n * Room the bar needs beyond the levels' names: always (a wider step in view), and for `leading`\n * and `trailing` while the window reaches that end. A window is only as wide as fits with it.\n */\n reservePx?: { always?: number; leading?: number; trailing?: number }\n /** Steps that cannot be gone to (the completion marker). */\n isSelectable?: (id: string) => boolean\n icon?: (step: T) => ReactNode\n /** A step's kind (`agent`, `review`…), for its colour; none = neutral. */\n kindOf?: (step: T) => string\n disabled?: boolean\n labels?: Partial<StepBarLabels>\n tid: (suffix: string) => string\n className?: string\n}\n\n/** Below this width the window shows two levels: the current one and the next. */\nconst NARROW_PX = 560\n/** The ‹ › arrows, and a \"…N\" counter on a side that hides steps. */\nconst ARROWS_PX = 56\nconst HIDDEN_PX = 40\n\nexport function StepBarFrame<T extends StepBarStep>({\n levels,\n phaseOf,\n current,\n onSelect,\n renderStep,\n renderAfter,\n leading,\n trailing,\n reservePx = {},\n isSelectable = () => true,\n icon,\n kindOf = () => 'adhoc',\n disabled,\n labels,\n tid,\n className,\n}: StepBarFrameProps<T>) {\n const l = { ...DEFAULT_STEP_BAR_LABELS, ...labels }\n const box = useRef<HTMLElement>(null)\n const { width } = useElementSize(box)\n const narrow = width > 0 && width < NARROW_PX\n // The arrows' window start; none = around the step in view. A new step in view re-centres it.\n const [start, setStart] = useState<number | null>(null)\n useEffect(() => setStart(null), [current])\n // Narrow: the step in view alone, with a \"3/12\" counter. Wider: as many levels around it as have\n // room for their names uncut — the whole flow when it all fits — down to the step in view alone.\n const roomOf = (lv: T[]) => levelRoomPx(lv.map((s) => s.title))\n const fits = (k: number) => {\n const w = stepWindow({ levels, phaseOf, current, start, span: k })\n const reserve =\n (reservePx.always ?? 0) +\n (w.start === 0 ? (reservePx.leading ?? 0) : 0) +\n (w.canForward ? 0 : (reservePx.trailing ?? 0)) +\n ARROWS_PX +\n (w.hiddenBefore ? HIDDEN_PX : 0) +\n (w.hiddenAfter ? HIDDEN_PX : 0)\n return width - reserve >= w.visible.reduce((sum, lv) => sum + roomOf(lv.steps), 0)\n }\n // Not measured yet (no layout): previous, current and next.\n let span = width > 0 ? 1 : 3\n if (!narrow && width > 0)\n for (let k = levels.length; k > 1; k--)\n if (fits(k)) {\n span = k\n break\n }\n const win = stepWindow({ levels, phaseOf, current, start, span })\n const [listOpen, setListOpen] = useState<'before' | 'after' | null>(null)\n\n const move = (to: number) => setStart(Math.max(0, Math.min(win.levels.length - 1, to)))\n // Moved from the keyboard: the focus goes to the window's first step, so it never stays on a\n // step the window has scrolled away from.\n const keyMoved = useRef(false)\n useEffect(() => {\n if (!keyMoved.current) return\n keyMoved.current = false\n box.current?.querySelector<HTMLElement>('[data-role] button')?.focus()\n }, [win.start])\n const select = (id: string) => {\n setListOpen(null)\n setStart(null)\n onSelect(id)\n }\n const onKeyDown = (e: KeyboardEvent<HTMLElement>) => {\n // Popovers are portalled but their keys bubble here through React: only the bar's own.\n if (!box.current?.contains(e.target as Node)) return\n const to =\n e.key === 'ArrowLeft'\n ? win.start - 1\n : e.key === 'ArrowRight'\n ? win.start + 1\n : e.key === 'Home'\n ? 0\n : e.key === 'End'\n ? win.levels.length\n : null\n if (to === null) return\n e.preventDefault()\n keyMoved.current = true\n move(to)\n }\n\n const row = (s: T, isCurrent: boolean) => {\n const phase = phaseOf(s.id)\n const selectable = isSelectable(s.id)\n return (\n <button\n key={s.id}\n type=\"button\"\n disabled={!selectable || disabled}\n onClick={() => select(s.id)}\n aria-current={isCurrent ? 'step' : undefined}\n className={cn(\n `wf-kind-${kindOf(s)}`,\n 'flex w-full min-w-0 items-center gap-2 rounded-md px-2 py-1 text-left text-xs hover:bg-accent disabled:cursor-default disabled:hover:bg-transparent',\n isCurrent && 'bg-accent font-semibold'\n )}\n data-phase={phase}\n data-testid={tid(`list-step-${s.id}`)}\n >\n <span\n className={cn(\n 'wf-badge flex size-5 shrink-0 items-center justify-center rounded-md [&_svg]:size-3',\n phase === 'done' && 'bg-[hsl(var(--wf-accent))] text-card',\n phase === 'blocked' && 'opacity-60'\n )}\n aria-hidden\n >\n <StepBadgeMark phase={phase} icon={icon?.(s)} />\n </span>\n <span className=\"min-w-0 flex-1 truncate\" title={s.title}>\n {s.title}\n </span>\n <span className=\"shrink-0 text-[10px] font-normal text-muted-foreground\">\n {l.phases[phase]}\n </span>\n </button>\n )\n }\n const at = win.levels[win.currentLevel]\n const atId = at && (at.steps.find((s) => s.id === current) ?? at.primary).id\n\n // The full list opens at the step in view, focused (a 40-step list starts where you are).\n const focusCurrent = (e: Event) => {\n const el = (e.currentTarget as HTMLElement | null)?.querySelector<HTMLElement>(\n '[aria-current=\"step\"]'\n )\n if (!el) return\n e.preventDefault()\n el.focus()\n el.scrollIntoView?.({ block: 'nearest' })\n }\n // A list of steps: all of them (the narrow counter), or those a \"…N\" hides on its side.\n const stepList = (side?: 'before' | 'after') => (\n <>\n <p className=\"px-2 py-1 text-[11px] font-medium text-muted-foreground\">\n {side\n ? fill(side === 'before' ? l.hiddenBefore : l.hiddenAfter, {\n count: side === 'before' ? win.hiddenBefore : win.hiddenAfter,\n })\n : fill(l.position, { position: win.position, total: win.total })}\n </p>\n <ol>\n {(side === 'before'\n ? win.levels.slice(0, win.start)\n : side === 'after'\n ? win.levels.slice(win.end)\n : win.levels\n ).map((level) => (\n <li\n key={level.index}\n className={cn(level.steps.length > 1 && 'my-0.5 border-l-2 border-border pl-1')}\n >\n {level.steps.length > 1 && (\n <p className=\"px-2 text-[10px] uppercase tracking-wide text-muted-foreground\">\n {l.inParallel}\n </p>\n )}\n {level.steps.map((s) => row(s, s.id === atId))}\n </li>\n ))}\n </ol>\n </>\n )\n\n // \"…\": how many steps the window hides on that side; it opens the whole list.\n // Narrow, one counter (\"3/12\") after the steps stands for both.\n const overflow = (side: 'before' | 'after', count: number) =>\n narrow && side === 'before' ? null : narrow && side === 'after' ? (\n win.hiddenBefore + win.hiddenAfter > 0 ? (\n <Popover open={listOpen === side} onOpenChange={(o) => setListOpen(o ? side : null)}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"flex shrink-0 items-center rounded-full px-1.5 py-1 text-[11px] tabular-nums text-muted-foreground hover:bg-accent hover:text-foreground\"\n aria-label={fill(l.position, { position: win.position, total: win.total })}\n title={fill(l.position, { position: win.position, total: win.total })}\n data-testid={tid('steps-count')}\n >\n {win.position}/{win.total}\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"end\"\n className=\"max-h-[min(24rem,70vh)] w-72 overflow-y-auto p-1\"\n onOpenAutoFocus={focusCurrent}\n data-testid={tid('all-steps')}\n >\n {stepList()}\n </PopoverContent>\n </Popover>\n ) : null\n ) : count > 0 ? (\n <Popover open={listOpen === side} onOpenChange={(o) => setListOpen(o ? side : null)}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"flex shrink-0 items-center gap-0.5 rounded-full px-1.5 py-1 text-xs text-muted-foreground hover:bg-accent hover:text-foreground\"\n aria-label={fill(side === 'before' ? l.hiddenBefore : l.hiddenAfter, { count })}\n title={fill(side === 'before' ? l.hiddenBefore : l.hiddenAfter, { count })}\n data-testid={tid(`hidden-${side}`)}\n >\n <span aria-hidden>…</span>\n <span className=\"tabular-nums\">{count}</span>\n </button>\n </PopoverTrigger>\n <PopoverContent\n align={side === 'before' ? 'start' : 'end'}\n className=\"max-h-[min(24rem,70vh)] w-80 overflow-y-auto p-1\"\n onOpenAutoFocus={focusCurrent}\n data-testid={tid('all-steps')}\n >\n {stepList(side)}\n </PopoverContent>\n </Popover>\n ) : null\n\n const arrow = (dir: 'back' | 'forward') => {\n const can = dir === 'back' ? win.canBack : win.canForward\n const Icon = dir === 'back' ? ChevronLeft : ChevronRight\n return (\n <button\n type=\"button\"\n onClick={() => move(win.start + (dir === 'back' ? -1 : 1))}\n disabled={!can}\n aria-label={dir === 'back' ? l.back : l.forward}\n title={dir === 'back' ? l.back : l.forward}\n className=\"flex size-6 shrink-0 items-center justify-center rounded-full text-muted-foreground hover:bg-accent hover:text-foreground disabled:pointer-events-none disabled:opacity-30\"\n data-testid={tid(`steps-${dir}`)}\n >\n <Icon className=\"size-4\" />\n </button>\n )\n }\n\n const running = win.runningHidden\n const outOfViewChip = (s: T, kind: 'working' | 'failedStep') => (\n <StepChip\n key={s.id}\n kind={kindOf(s)}\n phase={kind === 'working' ? 'running' : 'failed'}\n label={fill(l[kind], { title: s.title })}\n labelClassName={narrow ? 'sr-only' : 'truncate'}\n onClick={() => select(s.id)}\n className=\"max-w-[14rem] shrink\"\n title={fill(l[kind], { title: s.title })}\n data-testid={tid(`${kind === 'working' ? 'working' : 'failed'}-${s.id}`)}\n />\n )\n\n return (\n <nav\n ref={box}\n aria-label={l.nav}\n onKeyDown={onKeyDown}\n className={cn('flex min-w-0 items-center gap-1', className)}\n data-testid={tid('steps')}\n data-narrow={narrow || undefined}\n >\n {arrow('back')}\n {win.start === 0 && leading}\n {overflow('before', win.hiddenBefore)}\n <ol className=\"flex min-w-0 flex-[1_1_auto] items-center gap-1\">\n {win.visible.map((level, i) => (\n <li\n key={level.steps.map((s) => s.id).join('+')}\n // Levels take their names' room and the connectors what is left. Short of room, the\n // connectors give theirs first (down to a stub), then the \"Working\" pills, then the\n // other levels' names, then what follows the current name (\"Waiting for …\"), and only\n // then is the current name wrapped and cut — never below a readable start. Flex shares\n // a shortage in proportion, so the other levels shrink a million times harder: even a\n // sliver taken from the current name would show an ellipsis. (The current level keeps\n // a factor of 1: factors summing under 1 would leave part of the shortage unabsorbed.)\n className={cn(\n 'flex min-w-[5.5rem] basis-auto items-center gap-1',\n i === win.visible.length - 1 ? 'grow-0' : 'grow',\n level.index === win.currentLevel ? 'shrink' : 'shrink-[1000000]'\n )}\n data-role={level.role}\n >\n {renderStep(level.primary, level, win, narrow)}\n {level.others.length > 0 && (\n <GroupChip\n level={level}\n label={fill(l.parallel, { count: level.others.length })}\n heading={l.inParallel}\n row={(s) => row(s, s.id === atId)}\n tid={tid}\n />\n )}\n {renderAfter?.(level)}\n {i < win.visible.length - 1 && !narrow && (\n <span\n aria-hidden\n className={cn('wf-link', `wf-kind-${kindOf(level.primary)}`)}\n data-done={\n level.steps.every((s) => ['done', 'skipped'].includes(phaseOf(s.id))) || undefined\n }\n />\n )}\n </li>\n ))}\n </ol>\n {overflow('after', win.hiddenAfter)}\n {!win.canForward && trailing}\n {arrow('forward')}\n {running.length > 0 && (\n <div\n className={cn('flex shrink-[1000] items-center gap-1', !narrow && 'min-w-[6.5rem]')}\n data-testid={tid('working')}\n >\n {(running.length > 2 ? running.slice(0, 1) : running).map((s) =>\n outOfViewChip(s, 'working')\n )}\n {running.length > 2 && (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"flex shrink-0 items-center gap-1 rounded-lg border border-border bg-card px-2 py-1 text-xs text-muted-foreground hover:text-foreground\"\n data-testid={tid('working-more')}\n >\n <Loader2 className=\"size-3.5 animate-spin\" />\n {fill(l.moreWorking, { count: running.length - 1 })}\n </button>\n </PopoverTrigger>\n <PopoverContent align=\"end\" className=\"w-72 p-1\">\n {running.slice(1).map((s) => row(s, false))}\n </PopoverContent>\n </Popover>\n )}\n </div>\n )}\n {win.failedHidden.length > 0 && (\n <div\n className={cn('flex shrink-[1000] items-center gap-1', !narrow && 'min-w-[6.5rem]')}\n data-testid={tid('failed')}\n >\n {win.failedHidden.map((s) => outOfViewChip(s, 'failedStep'))}\n </div>\n )}\n </nav>\n )\n}\n\n/** \"+N\": the rest of a parallel level, listed on demand. */\nfunction GroupChip<T extends StepBarStep>({\n level,\n label,\n heading,\n row,\n tid,\n}: {\n level: StepWindowLevel<T>\n label: string\n heading: string\n row: (s: T) => ReactNode\n tid: (suffix: string) => string\n}) {\n return (\n <Popover>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n className=\"shrink-0 rounded-md border border-border bg-card px-1.5 py-0.5 text-[11px] font-medium tabular-nums text-muted-foreground shadow-sm hover:text-foreground\"\n aria-label={label}\n title={label}\n data-testid={tid(`group-${level.steps[0].id}`)}\n >\n +{level.others.length}\n </button>\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className=\"w-72 p-1\"\n data-testid={tid(`group-${level.steps[0].id}-list`)}\n >\n <p className=\"px-2 py-1 text-[11px] font-medium text-muted-foreground\">{heading}</p>\n {level.steps.map(row)}\n </PopoverContent>\n </Popover>\n )\n}\n","/**\n * The runner's step parts beyond a form, an upload and an agent's answer: an action step (a\n * signature, an email draft, a tabular review), a review's fields, its send-back and what it\n * approved, the \"Waiting for <person>\" line, and \"Open in Editor\" for a tracked-changes version.\n * Everything that leaves the runner (opening a document, mail, a grid, the sign flow) goes through\n * the host's `WorkflowRunnerActions`.\n */\n\nimport { useState, type ReactNode } from 'react'\nimport {\n Check,\n Clock,\n CornerUpLeft,\n ExternalLink,\n FileText,\n Hourglass,\n Loader2,\n Mail,\n MessageSquare,\n PenLine,\n ShieldCheck,\n Table2,\n UserRound,\n X,\n} from 'lucide-react'\nimport { Button, Textarea, cn } from '@arbidocs/react/ui'\nimport { sendBackTargets, splitDocRef } from './run'\nimport { formatDate, shownValue } from './StepDocuments'\nimport type { WorkflowRunView } from './useWorkflowView'\nimport type {\n WorkflowActionStep,\n WorkflowAgentStep,\n WorkflowReviewStep,\n WorkflowStepState,\n} from './types'\n\n/** Where the runner hands off to the host. Each is optional: absent, its button is not shown. */\nexport interface WorkflowRunnerActions {\n /** Open a document, or one version of it (`doc-…@v3`). */\n openDocument?: (ref: string) => void\n /** Open the document of a signature step to sign it (the signer's turn). */\n sign?: (step: WorkflowActionStep, state: WorkflowStepState) => void\n /** Open an email step's draft in native mail. */\n openDraft?: (draftId: string, mailbox?: string) => void\n /** Open a finished tabular review's grid: its columns (labels) over its documents. */\n openReview?: (tags: string[], documents: string[]) => void\n /** Open a tracked-changes version in the Word editor, to accept or reject the changes. */\n openRedline?: (ref: string) => void\n /** Show a step's answer where it is in the thread. */\n openMessage?: (messageId: string) => void\n /** The person on screen (`usr-…`): a signature offers \"Open and sign\" to its signers only. */\n me?: string\n}\n\nexport interface WorkflowStepPartsLabels {\n waitingFor: string\n sendBack: string\n sendBackTo: string\n sendBackNote: string\n cancel: string\n sentBackHere: string\n approvedBy: string\n approvedAt: string\n approvedWhat: string\n viewAnswer: string\n fieldsHeading: string\n signers: string\n signed: string\n notSigned: string\n openAndSign: string\n decline: string\n declineNote: string\n declineConfirm: string\n declined: string\n signedVersion: string\n preparingSign: string\n expires: string\n preparingDraft: string\n draftReady: string\n openDraft: string\n emailSent: string\n reviewRunning: string\n reviewDone: string\n openReview: string\n openInEditor: string\n redlineHint: string\n someone: string\n}\n\nexport const DEFAULT_WORKFLOW_STEP_PARTS_LABELS: WorkflowStepPartsLabels = {\n waitingFor: 'Waiting for {name}',\n sendBack: 'Send back',\n sendBackTo: 'Send back to',\n sendBackNote: 'What needs to change? (optional)',\n cancel: 'Cancel',\n sentBackHere: 'This step was sent back to be done again.',\n approvedBy: 'Approved by {name}',\n approvedAt: '{date}',\n approvedWhat: 'What was approved',\n viewAnswer: 'View the answer',\n fieldsHeading: 'Recorded with the approval',\n signers: 'Signers',\n signed: 'Signed',\n notSigned: 'Not signed yet',\n openAndSign: 'Open and sign',\n decline: 'Decline',\n declineNote: 'Why are you declining? (optional)',\n declineConfirm: 'Decline to sign',\n declined: 'Declined by {name}.',\n signedVersion: 'Open the signed version',\n preparingSign: 'Preparing the signature request…',\n expires: 'Expires {date}',\n preparingDraft: 'Preparing the draft…',\n draftReady: 'The draft is ready in native mail. Check it, send it, then mark it as sent.',\n openDraft: 'Open draft',\n emailSent: 'Sent.',\n reviewRunning: 'Reviewing the documents…',\n reviewDone: 'Reviewed {docs} documents in {cols} columns.',\n openReview: 'Open the review',\n openInEditor: 'Open in Editor',\n redlineHint: 'The edits are tracked changes: accept or reject each one in Word.',\n someone: 'someone',\n}\n\nconst docName = (ref: string, nameOfDoc?: (id: string) => string | undefined) => {\n const { id, version } = splitDocRef(ref)\n const name = nameOfDoc?.(id) ?? id\n return version ? `${name} · v${version}` : name\n}\n\n/** A document version as a chip, opening it when the host can. */\nfunction DocChip({\n docRef,\n actions,\n nameOfDoc,\n testId,\n}: {\n docRef: string\n actions?: WorkflowRunnerActions\n nameOfDoc?: (id: string) => string | undefined\n testId?: string\n}) {\n const label = docName(docRef, nameOfDoc)\n const cls =\n 'inline-flex max-w-full items-center gap-1 rounded-md border border-border px-1.5 py-0.5 text-xs'\n return actions?.openDocument ? (\n <button\n type=\"button\"\n onClick={() => actions.openDocument?.(docRef)}\n className={cn(cls, 'hover:border-primary/40 hover:text-primary')}\n title={docRef}\n data-testid={testId}\n >\n <FileText className=\"size-3 shrink-0\" /> <span className=\"truncate\">{label}</span>\n </button>\n ) : (\n <span className={cls} title={docRef} data-testid={testId}>\n <FileText className=\"size-3 shrink-0\" /> <span className=\"truncate\">{label}</span>\n </span>\n )\n}\n\n/** \"Waiting for Sophie Lindqvist\" on a step a person has to do. */\nexport function AssigneeLine({\n run,\n stepId,\n l,\n testId,\n}: {\n run: WorkflowRunView\n stepId: string\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const name = run.assigneeOf(stepId)\n const phase = run.phaseOf(stepId)\n if (!name || !['ready', 'waiting', 'blocked'].includes(phase)) return null\n return (\n <p\n className=\"flex items-center gap-1.5 text-xs text-muted-foreground\"\n data-testid={`${testId}-assignee`}\n >\n <UserRound className=\"size-3.5\" /> {l.waitingFor.replace('{name}', name)}\n </p>\n )\n}\n\n/** A step reopened by a send-back says so. */\nexport function SentBackNote({\n state,\n l,\n testId,\n}: {\n state: WorkflowStepState | undefined\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n if (!state?.sentBack) return null\n return (\n <p\n className=\"flex items-center gap-1.5 rounded-md bg-amber-500/10 px-2 py-1 text-xs text-amber-700 dark:text-amber-300\"\n data-testid={`${testId}-sent-back`}\n >\n <CornerUpLeft className=\"size-3.5\" /> {l.sentBackHere}\n </p>\n )\n}\n\n/** \"Send back\" on a ready step: pick the earlier step to redo and say what needs to change. */\nexport function SendBackControl({\n run,\n step,\n l,\n testId,\n}: {\n run: WorkflowRunView\n step: WorkflowReviewStep\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const states = Object.fromEntries(\n run.steps.map((s) => [s.id, run.stateOf(s.id) ?? { status: 'pending' as const }])\n )\n const targets = sendBackTargets(run.steps, states, step.id)\n const [open, setOpen] = useState(false)\n const [to, setTo] = useState(targets[0]?.id ?? '')\n const [note, setNote] = useState('')\n if (!run.sendBack || run.phaseOf(step.id) !== 'ready' || targets.length === 0) return null\n if (!open)\n return (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => setOpen(true)}\n disabled={run.busy}\n data-testid={`${testId}-send-back`}\n >\n <CornerUpLeft className=\"size-4\" /> {l.sendBack}\n </Button>\n )\n const target = targets.some((t) => t.id === to) ? to : targets[0].id\n return (\n <div\n className=\"space-y-2 rounded-md border border-border p-3\"\n data-testid={`${testId}-send-back-form`}\n >\n <label className=\"block space-y-1 text-xs font-medium\">\n {l.sendBackTo}\n <select\n className=\"flex h-8 w-full rounded-md border border-input bg-background px-2 text-sm\"\n value={target}\n onChange={(e) => setTo(e.target.value)}\n data-testid={`${testId}-send-back-to`}\n >\n {targets.map((t) => (\n <option key={t.id} value={t.id}>\n {t.title}\n </option>\n ))}\n </select>\n </label>\n <Textarea\n rows={3}\n value={note}\n placeholder={l.sendBackNote}\n aria-label={l.sendBackNote}\n onChange={(e) => setNote(e.target.value)}\n data-testid={`${testId}-send-back-note`}\n />\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setOpen(false)}>\n {l.cancel}\n </Button>\n <Button\n size=\"sm\"\n disabled={run.busy}\n onClick={() => void run.sendBack?.(step.id, target, note.trim() || undefined)}\n data-testid={`${testId}-send-back-confirm`}\n >\n <CornerUpLeft className=\"size-4\" /> {l.sendBack}\n </Button>\n </div>\n </div>\n )\n}\n\n/** What a completed review recorded: who approved, the answers and versions, the fields. */\nexport function ApprovalEvidence({\n run,\n step,\n actions,\n nameOfDoc,\n l,\n testId,\n}: {\n run: WorkflowRunView\n step: WorkflowReviewStep\n actions?: WorkflowRunnerActions\n nameOfDoc?: (id: string) => string | undefined\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const state = run.stateOf(step.id)\n if (state?.status !== 'done') return null\n const approver = state.by ? (run.nameOf?.(state.by) ?? l.someone) : undefined\n const evidence = state.approved ?? []\n const titleOf = (id: string) => run.steps.find((s) => s.id === id)?.title ?? id\n return (\n <div className=\"space-y-2 rounded-md bg-muted/40 p-3\" data-testid={`${testId}-evidence`}>\n <p className=\"flex flex-wrap items-center gap-1.5 text-sm font-medium\">\n <ShieldCheck className=\"size-4 text-primary\" />\n {approver ? l.approvedBy.replace('{name}', approver) : null}\n {state.at && (\n <span className=\"text-xs font-normal text-muted-foreground\">\n {l.approvedAt.replace('{date}', formatDate(state.at))}\n </span>\n )}\n </p>\n {evidence.length > 0 && (\n <div className=\"space-y-1.5\">\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {l.approvedWhat}\n </p>\n {evidence.map((e) => (\n <div\n key={e.step}\n className=\"flex flex-wrap items-center gap-1.5 text-xs\"\n data-testid={`${testId}-evidence-${e.step}`}\n >\n <span className=\"font-medium\">{titleOf(e.step)}</span>\n {e.response_id &&\n (actions?.openMessage ? (\n <button\n type=\"button\"\n onClick={() => actions.openMessage?.(e.response_id as string)}\n className=\"inline-flex items-center gap-1 text-primary hover:underline\"\n data-testid={`${testId}-evidence-${e.step}-answer`}\n >\n <MessageSquare className=\"size-3\" /> {l.viewAnswer}\n </button>\n ) : null)}\n {(e.documents ?? []).map((d) => (\n <DocChip key={d} docRef={d} actions={actions} nameOfDoc={nameOfDoc} />\n ))}\n </div>\n ))}\n </div>\n )}\n {(step.fields ?? []).length > 0 && (\n <dl className=\"grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5 text-xs\">\n {(step.fields ?? []).map((f) => (\n <div key={f.name} className=\"contents\">\n <dt className=\"text-muted-foreground\">{f.label}</dt>\n <dd data-testid={`${testId}-evidence-field-${f.name}`}>\n {shownValue(run.inputs[f.name], f, run.nameOf)}\n </dd>\n </div>\n ))}\n </dl>\n )}\n </div>\n )\n}\n\n/** \"Open in Editor\" for an agent step that edited a document with tracked changes. */\nexport function RedlineOpen({\n step,\n state,\n actions,\n l,\n testId,\n}: {\n step: WorkflowAgentStep\n state: WorkflowStepState | undefined\n actions?: WorkflowRunnerActions\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const version = state?.status === 'done' ? state.documents?.[0] : undefined\n if (!step.editDocument || !version || !actions?.openRedline) return null\n return (\n <div className=\"flex flex-wrap items-center gap-2\" data-testid={`${testId}-redline`}>\n <Button\n size=\"sm\"\n onClick={() => actions.openRedline?.(version)}\n data-testid={`${testId}-open-word`}\n >\n <FileText className=\"size-4\" /> {l.openInEditor}\n </Button>\n <span className=\"text-xs text-muted-foreground\">{l.redlineHint}</span>\n </div>\n )\n}\n\n/** A platform action step: where it is, and what its person can do now. */\nexport function ActionStepBody({\n step,\n run,\n actions,\n nameOfDoc,\n heading,\n l,\n testId,\n}: {\n step: WorkflowActionStep\n run: WorkflowRunView\n actions?: WorkflowRunnerActions\n nameOfDoc?: (id: string) => string | undefined\n heading: ReactNode\n l: WorkflowStepPartsLabels\n testId: string\n}) {\n const state = run.stateOf(step.id)\n const phase = run.phaseOf(step.id)\n // On its way: running, or ready with a run under way to start it (else it waits for Start).\n const underWay = phase === 'running' || (phase === 'ready' && !run.needsStart)\n const name = (id: string) => run.nameOf?.(id) ?? id\n const [declining, setDeclining] = useState(false)\n const [note, setNote] = useState('')\n const a = step.action\n const working = (text: string) => (\n <p\n className=\"flex items-center gap-2 text-sm text-muted-foreground\"\n data-testid={`${testId}-working`}\n >\n <Loader2 className=\"size-4 animate-spin\" /> {text}\n </p>\n )\n\n let body: ReactNode = null\n if (a.type === 'sign') {\n const waiting = state?.waiting\n const signers = waiting?.signers ?? []\n const signed = new Set(waiting?.signed ?? [])\n const mine = !actions?.me || (signers.includes(actions.me) && !signed.has(actions.me))\n const signedRef = state?.status === 'done' ? state.documents?.[0] : undefined\n body = (\n <>\n {underWay && working(l.preparingSign)}\n {phase === 'waiting' && waiting?.doc_ext_id && (\n <DocChip\n docRef={`${waiting.doc_ext_id}${waiting.version ? `@v${waiting.version}` : ''}`}\n actions={actions}\n nameOfDoc={nameOfDoc}\n testId={`${testId}-document`}\n />\n )}\n {signers.length > 0 && (\n <div className=\"space-y-1\" data-testid={`${testId}-signers`}>\n <p className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {l.signers}\n </p>\n {signers.map((id) => (\n <p\n key={id}\n className=\"flex items-center gap-2 text-sm\"\n data-signed={signed.has(id) || undefined}\n data-testid={`${testId}-signer-${id}`}\n >\n {signed.has(id) ? (\n <Check className=\"size-3.5 text-primary\" />\n ) : (\n <Hourglass className=\"size-3.5 text-muted-foreground\" />\n )}\n <span className=\"font-medium\">{name(id)}</span>\n <span className=\"text-xs text-muted-foreground\">\n {signed.has(id) ? l.signed : l.notSigned}\n </span>\n </p>\n ))}\n </div>\n )}\n {waiting?.expires_at && phase === 'waiting' && (\n <p className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <Clock className=\"size-3.5\" />{' '}\n {l.expires.replace('{date}', formatDate(waiting.expires_at))}\n </p>\n )}\n {phase === 'waiting' && mine && !declining && (\n <div className=\"flex flex-wrap gap-2\">\n {actions?.sign && state && (\n <Button\n size=\"sm\"\n onClick={() => actions.sign?.(step, state)}\n data-testid={`${testId}-open-sign`}\n >\n <PenLine className=\"size-4\" /> {l.openAndSign}\n </Button>\n )}\n {run.decline && (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => setDeclining(true)}\n data-testid={`${testId}-decline`}\n >\n <X className=\"size-4\" /> {l.decline}\n </Button>\n )}\n </div>\n )}\n {declining && (\n <div className=\"space-y-2\" data-testid={`${testId}-decline-form`}>\n <Textarea\n rows={2}\n value={note}\n placeholder={l.declineNote}\n aria-label={l.declineNote}\n onChange={(e) => setNote(e.target.value)}\n data-testid={`${testId}-decline-note`}\n />\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" size=\"sm\" onClick={() => setDeclining(false)}>\n {l.cancel}\n </Button>\n <Button\n size=\"sm\"\n variant=\"destructive\"\n disabled={run.busy}\n onClick={async () => {\n await run.decline?.(step.id, note.trim() || undefined)\n setDeclining(false)\n }}\n data-testid={`${testId}-decline-confirm`}\n >\n {l.declineConfirm}\n </Button>\n </div>\n </div>\n )}\n {phase === 'failed' && state?.declinedBy && (\n <p className=\"text-sm text-destructive\" data-testid={`${testId}-declined`}>\n {l.declined.replace('{name}', name(state.declinedBy))}\n </p>\n )}\n {signedRef && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {actions?.openDocument ? (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => actions.openDocument?.(signedRef)}\n data-testid={`${testId}-signed-version`}\n >\n <ExternalLink className=\"size-4\" /> {l.signedVersion}\n </Button>\n ) : (\n <DocChip docRef={signedRef} nameOfDoc={nameOfDoc} />\n )}\n </div>\n )}\n </>\n )\n } else if (a.type === 'email_draft') {\n const draftId =\n state?.waiting?.draft_id ??\n (typeof state?.output?.draft_id === 'string' ? state.output.draft_id : undefined)\n body = (\n <>\n {underWay && working(l.preparingDraft)}\n {phase === 'waiting' && <p className=\"text-sm text-muted-foreground\">{l.draftReady}</p>}\n {phase === 'done' && (\n <p className=\"flex items-center gap-1.5 text-sm\" data-testid={`${testId}-sent`}>\n <Check className=\"size-4 text-primary\" /> {l.emailSent}\n </p>\n )}\n {draftId && actions?.openDraft && phase !== 'done' && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => actions.openDraft?.(draftId, state?.waiting?.mailbox)}\n data-testid={`${testId}-open-draft`}\n >\n <Mail className=\"size-4\" /> {l.openDraft}\n </Button>\n )}\n </>\n )\n } else {\n const tags = (state?.output?.tag_ext_ids as string[] | undefined) ?? a.tags\n const docs = (state?.output?.doc_ext_ids as string[] | undefined) ?? []\n body = (\n <>\n {underWay && working(l.reviewRunning)}\n {phase === 'done' && (\n <>\n <p className=\"text-sm text-muted-foreground\" data-testid={`${testId}-reviewed`}>\n {l.reviewDone\n .replace('{docs}', String(docs.length))\n .replace('{cols}', String(tags.length))}\n </p>\n {actions?.openReview && (\n <Button\n size=\"sm\"\n onClick={() => actions.openReview?.(tags, docs)}\n data-testid={`${testId}-open-review`}\n >\n <Table2 className=\"size-4\" /> {l.openReview}\n </Button>\n )}\n </>\n )}\n </>\n )\n }\n\n return (\n <div className=\"space-y-3\">\n {heading}\n <SentBackNote state={state} l={l} testId={testId} />\n <AssigneeLine run={run} stepId={step.id} l={l} testId={testId} />\n {body}\n {phase === 'failed' && !state?.declinedBy && (\n <p className=\"text-sm text-destructive\" data-testid={`${testId}-failed`}>\n {state?.error || ''}\n </p>\n )}\n </div>\n )\n}\n","/**\n * The run's stepper: where you are, what is done, what is next and what is still running. It\n * names the previous, current and next steps of the graph (`StepBarFrame` over `stepLevels`); the\n * rest is a click away (‹ ›, \"…\"), a parallel level is one step plus a \"+N\" chip, and a running\n * step out of view shows as \"Working: <title>\". The run's completion is the last step.\n */\n\nimport type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport type { WorkflowStepPhase } from './run'\nimport type { WorkflowRunView } from './useWorkflowView'\nimport type { WorkflowStep } from './types'\nimport {\n DEFAULT_STEP_BAR_LABELS,\n STEP_EXTRA,\n STEP_LABEL,\n STEP_LABEL_MAX,\n STEP_LABEL_CURRENT,\n StepBarFrame,\n type StepBarLabels,\n} from './StepBarFrame'\nimport { StepChip } from './StepChip'\nimport { DEFAULT_STEP_KIND_LABELS, STEP_KIND_ICONS, stepKindOf } from './stepKinds'\n\n/** The completion marker's id in the bar (not a step of the plan). */\nconst DONE = '__done'\n\nexport interface WorkflowStepBarProps {\n run: WorkflowRunView\n levels: WorkflowStep[][]\n doneTitle: string\n doneIcon?: ReactNode\n icon: (key?: string) => ReactNode\n tid: (suffix: string) => string\n labels?: Partial<StepBarLabels>\n}\n\nexport function WorkflowStepBar({\n run,\n levels,\n doneTitle,\n doneIcon,\n icon,\n tid,\n labels,\n}: WorkflowStepBarProps) {\n const l = { ...DEFAULT_STEP_BAR_LABELS, ...labels }\n const done = { id: DONE, title: doneTitle } as WorkflowStep\n const phaseOf = (id: string): WorkflowStepPhase =>\n id === DONE ? (run.isComplete ? 'done' : 'blocked') : run.phaseOf(id)\n const current = run.isComplete ? DONE : run.current\n\n const pill = (s: WorkflowStep) => {\n const phase = phaseOf(s.id)\n const isCurrent = s.id === current\n // Who it waits for, on a step that is theirs to do now.\n const assignee = ['ready', 'waiting'].includes(phase) ? run.assigneeOf(s.id) : undefined\n const waiting = assignee ? l.waitingFor.replace('{name}', assignee) : undefined\n // A failure says why on the pill's tooltip (and so does a step skipped after failing).\n const state = s.id === DONE ? undefined : run.stateOf(s.id)\n const failure =\n (phase === 'failed' || state?.skippedAfterFailure) && state?.error\n ? `${l.phases.failed}: ${state.error}`\n : undefined\n const title = [s.title, waiting, failure].filter(Boolean).join(' · ')\n const name = `${title} (${l.phases[phase]})`\n if (s.id === DONE)\n return (\n <StepChip\n inert\n kind=\"start\"\n phase={run.isComplete ? 'done' : 'ready'}\n icon={doneIcon}\n label={doneTitle}\n labelClassName={cn(STEP_LABEL, STEP_LABEL_MAX)}\n current={isCurrent}\n aria-label={name}\n title={doneTitle}\n data-testid={tid('step-done')}\n />\n )\n const kind = stepKindOf(s)\n const KindIcon = STEP_KIND_ICONS[kind]\n return (\n <StepChip\n kind={kind}\n phase={phase}\n icon={icon(s.icon) ?? <KindIcon />}\n label={s.title}\n current={isCurrent}\n heading={DEFAULT_STEP_KIND_LABELS[kind]}\n labelClassName={isCurrent ? STEP_LABEL_CURRENT : cn(STEP_LABEL, STEP_LABEL_MAX)}\n labelTestId={tid(`step-${s.id}-label`)}\n onClick={() => run.goTo(s.id)}\n disabled={run.busy}\n className=\"disabled:cursor-default\"\n aria-label={name}\n title={title}\n data-testid={tid(`step-${s.id}`)}\n >\n {assignee && isCurrent && (\n <span\n className={cn(STEP_EXTRA, 'max-w-[12rem]')}\n data-testid={tid(`step-${s.id}-assignee`)}\n >\n · {waiting}\n </span>\n )}\n </StepChip>\n )\n }\n\n return (\n <StepBarFrame\n levels={[...levels, [done]]}\n phaseOf={phaseOf}\n current={current}\n onSelect={(id) => id !== DONE && run.goTo(id)}\n isSelectable={(id) => id !== DONE}\n renderStep={(s) => pill(s)}\n icon={(s) => (s.id === DONE ? doneIcon : icon(s.icon))}\n kindOf={(s) => (s.id === DONE ? 'start' : stepKindOf(s))}\n disabled={run.busy}\n labels={labels}\n tid={tid}\n className=\"w-full\"\n />\n )\n}\n","/**\n * A stepped workflow run, end to end: the stepper, the step in view (a form, an upload, an agent\n * step or a review) and moving on. The stepper lays the graph out by depth: a sequence is one row,\n * steps side by side stack in a column. The run comes from `useWorkflowThread` (a thread on the\n * server) or `useWorkflowPreview`; wording and the agent output's rendering come from the host.\n */\n\nimport { useEffect, useRef, useState, type ReactNode } from 'react'\nimport {\n AlertTriangle,\n ArrowLeft,\n ArrowRight,\n Check,\n CheckCircle2,\n FileText,\n GitBranch,\n Hourglass,\n Loader2,\n RotateCw,\n X,\n} from 'lucide-react'\nimport { Button, Card, cn } from '@arbidocs/react/ui'\nimport { UploadDropzone } from '../../files/UploadDropzone'\nimport { SchemaForm, type SchemaFormProps } from './SchemaForm'\nimport {\n isPersonStep,\n reviewInstructions,\n splitDocRef,\n stepDependencies,\n stepLevels,\n waitingDocuments,\n} from './run'\nimport { WorkflowStepBar } from './WorkflowStepBar'\nimport {\n ActionStepBody,\n ApprovalEvidence,\n AssigneeLine,\n DEFAULT_WORKFLOW_STEP_PARTS_LABELS,\n RedlineOpen,\n SendBackControl,\n SentBackNote,\n type WorkflowRunnerActions,\n type WorkflowStepPartsLabels,\n} from './StepParts'\nimport type { WorkflowRunView } from './useWorkflowView'\nimport type {\n WorkflowAgentStep,\n WorkflowDefinition,\n WorkflowReviewStep,\n WorkflowStep,\n WorkflowStepState,\n WorkflowUploadStep,\n} from './types'\n\nexport interface WorkflowRunnerLabels {\n back: string\n next: string\n /** Skips the step in view (any unfinished step: the plan guides the thread, it does not hold it). */\n skipStep: string\n finish: string\n approve: string\n working: string\n /** An agent step under way: `{step}` is its title, `{elapsed}` how long it has run (m:ss). */\n stepWorking: string\n /** An agent step about to start (the run will pick it up). */\n starting: string\n /** The primary button on a ready agent or action step nothing has started (no run under way). */\n start: string\n /** A ready agent or action step not started yet, waiting for Start. */\n notStarted: string\n retry: string\n failed: string\n /** A step waiting on one that failed; `{step}` is its title, `{error}` why it failed. */\n upstreamFailed: string\n /** A step going on without one that failed and was skipped; `{step}` and `{error}` as above. */\n upstreamSkippedAfterFailure: string\n /** A skipped step that had failed; `{error}` is why. */\n skippedAfterFailure: string\n /** A step whose dependencies have not finished; `{steps}` is replaced with their titles. */\n blocked: string\n awaitingReview: string\n approved: string\n skipped: string\n /** An agent step that runs off the main line and delivers its result to it. */\n branch: string\n /** The default finish heading (the workflow's `completion.title` wins). */\n complete: string\n restart: string\n /** The upload step's list of what else the workspace holds (folded); `{count}` is replaced. */\n filesHeading: string\n /** The upload step's list of the files added on it in this run; `{count}` is replaced. */\n addedHeading: string\n noFiles: string\n /** A file's processing status on the upload step. */\n fileReading: string\n fileReady: string\n fileFailed: string\n /** Continue on an upload step while its files are read; `{current}` and `{count}` are replaced. */\n readingFiles: string\n /** Continue on an upload step while its files are sent; `{count}` is replaced (more than one). */\n uploadingFiles: string\n uploadingFile: string\n /** Continue while the host is uploading files it does not list one by one. */\n uploadingAny: string\n /** Continue on an upload step with files that did not upload; `{count}` is replaced (more than one). */\n uploadsFailed: string\n uploadFailed: string\n /** A file's row while it is sent, and when it did not upload (its error follows). */\n fileUploading: string\n fileUploadFailed: string\n retryUpload: string\n removeUpload: string\n /**\n * An agent step waiting for documents to finish processing before its turn starts; `{count}` is\n * replaced (more than one).\n */\n waitingForDocuments: string\n waitingForDocument: string\n /** The primary button on an email step waiting to be sent. */\n markSent: string\n}\n\nexport const DEFAULT_WORKFLOW_RUNNER_LABELS: WorkflowRunnerLabels = {\n back: 'Back',\n next: 'Continue',\n skipStep: 'Skip this step',\n finish: 'Finish',\n approve: 'Approve',\n working: 'Working…',\n stepWorking: '{step}… {elapsed}',\n starting: 'Starting…',\n start: 'Start',\n notStarted: 'Not started yet. Press Start to run this step.',\n retry: 'Retry',\n failed: 'This step did not finish.',\n upstreamFailed: '“{step}” failed{error}. Retry it before this step can go on.',\n upstreamSkippedAfterFailure:\n '“{step}” failed{error} and was skipped: this step goes on without its result.',\n skippedAfterFailure: 'Skipped after it failed{error}.',\n blocked: 'Starts after {steps}.',\n awaitingReview: 'Waiting for approval.',\n approved: 'Approved.',\n skipped: 'Skipped.',\n branch: 'Runs alongside; its result joins the thread',\n complete: 'Done',\n restart: 'Start again',\n filesHeading: 'Already in the workspace ({count})',\n addedHeading: 'Added for this step ({count})',\n noFiles: 'No files yet.',\n fileReading: 'Reading…',\n fileReady: 'Ready',\n fileFailed: 'Could not be read',\n readingFiles: 'Reading {current} of {count} files…',\n uploadingFiles: 'Uploading {count} files…',\n uploadingFile: 'Uploading 1 file…',\n uploadingAny: 'Uploading…',\n uploadsFailed: 'Retry or remove the {count} files that did not upload',\n uploadFailed: 'Retry or remove the file that did not upload',\n fileUploading: 'Uploading…',\n fileUploadFailed: 'Did not upload',\n retryUpload: 'Retry',\n removeUpload: 'Remove',\n waitingForDocuments: 'Waiting for {count} documents to finish processing',\n waitingForDocument: 'Waiting for 1 document to finish processing',\n markSent: 'Mark as sent',\n}\n\n/** A file the upload step lists (what is in the run's workspace). */\nexport interface WorkflowRunnerFile {\n id: string\n name: string\n /**\n * Where it is: still being sent (`uploading`; no document yet), not sent (`upload-failed`, with\n * `error`), being read (`processing`), `ready`, or not readable (`failed`). Absent = not known.\n */\n status?: 'uploading' | 'upload-failed' | 'processing' | 'ready' | 'failed'\n /** Why it did not upload (`upload-failed`). */\n error?: string\n /** The upload step it was added on in this run (listed first there, and holds it while read). */\n addedFor?: string\n}\n\nexport interface WorkflowRunnerProps extends Pick<\n SchemaFormProps,\n 'renderScope' | 'renderDocuments' | 'renderIcon' | 'people'\n> {\n workflow: WorkflowDefinition\n run: WorkflowRunView\n /** An agent step's output (its answer, a drafted document). */\n renderAgentOutput: (step: WorkflowAgentStep, state: WorkflowStepState | undefined) => ReactNode\n /** A review's extras while it waits (e.g. who to ask). */\n renderReview?: (step: WorkflowReviewStep) => ReactNode\n /** Upload step: the host performs the upload into the run's workspace. */\n onUpload?: (files: File[], step: WorkflowUploadStep) => void | Promise<void>\n /**\n * The host is uploading files (the step cannot be completed until they are back). A host that\n * lists them one by one (`files` with `uploading` / `upload-failed`) need not set it.\n */\n uploading?: boolean\n /** What the run's workspace holds, listed on the upload step. */\n files?: WorkflowRunnerFile[]\n /** A file that did not upload: send it again. Absent: no retry. */\n onRetryUpload?: (file: WorkflowRunnerFile) => void\n /** A file that did not upload: drop it, so the step can go on without it. */\n onRemoveUpload?: (file: WorkflowRunnerFile) => void\n /** Replaces an upload step's body. */\n renderUpload?: (step: WorkflowUploadStep) => ReactNode\n /** Extra content under a step's body (e.g. what a commit created). */\n renderStepNote?: (step: WorkflowStep, run: WorkflowRunView) => ReactNode\n /** Replaces the finish screen. */\n renderComplete?: (run: WorkflowRunView) => ReactNode\n /** Leave out the stepper (the host shows it elsewhere, e.g. above the run's thread). */\n hideStepBar?: boolean\n /** A narrow panel beside a thread: tighter cards, the full width they are given. */\n compact?: boolean\n /** Where the runner hands off to the host: documents, the sign flow, mail, a review grid. */\n actions?: WorkflowRunnerActions\n /** A document's name by id (chips show it instead of the id). */\n nameOfDoc?: (id: string) => string | undefined\n labels?: Partial<WorkflowRunnerLabels>\n /** The wording of action steps, assignees, send-backs and approvals. */\n partsLabels?: Partial<WorkflowStepPartsLabels>\n /**\n * Test ids: `<prefix>-step-<id>` (pill), `<prefix>-<id>` (body), `<prefix>-field-<name>`,\n * `<prefix>-next` / `-back`, `<prefix>-done`.\n */\n testIdPrefix?: string\n className?: string\n}\n\nexport function WorkflowRunner({\n workflow,\n run,\n renderAgentOutput,\n renderReview,\n onUpload,\n uploading = false,\n files,\n onRetryUpload,\n onRemoveUpload,\n renderUpload,\n renderStepNote,\n renderComplete,\n renderScope,\n renderDocuments,\n renderIcon,\n people,\n actions,\n nameOfDoc,\n hideStepBar,\n compact,\n labels,\n partsLabels,\n testIdPrefix = 'workflow-run',\n className,\n}: WorkflowRunnerProps) {\n const l = { ...DEFAULT_WORKFLOW_RUNNER_LABELS, ...labels }\n const pl = { ...DEFAULT_WORKFLOW_STEP_PARTS_LABELS, ...partsLabels }\n // A step's card: a readable column on its own, the panel's width beside a thread.\n const box = compact ? 'p-4' : 'max-w-2xl p-6'\n const { steps, step, isComplete, action } = run\n const completion = workflow.run.kind === 'steps' ? workflow.run.completion : undefined\n const tid = (suffix: string) => `${testIdPrefix}-${suffix}`\n const levels = stepLevels(steps)\n const icon = (key?: string) => (key && renderIcon ? renderIcon(key) : undefined)\n\n // An upload step's files are read before the run goes on (it can still be skipped).\n const added = step?.kind === 'upload' ? (files ?? []).filter((f) => f.addedFor === step.id) : []\n const unread = added.filter((f) => f.status === 'processing').length\n const reading = action === 'complete' && unread > 0\n // Nor does it go on while its files are being sent: completing records the files it took, and a\n // file still on its way has no document yet. One that did not upload is retried or removed first.\n const sending = added.filter((f) => f.status === 'uploading').length\n const unsent = added.filter((f) => f.status === 'upload-failed').length\n const uploadHold = step?.kind === 'upload' && (sending > 0 || uploading || unsent > 0)\n\n // An agent step whose turn waits for documents to finish processing is on its way, too.\n const docsWait = !!step && waitingDocuments(run.stateOf(step.id)).length > 0\n\n const nextLabel = sending\n ? sending === 1\n ? l.uploadingFile\n : l.uploadingFiles.replace('{count}', String(sending))\n : uploadHold && uploading\n ? l.uploadingAny\n : uploadHold\n ? unsent === 1\n ? l.uploadFailed\n : l.uploadsFailed.replace('{count}', String(unsent))\n : reading\n ? l.readingFiles\n .replace('{current}', String(Math.min(added.length - unread + 1, added.length)))\n .replace('{count}', String(added.length))\n : action === 'start'\n ? l.start\n : action === 'retry'\n ? l.retry\n : action === 'finish'\n ? l.finish\n : action === 'complete' && step?.kind === 'review'\n ? l.approve\n : action === 'complete' && step?.kind === 'action'\n ? l.markSent\n : action === 'wait' && (run.isRunning || run.busy || docsWait)\n ? l.working\n : ((step && !run.isLocked(step.id) ? step.nextLabel : undefined) ?? l.next)\n\n return (\n <div className={cn(compact ? 'space-y-3' : 'space-y-6', className)} data-testid={testIdPrefix}>\n {!hideStepBar && (\n <WorkflowStepBar\n run={run}\n levels={levels}\n doneTitle={completion?.title ?? l.complete}\n doneIcon={icon(completion?.icon)}\n icon={icon}\n tid={tid}\n />\n )}\n\n {isComplete ? (\n (renderComplete?.(run) ?? (\n <Card className=\"mx-auto max-w-lg p-8 text-center\" data-testid={tid('done')}>\n <CheckCircle2 className=\"mx-auto size-12 text-primary\" />\n <h2 className=\"mt-4 text-xl font-semibold\">{completion?.title ?? l.complete}</h2>\n {completion?.description && (\n <p className=\"mt-1 text-sm text-muted-foreground\">{completion.description}</p>\n )}\n <Button\n variant=\"outline\"\n className=\"mt-6\"\n onClick={run.restart}\n data-testid={tid('restart')}\n >\n {l.restart}\n </Button>\n </Card>\n ))\n ) : step ? (\n <div key={step.id} className=\"space-y-3\">\n <StepNotices run={run} step={step} l={l} tid={tid} />\n {run.phaseOf(step.id) === 'blocked' ? (\n <Card className={cn(box, 'p-6')} data-testid={tid(step.id)}>\n <p className=\"text-sm text-muted-foreground\" data-testid={tid(`${step.id}-blocked`)}>\n {l.blocked.replace(\n '{steps}',\n stepDependencies(steps, step.id)\n .map((d) => steps.find((s) => s.id === d)?.title ?? d)\n .join(', ')\n )}\n </p>\n </Card>\n ) : step.kind === 'form' ? (\n <Card className={cn(box, 'space-y-4')} data-testid={tid(step.id)}>\n <StepHeading step={step} icon={icon(step.icon)} testId={tid(`${step.id}-title`)} />\n <SentBackNote state={run.stateOf(step.id)} l={pl} testId={tid(step.id)} />\n <AssigneeLine run={run} stepId={step.id} l={pl} testId={tid(step.id)} />\n <fieldset disabled={run.isLocked(step.id)} className=\"contents\">\n <SchemaForm\n fields={step.inputs}\n values={run.inputs}\n onChange={run.setInput}\n errors={run.errors}\n renderScope={renderScope}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n people={people}\n onEnterSubmit={() => void run.next()}\n testIdPrefix={tid('field')}\n />\n </fieldset>\n {run.actionError && (\n <p className=\"text-sm text-destructive\" data-testid={tid('action-error')}>\n {run.actionError}\n </p>\n )}\n {renderStepNote?.(step, run)}\n </Card>\n ) : step.kind === 'upload' ? (\n <Card className={cn(box, 'space-y-4')} data-testid={tid(step.id)}>\n <SentBackNote state={run.stateOf(step.id)} l={pl} testId={tid(step.id)} />\n <AssigneeLine run={run} stepId={step.id} l={pl} testId={tid(step.id)} />\n {renderUpload?.(step) ?? (\n <>\n <UploadDropzone\n onFiles={(picked) => void onUpload?.(picked, step)}\n uploading={uploading}\n disabled={!onUpload}\n accept={step.accept}\n title={step.title}\n description={step.description}\n hint={step.hint}\n testId={tid(`${step.id}-drop`)}\n />\n {files && (\n <UploadFiles\n onRetry={onRetryUpload}\n onRemove={onRemoveUpload}\n added={added}\n others={files.filter((f) => f.addedFor !== step.id)}\n l={l}\n testId={tid(`${step.id}-files`)}\n />\n )}\n </>\n )}\n {run.actionError && <p className=\"text-sm text-destructive\">{run.actionError}</p>}\n {renderStepNote?.(step, run)}\n </Card>\n ) : step.kind === 'review' ? (\n <Card className={cn(box, 'space-y-4')} data-testid={tid(step.id)}>\n <StepHeading step={step} icon={icon(step.icon)} />\n <SentBackNote state={run.stateOf(step.id)} l={pl} testId={tid(step.id)} />\n <p className=\"whitespace-pre-line text-sm text-muted-foreground\">\n {reviewInstructions(step, run.inputs)}\n </p>\n <AssigneeLine run={run} stepId={step.id} l={pl} testId={tid(step.id)} />\n {/* A recorded approval says who approved below; without one, the status says it. */}\n {!(run.phaseOf(step.id) === 'done' && run.stateOf(step.id)?.by) && (\n <p className=\"text-sm\" data-testid={tid(`${step.id}-status`)}>\n {run.phaseOf(step.id) === 'done'\n ? l.approved\n : run.phaseOf(step.id) === 'skipped'\n ? l.skipped\n : l.awaitingReview}\n </p>\n )}\n {(step.fields ?? []).length > 0 && run.phaseOf(step.id) === 'ready' && (\n <SchemaForm\n fields={step.fields ?? []}\n values={run.inputs}\n onChange={run.setInput}\n errors={run.errors}\n renderScope={renderScope}\n renderDocuments={renderDocuments}\n renderIcon={renderIcon}\n people={people}\n testIdPrefix={tid('field')}\n />\n )}\n <ApprovalEvidence\n run={run}\n step={step}\n actions={actions}\n nameOfDoc={nameOfDoc}\n l={pl}\n testId={tid(step.id)}\n />\n {run.phaseOf(step.id) === 'ready' && renderReview?.(step)}\n <SendBackControl run={run} step={step} l={pl} testId={tid(step.id)} />\n {run.actionError && <p className=\"text-sm text-destructive\">{run.actionError}</p>}\n {renderStepNote?.(step, run)}\n </Card>\n ) : step.kind === 'action' ? (\n <Card className={cn(box, 'space-y-4')} data-testid={tid(step.id)}>\n <ActionStepBody\n step={step}\n run={run}\n actions={actions}\n nameOfDoc={nameOfDoc}\n heading={<StepHeading step={step} icon={icon(step.icon)} />}\n l={pl}\n testId={tid(step.id)}\n />\n {run.actionError && <p className=\"text-sm text-destructive\">{run.actionError}</p>}\n {renderStepNote?.(step, run)}\n </Card>\n ) : (\n <AgentStepBody\n step={step}\n run={run}\n renderAgentOutput={renderAgentOutput}\n icon={icon(step.icon)}\n renderStepNote={renderStepNote}\n compact={compact}\n nameOfDoc={nameOfDoc}\n extra={\n <>\n <SentBackNote state={run.stateOf(step.id)} l={pl} testId={tid(step.id)} />\n <RedlineOpen\n step={step}\n state={run.stateOf(step.id)}\n actions={actions}\n l={pl}\n testId={tid(step.id)}\n />\n </>\n }\n l={l}\n tid={tid}\n />\n )}\n </div>\n ) : null}\n\n {!isComplete && (\n <div\n className={cn(\n 'flex items-center justify-between border-t border-border pt-4',\n compact && 'flex-wrap gap-2 pt-3'\n )}\n >\n <Button\n variant=\"ghost\"\n onClick={run.back}\n disabled={!run.canBack}\n data-testid={tid('back')}\n >\n <ArrowLeft className=\"size-4\" /> {l.back}\n </Button>\n <div\n className={cn('flex items-center gap-2', compact && 'ml-auto flex-wrap justify-end')}\n >\n {step &&\n // A step that commits (creates the matter, starts the thread) is what the run stands on.\n !step.commit &&\n ['ready', 'blocked', 'failed'].includes(run.phaseOf(step.id)) && (\n <Button\n variant=\"ghost\"\n onClick={() => void run.skip(step.id)}\n disabled={run.busy}\n data-testid={tid('skip-step')}\n >\n {l.skipStep}\n </Button>\n )}\n <Button\n onClick={() => void run.next()}\n disabled={action === 'wait' || reading || uploadHold}\n data-testid={tid('next')}\n >\n {nextLabel}\n {reading ||\n (uploadHold && unsent === 0) ||\n (action === 'wait' && (run.isRunning || run.busy || docsWait)) ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <ArrowRight className=\"size-4\" />\n )}\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n}\n\n/** What the upload step lists: this step's files first, with their status; the rest folded. */\nfunction UploadFiles({\n added,\n others,\n onRetry,\n onRemove,\n l,\n testId,\n}: {\n added: WorkflowRunnerFile[]\n others: WorkflowRunnerFile[]\n onRetry?: (file: WorkflowRunnerFile) => void\n onRemove?: (file: WorkflowRunnerFile) => void\n l: WorkflowRunnerLabels\n testId: string\n}) {\n const heading = 'text-xs font-semibold uppercase tracking-wide text-muted-foreground'\n const row = (f: WorkflowRunnerFile) => (\n <div\n key={f.id}\n className=\"flex items-center gap-2 text-sm text-muted-foreground\"\n data-status={f.status}\n data-testid={`${testId}-file-${f.id}`}\n >\n <FileText className=\"size-3.5 shrink-0 text-primary\" />\n <span className=\"min-w-0 flex-1 truncate\" title={f.name}>\n {f.name}\n </span>\n {f.status === 'uploading' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs\">\n <Loader2 className=\"size-3 animate-spin\" /> {l.fileUploading}\n </span>\n )}\n {f.status === 'upload-failed' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs text-destructive\" role=\"alert\">\n <AlertTriangle className=\"size-3\" /> {l.fileUploadFailed}\n {f.error ? `: ${f.error}` : ''}\n {onRetry && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-2\"\n onClick={() => onRetry(f)}\n data-testid={`${testId}-file-${f.id}-retry`}\n >\n <RotateCw className=\"size-3\" /> {l.retryUpload}\n </Button>\n )}\n {onRemove && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 px-2\"\n onClick={() => onRemove(f)}\n data-testid={`${testId}-file-${f.id}-remove`}\n >\n <X className=\"size-3\" /> {l.removeUpload}\n </Button>\n )}\n </span>\n )}\n {f.status === 'processing' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs\">\n <Loader2 className=\"size-3 animate-spin\" /> {l.fileReading}\n </span>\n )}\n {f.status === 'ready' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs text-primary\">\n <Check className=\"size-3\" /> {l.fileReady}\n </span>\n )}\n {f.status === 'failed' && (\n <span className=\"flex shrink-0 items-center gap-1 text-xs text-destructive\">\n <AlertTriangle className=\"size-3\" /> {l.fileFailed}\n </span>\n )}\n </div>\n )\n return (\n <div className=\"space-y-3\" data-testid={testId}>\n {added.length > 0 && (\n <div className=\"space-y-1\" data-testid={`${testId}-added`}>\n <p className={heading}>{l.addedHeading.replace('{count}', String(added.length))}</p>\n {added.map(row)}\n </div>\n )}\n {added.length === 0 && others.length === 0 && (\n <p className=\"text-sm text-muted-foreground\">{l.noFiles}</p>\n )}\n {others.length > 0 && (\n <details className=\"space-y-1\" data-testid={`${testId}-others`}>\n <summary className={cn(heading, 'cursor-pointer select-none')}>\n {l.filesHeading.replace('{count}', String(others.length))}\n </summary>\n <div className=\"mt-1 max-h-48 space-y-1 overflow-y-auto\">{others.map(row)}</div>\n </details>\n )}\n </div>\n )\n}\n\nfunction StepHeading({\n step,\n icon,\n testId,\n}: {\n step: WorkflowStep\n icon?: ReactNode\n testId?: string\n}) {\n return (\n <div className=\"min-w-0\">\n <p className=\"flex items-center gap-2 text-sm font-medium\" data-testid={testId}>\n {icon && (\n <span className=\"flex size-4 items-center justify-center text-primary [&_svg]:size-4\">\n {icon}\n </span>\n )}\n {step.title}\n </p>\n {step.description && <p className=\"mt-1 text-xs text-muted-foreground\">{step.description}</p>}\n </div>\n )\n}\n\n/** m:ss (h:mm:ss past an hour). */\nexport function formatElapsed(ms: number): string {\n const total = Math.max(0, Math.floor(ms / 1000))\n const h = Math.floor(total / 3600)\n const m = Math.floor((total % 3600) / 60)\n const sec = String(total % 60).padStart(2, '0')\n return h ? `${h}:${String(m).padStart(2, '0')}:${sec}` : `${m}:${sec}`\n}\n\n/** \"<title>… 0:42\": the running step and how long it has run, ticking. */\nfunction StepWorking({ title, since, label }: { title: string; since?: string; label: string }) {\n // Without the server's start time, from when this screen first saw it running.\n const seen = useRef(Date.now())\n const start = (since && Date.parse(since)) || seen.current\n const [now, setNow] = useState(() => Date.now())\n useEffect(() => {\n const t = setInterval(() => setNow(Date.now()), 1000)\n return () => clearInterval(t)\n }, [])\n return (\n <span>{label.replace('{step}', title).replace('{elapsed}', formatElapsed(now - start))}</span>\n )\n}\n\nfunction AgentStepBody({\n step,\n run,\n renderAgentOutput,\n icon,\n renderStepNote,\n extra,\n compact,\n nameOfDoc,\n l,\n tid,\n}: {\n step: WorkflowAgentStep\n run: WorkflowRunView\n renderAgentOutput: WorkflowRunnerProps['renderAgentOutput']\n icon?: ReactNode\n renderStepNote?: WorkflowRunnerProps['renderStepNote']\n /** Under the status: a send-back note, \"Open in Editor\". */\n extra?: ReactNode\n compact?: boolean\n nameOfDoc?: (id: string) => string | undefined\n l: WorkflowRunnerLabels\n tid: (suffix: string) => string\n}) {\n const state = run.stateOf(step.id)\n const phase = run.phaseOf(step.id)\n // Waiting for documents to finish processing (named when the runner knows them).\n const pending = waitingDocuments(state)\n const pendingNames = pending.flatMap((ref) => nameOfDoc?.(splitDocRef(ref).id) ?? [])\n const header = (\n <div className=\"flex items-start justify-between gap-3\">\n <StepHeading step={step} icon={icon} />\n {phase === 'failed' && (\n <div className=\"flex shrink-0 items-center gap-2\">\n {run.retry && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => void run.retry?.(step.id)}\n disabled={run.busy}\n data-testid={tid(`${step.id}-retry`)}\n >\n <RotateCw className=\"size-4\" /> {l.retry}\n </Button>\n )}\n </div>\n )}\n </div>\n )\n const status = (\n <div className=\"space-y-1\">\n {step.branch && (\n <p className=\"flex items-center gap-1.5 text-xs text-muted-foreground\">\n <GitBranch className=\"size-3.5\" /> {l.branch}\n </p>\n )}\n {(phase === 'running' || (phase === 'ready' && !run.needsStart)) && !state?.text && (\n <p\n className=\"flex items-center gap-2 text-sm text-muted-foreground\"\n data-testid={tid(`${step.id}-working`)}\n >\n <Loader2 className=\"size-4 animate-spin\" />{' '}\n {phase === 'ready' ? (\n l.starting\n ) : (\n <StepWorking title={step.title} since={state?.startedAt} label={l.stepWorking} />\n )}\n </p>\n )}\n {pending.length > 0 && (\n <div\n className=\"space-y-0.5 text-sm text-muted-foreground\"\n data-testid={tid(`${step.id}-waiting-documents`)}\n >\n <p className=\"flex items-center gap-2\">\n <Hourglass className=\"size-4\" />\n {pending.length === 1\n ? l.waitingForDocument\n : l.waitingForDocuments.replace('{count}', String(pending.length))}\n </p>\n {pendingNames.length > 0 && <p className=\"pl-6 text-xs\">{pendingNames.join(', ')}</p>}\n </div>\n )}\n {phase === 'failed' && (\n <p className=\"text-sm text-destructive\" data-testid={tid(`${step.id}-failed`)}>\n {state?.error || l.failed}\n </p>\n )}\n {phase === 'skipped' && (\n <p className=\"text-sm text-muted-foreground\" data-testid={tid(`${step.id}-skipped`)}>\n {state?.skippedAfterFailure\n ? l.skippedAfterFailure.replace('{error}', state.error ? `: ${state.error}` : '')\n : l.skipped}\n </p>\n )}\n {extra}\n </div>\n )\n\n if (step.output === 'artifact' && !compact) {\n return (\n <div\n className=\"grid gap-4 lg:grid-cols-[minmax(0,18rem)_minmax(0,1fr)]\"\n data-testid={tid(step.id)}\n >\n <Card className=\"h-fit space-y-3 p-5\">\n {header}\n {status}\n {renderStepNote?.(step, run)}\n </Card>\n <div className=\"min-w-0\">{renderAgentOutput(step, state)}</div>\n </div>\n )\n }\n return (\n <Card className={cn('space-y-3', compact ? 'p-4' : 'p-6')} data-testid={tid(step.id)}>\n {header}\n {status}\n {renderAgentOutput(step, state)}\n {renderStepNote?.(step, run)}\n </Card>\n )\n}\n\n/**\n * What the step in view must say before anything else: that it has not started and why (a ready\n * agent or action step no run is under way for), and every step it waits for that failed — still\n * failed (it is blocked until that is retried) or skipped after failing (it goes on without it).\n */\nfunction StepNotices({\n run,\n step,\n l,\n tid,\n}: {\n run: WorkflowRunView\n step: WorkflowStep\n l: WorkflowRunnerLabels\n tid: (suffix: string) => string\n}) {\n const notStarted = !isPersonStep(step) && run.needsStart && run.phaseOf(step.id) === 'ready'\n const failed = run.failedUpstreamOf(step.id)\n if (!notStarted && failed.length === 0) return null\n const why = (error?: string | null) => (error ? `: ${error}` : '')\n return (\n <div className=\"space-y-2\" data-testid={tid(`${step.id}-notices`)}>\n {notStarted && (\n <p\n className={cn(\n 'flex items-start gap-2 text-sm',\n run.runError ? 'text-destructive' : 'text-muted-foreground'\n )}\n data-testid={tid(`${step.id}-not-started`)}\n >\n {run.runError && <AlertTriangle className=\"mt-0.5 size-4 shrink-0\" />}\n {run.runError || l.notStarted}\n </p>\n )}\n {failed.map(({ step: s, state }) => (\n <p\n key={s.id}\n className={cn(\n 'flex items-start gap-2 rounded-md border px-3 py-2 text-sm',\n state.status === 'failed'\n ? 'border-destructive/40 text-destructive'\n : 'border-amber-500/40 text-amber-700 dark:text-amber-300'\n )}\n data-testid={tid(`${step.id}-upstream-${s.id}`)}\n >\n <AlertTriangle className=\"mt-0.5 size-4 shrink-0\" />\n {(state.status === 'failed' ? l.upstreamFailed : l.upstreamSkippedAfterFailure)\n .replace('{step}', s.title)\n .replace('{error}', why(state.error))}\n </p>\n ))}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Bot, Loader2, Wand2, type LucideIcon } from 'lucide-react'\nimport { Button, Label, cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface CapabilityTileProps {\n label: string\n description: string\n icon: LucideIcon\n selected: boolean\n onToggle: () => void\n testId?: string\n className?: string\n}\n\n/** Toggle tile for one agent capability (tool). Selected = accent tone, `aria-pressed`. */\nexport function CapabilityTile({\n label,\n description,\n icon: Icon,\n selected,\n onToggle,\n testId,\n className,\n}: CapabilityTileProps) {\n return (\n <button\n type=\"button\"\n onClick={onToggle}\n aria-pressed={selected}\n data-testid={testId}\n data-slot=\"capability-tile\"\n className={cn(\n 'flex flex-col items-start gap-1 rounded-lg p-3 text-left transition-colors pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n selected\n ? 'bg-accent text-accent-foreground ring-1 ring-inset ring-primary/30'\n : 'bg-muted hover:bg-accent/60',\n className\n )}\n >\n <Icon size={16} className={selected ? 'text-accent-foreground' : 'text-muted-foreground'} />\n <span className=\"text-xs font-medium leading-tight\">{label}</span>\n <span className=\"text-xs leading-tight text-muted-foreground\">{description}</span>\n </button>\n )\n}\n\n/** Responsive grid wrapper for CapabilityTile children. */\nexport function CapabilityGrid({\n children,\n testId,\n className,\n}: {\n children: ReactNode\n testId?: string\n className?: string\n}) {\n return (\n <div\n className={cn('grid grid-cols-2 gap-2 sm:grid-cols-4', className)}\n data-testid={testIdOr(testId, { testId: 'agent-capabilities' })}\n >\n {children}\n </div>\n )\n}\n\nexport interface AgentTypeOption<T extends string> {\n value: T\n title: string\n description: string\n}\n\nexport interface AgentTypeSelectorLabels {\n agentType: string\n}\n\nexport const DEFAULT_AGENT_TYPE_SELECTOR_LABELS: AgentTypeSelectorLabels = {\n agentType: 'Agent type',\n}\n\nexport interface AgentTypeSelectorProps<T extends string> {\n value: T\n onChange: (value: T) => void\n options: AgentTypeOption<T>[]\n /** Group label (wins over `labels.agentType`). */\n label?: string\n labels?: Partial<AgentTypeSelectorLabels>\n /** Root id; options use `agent-type-{value}` unless `optionTestId` is given. */\n testId?: string\n optionTestId?: (value: T) => string\n}\n\n/** Radio-style choice cards (e.g. built-in vs external agent). Test ids: `agent-type-{value}`. */\nexport function AgentTypeSelector<T extends string>({\n value,\n onChange,\n options,\n label,\n labels,\n testId,\n optionTestId,\n}: AgentTypeSelectorProps<T>) {\n const l = { ...DEFAULT_AGENT_TYPE_SELECTOR_LABELS, ...labels }\n return (\n <div className=\"space-y-1.5\" data-testid={testIdOr(testId, { testId: 'agent-type-selector' })}>\n <Label>{label ?? l.agentType}</Label>\n <div className=\"grid grid-cols-2 gap-2\">\n {options.map((opt) => (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => onChange(opt.value)}\n aria-pressed={value === opt.value}\n data-testid={testIdOr(optionTestId?.(opt.value), { testId: `agent-type-${opt.value}` })}\n className={cn(\n 'rounded-lg p-3 text-left transition-colors pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n value === opt.value\n ? 'bg-accent text-accent-foreground ring-1 ring-inset ring-primary/30'\n : 'bg-muted hover:bg-accent/60'\n )}\n >\n <div className=\"text-sm font-medium\">{opt.title}</div>\n <div className=\"mt-0.5 text-xs text-muted-foreground\">{opt.description}</div>\n </button>\n ))}\n </div>\n </div>\n )\n}\n\nexport interface AgentAvatarFieldLabels {\n painting: string\n generate: string\n regenerate: string\n}\n\nexport const DEFAULT_AGENT_AVATAR_FIELD_LABELS: AgentAvatarFieldLabels = {\n painting: 'Painting…',\n generate: 'Generate avatar',\n regenerate: 'Regenerate',\n}\n\nexport interface AgentAvatarFieldTestIds {\n preview: string\n generate: string\n}\n\nexport interface AgentAvatarFieldProps {\n /** Image URL of the current avatar. */\n picture?: string | null\n isBusy: boolean\n /** Generate is disabled until the agent can exist (e.g. a valid name). */\n canGenerate: boolean\n onGenerate: () => void\n labels?: Partial<AgentAvatarFieldLabels>\n testIds?: Partial<AgentAvatarFieldTestIds>\n}\n\n/** Avatar preview with a deliberate Generate / Regenerate action. */\nexport function AgentAvatarField({\n picture,\n isBusy,\n canGenerate,\n onGenerate,\n labels,\n testIds,\n}: AgentAvatarFieldProps) {\n const l = { ...DEFAULT_AGENT_AVATAR_FIELD_LABELS, ...labels }\n return (\n <div className=\"flex flex-col items-center gap-2\" data-slot=\"agent-avatar-field\">\n <div\n className=\"flex size-24 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-muted\"\n data-testid={testIdOr(testIds?.preview, { testId: 'agent-avatar-preview' })}\n >\n {isBusy ? (\n <div className=\"flex flex-col items-center gap-1 text-ai-ink\">\n <Loader2 className=\"size-7 animate-spin\" />\n <span className=\"text-xs\">{l.painting}</span>\n </div>\n ) : picture ? (\n <img src={picture} alt=\"\" className=\"size-full object-cover\" />\n ) : (\n <Bot className=\"size-10 text-ai-ink/70\" />\n )}\n </div>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"h-8 gap-1 px-2 text-xs pointer-coarse:h-11\"\n disabled={isBusy || !canGenerate}\n onClick={onGenerate}\n data-testid={testIdOr(testIds?.generate, { testId: 'agent-avatar-generate' })}\n >\n <Wand2 size={12} /> {picture ? l.regenerate : l.generate}\n </Button>\n </div>\n )\n}\n","import { useEffect, useMemo, useState, type ReactNode } from 'react'\nimport { Loader2, Sparkles, X, type LucideIcon } from 'lucide-react'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n Input,\n Label,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Textarea,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { FoldSection } from '../../home/FoldSection'\nimport { useControllableState } from '../../lib/useControllableState'\nimport { AgentTypeSelector, CapabilityGrid, CapabilityTile } from './AgentEditorParts'\nimport type { AgentTypeOption } from './AgentEditorParts'\n\n/** One thing an agent can be allowed to do (a tool toggle). */\nexport interface AgentCapability {\n key: string\n label: string\n description: string\n icon: LucideIcon\n}\n\n/** A starting point: a plain description plus the capabilities that go with it. */\nexport interface AgentTemplate {\n id: string\n title: string\n description: string\n /** Becomes the agent's persona text. */\n persona: string\n /** Capability keys switched on. */\n capabilities: string[]\n}\n\nexport interface AgentCreatorValues {\n name: string\n persona: string\n capabilities: Record<string, boolean>\n modelName: string\n type: string\n /** Workspaces the agent may read (ids). Empty = none: isolation is the default. */\n workspaceIds: string[]\n}\n\nexport interface AgentCreatorLabels {\n titleNew: string\n titleEdit: (name: string) => string\n descriptionNew: string\n descriptionEdit: string\n describe: string\n describePlaceholder: string\n describeHint: string\n startFrom: string\n summaryHeading: string\n /** \"Can search the web, run code.\" */\n summaryCan: (list: string) => string\n /** \"Cannot generate images.\" */\n summaryCannot: (list: string) => string\n summaryNone: string\n summaryModel: (model: string) => string\n summaryModelAuto: string\n /** \"Reads workspaces A and B.\" */\n summaryWorkspaces: (list: string) => string\n summaryNoWorkspaces: string\n /** \"Will be called research-assistant.\" */\n summaryName: (name: string) => string\n workspaceAccess: string\n workspaceAccessHint: string\n workspaceAlready: string\n /** Accessible name of the revoke button next to an already-granted workspace. */\n revokeWorkspace: (workspaceName: string) => string\n noWorkspacesToGrant: string\n name: string\n nameHint: string\n nameInvalid: string\n advanced: string\n capabilities: string\n /** One line under the Tools heading. */\n toolsHint: string\n /** Button in the summary that opens Advanced. */\n summaryChange: string\n model: string\n modelAuto: string\n cancel: string\n create: string\n save: string\n saving: string\n}\n\nexport const DEFAULT_AGENT_CREATOR_LABELS: AgentCreatorLabels = {\n titleNew: 'New agent',\n titleEdit: (name) => `Edit ${name}`,\n descriptionNew: 'Say what this agent is for. Everything else follows from that.',\n descriptionEdit: 'Change what this agent is for, or fine-tune it under Advanced.',\n describe: 'What should it do?',\n describePlaceholder: 'e.g. Reads new files each morning and tells me what changed, with sources.',\n describeHint: 'This becomes the agent’s persona and shapes every answer.',\n startFrom: 'Or start from',\n summaryHeading: 'What it can do (its tools)',\n summaryCan: (list) => `Can ${list}.`,\n summaryCannot: (list) => `Cannot ${list}.`,\n summaryNone: 'It can read your files and answer. Nothing else is switched on yet.',\n summaryModel: (model) => `Uses ${model}.`,\n summaryModelAuto: 'Uses the default model.',\n summaryWorkspaces: (list) => `Can read ${list}.`,\n summaryNoWorkspaces: 'Cannot read any workspace yet. Give it access under Advanced.',\n summaryName: (name) => `Will be called ${name}.`,\n workspaceAccess: 'Workspace access',\n workspaceAccessHint:\n 'Each workspace stays separate. The agent can only read the ones you tick here.',\n workspaceAlready: 'Already has access',\n revokeWorkspace: (name) => `Remove access to ${name}`,\n noWorkspacesToGrant: 'You have no workspaces yet.',\n name: 'Name',\n nameHint: 'Letters, digits, - and _ only; must start with a letter or digit.',\n nameInvalid: 'Letters, digits, - and _ only; must start with a letter or digit.',\n advanced: 'Advanced',\n capabilities: 'Tools',\n toolsHint:\n 'Tools are switches on this agent: what it may do on its own, such as search the web or run code. Change them any time.',\n summaryChange: 'Change tools',\n model: 'Model',\n modelAuto: 'Automatic',\n cancel: 'Cancel',\n create: 'Create agent',\n save: 'Save changes',\n saving: 'Saving…',\n}\n\nconst NAME_RE = /^[a-zA-Z0-9][a-zA-Z0-9_-]*$/\nconst FILLER = new Set([\n 'a',\n 'an',\n 'the',\n 'who',\n 'that',\n 'which',\n 'to',\n 'for',\n 'and',\n 'of',\n 'i',\n 'my',\n])\n\n/** A valid agent name from the description: its first few meaningful words, dashed. */\nexport function deriveAgentName(description: string): string {\n const words = description\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, ' ')\n .split(/\\s+/)\n .filter((w) => w && !FILLER.has(w))\n .slice(0, 3)\n return words.join('-').slice(0, 64)\n}\n\nexport const isValidAgentName = (name: string): boolean => NAME_RE.test(name) && name.length <= 64\n\nconst joinList = (items: string[]): string =>\n items.length <= 2\n ? items.join(' and ')\n : `${items.slice(0, -1).join(', ')} and ${items[items.length - 1]}`\n\n/** The plain-language \"can / cannot\" sentence for a capability selection. Pure; labels are data. */\nexport function summarizeCapabilities(\n capabilities: AgentCapability[],\n enabled: Record<string, boolean>,\n modelName: string,\n labels: Pick<\n AgentCreatorLabels,\n 'summaryCan' | 'summaryCannot' | 'summaryNone' | 'summaryModel' | 'summaryModelAuto'\n > = DEFAULT_AGENT_CREATOR_LABELS\n): string[] {\n const on = capabilities.filter((c) => enabled[c.key]).map((c) => c.label.toLowerCase())\n const off = capabilities.filter((c) => !enabled[c.key]).map((c) => c.label.toLowerCase())\n const lines: string[] = []\n if (on.length === 0) lines.push(labels.summaryNone)\n else {\n lines.push(labels.summaryCan(joinList(on)))\n if (off.length > 0) lines.push(labels.summaryCannot(joinList(off)))\n }\n lines.push(modelName ? labels.summaryModel(modelName) : labels.summaryModelAuto)\n return lines\n}\n\n/** The full plain-language summary: abilities, model, workspace access and the agent's name. */\nexport function summarizeAgent(\n capabilities: AgentCapability[],\n values: Pick<AgentCreatorValues, 'capabilities' | 'modelName' | 'workspaceIds' | 'name'>,\n workspaces: Array<{ id: string; name: string }>,\n labels: AgentCreatorLabels = DEFAULT_AGENT_CREATOR_LABELS\n): string[] {\n const lines = summarizeCapabilities(capabilities, values.capabilities, values.modelName, labels)\n const names = workspaces.filter((w) => values.workspaceIds.includes(w.id)).map((w) => w.name)\n lines.push(\n names.length > 0 ? labels.summaryWorkspaces(joinList(names)) : labels.summaryNoWorkspaces\n )\n if (values.name) lines.push(labels.summaryName(values.name))\n return lines\n}\n\nexport interface AgentCreatorProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n isEdit?: boolean\n /** Name shown in the edit title. */\n agentName?: string\n capabilities: AgentCapability[]\n templates?: AgentTemplate[]\n models?: string[]\n /** The user's workspaces, for the explicit access list. */\n workspaces?: Array<{ id: string; name: string }>\n /**\n * Workspaces the agent can already read: shown ticked and fixed. Without `onRevokeWorkspace`\n * they cannot be undone here; with it each gets a remove button.\n */\n grantedWorkspaceIds?: string[]\n /** Take back a granted workspace (the host revokes, then refreshes `grantedWorkspaceIds`). */\n onRevokeWorkspace?: (workspaceId: string) => void\n /** The workspace whose revoke is in flight; its button is disabled. */\n revokingWorkspaceId?: string\n /** One-click avatar (or anything that sits beside the name). */\n avatar?: ReactNode | ((values: AgentCreatorValues) => ReactNode)\n types?: AgentTypeOption<string>[]\n /** Controlled values; omit to let the dialog hold them (seeded by `initialValues`). */\n values?: AgentCreatorValues\n initialValues?: Partial<AgentCreatorValues>\n onValuesChange?: (values: AgentCreatorValues) => void\n /** Avatar field, skills/tool pickers or anything else, folded under Advanced. */\n advanced?: ReactNode | ((values: AgentCreatorValues) => ReactNode)\n isSaving?: boolean\n onSubmit: (values: AgentCreatorValues) => void\n labels?: Partial<AgentCreatorLabels>\n testId?: string\n}\n\nconst BLANK: AgentCreatorValues = {\n name: '',\n persona: '',\n capabilities: {},\n modelName: '',\n type: 'builtin',\n workspaceIds: [],\n}\n\n/**\n * Create or edit an agent from a plain description. Templates pre-fill the description and the\n * capabilities, a live sentence says what the agent can and cannot do, and the knobs (capability\n * toggles, model, type, avatar, pickers) are folded under Advanced.\n */\nexport function AgentCreator({\n open,\n onOpenChange,\n isEdit = false,\n agentName,\n capabilities,\n templates = [],\n models = [],\n workspaces = [],\n grantedWorkspaceIds = [],\n onRevokeWorkspace,\n revokingWorkspaceId,\n avatar,\n types,\n values: valuesProp,\n initialValues,\n onValuesChange,\n advanced,\n isSaving,\n onSubmit,\n labels,\n testId,\n}: AgentCreatorProps) {\n const l = { ...DEFAULT_AGENT_CREATOR_LABELS, ...labels }\n const seed = useMemo<AgentCreatorValues>(\n () => ({ ...BLANK, ...initialValues }),\n // Seeded once per open.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [open]\n )\n const [values, setValues] = useControllableState<AgentCreatorValues>(\n valuesProp,\n seed,\n onValuesChange\n )\n const [advancedOpen, setAdvancedOpen] = useState(false)\n // Until the user edits the name it follows the description.\n const [nameTouched, setNameTouched] = useState(false)\n useEffect(() => {\n if (open) {\n if (valuesProp === undefined) setValues(seed)\n setAdvancedOpen(false)\n setNameTouched(Boolean(seed.name))\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open])\n\n const id = testIdOr(testId, { testId: 'agent-creator' })\n const name = values.name\n const nameValid = isValidAgentName(name)\n const canSubmit = (isEdit || nameValid) && !isSaving\n\n const patch = (next: Partial<AgentCreatorValues>) => setValues({ ...values, ...next })\n\n const setPersona = (persona: string) =>\n patch({ persona, ...(!isEdit && !nameTouched ? { name: deriveAgentName(persona) } : {}) })\n\n const applyTemplate = (t: AgentTemplate) =>\n patch({\n persona: t.persona,\n capabilities: Object.fromEntries(\n capabilities.map((c) => [c.key, t.capabilities.includes(c.key)])\n ),\n ...(!isEdit && !nameTouched ? { name: deriveAgentName(t.persona) } : {}),\n })\n\n const summary = summarizeAgent(capabilities, values, workspaces, l)\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"sheet\"\n className=\"max-h-[calc(100dvh-2rem)] overflow-y-auto sm:max-w-xl\"\n data-testid={id}\n >\n <DialogHeader>\n <DialogTitle>{isEdit ? l.titleEdit(agentName ?? name) : l.titleNew}</DialogTitle>\n <DialogDescription>{isEdit ? l.descriptionEdit : l.descriptionNew}</DialogDescription>\n </DialogHeader>\n\n <form\n className=\"flex flex-col gap-5\"\n onSubmit={(event) => {\n event.preventDefault()\n if (canSubmit) onSubmit(values)\n }}\n >\n <div className=\"flex flex-col gap-1.5\">\n <Label htmlFor=\"agent-creator-describe\">{l.describe}</Label>\n <Textarea\n id=\"agent-creator-describe\"\n data-testid={`${id}-describe`}\n value={values.persona}\n placeholder={l.describePlaceholder}\n rows={4}\n autoFocus\n onChange={(e) => setPersona(e.target.value)}\n />\n <p className=\"text-xs text-muted-foreground\">{l.describeHint}</p>\n </div>\n\n {!isEdit && templates.length > 0 && (\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-templates`}>\n <Label>{l.startFrom}</Label>\n <div className=\"flex flex-wrap gap-2\">\n {templates.map((t) => (\n <button\n key={t.id}\n type=\"button\"\n title={t.description}\n onClick={() => applyTemplate(t)}\n data-testid={`${id}-template-${t.id}`}\n className={cn(\n 'rounded-full border border-border px-3 py-1.5 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11 [&:hover]:bg-accent'\n )}\n >\n {t.title}\n </button>\n ))}\n </div>\n </div>\n )}\n\n <div\n className=\"rounded-lg bg-muted p-3 text-sm\"\n data-testid={`${id}-summary`}\n aria-live=\"polite\"\n >\n <div className=\"mb-1 flex items-center gap-1.5 text-xs font-medium text-muted-foreground\">\n <Sparkles className=\"size-4 text-ai-ink\" aria-hidden=\"true\" />\n {l.summaryHeading}\n </div>\n {summary.map((line) => (\n <p key={line}>{line}</p>\n ))}\n <button\n type=\"button\"\n onClick={() => setAdvancedOpen(true)}\n data-testid={`${id}-summary-change`}\n className=\"mt-1 text-xs font-medium text-primary underline-offset-2 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11\"\n >\n {l.summaryChange}\n </button>\n </div>\n\n <div className=\"flex items-end gap-4\">\n {typeof avatar === 'function' ? avatar(values) : avatar}\n {!isEdit && (\n <div className=\"flex min-w-0 flex-1 flex-col gap-1.5\">\n <Label htmlFor=\"agent-creator-name\">{l.name}</Label>\n <Input\n id=\"agent-creator-name\"\n data-testid={`${id}-name`}\n value={name}\n placeholder=\"research-assistant\"\n aria-invalid={name !== '' && !nameValid ? true : undefined}\n onChange={(e) => {\n setNameTouched(true)\n patch({ name: e.target.value })\n }}\n />\n {name !== '' && !nameValid && (\n <p className=\"text-xs text-destructive\">{l.nameInvalid}</p>\n )}\n </div>\n )}\n </div>\n\n <FoldSection\n label={l.advanced}\n open={advancedOpen}\n onOpenChange={setAdvancedOpen}\n testId={`${id}-advanced-toggle`}\n >\n <div className=\"flex flex-col gap-4\">\n {!isEdit && types && types.length > 0 && (\n <AgentTypeSelector\n value={values.type}\n onChange={(type) => patch({ type })}\n options={types}\n testId={`${id}-type`}\n optionTestId={(value) => `${id}-type-${value}`}\n />\n )}\n <div className=\"flex flex-col gap-2\">\n <Label>{l.capabilities}</Label>\n <p className=\"text-xs text-muted-foreground\">{l.toolsHint}</p>\n <CapabilityGrid testId={`${id}-capabilities`}>\n {capabilities.map((c) => (\n <CapabilityTile\n key={c.key}\n label={c.label}\n description={c.description}\n icon={c.icon}\n selected={Boolean(values.capabilities[c.key])}\n onToggle={() =>\n patch({\n capabilities: {\n ...values.capabilities,\n [c.key]: !values.capabilities[c.key],\n },\n })\n }\n testId={`${id}-cap-${c.key}`}\n />\n ))}\n </CapabilityGrid>\n </div>\n <div className=\"flex flex-col gap-2\" data-testid={`${id}-workspaces`}>\n <Label>{l.workspaceAccess}</Label>\n <p className=\"text-xs text-muted-foreground\">{l.workspaceAccessHint}</p>\n {workspaces.length === 0 ? (\n <p className=\"text-xs text-muted-foreground\">{l.noWorkspacesToGrant}</p>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {workspaces.map((w) => {\n const already = grantedWorkspaceIds.includes(w.id)\n const on = already || values.workspaceIds.includes(w.id)\n return (\n <span key={w.id} className=\"inline-flex items-center gap-1\">\n <button\n type=\"button\"\n role=\"checkbox\"\n aria-checked={on}\n disabled={already}\n title={already ? l.workspaceAlready : undefined}\n data-testid={`${id}-workspace-${w.id}`}\n onClick={() =>\n patch({\n workspaceIds: on\n ? values.workspaceIds.filter((x) => x !== w.id)\n : [...values.workspaceIds, w.id],\n })\n }\n className={cn(\n 'rounded-md border px-3 py-1.5 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-60 pointer-coarse:min-h-11',\n on\n ? 'border-primary bg-primary/10 text-primary'\n : 'border-border [&:hover:not(:disabled)]:bg-accent'\n )}\n >\n {w.name}\n </button>\n {already && onRevokeWorkspace && (\n <button\n type=\"button\"\n aria-label={l.revokeWorkspace(w.name)}\n title={l.revokeWorkspace(w.name)}\n disabled={revokingWorkspaceId === w.id}\n data-testid={`${id}-workspace-${w.id}-revoke`}\n onClick={() => onRevokeWorkspace(w.id)}\n className=\"flex size-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50 pointer-coarse:size-11\"\n >\n <X className=\"size-4\" aria-hidden />\n </button>\n )}\n </span>\n )\n })}\n </div>\n )}\n </div>\n {models.length > 0 && (\n <div className=\"flex flex-col gap-1.5\">\n <Label>{l.model}</Label>\n <Select\n value={values.modelName || '__auto__'}\n onValueChange={(v) => patch({ modelName: v === '__auto__' ? '' : v })}\n >\n <SelectTrigger data-testid={`${id}-model`} className=\"pointer-coarse:min-h-11\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"__auto__\">{l.modelAuto}</SelectItem>\n {models.map((m) => (\n <SelectItem key={m} value={m}>\n {m}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n {typeof advanced === 'function' ? advanced(values) : advanced}\n </div>\n </FoldSection>\n\n <div className=\"flex flex-col-reverse sm:flex-row sm:justify-end gap-2 border-t border-border pt-3\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={() => onOpenChange(false)}\n data-testid={`${id}-cancel`}\n className=\"pointer-coarse:min-h-11\"\n >\n {l.cancel}\n </Button>\n <Button\n type=\"submit\"\n disabled={!canSubmit}\n data-testid={`${id}-submit`}\n className=\"gap-1.5 pointer-coarse:min-h-11\"\n >\n {isSaving ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <Sparkles className=\"size-4\" />\n )}\n {isSaving ? l.saving : isEdit ? l.save : l.create}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n )\n}\n","import type { AgentCreatorValues } from './AgentCreator'\n\n/**\n * The saved persona tells the agent its own name: \"You are Reviewer, an AI agent. <description>\".\n * {@link stripPersonaPreamble} takes the preamble off again so the editor shows only what the user wrote.\n */\nexport function composePersona(name: string, description: string): string {\n const body = description.trim()\n const preamble = `You are ${name}, an AI agent.`\n return body ? `${preamble} ${body}` : preamble\n}\n\n/** The description the user wrote, without the preamble {@link composePersona} adds. */\nexport function stripPersonaPreamble(persona: string): string {\n return persona.replace(/^You are .+?, an AI agent\\.\\s*/, '').trim()\n}\n\n/**\n * The `Agents` config section an {@link AgentCreatorValues} form stands for: the persona, the model\n * when one is picked, and one boolean per capability key. Pass it as `sections.Agents` to\n * `useSaveAgentConfig` from `@arbidocs/react`.\n */\nexport function agentCreatorToConfigSection(\n values: Pick<AgentCreatorValues, 'name' | 'persona' | 'modelName' | 'capabilities'>,\n capabilityKeys: string[]\n): Record<string, unknown> {\n return {\n PERSONA: composePersona(values.name, values.persona),\n ...(values.modelName ? { AGENT_MODEL_NAME: values.modelName } : {}),\n ...Object.fromEntries(capabilityKeys.map((k) => [k, !!values.capabilities[k]])),\n }\n}\n\n/** The form values an existing agent's `Agents` config section opens as (edit mode). */\nexport function agentConfigSectionToValues(\n section: Record<string, unknown> | undefined,\n capabilityKeys: string[]\n): Pick<AgentCreatorValues, 'persona' | 'modelName' | 'capabilities'> {\n const s = section ?? {}\n return {\n persona: stripPersonaPreamble(String(s.PERSONA ?? '')),\n modelName: String(s.AGENT_MODEL_NAME ?? ''),\n capabilities: Object.fromEntries(capabilityKeys.map((k) => [k, Boolean(s[k])])),\n }\n}\n","/**\n * The agent creator's standard choices: the headline tool switches an agent can hold (all in its\n * config's `Agents` section), generic starting points, and how it runs. A host may pass its own\n * (a firm's templates, its own wording).\n */\n\nimport {\n Brain,\n FileText,\n Globe,\n ImageIcon,\n ListChecks,\n Telescope,\n Terminal,\n Wand2,\n} from 'lucide-react'\nimport type { AgentCapability, AgentTemplate } from './AgentCreator'\nimport type { AgentTypeOption } from './AgentEditorParts'\n\nexport const DEFAULT_AGENT_CAPABILITIES: AgentCapability[] = [\n {\n key: 'WEB_SEARCH_ENABLED',\n label: 'Web search',\n description: 'Current facts, cited sources',\n icon: Globe,\n },\n {\n key: 'RUN_CODE_ENABLED',\n label: 'Run code',\n description: 'Exact numbers, real computation',\n icon: Terminal,\n },\n {\n key: 'DEEP_RESEARCH_ENABLED',\n label: 'Deep research',\n description: 'Multi-source investigations',\n icon: Telescope,\n },\n {\n key: 'PLANNING_ENABLED',\n label: 'Planning',\n description: 'Plans complex work first',\n icon: ListChecks,\n },\n {\n key: 'ARTIFACTS_ENABLED',\n label: 'Documents',\n description: 'Drafts and edits documents',\n icon: FileText,\n },\n {\n key: 'IMAGE_ENABLED',\n label: 'Images',\n description: 'Generates and edits images',\n icon: ImageIcon,\n },\n { key: 'MEMORY_ENABLED', label: 'Memory', description: 'Remembers across sessions', icon: Brain },\n { key: 'SKILLS_ENABLED', label: 'Skills', description: 'May follow your skills', icon: Wand2 },\n]\n\n/** Generic starting points. Domain wording belongs to a deployment, not to the kit. */\nexport const DEFAULT_AGENT_TEMPLATES: AgentTemplate[] = [\n {\n id: 'researcher',\n title: 'Researcher',\n description: 'Looks things up and cites its sources',\n persona:\n 'Researches a question thoroughly, reads the best sources, and cites every claim. Says plainly when something could not be confirmed.',\n capabilities: ['WEB_SEARCH_ENABLED', 'DEEP_RESEARCH_ENABLED', 'PLANNING_ENABLED'],\n },\n {\n id: 'analyst',\n title: 'Analyst',\n description: 'Works through numbers and data',\n persona:\n 'Works through data carefully, checks its arithmetic by running code, and explains how it reached each figure.',\n capabilities: ['RUN_CODE_ENABLED', 'PLANNING_ENABLED', 'ARTIFACTS_ENABLED'],\n },\n {\n id: 'note-taker',\n title: 'Note taker',\n description: 'Keeps notes and remembers context',\n persona:\n 'Keeps concise notes, remembers what matters between sessions, and drafts clean summaries on request.',\n capabilities: ['MEMORY_ENABLED', 'ARTIFACTS_ENABLED'],\n },\n { id: 'blank', title: 'Blank', description: 'Start from nothing', persona: '', capabilities: [] },\n]\n\n/** Where an agent runs: on ARBI, or an external runtime connected from the user's machine. */\nexport const DEFAULT_AGENT_TYPES: AgentTypeOption<string>[] = [\n {\n value: 'builtin',\n title: 'Built-in',\n description: 'Runs on ARBI’s servers — woken by tasks and messages.',\n },\n {\n value: 'external',\n title: 'External',\n description: 'Connect a Claude or OpenClaw runtime from your machine.',\n },\n]\n","/**\n * The copy-paste setup for connecting an EXTERNAL runtime (Claude CLI or OpenClaw) as an agent:\n * install the CLI, point it at this deployment, sign in as the agent (email + its one-time signing\n * key), start the listener for the chosen runtime. Only the last line differs between runtimes.\n */\n\nimport { useCallback, useMemo, useState } from 'react'\nimport { Check, Copy } from 'lucide-react'\nimport { Button, Label } from '@arbidocs/react/ui'\nimport { useBlocksEnvironment } from '../../provider/BlocksProvider'\n\ntype AgentBackend = 'claude' | 'openclaw'\n\nexport interface AgentConnectInstructionsProps {\n /** The agent's login email (from the create response). */\n email: string\n /** Server-minted signing key, returned exactly once at creation. */\n signingKey: string\n}\n\nexport function AgentConnectInstructions({ email, signingKey }: AgentConnectInstructionsProps) {\n const { notify, runtimeConfig } = useBlocksEnvironment()\n const [agentBackend, setAgentBackend] = useState<AgentBackend>('claude')\n const [copied, setCopied] = useState(false)\n\n // Pre-filled with the literal email and key, so it pastes onto any machine as it is.\n const setupScript = useMemo(\n () =>\n [\n 'npm install -g @arbidocs/cli',\n `arbi config set-url https://${runtimeConfig.deploymentDomain}`,\n `arbi login --email ${email} --signing-key ${signingKey}`,\n `arbi listen --agent ${agentBackend}`,\n ].join('\\n'),\n [email, signingKey, agentBackend, runtimeConfig.deploymentDomain]\n )\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(setupScript)\n setCopied(true)\n notify('Setup commands copied', 'success')\n setTimeout(() => setCopied(false), 2000)\n } catch {\n notify('Failed to copy', 'error')\n }\n }, [setupScript, notify])\n\n return (\n <div\n className=\"space-y-2 rounded-lg border border-yellow-border bg-yellow-bg/60 p-3\"\n data-testid=\"agent-connect-instructions\"\n >\n <div className=\"flex items-center justify-between gap-3\">\n <p className=\"text-sm font-medium\">Connect it — run on the agent machine:</p>\n <div className=\"flex items-center gap-2\">\n <Label htmlFor=\"agent-backend\" className=\"text-xs text-muted-foreground\">\n Runtime\n </Label>\n <select\n id=\"agent-backend\"\n value={agentBackend}\n onChange={(e) => setAgentBackend(e.target.value as AgentBackend)}\n className=\"h-7 rounded-md border border-input bg-background px-2 text-xs\"\n data-testid=\"agent-backend-select\"\n >\n <option value=\"claude\">claude</option>\n <option value=\"openclaw\">openclaw</option>\n </select>\n </div>\n </div>\n <pre\n className=\"select-all whitespace-pre-wrap break-all rounded-md bg-muted p-3 text-xs font-mono leading-relaxed\"\n data-testid=\"agent-setup-script\"\n >\n {setupScript}\n </pre>\n <div className=\"flex items-center justify-between gap-2\">\n <p className=\"text-xs text-muted-foreground\">\n The signing key is shown only once — copy it now. It cannot be recovered.\n </p>\n <Button variant=\"outline\" size=\"sm\" onClick={handleCopy} className=\"shrink-0\">\n {copied ? <Check className=\"mr-2 h-4 w-4\" /> : <Copy className=\"mr-2 h-4 w-4\" />}\n Copy\n </Button>\n </div>\n </div>\n )\n}\n","import type { MouseEvent, ReactNode } from 'react'\nimport { Globe } from 'lucide-react'\nimport { Button, Tooltip, TooltipContent, TooltipTrigger, cn } from '@arbidocs/react/ui'\n\n/** Small tonal pill showing a non-markdown skill type. */\nexport function SkillTypeBadge({ type, className }: { type: string; className?: string }) {\n return (\n <span\n className={cn(\n 'shrink-0 rounded bg-background px-1.5 py-0.5 text-xs uppercase tracking-wide text-muted-foreground',\n className\n )}\n data-slot=\"skill-type-badge\"\n >\n {type}\n </span>\n )\n}\n\nexport interface SkillGlobalBadgeLabels {\n global: string\n globalTitle: string\n}\n\nexport const DEFAULT_SKILL_GLOBAL_BADGE_LABELS: SkillGlobalBadgeLabels = {\n global: 'Global',\n globalTitle: 'Shared with everyone in the marketplace',\n}\n\n/** \"Global\" marketplace pill. */\nexport function SkillGlobalBadge({\n className,\n labels,\n}: {\n className?: string\n labels?: Partial<SkillGlobalBadgeLabels>\n}) {\n const l = { ...DEFAULT_SKILL_GLOBAL_BADGE_LABELS, ...labels }\n return (\n <span\n className={cn(\n 'inline-flex shrink-0 items-center gap-1 rounded bg-accent px-1.5 py-0.5 text-xs uppercase tracking-wide text-accent-foreground',\n className\n )}\n title={l.globalTitle}\n data-slot=\"skill-global-badge\"\n >\n <Globe className=\"size-3\" />\n {l.global}\n </span>\n )\n}\n\nexport interface SkillActionButtonProps {\n label: string\n /** Tooltip text; defaults to `label`. */\n tooltip?: string\n onClick: (e: MouseEvent<HTMLButtonElement>) => void\n children: ReactNode\n testId?: string\n}\n\n/**\n * Icon action inside a clickable skill row. Stops propagation so the row's invoke handler does\n * not fire, and meets the 44px touch target on coarse pointers.\n */\nexport function SkillActionButton({\n label,\n tooltip,\n onClick,\n children,\n testId,\n}: SkillActionButtonProps) {\n return (\n <Tooltip>\n <TooltipTrigger asChild onFocusCapture={(e) => e.stopPropagation()}>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7 shrink-0 pointer-coarse:size-11\"\n onClick={(e) => {\n e.stopPropagation()\n onClick(e)\n }}\n aria-label={label}\n data-testid={testId}\n >\n {children}\n </Button>\n </TooltipTrigger>\n <TooltipContent>\n <p>{tooltip ?? label}</p>\n </TooltipContent>\n </Tooltip>\n )\n}\n\n/** Activate a role=\"button\" row with Enter/Space, ignoring keys that bubble from inner controls. */\nexport function activateOnKey(handler: () => void) {\n return (e: React.KeyboardEvent<HTMLElement>) => {\n if (e.target !== e.currentTarget) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handler()\n }\n }\n}\n","import { useState, type ReactNode } from 'react'\nimport { Wand2 } from 'lucide-react'\nimport { Button, Input, Label, Textarea } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport interface SkillGenerateFormLabels {\n title: string\n hint: string\n placeholder: string\n generate: string\n writeManually: string\n}\n\nexport const DEFAULT_SKILL_GENERATE_FORM_LABELS: SkillGenerateFormLabels = {\n title: 'Generate with AI',\n hint: 'Describe what the skill should do. The assistant drafts it in chat, then you can edit it here.',\n placeholder: 'e.g. Summarize a contract into key obligations, dates, and parties',\n generate: 'Generate with AI',\n writeManually: '…or write it manually',\n}\n\nexport interface SkillGenerateFormTestIds {\n description: string\n generate: string\n writeManually: string\n}\n\nexport interface SkillGenerateFormProps {\n /** Describe what the skill should do; the app routes it to the agent. */\n onGenerate: (description: string) => void\n /** Escape hatch to the blank editor. */\n onManual: () => void\n /** Icon on the generate button. */\n icon?: ReactNode\n labels?: Partial<SkillGenerateFormLabels>\n testIds?: Partial<SkillGenerateFormTestIds>\n}\n\n/** AI-first skill creation: describe it, or write it manually. */\nexport function SkillGenerateForm({\n onGenerate,\n onManual,\n icon,\n labels,\n testIds,\n}: SkillGenerateFormProps) {\n const l = { ...DEFAULT_SKILL_GENERATE_FORM_LABELS, ...labels }\n const [desc, setDesc] = useState('')\n return (\n <div className=\"flex flex-1 flex-col gap-4 overflow-y-auto p-4\" data-slot=\"skill-generate-form\">\n <div className=\"rounded-lg bg-muted p-4\">\n <div className=\"mb-1 flex items-center gap-2\">\n <Wand2 className=\"size-4 text-primary\" />\n <span className=\"text-sm font-medium\">{l.title}</span>\n </div>\n <p className=\"mb-3 text-xs text-muted-foreground\">{l.hint}</p>\n <Textarea\n value={desc}\n onChange={(e) => setDesc(e.target.value)}\n rows={4}\n placeholder={l.placeholder}\n data-testid={testIdOr(testIds?.description, { testId: 'skills-panel-ai-desc' })}\n />\n <div className=\"mt-3 flex justify-end\">\n <Button\n size=\"sm\"\n disabled={!desc.trim()}\n onClick={() => onGenerate(desc.trim())}\n data-testid={testIdOr(testIds?.generate, { testId: 'skills-panel-ai-generate' })}\n >\n {icon && <span className=\"mr-1 [&>svg]:size-4\">{icon}</span>}\n {l.generate}\n </Button>\n </div>\n </div>\n <button\n type=\"button\"\n className=\"self-start text-sm text-muted-foreground underline-offset-2 hover:text-foreground hover:underline pointer-coarse:min-h-11\"\n onClick={onManual}\n data-testid={testIdOr(testIds?.writeManually, { testId: 'skills-panel-write-manually' })}\n >\n {l.writeManually}\n </button>\n </div>\n )\n}\n\nexport interface SkillEditFormLabels {\n name: string\n namePlaceholder: string\n /** Receives the typed name (empty when nothing is typed yet). */\n invokedAs: (name: string) => ReactNode\n description: string\n descriptionPlaceholder: string\n instructions: string\n cancel: string\n saving: string\n saveChanges: string\n create: string\n}\n\nexport const DEFAULT_SKILL_EDIT_FORM_LABELS: SkillEditFormLabels = {\n name: 'Name',\n namePlaceholder: 'contract-summary',\n invokedAs: (name) => (\n <>\n Invoked as <span className=\"font-mono\">/{name || 'skill-name'}</span>\n </>\n ),\n description: 'Description',\n descriptionPlaceholder: 'What it does and when to use it',\n instructions: 'Instructions',\n cancel: 'Cancel',\n saving: 'Saving…',\n saveChanges: 'Save changes',\n create: 'Create skill',\n}\n\nexport interface SkillEditFormTestIds {\n name: string\n description: string\n save: string\n}\n\nexport interface SkillEditFormProps {\n name: string\n onNameChange: (name: string) => void\n /** Existing skills cannot be renamed. */\n isNameLocked?: boolean\n nameError?: string | null\n description: string\n onDescriptionChange: (description: string) => void\n /** The instructions editor (the app supplies its markdown editor). */\n editor: ReactNode\n isSaving?: boolean\n isEditing: boolean\n onSave: () => void\n onCancel: () => void\n labels?: Partial<SkillEditFormLabels>\n testIds?: Partial<SkillEditFormTestIds>\n}\n\nconst FIELD_LABEL = 'text-xs font-semibold uppercase tracking-wide text-muted-foreground'\n\n/** Skill editor chrome: name + description + editor slot + Cancel / Save footer. */\nexport function SkillEditForm({\n name,\n onNameChange,\n isNameLocked,\n nameError,\n description,\n onDescriptionChange,\n editor,\n isSaving,\n isEditing,\n onSave,\n onCancel,\n labels,\n testIds,\n}: SkillEditFormProps) {\n const l = { ...DEFAULT_SKILL_EDIT_FORM_LABELS, ...labels }\n return (\n <div className=\"flex h-full min-h-0 flex-col\" data-slot=\"skill-edit-form\">\n <div className=\"flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto p-4\">\n <div>\n <Label htmlFor=\"sp-name\" className={FIELD_LABEL}>\n {l.name}\n </Label>\n <Input\n id=\"sp-name\"\n value={name}\n disabled={isNameLocked}\n placeholder={l.namePlaceholder}\n onChange={(e) => onNameChange(e.target.value)}\n className=\"mt-1\"\n data-testid={testIdOr(testIds?.name, { testId: 'skills-panel-edit-name' })}\n />\n <p className=\"mt-1 text-xs text-muted-foreground\">{l.invokedAs(name)}</p>\n {nameError && <p className=\"mt-1 text-xs text-destructive\">{nameError}</p>}\n </div>\n <div>\n <Label htmlFor=\"sp-desc\" className={FIELD_LABEL}>\n {l.description}\n </Label>\n <Input\n id=\"sp-desc\"\n value={description}\n placeholder={l.descriptionPlaceholder}\n onChange={(e) => onDescriptionChange(e.target.value)}\n className=\"mt-1\"\n data-testid={testIdOr(testIds?.description, { testId: 'skills-panel-edit-desc' })}\n />\n </div>\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <Label className={`${FIELD_LABEL} mb-1`}>{l.instructions}</Label>\n <div className=\"min-h-[240px] flex-1 overflow-hidden rounded-md border border-border\">\n {editor}\n </div>\n </div>\n </div>\n <div className=\"flex flex-col-reverse sm:flex-row sm:justify-end gap-2 border-t border-border px-4 py-3\">\n <Button variant=\"outline\" size=\"sm\" onClick={onCancel}>\n {l.cancel}\n </Button>\n <Button\n size=\"sm\"\n onClick={onSave}\n disabled={isSaving}\n data-testid={testIdOr(testIds?.save, { testId: 'skills-panel-edit-save' })}\n >\n {isSaving ? l.saving : isEditing ? l.saveChanges : l.create}\n </Button>\n </div>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { LayoutGrid, List } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { activateOnKey } from './SkillParts'\n\n/* ------------------------------ filter chips ------------------------------ */\n\nexport interface SkillFilterOption {\n id: string\n label: string\n /** How many skills this filter would show. */\n count?: number\n}\n\nexport interface SkillFilterChipsProps {\n options: SkillFilterOption[]\n value: string\n onChange: (id: string) => void\n /** Accessible name of the group. */\n label: string\n /** Chip ids are `<prefix>-<option id>`. */\n testIdPrefix?: string\n className?: string\n}\n\n/** A single-choice row of filter chips (a radio group): 44px targets on touch, wraps on phones. */\nexport function SkillFilterChips({\n options,\n value,\n onChange,\n label,\n testIdPrefix = 'skills-filter',\n className,\n}: SkillFilterChipsProps) {\n return (\n <div\n role=\"radiogroup\"\n aria-label={label}\n className={cn('flex flex-wrap gap-2', className)}\n data-slot=\"skill-filter-chips\"\n >\n {options.map((option) => {\n const selected = option.id === value\n return (\n <button\n key={option.id}\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n onClick={() => onChange(option.id)}\n data-testid={`${testIdPrefix}-${option.id}`}\n className={cn(\n 'inline-flex min-h-8 items-center gap-1.5 rounded-full border px-3 text-sm transition-colors pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n selected\n ? 'border-primary bg-primary/10 text-foreground'\n : 'border-border bg-background text-muted-foreground [&:hover]:bg-muted'\n )}\n >\n {option.label}\n {option.count !== undefined && (\n <span className=\"text-xs text-muted-foreground\">{option.count}</span>\n )}\n </button>\n )\n })}\n </div>\n )\n}\n\n/* ------------------------------- view toggle ------------------------------ */\n\nexport type SkillBrowserView = 'gallery' | 'list'\n\nexport interface SkillViewToggleLabels {\n group: string\n gallery: string\n list: string\n}\n\nexport const DEFAULT_SKILL_VIEW_TOGGLE_LABELS: SkillViewToggleLabels = {\n group: 'View',\n gallery: 'Gallery',\n list: 'List',\n}\n\nexport interface SkillViewToggleProps {\n value: SkillBrowserView\n onChange: (view: SkillBrowserView) => void\n labels?: Partial<SkillViewToggleLabels>\n testId?: string\n}\n\n/** Gallery / list switch. */\nexport function SkillViewToggle({ value, onChange, labels, testId }: SkillViewToggleProps) {\n const l = { ...DEFAULT_SKILL_VIEW_TOGGLE_LABELS, ...labels }\n const item = (view: SkillBrowserView, label: string, icon: ReactNode) => (\n <button\n type=\"button\"\n role=\"radio\"\n aria-checked={value === view}\n aria-label={label}\n title={label}\n onClick={() => onChange(view)}\n data-testid={`${testId ?? 'skills-view-toggle'}-${view}`}\n className={cn(\n 'flex size-8 items-center justify-center rounded-md pointer-coarse:size-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n value === view ? 'bg-background text-foreground shadow-sm' : 'text-muted-foreground'\n )}\n >\n {icon}\n </button>\n )\n return (\n <div\n role=\"radiogroup\"\n aria-label={l.group}\n className=\"inline-flex shrink-0 gap-0.5 rounded-lg bg-muted p-0.5\"\n data-testid={testId ?? 'skills-view-toggle'}\n >\n {item('gallery', l.gallery, <LayoutGrid className=\"size-4\" />)}\n {item('list', l.list, <List className=\"size-4\" />)}\n </div>\n )\n}\n\n/* --------------------------------- tile ----------------------------------- */\n\nexport interface SkillTileProps {\n name: string\n description: string\n /** Where it comes from: \"Built in\", \"Yours\", \"Shared\". */\n sourceLabel: string\n /** Shown as a small pill when it is not plain instructions. */\n type?: string\n icon?: ReactNode\n layout: SkillBrowserView\n selected?: boolean\n onSelect: () => void\n testId?: string\n}\n\n/** One skill in the gallery (a card) or the list (a row). Selecting it opens its detail. */\nexport function SkillTile({\n name,\n description,\n sourceLabel,\n type,\n icon,\n layout,\n selected,\n onSelect,\n testId,\n}: SkillTileProps) {\n const isRow = layout === 'list'\n return (\n <div\n role=\"button\"\n tabIndex={0}\n aria-pressed={selected}\n onClick={onSelect}\n onKeyDown={activateOnKey(onSelect)}\n data-testid={testId ?? `skill-tile-${name}`}\n data-skill-name={name}\n data-slot=\"skill-tile\"\n className={cn(\n 'flex cursor-pointer rounded-lg border p-3 text-left transition-colors pointer-coarse:min-h-11 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n isRow ? 'items-center gap-3' : 'h-full flex-col gap-2',\n selected ? 'border-primary bg-primary/5' : 'border-transparent bg-muted [&:hover]:bg-accent'\n )}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n {icon && <span className=\"shrink-0 text-ai-ink [&>svg]:size-5\">{icon}</span>}\n <span className=\"min-w-0 truncate text-sm font-semibold text-foreground\">{name}</span>\n </div>\n <p\n className={cn(\n 'min-w-0 text-sm text-muted-foreground',\n isRow ? 'flex-1 truncate max-sm:hidden' : 'line-clamp-3'\n )}\n >\n {description}\n </p>\n <div className={cn('flex shrink-0 items-center gap-1.5', isRow && 'ml-auto')}>\n {type && type !== 'markdown' && (\n <span className=\"rounded bg-background px-1.5 py-0.5 text-xs uppercase tracking-wide text-muted-foreground\">\n {type}\n </span>\n )}\n <span className=\"rounded bg-background px-1.5 py-0.5 text-xs text-muted-foreground\">\n {sourceLabel}\n </span>\n </div>\n </div>\n )\n}\n\n/* -------------------------------- detail ---------------------------------- */\n\nexport interface SkillDetailProps {\n title: string\n sourceLabel: string\n description: string\n icon?: ReactNode\n /** A line under the title (\"Your copy is used instead of the original\"). */\n notice?: ReactNode\n /** Sections: the form it asks for, the instructions. */\n children?: ReactNode\n /** The action buttons, as a toolbar. */\n actions?: ReactNode\n testId?: string\n}\n\n/** The detail pane of one skill: a header, sections and a sticky action bar. */\nexport function SkillDetail({\n title,\n sourceLabel,\n description,\n icon,\n notice,\n children,\n actions,\n testId,\n}: SkillDetailProps) {\n return (\n <section\n className=\"flex min-h-0 flex-1 flex-col\"\n data-testid={testId ?? 'skill-detail'}\n data-slot=\"skill-detail\"\n aria-label={title}\n >\n <div className=\"min-h-0 flex-1 space-y-4 overflow-y-auto p-4\">\n <header className=\"space-y-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n {icon && <span className=\"text-ai-ink [&>svg]:size-5\">{icon}</span>}\n <h3 className=\"text-base font-semibold text-foreground\">{title}</h3>\n <span className=\"rounded bg-muted px-1.5 py-0.5 text-xs text-muted-foreground\">\n {sourceLabel}\n </span>\n </div>\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n {notice && <p className=\"text-sm text-foreground\">{notice}</p>}\n </header>\n {children}\n </div>\n {actions && (\n <div\n className=\"flex flex-wrap gap-2 border-t border-border bg-background p-3\"\n data-slot=\"skill-detail-actions\"\n >\n {actions}\n </div>\n )}\n </section>\n )\n}\n\n/** A titled block inside the detail pane. */\nexport function SkillDetailSection({\n title,\n children,\n testId,\n}: {\n title: string\n children: ReactNode\n testId?: string\n}) {\n return (\n <div className=\"space-y-1.5\" data-testid={testId}>\n <h4 className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {title}\n </h4>\n {children}\n </div>\n )\n}\n","/**\n * Skill files: the SKILL.md frontmatter parser / serializer.\n *\n * Mirrors the backend parser at\n * `ARBI/src/core/instruments/skills.py::parse_skill_frontmatter` exactly so\n * that SKILL.md files created by this UI round-trip through the backend skill\n * loader without surprises.\n *\n * Backend rules we replicate:\n * - Frontmatter is delimited by a leading `---` and a closing `---`.\n * - It is parsed line-by-line (NOT a real YAML parser): each line is split\n * on the first `:`, key is lowercased, value is trimmed.\n * - `name` / `description` are metadata.\n * - `model` (string), `temperature` (float 0..2), `agent` (truthy string),\n * `tools` (comma-separated -> list), `type` (alias-mapped) are config.\n * - Skill type is detected from frontmatter `type`, then filename extension,\n * then shebang. Default is `markdown`.\n * - Main file is `SKILL.md` / `skill.{py,sh,js,ts}` (case-insensitive) or\n * `{skill-name}.{ext}` (stem matches the skill folder name).\n *\n * A skill's slug is `skillSlug` (`re.sub(r\"[^a-z0-9-]\", \"\", name.lower())`).\n */\n\nexport type SkillType = 'markdown' | 'python' | 'shell' | 'javascript' | 'typescript'\n\nexport const SKILL_TYPES: SkillType[] = ['markdown', 'python', 'shell', 'javascript', 'typescript']\n\n/** Canonical primary file name for a skill (Claude-Code compatible). */\nexport const SKILL_MAIN_FILENAME = 'SKILL.md'\n\nexport interface ParsedSkill {\n /** Skill body with frontmatter removed (trimmed, matches backend). */\n content: string\n name: string\n description: string\n skillType: SkillType\n config: {\n model?: string\n temperature?: number\n agent?: boolean\n tools?: string[]\n }\n}\n\nconst MAIN_NAMES = new Set(['skill.md', 'skill.py', 'skill.sh', 'skill.js', 'skill.ts'])\n\n/**\n * Mirrors backend `_is_main_file`: a filename is the skill's primary entry\n * point if it's `SKILL.md`/`skill.{ext}` (case-insensitive) or its stem\n * equals the skill folder name.\n */\nexport function isMainSkillFile(filename: string, skillName: string): boolean {\n const lower = filename.toLowerCase()\n if (MAIN_NAMES.has(lower)) return true\n const stem = lower.includes('.') ? lower.slice(0, lower.lastIndexOf('.')) : lower\n return stem === skillName\n}\n\n/** Mirrors backend `_detect_type_from_content` (filename ext, then shebang). */\nfunction detectTypeFromContent(content: string, filename: string): SkillType {\n if (filename) {\n const lower = filename.toLowerCase()\n if (lower.endsWith('.py')) return 'python'\n if (lower.endsWith('.sh')) return 'shell'\n if (lower.endsWith('.js')) return 'javascript'\n if (lower.endsWith('.ts')) return 'typescript'\n }\n if (content) {\n const firstLine = content.split('\\n', 1)[0].trim()\n if (firstLine.startsWith('#!')) {\n if (firstLine.includes('python')) return 'python'\n if (firstLine.includes('bash') || firstLine.includes('/sh')) return 'shell'\n if (firstLine.includes('ts-node')) return 'typescript'\n if (firstLine.includes('node')) return 'javascript'\n }\n }\n return 'markdown'\n}\n\n/**\n * Parse skill frontmatter. Behaviourally equivalent to the backend\n * `parse_skill_frontmatter`.\n */\nexport function parseSkillFrontmatter(raw: string, filename = ''): ParsedSkill {\n const config: ParsedSkill['config'] = {}\n let name = ''\n let description = ''\n let skillType: SkillType = 'markdown'\n\n if (!raw.startsWith('---')) {\n return {\n content: raw,\n name,\n description,\n config,\n skillType: detectTypeFromContent(raw, filename),\n }\n }\n\n const end = raw.indexOf('---', 3)\n if (end === -1) {\n return {\n content: raw,\n name,\n description,\n config,\n skillType: detectTypeFromContent(raw, filename),\n }\n }\n\n const frontmatter = raw.slice(3, end).trim()\n const body = raw.slice(end + 3).trim()\n\n for (const rawLine of frontmatter.split('\\n')) {\n const line = rawLine.trim()\n if (!line || !line.includes(':')) continue\n const idx = line.indexOf(':')\n const key = line.slice(0, idx).trim().toLowerCase()\n const value = line.slice(idx + 1).trim()\n\n if (key === 'name' && value) {\n name = value\n } else if (key === 'description' && value) {\n description = value\n } else if (key === 'model' && value) {\n config.model = value\n } else if (key === 'temperature') {\n const t = Number.parseFloat(value)\n if (!Number.isNaN(t) && t >= 0 && t <= 2) config.temperature = t\n } else if (key === 'agent') {\n config.agent = ['true', 'yes', '1'].includes(value.toLowerCase())\n } else if (key === 'tools' && value) {\n config.tools = value\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean)\n } else if (key === 'type' && value) {\n const v = value.toLowerCase()\n if (v === 'python' || v === 'py') skillType = 'python'\n else if (v === 'shell' || v === 'sh' || v === 'bash') skillType = 'shell'\n else if (v === 'javascript' || v === 'js' || v === 'node') skillType = 'javascript'\n else if (v === 'typescript' || v === 'ts') skillType = 'typescript'\n }\n }\n\n if (skillType === 'markdown') {\n skillType = detectTypeFromContent(body, filename)\n }\n\n return { content: body, name, description, config, skillType }\n}\n\n/**\n * Serialize a skill back to a SKILL.md string. The output is intentionally in\n * the simple `key: value` form the backend's line-based parser expects:\n * - `tools` is written as a comma-separated string (`tools: a, b`) because\n * the backend splits on `,` — a YAML list would NOT round-trip.\n * - `type` is only emitted when not `markdown` (markdown is the default and\n * needs no annotation).\n * - `name` / `description` are always written (metadata, Claude Code compatible).\n */\nexport function serializeSkill(input: {\n name: string\n description: string\n body: string\n type?: SkillType\n}): string {\n const lines: string[] = ['---', `name: ${input.name}`, `description: ${input.description}`]\n if (input.type && input.type !== 'markdown') {\n lines.push(`type: ${input.type}`)\n }\n lines.push('---', '', input.body.trim(), '')\n return lines.join('\\n')\n}\n","/**\n * Skill import: turn a `.md` or `.zip` someone gave you (a file, or a link to one) into the upload\n * entries `{ folder, fileName, content }` of the skill storage contract:\n *\n * - `.md` → one `skills/{slug}/SKILL.md`. The slug is the frontmatter `name`, else the file name.\n * - `.zip` → every file under `skills/{slug}/<relpath>`, subpaths kept. The slug is the archive's\n * single top-level folder, else the main file's frontmatter `name`, else the archive\n * name. The main file is renamed `SKILL.md`.\n *\n * Junk entries (`__MACOSX/`, dotfiles, folders) are skipped. The upload itself is\n * `useUploadSkillFiles` (`@arbidocs/react`).\n */\n\nimport { strFromU8, unzip, type Unzipped } from 'fflate'\nimport { skillSlug } from '../workflows/skillMarkdown'\nimport { isMainSkillFile, parseSkillFrontmatter, SKILL_MAIN_FILENAME } from './skillFiles'\n\nconst SKILL_FOLDER_PREFIX = 'skills/'\n\nexport interface SkillUploadEntry {\n folder: string\n fileName: string\n content: string\n}\n\nexport interface SkillImportResult {\n slug: string\n entries: SkillUploadEntry[]\n}\n\n/** A file read out of an archive: its path inside it (forward slashes) and its text. */\nexport interface SkillArchiveEntry {\n path: string\n text: string\n}\n\n/** Strip a trailing extension from a file name (last dot only). */\nfunction stripExt(name: string): string {\n const i = name.lastIndexOf('.')\n return i > 0 ? name.slice(0, i) : name\n}\n\n/** True for entries that are never imported (OS junk, dotfiles, folders). */\nfunction isJunkPath(path: string): boolean {\n if (path.endsWith('/')) return true\n const parts = path.split('/')\n if (parts.some((p) => p === '__MACOSX')) return true\n return parts[parts.length - 1].startsWith('.')\n}\n\nfunction folderFor(slug: string, relDir: string): string {\n const root = `${SKILL_FOLDER_PREFIX}${slug}`\n return relDir ? `${root}/${relDir}` : root\n}\n\n/** One Markdown skill. Slug: the frontmatter `name`, else the file name. */\nexport function importMarkdownSkill(fileName: string, text: string): SkillImportResult {\n const parsed = parseSkillFrontmatter(text, fileName)\n const slug = skillSlug(parsed.name) || skillSlug(stripExt(fileName))\n if (!slug) {\n throw new Error(\n 'Could not derive a skill name. Add a `name:` to the frontmatter or rename the file.'\n )\n }\n return {\n slug,\n entries: [{ folder: folderFor(slug, ''), fileName: SKILL_MAIN_FILENAME, content: text }],\n }\n}\n\n/** The single common top-level folder of an archive, if there is one. */\nfunction commonTopDir(paths: string[]): string | null {\n const tops = new Set<string>()\n for (const p of paths) {\n const idx = p.indexOf('/')\n if (idx === -1) return null // a file at the archive root: no wrapper\n tops.add(p.slice(0, idx))\n }\n return tops.size === 1 ? [...tops][0] : null\n}\n\n/** The upload entries of an archive's files (already read). */\nexport function buildZipSkillImport(\n archiveName: string,\n rawEntries: SkillArchiveEntry[]\n): SkillImportResult {\n const entries = rawEntries.filter((e) => e.path && !isJunkPath(e.path))\n if (entries.length === 0) throw new Error('The archive contains no importable skill files.')\n\n const top = commonTopDir(entries.map((e) => e.path))\n const rel = (p: string): string => (top ? p.slice(top.length + 1) : p)\n\n // The slug: the top-level folder, else the main file's frontmatter, else the archive's name.\n let slug = top ? skillSlug(top) : ''\n if (!slug) {\n const mainGuess =\n entries.find((e) => {\n const r = rel(e.path)\n return !r.includes('/') && isMainSkillFile(r, '__never__')\n }) ?? entries.find((e) => !rel(e.path).includes('/'))\n if (mainGuess) slug = skillSlug(parseSkillFrontmatter(mainGuess.text, rel(mainGuess.path)).name)\n }\n if (!slug) slug = skillSlug(stripExt(archiveName))\n if (!slug) throw new Error('Could not derive a skill name from the archive.')\n\n const rootFiles = entries.filter((e) => !rel(e.path).includes('/'))\n const mainEntry =\n rootFiles.find((e) => isMainSkillFile(rel(e.path), slug)) ??\n (rootFiles.length === 1 ? rootFiles[0] : undefined)\n\n return {\n slug,\n entries: entries.map((e) => {\n const r = rel(e.path)\n const lastSlash = r.lastIndexOf('/')\n return {\n folder: folderFor(slug, lastSlash === -1 ? '' : r.slice(0, lastSlash)),\n fileName:\n mainEntry && e.path === mainEntry.path\n ? SKILL_MAIN_FILENAME\n : lastSlash === -1\n ? r\n : r.slice(lastSlash + 1),\n content: e.text,\n }\n }),\n }\n}\n\n/** The files of a `.zip` (off the main thread where the browser allows it). */\nexport async function readSkillArchive(file: Blob): Promise<SkillArchiveEntry[]> {\n const data = new Uint8Array(await file.arrayBuffer())\n let files: Unzipped\n try {\n files = await new Promise<Unzipped>((resolve, reject) =>\n unzip(data, { filter: (f) => !isJunkPath(f.name) }, (err, out) =>\n err ? reject(err) : resolve(out)\n )\n )\n } catch {\n throw new Error('The archive is empty or could not be read.')\n }\n const entries = Object.entries(files).map(([path, bytes]) => ({ path, text: strFromU8(bytes) }))\n if (entries.length === 0) throw new Error('The archive is empty or could not be read.')\n return entries\n}\n\n/** A skill from a file: `.md` / `.markdown`, or a `.zip`. Throws for anything else. */\nexport async function importSkillFile(file: File): Promise<SkillImportResult> {\n const lower = file.name.toLowerCase()\n if (lower.endsWith('.zip')) return buildZipSkillImport(file.name, await readSkillArchive(file))\n if (lower.endsWith('.md') || lower.endsWith('.markdown')) {\n return importMarkdownSkill(file.name, await file.text())\n }\n throw new Error('Unsupported file type. Choose a .md skill or a .zip archive.')\n}\n\n/** A skill from a link: its text, named after the last part of the path. */\nexport async function importSkillFromUrl(url: string): Promise<SkillImportResult> {\n let parsed: URL\n try {\n parsed = new URL(url.trim())\n } catch {\n throw new Error('That does not look like a link.')\n }\n const response = await fetch(parsed.toString())\n if (!response.ok) throw new Error(`Could not open the link (${response.status}).`)\n const text = await response.text()\n const last = parsed.pathname.split('/').filter(Boolean).pop() ?? 'skill'\n return importMarkdownSkill(last.includes('.') ? last : `${last}.md`, text)\n}\n","/**\n * The skills library's one list: the host's built-in skills (its own definitions), the user's own\n * and the ones other people shared, each with where it comes from. Pure, so the filters and the\n * \"your copy replaces the original\" rule are testable without a backend.\n */\n\nimport type { WorkflowDefinition, WorkflowFieldType } from '../workflows/types'\nimport { mergeSkillWorkflows, type SkillListing } from '../workflows/workflow'\n\nexport type SkillSource = 'builtin' | 'mine' | 'shared'\n\n/** A skill as the skills list returns it, with what the library reads of it. */\nexport interface LibrarySkillListing extends SkillListing {\n skill_type?: string | null\n is_owner?: boolean | null\n /** Its main file (SKILL.md); a built-in has none. */\n doc_ext_id?: string | null\n}\n\nexport interface LibrarySkill {\n /** The slug: how it is typed after a slash, and what a copy keeps. */\n slug: string\n title: string\n description: string\n source: SkillSource\n /** `markdown` (plain instructions), `python`, ... */\n type: string\n /** Yours and shared with everyone. */\n isShared: boolean\n /** Yours, and it has the same name as a built-in one: yours is used instead. */\n replacesBuiltin: boolean\n workflow: WorkflowDefinition\n /** Its main file; absent for a built-in. */\n docExtId?: string\n}\n\nexport const SKILL_SOURCE_LABELS: Record<SkillSource, string> = {\n builtin: 'Built in',\n mine: 'Yours',\n shared: 'Shared',\n}\n\n/** What a kind of skill is called to a reader. */\nexport const SKILL_TYPE_LABELS: Record<string, string> = {\n markdown: 'Instructions',\n python: 'Python',\n shell: 'Shell',\n javascript: 'JavaScript',\n typescript: 'TypeScript',\n}\n\nexport const SKILL_FIELD_TYPE_LABELS: Record<WorkflowFieldType, string> = {\n text: 'Short answer',\n longtext: 'Free text',\n boolean: 'Yes or no',\n select: 'A choice',\n number: 'A number',\n date: 'A date',\n scope: 'Which files',\n documents: 'Pick files',\n person: 'A person',\n}\n\n/**\n * @param builtins the host's built-in skills (prompt workflows with their own forms)\n * @param listings the skills list (yours, shared, and the deployment's built-ins)\n */\nexport function buildLibrarySkills(\n builtins: WorkflowDefinition[],\n listings: LibrarySkillListing[]\n): LibrarySkill[] {\n const { host, skills } = mergeSkillWorkflows(builtins, listings)\n const builtinIds = new Set(builtins.map((w) => w.id))\n const stored = new Map(listings.filter((s) => s.doc_ext_id).map((s) => [s.slug, s]))\n return [...host, ...skills].flatMap((workflow): LibrarySkill[] => {\n if (workflow.run.kind !== 'prompt') return []\n const listing = stored.get(workflow.id)\n if (!listing?.doc_ext_id) {\n if (!builtinIds.has(workflow.id)) return []\n return [\n {\n slug: workflow.id,\n title: workflow.title,\n description: workflow.description,\n source: 'builtin',\n type: 'markdown',\n isShared: false,\n replacesBuiltin: false,\n workflow,\n },\n ]\n }\n const mine = listing.is_owner ?? true\n return [\n {\n slug: workflow.id,\n title: workflow.title,\n description: listing.description || workflow.description,\n source: mine ? 'mine' : 'shared',\n type: listing.skill_type ?? 'markdown',\n isShared: mine && listing.visibility === 'global',\n replacesBuiltin: mine && builtinIds.has(listing.slug),\n workflow,\n docExtId: listing.doc_ext_id,\n },\n ]\n })\n}\n\nexport interface SkillFilters {\n query: string\n source: SkillSource | 'all'\n type: string\n}\n\nexport function filterLibrarySkills(skills: LibrarySkill[], f: SkillFilters): LibrarySkill[] {\n const q = f.query.trim().toLowerCase()\n return skills\n .filter((s) => f.source === 'all' || s.source === f.source)\n .filter((s) => f.type === 'all' || s.type === f.type)\n .filter(\n (s) =>\n !q ||\n s.title.toLowerCase().includes(q) ||\n s.slug.toLowerCase().includes(q) ||\n s.description.toLowerCase().includes(q)\n )\n}\n","/**\n * One skill of the library, in full: what it does, what it will ask you, its instructions, and what\n * you can do with it. Everything is plain words: Run, Make a copy, Share with everyone, Export,\n * Delete.\n */\n\nimport type { ReactNode } from 'react'\nimport { Copy, Download, Globe, Lock, Pencil, Play, Trash2 } from 'lucide-react'\nimport { Button } from '@arbidocs/react/ui'\nimport { SkillDetail, SkillDetailSection } from './SkillBrowserParts'\nimport {\n SKILL_FIELD_TYPE_LABELS,\n SKILL_SOURCE_LABELS,\n SKILL_TYPE_LABELS,\n type LibrarySkill,\n} from './skillLibrary'\n\nexport interface SkillLibraryActions {\n onRun: () => void\n onCopy: () => void\n onEdit: () => void\n onToggleShare: () => void\n onExport: () => void\n onDelete: () => void\n isBusy: boolean\n}\n\nexport interface SkillLibraryDetailProps {\n skill: LibrarySkill\n /** Its instructions (a stored skill's are read on demand). */\n instructions: string\n /** The instructions are still being read. */\n isLoading?: boolean\n actions: SkillLibraryActions\n icon?: ReactNode\n}\n\nconst ACTION = 'pointer-coarse:min-h-11'\n\nexport function SkillLibraryDetail({\n skill,\n instructions,\n isLoading,\n actions,\n icon,\n}: SkillLibraryDetailProps) {\n const fields = skill.workflow.inputs\n const isOwner = skill.source === 'mine'\n const canCopy = skill.source !== 'mine'\n\n const notice = skill.replacesBuiltin\n ? 'Your copy is used instead of the original; delete it to go back.'\n : skill.isShared\n ? 'Shared with everyone.'\n : undefined\n\n return (\n <SkillDetail\n title={skill.title}\n sourceLabel={SKILL_SOURCE_LABELS[skill.source]}\n description={skill.description}\n icon={icon}\n notice={notice}\n testId=\"skill-detail\"\n actions={\n <>\n <Button onClick={actions.onRun} className={ACTION} data-testid=\"skill-run\">\n <Play className=\"mr-1.5 size-4\" />\n Run\n </Button>\n {canCopy && (\n <Button\n variant=\"outline\"\n onClick={actions.onCopy}\n disabled={actions.isBusy}\n className={ACTION}\n data-testid=\"skill-copy\"\n >\n <Copy className=\"mr-1.5 size-4\" />\n Make a copy\n </Button>\n )}\n {isOwner && (\n <Button\n variant=\"outline\"\n onClick={actions.onEdit}\n className={ACTION}\n data-testid=\"skill-edit\"\n >\n <Pencil className=\"mr-1.5 size-4\" />\n Edit\n </Button>\n )}\n {isOwner && (\n <Button\n variant=\"outline\"\n onClick={actions.onToggleShare}\n disabled={actions.isBusy}\n className={ACTION}\n data-testid=\"skill-share\"\n >\n {skill.isShared ? (\n <Lock className=\"mr-1.5 size-4\" />\n ) : (\n <Globe className=\"mr-1.5 size-4\" />\n )}\n {skill.isShared ? 'Make private' : 'Share with everyone'}\n </Button>\n )}\n <Button\n variant=\"outline\"\n onClick={actions.onExport}\n className={ACTION}\n data-testid=\"skill-export\"\n >\n <Download className=\"mr-1.5 size-4\" />\n Export\n </Button>\n {isOwner && (\n <Button\n variant=\"ghost\"\n onClick={actions.onDelete}\n disabled={actions.isBusy}\n className={`${ACTION} ml-auto text-destructive`}\n data-testid=\"skill-delete\"\n >\n <Trash2 className=\"mr-1.5 size-4\" />\n Delete\n </Button>\n )}\n </>\n }\n >\n <SkillDetailSection title=\"What it asks you\" testId=\"skill-inputs\">\n {fields.length === 0 ? (\n <p className=\"text-sm text-muted-foreground\">Nothing: it starts right away.</p>\n ) : (\n <ul className=\"space-y-1 text-sm\">\n {fields.map((field) => (\n <li key={field.name} className=\"flex flex-wrap items-baseline gap-x-2\">\n <span className=\"font-medium\">{field.label}</span>\n <span className=\"text-xs text-muted-foreground\">\n {SKILL_FIELD_TYPE_LABELS[field.type]}\n {field.required ? '' : ', optional'}\n </span>\n </li>\n ))}\n </ul>\n )}\n </SkillDetailSection>\n <SkillDetailSection\n title={\n skill.type === 'markdown'\n ? 'Instructions'\n : `Instructions (${SKILL_TYPE_LABELS[skill.type] ?? skill.type})`\n }\n >\n {isLoading ? (\n <p className=\"text-sm text-muted-foreground\">Loading…</p>\n ) : (\n <pre\n className=\"max-h-72 overflow-auto whitespace-pre-wrap break-words rounded-md bg-muted p-3 font-mono text-xs\"\n tabIndex={0}\n aria-label=\"Instructions\"\n data-testid=\"skill-instructions\"\n >\n {instructions || 'No instructions.'}\n </pre>\n )}\n {!isOwner && (\n <p className=\"text-xs text-muted-foreground\">\n You can read these. Make a copy to change them.\n </p>\n )}\n </SkillDetailSection>\n </SkillDetail>\n )\n}\n","import type { ReactNode } from 'react'\nimport { eventWaitingDocuments, waitingForDocumentsText } from '../workflows/run'\nimport {\n AlertTriangle,\n ArrowUpRight,\n CheckCircle2,\n Flag,\n KeyRound,\n Lock,\n MessageSquareReply,\n Phone,\n Disc,\n Play,\n RotateCcw,\n Sparkles,\n Square,\n UserRoundCog,\n BellRing,\n CornerUpLeft,\n Hourglass,\n PenLine,\n} from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\n\nexport type TaskActivityKind =\n | 'created'\n | 'run_started'\n | 'awaiting_access'\n | 'access_granted'\n | 'done'\n | 'reopened'\n | 'failed'\n | 'participant_joined'\n | 'assistant_responded'\n | 'assistant_stopped'\n | 'artifact_created'\n | 'artifact_edited'\n | 'document_added'\n | 'document_removed'\n | 'notified'\n /** A thread call (its log card): `call_ext_id`, `started_by`, `invited`, … `ended_at`, `joined`. */\n | 'call'\n /** A stopped call recording (its Recording card): `call_ext_id`, `recording_ext_id`, … */\n | 'recording'\n // A workflow step's progress (detail.step names it).\n | 'step_started'\n | 'step_done'\n | 'step_skipped'\n | 'step_failed'\n // An action step waits on its people (detail.waiting), moves on (a signer signed), a person\n // sent the work back (detail.to), a step's person was told or reminded.\n | 'step_waiting'\n | 'step_progress'\n | 'step_sent_back'\n | 'step_ready'\n | 'step_reminded'\n // A step raised a signal (detail.step, detail.signal), and the linked thread it started\n // (detail.conversation_ext_id, detail.workflow_ext_id).\n | 'step_signal'\n | 'linked_run'\n\n/** One event of a task's history, as the backend returns it (oldest first). */\nexport interface TaskActivityEvent {\n external_id: string\n kind: TaskActivityKind\n actor_ext_id?: string | null\n /** Who a notification went to. */\n to_ext_id?: string | null\n /** `run_id`, `agent_ext_id`, `as_user`, `from_workflow`, `error`. */\n detail?: Record<string, unknown> | null\n created_at: string\n}\n\nexport interface TaskActivityLabels {\n title: string\n empty: string\n loading: string\n error: string\n close: string\n created: string\n createdFromWorkflow: string\n runStarted: string\n runStartedBy: (agentName: string) => string\n awaitingAccess: string\n accessGranted: string\n done: string\n reopened: string\n failed: string\n failureLine: (error: string) => string\n /** The actor is not known (a system step). */\n system: string\n}\n\nexport const DEFAULT_TASK_ACTIVITY_LABELS: TaskActivityLabels = {\n title: 'Activity',\n empty: 'Nothing has happened yet.',\n loading: 'Loading activity…',\n error: 'Could not load the activity.',\n close: 'Close',\n created: 'Created',\n createdFromWorkflow: 'Created from a workflow',\n runStarted: 'Run started',\n runStartedBy: (agent) => `Run started by ${agent}`,\n awaitingAccess: 'Waiting for access',\n accessGranted: 'Access granted',\n done: 'Marked done',\n reopened: 'Reopened',\n failed: 'Run failed',\n failureLine: (error) => error,\n system: 'System',\n}\n\nconst ICONS: Record<TaskActivityKind, ReactNode> = {\n created: <Sparkles className=\"size-3.5\" aria-hidden />,\n run_started: <Play className=\"size-3.5\" aria-hidden />,\n awaiting_access: <Lock className=\"size-3.5\" aria-hidden />,\n access_granted: <KeyRound className=\"size-3.5\" aria-hidden />,\n done: <CheckCircle2 className=\"size-3.5\" aria-hidden />,\n reopened: <RotateCcw className=\"size-3.5\" aria-hidden />,\n failed: <AlertTriangle className=\"size-3.5\" aria-hidden />,\n participant_joined: <UserRoundCog className=\"size-3.5\" aria-hidden />,\n assistant_responded: <Sparkles className=\"size-3.5\" aria-hidden />,\n assistant_stopped: <Square className=\"size-3.5\" aria-hidden />,\n artifact_created: <Sparkles className=\"size-3.5\" aria-hidden />,\n artifact_edited: <MessageSquareReply className=\"size-3.5\" aria-hidden />,\n document_added: <Sparkles className=\"size-3.5\" aria-hidden />,\n document_removed: <AlertTriangle className=\"size-3.5\" aria-hidden />,\n notified: <UserRoundCog className=\"size-3.5\" aria-hidden />,\n call: <Phone className=\"size-3.5\" aria-hidden />,\n recording: <Disc className=\"size-3.5\" aria-hidden />,\n step_started: <Play className=\"size-3.5\" aria-hidden />,\n step_done: <CheckCircle2 className=\"size-3.5\" aria-hidden />,\n step_skipped: <RotateCcw className=\"size-3.5\" aria-hidden />,\n step_failed: <AlertTriangle className=\"size-3.5\" aria-hidden />,\n step_signal: <Flag className=\"size-3.5\" aria-hidden />,\n step_waiting: <Hourglass className=\"size-3.5\" aria-hidden />,\n step_progress: <PenLine className=\"size-3.5\" aria-hidden />,\n step_sent_back: <CornerUpLeft className=\"size-3.5\" aria-hidden />,\n step_ready: <BellRing className=\"size-3.5\" aria-hidden />,\n step_reminded: <BellRing className=\"size-3.5\" aria-hidden />,\n linked_run: <ArrowUpRight className=\"size-3.5\" aria-hidden />,\n}\n\nconst asString = (v: unknown): string | null => (typeof v === 'string' && v.trim() ? v : null)\n\n/** A short line for an error: the first line, cut at a readable length. */\nfunction summarizeError(error: string): string {\n const first = error.split('\\n')[0].trim()\n return first.length > 160 ? `${first.slice(0, 157)}…` : first\n}\n\n/**\n * The one-line headline of a thread event (\"Marked done\", \"Step failed\"), without its actor. Shared\n * by the task timeline and the workspace activity feed so a kind reads the same in both.\n */\nexport function taskActivityHeadline(\n e: Pick<TaskActivityEvent, 'kind' | 'detail'>,\n labels: TaskActivityLabels = DEFAULT_TASK_ACTIVITY_LABELS,\n agentName?: (agentExtId: string) => string | undefined\n): string {\n const l = labels\n const detail = e.detail ?? {}\n const agentId = asString(detail.agent_ext_id)\n const agent = agentId ? agentName?.(agentId) : undefined\n switch (e.kind) {\n case 'participant_joined':\n return 'Joined the conversation'\n case 'assistant_responded':\n return 'Responded'\n case 'assistant_stopped':\n return 'Stopped'\n case 'artifact_created':\n return 'Created a document'\n case 'artifact_edited':\n return 'Edited a document'\n case 'document_added':\n return 'Added a document'\n case 'document_removed':\n return 'Removed a document'\n case 'notified':\n return 'Sent a notification'\n case 'call':\n return detail.ended_at ? 'Call ended' : 'Started a call'\n case 'recording':\n return 'Recorded the call'\n case 'step_started':\n return 'Step started'\n case 'step_done':\n return 'Step done'\n case 'step_skipped':\n return 'Step skipped'\n case 'step_waiting': {\n const documents = eventWaitingDocuments(detail)\n return documents ? waitingForDocumentsText(documents.length) : 'Waiting on people'\n }\n case 'step_progress': {\n const documents = eventWaitingDocuments(detail)\n return documents\n ? waitingForDocumentsText(documents.length)\n : detail.signed\n ? 'Signed'\n : 'Step moved on'\n }\n case 'step_sent_back':\n return 'Sent the work back'\n case 'step_ready':\n return 'Told whose turn it is'\n case 'step_reminded':\n return 'Sent a reminder'\n case 'step_signal':\n return `Signalled “${asString(detail.signal) ?? 'a signal'}”`\n case 'linked_run':\n return `Started a linked workflow on “${asString(detail.signal) ?? 'a signal'}”`\n case 'step_failed':\n return 'Step failed'\n case 'created':\n return detail.from_workflow ? l.createdFromWorkflow : l.created\n case 'run_started':\n return agent ? l.runStartedBy(agent) : l.runStarted\n case 'awaiting_access':\n return l.awaitingAccess\n case 'access_granted':\n return l.accessGranted\n case 'done':\n return l.done\n case 'reopened':\n return l.reopened\n case 'failed':\n return l.failed\n default:\n // A kind added on the server after this build: say something rather than nothing.\n return String(e.kind).replace(/_/g, ' ')\n }\n}\n\nexport interface TaskActivityTimelineProps {\n events: readonly TaskActivityEvent[]\n /** Draw a person (an id, or none for a system step). */\n renderPerson: (id: string | null | undefined) => ReactNode\n /** An agent's display name by id. */\n agentName?: (agentExtId: string) => string | undefined\n /** \"2 min ago\". */\n formatRelative: (iso: string) => string\n /** The exact time, shown on hover. */\n formatExact: (iso: string) => string\n labels?: Partial<TaskActivityLabels>\n testId?: string\n}\n\n/** A task's history as a vertical timeline, oldest first, one entry per event. */\nexport function TaskActivityTimeline({\n events,\n renderPerson,\n agentName,\n formatRelative,\n formatExact,\n labels,\n testId,\n}: TaskActivityTimelineProps) {\n const l = { ...DEFAULT_TASK_ACTIVITY_LABELS, ...labels }\n const base = testIdOr(testId, { testId: 'task-activity' })\n\n const describe = (e: TaskActivityEvent): { headline: ReactNode; extra?: ReactNode } => {\n const headline = taskActivityHeadline(e, l, agentName)\n const error = asString(e.detail?.error)\n if (e.kind === 'step_failed' && error)\n return { headline, extra: l.failureLine(summarizeError(error)) }\n if (e.kind === 'failed' && error)\n return {\n headline,\n extra: (\n <p className=\"text-xs text-destructive\" data-testid={`${base}-error-${e.external_id}`}>\n {l.failureLine(summarizeError(error))}\n </p>\n ),\n }\n return { headline }\n }\n\n return (\n <ol className=\"flex flex-col\" data-testid={`${base}-list`}>\n {events.map((e, i) => {\n const { headline, extra } = describe(e)\n const last = i === events.length - 1\n return (\n <li\n key={e.external_id}\n className=\"relative flex gap-3 pb-4 last:pb-0\"\n data-testid={`${base}-entry-${e.external_id}`}\n data-kind={e.kind}\n >\n {!last && (\n <span className=\"absolute left-3 top-6 -ml-px h-[calc(100%-1.5rem)] w-px bg-border\" />\n )}\n <span\n className={cn(\n 'z-10 flex size-6 shrink-0 items-center justify-center rounded-full border bg-background',\n e.kind === 'failed' ? 'text-destructive' : 'text-muted-foreground'\n )}\n data-testid={`${base}-icon-${e.external_id}`}\n >\n {ICONS[e.kind]}\n </span>\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-1 text-sm\">\n {e.actor_ext_id ? (\n <span className=\"inline-flex\" data-testid={`${base}-actor-${e.external_id}`}>\n {renderPerson(e.actor_ext_id)}\n </span>\n ) : (\n <span className=\"text-muted-foreground\">{l.system}</span>\n )}\n <span className=\"font-medium\">{headline}</span>\n <time\n dateTime={e.created_at}\n title={formatExact(e.created_at)}\n className=\"ml-auto text-xs text-muted-foreground\"\n data-testid={`${base}-time-${e.external_id}`}\n >\n {formatRelative(e.created_at)}\n </time>\n </div>\n {extra}\n </div>\n </li>\n )\n })}\n </ol>\n )\n}\n","import { useCallback } from 'react'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport {\n DEFAULT_TASK_ACTIVITY_LABELS,\n TaskActivityTimeline,\n type TaskActivityEvent,\n type TaskActivityLabels,\n type TaskActivityTimelineProps,\n} from './TaskActivityTimeline'\n\nexport interface TaskActivityDialogProps extends Omit<\n TaskActivityTimelineProps,\n 'events' | 'labels' | 'testId'\n> {\n open: boolean\n onOpenChange: (open: boolean) => void\n /** The task's name, shown under the title. */\n taskName: string\n events: readonly TaskActivityEvent[] | undefined\n isLoading?: boolean\n isError?: boolean\n labels?: Partial<TaskActivityLabels>\n testId?: string\n}\n\n/** The task's history in a dialog: newest at the bottom, scrolled into view as events arrive. */\nexport function TaskActivityDialog({\n open,\n onOpenChange,\n taskName,\n events,\n isLoading,\n isError,\n labels,\n testId,\n ...timeline\n}: TaskActivityDialogProps) {\n const l = { ...DEFAULT_TASK_ACTIVITY_LABELS, ...labels }\n const id = testIdOr(testId, { testId: 'task-activity' })\n const count = events?.length ?? 0\n // Scroll the newest entry into view when the dialog opens and whenever an event arrives.\n const scrollToEnd = useCallback(\n (el: HTMLDivElement | null) => {\n if (count >= 0) el?.scrollIntoView?.({ block: 'end' })\n },\n [count]\n )\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent presentation=\"sheet\" className=\"max-h-[80dvh] sm:max-w-lg\" data-testid={id}>\n <DialogHeader>\n <DialogTitle>{l.title}</DialogTitle>\n <DialogDescription className=\"truncate\">{taskName}</DialogDescription>\n </DialogHeader>\n <div className=\"max-h-[55dvh] overflow-y-auto pr-1\" data-testid={`${id}-scroll`}>\n {isLoading && !events ? (\n <p className=\"text-sm text-muted-foreground\">{l.loading}</p>\n ) : isError && !events ? (\n <p className=\"text-sm text-destructive\">{l.error}</p>\n ) : count === 0 ? (\n <p className=\"text-sm text-muted-foreground\">{l.empty}</p>\n ) : (\n <TaskActivityTimeline events={events ?? []} labels={labels} testId={id} {...timeline} />\n )}\n <div ref={scrollToEnd} />\n </div>\n </DialogContent>\n </Dialog>\n )\n}\n","import { useMemo, type ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport { Eye, History } from 'lucide-react'\nimport { workflowRunStatusLabel } from './workflowRows'\nimport { GridView } from '../../files/GridView'\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../../chat/test-id'\nimport { ActionLink } from '../../components/ActionLink'\nimport { TabHeader } from '../../shell/TabHeader'\n\nexport interface TaskRunView {\n id: string\n resultId?: string\n /** running | success | failed (others get a neutral pill). */\n status: string\n /** Formatted finish (or start) time; empty for none. */\n when?: string\n error?: string | null\n /** The run's `conversation_ext_id`; enables Open. See `TaskRunsDialogProps.onOpenRun`. */\n conversationId?: string | null\n}\n\n/** Fixed strings of the run-history dialog. */\nexport interface TaskRunsDialogLabels {\n /** Dialog title; receives the task name. */\n title: (taskName: string | undefined) => string\n description: string\n loading: string\n empty: string\n open: string\n}\n\nexport const DEFAULT_TASK_RUNS_DIALOG_LABELS: TaskRunsDialogLabels = {\n title: (taskName) => `Run history — ${taskName}`,\n description: 'Every time this task ran. Open a run to read or watch it in its conversation.',\n loading: 'Loading runs…',\n empty: 'This task hasn’t run yet.',\n open: 'Open',\n}\n\nexport interface TaskRunsDialogTestIds {\n modal: string\n empty: string\n list: string\n row: string\n open: string\n}\n\nexport interface TaskRunsDialogProps {\n inline?: boolean\n hideHeader?: boolean\n renderErrorReport?: (run: TaskRunView) => ReactNode\n open: boolean\n onOpenChange: (open: boolean) => void\n taskName?: string\n /** A workflow may fail before it creates a run conversation. */\n error?: string | null\n runs: TaskRunView[]\n isLoading: boolean\n /**\n * Jump into a run's conversation (the dialog closes afterwards).\n *\n * Deep-link contract: `conversationId` is the run's `conversation_ext_id` (`con-xxxxxxxx`, from\n * `useTaskRuns` / `TaskRunResponse`). ARBI defines no URL for it: the HOST decides where a\n * conversation lives (`/chat/${id}`, a dock, a modal). The conversation belongs to the task's\n * workspace (`TaskResponse.workspace_ext_id`), so a host whose route needs the workspace open\n * must switch to it first, then navigate. A run with no `conversationId` gets no Open button.\n */\n onOpenResult?: (resultId: string) => void\n onOpenRun: (conversationId: string) => void\n /**\n * The same destination as an href, so Open is a real link (middle-click, copy address, new tab).\n * Return the URL for `run.conversationId`; `onOpenRun` still fires on a plain click for SPA\n * navigation. Leave unset for a button-only Open.\n */\n getRunHref?: (run: TaskRunView) => string | undefined\n testIds?: Partial<TaskRunsDialogTestIds>\n labels?: Partial<TaskRunsDialogLabels>\n}\n\nconst STATUS_STYLE: Record<string, string> = {\n running: 'bg-ai-soft text-ai-ink',\n success: 'bg-green-bg text-green-text',\n completed: 'bg-green-bg text-green-text',\n failed: 'bg-red-bg text-red-text',\n}\n\n/**\n * Persisted automation run history. The host supplies run records and navigation to thread or document results.\n */\nexport function TaskRunsDialog({\n inline = false,\n renderErrorReport,\n hideHeader = false,\n open,\n onOpenChange,\n taskName,\n runs,\n isLoading,\n onOpenRun,\n onOpenResult,\n getRunHref,\n testIds,\n labels,\n}: TaskRunsDialogProps) {\n const l = { ...DEFAULT_TASK_RUNS_DIALOG_LABELS, ...labels }\n const columns = useMemo<ColDef<TaskRunView>[]>(\n () => [\n {\n colId: 'status',\n field: 'status',\n headerName: 'Status',\n width: 160,\n minWidth: 140,\n cellRenderer: ({ data }: ICellRendererParams<TaskRunView>) =>\n data && (\n <span\n className={cn(\n 'rounded-full px-2 py-0.5 text-xs font-medium capitalize',\n STATUS_STYLE[data.status] ?? 'text-muted-foreground'\n )}\n >\n {workflowRunStatusLabel(data.status)}\n </span>\n ),\n },\n { colId: 'when', field: 'when', headerName: 'Run', flex: 2, minWidth: 240 },\n {\n colId: 'result',\n headerName: '',\n width: 280,\n minWidth: 220,\n sortable: false,\n cellRenderer: ({ data: run }: ICellRendererParams<TaskRunView>) => {\n if (!run) return null\n return (\n <div className=\"flex h-full items-center gap-2\">\n {run.error && renderErrorReport?.(run)}\n {(run.conversationId || (run.resultId && onOpenResult)) && (\n <Button asChild variant=\"ghost\" size=\"sm\" className=\"h-7 gap-1.5\">\n <ActionLink\n href={getRunHref?.(run)}\n onSelect={() => {\n if (run.conversationId) onOpenRun(run.conversationId)\n else if (run.resultId) onOpenResult?.(run.resultId)\n onOpenChange(false)\n }}\n data-testid={testIdOr(testIds?.open, { testId: 'task-run-open' })}\n >\n <Eye size={13} /> {l.open}\n </ActionLink>\n </Button>\n )}\n </div>\n )\n },\n },\n ],\n [onOpenRun, onOpenResult, getRunHref, onOpenChange, testIds?.open, l.open, renderErrorReport]\n )\n const content = (\n <>\n {hideHeader ? null : inline ? (\n <TabHeader\n tabs={[\n {\n id: 'history',\n label: l.title(taskName),\n count: runs.length,\n countIcon: <History size={14} />,\n presentation: 'count',\n onClose: () => onOpenChange(false),\n },\n ]}\n activeTabId=\"history\"\n onTabChange={() => {}}\n />\n ) : (\n <DialogHeader>\n <DialogTitle className=\"flex items-center gap-2\">\n <History size={16} /> {l.title(taskName)}\n </DialogTitle>\n <DialogDescription>{l.description}</DialogDescription>\n </DialogHeader>\n )}\n\n <div className=\"min-h-0 flex-1\">\n <GridView<TaskRunView>\n testId={testIdOr(testIds?.list, { testId: 'task-runs-list' })}\n gridId=\"workflow-runs\"\n items={runs}\n columnDefs={columns}\n getItemId={(run) => run.id}\n getRowTestId={() => testIdOr(testIds?.row, { testId: 'task-run-row' })}\n isLoading={isLoading}\n loadingMessage={l.loading}\n emptyState={{ title: l.empty }}\n height=\"100%\"\n />\n </div>\n </>\n )\n return inline ? (\n <section className=\"flex min-h-0 flex-1 flex-col\" data-testid=\"automation-history\">\n {content}\n </section>\n ) : (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n presentation=\"sheet\"\n className=\"flex h-[min(32rem,calc(100dvh-2rem))] min-h-0 max-w-3xl flex-col\"\n data-testid={testIdOr(testIds?.modal, { testId: 'task-runs-modal' })}\n >\n {content}\n </DialogContent>\n </Dialog>\n )\n}\n"]}