@arbidocs/blocks 0.5.99 → 0.5.101

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 (166) hide show
  1. package/README.md +9 -1
  2. package/dist/ConnectedCallDock-OJ4UR5PR.js +1 -1
  3. package/dist/ConnectedCallDock-OKH3FT2U.cjs +1 -1
  4. package/dist/ConnectedCallRoom-NB7I6RLQ.cjs +1 -1
  5. package/dist/ConnectedCallRoom-OX7ZIF76.js +1 -1
  6. package/dist/{ConnectedNativeDocxComparison-F4XKHVTI.cjs → ConnectedNativeDocxComparison-6BQ2WFF6.cjs} +9 -9
  7. package/dist/{ConnectedNativeDocxComparison-F4XKHVTI.cjs.map → ConnectedNativeDocxComparison-6BQ2WFF6.cjs.map} +1 -1
  8. package/dist/{ConnectedNativeDocxComparison-TDWHGYQX.js → ConnectedNativeDocxComparison-DIRGCHMY.js} +8 -8
  9. package/dist/{ConnectedStreamedWordArtifact-ZPFR5HFS.js.map → ConnectedNativeDocxComparison-DIRGCHMY.js.map} +1 -1
  10. package/dist/{ConnectedNativeDocxEditor-J3E3QDFA.cjs → ConnectedNativeDocxEditor-4HNYAZEG.cjs} +9 -9
  11. package/dist/{ConnectedNativeDocxEditor-J3E3QDFA.cjs.map → ConnectedNativeDocxEditor-4HNYAZEG.cjs.map} +1 -1
  12. package/dist/{ConnectedNativeDocxEditor-O7QB6DVI.js → ConnectedNativeDocxEditor-DKSE3R6C.js} +7 -7
  13. package/dist/{ConnectedNativeDocxEditor-O7QB6DVI.js.map → ConnectedNativeDocxEditor-DKSE3R6C.js.map} +1 -1
  14. package/dist/{ConnectedProductionSetDialog-34NEZNEQ.js → ConnectedProductionSetDialog-34UV5VH2.js} +3 -3
  15. package/dist/{ConnectedProductionSetDialog-34NEZNEQ.js.map → ConnectedProductionSetDialog-34UV5VH2.js.map} +1 -1
  16. package/dist/{ConnectedProductionSetDialog-NFASXSLG.cjs → ConnectedProductionSetDialog-XH725VSO.cjs} +3 -3
  17. package/dist/{ConnectedProductionSetDialog-NFASXSLG.cjs.map → ConnectedProductionSetDialog-XH725VSO.cjs.map} +1 -1
  18. package/dist/{ConnectedStreamedWordArtifact-UR4LM4RB.cjs → ConnectedStreamedWordArtifact-S5I5QCZ7.cjs} +9 -9
  19. package/dist/ConnectedStreamedWordArtifact-S5I5QCZ7.cjs.map +1 -0
  20. package/dist/{ConnectedStreamedWordArtifact-ZPFR5HFS.js → ConnectedStreamedWordArtifact-USNAF4ZM.js} +8 -8
  21. package/dist/{ConnectedNativeDocxComparison-TDWHGYQX.js.map → ConnectedStreamedWordArtifact-USNAF4ZM.js.map} +1 -1
  22. package/dist/{DocumentReviewCard-7VJ3MMYG.cjs → DocumentReviewCard-QHYHBDUA.cjs} +14 -14
  23. package/dist/{DocumentReviewCard-7VJ3MMYG.cjs.map → DocumentReviewCard-QHYHBDUA.cjs.map} +1 -1
  24. package/dist/{DocumentReviewCard-5NZM6FOB.js → DocumentReviewCard-TFAJYWS6.js} +9 -9
  25. package/dist/{DocumentReviewCard-5NZM6FOB.js.map → DocumentReviewCard-TFAJYWS6.js.map} +1 -1
  26. package/dist/{FilesViewerDialog-EQ4UT6LW.js → FilesViewerDialog-LE5GQQDX.js} +12 -12
  27. package/dist/{FilesViewerDialog-EQ4UT6LW.js.map → FilesViewerDialog-LE5GQQDX.js.map} +1 -1
  28. package/dist/{FilesViewerDialog-XIJAGQAU.cjs → FilesViewerDialog-Y5YZJ5O2.cjs} +13 -13
  29. package/dist/{FilesViewerDialog-XIJAGQAU.cjs.map → FilesViewerDialog-Y5YZJ5O2.cjs.map} +1 -1
  30. package/dist/{WorkspaceTableView-6MLEC6I6.cjs → WorkspaceTableView-3D6SYOWT.cjs} +5 -5
  31. package/dist/{WorkspaceTableView-6MLEC6I6.cjs.map → WorkspaceTableView-3D6SYOWT.cjs.map} +1 -1
  32. package/dist/{WorkspaceTableView-YGLOQ6JA.js → WorkspaceTableView-WD754UBK.js} +4 -4
  33. package/dist/{WorkspaceTableView-YGLOQ6JA.js.map → WorkspaceTableView-WD754UBK.js.map} +1 -1
  34. package/dist/agents/index.cjs +187 -187
  35. package/dist/agents/index.js +5 -5
  36. package/dist/ai-5JTBFZAO.js +1 -1
  37. package/dist/ai-ZLZNDUUS.cjs +1 -1
  38. package/dist/calls/index.cjs +1 -1
  39. package/dist/calls/index.js +1 -1
  40. package/dist/chat/index.cjs +1 -1
  41. package/dist/chat/index.js +1 -1
  42. package/dist/{chunk-ERDQ4DAX.cjs → chunk-2GFB43GN.cjs} +4 -4
  43. package/dist/{chunk-ERDQ4DAX.cjs.map → chunk-2GFB43GN.cjs.map} +1 -1
  44. package/dist/{chunk-CS4KQSLY.cjs → chunk-2ROYKDEA.cjs} +5 -5
  45. package/dist/{chunk-CS4KQSLY.cjs.map → chunk-2ROYKDEA.cjs.map} +1 -1
  46. package/dist/{chunk-YHNTGQSW.cjs → chunk-2VWE46ZF.cjs} +114 -57
  47. package/dist/chunk-2VWE46ZF.cjs.map +1 -0
  48. package/dist/{chunk-6KKVJ2V6.js → chunk-3PV25ICC.js} +3 -3
  49. package/dist/{chunk-6KKVJ2V6.js.map → chunk-3PV25ICC.js.map} +1 -1
  50. package/dist/{chunk-IK4MSXXR.cjs → chunk-4IRS55N2.cjs} +50 -31
  51. package/dist/chunk-4IRS55N2.cjs.map +1 -0
  52. package/dist/{chunk-4WW34DPM.js → chunk-4IXUIRXB.js} +4 -4
  53. package/dist/{chunk-4WW34DPM.js.map → chunk-4IXUIRXB.js.map} +1 -1
  54. package/dist/{chunk-WYLY5UQ4.js → chunk-5ZUA3JRB.js} +3 -3
  55. package/dist/{chunk-WYLY5UQ4.js.map → chunk-5ZUA3JRB.js.map} +1 -1
  56. package/dist/{chunk-UOGXKHTJ.cjs → chunk-6KQVTMRL.cjs} +3 -3
  57. package/dist/{chunk-UOGXKHTJ.cjs.map → chunk-6KQVTMRL.cjs.map} +1 -1
  58. package/dist/{chunk-KBXATCF4.cjs → chunk-ANT32I6E.cjs} +8 -8
  59. package/dist/{chunk-KBXATCF4.cjs.map → chunk-ANT32I6E.cjs.map} +1 -1
  60. package/dist/{chunk-SWW3KBH2.js → chunk-AZGELQSS.js} +4 -4
  61. package/dist/{chunk-SWW3KBH2.js.map → chunk-AZGELQSS.js.map} +1 -1
  62. package/dist/{chunk-RAF72BBC.cjs → chunk-DVGT3MU6.cjs} +4 -4
  63. package/dist/{chunk-RAF72BBC.cjs.map → chunk-DVGT3MU6.cjs.map} +1 -1
  64. package/dist/{chunk-TVJAVK2G.js → chunk-DW5DFV4O.js} +4 -4
  65. package/dist/{chunk-TVJAVK2G.js.map → chunk-DW5DFV4O.js.map} +1 -1
  66. package/dist/{chunk-4AQ47AB4.js → chunk-DWSSFIK2.js} +3 -3
  67. package/dist/{chunk-4AQ47AB4.js.map → chunk-DWSSFIK2.js.map} +1 -1
  68. package/dist/{chunk-ZXEGVXEV.cjs → chunk-FXR6YYPC.cjs} +4 -4
  69. package/dist/{chunk-ZXEGVXEV.cjs.map → chunk-FXR6YYPC.cjs.map} +1 -1
  70. package/dist/{chunk-POEWHRQV.js → chunk-G7DQFL52.js} +8 -8
  71. package/dist/{chunk-POEWHRQV.js.map → chunk-G7DQFL52.js.map} +1 -1
  72. package/dist/{chunk-MT3RPUQC.cjs → chunk-H7UDEZEO.cjs} +4 -4
  73. package/dist/{chunk-MT3RPUQC.cjs.map → chunk-H7UDEZEO.cjs.map} +1 -1
  74. package/dist/{chunk-3VKULQEG.js → chunk-HPS5O6XK.js} +6 -6
  75. package/dist/{chunk-LT2RPGKW.cjs.map → chunk-HPS5O6XK.js.map} +1 -1
  76. package/dist/{chunk-ETYBZA5E.cjs → chunk-IGVTLCHD.cjs} +4 -4
  77. package/dist/{chunk-ETYBZA5E.cjs.map → chunk-IGVTLCHD.cjs.map} +1 -1
  78. package/dist/{chunk-J24LYNTY.cjs → chunk-ILH2KOHA.cjs} +37 -37
  79. package/dist/{chunk-J24LYNTY.cjs.map → chunk-ILH2KOHA.cjs.map} +1 -1
  80. package/dist/{chunk-7F5Z4K5W.js → chunk-IU5CHOEU.js} +9 -10
  81. package/dist/chunk-IU5CHOEU.js.map +1 -0
  82. package/dist/{chunk-ZATTTPWL.cjs → chunk-KCP42W67.cjs} +4 -4
  83. package/dist/{chunk-ZATTTPWL.cjs.map → chunk-KCP42W67.cjs.map} +1 -1
  84. package/dist/{chunk-YG4S7OCD.js → chunk-LNWEJJUY.js} +3 -3
  85. package/dist/{chunk-YG4S7OCD.js.map → chunk-LNWEJJUY.js.map} +1 -1
  86. package/dist/{chunk-KYR3TXHS.js → chunk-OLCQPGB4.js} +3 -3
  87. package/dist/{chunk-KYR3TXHS.js.map → chunk-OLCQPGB4.js.map} +1 -1
  88. package/dist/{chunk-STCXXO7T.js → chunk-PGCKTXYH.js} +3 -3
  89. package/dist/{chunk-STCXXO7T.js.map → chunk-PGCKTXYH.js.map} +1 -1
  90. package/dist/{chunk-X426D2LX.cjs → chunk-Q3OLTA47.cjs} +4 -4
  91. package/dist/{chunk-X426D2LX.cjs.map → chunk-Q3OLTA47.cjs.map} +1 -1
  92. package/dist/{chunk-UBI4HXT6.js → chunk-Q45LV2DL.js} +5 -5
  93. package/dist/{chunk-UBI4HXT6.js.map → chunk-Q45LV2DL.js.map} +1 -1
  94. package/dist/{chunk-ZARYAYQO.js → chunk-QAKL6LNR.js} +12 -12
  95. package/dist/{chunk-ZARYAYQO.js.map → chunk-QAKL6LNR.js.map} +1 -1
  96. package/dist/{chunk-JL6MDUV7.cjs → chunk-QSPKL754.cjs} +30 -30
  97. package/dist/{chunk-JL6MDUV7.cjs.map → chunk-QSPKL754.cjs.map} +1 -1
  98. package/dist/{chunk-HJBVSG6H.cjs → chunk-QYDMOBGP.cjs} +4 -4
  99. package/dist/{chunk-HJBVSG6H.cjs.map → chunk-QYDMOBGP.cjs.map} +1 -1
  100. package/dist/{chunk-OYSTBNNA.js → chunk-R3AHNYSS.js} +3 -3
  101. package/dist/{chunk-OYSTBNNA.js.map → chunk-R3AHNYSS.js.map} +1 -1
  102. package/dist/{chunk-EMTRPNYB.js → chunk-RP3IDFHS.js} +3 -3
  103. package/dist/{chunk-EMTRPNYB.js.map → chunk-RP3IDFHS.js.map} +1 -1
  104. package/dist/{chunk-3BCKTFOP.cjs → chunk-RV2YGRV6.cjs} +53 -53
  105. package/dist/{chunk-3BCKTFOP.cjs.map → chunk-RV2YGRV6.cjs.map} +1 -1
  106. package/dist/{chunk-SWILV6LT.cjs → chunk-TGHBXJTN.cjs} +4 -4
  107. package/dist/{chunk-SWILV6LT.cjs.map → chunk-TGHBXJTN.cjs.map} +1 -1
  108. package/dist/{chunk-LT2RPGKW.cjs → chunk-TQXMASFX.cjs} +16 -16
  109. package/dist/chunk-TQXMASFX.cjs.map +1 -0
  110. package/dist/{chunk-I44X7O6X.js → chunk-UPXQDULH.js} +112 -55
  111. package/dist/chunk-UPXQDULH.js.map +1 -0
  112. package/dist/{chunk-L3V2ANBD.js → chunk-VEHHI5WS.js} +3 -3
  113. package/dist/{chunk-L3V2ANBD.js.map → chunk-VEHHI5WS.js.map} +1 -1
  114. package/dist/{chunk-6OEAZ2TJ.js → chunk-VJQCOZ7O.js} +50 -31
  115. package/dist/chunk-VJQCOZ7O.js.map +1 -0
  116. package/dist/{chunk-VD33HXFZ.cjs → chunk-WW2H5C6L.cjs} +28 -28
  117. package/dist/{chunk-VD33HXFZ.cjs.map → chunk-WW2H5C6L.cjs.map} +1 -1
  118. package/dist/{chunk-OOYT5A7W.js → chunk-X2QJWFFO.js} +3 -3
  119. package/dist/{chunk-OOYT5A7W.js.map → chunk-X2QJWFFO.js.map} +1 -1
  120. package/dist/{chunk-3CV4M6MB.js → chunk-XCE4HB3F.js} +3 -3
  121. package/dist/{chunk-3CV4M6MB.js.map → chunk-XCE4HB3F.js.map} +1 -1
  122. package/dist/{chunk-LKK52DEY.cjs → chunk-XNXNLXIC.cjs} +9 -10
  123. package/dist/chunk-XNXNLXIC.cjs.map +1 -0
  124. package/dist/{chunk-OC5K2J6V.cjs → chunk-YMNKMIFG.cjs} +3 -3
  125. package/dist/{chunk-OC5K2J6V.cjs.map → chunk-YMNKMIFG.cjs.map} +1 -1
  126. package/dist/collaboration/index.cjs +70 -70
  127. package/dist/collaboration/index.js +2 -2
  128. package/dist/connect/docx.cjs +12 -12
  129. package/dist/connect/docx.js +8 -8
  130. package/dist/connect/index.cjs +888 -825
  131. package/dist/connect/index.cjs.map +1 -1
  132. package/dist/connect/index.js +287 -224
  133. package/dist/connect/index.js.map +1 -1
  134. package/dist/connect/viewer.cjs +11 -11
  135. package/dist/connect/viewer.js +10 -10
  136. package/dist/connection/files/grid/documentCellRenderers.d.ts +72 -0
  137. package/dist/connection/files/grid/documentColumns.d.ts +2 -2
  138. package/dist/connection/files/grid/useDocumentGridSync.d.ts +4 -15
  139. package/dist/connection/files/grid/useDocumentTable.d.ts +0 -1
  140. package/dist/databases/index.cjs +49 -49
  141. package/dist/databases/index.js +2 -2
  142. package/dist/embed/index.cjs +17 -17
  143. package/dist/embed/index.js +11 -11
  144. package/dist/facts/index.cjs +43 -43
  145. package/dist/facts/index.js +2 -2
  146. package/dist/files/index.cjs +224 -224
  147. package/dist/files/index.js +2 -2
  148. package/dist/index.cjs +353 -353
  149. package/dist/index.js +12 -12
  150. package/dist/settings/index.cjs +1 -1
  151. package/dist/settings/index.js +1 -1
  152. package/dist/studio/index.cjs +1 -1
  153. package/dist/studio/index.js +1 -1
  154. package/dist/tags/TagTable.d.ts +4 -1
  155. package/dist/workflow-canvas/index.cjs +25 -25
  156. package/dist/workflow-canvas/index.js +14 -14
  157. package/node_modules/@arbidocs/coedit/package.json +1 -1
  158. package/package.json +10 -6
  159. package/dist/ConnectedStreamedWordArtifact-UR4LM4RB.cjs.map +0 -1
  160. package/dist/chunk-3VKULQEG.js.map +0 -1
  161. package/dist/chunk-6OEAZ2TJ.js.map +0 -1
  162. package/dist/chunk-7F5Z4K5W.js.map +0 -1
  163. package/dist/chunk-I44X7O6X.js.map +0 -1
  164. package/dist/chunk-IK4MSXXR.cjs.map +0 -1
  165. package/dist/chunk-LKK52DEY.cjs.map +0 -1
  166. package/dist/chunk-YHNTGQSW.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/tasks/useConnectedThreadActivity.tsx","../src/connection/useSelectWorkspace.ts"],"names":[],"mappings":"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","file":"chunk-YG4S7OCD.js","sourcesContent":["import {\n formatFriendlyDate,\n getDocumentTitle,\n getUserDisplayName,\n formatRelativeTime,\n} from '@arbidocs/react/ui'\nimport { Clock } from 'lucide-react'\nimport {\n useConversationActivity,\n useWorkflows,\n useDocuments,\n useWorkspaceUsers,\n useArbiSessionState,\n useConversationData,\n useConversationItems,\n} from '@arbidocs/react'\nimport { STEP_KIND_ICONS, stepKindOf } from '../../agents/workflows/stepKinds'\nimport { compactThreadActivity } from '../../agents/tasks/compact-thread-activity'\nimport { fromPlanSteps, type TaskPlanStep } from '../../agents/workflows/planSteps'\nimport { splitDocRef, type WorkflowStepPhase } from '../../agents/workflows/run'\nimport { type WorkflowStep } from '../../agents/workflows/types'\nimport { linkedRunsFromActivity } from '../../agents/tasks/linkedRuns'\nimport { type TaskActivityEvent } from '../../agents/tasks/TaskActivityTimeline'\nimport {\n type WorkflowThreadOrigin,\n type WorkflowThreadSignal,\n} from '../../agents/tasks/WorkflowThreadStrip'\nimport { ThreadCallLogCard } from '../../calls/connected/ThreadCallLogCard'\nimport { RecordingCard } from '../../calls/connected/RecordingCard'\nimport { parseCallLogDetail } from '../../calls/call-cards'\nimport { AssistantEntity } from '../../agents/tasks/AssistantEntity'\nimport {\n isSupersededStop,\n latestMessageTime,\n notifiedLabel,\n unnotifiedMentions,\n} from '../../agents/tasks/taskHelpers'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useOpenWorkflow } from '../workflows/useOpenWorkflow'\nimport { DocumentUser } from '../files/fields/DocumentUser'\n\n/** The phase a step event puts its step in, for its chip in the transcript. */\nconst STEP_EVENT_PHASES: Record<string, WorkflowStepPhase> = {\n // A past \"started\" is not still running: the step's own chip (on the bar) says where it is now.\n step_started: 'ready',\n step_waiting: 'waiting',\n step_progress: 'waiting',\n step_done: 'done',\n step_skipped: 'skipped',\n step_failed: 'failed',\n step_sent_back: 'ready',\n}\n\n/** A step event's chip in the transcript: its step's kind and icon, the phase the event set. */\nfunction stepChipOf(\n step: WorkflowStep,\n eventKind: string,\n document?: { name: string; onOpen: () => void }\n) {\n const phase = STEP_EVENT_PHASES[eventKind]\n if (!phase) return undefined\n const kind = stepKindOf(step)\n const KindIcon = STEP_KIND_ICONS[kind]\n return { kind, phase, icon: <KindIcon />, document }\n}\n\n/**\n * A thread's persisted history, as its top bar's ribbon and its transcript show it: each entry with\n * its actor, its step chip, the document or email it is about and where a click goes; the threads\n * linked to it (what started it, what it starts); the signals its steps raised. Documents,\n * threads, email drafts and workflows open through the host's environment.\n */\nexport function useConnectedThreadActivity(conversationId: string | null | undefined) {\n const { data: workflows = [] } = useWorkflows()\n const { conversations } = useConversationItems()\n const { data: members = [] } = useWorkspaceUsers()\n const { data: docs = [] } = useDocuments()\n const activity = useConversationActivity(conversationId ?? undefined, { live: true })\n const { messageHistory } = useConversationData()\n const environment = useBlocksEnvironment()\n const { openDocument, openMail } = environment\n const navigateToConversation = (id: string, messageId?: string) =>\n environment.openConversation(id, messageId ? { messageId } : undefined)\n // The host's Workflows page, while it has one (absent: a workflow has nowhere to open).\n const openWorkflow = useOpenWorkflow()\n const workspaceExtId = useArbiSessionState((s) => s.workspaceId)\n const task = conversations.find((c) => c.external_id === conversationId)\n const latestMessageAt = latestMessageTime(messageHistory)\n const events = ((activity.data ?? []) as TaskActivityEvent[]).filter(\n (event) => !isSupersededStop(event, latestMessageAt)\n )\n const personName = (extId: string) => {\n const person = members.find((m) => m.user.external_id === extId)?.user\n return person ? getUserDisplayName(person) : 'someone'\n }\n // The run's steps, from its plan: step events are named after their step and drawn as its chip.\n const planSteps = fromPlanSteps((task?.plan?.steps ?? []) as TaskPlanStep[])\n const entries = compactThreadActivity(events, (id) => planSteps.find((s) => s.id === id)?.title)\n const items = entries.map(({ event, label, recipients }) => {\n const messageActivity = [\n 'created',\n 'participant_joined',\n 'assistant_responded',\n 'assistant_stopped',\n ].includes(event.kind)\n // A stop is about the assistant's turn (the event names no actor), so it is shown as ARBI's.\n const eventStep =\n event.kind.startsWith('step_') && typeof event.detail?.step === 'string'\n ? planSteps.find((s) => s.id === event.detail?.step)\n : undefined\n // A finished step's document (its latest version), one click from its chip in the transcript.\n const stepDocRef =\n event.kind === 'step_done' && Array.isArray(event.detail?.documents)\n ? (event.detail.documents as string[]).at(-1)\n : undefined\n const stepDocId = stepDocRef ? splitDocRef(stepDocRef).id : undefined\n const stepDocRecord = stepDocId ? docs.find((d) => d.external_id === stepDocId) : undefined\n const stepDocument = stepDocId\n ? {\n name: stepDocRecord ? getDocumentTitle(stepDocRecord) : stepDocId,\n onOpen: () => openDocument(stepDocId),\n }\n : undefined\n // An AI step's progress is ARBI's, whoever started the run.\n const assistant =\n event.kind === 'assistant_responded' ||\n event.kind === 'assistant_stopped' ||\n event.detail?.assistant === true ||\n eventStep?.kind === 'agent'\n const member = members.find(\n (m) =>\n m.user.external_id ===\n (event.actor_ext_id ?? (event.kind === 'created' ? task?.created_by_ext_id : undefined))\n )?.user\n const name = assistant ? 'ARBI' : member ? getUserDisplayName(member) : 'System'\n const docId = typeof event.detail?.doc_ext_id === 'string' ? event.detail.doc_ext_id : undefined\n const sourceMessage =\n typeof event.detail?.message_ext_id === 'string' ? event.detail.message_ext_id : undefined\n const messageId =\n sourceMessage ??\n [...messageHistory]\n .reverse()\n .find((message) => Date.parse(message.created_at ?? '') <= Date.parse(event.created_at))\n ?.external_id ??\n messageHistory[0]?.external_id\n const doc = docId ? docs.find((d) => d.external_id === docId) : undefined\n // A draft email an agent left in the user's native mailbox: the entry opens it in Mail.\n const mailDraftId =\n event.kind === 'notified' &&\n event.detail?.event === 'mail_draft_ready' &&\n typeof event.detail?.mail_id === 'string'\n ? event.detail.mail_id\n : undefined\n // Say who a batch reached, and name any @mentioned person it did not, so nobody has to guess.\n const missed =\n event.kind === 'notified' && recipients.length\n ? unnotifiedMentions(\n messageHistory.find((message) => message.external_id === sourceMessage)?.mentions,\n recipients,\n event.actor_ext_id\n )\n : []\n // A thread call: the server's log card (live → Join, ended → summary + meeting chat).\n const callDetail = event.kind === 'call' ? parseCallLogDetail(event.detail) : null\n // A recording of the thread's call stopped: its Recording card (in a meeting thread).\n const recordingCall =\n event.kind === 'recording' && typeof event.detail?.call_ext_id === 'string'\n ? event.detail.call_ext_id\n : null\n const recordingId =\n typeof event.detail?.recording_ext_id === 'string' ? event.detail.recording_ext_id : null\n return {\n id: event.external_id,\n kind: event.kind,\n // A workflow step event: the step it is about (the thread's step strip places entries by it).\n step: typeof event.detail?.step === 'string' ? event.detail.step : undefined,\n createdAt: event.created_at,\n card: callDetail ? (\n <ThreadCallLogCard\n detail={callDetail}\n name={personName}\n workspaceExtId={workspaceExtId}\n time={formatRelativeTime(event.created_at, { style: 'short' })}\n />\n ) : recordingCall ? (\n <RecordingCard\n callExtId={recordingCall}\n recordingExtId={recordingId}\n title={task?.title}\n time={formatRelativeTime(event.created_at, { style: 'short' })}\n />\n ) : undefined,\n docId,\n docTitle: doc ? getDocumentTitle(doc) : undefined,\n label: mailDraftId\n ? 'Left a draft email'\n : event.kind === 'notified' && recipients.length\n ? notifiedLabel(recipients.map(personName), missed.map(personName))\n : label,\n description: [\n name,\n label,\n ...recipients.map((id) => {\n const person = members.find((m) => m.user.external_id === id)?.user\n return person ? getUserDisplayName(person) : id\n }),\n doc ? getDocumentTitle(doc) : null,\n ]\n .filter(Boolean)\n .join(' · '),\n actor: assistant ? 'assistant' : (member?.external_id ?? 'system'),\n stepChip: eventStep ? stepChipOf(eventStep, event.kind, stepDocument) : undefined,\n // No avatar tooltip: the entry is already a button (or titled row) that carries the same\n // details, and a tooltip trigger inside it would be a nested <button>.\n avatar: assistant ? (\n <AssistantEntity variant=\"icon\" size={20} showTooltip={false} />\n ) : member ? (\n <DocumentUser user={member} tooltip={false} />\n ) : (\n <Clock className=\"size-4 text-muted-foreground\" />\n ),\n time: formatRelativeTime(event.created_at, { style: 'short' }),\n exactTime: formatFriendlyDate(event.created_at),\n onOpenDocument: docId && doc ? () => openDocument(docId) : undefined,\n onSelect: () => {\n if (mailDraftId && openMail) {\n openMail({ draftId: mailDraftId })\n return\n }\n const target = messageActivity ? messageId : event.external_id\n // The deep link selects the thread the message is on (useConversationData).\n if (target) navigateToConversation(conversationId!, target)\n },\n }\n })\n const related = workflows\n .filter((workflow) => workflow.after_conversation_ext_id === conversationId)\n .map((workflow) => {\n const next = conversations.find(\n (conversation) => conversation.workflow_ext_id === workflow.external_id\n )\n return {\n id: workflow.external_id,\n label: next?.title || workflow.name,\n title: 'Starts when this thread is done',\n onSelect: () => {\n if (next) navigateToConversation(next.external_id)\n else openWorkflow?.(workflow.external_id)\n },\n }\n })\n // The run's workflow, opened in the builder: the same steps, as designed. Only where Workflows\n // is on (otherwise there is no page to open it on).\n const origin = openWorkflow\n ? workflows.find((workflow) => workflow.external_id === task?.workflow_ext_id)\n : undefined\n if (origin && openWorkflow)\n related.unshift({\n id: `origin-${origin.external_id}`,\n label: origin.name,\n title: 'Open the workflow in the builder',\n onSelect: () => openWorkflow(origin.external_id),\n })\n const source = workflows.find(\n (workflow) => workflow.external_id === task?.workflow_ext_id\n )?.after_conversation_ext_id\n if (source) {\n const before = conversations.find((conversation) => conversation.external_id === source)\n if (before)\n related.unshift({\n id: source,\n label: before.title || 'Previous thread',\n title: 'Started when this thread was done',\n onSelect: () => navigateToConversation(source),\n })\n }\n // Linked runs: the signals this thread's steps raised and the threads they started, and, for a\n // thread a signal started, the step and thread it came from.\n const links = linkedRunsFromActivity(activity.data as TaskActivityEvent[] | undefined)\n const threadName = (id: string, workflowId?: string) =>\n conversations.find((c) => c.external_id === id)?.title ||\n workflows.find((w) => w.external_id === workflowId)?.name ||\n 'Linked thread'\n const signals: WorkflowThreadSignal[] = links.raised.map((raised) => ({\n step: raised.step,\n signal: raised.signal,\n runs: raised.runs.map((run) => ({\n id: run.conversationId,\n label: threadName(run.conversationId, run.workflowId),\n onSelect: () => navigateToConversation(run.conversationId),\n })),\n }))\n let startedBy: WorkflowThreadOrigin | undefined\n if (links.startedBy) {\n const { conversationId: parentId, step, signal } = links.startedBy\n const parent = conversations.find((c) => c.external_id === parentId)\n const parentSteps = fromPlanSteps((parent?.plan?.steps ?? []) as TaskPlanStep[])\n startedBy = {\n stepTitle: parentSteps.find((s) => s.id === step)?.title ?? step ?? 'a step',\n threadTitle: parent?.title || 'another thread',\n signal,\n onSelect: () => navigateToConversation(parentId),\n }\n }\n return { activity, items, related, signals, startedBy }\n}\n","import { useCallback } from 'react'\nimport { useSwitchWorkspace } from '@arbidocs/react'\nimport { useOptionalConnection } from './ConnectionProvider'\n\n/**\n * Select a workspace in place, through the sign-in layer when there is one (else the host's own\n * session switch): the page on screen stays, unlike `openWorkspace`, which also shows the\n * workspace. Rejects when it could not be opened.\n */\nexport function useSelectWorkspace(): (id: string) => Promise<void> {\n const connection = useOptionalConnection()\n const { switchWorkspace } = useSwitchWorkspace()\n return useCallback(\n async (id: string) => {\n if (connection) return connection.setWorkspace(id)\n if (!(await switchWorkspace({ id }))) throw new Error('Could not open the workspace')\n },\n [connection, switchWorkspace]\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/tasks/useConnectedThreadActivity.tsx","../src/connection/useSelectWorkspace.ts"],"names":[],"mappings":"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","file":"chunk-LNWEJJUY.js","sourcesContent":["import {\n formatFriendlyDate,\n getDocumentTitle,\n getUserDisplayName,\n formatRelativeTime,\n} from '@arbidocs/react/ui'\nimport { Clock } from 'lucide-react'\nimport {\n useConversationActivity,\n useWorkflows,\n useDocuments,\n useWorkspaceUsers,\n useArbiSessionState,\n useConversationData,\n useConversationItems,\n} from '@arbidocs/react'\nimport { STEP_KIND_ICONS, stepKindOf } from '../../agents/workflows/stepKinds'\nimport { compactThreadActivity } from '../../agents/tasks/compact-thread-activity'\nimport { fromPlanSteps, type TaskPlanStep } from '../../agents/workflows/planSteps'\nimport { splitDocRef, type WorkflowStepPhase } from '../../agents/workflows/run'\nimport { type WorkflowStep } from '../../agents/workflows/types'\nimport { linkedRunsFromActivity } from '../../agents/tasks/linkedRuns'\nimport { type TaskActivityEvent } from '../../agents/tasks/TaskActivityTimeline'\nimport {\n type WorkflowThreadOrigin,\n type WorkflowThreadSignal,\n} from '../../agents/tasks/WorkflowThreadStrip'\nimport { ThreadCallLogCard } from '../../calls/connected/ThreadCallLogCard'\nimport { RecordingCard } from '../../calls/connected/RecordingCard'\nimport { parseCallLogDetail } from '../../calls/call-cards'\nimport { AssistantEntity } from '../../agents/tasks/AssistantEntity'\nimport {\n isSupersededStop,\n latestMessageTime,\n notifiedLabel,\n unnotifiedMentions,\n} from '../../agents/tasks/taskHelpers'\nimport { useBlocksEnvironment } from '../../provider/environment'\nimport { useOpenWorkflow } from '../workflows/useOpenWorkflow'\nimport { DocumentUser } from '../files/fields/DocumentUser'\n\n/** The phase a step event puts its step in, for its chip in the transcript. */\nconst STEP_EVENT_PHASES: Record<string, WorkflowStepPhase> = {\n // A past \"started\" is not still running: the step's own chip (on the bar) says where it is now.\n step_started: 'ready',\n step_waiting: 'waiting',\n step_progress: 'waiting',\n step_done: 'done',\n step_skipped: 'skipped',\n step_failed: 'failed',\n step_sent_back: 'ready',\n}\n\n/** A step event's chip in the transcript: its step's kind and icon, the phase the event set. */\nfunction stepChipOf(\n step: WorkflowStep,\n eventKind: string,\n document?: { name: string; onOpen: () => void }\n) {\n const phase = STEP_EVENT_PHASES[eventKind]\n if (!phase) return undefined\n const kind = stepKindOf(step)\n const KindIcon = STEP_KIND_ICONS[kind]\n return { kind, phase, icon: <KindIcon />, document }\n}\n\n/**\n * A thread's persisted history, as its top bar's ribbon and its transcript show it: each entry with\n * its actor, its step chip, the document or email it is about and where a click goes; the threads\n * linked to it (what started it, what it starts); the signals its steps raised. Documents,\n * threads, email drafts and workflows open through the host's environment.\n */\nexport function useConnectedThreadActivity(conversationId: string | null | undefined) {\n const { data: workflows = [] } = useWorkflows()\n const { conversations } = useConversationItems()\n const { data: members = [] } = useWorkspaceUsers()\n const { data: docs = [] } = useDocuments()\n const activity = useConversationActivity(conversationId ?? undefined, { live: true })\n const { messageHistory } = useConversationData()\n const environment = useBlocksEnvironment()\n const { openDocument, openMail } = environment\n const navigateToConversation = (id: string, messageId?: string) =>\n environment.openConversation(id, messageId ? { messageId } : undefined)\n // The host's Workflows page, while it has one (absent: a workflow has nowhere to open).\n const openWorkflow = useOpenWorkflow()\n const workspaceExtId = useArbiSessionState((s) => s.workspaceId)\n const task = conversations.find((c) => c.external_id === conversationId)\n const latestMessageAt = latestMessageTime(messageHistory)\n const events = ((activity.data ?? []) as TaskActivityEvent[]).filter(\n (event) => !isSupersededStop(event, latestMessageAt)\n )\n const personName = (extId: string) => {\n const person = members.find((m) => m.user.external_id === extId)?.user\n return person ? getUserDisplayName(person) : 'someone'\n }\n // The run's steps, from its plan: step events are named after their step and drawn as its chip.\n const planSteps = fromPlanSteps((task?.plan?.steps ?? []) as TaskPlanStep[])\n const entries = compactThreadActivity(events, (id) => planSteps.find((s) => s.id === id)?.title)\n const items = entries.map(({ event, label, recipients }) => {\n const messageActivity = [\n 'created',\n 'participant_joined',\n 'assistant_responded',\n 'assistant_stopped',\n ].includes(event.kind)\n // A stop is about the assistant's turn (the event names no actor), so it is shown as ARBI's.\n const eventStep =\n event.kind.startsWith('step_') && typeof event.detail?.step === 'string'\n ? planSteps.find((s) => s.id === event.detail?.step)\n : undefined\n // A finished step's document (its latest version), one click from its chip in the transcript.\n const stepDocRef =\n event.kind === 'step_done' && Array.isArray(event.detail?.documents)\n ? (event.detail.documents as string[]).at(-1)\n : undefined\n const stepDocId = stepDocRef ? splitDocRef(stepDocRef).id : undefined\n const stepDocRecord = stepDocId ? docs.find((d) => d.external_id === stepDocId) : undefined\n const stepDocument = stepDocId\n ? {\n name: stepDocRecord ? getDocumentTitle(stepDocRecord) : stepDocId,\n onOpen: () => openDocument(stepDocId),\n }\n : undefined\n // An AI step's progress is ARBI's, whoever started the run.\n const assistant =\n event.kind === 'assistant_responded' ||\n event.kind === 'assistant_stopped' ||\n event.detail?.assistant === true ||\n eventStep?.kind === 'agent'\n const member = members.find(\n (m) =>\n m.user.external_id ===\n (event.actor_ext_id ?? (event.kind === 'created' ? task?.created_by_ext_id : undefined))\n )?.user\n const name = assistant ? 'ARBI' : member ? getUserDisplayName(member) : 'System'\n const docId = typeof event.detail?.doc_ext_id === 'string' ? event.detail.doc_ext_id : undefined\n const sourceMessage =\n typeof event.detail?.message_ext_id === 'string' ? event.detail.message_ext_id : undefined\n const messageId =\n sourceMessage ??\n [...messageHistory]\n .reverse()\n .find((message) => Date.parse(message.created_at ?? '') <= Date.parse(event.created_at))\n ?.external_id ??\n messageHistory[0]?.external_id\n const doc = docId ? docs.find((d) => d.external_id === docId) : undefined\n // A draft email an agent left in the user's native mailbox: the entry opens it in Mail.\n const mailDraftId =\n event.kind === 'notified' &&\n event.detail?.event === 'mail_draft_ready' &&\n typeof event.detail?.mail_id === 'string'\n ? event.detail.mail_id\n : undefined\n // Say who a batch reached, and name any @mentioned person it did not, so nobody has to guess.\n const missed =\n event.kind === 'notified' && recipients.length\n ? unnotifiedMentions(\n messageHistory.find((message) => message.external_id === sourceMessage)?.mentions,\n recipients,\n event.actor_ext_id\n )\n : []\n // A thread call: the server's log card (live → Join, ended → summary + meeting chat).\n const callDetail = event.kind === 'call' ? parseCallLogDetail(event.detail) : null\n // A recording of the thread's call stopped: its Recording card (in a meeting thread).\n const recordingCall =\n event.kind === 'recording' && typeof event.detail?.call_ext_id === 'string'\n ? event.detail.call_ext_id\n : null\n const recordingId =\n typeof event.detail?.recording_ext_id === 'string' ? event.detail.recording_ext_id : null\n return {\n id: event.external_id,\n kind: event.kind,\n // A workflow step event: the step it is about (the thread's step strip places entries by it).\n step: typeof event.detail?.step === 'string' ? event.detail.step : undefined,\n createdAt: event.created_at,\n card: callDetail ? (\n <ThreadCallLogCard\n detail={callDetail}\n name={personName}\n workspaceExtId={workspaceExtId}\n time={formatRelativeTime(event.created_at, { style: 'short' })}\n />\n ) : recordingCall ? (\n <RecordingCard\n callExtId={recordingCall}\n recordingExtId={recordingId}\n title={task?.title}\n time={formatRelativeTime(event.created_at, { style: 'short' })}\n />\n ) : undefined,\n docId,\n docTitle: doc ? getDocumentTitle(doc) : undefined,\n label: mailDraftId\n ? 'Left a draft email'\n : event.kind === 'notified' && recipients.length\n ? notifiedLabel(recipients.map(personName), missed.map(personName))\n : label,\n description: [\n name,\n label,\n ...recipients.map((id) => {\n const person = members.find((m) => m.user.external_id === id)?.user\n return person ? getUserDisplayName(person) : id\n }),\n doc ? getDocumentTitle(doc) : null,\n ]\n .filter(Boolean)\n .join(' · '),\n actor: assistant ? 'assistant' : (member?.external_id ?? 'system'),\n stepChip: eventStep ? stepChipOf(eventStep, event.kind, stepDocument) : undefined,\n // No avatar tooltip: the entry is already a button (or titled row) that carries the same\n // details, and a tooltip trigger inside it would be a nested <button>.\n avatar: assistant ? (\n <AssistantEntity variant=\"icon\" size={20} showTooltip={false} />\n ) : member ? (\n <DocumentUser user={member} tooltip={false} />\n ) : (\n <Clock className=\"size-4 text-muted-foreground\" />\n ),\n time: formatRelativeTime(event.created_at, { style: 'short' }),\n exactTime: formatFriendlyDate(event.created_at),\n onOpenDocument: docId && doc ? () => openDocument(docId) : undefined,\n onSelect: () => {\n if (mailDraftId && openMail) {\n openMail({ draftId: mailDraftId })\n return\n }\n const target = messageActivity ? messageId : event.external_id\n // The deep link selects the thread the message is on (useConversationData).\n if (target) navigateToConversation(conversationId!, target)\n },\n }\n })\n const related = workflows\n .filter((workflow) => workflow.after_conversation_ext_id === conversationId)\n .map((workflow) => {\n const next = conversations.find(\n (conversation) => conversation.workflow_ext_id === workflow.external_id\n )\n return {\n id: workflow.external_id,\n label: next?.title || workflow.name,\n title: 'Starts when this thread is done',\n onSelect: () => {\n if (next) navigateToConversation(next.external_id)\n else openWorkflow?.(workflow.external_id)\n },\n }\n })\n // The run's workflow, opened in the builder: the same steps, as designed. Only where Workflows\n // is on (otherwise there is no page to open it on).\n const origin = openWorkflow\n ? workflows.find((workflow) => workflow.external_id === task?.workflow_ext_id)\n : undefined\n if (origin && openWorkflow)\n related.unshift({\n id: `origin-${origin.external_id}`,\n label: origin.name,\n title: 'Open the workflow in the builder',\n onSelect: () => openWorkflow(origin.external_id),\n })\n const source = workflows.find(\n (workflow) => workflow.external_id === task?.workflow_ext_id\n )?.after_conversation_ext_id\n if (source) {\n const before = conversations.find((conversation) => conversation.external_id === source)\n if (before)\n related.unshift({\n id: source,\n label: before.title || 'Previous thread',\n title: 'Started when this thread was done',\n onSelect: () => navigateToConversation(source),\n })\n }\n // Linked runs: the signals this thread's steps raised and the threads they started, and, for a\n // thread a signal started, the step and thread it came from.\n const links = linkedRunsFromActivity(activity.data as TaskActivityEvent[] | undefined)\n const threadName = (id: string, workflowId?: string) =>\n conversations.find((c) => c.external_id === id)?.title ||\n workflows.find((w) => w.external_id === workflowId)?.name ||\n 'Linked thread'\n const signals: WorkflowThreadSignal[] = links.raised.map((raised) => ({\n step: raised.step,\n signal: raised.signal,\n runs: raised.runs.map((run) => ({\n id: run.conversationId,\n label: threadName(run.conversationId, run.workflowId),\n onSelect: () => navigateToConversation(run.conversationId),\n })),\n }))\n let startedBy: WorkflowThreadOrigin | undefined\n if (links.startedBy) {\n const { conversationId: parentId, step, signal } = links.startedBy\n const parent = conversations.find((c) => c.external_id === parentId)\n const parentSteps = fromPlanSteps((parent?.plan?.steps ?? []) as TaskPlanStep[])\n startedBy = {\n stepTitle: parentSteps.find((s) => s.id === step)?.title ?? step ?? 'a step',\n threadTitle: parent?.title || 'another thread',\n signal,\n onSelect: () => navigateToConversation(parentId),\n }\n }\n return { activity, items, related, signals, startedBy }\n}\n","import { useCallback } from 'react'\nimport { useSwitchWorkspace } from '@arbidocs/react'\nimport { useOptionalConnection } from './ConnectionProvider'\n\n/**\n * Select a workspace in place, through the sign-in layer when there is one (else the host's own\n * session switch): the page on screen stays, unlike `openWorkspace`, which also shows the\n * workspace. Rejects when it could not be opened.\n */\nexport function useSelectWorkspace(): (id: string) => Promise<void> {\n const connection = useOptionalConnection()\n const { switchWorkspace } = useSwitchWorkspace()\n return useCallback(\n async (id: string) => {\n if (connection) return connection.setWorkspace(id)\n if (!(await switchWorkspace({ id }))) throw new Error('Could not open the workspace')\n },\n [connection, switchWorkspace]\n )\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { UserAvatar } from './chunk-TVJAVK2G.js';
2
+ import { UserAvatar } from './chunk-DW5DFV4O.js';
3
3
  import { useDocumentsSupport, useDocumentHostActions } from '@arbidocs/react';
4
4
  import { UserEntity, getUserDisplayName } from '@arbidocs/react/ui';
5
5
  import { jsx, Fragment } from 'react/jsx-runtime';
@@ -27,5 +27,5 @@ function DocumentUser({
27
27
  }
28
28
 
29
29
  export { DocumentUser };
30
- //# sourceMappingURL=chunk-KYR3TXHS.js.map
31
- //# sourceMappingURL=chunk-KYR3TXHS.js.map
30
+ //# sourceMappingURL=chunk-OLCQPGB4.js.map
31
+ //# sourceMappingURL=chunk-OLCQPGB4.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/files/fields/DocumentUser.tsx"],"names":[],"mappings":";;;;;AAUO,SAAS,YAAA,CAAa;AAAA,EAC3B,IAAA;AAAA,EACA,OAAA,GAAU,IAAA;AAAA,EACV,OAAA,GAAU;AACZ,CAAA,EAMG;AACD,EAAA,MAAM,EAAE,UAAA,EAAW,GAAI,mBAAA,EAAoB;AAC3C,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,sBAAA,EAAuB;AAC5C,EAAA,IAAI,IAAA,IAAQ,UAAA,EAAY,uBAAO,GAAA,CAAA,QAAA,EAAA,EAAG,QAAA,EAAA,UAAA,CAAW,MAAM,EAAE,OAAA,EAAS,OAAA,EAAS,CAAA,EAAE,CAAA;AACzE,EAAA,IAAI,QAAQ,OAAA,KAAY,MAAA;AACtB,IAAA,uBACE,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,IAAA;AAAA,QACL,OAAA,EAAQ,MAAA;AAAA,QACR,WAAA,EAAa,mBAAmB,IAAI,CAAA;AAAA,QACpC,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,QAAA,EAAU,CAAA,EAAG,IAAA,CAAK,UAAA,EAAY,OAAO,CAAC,CAAA,IAAK,EAAE,CAAA,EAAG,IAAA,CAAK,WAAA,EAAa,MAAA,CAAO,CAAC,KAAK,EAAE,CAAA;AAAA;AAAA,KACnF;AAEJ,EAAA,uBAAO,GAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAY,MAAA,EAAQ,QAAA,EAAU,CAAA;AACnD","file":"chunk-KYR3TXHS.js","sourcesContent":["/**\n * A person by a document or a field (who made a document, a field, a value): the host's own\n * rendering when it has one (`DocumentsSupport.renderUser`: presence, their card), else the kit's\n * avatar, which opens them when the host can.\n */\n\nimport { useDocumentHostActions, useDocumentsSupport, type DocumentPerson } from '@arbidocs/react'\nimport { UserEntity, getUserDisplayName } from '@arbidocs/react/ui'\nimport { UserAvatar } from '../grid/cells'\n\nexport function DocumentUser({\n user,\n tooltip = true,\n variant = 'icon',\n}: {\n user: DocumentPerson | undefined\n /** Whether hovering shows their card (the host's rendering). */\n tooltip?: boolean\n /** Their face alone (`icon`) or their face and name (`pill`). */\n variant?: 'icon' | 'pill'\n}) {\n const { renderUser } = useDocumentsSupport()\n const { openUser } = useDocumentHostActions()\n if (user && renderUser) return <>{renderUser(user, { tooltip, variant })}</>\n if (user && variant === 'pill')\n return (\n <UserEntity\n size=\"sm\"\n variant=\"pill\"\n displayName={getUserDisplayName(user)}\n picture={user.picture}\n initials={`${user.given_name?.charAt(0) ?? ''}${user.family_name?.charAt(0) ?? ''}`}\n />\n )\n return <UserAvatar user={user} onOpen={openUser} />\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/files/fields/DocumentUser.tsx"],"names":[],"mappings":";;;;;AAUO,SAAS,YAAA,CAAa;AAAA,EAC3B,IAAA;AAAA,EACA,OAAA,GAAU,IAAA;AAAA,EACV,OAAA,GAAU;AACZ,CAAA,EAMG;AACD,EAAA,MAAM,EAAE,UAAA,EAAW,GAAI,mBAAA,EAAoB;AAC3C,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,sBAAA,EAAuB;AAC5C,EAAA,IAAI,IAAA,IAAQ,UAAA,EAAY,uBAAO,GAAA,CAAA,QAAA,EAAA,EAAG,QAAA,EAAA,UAAA,CAAW,MAAM,EAAE,OAAA,EAAS,OAAA,EAAS,CAAA,EAAE,CAAA;AACzE,EAAA,IAAI,QAAQ,OAAA,KAAY,MAAA;AACtB,IAAA,uBACE,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,IAAA;AAAA,QACL,OAAA,EAAQ,MAAA;AAAA,QACR,WAAA,EAAa,mBAAmB,IAAI,CAAA;AAAA,QACpC,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,QAAA,EAAU,CAAA,EAAG,IAAA,CAAK,UAAA,EAAY,OAAO,CAAC,CAAA,IAAK,EAAE,CAAA,EAAG,IAAA,CAAK,WAAA,EAAa,MAAA,CAAO,CAAC,KAAK,EAAE,CAAA;AAAA;AAAA,KACnF;AAEJ,EAAA,uBAAO,GAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAY,MAAA,EAAQ,QAAA,EAAU,CAAA;AACnD","file":"chunk-OLCQPGB4.js","sourcesContent":["/**\n * A person by a document or a field (who made a document, a field, a value): the host's own\n * rendering when it has one (`DocumentsSupport.renderUser`: presence, their card), else the kit's\n * avatar, which opens them when the host can.\n */\n\nimport { useDocumentHostActions, useDocumentsSupport, type DocumentPerson } from '@arbidocs/react'\nimport { UserEntity, getUserDisplayName } from '@arbidocs/react/ui'\nimport { UserAvatar } from '../grid/cells'\n\nexport function DocumentUser({\n user,\n tooltip = true,\n variant = 'icon',\n}: {\n user: DocumentPerson | undefined\n /** Whether hovering shows their card (the host's rendering). */\n tooltip?: boolean\n /** Their face alone (`icon`) or their face and name (`pill`). */\n variant?: 'icon' | 'pill'\n}) {\n const { renderUser } = useDocumentsSupport()\n const { openUser } = useDocumentHostActions()\n if (user && renderUser) return <>{renderUser(user, { tooltip, variant })}</>\n if (user && variant === 'pill')\n return (\n <UserEntity\n size=\"sm\"\n variant=\"pill\"\n displayName={getUserDisplayName(user)}\n picture={user.picture}\n initials={`${user.given_name?.charAt(0) ?? ''}${user.family_name?.charAt(0) ?? ''}`}\n />\n )\n return <UserAvatar user={user} onOpen={openUser} />\n}\n"]}
@@ -3,7 +3,7 @@ import { workflowStatus, isSkillRow, listedRunStatus, workflowRunStatusLabel, ha
3
3
  import { TriStateFilterMenu } from './chunk-ZQ5YTC3P.js';
4
4
  import { SelectionBar, SelectionBarAction } from './chunk-L3BEWZWT.js';
5
5
  import { FilterInput } from './chunk-P4CH2ATT.js';
6
- import { GridView } from './chunk-7F5Z4K5W.js';
6
+ import { GridView } from './chunk-IU5CHOEU.js';
7
7
  import { TabHeader } from './chunk-USTSEENR.js';
8
8
  import { EmptyState } from './chunk-P6GHJSLR.js';
9
9
  import { initials } from './chunk-X5YMI6A7.js';
@@ -795,5 +795,5 @@ function WorkflowsTable(props) {
795
795
  var GRID_OPTIONS = { suppressClickEdit: true };
796
796
 
797
797
  export { DEFAULT_TASK_TRIGGER_CHIP_LABELS, DEFAULT_WORKFLOW_CATALOGUE_LABELS, DEFAULT_WORKFLOW_LIST_LABELS, PersonPill, TaskTriggerChip, WORKFLOW_COLUMN_ORDER, WorkflowCatalogueSections, WorkflowsTable, createWorkflowColumns };
798
- //# sourceMappingURL=chunk-STCXXO7T.js.map
799
- //# sourceMappingURL=chunk-STCXXO7T.js.map
798
+ //# sourceMappingURL=chunk-PGCKTXYH.js.map
799
+ //# sourceMappingURL=chunk-PGCKTXYH.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/agents/tasks/PersonPill.tsx","../src/agents/tasks/TaskTriggerChip.tsx","../src/agents/tasks/workflowColumns.tsx","../src/agents/tasks/WorkflowCatalogueSections.tsx","../src/agents/tasks/workflowTableLabels.ts","../src/agents/tasks/WorkflowsTable.tsx"],"names":["jsx","jsxs","Button","Play","Fragment","Workflow"],"mappings":"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","file":"chunk-STCXXO7T.js","sourcesContent":["import { UserEntity, getEntityColorStyles } from '@arbidocs/react/ui'\nimport { initials } from '../../lib/format'\n\n/** A person (or agent) as the table shows them. */\nexport interface TaskPerson {\n /** The user's external id; absent when the person is not known (the pill then reads as their label). */\n id?: string | null\n label: string\n /** The viewer: shown as \"You\" by the host's pill, and as the label here. */\n isMe?: boolean\n isAgent?: boolean\n}\n\nexport interface PersonPillProps {\n person: TaskPerson\n testId?: string\n}\n\n/**\n * A person as the app's own user pill: the same avatar, initials and tint as everywhere else. This is\n * the default; a host that knows more (presence, a direct-message click, the rich tooltip) hands the\n * table its own `renderPerson` instead.\n */\nexport function PersonPill({ person, testId }: PersonPillProps) {\n return (\n <span data-testid={testId} className=\"inline-flex min-w-0\">\n <UserEntity\n variant=\"pill\"\n size=\"sm\"\n interactive={false}\n showTooltip={false}\n initials={initials(person.label)}\n displayName={person.label}\n avatarStyle={person.id ? getEntityColorStyles(person.id) : undefined}\n isAgent={person.isAgent}\n isMe={person.isMe}\n />\n </span>\n )\n}\n","import { Bell, Clock, Link2, MousePointerClick } from 'lucide-react'\nimport { testIdOr } from '../../chat/test-id'\nimport type { WorkflowTriggerType } from './taskLabels'\n\nexport interface TaskTriggerChipLabels {\n /** \"After “X” is done\" — the workflow waits on a task. */\n after: (taskName: string) => string\n /** The workflow waits on a task that is not visible to the viewer. */\n afterUnknown: string\n /** No trigger: it runs when someone presses Run. */\n onDemand: string\n}\n\nexport const DEFAULT_TASK_TRIGGER_CHIP_LABELS: TaskTriggerChipLabels = {\n after: (name) => `After “${name}” is done`,\n afterUnknown: 'After another task is done',\n onDemand: 'Manual',\n}\n\nexport interface TaskTriggerChipProps {\n /** Workflow id: keys the test id (`task-trigger-{id}`). */\n id: string\n triggerType: WorkflowTriggerType\n /** Host-formatted summary for time and event triggers (\"Every weekday at 9:00\", \"On document uploaded\"). */\n summary: string\n /** Set when this workflow waits on a task; the name it shows (or undefined if not visible). */\n afterTaskId?: string | null\n afterTaskName?: string\n testId?: string\n labels?: Partial<TaskTriggerChipLabels>\n}\n\nfunction TriggerIcon({ type, chained }: { type: WorkflowTriggerType; chained: boolean }) {\n const cls = 'size-3.5 shrink-0 text-muted-foreground'\n if (chained) return <Link2 className={cls} aria-hidden />\n switch (type) {\n case 'on_demand':\n return <MousePointerClick className={cls} aria-hidden />\n case 'recurring':\n return <Clock className={cls} aria-hidden />\n case 'event':\n return <Bell className={cls} aria-hidden />\n default:\n return <Clock className={cls} aria-hidden />\n }\n}\n\n/** What starts a workflow, in one line: a time, a repeat, an event, or a task finishing. */\nexport function TaskTriggerChip({\n id,\n triggerType,\n summary,\n afterTaskId,\n afterTaskName,\n testId,\n labels,\n}: TaskTriggerChipProps) {\n const l = { ...DEFAULT_TASK_TRIGGER_CHIP_LABELS, ...labels }\n const chained = Boolean(afterTaskId)\n const text = chained\n ? afterTaskName\n ? l.after(afterTaskName)\n : l.afterUnknown\n : triggerType === 'on_demand'\n ? l.onDemand\n : summary\n return (\n <span\n className=\"inline-flex min-w-0 max-w-full items-center gap-1.5 text-sm font-normal text-foreground\"\n data-testid={testIdOr(testId, { testId: `task-trigger-${id}` })}\n data-trigger={chained ? 'task' : triggerType}\n >\n <TriggerIcon type={triggerType} chained={chained} />\n <span className=\"truncate\">{text}</span>\n </span>\n )\n}\n","/**\n * Column definitions for the Workflows grid. Every column has an explicit `colId` (AG Grid persists\n * column state by id: see CLAUDE.md). The table supplies the cells that need behaviour through slots,\n * which must be stable functions so the definitions are built once.\n */\nimport type { ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport { workflowStatus, type WorkflowListRow } from './workflowRows'\nimport type { WorkflowListLabels } from './workflowTableLabels'\n\nexport const WORKFLOW_COLUMN_ORDER = [\n 'name',\n 'trigger',\n 'last_run',\n 'result',\n 'status',\n 'shared',\n 'actions',\n] as const\n\nexport interface CreateWorkflowColumnsOptions<T extends WorkflowListRow> {\n labels: WorkflowListLabels\n renderName: (workflow: T) => ReactNode\n renderTrigger: (workflow: T) => ReactNode\n renderStatus: (workflow: T) => ReactNode\n renderShared: (workflow: T) => ReactNode\n renderLastRun: (workflow: T) => ReactNode\n renderResult: (workflow: T) => ReactNode\n renderActions: (workflow: T) => ReactNode\n /** Plain text of the trigger cell, for sorting and the clipboard. */\n getTriggerText: (workflow: T) => string\n}\n\nfunction cell<T extends WorkflowListRow>(render: (workflow: T) => ReactNode) {\n return (params: ICellRendererParams<T>): ReactNode => (params.data ? render(params.data) : null)\n}\n\nconst time = (iso?: string | null): number => (iso ? Date.parse(iso) : Number.POSITIVE_INFINITY)\n\nexport function createWorkflowColumns<T extends WorkflowListRow>(\n o: CreateWorkflowColumnsOptions<T>\n): ColDef<T>[] {\n const l = o.labels\n const base: Partial<ColDef<T>> = {\n sortable: false,\n cellStyle: { display: 'flex', alignItems: 'center' },\n }\n return [\n {\n ...base,\n colId: 'name',\n sortable: true,\n headerName: l.colName,\n flex: 3,\n minWidth: 210,\n valueGetter: (p) => p.data?.name.toLowerCase() ?? '',\n cellRenderer: cell(o.renderName),\n },\n {\n ...base,\n colId: 'trigger',\n headerName: l.colTrigger,\n flex: 2.4,\n minWidth: 185,\n valueGetter: (p) => (p.data ? o.getTriggerText(p.data) : ''),\n cellRenderer: cell(o.renderTrigger),\n },\n {\n ...base,\n colId: 'last_run',\n sortable: true,\n headerName: l.colLastRun,\n flex: 1.4,\n minWidth: 140,\n cellStyle: { display: 'flex', alignItems: 'center', padding: 0 },\n valueGetter: (p) => time(p.data?.last_fired_at),\n cellRenderer: cell(o.renderLastRun),\n },\n {\n ...base,\n colId: 'result',\n headerName: 'Result',\n width: 130,\n valueGetter: (p) => p.data?.last_run_status ?? '',\n cellStyle: { display: 'flex', alignItems: 'center', padding: 0 },\n cellRenderer: cell(o.renderResult),\n },\n {\n ...base,\n colId: 'status',\n sortable: true,\n headerName: l.colStatus,\n width: 120,\n valueGetter: (p) => (p.data ? workflowStatus(p.data) : ''),\n cellRenderer: cell(o.renderStatus),\n },\n {\n ...base,\n colId: 'shared',\n headerName: l.colShared,\n headerTooltip: l.shared,\n width: 96,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'center' },\n valueGetter: (p) => p.data?.shared ?? false,\n cellRenderer: cell(o.renderShared),\n },\n {\n ...base,\n colId: 'actions',\n headerName: '',\n width: 180,\n minWidth: 180,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'flex-end' },\n cellRenderer: cell(o.renderActions),\n },\n ]\n}\n","import type { ReactNode } from 'react'\nimport { PencilRuler, Play, Workflow } from 'lucide-react'\nimport { Badge, Button, Card } from '@arbidocs/react/ui'\n\n/** A host catalogue entry as the category view lists it: a workflow to start from or to run. */\nexport interface WorkflowCatalogueRow {\n id: string\n title: string\n description?: string\n /** A key into the host's icon renderer. */\n icon?: string\n /** The section it is listed in: the host's word (a practice, a team, a kind of work). */\n category: string\n /** How many named steps it has. */\n stepCount: number\n /** A short note beside it (e.g. what starts it). */\n note?: string\n /** It can be started from here (a Run button). */\n runnable?: boolean\n}\n\nexport interface WorkflowCatalogueLabels {\n /** Opens the entry in the builder, as a template. */\n openInBuilder: string\n run: string\n /** How many steps an entry has. */\n stepCount: (count: number) => string\n}\n\nexport interface WorkflowCatalogueSectionsProps {\n rows: WorkflowCatalogueRow[]\n /** The order of the sections (and the ones shown). Absent: in order of first appearance. */\n categories?: string[]\n labels: WorkflowCatalogueLabels\n renderIcon?: (icon: string) => ReactNode\n onOpen?: (id: string) => void\n onRun?: (id: string) => void\n}\n\nconst slug = (text: string) => text.toLowerCase().replace(/[^a-z0-9]+/g, '-')\n\n/** The categories in order: the host's, or as the entries first name them. */\nfunction catalogueCategories(rows: WorkflowCatalogueRow[], categories?: string[]) {\n return categories ?? [...new Set(rows.map((row) => row.category))]\n}\n\n/** A host's catalogue in sections, one per category, each entry a card with Builder and Run. */\nexport function WorkflowCatalogueSections({\n rows,\n categories,\n labels,\n renderIcon,\n onOpen,\n onRun,\n}: WorkflowCatalogueSectionsProps) {\n return (\n <>\n {catalogueCategories(rows, categories).map((category) => {\n const entries = rows.filter((row) => row.category === category)\n if (!entries.length) return null\n return (\n <section\n key={category}\n className=\"space-y-3\"\n data-testid={`workflow-category-${slug(category)}`}\n >\n <h2 className=\"text-sm font-semibold text-foreground\">{category}</h2>\n <div className=\"grid gap-3 md:grid-cols-2 xl:grid-cols-3\">\n {entries.map((row) => (\n <Card\n key={row.id}\n className=\"flex flex-col gap-3 p-4\"\n data-testid={`workflow-template-${row.id}`}\n >\n <div className=\"flex items-start gap-3\">\n <span className=\"flex size-8 shrink-0 items-center justify-center rounded-lg bg-primary/10 text-primary [&_svg]:size-4\">\n {(row.icon && renderIcon?.(row.icon)) || <Workflow aria-hidden />}\n </span>\n <div className=\"min-w-0\">\n <p className=\"font-medium text-foreground\">{row.title}</p>\n {row.description && (\n <p className=\"text-xs text-muted-foreground\">{row.description}</p>\n )}\n </div>\n </div>\n <div className=\"mt-auto flex flex-wrap items-center gap-2\">\n <Badge variant=\"secondary\">{labels.stepCount(row.stepCount)}</Badge>\n {row.note && <Badge variant=\"secondary\">{row.note}</Badge>}\n <span className=\"flex-1\" />\n {onOpen && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onOpen(row.id)}\n data-testid={`workflow-template-open-${row.id}`}\n >\n <PencilRuler className=\"size-4\" aria-hidden /> {labels.openInBuilder}\n </Button>\n )}\n {onRun && row.runnable !== false && (\n <Button\n variant=\"accent\"\n size=\"sm\"\n onClick={() => onRun(row.id)}\n data-testid={`workflow-template-run-${row.id}`}\n >\n <Play className=\"size-4\" aria-hidden /> {labels.run}\n </Button>\n )}\n </div>\n </Card>\n ))}\n </div>\n </section>\n )\n })}\n </>\n )\n}\n","import type { WorkflowCatalogueLabels } from './WorkflowCatalogueSections'\n\nexport interface WorkflowListLabels {\n colName: string\n colType: string\n colTrigger: string\n colAction: string\n colAgent: string\n colStatus: string\n colShared: string\n colLastRun: string\n colNextRun: string\n shared: string\n sharedOwnerOnly: string\n deleteOwnerOnly: string\n typeSkill: string\n typeWorkflow: string\n statusActive: string\n statusPaused: string\n statusOnDemand: string\n activeSwitch: (name: string) => string\n agent: string\n myAssistant: string\n me: string\n someone: string\n never: string\n none: string\n reminder: string\n /** What a stepped workflow does: its number of steps. */\n steps: (count: number) => string\n failed: string\n lastRunFailed: string\n openLastRun: string\n editWorkflow: string\n run: string\n runLater: string\n runNow: string\n runs: string\n delete: string\n moreActions: string\n searchLabel: string\n searchPlaceholder: string\n emptyTitle: string\n emptyMessage: string\n firstRun: string\n noMatches: string\n filterAll: string\n filterSkills: string\n filterWorkflows: string\n filterActive: string\n filterPaused: string\n /** Saved workflows that start on a date or a repeat. */\n filterScheduled: string\n /** The category view's heading over the saved workflows. */\n savedWorkflows: string\n makeActive: string\n makePaused: string\n selectAll: string\n selectWorkflow: (name: string) => string\n}\n\nexport const DEFAULT_WORKFLOW_LIST_LABELS: WorkflowListLabels = {\n colName: 'Name',\n colType: 'Type',\n colTrigger: 'When',\n colAction: 'What it does',\n colAgent: 'Agent',\n colStatus: 'Active',\n colShared: 'Shared',\n colLastRun: 'Last run',\n colNextRun: 'Next run',\n shared: 'Shared with the workspace',\n sharedOwnerOnly: 'Only the creator can change who can see this',\n deleteOwnerOnly: 'Only the creator or workspace owner can delete this',\n typeSkill: 'Skill',\n typeWorkflow: 'Workflow',\n statusActive: 'Active',\n statusPaused: 'Inactive',\n statusOnDemand: 'On demand',\n activeSwitch: (name) => `Active: “${name}”`,\n agent: 'Agent',\n myAssistant: 'My assistant',\n me: 'Me',\n someone: 'Someone',\n never: 'Never',\n none: '—',\n reminder: 'Reminder',\n steps: (count) => `Workflow · ${count} ${count === 1 ? 'step' : 'steps'}`,\n failed: 'Failed',\n lastRunFailed: 'Last run failed',\n openLastRun: 'Open the task this run created',\n editWorkflow: 'Edit',\n run: 'Run',\n runLater: 'Run later',\n runNow: 'Run now',\n runs: 'Runs',\n delete: 'Delete',\n moreActions: 'More actions',\n searchLabel: 'Search workflows',\n searchPlaceholder: 'Search workflows and skills…',\n emptyTitle: 'Nothing to run yet',\n emptyMessage: 'Skills and workflows you can run will appear here.',\n firstRun: 'Run a skill now, or choose Run later to save it as a workflow that runs on its own.',\n noMatches: 'Nothing in this view.',\n filterAll: 'All',\n filterSkills: 'Skills',\n filterWorkflows: 'Workflows',\n filterActive: 'Active',\n filterPaused: 'Inactive',\n filterScheduled: 'Scheduled',\n savedWorkflows: 'Saved workflows',\n makeActive: 'Make active',\n makePaused: 'Deactivate',\n selectAll: 'Select all',\n selectWorkflow: (name) => `Select ${name}`,\n}\n\n/** The category view's catalogue cards. */\nexport const DEFAULT_WORKFLOW_CATALOGUE_LABELS: WorkflowCatalogueLabels = {\n openInBuilder: 'Builder',\n run: 'Run',\n stepCount: (count) => `${count} ${count === 1 ? 'step' : 'steps'}`,\n}\n","import { useEffect, useMemo, useRef, useState, type ReactNode } from 'react'\nimport type { GridApi } from 'ag-grid-community'\nimport { History, MoreHorizontal, Pencil, Play, Trash2, Workflow } from 'lucide-react'\nimport {\n Button,\n badgeVariants,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n Switch,\n VisibilityToggle,\n cn,\n} from '@arbidocs/react/ui'\nimport { TabHeader, type Tab } from '../../shell/TabHeader'\nimport { FilterInput } from '../../shell/FilterInput'\nimport { TriStateFilterMenu, type TriState } from '../../settings/TriStateFilterMenu'\nimport { EmptyState } from '../../components/EmptyState'\nimport { GridView } from '../../files/GridView'\nimport { SelectionBar, SelectionBarAction } from '../../files/SelectionBar'\nimport { testIdOr } from '../../chat/test-id'\nimport { PersonPill, type TaskPerson } from './PersonPill'\nimport { TaskTriggerChip, type TaskTriggerChipLabels } from './TaskTriggerChip'\nimport { createWorkflowColumns } from './workflowColumns'\nimport {\n WorkflowCatalogueSections,\n type WorkflowCatalogueLabels,\n type WorkflowCatalogueRow,\n} from './WorkflowCatalogueSections'\nimport {\n hasTrigger,\n isScheduledWorkflow,\n isSkillRow,\n workflowStatus,\n listedRunStatus,\n workflowRunStatusLabel,\n workflowStepCount,\n workflowTriggerType,\n type WorkflowListRow,\n} from './workflowRows'\nimport {\n DEFAULT_WORKFLOW_CATALOGUE_LABELS,\n DEFAULT_WORKFLOW_LIST_LABELS,\n type WorkflowListLabels,\n} from './workflowTableLabels'\n\nexport interface WorkflowsTableProps<T extends WorkflowListRow> {\n /** Everything the viewer can run: saved workflows, and skills as virtual rows (`kind: 'skill'`). */\n workflows: T[]\n isLoading?: boolean\n /** This page contains saved automations only; skills stay in their own library. */\n automationsOnly?: boolean\n /** Human summary of when a workflow starts (\"Every weekday at 9:00\", \"On document uploaded\"). */\n describeTrigger: (workflow: T) => string\n /** Friendly display of an ISO timestamp. */\n formatDate: (iso: string) => string\n /** Pause or resume a workflow that starts by itself (an on-demand one has no switch). */\n onToggleActive: (workflow: T, active: boolean) => void\n /** Share a workflow with the workspace or make it private (the toggle appears with it). */\n onToggleShared?: (workflow: T, shouldShare: boolean) => void\n /** Open the workflow in the composer (workflow-edit mode). */\n onEdit: (workflow: T) => void\n /**\n * Run it. A saved workflow just runs (its inputs are stored); a skill needs its inputs, so the host\n * opens the run dialog with that skill selected.\n */\n onRun: (row: T) => void\n /** Run a skill later: the run dialog, on its schedule view. Offered on skill rows. */\n onRunLater?: (skill: T) => void\n onDelete: (workflow: T) => void\n /** Show the tasks this workflow created. */\n onViewRuns?: (workflow: T) => void\n /** Click on a row (not on one of its controls): a skill's detail, a workflow's editor. */\n onOpenRow?: (row: T) => void\n /** Open the task a workflow's last run created. */\n onOpenThread?: (conversationId: string) => void\n /** Each workflow's latest run: the newest task it created, by workflow id. */\n /** Each automation's latest run thread, with that thread's status (it corrects a lagging result). */\n lastRuns?: Record<string, { conversationId: string; at: string; threadStatus?: string | null }>\n /** Bulk actions on the selected workflows (skills are skipped). */\n onDeleteMany?: (workflows: T[]) => void\n onToggleActiveMany?: (workflows: T[], active: boolean) => void\n /** Agent names by id, for the Agent column (falls back to \"Agent\"). */\n agentNames?: Record<string, string>\n /** Skill names by `skill_ref`, for the action cell (falls back to the reference). */\n skillNames?: Record<string, string>\n /** Task names by id, for an \"after <task>\" trigger. */\n taskNames?: Record<string, string>\n /** How an agent appears in the Agent column; defaults to the app's user pill. */\n renderPerson?: (person: TaskPerson) => ReactNode\n /**\n * The viewer edits the workspace (owner or collaborator): they may then edit, pause, resume and run a\n * workflow shared with it. A guest leaves this off.\n */\n canEditShared?: boolean\n /** The viewer owns the workspace: with the creator, the only one who deletes a workflow. Who can see it stays the creator's alone. */\n isWorkspaceOwner?: boolean\n /** Workflow id with a request in flight: its row disables its controls. */\n busyId?: string | null\n tabs?: Tab[]\n activeTabId?: string\n onTabChange?: (id: string) => void\n content?: ReactNode\n /** Actions at the end of the tab row; a function is told when the row is narrow (a phone). */\n header?: ReactNode | ((isCompact: boolean) => ReactNode)\n gridId?: string\n labels?: Partial<WorkflowListLabels>\n triggerChipLabels?: Partial<TaskTriggerChipLabels>\n testId?: string\n /**\n * The host's catalogue: when it has entries, they are listed in sections by category (each\n * entry opens in the builder or runs), then the saved workflows. Absent or empty: the saved\n * workflows alone.\n */\n catalogue?: WorkflowCatalogueRow[]\n /** The order of the categories (and the ones shown). Absent: as the entries first name them. */\n categories?: string[]\n /** Open a catalogue entry in the builder, as a template. */\n onOpenTemplate?: (id: string) => void\n /** Run a catalogue entry. Absent: no Run on the entries. */\n onRunTemplate?: (id: string) => void\n /** Draws a catalogue entry's icon name. */\n renderIcon?: (icon: string) => ReactNode\n catalogueLabels?: Partial<WorkflowCatalogueLabels>\n}\n\ntype Filter = 'all' | 'skills' | 'workflows' | 'active' | 'paused' | 'scheduled'\n/** Each group narrows on its own: kinds, then states, then how it starts. */\nconst FILTER_GROUPS: Filter[][] = [['skills', 'workflows'], ['active', 'paused'], ['scheduled']]\nconst NO_CATALOGUE: WorkflowCatalogueRow[] = []\nconst ROW_HEIGHT = 40\n\n/**\n * Everything the viewer can run, in one list: skills (they run on demand) and saved workflows (they start\n * on a date, a repeat, an event or after a task, or on demand). Each row has its type, when it starts, what\n * it does, who runs it, its status (Active or Paused with a switch; On demand has none), when it last ran\n * (linking to the task that run created) and runs next, and a visible Run. The same grid as every other\n * list in the app.\n */\nexport function WorkflowsTable<T extends WorkflowListRow>(props: WorkflowsTableProps<T>) {\n const { workflows, isLoading, busyId, header, testId } = props\n const l: WorkflowListLabels = { ...DEFAULT_WORKFLOW_LIST_LABELS, ...props.labels }\n const [filterStates, setFilterStates] = useState<Map<Filter, TriState>>(new Map())\n const [filterOpen, setFilterOpen] = useState(false)\n const [query, setQuery] = useState('')\n const [selected, setSelected] = useState<T[]>([])\n const apiRef = useRef<GridApi<T> | null>(null)\n\n const q = query.trim().toLowerCase()\n const matches = (w: T) =>\n !q ||\n `${w.name} ${w.description ?? ''} ${w.prompt ?? ''} ${w.skill_ref ?? ''}`\n .toLowerCase()\n .includes(q)\n const inFilter = (w: T, f: Filter) =>\n f === 'all' ||\n (f === 'skills' && isSkillRow(w)) ||\n (f === 'workflows' && !isSkillRow(w)) ||\n (f === 'active' && workflowStatus(w) === 'active') ||\n (f === 'paused' && workflowStatus(w) === 'paused') ||\n (f === 'scheduled' && !isSkillRow(w) && isScheduledWorkflow(w))\n const counts = useMemo(() => {\n const out = { all: 0, skills: 0, workflows: 0, active: 0, paused: 0, scheduled: 0 }\n for (const w of workflows) {\n if (!matches(w)) continue\n for (const f of Object.keys(out) as Filter[]) if (inFilter(w, f)) out[f] += 1\n }\n return out\n // matches/inFilter read only `q` and the row.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [workflows, q])\n const shown = useMemo(\n () =>\n workflows.filter((w) => {\n if (!matches(w)) return false\n for (const group of FILTER_GROUPS) {\n const included = group.filter((f) => filterStates.get(f) === 'include')\n if (included.length && !included.some((f) => inFilter(w, f))) return false\n if (group.some((f) => filterStates.get(f) === 'exclude' && inFilter(w, f))) return false\n }\n return true\n }),\n [workflows, filterStates, q]\n )\n\n const renderPerson = props.renderPerson ?? ((p: TaskPerson) => <PersonPill person={p} />)\n const actionText = (w: T): string => {\n if (w.action)\n return w.action.type === 'email_documents' ? 'Email latest documents' : 'AI Review'\n if (isSkillRow(w))\n return w.description || (w.skill_ref && props.skillNames?.[w.skill_ref]) || w.name\n if (w.skill_ref) return props.skillNames?.[w.skill_ref] ?? w.skill_ref\n // A stepped workflow runs its plan: it is no reminder, even with no prompt of its own.\n const steps = workflowStepCount(w)\n if (steps > 0) return w.prompt?.trim() || l.steps(steps)\n return w.prompt?.trim() || w.plan?.goal?.trim() || l.reminder\n }\n\n // The cells read the latest handlers and lookups through this ref, so the column definitions are\n // built once and an interaction never makes the grid rebuild them.\n const latest = useRef({ props, l, renderPerson, actionText })\n latest.current = { props, l, renderPerson, actionText }\n\n const columnDefs = useMemo(\n () =>\n createWorkflowColumns<T>({\n labels: l,\n getTriggerText: (w) =>\n isSkillRow(w) ? l.statusOnDemand : latest.current.props.describeTrigger(w),\n renderName: (w) => {\n const { l: lb } = latest.current\n const skill = isSkillRow(w)\n const text = skill\n ? latest.current.actionText(w)\n : w.description || latest.current.actionText(w)\n // A name made from the instruction is not said again under itself.\n const stem = w.name.replace(/…$/, '').trim()\n const about = text && text.trim() !== w.name.trim() && text.trim() !== stem ? text : ''\n return (\n <div className=\"min-w-0 leading-tight\">\n <span className=\"flex min-w-0 items-center gap-1.5\">\n <span\n className={cn(\n 'truncate text-sm font-normal',\n workflowStatus(w) === 'paused' && 'text-muted-foreground'\n )}\n data-testid={`workflow-name-${w.external_id}`}\n >\n {w.name}\n </span>\n {skill && (\n <span\n className=\"shrink-0 rounded-full border border-border px-1.5 text-[11px] text-muted-foreground\"\n data-testid={`workflow-type-${w.external_id}`}\n >\n {lb.typeSkill}\n </span>\n )}\n </span>\n {about && !latest.current.props.automationsOnly && (\n <p\n className=\"truncate text-xs text-muted-foreground\"\n data-testid={`workflow-action-${w.external_id}`}\n >\n {about}\n </p>\n )}\n </div>\n )\n },\n renderTrigger: (w) => {\n const { props: p } = latest.current\n const after = w.after_conversation_ext_id\n const skill = isSkillRow(w)\n return (\n <div className=\"min-w-0 leading-tight\">\n <TaskTriggerChip\n id={w.external_id}\n testId={`workflow-trigger-${w.external_id}`}\n triggerType={workflowTriggerType(w)}\n summary={skill ? '' : p.describeTrigger(w)}\n afterTaskId={after}\n afterTaskName={after ? p.taskNames?.[after] : undefined}\n labels={p.triggerChipLabels}\n />\n </div>\n )\n },\n renderStatus: (w) => {\n const { props: p, l: lb } = latest.current\n const canEdit = w.is_owner !== false || Boolean(p.canEditShared)\n return (\n <Switch\n checked={hasTrigger(w) && !isSkillRow(w) && Boolean(w.active)}\n disabled={!hasTrigger(w) || isSkillRow(w) || !canEdit || p.busyId === w.external_id}\n onCheckedChange={(next) => p.onToggleActive(w, next)}\n className=\"disabled:data-[state=unchecked]:bg-muted dark:disabled:data-[state=unchecked]:bg-muted\"\n aria-label={lb.activeSwitch(w.name)}\n data-testid={`workflow-active-${w.external_id}`}\n />\n )\n },\n renderShared: (w) => {\n const { props: p, l: lb } = latest.current\n if (!p.onToggleShared || isSkillRow(w)) return null\n // Who can see it is the creator's alone: unsharing hides it from everyone else.\n const isCreator = w.is_owner !== false\n return (\n <VisibilityToggle\n items={{ shared: w.shared ?? false }}\n onToggle={(share) => latest.current.props.onToggleShared?.(w, share)}\n disabled={!isCreator || p.busyId === w.external_id}\n disabledTooltip={lb.sharedOwnerOnly}\n showLabel={false}\n data-testid={`workflow-shared-${w.external_id}`}\n />\n )\n },\n renderLastRun: (w) => {\n const { props: p, l: lb } = latest.current\n const at = w.last_fired_at ?? p.lastRuns?.[w.external_id]?.at\n return (\n <button\n type=\"button\"\n className=\"h-full w-full truncate px-4 text-left text-sm hover:text-primary\"\n onClick={() => p.onViewRuns?.(w)}\n title=\"View run history\"\n data-testid={`workflow-last-run-${w.external_id}`}\n >\n {at ? p.formatDate(at) : lb.never}\n </button>\n )\n },\n renderResult: (w) => {\n const status = listedRunStatus(\n w.last_run_status,\n latest.current.props.lastRuns?.[w.external_id]?.threadStatus\n )\n const label = workflowRunStatusLabel(status)\n return (\n <button\n type=\"button\"\n onClick={() => latest.current.props.onViewRuns?.(w)}\n title=\"View run history\"\n className={cn(\n badgeVariants({ variant: 'outline' }),\n 'mx-4 cursor-pointer text-xs font-medium',\n status === 'failed'\n ? 'border-red-border bg-red-bg text-red-text hover:bg-red-bg/80'\n : status === 'completed' || status === 'success'\n ? 'border-green-border bg-green-bg text-green-text hover:bg-green-bg/80'\n : status\n ? 'border-primary/20 bg-primary/10 text-primary hover:bg-primary/15'\n : 'border-border bg-muted text-muted-foreground hover:bg-muted/80'\n )}\n data-testid={`workflow-result-${w.external_id}`}\n >\n {label}\n </button>\n )\n },\n renderActions: (w) => {\n const { props: p, l: lb } = latest.current\n const id = w.external_id\n const skill = isSkillRow(w)\n const busy = p.busyId === id\n const isOwner = w.is_owner !== false\n const canEdit = isOwner || Boolean(p.canEditShared)\n const canAdmin = isOwner || Boolean(p.isWorkspaceOwner)\n return (\n <div className=\"flex items-center justify-end gap-1\">\n {(skill || canEdit) && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"h-8 gap-1.5 pointer-coarse:h-11\"\n disabled={busy}\n onClick={() => p.onRun(w)}\n data-testid={`workflow-run-btn-${id}`}\n >\n <Play className=\"size-3.5\" aria-hidden />\n {lb.run}\n </Button>\n )}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 pointer-coarse:size-11\"\n aria-label={lb.moreActions}\n data-testid={`workflow-menu-${id}`}\n >\n <MoreHorizontal className=\"size-4\" aria-hidden />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {skill && p.onRunLater && (\n <DropdownMenuItem\n onSelect={() => p.onRunLater?.(w)}\n data-testid={`workflow-run-later-${id}`}\n >\n <History className=\"mr-2 size-4\" aria-hidden />\n {lb.runLater}\n </DropdownMenuItem>\n )}\n {!skill && canEdit && (\n <DropdownMenuItem\n onSelect={() => p.onEdit(w)}\n data-testid={`workflow-edit-${id}`}\n >\n <Pencil className=\"mr-2 size-4\" aria-hidden />\n {lb.editWorkflow}\n </DropdownMenuItem>\n )}\n {!skill && p.onViewRuns && (\n <DropdownMenuItem\n onSelect={() => p.onViewRuns?.(w)}\n data-testid={`workflow-runs-${id}`}\n >\n <History className=\"mr-2 size-4\" aria-hidden />\n {lb.runs}\n </DropdownMenuItem>\n )}\n {!skill && canEdit && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n disabled={busy || !canAdmin}\n onSelect={() => p.onDelete(w)}\n title={canAdmin ? undefined : lb.deleteOwnerOnly}\n className=\"text-destructive focus:text-destructive\"\n data-testid={`workflow-delete-${id}`}\n >\n <Trash2 className=\"mr-2 size-4\" aria-hidden />\n {lb.delete}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n )\n },\n }),\n // Stable on purpose: only the header texts rebuild the columns (see `latest`).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n l.colName,\n l.colType,\n l.colTrigger,\n l.colAction,\n l.colAgent,\n l.colStatus,\n l.colShared,\n l.shared,\n l.colLastRun,\n l.colNextRun,\n ]\n )\n\n // A change in the lookups the cells draw from redraws them once.\n useEffect(() => {\n apiRef.current?.refreshCells({ force: true })\n }, [\n busyId,\n props.agentNames,\n props.skillNames,\n props.taskNames,\n props.lastRuns,\n props.renderPerson,\n props.labels,\n props.canEditShared,\n props.isWorkspaceOwner,\n ])\n\n const mine = selected.filter((w) => !isSkillRow(w))\n const adminSelected = mine.filter((w) => w.is_owner !== false || props.isWorkspaceOwner)\n const editableSelected = mine.filter(\n (w) => hasTrigger(w) && (w.is_owner !== false || props.canEditShared)\n )\n const clearSelection = () => setSelected([])\n\n // The category view: the catalogue (narrowed by the text filter; a state filter is about saved\n // workflows only, so it hides the catalogue), then the saved workflows.\n const byCategory = (props.catalogue?.length ?? 0) > 0\n const stateFiltered = [...filterStates.values()].some((state) => state === 'include')\n const catalogueLabels = { ...DEFAULT_WORKFLOW_CATALOGUE_LABELS, ...props.catalogueLabels }\n const catalogue = useMemo(\n () =>\n (props.catalogue ?? NO_CATALOGUE).filter(\n (row) => !q || `${row.title} ${row.description ?? ''}`.toLowerCase().includes(q)\n ),\n [props.catalogue, q]\n )\n const list =\n workflows.length === 0 && !isLoading ? (\n <EmptyState\n icon={Workflow}\n title={l.emptyTitle}\n description={l.emptyMessage}\n testId=\"workflow-list-empty\"\n />\n ) : (\n <div className=\"min-h-0 flex-1\">\n <GridView<T>\n testId=\"workflow-grid\"\n gridId={props.gridId ?? 'workflows-grid-v2'}\n items={shown}\n columnDefs={columnDefs}\n getItemId={(w) => w.external_id}\n getRowTestId={(w) => `workflow-row-${w.external_id}`}\n isLoading={isLoading}\n showEmpty={shown.length === 0}\n emptyState={{ title: l.noMatches }}\n rowHeight={ROW_HEIGHT}\n height=\"100%\"\n onGridReady={({ api }) => {\n apiRef.current = api\n }}\n onRowClick={(row) => props.onOpenRow?.(row)}\n selection={{ mode: 'multiple', selected, onSelectionChange: setSelected }}\n gridOptions={GRID_OPTIONS as never}\n />\n </div>\n )\n\n // The search box with its state filter: in the tab row, or (narrow) across a row of its own.\n const filterBox = (className?: string) => (\n <FilterInput\n className={className}\n value={query}\n onChange={setQuery}\n fields={['text']}\n onFieldsChange={() => {}}\n hideFieldPicker\n ariaLabel={l.searchLabel}\n testIds={{ input: 'workflow-search' }}\n filter={\n <TriStateFilterMenu\n testId=\"automations-filter-button\"\n open={filterOpen}\n onOpenChange={setFilterOpen}\n filterStates={filterStates}\n onFiltersChange={setFilterStates}\n triggerClassName=\"flex h-5 items-center gap-0.5 rounded px-1 text-muted-foreground hover:text-foreground pointer-coarse:h-11! pointer-coarse:min-w-11 pointer-coarse:justify-center\"\n renderChevron\n disableHoverOpen\n options={[\n ...(!props.automationsOnly\n ? [\n { id: 'skills' as const, label: l.filterSkills, count: counts.skills },\n {\n id: 'workflows' as const,\n label: l.filterWorkflows,\n count: counts.workflows,\n },\n ]\n : []),\n { id: 'active', label: l.filterActive, count: counts.active },\n { id: 'paused', label: l.filterPaused, count: counts.paused },\n { id: 'scheduled', label: l.filterScheduled, count: counts.scheduled },\n ]}\n />\n }\n />\n )\n\n return (\n <div\n className=\"flex min-h-0 flex-1 flex-col\"\n data-testid={testIdOr(testId, { testId: 'workflow-list' })}\n >\n <TabHeader\n testId=\"automations-tab-header\"\n tabs={[\n {\n id: 'automations',\n label: '',\n count: shown.length,\n countIcon: <Workflow className=\"size-3.5\" />,\n countPlacement: 'leading',\n presentation: 'count',\n hasActiveFilters: !!q || [...filterStates.values()].some(Boolean),\n },\n ...(props.tabs ?? []),\n ]}\n activeTabId={props.activeTabId ?? 'automations'}\n onTabChange={props.onTabChange ?? (() => {})}\n // A narrow row (a phone) gives the filter a row of its own under the tabs, so the host's\n // tabs and the actions keep their room in the tab row.\n firstTabContent={(isCompact) => (isCompact ? null : filterBox())}\n belowContent={(isCompact) => (isCompact ? filterBox('w-full') : null)}\n rightContent={header}\n />\n {props.content ? (\n props.content\n ) : byCategory ? (\n <div\n className=\"min-h-0 flex-1 space-y-8 overflow-auto p-4\"\n data-testid=\"workflow-categories\"\n >\n {!stateFiltered && (\n <WorkflowCatalogueSections\n rows={catalogue}\n categories={props.categories}\n labels={catalogueLabels}\n renderIcon={props.renderIcon}\n onOpen={props.onOpenTemplate}\n onRun={props.onRunTemplate}\n />\n )}\n <section className=\"space-y-3\" data-testid=\"workflow-category-saved\">\n <h2 className=\"flex items-center gap-2 text-sm font-semibold text-foreground\">\n <Workflow className=\"size-4 text-primary\" aria-hidden /> {l.savedWorkflows}\n </h2>\n <div className=\"flex h-[min(32rem,70dvh)] min-h-64 flex-col\">{list}</div>\n </section>\n </div>\n ) : (\n list\n )}\n {!props.content && (\n <SelectionBar count={selected.length} onClear={clearSelection}>\n {(isCompact) => (\n <>\n {props.onToggleActiveMany && (\n <>\n <SelectionBarAction\n icon={Play}\n label={l.makeActive}\n onClick={() => {\n props.onToggleActiveMany?.(editableSelected, true)\n clearSelection()\n }}\n disabled={editableSelected.length === 0}\n isCompact={isCompact}\n testId=\"workflow-bulk-activate\"\n />\n <SelectionBarAction\n icon={Workflow}\n label={l.makePaused}\n onClick={() => {\n props.onToggleActiveMany?.(editableSelected, false)\n clearSelection()\n }}\n disabled={editableSelected.length === 0}\n isCompact={isCompact}\n testId=\"workflow-bulk-pause\"\n />\n </>\n )}\n {props.onDeleteMany && (\n <SelectionBarAction\n icon={Trash2}\n label={l.delete}\n onClick={() => {\n props.onDeleteMany?.(adminSelected)\n clearSelection()\n }}\n disabled={adminSelected.length === 0}\n isCompact={isCompact}\n className=\"border-red-border text-red-text hover:bg-red-bg hover:text-red-text\"\n testId=\"workflow-bulk-delete\"\n />\n )}\n </>\n )}\n </SelectionBar>\n )}\n </div>\n )\n}\n\nconst GRID_OPTIONS = { suppressClickEdit: true }\n"]}
1
+ {"version":3,"sources":["../src/agents/tasks/PersonPill.tsx","../src/agents/tasks/TaskTriggerChip.tsx","../src/agents/tasks/workflowColumns.tsx","../src/agents/tasks/WorkflowCatalogueSections.tsx","../src/agents/tasks/workflowTableLabels.ts","../src/agents/tasks/WorkflowsTable.tsx"],"names":["jsx","jsxs","Button","Play","Fragment","Workflow"],"mappings":"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","file":"chunk-PGCKTXYH.js","sourcesContent":["import { UserEntity, getEntityColorStyles } from '@arbidocs/react/ui'\nimport { initials } from '../../lib/format'\n\n/** A person (or agent) as the table shows them. */\nexport interface TaskPerson {\n /** The user's external id; absent when the person is not known (the pill then reads as their label). */\n id?: string | null\n label: string\n /** The viewer: shown as \"You\" by the host's pill, and as the label here. */\n isMe?: boolean\n isAgent?: boolean\n}\n\nexport interface PersonPillProps {\n person: TaskPerson\n testId?: string\n}\n\n/**\n * A person as the app's own user pill: the same avatar, initials and tint as everywhere else. This is\n * the default; a host that knows more (presence, a direct-message click, the rich tooltip) hands the\n * table its own `renderPerson` instead.\n */\nexport function PersonPill({ person, testId }: PersonPillProps) {\n return (\n <span data-testid={testId} className=\"inline-flex min-w-0\">\n <UserEntity\n variant=\"pill\"\n size=\"sm\"\n interactive={false}\n showTooltip={false}\n initials={initials(person.label)}\n displayName={person.label}\n avatarStyle={person.id ? getEntityColorStyles(person.id) : undefined}\n isAgent={person.isAgent}\n isMe={person.isMe}\n />\n </span>\n )\n}\n","import { Bell, Clock, Link2, MousePointerClick } from 'lucide-react'\nimport { testIdOr } from '../../chat/test-id'\nimport type { WorkflowTriggerType } from './taskLabels'\n\nexport interface TaskTriggerChipLabels {\n /** \"After “X” is done\" — the workflow waits on a task. */\n after: (taskName: string) => string\n /** The workflow waits on a task that is not visible to the viewer. */\n afterUnknown: string\n /** No trigger: it runs when someone presses Run. */\n onDemand: string\n}\n\nexport const DEFAULT_TASK_TRIGGER_CHIP_LABELS: TaskTriggerChipLabels = {\n after: (name) => `After “${name}” is done`,\n afterUnknown: 'After another task is done',\n onDemand: 'Manual',\n}\n\nexport interface TaskTriggerChipProps {\n /** Workflow id: keys the test id (`task-trigger-{id}`). */\n id: string\n triggerType: WorkflowTriggerType\n /** Host-formatted summary for time and event triggers (\"Every weekday at 9:00\", \"On document uploaded\"). */\n summary: string\n /** Set when this workflow waits on a task; the name it shows (or undefined if not visible). */\n afterTaskId?: string | null\n afterTaskName?: string\n testId?: string\n labels?: Partial<TaskTriggerChipLabels>\n}\n\nfunction TriggerIcon({ type, chained }: { type: WorkflowTriggerType; chained: boolean }) {\n const cls = 'size-3.5 shrink-0 text-muted-foreground'\n if (chained) return <Link2 className={cls} aria-hidden />\n switch (type) {\n case 'on_demand':\n return <MousePointerClick className={cls} aria-hidden />\n case 'recurring':\n return <Clock className={cls} aria-hidden />\n case 'event':\n return <Bell className={cls} aria-hidden />\n default:\n return <Clock className={cls} aria-hidden />\n }\n}\n\n/** What starts a workflow, in one line: a time, a repeat, an event, or a task finishing. */\nexport function TaskTriggerChip({\n id,\n triggerType,\n summary,\n afterTaskId,\n afterTaskName,\n testId,\n labels,\n}: TaskTriggerChipProps) {\n const l = { ...DEFAULT_TASK_TRIGGER_CHIP_LABELS, ...labels }\n const chained = Boolean(afterTaskId)\n const text = chained\n ? afterTaskName\n ? l.after(afterTaskName)\n : l.afterUnknown\n : triggerType === 'on_demand'\n ? l.onDemand\n : summary\n return (\n <span\n className=\"inline-flex min-w-0 max-w-full items-center gap-1.5 text-sm font-normal text-foreground\"\n data-testid={testIdOr(testId, { testId: `task-trigger-${id}` })}\n data-trigger={chained ? 'task' : triggerType}\n >\n <TriggerIcon type={triggerType} chained={chained} />\n <span className=\"truncate\">{text}</span>\n </span>\n )\n}\n","/**\n * Column definitions for the Workflows grid. Every column has an explicit `colId` (AG Grid persists\n * column state by id: see CLAUDE.md). The table supplies the cells that need behaviour through slots,\n * which must be stable functions so the definitions are built once.\n */\nimport type { ReactNode } from 'react'\nimport type { ColDef, ICellRendererParams } from 'ag-grid-community'\nimport { workflowStatus, type WorkflowListRow } from './workflowRows'\nimport type { WorkflowListLabels } from './workflowTableLabels'\n\nexport const WORKFLOW_COLUMN_ORDER = [\n 'name',\n 'trigger',\n 'last_run',\n 'result',\n 'status',\n 'shared',\n 'actions',\n] as const\n\nexport interface CreateWorkflowColumnsOptions<T extends WorkflowListRow> {\n labels: WorkflowListLabels\n renderName: (workflow: T) => ReactNode\n renderTrigger: (workflow: T) => ReactNode\n renderStatus: (workflow: T) => ReactNode\n renderShared: (workflow: T) => ReactNode\n renderLastRun: (workflow: T) => ReactNode\n renderResult: (workflow: T) => ReactNode\n renderActions: (workflow: T) => ReactNode\n /** Plain text of the trigger cell, for sorting and the clipboard. */\n getTriggerText: (workflow: T) => string\n}\n\nfunction cell<T extends WorkflowListRow>(render: (workflow: T) => ReactNode) {\n return (params: ICellRendererParams<T>): ReactNode => (params.data ? render(params.data) : null)\n}\n\nconst time = (iso?: string | null): number => (iso ? Date.parse(iso) : Number.POSITIVE_INFINITY)\n\nexport function createWorkflowColumns<T extends WorkflowListRow>(\n o: CreateWorkflowColumnsOptions<T>\n): ColDef<T>[] {\n const l = o.labels\n const base: Partial<ColDef<T>> = {\n sortable: false,\n cellStyle: { display: 'flex', alignItems: 'center' },\n }\n return [\n {\n ...base,\n colId: 'name',\n sortable: true,\n headerName: l.colName,\n flex: 3,\n minWidth: 210,\n valueGetter: (p) => p.data?.name.toLowerCase() ?? '',\n cellRenderer: cell(o.renderName),\n },\n {\n ...base,\n colId: 'trigger',\n headerName: l.colTrigger,\n flex: 2.4,\n minWidth: 185,\n valueGetter: (p) => (p.data ? o.getTriggerText(p.data) : ''),\n cellRenderer: cell(o.renderTrigger),\n },\n {\n ...base,\n colId: 'last_run',\n sortable: true,\n headerName: l.colLastRun,\n flex: 1.4,\n minWidth: 140,\n cellStyle: { display: 'flex', alignItems: 'center', padding: 0 },\n valueGetter: (p) => time(p.data?.last_fired_at),\n cellRenderer: cell(o.renderLastRun),\n },\n {\n ...base,\n colId: 'result',\n headerName: 'Result',\n width: 130,\n valueGetter: (p) => p.data?.last_run_status ?? '',\n cellStyle: { display: 'flex', alignItems: 'center', padding: 0 },\n cellRenderer: cell(o.renderResult),\n },\n {\n ...base,\n colId: 'status',\n sortable: true,\n headerName: l.colStatus,\n width: 120,\n valueGetter: (p) => (p.data ? workflowStatus(p.data) : ''),\n cellRenderer: cell(o.renderStatus),\n },\n {\n ...base,\n colId: 'shared',\n headerName: l.colShared,\n headerTooltip: l.shared,\n width: 96,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'center' },\n valueGetter: (p) => p.data?.shared ?? false,\n cellRenderer: cell(o.renderShared),\n },\n {\n ...base,\n colId: 'actions',\n headerName: '',\n width: 180,\n minWidth: 180,\n cellStyle: { display: 'flex', alignItems: 'center', justifyContent: 'flex-end' },\n cellRenderer: cell(o.renderActions),\n },\n ]\n}\n","import type { ReactNode } from 'react'\nimport { PencilRuler, Play, Workflow } from 'lucide-react'\nimport { Badge, Button, Card } from '@arbidocs/react/ui'\n\n/** A host catalogue entry as the category view lists it: a workflow to start from or to run. */\nexport interface WorkflowCatalogueRow {\n id: string\n title: string\n description?: string\n /** A key into the host's icon renderer. */\n icon?: string\n /** The section it is listed in: the host's word (a practice, a team, a kind of work). */\n category: string\n /** How many named steps it has. */\n stepCount: number\n /** A short note beside it (e.g. what starts it). */\n note?: string\n /** It can be started from here (a Run button). */\n runnable?: boolean\n}\n\nexport interface WorkflowCatalogueLabels {\n /** Opens the entry in the builder, as a template. */\n openInBuilder: string\n run: string\n /** How many steps an entry has. */\n stepCount: (count: number) => string\n}\n\nexport interface WorkflowCatalogueSectionsProps {\n rows: WorkflowCatalogueRow[]\n /** The order of the sections (and the ones shown). Absent: in order of first appearance. */\n categories?: string[]\n labels: WorkflowCatalogueLabels\n renderIcon?: (icon: string) => ReactNode\n onOpen?: (id: string) => void\n onRun?: (id: string) => void\n}\n\nconst slug = (text: string) => text.toLowerCase().replace(/[^a-z0-9]+/g, '-')\n\n/** The categories in order: the host's, or as the entries first name them. */\nfunction catalogueCategories(rows: WorkflowCatalogueRow[], categories?: string[]) {\n return categories ?? [...new Set(rows.map((row) => row.category))]\n}\n\n/** A host's catalogue in sections, one per category, each entry a card with Builder and Run. */\nexport function WorkflowCatalogueSections({\n rows,\n categories,\n labels,\n renderIcon,\n onOpen,\n onRun,\n}: WorkflowCatalogueSectionsProps) {\n return (\n <>\n {catalogueCategories(rows, categories).map((category) => {\n const entries = rows.filter((row) => row.category === category)\n if (!entries.length) return null\n return (\n <section\n key={category}\n className=\"space-y-3\"\n data-testid={`workflow-category-${slug(category)}`}\n >\n <h2 className=\"text-sm font-semibold text-foreground\">{category}</h2>\n <div className=\"grid gap-3 md:grid-cols-2 xl:grid-cols-3\">\n {entries.map((row) => (\n <Card\n key={row.id}\n className=\"flex flex-col gap-3 p-4\"\n data-testid={`workflow-template-${row.id}`}\n >\n <div className=\"flex items-start gap-3\">\n <span className=\"flex size-8 shrink-0 items-center justify-center rounded-lg bg-primary/10 text-primary [&_svg]:size-4\">\n {(row.icon && renderIcon?.(row.icon)) || <Workflow aria-hidden />}\n </span>\n <div className=\"min-w-0\">\n <p className=\"font-medium text-foreground\">{row.title}</p>\n {row.description && (\n <p className=\"text-xs text-muted-foreground\">{row.description}</p>\n )}\n </div>\n </div>\n <div className=\"mt-auto flex flex-wrap items-center gap-2\">\n <Badge variant=\"secondary\">{labels.stepCount(row.stepCount)}</Badge>\n {row.note && <Badge variant=\"secondary\">{row.note}</Badge>}\n <span className=\"flex-1\" />\n {onOpen && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onOpen(row.id)}\n data-testid={`workflow-template-open-${row.id}`}\n >\n <PencilRuler className=\"size-4\" aria-hidden /> {labels.openInBuilder}\n </Button>\n )}\n {onRun && row.runnable !== false && (\n <Button\n variant=\"accent\"\n size=\"sm\"\n onClick={() => onRun(row.id)}\n data-testid={`workflow-template-run-${row.id}`}\n >\n <Play className=\"size-4\" aria-hidden /> {labels.run}\n </Button>\n )}\n </div>\n </Card>\n ))}\n </div>\n </section>\n )\n })}\n </>\n )\n}\n","import type { WorkflowCatalogueLabels } from './WorkflowCatalogueSections'\n\nexport interface WorkflowListLabels {\n colName: string\n colType: string\n colTrigger: string\n colAction: string\n colAgent: string\n colStatus: string\n colShared: string\n colLastRun: string\n colNextRun: string\n shared: string\n sharedOwnerOnly: string\n deleteOwnerOnly: string\n typeSkill: string\n typeWorkflow: string\n statusActive: string\n statusPaused: string\n statusOnDemand: string\n activeSwitch: (name: string) => string\n agent: string\n myAssistant: string\n me: string\n someone: string\n never: string\n none: string\n reminder: string\n /** What a stepped workflow does: its number of steps. */\n steps: (count: number) => string\n failed: string\n lastRunFailed: string\n openLastRun: string\n editWorkflow: string\n run: string\n runLater: string\n runNow: string\n runs: string\n delete: string\n moreActions: string\n searchLabel: string\n searchPlaceholder: string\n emptyTitle: string\n emptyMessage: string\n firstRun: string\n noMatches: string\n filterAll: string\n filterSkills: string\n filterWorkflows: string\n filterActive: string\n filterPaused: string\n /** Saved workflows that start on a date or a repeat. */\n filterScheduled: string\n /** The category view's heading over the saved workflows. */\n savedWorkflows: string\n makeActive: string\n makePaused: string\n selectAll: string\n selectWorkflow: (name: string) => string\n}\n\nexport const DEFAULT_WORKFLOW_LIST_LABELS: WorkflowListLabels = {\n colName: 'Name',\n colType: 'Type',\n colTrigger: 'When',\n colAction: 'What it does',\n colAgent: 'Agent',\n colStatus: 'Active',\n colShared: 'Shared',\n colLastRun: 'Last run',\n colNextRun: 'Next run',\n shared: 'Shared with the workspace',\n sharedOwnerOnly: 'Only the creator can change who can see this',\n deleteOwnerOnly: 'Only the creator or workspace owner can delete this',\n typeSkill: 'Skill',\n typeWorkflow: 'Workflow',\n statusActive: 'Active',\n statusPaused: 'Inactive',\n statusOnDemand: 'On demand',\n activeSwitch: (name) => `Active: “${name}”`,\n agent: 'Agent',\n myAssistant: 'My assistant',\n me: 'Me',\n someone: 'Someone',\n never: 'Never',\n none: '—',\n reminder: 'Reminder',\n steps: (count) => `Workflow · ${count} ${count === 1 ? 'step' : 'steps'}`,\n failed: 'Failed',\n lastRunFailed: 'Last run failed',\n openLastRun: 'Open the task this run created',\n editWorkflow: 'Edit',\n run: 'Run',\n runLater: 'Run later',\n runNow: 'Run now',\n runs: 'Runs',\n delete: 'Delete',\n moreActions: 'More actions',\n searchLabel: 'Search workflows',\n searchPlaceholder: 'Search workflows and skills…',\n emptyTitle: 'Nothing to run yet',\n emptyMessage: 'Skills and workflows you can run will appear here.',\n firstRun: 'Run a skill now, or choose Run later to save it as a workflow that runs on its own.',\n noMatches: 'Nothing in this view.',\n filterAll: 'All',\n filterSkills: 'Skills',\n filterWorkflows: 'Workflows',\n filterActive: 'Active',\n filterPaused: 'Inactive',\n filterScheduled: 'Scheduled',\n savedWorkflows: 'Saved workflows',\n makeActive: 'Make active',\n makePaused: 'Deactivate',\n selectAll: 'Select all',\n selectWorkflow: (name) => `Select ${name}`,\n}\n\n/** The category view's catalogue cards. */\nexport const DEFAULT_WORKFLOW_CATALOGUE_LABELS: WorkflowCatalogueLabels = {\n openInBuilder: 'Builder',\n run: 'Run',\n stepCount: (count) => `${count} ${count === 1 ? 'step' : 'steps'}`,\n}\n","import { useEffect, useMemo, useRef, useState, type ReactNode } from 'react'\nimport type { GridApi } from 'ag-grid-community'\nimport { History, MoreHorizontal, Pencil, Play, Trash2, Workflow } from 'lucide-react'\nimport {\n Button,\n badgeVariants,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n Switch,\n VisibilityToggle,\n cn,\n} from '@arbidocs/react/ui'\nimport { TabHeader, type Tab } from '../../shell/TabHeader'\nimport { FilterInput } from '../../shell/FilterInput'\nimport { TriStateFilterMenu, type TriState } from '../../settings/TriStateFilterMenu'\nimport { EmptyState } from '../../components/EmptyState'\nimport { GridView } from '../../files/GridView'\nimport { SelectionBar, SelectionBarAction } from '../../files/SelectionBar'\nimport { testIdOr } from '../../chat/test-id'\nimport { PersonPill, type TaskPerson } from './PersonPill'\nimport { TaskTriggerChip, type TaskTriggerChipLabels } from './TaskTriggerChip'\nimport { createWorkflowColumns } from './workflowColumns'\nimport {\n WorkflowCatalogueSections,\n type WorkflowCatalogueLabels,\n type WorkflowCatalogueRow,\n} from './WorkflowCatalogueSections'\nimport {\n hasTrigger,\n isScheduledWorkflow,\n isSkillRow,\n workflowStatus,\n listedRunStatus,\n workflowRunStatusLabel,\n workflowStepCount,\n workflowTriggerType,\n type WorkflowListRow,\n} from './workflowRows'\nimport {\n DEFAULT_WORKFLOW_CATALOGUE_LABELS,\n DEFAULT_WORKFLOW_LIST_LABELS,\n type WorkflowListLabels,\n} from './workflowTableLabels'\n\nexport interface WorkflowsTableProps<T extends WorkflowListRow> {\n /** Everything the viewer can run: saved workflows, and skills as virtual rows (`kind: 'skill'`). */\n workflows: T[]\n isLoading?: boolean\n /** This page contains saved automations only; skills stay in their own library. */\n automationsOnly?: boolean\n /** Human summary of when a workflow starts (\"Every weekday at 9:00\", \"On document uploaded\"). */\n describeTrigger: (workflow: T) => string\n /** Friendly display of an ISO timestamp. */\n formatDate: (iso: string) => string\n /** Pause or resume a workflow that starts by itself (an on-demand one has no switch). */\n onToggleActive: (workflow: T, active: boolean) => void\n /** Share a workflow with the workspace or make it private (the toggle appears with it). */\n onToggleShared?: (workflow: T, shouldShare: boolean) => void\n /** Open the workflow in the composer (workflow-edit mode). */\n onEdit: (workflow: T) => void\n /**\n * Run it. A saved workflow just runs (its inputs are stored); a skill needs its inputs, so the host\n * opens the run dialog with that skill selected.\n */\n onRun: (row: T) => void\n /** Run a skill later: the run dialog, on its schedule view. Offered on skill rows. */\n onRunLater?: (skill: T) => void\n onDelete: (workflow: T) => void\n /** Show the tasks this workflow created. */\n onViewRuns?: (workflow: T) => void\n /** Click on a row (not on one of its controls): a skill's detail, a workflow's editor. */\n onOpenRow?: (row: T) => void\n /** Open the task a workflow's last run created. */\n onOpenThread?: (conversationId: string) => void\n /** Each workflow's latest run: the newest task it created, by workflow id. */\n /** Each automation's latest run thread, with that thread's status (it corrects a lagging result). */\n lastRuns?: Record<string, { conversationId: string; at: string; threadStatus?: string | null }>\n /** Bulk actions on the selected workflows (skills are skipped). */\n onDeleteMany?: (workflows: T[]) => void\n onToggleActiveMany?: (workflows: T[], active: boolean) => void\n /** Agent names by id, for the Agent column (falls back to \"Agent\"). */\n agentNames?: Record<string, string>\n /** Skill names by `skill_ref`, for the action cell (falls back to the reference). */\n skillNames?: Record<string, string>\n /** Task names by id, for an \"after <task>\" trigger. */\n taskNames?: Record<string, string>\n /** How an agent appears in the Agent column; defaults to the app's user pill. */\n renderPerson?: (person: TaskPerson) => ReactNode\n /**\n * The viewer edits the workspace (owner or collaborator): they may then edit, pause, resume and run a\n * workflow shared with it. A guest leaves this off.\n */\n canEditShared?: boolean\n /** The viewer owns the workspace: with the creator, the only one who deletes a workflow. Who can see it stays the creator's alone. */\n isWorkspaceOwner?: boolean\n /** Workflow id with a request in flight: its row disables its controls. */\n busyId?: string | null\n tabs?: Tab[]\n activeTabId?: string\n onTabChange?: (id: string) => void\n content?: ReactNode\n /** Actions at the end of the tab row; a function is told when the row is narrow (a phone). */\n header?: ReactNode | ((isCompact: boolean) => ReactNode)\n gridId?: string\n labels?: Partial<WorkflowListLabels>\n triggerChipLabels?: Partial<TaskTriggerChipLabels>\n testId?: string\n /**\n * The host's catalogue: when it has entries, they are listed in sections by category (each\n * entry opens in the builder or runs), then the saved workflows. Absent or empty: the saved\n * workflows alone.\n */\n catalogue?: WorkflowCatalogueRow[]\n /** The order of the categories (and the ones shown). Absent: as the entries first name them. */\n categories?: string[]\n /** Open a catalogue entry in the builder, as a template. */\n onOpenTemplate?: (id: string) => void\n /** Run a catalogue entry. Absent: no Run on the entries. */\n onRunTemplate?: (id: string) => void\n /** Draws a catalogue entry's icon name. */\n renderIcon?: (icon: string) => ReactNode\n catalogueLabels?: Partial<WorkflowCatalogueLabels>\n}\n\ntype Filter = 'all' | 'skills' | 'workflows' | 'active' | 'paused' | 'scheduled'\n/** Each group narrows on its own: kinds, then states, then how it starts. */\nconst FILTER_GROUPS: Filter[][] = [['skills', 'workflows'], ['active', 'paused'], ['scheduled']]\nconst NO_CATALOGUE: WorkflowCatalogueRow[] = []\nconst ROW_HEIGHT = 40\n\n/**\n * Everything the viewer can run, in one list: skills (they run on demand) and saved workflows (they start\n * on a date, a repeat, an event or after a task, or on demand). Each row has its type, when it starts, what\n * it does, who runs it, its status (Active or Paused with a switch; On demand has none), when it last ran\n * (linking to the task that run created) and runs next, and a visible Run. The same grid as every other\n * list in the app.\n */\nexport function WorkflowsTable<T extends WorkflowListRow>(props: WorkflowsTableProps<T>) {\n const { workflows, isLoading, busyId, header, testId } = props\n const l: WorkflowListLabels = { ...DEFAULT_WORKFLOW_LIST_LABELS, ...props.labels }\n const [filterStates, setFilterStates] = useState<Map<Filter, TriState>>(new Map())\n const [filterOpen, setFilterOpen] = useState(false)\n const [query, setQuery] = useState('')\n const [selected, setSelected] = useState<T[]>([])\n const apiRef = useRef<GridApi<T> | null>(null)\n\n const q = query.trim().toLowerCase()\n const matches = (w: T) =>\n !q ||\n `${w.name} ${w.description ?? ''} ${w.prompt ?? ''} ${w.skill_ref ?? ''}`\n .toLowerCase()\n .includes(q)\n const inFilter = (w: T, f: Filter) =>\n f === 'all' ||\n (f === 'skills' && isSkillRow(w)) ||\n (f === 'workflows' && !isSkillRow(w)) ||\n (f === 'active' && workflowStatus(w) === 'active') ||\n (f === 'paused' && workflowStatus(w) === 'paused') ||\n (f === 'scheduled' && !isSkillRow(w) && isScheduledWorkflow(w))\n const counts = useMemo(() => {\n const out = { all: 0, skills: 0, workflows: 0, active: 0, paused: 0, scheduled: 0 }\n for (const w of workflows) {\n if (!matches(w)) continue\n for (const f of Object.keys(out) as Filter[]) if (inFilter(w, f)) out[f] += 1\n }\n return out\n // matches/inFilter read only `q` and the row.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [workflows, q])\n const shown = useMemo(\n () =>\n workflows.filter((w) => {\n if (!matches(w)) return false\n for (const group of FILTER_GROUPS) {\n const included = group.filter((f) => filterStates.get(f) === 'include')\n if (included.length && !included.some((f) => inFilter(w, f))) return false\n if (group.some((f) => filterStates.get(f) === 'exclude' && inFilter(w, f))) return false\n }\n return true\n }),\n [workflows, filterStates, q]\n )\n\n const renderPerson = props.renderPerson ?? ((p: TaskPerson) => <PersonPill person={p} />)\n const actionText = (w: T): string => {\n if (w.action)\n return w.action.type === 'email_documents' ? 'Email latest documents' : 'AI Review'\n if (isSkillRow(w))\n return w.description || (w.skill_ref && props.skillNames?.[w.skill_ref]) || w.name\n if (w.skill_ref) return props.skillNames?.[w.skill_ref] ?? w.skill_ref\n // A stepped workflow runs its plan: it is no reminder, even with no prompt of its own.\n const steps = workflowStepCount(w)\n if (steps > 0) return w.prompt?.trim() || l.steps(steps)\n return w.prompt?.trim() || w.plan?.goal?.trim() || l.reminder\n }\n\n // The cells read the latest handlers and lookups through this ref, so the column definitions are\n // built once and an interaction never makes the grid rebuild them.\n const latest = useRef({ props, l, renderPerson, actionText })\n latest.current = { props, l, renderPerson, actionText }\n\n const columnDefs = useMemo(\n () =>\n createWorkflowColumns<T>({\n labels: l,\n getTriggerText: (w) =>\n isSkillRow(w) ? l.statusOnDemand : latest.current.props.describeTrigger(w),\n renderName: (w) => {\n const { l: lb } = latest.current\n const skill = isSkillRow(w)\n const text = skill\n ? latest.current.actionText(w)\n : w.description || latest.current.actionText(w)\n // A name made from the instruction is not said again under itself.\n const stem = w.name.replace(/…$/, '').trim()\n const about = text && text.trim() !== w.name.trim() && text.trim() !== stem ? text : ''\n return (\n <div className=\"min-w-0 leading-tight\">\n <span className=\"flex min-w-0 items-center gap-1.5\">\n <span\n className={cn(\n 'truncate text-sm font-normal',\n workflowStatus(w) === 'paused' && 'text-muted-foreground'\n )}\n data-testid={`workflow-name-${w.external_id}`}\n >\n {w.name}\n </span>\n {skill && (\n <span\n className=\"shrink-0 rounded-full border border-border px-1.5 text-[11px] text-muted-foreground\"\n data-testid={`workflow-type-${w.external_id}`}\n >\n {lb.typeSkill}\n </span>\n )}\n </span>\n {about && !latest.current.props.automationsOnly && (\n <p\n className=\"truncate text-xs text-muted-foreground\"\n data-testid={`workflow-action-${w.external_id}`}\n >\n {about}\n </p>\n )}\n </div>\n )\n },\n renderTrigger: (w) => {\n const { props: p } = latest.current\n const after = w.after_conversation_ext_id\n const skill = isSkillRow(w)\n return (\n <div className=\"min-w-0 leading-tight\">\n <TaskTriggerChip\n id={w.external_id}\n testId={`workflow-trigger-${w.external_id}`}\n triggerType={workflowTriggerType(w)}\n summary={skill ? '' : p.describeTrigger(w)}\n afterTaskId={after}\n afterTaskName={after ? p.taskNames?.[after] : undefined}\n labels={p.triggerChipLabels}\n />\n </div>\n )\n },\n renderStatus: (w) => {\n const { props: p, l: lb } = latest.current\n const canEdit = w.is_owner !== false || Boolean(p.canEditShared)\n return (\n <Switch\n checked={hasTrigger(w) && !isSkillRow(w) && Boolean(w.active)}\n disabled={!hasTrigger(w) || isSkillRow(w) || !canEdit || p.busyId === w.external_id}\n onCheckedChange={(next) => p.onToggleActive(w, next)}\n className=\"disabled:data-[state=unchecked]:bg-muted dark:disabled:data-[state=unchecked]:bg-muted\"\n aria-label={lb.activeSwitch(w.name)}\n data-testid={`workflow-active-${w.external_id}`}\n />\n )\n },\n renderShared: (w) => {\n const { props: p, l: lb } = latest.current\n if (!p.onToggleShared || isSkillRow(w)) return null\n // Who can see it is the creator's alone: unsharing hides it from everyone else.\n const isCreator = w.is_owner !== false\n return (\n <VisibilityToggle\n items={{ shared: w.shared ?? false }}\n onToggle={(share) => latest.current.props.onToggleShared?.(w, share)}\n disabled={!isCreator || p.busyId === w.external_id}\n disabledTooltip={lb.sharedOwnerOnly}\n showLabel={false}\n data-testid={`workflow-shared-${w.external_id}`}\n />\n )\n },\n renderLastRun: (w) => {\n const { props: p, l: lb } = latest.current\n const at = w.last_fired_at ?? p.lastRuns?.[w.external_id]?.at\n return (\n <button\n type=\"button\"\n className=\"h-full w-full truncate px-4 text-left text-sm hover:text-primary\"\n onClick={() => p.onViewRuns?.(w)}\n title=\"View run history\"\n data-testid={`workflow-last-run-${w.external_id}`}\n >\n {at ? p.formatDate(at) : lb.never}\n </button>\n )\n },\n renderResult: (w) => {\n const status = listedRunStatus(\n w.last_run_status,\n latest.current.props.lastRuns?.[w.external_id]?.threadStatus\n )\n const label = workflowRunStatusLabel(status)\n return (\n <button\n type=\"button\"\n onClick={() => latest.current.props.onViewRuns?.(w)}\n title=\"View run history\"\n className={cn(\n badgeVariants({ variant: 'outline' }),\n 'mx-4 cursor-pointer text-xs font-medium',\n status === 'failed'\n ? 'border-red-border bg-red-bg text-red-text hover:bg-red-bg/80'\n : status === 'completed' || status === 'success'\n ? 'border-green-border bg-green-bg text-green-text hover:bg-green-bg/80'\n : status\n ? 'border-primary/20 bg-primary/10 text-primary hover:bg-primary/15'\n : 'border-border bg-muted text-muted-foreground hover:bg-muted/80'\n )}\n data-testid={`workflow-result-${w.external_id}`}\n >\n {label}\n </button>\n )\n },\n renderActions: (w) => {\n const { props: p, l: lb } = latest.current\n const id = w.external_id\n const skill = isSkillRow(w)\n const busy = p.busyId === id\n const isOwner = w.is_owner !== false\n const canEdit = isOwner || Boolean(p.canEditShared)\n const canAdmin = isOwner || Boolean(p.isWorkspaceOwner)\n return (\n <div className=\"flex items-center justify-end gap-1\">\n {(skill || canEdit) && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n className=\"h-8 gap-1.5 pointer-coarse:h-11\"\n disabled={busy}\n onClick={() => p.onRun(w)}\n data-testid={`workflow-run-btn-${id}`}\n >\n <Play className=\"size-3.5\" aria-hidden />\n {lb.run}\n </Button>\n )}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-8 pointer-coarse:size-11\"\n aria-label={lb.moreActions}\n data-testid={`workflow-menu-${id}`}\n >\n <MoreHorizontal className=\"size-4\" aria-hidden />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {skill && p.onRunLater && (\n <DropdownMenuItem\n onSelect={() => p.onRunLater?.(w)}\n data-testid={`workflow-run-later-${id}`}\n >\n <History className=\"mr-2 size-4\" aria-hidden />\n {lb.runLater}\n </DropdownMenuItem>\n )}\n {!skill && canEdit && (\n <DropdownMenuItem\n onSelect={() => p.onEdit(w)}\n data-testid={`workflow-edit-${id}`}\n >\n <Pencil className=\"mr-2 size-4\" aria-hidden />\n {lb.editWorkflow}\n </DropdownMenuItem>\n )}\n {!skill && p.onViewRuns && (\n <DropdownMenuItem\n onSelect={() => p.onViewRuns?.(w)}\n data-testid={`workflow-runs-${id}`}\n >\n <History className=\"mr-2 size-4\" aria-hidden />\n {lb.runs}\n </DropdownMenuItem>\n )}\n {!skill && canEdit && (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n disabled={busy || !canAdmin}\n onSelect={() => p.onDelete(w)}\n title={canAdmin ? undefined : lb.deleteOwnerOnly}\n className=\"text-destructive focus:text-destructive\"\n data-testid={`workflow-delete-${id}`}\n >\n <Trash2 className=\"mr-2 size-4\" aria-hidden />\n {lb.delete}\n </DropdownMenuItem>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n )\n },\n }),\n // Stable on purpose: only the header texts rebuild the columns (see `latest`).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n l.colName,\n l.colType,\n l.colTrigger,\n l.colAction,\n l.colAgent,\n l.colStatus,\n l.colShared,\n l.shared,\n l.colLastRun,\n l.colNextRun,\n ]\n )\n\n // A change in the lookups the cells draw from redraws them once.\n useEffect(() => {\n apiRef.current?.refreshCells({ force: true })\n }, [\n busyId,\n props.agentNames,\n props.skillNames,\n props.taskNames,\n props.lastRuns,\n props.renderPerson,\n props.labels,\n props.canEditShared,\n props.isWorkspaceOwner,\n ])\n\n const mine = selected.filter((w) => !isSkillRow(w))\n const adminSelected = mine.filter((w) => w.is_owner !== false || props.isWorkspaceOwner)\n const editableSelected = mine.filter(\n (w) => hasTrigger(w) && (w.is_owner !== false || props.canEditShared)\n )\n const clearSelection = () => setSelected([])\n\n // The category view: the catalogue (narrowed by the text filter; a state filter is about saved\n // workflows only, so it hides the catalogue), then the saved workflows.\n const byCategory = (props.catalogue?.length ?? 0) > 0\n const stateFiltered = [...filterStates.values()].some((state) => state === 'include')\n const catalogueLabels = { ...DEFAULT_WORKFLOW_CATALOGUE_LABELS, ...props.catalogueLabels }\n const catalogue = useMemo(\n () =>\n (props.catalogue ?? NO_CATALOGUE).filter(\n (row) => !q || `${row.title} ${row.description ?? ''}`.toLowerCase().includes(q)\n ),\n [props.catalogue, q]\n )\n const list =\n workflows.length === 0 && !isLoading ? (\n <EmptyState\n icon={Workflow}\n title={l.emptyTitle}\n description={l.emptyMessage}\n testId=\"workflow-list-empty\"\n />\n ) : (\n <div className=\"min-h-0 flex-1\">\n <GridView<T>\n testId=\"workflow-grid\"\n gridId={props.gridId ?? 'workflows-grid-v2'}\n items={shown}\n columnDefs={columnDefs}\n getItemId={(w) => w.external_id}\n getRowTestId={(w) => `workflow-row-${w.external_id}`}\n isLoading={isLoading}\n showEmpty={shown.length === 0}\n emptyState={{ title: l.noMatches }}\n rowHeight={ROW_HEIGHT}\n height=\"100%\"\n onGridReady={({ api }) => {\n apiRef.current = api\n }}\n onRowClick={(row) => props.onOpenRow?.(row)}\n selection={{ mode: 'multiple', selected, onSelectionChange: setSelected }}\n gridOptions={GRID_OPTIONS as never}\n />\n </div>\n )\n\n // The search box with its state filter: in the tab row, or (narrow) across a row of its own.\n const filterBox = (className?: string) => (\n <FilterInput\n className={className}\n value={query}\n onChange={setQuery}\n fields={['text']}\n onFieldsChange={() => {}}\n hideFieldPicker\n ariaLabel={l.searchLabel}\n testIds={{ input: 'workflow-search' }}\n filter={\n <TriStateFilterMenu\n testId=\"automations-filter-button\"\n open={filterOpen}\n onOpenChange={setFilterOpen}\n filterStates={filterStates}\n onFiltersChange={setFilterStates}\n triggerClassName=\"flex h-5 items-center gap-0.5 rounded px-1 text-muted-foreground hover:text-foreground pointer-coarse:h-11! pointer-coarse:min-w-11 pointer-coarse:justify-center\"\n renderChevron\n disableHoverOpen\n options={[\n ...(!props.automationsOnly\n ? [\n { id: 'skills' as const, label: l.filterSkills, count: counts.skills },\n {\n id: 'workflows' as const,\n label: l.filterWorkflows,\n count: counts.workflows,\n },\n ]\n : []),\n { id: 'active', label: l.filterActive, count: counts.active },\n { id: 'paused', label: l.filterPaused, count: counts.paused },\n { id: 'scheduled', label: l.filterScheduled, count: counts.scheduled },\n ]}\n />\n }\n />\n )\n\n return (\n <div\n className=\"flex min-h-0 flex-1 flex-col\"\n data-testid={testIdOr(testId, { testId: 'workflow-list' })}\n >\n <TabHeader\n testId=\"automations-tab-header\"\n tabs={[\n {\n id: 'automations',\n label: '',\n count: shown.length,\n countIcon: <Workflow className=\"size-3.5\" />,\n countPlacement: 'leading',\n presentation: 'count',\n hasActiveFilters: !!q || [...filterStates.values()].some(Boolean),\n },\n ...(props.tabs ?? []),\n ]}\n activeTabId={props.activeTabId ?? 'automations'}\n onTabChange={props.onTabChange ?? (() => {})}\n // A narrow row (a phone) gives the filter a row of its own under the tabs, so the host's\n // tabs and the actions keep their room in the tab row.\n firstTabContent={(isCompact) => (isCompact ? null : filterBox())}\n belowContent={(isCompact) => (isCompact ? filterBox('w-full') : null)}\n rightContent={header}\n />\n {props.content ? (\n props.content\n ) : byCategory ? (\n <div\n className=\"min-h-0 flex-1 space-y-8 overflow-auto p-4\"\n data-testid=\"workflow-categories\"\n >\n {!stateFiltered && (\n <WorkflowCatalogueSections\n rows={catalogue}\n categories={props.categories}\n labels={catalogueLabels}\n renderIcon={props.renderIcon}\n onOpen={props.onOpenTemplate}\n onRun={props.onRunTemplate}\n />\n )}\n <section className=\"space-y-3\" data-testid=\"workflow-category-saved\">\n <h2 className=\"flex items-center gap-2 text-sm font-semibold text-foreground\">\n <Workflow className=\"size-4 text-primary\" aria-hidden /> {l.savedWorkflows}\n </h2>\n <div className=\"flex h-[min(32rem,70dvh)] min-h-64 flex-col\">{list}</div>\n </section>\n </div>\n ) : (\n list\n )}\n {!props.content && (\n <SelectionBar count={selected.length} onClear={clearSelection}>\n {(isCompact) => (\n <>\n {props.onToggleActiveMany && (\n <>\n <SelectionBarAction\n icon={Play}\n label={l.makeActive}\n onClick={() => {\n props.onToggleActiveMany?.(editableSelected, true)\n clearSelection()\n }}\n disabled={editableSelected.length === 0}\n isCompact={isCompact}\n testId=\"workflow-bulk-activate\"\n />\n <SelectionBarAction\n icon={Workflow}\n label={l.makePaused}\n onClick={() => {\n props.onToggleActiveMany?.(editableSelected, false)\n clearSelection()\n }}\n disabled={editableSelected.length === 0}\n isCompact={isCompact}\n testId=\"workflow-bulk-pause\"\n />\n </>\n )}\n {props.onDeleteMany && (\n <SelectionBarAction\n icon={Trash2}\n label={l.delete}\n onClick={() => {\n props.onDeleteMany?.(adminSelected)\n clearSelection()\n }}\n disabled={adminSelected.length === 0}\n isCompact={isCompact}\n className=\"border-red-border text-red-text hover:bg-red-bg hover:text-red-text\"\n testId=\"workflow-bulk-delete\"\n />\n )}\n </>\n )}\n </SelectionBar>\n )}\n </div>\n )\n}\n\nconst GRID_OPTIONS = { suppressClickEdit: true }\n"]}
@@ -2,7 +2,7 @@
2
2
  'use strict';
3
3
 
4
4
  var chunkFWBU4MKG_cjs = require('./chunk-FWBU4MKG.cjs');
5
- var chunkCS4KQSLY_cjs = require('./chunk-CS4KQSLY.cjs');
5
+ var chunk2ROYKDEA_cjs = require('./chunk-2ROYKDEA.cjs');
6
6
  var react = require('@arbidocs/react');
7
7
  var jsxRuntime = require('react/jsx-runtime');
8
8
 
@@ -10,7 +10,7 @@ function ConnectedNativeDocxComparison({
10
10
  fontBaseUrl,
11
11
  ...props
12
12
  }) {
13
- const adapter = chunkCS4KQSLY_cjs.useConnectedNativeDocxAdapter(fontBaseUrl);
13
+ const adapter = chunk2ROYKDEA_cjs.useConnectedNativeDocxAdapter(fontBaseUrl);
14
14
  const { data: documents, isLoading } = react.useDocuments();
15
15
  const morePages = react.useDocumentsLoading();
16
16
  if (isLoading || morePages)
@@ -27,5 +27,5 @@ function ConnectedNativeDocxComparison({
27
27
  }
28
28
 
29
29
  exports.ConnectedNativeDocxComparison = ConnectedNativeDocxComparison;
30
- //# sourceMappingURL=chunk-X426D2LX.cjs.map
31
- //# sourceMappingURL=chunk-X426D2LX.cjs.map
30
+ //# sourceMappingURL=chunk-Q3OLTA47.cjs.map
31
+ //# sourceMappingURL=chunk-Q3OLTA47.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/docx/ConnectedNativeDocxComparison.tsx"],"names":["useConnectedNativeDocxAdapter","useDocuments","useDocumentsLoading","jsx","NativeDocxComparison"],"mappings":";;;;;;;AAYO,SAAS,6BAAA,CAA8B;AAAA,EAC5C,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,MAAM,OAAA,GAAUA,gDAA8B,WAAW,CAAA;AACzD,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,SAAA,KAAcC,kBAAA,EAAa;AAEpD,EAAA,MAAM,YAAYC,yBAAA,EAAoB;AAEtC,EAAA,IAAI,SAAA,IAAa,SAAA;AACf,IAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EAAoB,IAAA,EAAK,UAAS,QAAA,EAAA,gCAAA,EAEjD,CAAA;AAEJ,EAAA,uBACEC,cAAA;AAAA,IAACC,sCAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,OAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAY,OAAA,CAAQ;AAAA;AAAA,GACtB;AAEJ","file":"chunk-X426D2LX.cjs","sourcesContent":["import { useDocuments, useDocumentsLoading } from '@arbidocs/react'\nimport {\n NativeDocxComparison,\n type NativeDocxComparisonProps,\n} from '../../docx/NativeDocxComparison'\nimport { useConnectedNativeDocxAdapter } from './ConnectedNativeDocxEditor'\n\n/**\n * The Word redline of two documents or versions, on the signed-in session. The unedited redline\n * saved earlier from the same versions is opened again (found in the workspace's documents, once\n * all their pages are read), so opening a comparison saves at most one.\n */\nexport function ConnectedNativeDocxComparison({\n fontBaseUrl,\n ...props\n}: Omit<NativeDocxComparisonProps, 'adapter' | 'onCompared' | 'documents'> & {\n fontBaseUrl?: string\n}) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n const { data: documents, isLoading } = useDocuments()\n // Every page: the first holds only the oldest documents, and a redline is often newer.\n const morePages = useDocumentsLoading()\n // Until the documents are read, a saved redline can't be found: wait rather than save another.\n if (isLoading || morePages)\n return (\n <div className=\"native-docx-error\" role=\"status\">\n Comparing Word documents…\n </div>\n )\n return (\n <NativeDocxComparison\n {...props}\n adapter={adapter}\n documents={documents}\n onCompared={adapter.onVersionSaved}\n />\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/docx/ConnectedNativeDocxComparison.tsx"],"names":["useConnectedNativeDocxAdapter","useDocuments","useDocumentsLoading","jsx","NativeDocxComparison"],"mappings":";;;;;;;AAYO,SAAS,6BAAA,CAA8B;AAAA,EAC5C,WAAA;AAAA,EACA,GAAG;AACL,CAAA,EAEG;AACD,EAAA,MAAM,OAAA,GAAUA,gDAA8B,WAAW,CAAA;AACzD,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,SAAA,KAAcC,kBAAA,EAAa;AAEpD,EAAA,MAAM,YAAYC,yBAAA,EAAoB;AAEtC,EAAA,IAAI,SAAA,IAAa,SAAA;AACf,IAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EAAoB,IAAA,EAAK,UAAS,QAAA,EAAA,gCAAA,EAEjD,CAAA;AAEJ,EAAA,uBACEC,cAAA;AAAA,IAACC,sCAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,OAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAY,OAAA,CAAQ;AAAA;AAAA,GACtB;AAEJ","file":"chunk-Q3OLTA47.cjs","sourcesContent":["import { useDocuments, useDocumentsLoading } from '@arbidocs/react'\nimport {\n NativeDocxComparison,\n type NativeDocxComparisonProps,\n} from '../../docx/NativeDocxComparison'\nimport { useConnectedNativeDocxAdapter } from './ConnectedNativeDocxEditor'\n\n/**\n * The Word redline of two documents or versions, on the signed-in session. The unedited redline\n * saved earlier from the same versions is opened again (found in the workspace's documents, once\n * all their pages are read), so opening a comparison saves at most one.\n */\nexport function ConnectedNativeDocxComparison({\n fontBaseUrl,\n ...props\n}: Omit<NativeDocxComparisonProps, 'adapter' | 'onCompared' | 'documents'> & {\n fontBaseUrl?: string\n}) {\n const adapter = useConnectedNativeDocxAdapter(fontBaseUrl)\n const { data: documents, isLoading } = useDocuments()\n // Every page: the first holds only the oldest documents, and a redline is often newer.\n const morePages = useDocumentsLoading()\n // Until the documents are read, a saved redline can't be found: wait rather than save another.\n if (isLoading || morePages)\n return (\n <div className=\"native-docx-error\" role=\"status\">\n Comparing Word documents…\n </div>\n )\n return (\n <NativeDocxComparison\n {...props}\n adapter={adapter}\n documents={documents}\n onCompared={adapter.onVersionSaved}\n />\n )\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { DocumentUser } from './chunk-KYR3TXHS.js';
3
- import { UserAvatar, useDocumentFolders, RelatedDocumentsCell } from './chunk-TVJAVK2G.js';
4
- import { FieldValue, FieldFolderSelect, FieldFolderValue, FieldNativeSelect, FieldWithAttribution, FolderCommandList, FieldLabelsSelect, FieldAttribution } from './chunk-OOYT5A7W.js';
2
+ import { DocumentUser } from './chunk-OLCQPGB4.js';
3
+ import { UserAvatar, useDocumentFolders, RelatedDocumentsCell } from './chunk-DW5DFV4O.js';
4
+ import { FieldValue, FieldFolderSelect, FieldFolderValue, FieldNativeSelect, FieldWithAttribution, FolderCommandList, FieldLabelsSelect, FieldAttribution } from './chunk-X2QJWFFO.js';
5
5
  import { EntityTooltip, EntityTooltipHeader } from './chunk-3UIJLUXN.js';
6
6
  import { useCallback, useMemo } from 'react';
7
7
  import { useWorkspaceUsers, useTags, useOpenViewerDocumentId } from '@arbidocs/react';
@@ -336,5 +336,5 @@ function documentFieldContent(options) {
336
336
  }
337
337
 
338
338
  export { ConnectedTagEntity, documentFieldContent, useMemberLookup };
339
- //# sourceMappingURL=chunk-UBI4HXT6.js.map
340
- //# sourceMappingURL=chunk-UBI4HXT6.js.map
339
+ //# sourceMappingURL=chunk-Q45LV2DL.js.map
340
+ //# sourceMappingURL=chunk-Q45LV2DL.js.map