@hotmeshio/long-tail 0.3.0 → 0.3.2

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 (314) hide show
  1. package/build/api/topics.d.ts +22 -0
  2. package/build/api/topics.js +104 -0
  3. package/build/index.d.ts +3 -1
  4. package/build/index.js +7 -2
  5. package/build/lib/db/schemas/001_schema.sql +3 -3
  6. package/build/lib/db/schemas/006_agent_sub_unique.sql +1 -0
  7. package/build/lib/db/schemas/007_topic_catalog.sql +27 -0
  8. package/build/routes/index.js +2 -0
  9. package/build/routes/topics.d.ts +2 -0
  10. package/build/routes/topics.js +90 -0
  11. package/build/services/topics/index.d.ts +77 -0
  12. package/build/services/topics/index.js +116 -0
  13. package/build/services/topics/sql.d.ts +10 -0
  14. package/build/services/topics/sql.js +80 -0
  15. package/build/services/topics/system-topics.d.ts +11 -0
  16. package/build/services/topics/system-topics.js +270 -0
  17. package/build/start/workers.js +5 -0
  18. package/build/system/mcp-servers/events.js +73 -1
  19. package/build/system/seed/tool-manifests-events.d.ts +75 -0
  20. package/build/system/seed/tool-manifests-events.js +27 -0
  21. package/build/tsconfig.tsbuildinfo +1 -1
  22. package/build/types/index.d.ts +2 -2
  23. package/build/types/startup.d.ts +27 -0
  24. package/dashboard/dist/assets/AdminDashboard-CbeSejVX.js +2 -0
  25. package/dashboard/dist/assets/{AdminDashboard-Bb6zouF5.js.map → AdminDashboard-CbeSejVX.js.map} +1 -1
  26. package/dashboard/dist/assets/AgentConfigPage-CFJNOrlg.js +13 -0
  27. package/dashboard/dist/assets/AgentConfigPage-CFJNOrlg.js.map +1 -0
  28. package/dashboard/dist/assets/AgentDetailPage-Dbx2t-Uk.js +4 -0
  29. package/dashboard/dist/assets/{AgentDetailPage-WwA573u9.js.map → AgentDetailPage-Dbx2t-Uk.js.map} +1 -1
  30. package/dashboard/dist/assets/AgentsPage-Bz61Nl-x.js +2 -0
  31. package/dashboard/dist/assets/{AgentsPage-BZkZ_hXN.js.map → AgentsPage-Bz61Nl-x.js.map} +1 -1
  32. package/dashboard/dist/assets/AvailableEscalationsPage-DdrzePy4.js +2 -0
  33. package/dashboard/dist/assets/{AvailableEscalationsPage-C-Df3ZsZ.js.map → AvailableEscalationsPage-DdrzePy4.js.map} +1 -1
  34. package/dashboard/dist/assets/BotPicker-kKBifD1w.js +2 -0
  35. package/dashboard/dist/assets/{BotPicker-CwfVVWxh.js.map → BotPicker-kKBifD1w.js.map} +1 -1
  36. package/dashboard/dist/assets/CapabilitiesPage-Ch5qY0I7.js +2 -0
  37. package/dashboard/dist/assets/{CapabilitiesPage-DJEQ_5dV.js.map → CapabilitiesPage-Ch5qY0I7.js.map} +1 -1
  38. package/dashboard/dist/assets/CollapsibleSection-kYTBL7dT.js +2 -0
  39. package/dashboard/dist/assets/{CollapsibleSection-DaFQGU6S.js.map → CollapsibleSection-kYTBL7dT.js.map} +1 -1
  40. package/dashboard/dist/assets/ConfirmDeleteModal-CcaAapMl.js +2 -0
  41. package/dashboard/dist/assets/{ConfirmDeleteModal-dOxidrSR.js.map → ConfirmDeleteModal-CcaAapMl.js.map} +1 -1
  42. package/dashboard/dist/assets/CopyableId-B4CL12pv.js +2 -0
  43. package/dashboard/dist/assets/{CopyableId-DmLF-RqZ.js.map → CopyableId-B4CL12pv.js.map} +1 -1
  44. package/dashboard/dist/assets/CredentialsPage-D1VAlwid.js +2 -0
  45. package/dashboard/dist/assets/{CredentialsPage-D-tkqdhu.js.map → CredentialsPage-D1VAlwid.js.map} +1 -1
  46. package/dashboard/dist/assets/CronLabel-DRmO5rH0.js +2 -0
  47. package/dashboard/dist/assets/{CronLabel-C6iCjsXd.js.map → CronLabel-DRmO5rH0.js.map} +1 -1
  48. package/dashboard/dist/assets/CustomDurationPicker-C06QDDir.js +2 -0
  49. package/dashboard/dist/assets/{CustomDurationPicker--wCtBkmT.js.map → CustomDurationPicker-C06QDDir.js.map} +1 -1
  50. package/dashboard/dist/assets/DataTable-J5R6mepB.js +2 -0
  51. package/dashboard/dist/assets/{DataTable-D9yuBv0w.js.map → DataTable-J5R6mepB.js.map} +1 -1
  52. package/dashboard/dist/assets/DropZone-DwNj3GiG.js +2 -0
  53. package/dashboard/dist/assets/{DropZone-2mGyDo1P.js.map → DropZone-DwNj3GiG.js.map} +1 -1
  54. package/dashboard/dist/assets/ElapsedCell-ChyMzl9n.js +2 -0
  55. package/dashboard/dist/assets/{ElapsedCell-DKoH0bqR.js.map → ElapsedCell-ChyMzl9n.js.map} +1 -1
  56. package/dashboard/dist/assets/EmptyState-BXGvOADa.js +2 -0
  57. package/dashboard/dist/assets/{EmptyState-BcsfPq9T.js.map → EmptyState-BXGvOADa.js.map} +1 -1
  58. package/dashboard/dist/assets/EscalationsOverview-DM6zmE4g.js +2 -0
  59. package/dashboard/dist/assets/{EscalationsOverview-C6A4Q9Ne.js.map → EscalationsOverview-DM6zmE4g.js.map} +1 -1
  60. package/dashboard/dist/assets/EventTable-CvJ98E8s.js +2 -0
  61. package/dashboard/dist/assets/{EventTable-DWxH0vMp.js.map → EventTable-CvJ98E8s.js.map} +1 -1
  62. package/dashboard/dist/assets/EventTopicPill-CB_rIGlL.js +2 -0
  63. package/dashboard/dist/assets/{EventTopicPill-BUxxvpNg.js.map → EventTopicPill-CB_rIGlL.js.map} +1 -1
  64. package/dashboard/dist/assets/FilterBar-Bdssa-Xn.js +2 -0
  65. package/dashboard/dist/assets/{FilterBar-Ck4K4rzu.js.map → FilterBar-Bdssa-Xn.js.map} +1 -1
  66. package/dashboard/dist/assets/HomePage-BuZkdXZt.js +2 -0
  67. package/dashboard/dist/assets/{HomePage-Tlu1j8fK.js.map → HomePage-BuZkdXZt.js.map} +1 -1
  68. package/dashboard/dist/assets/ListToolbar-jy8NL6ll.js +2 -0
  69. package/dashboard/dist/assets/{ListToolbar-DuON-br0.js.map → ListToolbar-jy8NL6ll.js.map} +1 -1
  70. package/dashboard/dist/assets/McpOverview-xkaKuHbX.js +2 -0
  71. package/dashboard/dist/assets/{McpOverview-byott48x.js.map → McpOverview-xkaKuHbX.js.map} +1 -1
  72. package/dashboard/dist/assets/McpQueryDetailPage-D5ICn6cR.js +5 -0
  73. package/dashboard/dist/assets/{McpQueryDetailPage-ieZPpcPn.js.map → McpQueryDetailPage-D5ICn6cR.js.map} +1 -1
  74. package/dashboard/dist/assets/McpQueryPage-C46fzfm5.js +2 -0
  75. package/dashboard/dist/assets/{McpQueryPage-BOO0ACYO.js.map → McpQueryPage-C46fzfm5.js.map} +1 -1
  76. package/dashboard/dist/assets/McpRunDetailPage-Znsl4Yc-.js +2 -0
  77. package/dashboard/dist/assets/{McpRunDetailPage-Di8s7-u9.js.map → McpRunDetailPage-Znsl4Yc-.js.map} +1 -1
  78. package/dashboard/dist/assets/McpRunsPage-DT-armx5.js +2 -0
  79. package/dashboard/dist/assets/{McpRunsPage-DdUVqUFi.js.map → McpRunsPage-DT-armx5.js.map} +1 -1
  80. package/dashboard/dist/assets/Modal-C6k6_5KB.js +2 -0
  81. package/dashboard/dist/assets/{Modal-DEODGeqx.js.map → Modal-C6k6_5KB.js.map} +1 -1
  82. package/dashboard/dist/assets/OperatorDashboard-e5N3_dVl.js +2 -0
  83. package/dashboard/dist/assets/{OperatorDashboard-oGmDbNYv.js.map → OperatorDashboard-e5N3_dVl.js.map} +1 -1
  84. package/dashboard/dist/assets/PageHeader-COcgWWf-.js +2 -0
  85. package/dashboard/dist/assets/{PageHeader-DLjHNYHX.js.map → PageHeader-COcgWWf-.js.map} +1 -1
  86. package/dashboard/dist/assets/PageHeaderWithStats-C0PCY3aJ.js +2 -0
  87. package/dashboard/dist/assets/{PageHeaderWithStats-Oljg3n4j.js.map → PageHeaderWithStats-C0PCY3aJ.js.map} +1 -1
  88. package/dashboard/dist/assets/PriorityBadge-BQCsYMpM.js +2 -0
  89. package/dashboard/dist/assets/{PriorityBadge-DfQY9St9.js.map → PriorityBadge-BQCsYMpM.js.map} +1 -1
  90. package/dashboard/dist/assets/ProcessDetailPage-C03LOgI0.js +2 -0
  91. package/dashboard/dist/assets/{ProcessDetailPage-Da-miMYZ.js.map → ProcessDetailPage-C03LOgI0.js.map} +1 -1
  92. package/dashboard/dist/assets/ProcessesListPage-iyPsmlhm.js +2 -0
  93. package/dashboard/dist/assets/{ProcessesListPage-CW-2yFw_.js.map → ProcessesListPage-iyPsmlhm.js.map} +1 -1
  94. package/dashboard/dist/assets/RolePill-CHwys1f9.js +2 -0
  95. package/dashboard/dist/assets/{RolePill-Bp10-WfX.js.map → RolePill-CHwys1f9.js.map} +1 -1
  96. package/dashboard/dist/assets/RolesPage-Bmc3XaUk.js +2 -0
  97. package/dashboard/dist/assets/{RolesPage-Bg_hEu9H.js.map → RolesPage-Bmc3XaUk.js.map} +1 -1
  98. package/dashboard/dist/assets/RowActions-Bs4PF-Gd.js +2 -0
  99. package/dashboard/dist/assets/{RowActions-Dg-Fsm5O.js.map → RowActions-Bs4PF-Gd.js.map} +1 -1
  100. package/dashboard/dist/assets/RunAsSelector-DXzAr2WW.js +2 -0
  101. package/dashboard/dist/assets/{RunAsSelector-hYP59xHH.js.map → RunAsSelector-DXzAr2WW.js.map} +1 -1
  102. package/dashboard/dist/assets/ServerName-BIdLC1Ay.js +2 -0
  103. package/dashboard/dist/assets/{ServerName-C9lUCFYb.js.map → ServerName-BIdLC1Ay.js.map} +1 -1
  104. package/dashboard/dist/assets/StatCard-OKzRSSx4.js +2 -0
  105. package/dashboard/dist/assets/{StatCard-DlgF0CJC.js.map → StatCard-OKzRSSx4.js.map} +1 -1
  106. package/dashboard/dist/assets/StatusBadge-CQlF46RR.js +2 -0
  107. package/dashboard/dist/assets/{StatusBadge-XQlNFwmH.js.map → StatusBadge-CQlF46RR.js.map} +1 -1
  108. package/dashboard/dist/assets/StepIndicator-CP7eycjI.js +2 -0
  109. package/dashboard/dist/assets/{StepIndicator-CuUIGxKk.js.map → StepIndicator-CP7eycjI.js.map} +1 -1
  110. package/dashboard/dist/assets/StickyPagination-CGk8VAKt.js +2 -0
  111. package/dashboard/dist/assets/{StickyPagination-F9FZsRy9.js.map → StickyPagination-CGk8VAKt.js.map} +1 -1
  112. package/dashboard/dist/assets/SwimlaneTimeline-MEUPc3yJ.js +2 -0
  113. package/dashboard/dist/assets/{SwimlaneTimeline-2JHwAM2f.js.map → SwimlaneTimeline-MEUPc3yJ.js.map} +1 -1
  114. package/dashboard/dist/assets/TagInput-BGxXKiWD.js +2 -0
  115. package/dashboard/dist/assets/{TagInput-Dkljw_WI.js.map → TagInput-BGxXKiWD.js.map} +1 -1
  116. package/dashboard/dist/assets/TaskDetailPage-pN5BXzYA.js +2 -0
  117. package/dashboard/dist/assets/TaskDetailPage-pN5BXzYA.js.map +1 -0
  118. package/dashboard/dist/assets/TaskQueuePill-bw8ieKsf.js +2 -0
  119. package/dashboard/dist/assets/{TaskQueuePill-DPwm25Cc.js.map → TaskQueuePill-bw8ieKsf.js.map} +1 -1
  120. package/dashboard/dist/assets/TasksListPage-D1INzcrA.js +2 -0
  121. package/dashboard/dist/assets/{TasksListPage-kCH4r-70.js.map → TasksListPage-D1INzcrA.js.map} +1 -1
  122. package/dashboard/dist/assets/TimeAgo-CywLVIBA.js +2 -0
  123. package/dashboard/dist/assets/{TimeAgo-RPbch7Te.js.map → TimeAgo-CywLVIBA.js.map} +1 -1
  124. package/dashboard/dist/assets/TimestampCell-B4Pc6f3A.js +2 -0
  125. package/dashboard/dist/assets/{TimestampCell-Dgpl-lKv.js.map → TimestampCell-B4Pc6f3A.js.map} +1 -1
  126. package/dashboard/dist/assets/ToolPill-DdLN3JOT.js +2 -0
  127. package/dashboard/dist/assets/{ToolPill-D_DIWFJ5.js.map → ToolPill-DdLN3JOT.js.map} +1 -1
  128. package/dashboard/dist/assets/ToolTestPanel-DusbUka5.js +2 -0
  129. package/dashboard/dist/assets/{ToolTestPanel-D1TWdZQi.js.map → ToolTestPanel-DusbUka5.js.map} +1 -1
  130. package/dashboard/dist/assets/TopicDetailPage-DadwM52Y.js +9 -0
  131. package/dashboard/dist/assets/TopicDetailPage-DadwM52Y.js.map +1 -0
  132. package/dashboard/dist/assets/TopicsPage-DbtrnQON.js +2 -0
  133. package/dashboard/dist/assets/TopicsPage-DbtrnQON.js.map +1 -0
  134. package/dashboard/dist/assets/UserName-CLbusknU.js +2 -0
  135. package/dashboard/dist/assets/{UserName-BXZGXJsU.js.map → UserName-CLbusknU.js.map} +1 -1
  136. package/dashboard/dist/assets/WorkflowExecutionPage-C61R-3Gg.js +2 -0
  137. package/dashboard/dist/assets/{WorkflowExecutionPage-DWlNYb2M.js.map → WorkflowExecutionPage-C61R-3Gg.js.map} +1 -1
  138. package/dashboard/dist/assets/WorkflowPill-7vt2F6wR.js +2 -0
  139. package/dashboard/dist/assets/{WorkflowPill-BbgVTGgI.js.map → WorkflowPill-7vt2F6wR.js.map} +1 -1
  140. package/dashboard/dist/assets/WorkflowsDashboard-BWiUNvyl.js +2 -0
  141. package/dashboard/dist/assets/{WorkflowsDashboard-Dgq8RcD6.js.map → WorkflowsDashboard-BWiUNvyl.js.map} +1 -1
  142. package/dashboard/dist/assets/WorkflowsOverview-DA2ZOs7D.js +2 -0
  143. package/dashboard/dist/assets/{WorkflowsOverview-DnInrUPO.js.map → WorkflowsOverview-DA2ZOs7D.js.map} +1 -1
  144. package/dashboard/dist/assets/YamlWorkflowsPage-CLebf2eL.js +2 -0
  145. package/dashboard/dist/assets/{YamlWorkflowsPage-z1Z9J-mc.js.map → YamlWorkflowsPage-CLebf2eL.js.map} +1 -1
  146. package/dashboard/dist/assets/{agents-C9RLPt1z.js → agents-Dga6NU7U.js} +2 -2
  147. package/dashboard/dist/assets/{agents-C9RLPt1z.js.map → agents-Dga6NU7U.js.map} +1 -1
  148. package/dashboard/dist/assets/{bots-zyUDnQhH.js → bots-CtU4i4OQ.js} +2 -2
  149. package/dashboard/dist/assets/{bots-zyUDnQhH.js.map → bots-CtU4i4OQ.js.map} +1 -1
  150. package/dashboard/dist/assets/{controlplane-v-5KV6pl.js → controlplane-BVoALhbL.js} +2 -2
  151. package/dashboard/dist/assets/{controlplane-v-5KV6pl.js.map → controlplane-BVoALhbL.js.map} +1 -1
  152. package/dashboard/dist/assets/escalation-_N5GfuIi.js +2 -0
  153. package/dashboard/dist/assets/{escalation-BseAikei.js.map → escalation-_N5GfuIi.js.map} +1 -1
  154. package/dashboard/dist/assets/escalation-columns-CoTmTpHp.js +2 -0
  155. package/dashboard/dist/assets/{escalation-columns-Cs2CkkEs.js.map → escalation-columns-CoTmTpHp.js.map} +1 -1
  156. package/dashboard/dist/assets/helpers-Dz2U3Ctb.js +2 -0
  157. package/dashboard/dist/assets/{helpers-DVICI_VA.js.map → helpers-Dz2U3Ctb.js.map} +1 -1
  158. package/dashboard/dist/assets/index-6Kd78p_v.js +2 -0
  159. package/dashboard/dist/assets/{index-BzBZo8Sn.js.map → index-6Kd78p_v.js.map} +1 -1
  160. package/dashboard/dist/assets/index-B9ealjkt.js +6 -0
  161. package/dashboard/dist/assets/{index-CPpNn3z2.js.map → index-B9ealjkt.js.map} +1 -1
  162. package/dashboard/dist/assets/index-BIUHY2Jz.css +1 -0
  163. package/dashboard/dist/assets/index-BWHDW_CF.js +2 -0
  164. package/dashboard/dist/assets/{index-XCEX7Zof.js.map → index-BWHDW_CF.js.map} +1 -1
  165. package/dashboard/dist/assets/index-BYwPVJv0.js +15 -0
  166. package/dashboard/dist/assets/{index-M17tP_HX.js.map → index-BYwPVJv0.js.map} +1 -1
  167. package/dashboard/dist/assets/index-CCOSf1PY.js +281 -0
  168. package/dashboard/dist/assets/index-CCOSf1PY.js.map +1 -0
  169. package/dashboard/dist/assets/index-CS61sh5q.js +2 -0
  170. package/dashboard/dist/assets/{index-BP76o_S8.js.map → index-CS61sh5q.js.map} +1 -1
  171. package/dashboard/dist/assets/index-CtbG3UN-.js +5 -0
  172. package/dashboard/dist/assets/{index-DVFm5329.js.map → index-CtbG3UN-.js.map} +1 -1
  173. package/dashboard/dist/assets/index-DWUunWxh.js +2 -0
  174. package/dashboard/dist/assets/{index-DyqdoZPY.js.map → index-DWUunWxh.js.map} +1 -1
  175. package/dashboard/dist/assets/index-D_H_Prht.js +2 -0
  176. package/dashboard/dist/assets/{index-C0TSBQw8.js.map → index-D_H_Prht.js.map} +1 -1
  177. package/dashboard/dist/assets/index-Dpjguclc.js +2 -0
  178. package/dashboard/dist/assets/{index-DDFK1A8T.js.map → index-Dpjguclc.js.map} +1 -1
  179. package/dashboard/dist/assets/index-QicYdUsl.js +2 -0
  180. package/dashboard/dist/assets/{index-tK8lfgAj.js.map → index-QicYdUsl.js.map} +1 -1
  181. package/dashboard/dist/assets/index-dM-OgCY3.js +2 -0
  182. package/dashboard/dist/assets/{index-D2tDlpuv.js.map → index-dM-OgCY3.js.map} +1 -1
  183. package/dashboard/dist/assets/{knowledge-BhK8xuod.js → knowledge-DJlebU82.js} +2 -2
  184. package/dashboard/dist/assets/{knowledge-BhK8xuod.js.map → knowledge-DJlebU82.js.map} +1 -1
  185. package/dashboard/dist/assets/{mcp-CWFliwjc.js → mcp-CsLJ5SRm.js} +2 -2
  186. package/dashboard/dist/assets/{mcp-CWFliwjc.js.map → mcp-CsLJ5SRm.js.map} +1 -1
  187. package/dashboard/dist/assets/{mcp-query-Dm7_m5Fi.js → mcp-query-WNK1ItRV.js} +2 -2
  188. package/dashboard/dist/assets/{mcp-query-Dm7_m5Fi.js.map → mcp-query-WNK1ItRV.js.map} +1 -1
  189. package/dashboard/dist/assets/{mcp-runs-aBDudwEi.js → mcp-runs-DtTTsuPH.js} +2 -2
  190. package/dashboard/dist/assets/{mcp-runs-aBDudwEi.js.map → mcp-runs-DtTTsuPH.js.map} +1 -1
  191. package/dashboard/dist/assets/namespaces-iRejH3_A.js +2 -0
  192. package/dashboard/dist/assets/{namespaces-C45c4uoO.js.map → namespaces-iRejH3_A.js.map} +1 -1
  193. package/dashboard/dist/assets/{roles-BMAzzeHR.js → roles-3Jm5KtKc.js} +2 -2
  194. package/dashboard/dist/assets/{roles-BMAzzeHR.js.map → roles-3Jm5KtKc.js.map} +1 -1
  195. package/dashboard/dist/assets/settings-DmN2I-c6.js +2 -0
  196. package/dashboard/dist/assets/{settings-D0v7RI3o.js.map → settings-DmN2I-c6.js.map} +1 -1
  197. package/dashboard/dist/assets/{tasks-DwEUQ6my.js → tasks-Cc-QoITQ.js} +2 -2
  198. package/dashboard/dist/assets/{tasks-DwEUQ6my.js.map → tasks-Cc-QoITQ.js.map} +1 -1
  199. package/dashboard/dist/assets/topics-p8anbgi0.js +2 -0
  200. package/dashboard/dist/assets/topics-p8anbgi0.js.map +1 -0
  201. package/dashboard/dist/assets/{useEventHooks-BccPxFR6.js → useEventHooks-VaJ52jMm.js} +2 -2
  202. package/dashboard/dist/assets/{useEventHooks-BccPxFR6.js.map → useEventHooks-VaJ52jMm.js.map} +1 -1
  203. package/dashboard/dist/assets/{useExpandedRows-CkcEntB-.js → useExpandedRows-Cg9iq6Vy.js} +2 -2
  204. package/dashboard/dist/assets/{useExpandedRows-CkcEntB-.js.map → useExpandedRows-Cg9iq6Vy.js.map} +1 -1
  205. package/dashboard/dist/assets/{useFilterParams-DZCAaBC7.js → useFilterParams-CGRYFw_A.js} +2 -2
  206. package/dashboard/dist/assets/{useFilterParams-DZCAaBC7.js.map → useFilterParams-CGRYFw_A.js.map} +1 -1
  207. package/dashboard/dist/assets/{useYamlActivityEvents-BBioXSKA.js → useYamlActivityEvents-BU4Uhksl.js} +2 -2
  208. package/dashboard/dist/assets/{useYamlActivityEvents-BBioXSKA.js.map → useYamlActivityEvents-BU4Uhksl.js.map} +1 -1
  209. package/dashboard/dist/assets/{users-CCHT00of.js → users-oXOlnold.js} +2 -2
  210. package/dashboard/dist/assets/{users-CCHT00of.js.map → users-oXOlnold.js.map} +1 -1
  211. package/dashboard/dist/assets/{vendor-icons-E6836lXZ.js → vendor-icons-CBOM6Es0.js} +100 -95
  212. package/dashboard/dist/assets/vendor-icons-CBOM6Es0.js.map +1 -0
  213. package/dashboard/dist/assets/vendor-query-DLp59M9_.js +35 -0
  214. package/dashboard/dist/assets/vendor-query-DLp59M9_.js.map +1 -0
  215. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js +26 -0
  216. package/dashboard/dist/assets/vendor-react-Co3Y8ikm.js.map +1 -0
  217. package/dashboard/dist/assets/{workflows-DNZf6Pmq.js → workflows-Yq7cK-vR.js} +2 -2
  218. package/dashboard/dist/assets/{workflows-DNZf6Pmq.js.map → workflows-Yq7cK-vR.js.map} +1 -1
  219. package/dashboard/dist/assets/{yaml-workflows-BKZdGciI.js → yaml-workflows-Ch53yD43.js} +2 -2
  220. package/dashboard/dist/assets/{yaml-workflows-BKZdGciI.js.map → yaml-workflows-Ch53yD43.js.map} +1 -1
  221. package/dashboard/dist/index.html +5 -5
  222. package/docs/agents.md +6 -0
  223. package/docs/api/http/topics.md +164 -0
  224. package/docs/api/sdk/topics.md +204 -0
  225. package/docs/dashboard.md +22 -0
  226. package/docs/events.md +7 -0
  227. package/docs/sdk.md +15 -0
  228. package/docs/topics.md +154 -0
  229. package/package.json +2 -2
  230. package/dashboard/dist/assets/AdminDashboard-Bb6zouF5.js +0 -2
  231. package/dashboard/dist/assets/AgentConfigPage-DqHEK73E.js +0 -13
  232. package/dashboard/dist/assets/AgentConfigPage-DqHEK73E.js.map +0 -1
  233. package/dashboard/dist/assets/AgentDetailPage-WwA573u9.js +0 -4
  234. package/dashboard/dist/assets/AgentsPage-BZkZ_hXN.js +0 -2
  235. package/dashboard/dist/assets/AvailableEscalationsPage-C-Df3ZsZ.js +0 -2
  236. package/dashboard/dist/assets/BotPicker-CwfVVWxh.js +0 -2
  237. package/dashboard/dist/assets/CapabilitiesPage-DJEQ_5dV.js +0 -2
  238. package/dashboard/dist/assets/CollapsibleSection-DaFQGU6S.js +0 -2
  239. package/dashboard/dist/assets/ConfirmDeleteModal-dOxidrSR.js +0 -2
  240. package/dashboard/dist/assets/CopyableId-DmLF-RqZ.js +0 -2
  241. package/dashboard/dist/assets/CredentialsPage-D-tkqdhu.js +0 -2
  242. package/dashboard/dist/assets/CronLabel-C6iCjsXd.js +0 -2
  243. package/dashboard/dist/assets/CustomDurationPicker--wCtBkmT.js +0 -2
  244. package/dashboard/dist/assets/DataTable-D9yuBv0w.js +0 -2
  245. package/dashboard/dist/assets/DropZone-2mGyDo1P.js +0 -2
  246. package/dashboard/dist/assets/ElapsedCell-DKoH0bqR.js +0 -2
  247. package/dashboard/dist/assets/EmptyState-BcsfPq9T.js +0 -2
  248. package/dashboard/dist/assets/EscalationsOverview-C6A4Q9Ne.js +0 -2
  249. package/dashboard/dist/assets/EventTable-DWxH0vMp.js +0 -2
  250. package/dashboard/dist/assets/EventTopicPill-BUxxvpNg.js +0 -2
  251. package/dashboard/dist/assets/FilterBar-Ck4K4rzu.js +0 -2
  252. package/dashboard/dist/assets/HomePage-Tlu1j8fK.js +0 -2
  253. package/dashboard/dist/assets/ListToolbar-DuON-br0.js +0 -2
  254. package/dashboard/dist/assets/McpOverview-byott48x.js +0 -2
  255. package/dashboard/dist/assets/McpQueryDetailPage-ieZPpcPn.js +0 -5
  256. package/dashboard/dist/assets/McpQueryPage-BOO0ACYO.js +0 -2
  257. package/dashboard/dist/assets/McpRunDetailPage-Di8s7-u9.js +0 -2
  258. package/dashboard/dist/assets/McpRunsPage-DdUVqUFi.js +0 -2
  259. package/dashboard/dist/assets/Modal-DEODGeqx.js +0 -2
  260. package/dashboard/dist/assets/OperatorDashboard-oGmDbNYv.js +0 -2
  261. package/dashboard/dist/assets/PageHeader-DLjHNYHX.js +0 -2
  262. package/dashboard/dist/assets/PageHeaderWithStats-Oljg3n4j.js +0 -2
  263. package/dashboard/dist/assets/PriorityBadge-DfQY9St9.js +0 -2
  264. package/dashboard/dist/assets/ProcessDetailPage-Da-miMYZ.js +0 -2
  265. package/dashboard/dist/assets/ProcessesListPage-CW-2yFw_.js +0 -2
  266. package/dashboard/dist/assets/RolePill-Bp10-WfX.js +0 -2
  267. package/dashboard/dist/assets/RolesPage-Bg_hEu9H.js +0 -2
  268. package/dashboard/dist/assets/RowActions-Dg-Fsm5O.js +0 -2
  269. package/dashboard/dist/assets/RunAsSelector-hYP59xHH.js +0 -2
  270. package/dashboard/dist/assets/ServerName-C9lUCFYb.js +0 -2
  271. package/dashboard/dist/assets/StatCard-DlgF0CJC.js +0 -2
  272. package/dashboard/dist/assets/StatusBadge-XQlNFwmH.js +0 -2
  273. package/dashboard/dist/assets/StepIndicator-CuUIGxKk.js +0 -2
  274. package/dashboard/dist/assets/StickyPagination-F9FZsRy9.js +0 -2
  275. package/dashboard/dist/assets/SwimlaneTimeline-2JHwAM2f.js +0 -2
  276. package/dashboard/dist/assets/TagInput-Dkljw_WI.js +0 -2
  277. package/dashboard/dist/assets/TaskDetailPage--9FEVeTB.js +0 -2
  278. package/dashboard/dist/assets/TaskDetailPage--9FEVeTB.js.map +0 -1
  279. package/dashboard/dist/assets/TaskQueuePill-DPwm25Cc.js +0 -2
  280. package/dashboard/dist/assets/TasksListPage-kCH4r-70.js +0 -2
  281. package/dashboard/dist/assets/TimeAgo-RPbch7Te.js +0 -2
  282. package/dashboard/dist/assets/TimestampCell-Dgpl-lKv.js +0 -2
  283. package/dashboard/dist/assets/ToolPill-D_DIWFJ5.js +0 -2
  284. package/dashboard/dist/assets/ToolTestPanel-D1TWdZQi.js +0 -2
  285. package/dashboard/dist/assets/UserName-BXZGXJsU.js +0 -2
  286. package/dashboard/dist/assets/WorkflowExecutionPage-DWlNYb2M.js +0 -2
  287. package/dashboard/dist/assets/WorkflowPill-BbgVTGgI.js +0 -2
  288. package/dashboard/dist/assets/WorkflowsDashboard-Dgq8RcD6.js +0 -2
  289. package/dashboard/dist/assets/WorkflowsOverview-DnInrUPO.js +0 -2
  290. package/dashboard/dist/assets/YamlWorkflowsPage-z1Z9J-mc.js +0 -2
  291. package/dashboard/dist/assets/escalation-BseAikei.js +0 -2
  292. package/dashboard/dist/assets/escalation-columns-Cs2CkkEs.js +0 -2
  293. package/dashboard/dist/assets/helpers-DVICI_VA.js +0 -2
  294. package/dashboard/dist/assets/index-BMIU7Im5.js +0 -63
  295. package/dashboard/dist/assets/index-BMIU7Im5.js.map +0 -1
  296. package/dashboard/dist/assets/index-BP76o_S8.js +0 -2
  297. package/dashboard/dist/assets/index-BciXgS35.css +0 -1
  298. package/dashboard/dist/assets/index-BzBZo8Sn.js +0 -2
  299. package/dashboard/dist/assets/index-C0TSBQw8.js +0 -2
  300. package/dashboard/dist/assets/index-CPpNn3z2.js +0 -6
  301. package/dashboard/dist/assets/index-D2tDlpuv.js +0 -2
  302. package/dashboard/dist/assets/index-DDFK1A8T.js +0 -2
  303. package/dashboard/dist/assets/index-DVFm5329.js +0 -5
  304. package/dashboard/dist/assets/index-DyqdoZPY.js +0 -2
  305. package/dashboard/dist/assets/index-M17tP_HX.js +0 -15
  306. package/dashboard/dist/assets/index-XCEX7Zof.js +0 -2
  307. package/dashboard/dist/assets/index-tK8lfgAj.js +0 -2
  308. package/dashboard/dist/assets/namespaces-C45c4uoO.js +0 -2
  309. package/dashboard/dist/assets/settings-D0v7RI3o.js +0 -2
  310. package/dashboard/dist/assets/vendor-icons-E6836lXZ.js.map +0 -1
  311. package/dashboard/dist/assets/vendor-query-B2UbickB.js +0 -18
  312. package/dashboard/dist/assets/vendor-query-B2UbickB.js.map +0 -1
  313. package/dashboard/dist/assets/vendor-react-CX88sFS5.js +0 -22
  314. package/dashboard/dist/assets/vendor-react-CX88sFS5.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ToolTestPanel-D1TWdZQi.js","sources":["../../src/components/common/test/ToolTestPanel.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport { X, RotateCcw, Play, ExternalLink, KeyRound } from 'lucide-react';\nimport { useCallMcpTool } from '../../../api/mcp';\nimport { JsonViewer } from '../data/JsonViewer';\nimport { RunAsSelector } from '../form/RunAsSelector';\nimport { ToolPill } from '../display/ToolPill';\nimport { ServerName } from '../display/ServerName';\nimport type { McpToolManifest } from '../../../api/types';\nimport { buildSkeleton } from '../../../pages/mcp/mcp-query-detail/helpers';\n\nfunction ToolErrorDisplay({ error }: { error: Error | null }) {\n const msg = error instanceof Error ? error.message : '';\n if (msg.startsWith('No credential found for provider')) {\n return (\n <div className=\"bg-status-warning/10 border border-status-warning/30 rounded-md px-3 py-2 flex items-start gap-2\">\n <KeyRound size={14} className=\"text-status-warning mt-0.5 shrink-0\" />\n <div>\n <p className=\"text-[11px] font-medium text-text-primary mb-0.5\">Credential required</p>\n <p className=\"text-[11px] text-text-secondary mb-1\">{msg}</p>\n <Link to=\"/credentials\" className=\"text-[11px] text-accent hover:underline inline-flex items-center gap-1\">\n Go to Credentials <ExternalLink size={10} />\n </Link>\n </div>\n </div>\n );\n }\n return (\n <div className=\"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2\">\n <p className=\"text-[11px] text-status-error\">{msg || 'Tool call failed'}</p>\n </div>\n );\n}\n\nfunction ExecutionLink({ data }: { data: unknown }) {\n const res = (data as any)?.result;\n const jobId = res?.job_id;\n const ns = res?.namespace || 'longtail';\n if (!jobId) return null;\n return (\n <Link\n to={`/mcp/executions/${encodeURIComponent(jobId)}?namespace=${encodeURIComponent(ns)}`}\n className=\"inline-flex items-center gap-1.5 text-xs text-accent hover:underline\"\n >\n <ExternalLink size={12} />\n View Execution\n </Link>\n );\n}\n\ninterface ToolTestPanelProps {\n serverId: string;\n serverName: string;\n tool: McpToolManifest;\n onClose: () => void;\n}\n\nconst INPUT_CLS = 'input text-xs';\nconst LABEL_CLS = 'label';\n\n/** Text input for array fields — commits on blur or Enter, allows commas while typing */\nfunction ArrayInput({ value, onChange, className }: { value: any[]; onChange: (v: string[]) => void; className: string }) {\n const [raw, setRaw] = useState(value.join(', '));\n const commit = () => onChange(raw.split(',').map((s) => s.trim()).filter(Boolean));\n // Sync if parent value changes externally\n useEffect(() => { setRaw(value.join(', ')); }, [JSON.stringify(value)]); // eslint-disable-line\n return (\n <input\n type=\"text\"\n value={raw}\n onChange={(e) => setRaw(e.target.value)}\n onBlur={commit}\n onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault(); commit(); } }}\n placeholder=\"comma-separated values\"\n className={className}\n />\n );\n}\n\nexport function ToolTestPanel({ serverId, serverName, tool, onClose }: ToolTestPanelProps) {\n const callTool = useCallMcpTool();\n const [jsonMode, setJsonMode] = useState(false);\n const [fields, setFields] = useState<Record<string, any>>({});\n const [argsJson, setArgsJson] = useState('');\n const [jsonError, setJsonError] = useState('');\n const [executeAs, setExecuteAs] = useState('');\n\n useEffect(() => {\n const skeleton = buildSkeleton(tool.inputSchema);\n setFields(skeleton);\n setArgsJson(JSON.stringify(skeleton, null, 2));\n setJsonMode(false);\n setJsonError('');\n callTool.reset();\n }, [tool.name, serverId]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const hasResult = !!callTool.data || !!callTool.error;\n\n const toggleMode = () => {\n if (!jsonMode) {\n setArgsJson(JSON.stringify(fields, null, 2));\n } else {\n try { setFields(JSON.parse(argsJson)); } catch { /* keep fields */ }\n }\n setJsonMode(!jsonMode);\n };\n\n const handleRun = () => {\n setJsonError('');\n callTool.reset();\n let parsed: Record<string, unknown>;\n if (jsonMode) {\n try { parsed = JSON.parse(argsJson); } catch { setJsonError('Invalid JSON'); return; }\n } else {\n parsed = { ...fields };\n }\n callTool.mutate({\n serverId,\n toolName: tool.name,\n arguments: parsed,\n ...(executeAs ? { execute_as: executeAs } : {}),\n });\n };\n\n return (\n <div className=\"border-l border-surface-border bg-surface-raised\">\n {/* Header */}\n <div className=\"flex items-start justify-between px-4 py-3 border-b border-surface-border/50 shrink-0\">\n <div className=\"min-w-0 space-y-1\">\n <ServerName name={serverName} serverId={serverId} short={false} />\n <div><ToolPill name={tool.name} size=\"md\" /></div>\n </div>\n <button onClick={onClose} className=\"p-1 text-text-quaternary hover:text-text-primary shrink-0 ml-2\">\n <X className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n\n {/* Scrollable body */}\n <div className=\"px-4 py-4 space-y-5\">\n {tool.description && (\n <div className=\"border-l-2 border-accent/30 pl-3 py-1\">\n <p className=\"text-[11px] text-text-secondary leading-relaxed italic\">{tool.description}</p>\n </div>\n )}\n\n {/* Run as */}\n <div>\n <label className={LABEL_CLS}>run as</label>\n <RunAsSelector selected={executeAs} onChange={setExecuteAs} />\n </div>\n\n {/* Form / JSON toggle input */}\n <div>\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-[10px] text-text-quaternary\">Parameters</span>\n <button onClick={toggleMode} className=\"text-[10px] text-accent/70 hover:text-accent transition-colors\">\n {jsonMode ? 'Form view' : 'JSON view'}\n </button>\n </div>\n\n {jsonMode ? (\n <textarea\n value={argsJson}\n onChange={(e) => setArgsJson(e.target.value)}\n className=\"input-json w-full\"\n rows={6}\n spellCheck={false}\n />\n ) : (\n <div className=\"space-y-3\">\n {Object.entries(fields).map(([key, value]) => {\n const propSchema = tool.inputSchema?.properties?.[key];\n const hint = propSchema?.description;\n const isRequired = (tool.inputSchema?.required ?? []).includes(key);\n return (\n <div key={key}>\n <label className={LABEL_CLS}>\n {key}\n {isRequired && <span className=\"text-accent/50 ml-0.5\">*</span>}\n </label>\n {typeof value === 'boolean' ? (\n <select\n value={String(value)}\n onChange={(e) => setFields({ ...fields, [key]: e.target.value === 'true' })}\n className={INPUT_CLS}\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : Array.isArray(value) ? (\n <ArrayInput\n value={value as any[]}\n onChange={(v) => setFields({ ...fields, [key]: v })}\n className={INPUT_CLS}\n />\n ) : typeof value === 'object' && value !== null ? (\n <textarea\n value={JSON.stringify(value, null, 2)}\n onChange={(e) => { try { setFields({ ...fields, [key]: JSON.parse(e.target.value) }); } catch { /* invalid */ } }}\n className={`${INPUT_CLS} min-h-[48px] font-mono resize-y`}\n />\n ) : (\n <input\n type={typeof value === 'number' ? 'number' : 'text'}\n value={String(value ?? '')}\n onChange={(e) => setFields({ ...fields, [key]: typeof value === 'number' ? Number(e.target.value) : e.target.value })}\n className={INPUT_CLS}\n placeholder={propSchema?.type === 'string' ? propSchema?.example || '' : ''}\n />\n )}\n {hint && <p className=\"text-[9px] text-text-quaternary/70 mt-0.5 leading-snug\">{hint}</p>}\n </div>\n );\n })}\n {Object.keys(fields).length === 0 && (\n <p className=\"text-[11px] text-text-quaternary\">No parameters</p>\n )}\n </div>\n )}\n {jsonError && <p className=\"text-[11px] text-status-error mt-1\">{jsonError}</p>}\n </div>\n\n {/* Run button */}\n <button\n onClick={handleRun}\n disabled={callTool.isPending}\n className=\"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5\"\n >\n {callTool.isPending ? (\n 'Running...'\n ) : hasResult ? (\n <><RotateCcw size={12} /> Re-run</>\n ) : (\n <><Play size={12} /> Run</>\n )}\n </button>\n\n {/* Response */}\n {callTool.isPending && (\n <div className=\"animate-pulse\">\n <p className=\"text-[10px] text-text-quaternary mb-1\">Response</p>\n <div className=\"h-20 bg-surface-sunken/50 rounded-md\" />\n </div>\n )}\n {callTool.data ? (\n <div className=\"space-y-2\">\n <JsonViewer data={callTool.data as Record<string, unknown>} label=\"Response\" defaultCollapsed />\n <ExecutionLink data={callTool.data} />\n </div>\n ) : null}\n {callTool.error ? (\n <div>\n <p className=\"text-[10px] text-text-quaternary mb-1\">Response</p>\n <ToolErrorDisplay error={callTool.error as Error | null} />\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n"],"names":["ToolErrorDisplay","error","msg","jsxs","jsx","KeyRound","Link","ExternalLink","ExecutionLink","data","res","jobId","ns","INPUT_CLS","LABEL_CLS","ArrayInput","value","onChange","className","raw","setRaw","useState","commit","s","useEffect","e","ToolTestPanel","serverId","serverName","tool","onClose","callTool","useCallMcpTool","jsonMode","setJsonMode","fields","setFields","argsJson","setArgsJson","jsonError","setJsonError","executeAs","setExecuteAs","skeleton","buildSkeleton","hasResult","toggleMode","handleRun","parsed","ServerName","ToolPill","X","RunAsSelector","key","propSchema","_b","_a","hint","isRequired","_c","v","Fragment","RotateCcw","Play","JsonViewer"],"mappings":"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"}
1
+ {"version":3,"file":"ToolTestPanel-DusbUka5.js","sources":["../../src/components/common/test/ToolTestPanel.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport { X, RotateCcw, Play, ExternalLink, KeyRound } from 'lucide-react';\nimport { useCallMcpTool } from '../../../api/mcp';\nimport { JsonViewer } from '../data/JsonViewer';\nimport { RunAsSelector } from '../form/RunAsSelector';\nimport { ToolPill } from '../display/ToolPill';\nimport { ServerName } from '../display/ServerName';\nimport type { McpToolManifest } from '../../../api/types';\nimport { buildSkeleton } from '../../../pages/mcp/mcp-query-detail/helpers';\n\nfunction ToolErrorDisplay({ error }: { error: Error | null }) {\n const msg = error instanceof Error ? error.message : '';\n if (msg.startsWith('No credential found for provider')) {\n return (\n <div className=\"bg-status-warning/10 border border-status-warning/30 rounded-md px-3 py-2 flex items-start gap-2\">\n <KeyRound size={14} className=\"text-status-warning mt-0.5 shrink-0\" />\n <div>\n <p className=\"text-[11px] font-medium text-text-primary mb-0.5\">Credential required</p>\n <p className=\"text-[11px] text-text-secondary mb-1\">{msg}</p>\n <Link to=\"/credentials\" className=\"text-[11px] text-accent hover:underline inline-flex items-center gap-1\">\n Go to Credentials <ExternalLink size={10} />\n </Link>\n </div>\n </div>\n );\n }\n return (\n <div className=\"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2\">\n <p className=\"text-[11px] text-status-error\">{msg || 'Tool call failed'}</p>\n </div>\n );\n}\n\nfunction ExecutionLink({ data }: { data: unknown }) {\n const res = (data as any)?.result;\n const jobId = res?.job_id;\n const ns = res?.namespace || 'longtail';\n if (!jobId) return null;\n return (\n <Link\n to={`/mcp/executions/${encodeURIComponent(jobId)}?namespace=${encodeURIComponent(ns)}`}\n className=\"inline-flex items-center gap-1.5 text-xs text-accent hover:underline\"\n >\n <ExternalLink size={12} />\n View Execution\n </Link>\n );\n}\n\ninterface ToolTestPanelProps {\n serverId: string;\n serverName: string;\n tool: McpToolManifest;\n onClose: () => void;\n}\n\nconst INPUT_CLS = 'input text-xs';\nconst LABEL_CLS = 'label';\n\n/** Text input for array fields — commits on blur or Enter, allows commas while typing */\nfunction ArrayInput({ value, onChange, className }: { value: any[]; onChange: (v: string[]) => void; className: string }) {\n const [raw, setRaw] = useState(value.join(', '));\n const commit = () => onChange(raw.split(',').map((s) => s.trim()).filter(Boolean));\n // Sync if parent value changes externally\n useEffect(() => { setRaw(value.join(', ')); }, [JSON.stringify(value)]); // eslint-disable-line\n return (\n <input\n type=\"text\"\n value={raw}\n onChange={(e) => setRaw(e.target.value)}\n onBlur={commit}\n onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault(); commit(); } }}\n placeholder=\"comma-separated values\"\n className={className}\n />\n );\n}\n\nexport function ToolTestPanel({ serverId, serverName, tool, onClose }: ToolTestPanelProps) {\n const callTool = useCallMcpTool();\n const [jsonMode, setJsonMode] = useState(false);\n const [fields, setFields] = useState<Record<string, any>>({});\n const [argsJson, setArgsJson] = useState('');\n const [jsonError, setJsonError] = useState('');\n const [executeAs, setExecuteAs] = useState('');\n\n useEffect(() => {\n const skeleton = buildSkeleton(tool.inputSchema);\n setFields(skeleton);\n setArgsJson(JSON.stringify(skeleton, null, 2));\n setJsonMode(false);\n setJsonError('');\n callTool.reset();\n }, [tool.name, serverId]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const hasResult = !!callTool.data || !!callTool.error;\n\n const toggleMode = () => {\n if (!jsonMode) {\n setArgsJson(JSON.stringify(fields, null, 2));\n } else {\n try { setFields(JSON.parse(argsJson)); } catch { /* keep fields */ }\n }\n setJsonMode(!jsonMode);\n };\n\n const handleRun = () => {\n setJsonError('');\n callTool.reset();\n let parsed: Record<string, unknown>;\n if (jsonMode) {\n try { parsed = JSON.parse(argsJson); } catch { setJsonError('Invalid JSON'); return; }\n } else {\n parsed = { ...fields };\n }\n callTool.mutate({\n serverId,\n toolName: tool.name,\n arguments: parsed,\n ...(executeAs ? { execute_as: executeAs } : {}),\n });\n };\n\n return (\n <div className=\"border-l border-surface-border bg-surface-raised\">\n {/* Header */}\n <div className=\"flex items-start justify-between px-4 py-3 border-b border-surface-border/50 shrink-0\">\n <div className=\"min-w-0 space-y-1\">\n <ServerName name={serverName} serverId={serverId} short={false} />\n <div><ToolPill name={tool.name} size=\"md\" /></div>\n </div>\n <button onClick={onClose} className=\"p-1 text-text-quaternary hover:text-text-primary shrink-0 ml-2\">\n <X className=\"w-3.5 h-3.5\" />\n </button>\n </div>\n\n {/* Scrollable body */}\n <div className=\"px-4 py-4 space-y-5\">\n {tool.description && (\n <div className=\"border-l-2 border-accent/30 pl-3 py-1\">\n <p className=\"text-[11px] text-text-secondary leading-relaxed italic\">{tool.description}</p>\n </div>\n )}\n\n {/* Run as */}\n <div>\n <label className={LABEL_CLS}>run as</label>\n <RunAsSelector selected={executeAs} onChange={setExecuteAs} />\n </div>\n\n {/* Form / JSON toggle input */}\n <div>\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-[10px] text-text-quaternary\">Parameters</span>\n <button onClick={toggleMode} className=\"text-[10px] text-accent/70 hover:text-accent transition-colors\">\n {jsonMode ? 'Form view' : 'JSON view'}\n </button>\n </div>\n\n {jsonMode ? (\n <textarea\n value={argsJson}\n onChange={(e) => setArgsJson(e.target.value)}\n className=\"input-json w-full\"\n rows={6}\n spellCheck={false}\n />\n ) : (\n <div className=\"space-y-3\">\n {Object.entries(fields).map(([key, value]) => {\n const propSchema = tool.inputSchema?.properties?.[key];\n const hint = propSchema?.description;\n const isRequired = (tool.inputSchema?.required ?? []).includes(key);\n return (\n <div key={key}>\n <label className={LABEL_CLS}>\n {key}\n {isRequired && <span className=\"text-accent/50 ml-0.5\">*</span>}\n </label>\n {typeof value === 'boolean' ? (\n <select\n value={String(value)}\n onChange={(e) => setFields({ ...fields, [key]: e.target.value === 'true' })}\n className={INPUT_CLS}\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : Array.isArray(value) ? (\n <ArrayInput\n value={value as any[]}\n onChange={(v) => setFields({ ...fields, [key]: v })}\n className={INPUT_CLS}\n />\n ) : typeof value === 'object' && value !== null ? (\n <textarea\n value={JSON.stringify(value, null, 2)}\n onChange={(e) => { try { setFields({ ...fields, [key]: JSON.parse(e.target.value) }); } catch { /* invalid */ } }}\n className={`${INPUT_CLS} min-h-[48px] font-mono resize-y`}\n />\n ) : (\n <input\n type={typeof value === 'number' ? 'number' : 'text'}\n value={String(value ?? '')}\n onChange={(e) => setFields({ ...fields, [key]: typeof value === 'number' ? Number(e.target.value) : e.target.value })}\n className={INPUT_CLS}\n placeholder={propSchema?.type === 'string' ? propSchema?.example || '' : ''}\n />\n )}\n {hint && <p className=\"text-[9px] text-text-quaternary/70 mt-0.5 leading-snug\">{hint}</p>}\n </div>\n );\n })}\n {Object.keys(fields).length === 0 && (\n <p className=\"text-[11px] text-text-quaternary\">No parameters</p>\n )}\n </div>\n )}\n {jsonError && <p className=\"text-[11px] text-status-error mt-1\">{jsonError}</p>}\n </div>\n\n {/* Run button */}\n <button\n onClick={handleRun}\n disabled={callTool.isPending}\n className=\"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5\"\n >\n {callTool.isPending ? (\n 'Running...'\n ) : hasResult ? (\n <><RotateCcw size={12} /> Re-run</>\n ) : (\n <><Play size={12} /> Run</>\n )}\n </button>\n\n {/* Response */}\n {callTool.isPending && (\n <div className=\"animate-pulse\">\n <p className=\"text-[10px] text-text-quaternary mb-1\">Response</p>\n <div className=\"h-20 bg-surface-sunken/50 rounded-md\" />\n </div>\n )}\n {callTool.data ? (\n <div className=\"space-y-2\">\n <JsonViewer data={callTool.data as Record<string, unknown>} label=\"Response\" defaultCollapsed />\n <ExecutionLink data={callTool.data} />\n </div>\n ) : null}\n {callTool.error ? (\n <div>\n <p className=\"text-[10px] text-text-quaternary mb-1\">Response</p>\n <ToolErrorDisplay error={callTool.error as Error | null} />\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n"],"names":["ToolErrorDisplay","error","msg","jsxDEV","KeyRound","Link","ExternalLink","ExecutionLink","data","res","jobId","ns","INPUT_CLS","LABEL_CLS","ArrayInput","value","onChange","className","raw","setRaw","useState","commit","s","useEffect","e","ToolTestPanel","serverId","serverName","tool","onClose","callTool","useCallMcpTool","jsonMode","setJsonMode","fields","setFields","argsJson","setArgsJson","jsonError","setJsonError","executeAs","setExecuteAs","skeleton","buildSkeleton","hasResult","toggleMode","handleRun","parsed","ServerName","ToolPill","X","RunAsSelector","key","propSchema","_b","_a","hint","isRequired","_c","v","Fragment","RotateCcw","Play","JsonViewer"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import{j as e,c as b,J as V}from"./index-CCOSf1PY.js";import{a as i}from"./vendor-query-DLp59M9_.js";import{a as F,b as I,c as U}from"./topics-p8anbgi0.js";import{L as $}from"./ListToolbar-jy8NL6ll.js";import{R as o,B,D as L,m as z,aI as A,X as M,T as G,a as y}from"./vendor-icons-CBOM6Es0.js";import{e as H,c as K}from"./vendor-react-Co3Y8ikm.js";const X={task:"bg-blue-400/15 text-blue-400",workflow:"bg-accent/15 text-accent",escalation:"bg-amber-400/15 text-amber-400",activity:"bg-cyan-400/15 text-cyan-400",knowledge:"bg-violet-400/15 text-violet-400",agent:"bg-emerald-400/15 text-emerald-400",app:"bg-rose-400/15 text-rose-400",milestone:"bg-violet-400/15 text-violet-400"};function p({icon:r,color:m,children:c}){return e.jsxDEV("div",{className:"flex items-center gap-2 mb-3 pb-2 border-b border-surface-border",children:[e.jsxDEV(r,{className:`w-4 h-4 ${m}`,strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:23,columnNumber:7},this),e.jsxDEV("h2",{className:"text-xs font-semibold uppercase tracking-widest text-accent/80",children:c},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:24,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:22,columnNumber:5},this)}function te(){var E,P,j;const{topic:r}=H(),m=r?decodeURIComponent(r):null,c=K(),{data:a,isLoading:w,refetch:N,isFetching:S}=F(m),h=I(),k=U(),[t,n]=i.useState(!1),[x,g]=i.useState(""),[f,D]=i.useState(""),[d,v]=i.useState(""),[T,l]=i.useState("");if(w)return e.jsxDEV("div",{className:"animate-pulse space-y-4",children:[e.jsxDEV("div",{className:"h-8 bg-surface-sunken rounded w-48"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:44,columnNumber:53},this),e.jsxDEV("div",{className:"h-40 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:44,columnNumber:107},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:44,columnNumber:12},this);if(!a)return e.jsxDEV("div",{className:"flex flex-col items-center justify-center py-20 text-center",children:[e.jsxDEV(o,{className:"w-12 h-12 text-text-quaternary mb-4",strokeWidth:1},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:50,columnNumber:9},this),e.jsxDEV("h2",{className:"text-lg font-medium text-text-primary mb-2",children:"Topic not found"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:51,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:49,columnNumber:7},this);const C=a.source==="system",_=X[a.category]??"bg-zinc-400/15 text-zinc-400",q=()=>{g(a.description??""),D((a.tags??[]).join(", ")),v(a.payload_schema?JSON.stringify(a.payload_schema,null,2):""),l(""),n(!0)},O=()=>n(!1),R=()=>{const s=f.split(",").map(J=>J.trim()).filter(Boolean);let u;if(d.trim())try{u=JSON.parse(d),l("")}catch{l("Invalid JSON");return}h.mutate({topic:a.topic,description:x,tags:s,...u!==void 0?{payload_schema:u}:{}},{onSuccess:()=>{n(!1),N()}})},W=()=>{confirm(`Delete topic "${a.topic}"?
2
+
3
+ This removes it from the catalog. Active subscriptions are not affected.`)&&k.mutate(a.topic,{onSuccess:()=>c("/topics")})};return e.jsxDEV("div",{className:"max-w-3xl",children:[e.jsxDEV("div",{className:"flex items-start justify-between mb-6",children:[e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center gap-3 mb-2",children:[e.jsxDEV(o,{className:"w-5 h-5 text-accent",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:99,columnNumber:13},this),e.jsxDEV("h1",{className:"text-lg font-mono font-medium text-text-primary",children:a.topic},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:100,columnNumber:13},this),e.jsxDEV("button",{onClick:()=>{window.location.hash="#docs:topics.md"},className:"text-text-quaternary hover:text-accent transition-colors",title:"Topic docs",children:e.jsxDEV(B,{className:"w-4 h-4",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:102,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:101,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:98,columnNumber:11},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("span",{className:`inline-flex items-center px-2 py-0.5 rounded text-[10px] font-medium ${_}`,children:a.category},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:106,columnNumber:13},this),e.jsxDEV("span",{className:"text-[10px] font-mono text-text-quaternary",children:["source: ",a.source]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:107,columnNumber:13},this),a.last_seen_at&&e.jsxDEV("span",{className:"text-[10px] text-text-quaternary",children:["last seen ",e.jsxDEV(b,{date:a.last_seen_at},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:109,columnNumber:76},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:109,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:105,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:97,columnNumber:9},this),e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV($,{onRefresh:()=>N(),isFetching:S,apiPath:`/topics/by-name/${encodeURIComponent(a.topic)}`},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:115,columnNumber:11},this),!t&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV("button",{onClick:q,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors",children:[e.jsxDEV(L,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:123,columnNumber:17},this)," Edit"]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:122,columnNumber:15},this),!C&&e.jsxDEV("button",{onClick:W,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-red-400/60 hover:text-red-400 hover:bg-red-600/10 transition-colors",children:[e.jsxDEV(z,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:127,columnNumber:19},this)," Delete"]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:126,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:121,columnNumber:13},this),t&&e.jsxDEV(e.Fragment,{children:[e.jsxDEV("button",{onClick:R,disabled:h.isPending,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors",children:[e.jsxDEV(A,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:135,columnNumber:17},this)," Save"]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:134,columnNumber:15},this),e.jsxDEV("button",{onClick:O,className:"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-text-tertiary hover:text-text-primary hover:bg-surface-hover transition-colors",children:[e.jsxDEV(M,{className:"w-3 h-3"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:138,columnNumber:17},this)," Cancel"]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:137,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:133,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:114,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:96,columnNumber:7},this),e.jsxDEV("div",{className:"mb-8",children:t?e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"section-header",children:"Description"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:149,columnNumber:13},this),e.jsxDEV("textarea",{value:x,onChange:s=>g(s.target.value),rows:3,className:"input resize-none",placeholder:"What this topic represents"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:150,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:148,columnNumber:11},this):a.description?e.jsxDEV("p",{className:"text-sm text-text-secondary leading-relaxed",children:a.description},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:160,columnNumber:15},this):e.jsxDEV("p",{className:"text-sm text-text-quaternary italic",children:"No description"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:161,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:146,columnNumber:7},this),e.jsxDEV("div",{className:"mb-8",children:t?e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"section-header",children:"Tags"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:169,columnNumber:13},this),e.jsxDEV("input",{type:"text",value:f,onChange:s=>D(s.target.value),placeholder:"lifecycle, core, error",className:"input font-mono"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:170,columnNumber:13},this),e.jsxDEV("p",{className:"hint",children:"Comma-separated. Used for filtering in the catalog."},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:177,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:168,columnNumber:11},this):((E=a.tags)==null?void 0:E.length)>0?e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV(G,{className:"w-3 h-3 text-text-quaternary",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:181,columnNumber:13},this),a.tags.map(s=>e.jsxDEV("span",{className:"inline-flex items-center px-2 py-0.5 rounded text-[10px] font-mono text-text-tertiary bg-surface-sunken",children:s},s,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:183,columnNumber:15},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:180,columnNumber:11},this):null},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:166,columnNumber:7},this),e.jsxDEV("div",{className:"mb-8",children:t?e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"section-header",children:"Payload Schema"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:195,columnNumber:13},this),e.jsxDEV("textarea",{value:d,onChange:s=>{v(s.target.value),l("")},rows:12,className:"input-json w-full",placeholder:`{
4
+ "type": "object",
5
+ "properties": {
6
+ "orderId": { "type": "string" }
7
+ }
8
+ }`},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:196,columnNumber:13},this),T&&e.jsxDEV("p",{className:"text-[10px] text-red-400 mt-1",children:T},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:203,columnNumber:29},this),e.jsxDEV("p",{className:"hint",children:"JSON Schema describing the event.data shape. Shown in subscription editor as field reference."},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:204,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:194,columnNumber:11},this):a.payload_schema?e.jsxDEV(e.Fragment,{children:[e.jsxDEV(p,{icon:o,color:"text-accent",children:"Payload Schema"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:208,columnNumber:13},this),e.jsxDEV(V,{data:a.payload_schema},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:209,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:207,columnNumber:11},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV(p,{icon:o,color:"text-accent",children:"Payload Schema"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:213,columnNumber:13},this),e.jsxDEV("p",{className:"text-[11px] text-text-quaternary",children:"No schema defined. Click Edit to add one."},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:214,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:212,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:192,columnNumber:7},this),a.example_payload&&e.jsxDEV("div",{className:"mb-8",children:[e.jsxDEV(p,{icon:o,color:"text-cyan-400",children:"Example Payload"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:222,columnNumber:11},this),e.jsxDEV(V,{data:a.example_payload},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:223,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:221,columnNumber:9},this),e.jsxDEV("div",{className:"mb-8",children:[e.jsxDEV(p,{icon:y,color:"text-emerald-400",children:["Subscribers (",((P=a.subscribers)==null?void 0:P.length)??0,")"]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:229,columnNumber:9},this),(j=a.subscribers)!=null&&j.length?e.jsxDEV("div",{className:"space-y-1",children:a.subscribers.map(s=>e.jsxDEV("div",{className:"flex items-center justify-between py-2 px-3 rounded-md hover:bg-surface-hover transition-colors",children:[e.jsxDEV("button",{onClick:()=>c(`/agents/${s.agent_id}`),className:"flex items-center gap-2 text-left min-w-0",children:[e.jsxDEV(y,{className:"w-3 h-3 text-emerald-400 shrink-0",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:240,columnNumber:19},this),e.jsxDEV("span",{className:"text-xs text-text-primary hover:text-accent transition-colors",children:s.agent_name},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:241,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:236,columnNumber:17},this),e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV("span",{className:"text-[10px] font-mono text-text-quaternary",children:s.topic},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:244,columnNumber:19},this),e.jsxDEV("span",{className:"text-[10px] text-text-tertiary",children:s.reaction_type},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:245,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:243,columnNumber:17},this)]},s.id,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:235,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:233,columnNumber:11},this):e.jsxDEV("p",{className:"text-[11px] text-text-quaternary py-2",children:"No agents are subscribed to this topic."},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:251,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:228,columnNumber:7},this),e.jsxDEV("div",{className:"text-[10px] text-text-quaternary space-y-1 pt-4 border-t border-surface-border",children:[e.jsxDEV("p",{children:["Created ",e.jsxDEV(b,{date:a.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:257,columnNumber:20},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:257,columnNumber:9},this),e.jsxDEV("p",{children:["Updated ",e.jsxDEV(b,{date:a.updated_at},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:258,columnNumber:20},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:258,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:256,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicDetailPage.tsx",lineNumber:94,columnNumber:5},this)}export{te as TopicDetailPage};
9
+ //# sourceMappingURL=TopicDetailPage-DadwM52Y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopicDetailPage-DadwM52Y.js","sources":["../../src/pages/topics/TopicDetailPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useParams, useNavigate } from 'react-router-dom';\nimport { Radio, Bot, Tag, Pencil, Trash2, Save, X, BookOpen } from 'lucide-react';\nimport { useTopic, useUpdateTopic, useDeleteTopic } from '../../api/topics';\nimport { JsonViewer } from '../../components/common/data/JsonViewer';\nimport { DateValue } from '../../components/common/display/DateValue';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\n\nconst CATEGORY_COLORS: Record<string, string> = {\n task: 'bg-blue-400/15 text-blue-400',\n workflow: 'bg-accent/15 text-accent',\n escalation: 'bg-amber-400/15 text-amber-400',\n activity: 'bg-cyan-400/15 text-cyan-400',\n knowledge: 'bg-violet-400/15 text-violet-400',\n agent: 'bg-emerald-400/15 text-emerald-400',\n app: 'bg-rose-400/15 text-rose-400',\n milestone: 'bg-violet-400/15 text-violet-400',\n};\n\nfunction SectionHeader({ icon: Icon, color, children }: { icon: React.ElementType; color: string; children: React.ReactNode }) {\n return (\n <div className=\"flex items-center gap-2 mb-3 pb-2 border-b border-surface-border\">\n <Icon className={`w-4 h-4 ${color}`} strokeWidth={1.5} />\n <h2 className=\"text-xs font-semibold uppercase tracking-widest text-accent/80\">{children}</h2>\n </div>\n );\n}\n\nexport function TopicDetailPage() {\n const { topic: encodedTopic } = useParams<{ topic: string }>();\n const topicKey = encodedTopic ? decodeURIComponent(encodedTopic) : null;\n const navigate = useNavigate();\n const { data: topic, isLoading, refetch, isFetching } = useTopic(topicKey);\n const updateMutation = useUpdateTopic();\n const deleteMutation = useDeleteTopic();\n\n const [editing, setEditing] = useState(false);\n const [editDescription, setEditDescription] = useState('');\n const [editTags, setEditTags] = useState('');\n const [editSchema, setEditSchema] = useState('');\n const [schemaError, setSchemaError] = useState('');\n\n if (isLoading) {\n return <div className=\"animate-pulse space-y-4\"><div className=\"h-8 bg-surface-sunken rounded w-48\" /><div className=\"h-40 bg-surface-sunken rounded\" /></div>;\n }\n\n if (!topic) {\n return (\n <div className=\"flex flex-col items-center justify-center py-20 text-center\">\n <Radio className=\"w-12 h-12 text-text-quaternary mb-4\" strokeWidth={1} />\n <h2 className=\"text-lg font-medium text-text-primary mb-2\">Topic not found</h2>\n </div>\n );\n }\n\n const isSystem = topic.source === 'system';\n const categoryPillCls = CATEGORY_COLORS[topic.category] ?? 'bg-zinc-400/15 text-zinc-400';\n\n const startEdit = () => {\n setEditDescription(topic.description ?? '');\n setEditTags((topic.tags ?? []).join(', '));\n setEditSchema(topic.payload_schema ? JSON.stringify(topic.payload_schema, null, 2) : '');\n setSchemaError('');\n setEditing(true);\n };\n\n const cancelEdit = () => setEditing(false);\n\n const saveEdit = () => {\n const tags = editTags.split(',').map((t) => t.trim()).filter(Boolean);\n let payload_schema: Record<string, any> | undefined;\n if (editSchema.trim()) {\n try {\n payload_schema = JSON.parse(editSchema);\n setSchemaError('');\n } catch {\n setSchemaError('Invalid JSON');\n return;\n }\n }\n updateMutation.mutate(\n { topic: topic.topic, description: editDescription, tags, ...(payload_schema !== undefined ? { payload_schema } : {}) },\n { onSuccess: () => { setEditing(false); refetch(); } },\n );\n };\n\n const handleDelete = () => {\n if (confirm(`Delete topic \"${topic.topic}\"?\\n\\nThis removes it from the catalog. Active subscriptions are not affected.`)) {\n deleteMutation.mutate(topic.topic, { onSuccess: () => navigate('/topics') });\n }\n };\n\n return (\n <div className=\"max-w-3xl\">\n {/* Header */}\n <div className=\"flex items-start justify-between mb-6\">\n <div>\n <div className=\"flex items-center gap-3 mb-2\">\n <Radio className=\"w-5 h-5 text-accent\" strokeWidth={1.5} />\n <h1 className=\"text-lg font-mono font-medium text-text-primary\">{topic.topic}</h1>\n <button onClick={() => { window.location.hash = '#docs:topics.md'; }} className=\"text-text-quaternary hover:text-accent transition-colors\" title=\"Topic docs\">\n <BookOpen className=\"w-4 h-4\" strokeWidth={1.5} />\n </button>\n </div>\n <div className=\"flex items-center gap-3\">\n <span className={`inline-flex items-center px-2 py-0.5 rounded text-[10px] font-medium ${categoryPillCls}`}>{topic.category}</span>\n <span className=\"text-[10px] font-mono text-text-quaternary\">source: {topic.source}</span>\n {topic.last_seen_at && (\n <span className=\"text-[10px] text-text-quaternary\">last seen <DateValue date={topic.last_seen_at} /></span>\n )}\n </div>\n </div>\n\n <div className=\"flex items-center gap-2\">\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={`/topics/by-name/${encodeURIComponent(topic.topic)}`}\n />\n {!editing && (\n <>\n <button onClick={startEdit} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors\">\n <Pencil className=\"w-3 h-3\" /> Edit\n </button>\n {!isSystem && (\n <button onClick={handleDelete} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-red-400/60 hover:text-red-400 hover:bg-red-600/10 transition-colors\">\n <Trash2 className=\"w-3 h-3\" /> Delete\n </button>\n )}\n </>\n )}\n {editing && (\n <>\n <button onClick={saveEdit} disabled={updateMutation.isPending} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md bg-accent text-text-inverse hover:bg-accent-hover transition-colors\">\n <Save className=\"w-3 h-3\" /> Save\n </button>\n <button onClick={cancelEdit} className=\"flex items-center gap-1.5 px-3 py-1.5 text-xs rounded-md text-text-tertiary hover:text-text-primary hover:bg-surface-hover transition-colors\">\n <X className=\"w-3 h-3\" /> Cancel\n </button>\n </>\n )}\n </div>\n </div>\n\n {/* Description */}\n <div className=\"mb-8\">\n {editing ? (\n <div>\n <label className=\"section-header\">Description</label>\n <textarea\n value={editDescription}\n onChange={(e) => setEditDescription(e.target.value)}\n rows={3}\n className=\"input resize-none\"\n placeholder=\"What this topic represents\"\n />\n </div>\n ) : (\n topic.description\n ? <p className=\"text-sm text-text-secondary leading-relaxed\">{topic.description}</p>\n : <p className=\"text-sm text-text-quaternary italic\">No description</p>\n )}\n </div>\n\n {/* Tags */}\n <div className=\"mb-8\">\n {editing ? (\n <div>\n <label className=\"section-header\">Tags</label>\n <input\n type=\"text\"\n value={editTags}\n onChange={(e) => setEditTags(e.target.value)}\n placeholder=\"lifecycle, core, error\"\n className=\"input font-mono\"\n />\n <p className=\"hint\">Comma-separated. Used for filtering in the catalog.</p>\n </div>\n ) : topic.tags?.length > 0 ? (\n <div className=\"flex items-center gap-2\">\n <Tag className=\"w-3 h-3 text-text-quaternary\" strokeWidth={1.5} />\n {topic.tags.map((tag) => (\n <span key={tag} className=\"inline-flex items-center px-2 py-0.5 rounded text-[10px] font-mono text-text-tertiary bg-surface-sunken\">\n {tag}\n </span>\n ))}\n </div>\n ) : null}\n </div>\n\n {/* Payload Schema */}\n <div className=\"mb-8\">\n {editing ? (\n <div>\n <label className=\"section-header\">Payload Schema</label>\n <textarea\n value={editSchema}\n onChange={(e) => { setEditSchema(e.target.value); setSchemaError(''); }}\n rows={12}\n className=\"input-json w-full\"\n placeholder={'{\\n \"type\": \"object\",\\n \"properties\": {\\n \"orderId\": { \"type\": \"string\" }\\n }\\n}'}\n />\n {schemaError && <p className=\"text-[10px] text-red-400 mt-1\">{schemaError}</p>}\n <p className=\"hint\">JSON Schema describing the event.data shape. Shown in subscription editor as field reference.</p>\n </div>\n ) : topic.payload_schema ? (\n <>\n <SectionHeader icon={Radio} color=\"text-accent\">Payload Schema</SectionHeader>\n <JsonViewer data={topic.payload_schema} />\n </>\n ) : (\n <>\n <SectionHeader icon={Radio} color=\"text-accent\">Payload Schema</SectionHeader>\n <p className=\"text-[11px] text-text-quaternary\">No schema defined. Click Edit to add one.</p>\n </>\n )}\n </div>\n\n {/* Example Payload */}\n {topic.example_payload && (\n <div className=\"mb-8\">\n <SectionHeader icon={Radio} color=\"text-cyan-400\">Example Payload</SectionHeader>\n <JsonViewer data={topic.example_payload} />\n </div>\n )}\n\n {/* Subscribers */}\n <div className=\"mb-8\">\n <SectionHeader icon={Bot} color=\"text-emerald-400\">\n Subscribers ({topic.subscribers?.length ?? 0})\n </SectionHeader>\n {topic.subscribers?.length ? (\n <div className=\"space-y-1\">\n {topic.subscribers.map((sub) => (\n <div key={sub.id} className=\"flex items-center justify-between py-2 px-3 rounded-md hover:bg-surface-hover transition-colors\">\n <button\n onClick={() => navigate(`/agents/${sub.agent_id}`)}\n className=\"flex items-center gap-2 text-left min-w-0\"\n >\n <Bot className=\"w-3 h-3 text-emerald-400 shrink-0\" strokeWidth={1.5} />\n <span className=\"text-xs text-text-primary hover:text-accent transition-colors\">{sub.agent_name}</span>\n </button>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-[10px] font-mono text-text-quaternary\">{sub.topic}</span>\n <span className=\"text-[10px] text-text-tertiary\">{sub.reaction_type}</span>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <p className=\"text-[11px] text-text-quaternary py-2\">No agents are subscribed to this topic.</p>\n )}\n </div>\n\n {/* Metadata */}\n <div className=\"text-[10px] text-text-quaternary space-y-1 pt-4 border-t border-surface-border\">\n <p>Created <DateValue date={topic.created_at} /></p>\n <p>Updated <DateValue date={topic.updated_at} /></p>\n </div>\n </div>\n );\n}\n"],"names":["CATEGORY_COLORS","SectionHeader","Icon","color","children","jsxDEV","TopicDetailPage","encodedTopic","useParams","topicKey","navigate","useNavigate","topic","isLoading","refetch","isFetching","useTopic","updateMutation","useUpdateTopic","deleteMutation","useDeleteTopic","editing","setEditing","useState","editDescription","setEditDescription","editTags","setEditTags","editSchema","setEditSchema","schemaError","setSchemaError","Radio","isSystem","categoryPillCls","startEdit","cancelEdit","saveEdit","tags","t","payload_schema","handleDelete","BookOpen","DateValue","ListToolbar","Fragment","Pencil","Trash2","Save","X","e","_a","Tag","tag","JsonViewer","Bot","_b","_c","sub"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{j as e,c as m}from"./index-CCOSf1PY.js";import{u as d}from"./topics-p8anbgi0.js";import{u}from"./useFilterParams-CGRYFw_A.js";import{D as b}from"./DataTable-J5R6mepB.js";import{S as g}from"./StickyPagination-CGk8VAKt.js";import{F as f,b as x}from"./FilterBar-Bdssa-Xn.js";import{P as N}from"./PageHeader-COcgWWf-.js";import{L as h}from"./ListToolbar-jy8NL6ll.js";import{R as v}from"./vendor-icons-CBOM6Es0.js";import{c as y}from"./vendor-react-Co3Y8ikm.js";import"./vendor-query-DLp59M9_.js";import"./EmptyState-BXGvOADa.js";const P={task:"bg-blue-400/15 text-blue-400",workflow:"bg-accent/15 text-accent",escalation:"bg-amber-400/15 text-amber-400",activity:"bg-cyan-400/15 text-cyan-400",knowledge:"bg-violet-400/15 text-violet-400",agent:"bg-emerald-400/15 text-emerald-400",app:"bg-rose-400/15 text-rose-400",milestone:"bg-violet-400/15 text-violet-400"},T=[{value:"task",label:"Task"},{value:"workflow",label:"Workflow"},{value:"escalation",label:"Escalation"},{value:"activity",label:"Activity"},{value:"knowledge",label:"Knowledge"},{value:"agent",label:"Agent"},{value:"app",label:"App"},{value:"milestone",label:"Milestone"}];function D({category:a}){const s=P[a]??"bg-zinc-400/15 text-zinc-400";return e.jsxDEV("span",{className:`inline-flex items-center px-2 py-0.5 rounded text-[10px] font-medium ${s}`,children:a},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:37,columnNumber:5},this)}const E=[{key:"topic",label:"Topic",render:a=>e.jsxDEV("div",{className:"flex items-center gap-2 min-w-0",children:[e.jsxDEV(v,{className:"w-3 h-3 shrink-0 text-text-quaternary",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:49,columnNumber:9},void 0),e.jsxDEV("span",{className:"text-xs font-mono text-text-primary truncate",children:a.topic},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:50,columnNumber:9},void 0)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:48,columnNumber:7},void 0)},{key:"category",label:"Category",render:a=>e.jsxDEV(D,{category:a.category},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:57,columnNumber:22},void 0),className:"w-28"},{key:"description",label:"Description",render:a=>a.description?e.jsxDEV("span",{className:"text-[11px] text-text-secondary truncate block max-w-xs",children:a.description},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:64,columnNumber:9},void 0):e.jsxDEV("span",{className:"text-text-quaternary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:65,columnNumber:9},void 0)},{key:"source",label:"Source",render:a=>e.jsxDEV("span",{className:"text-[10px] font-mono text-text-tertiary",children:a.source},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:71,columnNumber:7},void 0),className:"w-24"},{key:"subscriber_count",label:"Subscribers",render:a=>{const s=a.subscriber_count??0;return s?e.jsxDEV("span",{className:"inline-flex items-center justify-center min-w-[20px] px-1.5 py-0.5 rounded-full text-[10px] font-medium bg-accent/15 text-accent",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:82,columnNumber:9},void 0):e.jsxDEV("span",{className:"text-text-quaternary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:80,columnNumber:26},void 0)},className:"w-24 text-center"},{key:"last_seen_at",label:"Last Seen",render:a=>a.last_seen_at?e.jsxDEV("span",{className:"whitespace-nowrap",children:e.jsxDEV(m,{date:a.last_seen_at},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:93,columnNumber:45},void 0)},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:93,columnNumber:9},void 0):e.jsxDEV("span",{className:"text-text-quaternary",children:"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:94,columnNumber:9},void 0),className:"w-28"}];function A(){const a=y(),{filters:s,setFilter:l,pagination:t}=u({filters:{category:""}}),{data:i,isLoading:c,refetch:n,isFetching:p}=d({category:s.category||void 0,limit:t.pageSize,offset:t.offset}),r=(i==null?void 0:i.total)??0;return e.jsxDEV("div",{children:[e.jsxDEV(N,{title:"Topic Catalog",docsHash:"#docs:topics.md"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:116,columnNumber:7},this),e.jsxDEV(f,{actions:e.jsxDEV(h,{onRefresh:()=>n(),isFetching:p,apiPath:`/topics?limit=${t.pageSize}&offset=${t.offset}${s.category?`&category=${s.category}`:""}`},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:119,columnNumber:9},this),children:e.jsxDEV(x,{label:"Category",value:s.category,onChange:o=>l("category",o),options:T},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:125,columnNumber:9},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:118,columnNumber:7},this),e.jsxDEV(b,{columns:E,data:(i==null?void 0:i.topics)??[],keyFn:o=>o.topic,onRowClick:o=>a(`/topics/${encodeURIComponent(o.topic)}`),isLoading:c,emptyMessage:"No topics registered yet"},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:133,columnNumber:7},this),e.jsxDEV(g,{page:t.page,totalPages:t.totalPages(r),onPageChange:t.setPage,total:r,pageSize:t.pageSize,onPageSizeChange:t.setPageSize},void 0,!1,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:142,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/topics/TopicsPage.tsx",lineNumber:115,columnNumber:5},this)}export{A as TopicsPage};
2
+ //# sourceMappingURL=TopicsPage-DbtrnQON.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopicsPage-DbtrnQON.js","sources":["../../src/pages/topics/TopicsPage.tsx"],"sourcesContent":["import { useNavigate } from 'react-router-dom';\nimport { Radio } from 'lucide-react';\nimport { useTopics, type TopicCatalogEntry } from '../../api/topics';\nimport { useFilterParams } from '../../hooks/useFilterParams';\nimport { DataTable, type Column } from '../../components/common/data/DataTable';\nimport { StickyPagination } from '../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect } from '../../components/common/data/FilterBar';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\nimport { DateValue } from '../../components/common/display/DateValue';\n\nconst CATEGORY_COLORS: Record<string, string> = {\n task: 'bg-blue-400/15 text-blue-400',\n workflow: 'bg-accent/15 text-accent',\n escalation: 'bg-amber-400/15 text-amber-400',\n activity: 'bg-cyan-400/15 text-cyan-400',\n knowledge: 'bg-violet-400/15 text-violet-400',\n agent: 'bg-emerald-400/15 text-emerald-400',\n app: 'bg-rose-400/15 text-rose-400',\n milestone: 'bg-violet-400/15 text-violet-400',\n};\n\nconst CATEGORY_OPTIONS = [\n { value: 'task', label: 'Task' },\n { value: 'workflow', label: 'Workflow' },\n { value: 'escalation', label: 'Escalation' },\n { value: 'activity', label: 'Activity' },\n { value: 'knowledge', label: 'Knowledge' },\n { value: 'agent', label: 'Agent' },\n { value: 'app', label: 'App' },\n { value: 'milestone', label: 'Milestone' },\n];\n\nfunction CategoryPill({ category }: { category: string }) {\n const cls = CATEGORY_COLORS[category] ?? 'bg-zinc-400/15 text-zinc-400';\n return (\n <span className={`inline-flex items-center px-2 py-0.5 rounded text-[10px] font-medium ${cls}`}>\n {category}\n </span>\n );\n}\n\nconst columns: Column<TopicCatalogEntry>[] = [\n {\n key: 'topic',\n label: 'Topic',\n render: (row) => (\n <div className=\"flex items-center gap-2 min-w-0\">\n <Radio className=\"w-3 h-3 shrink-0 text-text-quaternary\" strokeWidth={1.5} />\n <span className=\"text-xs font-mono text-text-primary truncate\">{row.topic}</span>\n </div>\n ),\n },\n {\n key: 'category',\n label: 'Category',\n render: (row) => <CategoryPill category={row.category} />,\n className: 'w-28',\n },\n {\n key: 'description',\n label: 'Description',\n render: (row) => row.description\n ? <span className=\"text-[11px] text-text-secondary truncate block max-w-xs\">{row.description}</span>\n : <span className=\"text-text-quaternary\">—</span>,\n },\n {\n key: 'source',\n label: 'Source',\n render: (row) => (\n <span className=\"text-[10px] font-mono text-text-tertiary\">{row.source}</span>\n ),\n className: 'w-24',\n },\n {\n key: 'subscriber_count',\n label: 'Subscribers',\n render: (row) => {\n const count = row.subscriber_count ?? 0;\n if (!count) return <span className=\"text-text-quaternary\">—</span>;\n return (\n <span className=\"inline-flex items-center justify-center min-w-[20px] px-1.5 py-0.5 rounded-full text-[10px] font-medium bg-accent/15 text-accent\">\n {count}\n </span>\n );\n },\n className: 'w-24 text-center',\n },\n {\n key: 'last_seen_at',\n label: 'Last Seen',\n render: (row) => row.last_seen_at\n ? <span className=\"whitespace-nowrap\"><DateValue date={row.last_seen_at} /></span>\n : <span className=\"text-text-quaternary\">—</span>,\n className: 'w-28',\n },\n];\n\nexport function TopicsPage() {\n const navigate = useNavigate();\n\n const { filters, setFilter, pagination } = useFilterParams({\n filters: { category: '' },\n });\n\n const { data, isLoading, refetch, isFetching } = useTopics({\n category: filters.category || undefined,\n limit: pagination.pageSize,\n offset: pagination.offset,\n });\n\n const total = data?.total ?? 0;\n\n return (\n <div>\n <PageHeader title=\"Topic Catalog\" docsHash=\"#docs:topics.md\" />\n\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={`/topics?limit=${pagination.pageSize}&offset=${pagination.offset}${filters.category ? `&category=${filters.category}` : ''}`}\n />\n }>\n <FilterSelect\n label=\"Category\"\n value={filters.category}\n onChange={(v) => setFilter('category', v)}\n options={CATEGORY_OPTIONS}\n />\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={data?.topics ?? []}\n keyFn={(row) => row.topic}\n onRowClick={(row) => navigate(`/topics/${encodeURIComponent(row.topic)}`)}\n isLoading={isLoading}\n emptyMessage=\"No topics registered yet\"\n />\n\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n );\n}\n"],"names":["CATEGORY_COLORS","CATEGORY_OPTIONS","CategoryPill","category","cls","columns","row","jsxDEV","Radio","this","count","DateValue","TopicsPage","navigate","useNavigate","filters","setFilter","pagination","useFilterParams","data","isLoading","refetch","isFetching","useTopics","total","PageHeader","FilterBar","ListToolbar","FilterSelect","v","DataTable","StickyPagination"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{j as s}from"./index-CCOSf1PY.js";import{a as m}from"./users-oXOlnold.js";function i({userId:a,fallback:r}){const{data:e}=m(a);return e?s.jsxDEV(s.Fragment,{children:e.display_name||e.email||e.external_id},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/UserName.tsx",lineNumber:11,columnNumber:12},this):s.jsxDEV(s.Fragment,{children:r??`${a.slice(0,8)}…`},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/UserName.tsx",lineNumber:15,columnNumber:10},this)}export{i as U};
2
+ //# sourceMappingURL=UserName-CLbusknU.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UserName-BXZGXJsU.js","sources":["../../src/components/common/display/UserName.tsx"],"sourcesContent":["import { useUser } from '../../../api/users';\n\n/**\n * Resolves a user ID to their display name (or email, or truncated ID as fallback).\n * Renders inline — suitable for use inside <span>, <p>, etc.\n */\nexport function UserName({ userId, fallback }: { userId: string; fallback?: string }) {\n const { data: resolved } = useUser(userId);\n\n if (resolved) {\n return <>{resolved.display_name || resolved.email || resolved.external_id}</>;\n }\n\n // Still loading or no record — show fallback or truncated ID\n return <>{fallback ?? `${userId.slice(0, 8)}…`}</>;\n}\n"],"names":["UserName","userId","fallback","resolved","useUser","jsx","Fragment"],"mappings":"uFAMO,SAASA,EAAS,CAAE,OAAAC,EAAQ,SAAAC,GAAmD,CACpF,KAAM,CAAE,KAAMC,GAAaC,EAAQH,CAAM,EAEzC,OAAIE,oBACQ,SAAAA,EAAS,cAAgBA,EAAS,OAASA,EAAS,YAAY,EAIrEE,EAAAA,IAAAC,EAAAA,SAAA,CAAG,YAAY,GAAGL,EAAO,MAAM,EAAG,CAAC,CAAC,GAAA,CAAI,CACjD"}
1
+ {"version":3,"file":"UserName-CLbusknU.js","sources":["../../src/components/common/display/UserName.tsx"],"sourcesContent":["import { useUser } from '../../../api/users';\n\n/**\n * Resolves a user ID to their display name (or email, or truncated ID as fallback).\n * Renders inline — suitable for use inside <span>, <p>, etc.\n */\nexport function UserName({ userId, fallback }: { userId: string; fallback?: string }) {\n const { data: resolved } = useUser(userId);\n\n if (resolved) {\n return <>{resolved.display_name || resolved.email || resolved.external_id}</>;\n }\n\n // Still loading or no record — show fallback or truncated ID\n return <>{fallback ?? `${userId.slice(0, 8)}…`}</>;\n}\n"],"names":["UserName","userId","fallback","resolved","useUser","jsxDEV","Fragment"],"mappings":"gFAMO,SAASA,EAAS,CAAE,OAAAC,EAAQ,SAAAC,GAAmD,CACpF,KAAM,CAAE,KAAMC,GAAaC,EAAQH,CAAM,EAEzC,OAAIE,uBACQ,SAAAA,EAAS,cAAgBA,EAAS,OAASA,EAAS,aAAvD,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAmE,EAIrEE,EAAAA,OAAAC,EAAAA,SAAA,CAAG,YAAY,GAAGL,EAAO,MAAM,EAAG,CAAC,CAAC,GAAA,EAApC,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAwC,CACjD"}
@@ -0,0 +1,2 @@
1
+ import{j as e,c as v,D as T,J as D,d as C}from"./index-CCOSf1PY.js";import{a as k}from"./vendor-query-DLp59M9_.js";import{a as I,g as R}from"./workflows-Yq7cK-vR.js";import{h as S}from"./useEventHooks-VaJ52jMm.js";import{u as $,E as L}from"./EventTable-CvJ98E8s.js";import{b as A,e as K}from"./tasks-Cc-QoITQ.js";import{P as Q}from"./PageHeader-COcgWWf-.js";import{C as g}from"./CollapsibleSection-kYTBL7dT.js";import{L as z}from"./ListToolbar-jy8NL6ll.js";import{S as j}from"./StatusBadge-CQlF46RR.js";import{L as f,e as B,u as J,c as M}from"./vendor-react-Co3Y8ikm.js";import{S as O}from"./SwimlaneTimeline-MEUPc3yJ.js";import"./vendor-icons-CBOM6Es0.js";import"./FilterBar-Bdssa-Xn.js";function m({label:s,value:t,mono:a,truncate:o,children:r}){return e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:22,columnNumber:7},this),r||e.jsxDEV("p",{className:`text-xs text-text-primary ${a?"font-mono":""} ${o?"truncate":""}`,title:o?t:void 0,children:t},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:26,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:21,columnNumber:5},this)}function F(s){const t=s.lastIndexOf("-");return t<=0?{taskQueue:s,workflowType:s}:{taskQueue:s.substring(0,t),workflowType:s.substring(t+1)}}function U({execution:s,task:t,escalations:a}){const r=t&&t.workflow_id===s.workflow_id?t.parent_workflow_id:null,{taskQueue:l,workflowType:d}=F(s.workflow_type);return e.jsxDEV("div",{className:"px-6 py-6 mb-6",children:[e.jsxDEV("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-y-4 gap-x-8",children:[e.jsxDEV(m,{label:"Workflow Type",value:d,mono:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:69,columnNumber:9},this),e.jsxDEV(m,{label:"Task Queue",value:l,mono:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:70,columnNumber:9},this),e.jsxDEV(m,{label:"Start Time",children:s.start_time?e.jsxDEV(v,{date:s.start_time,format:"datetime",className:"text-text-primary"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:73,columnNumber:15},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"--"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:74,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:71,columnNumber:9},this),e.jsxDEV(m,{label:"End Time",children:s.close_time?e.jsxDEV(v,{date:s.close_time,format:"datetime",className:"text-text-primary"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:78,columnNumber:15},this):e.jsxDEV("span",{className:"text-xs text-text-tertiary",children:"--"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:79,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:76,columnNumber:9},this),e.jsxDEV(m,{label:"Duration",children:e.jsxDEV(T,{ms:s.duration_ms,className:"font-mono text-text-primary"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:82,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:81,columnNumber:9},this),e.jsxDEV(m,{label:"History Size",value:`${s.summary.total_events} events`},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:84,columnNumber:9},this),e.jsxDEV(m,{label:"Activities",value:`${s.summary.activities.completed} / ${s.summary.activities.total}`},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:88,columnNumber:9},this),e.jsxDEV(m,{label:"Run ID",value:s.workflow_id,mono:!0,truncate:!0},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:92,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:68,columnNumber:7},this),(r||t||a&&a.length>0)&&e.jsxDEV("div",{className:"mt-5 pt-4 border-t border-surface-border space-y-3",children:[r&&e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("span",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary shrink-0",children:"Parent"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:106,columnNumber:15},this),e.jsxDEV(f,{to:`/workflows/executions/${r}`,className:"text-xs font-mono text-accent hover:underline truncate",title:r,children:r},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:109,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:105,columnNumber:13},this),!1,a&&a.length>0&&e.jsxDEV("div",{className:"flex items-start gap-2",children:[e.jsxDEV("span",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary shrink-0 mt-0.5",children:a.length===1?"Escalation":"Escalations"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:137,columnNumber:15},this),e.jsxDEV("div",{className:"flex flex-wrap gap-x-4 gap-y-1",children:a.map(n=>e.jsxDEV(f,{to:`/escalations/detail/${n.id}`,className:"inline-flex items-center gap-1.5 text-xs font-mono text-accent hover:underline",children:[e.jsxDEV("span",{children:n.type},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:147,columnNumber:21},this),e.jsxDEV(j,{status:n.status},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:148,columnNumber:21},this)]},n.id,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:142,columnNumber:19},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:140,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:136,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:102,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionHeader.tsx",lineNumber:66,columnNumber:5},this)}function q(s){var o;const t=s.events.find(r=>r.event_type==="workflow_execution_started"),a=(o=t==null?void 0:t.attributes)==null?void 0:o.input;return a&&typeof a=="object"?a:null}function Z({execution:s}){const t=q(s),a=s.result,o=(a==null?void 0:a.data)??a??null;return!t&&!o?null:e.jsxDEV("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6",children:[t!==null&&e.jsxDEV("div",{children:e.jsxDEV(D,{data:t,label:"Input Envelope"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionInputResult.tsx",lineNumber:34,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionInputResult.tsx",lineNumber:33,columnNumber:9},this),o!==null&&e.jsxDEV("div",{children:e.jsxDEV(D,{data:o,label:"Result"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionInputResult.tsx",lineNumber:39,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionInputResult.tsx",lineNumber:38,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/workflow-execution/ExecutionInputResult.tsx",lineNumber:31,columnNumber:5},this)}function G({isRunning:s,hasToolCalls:t,workflowId:a,onAction:o}){const[r,l]=k.useState(!1),d=k.useRef(null);return k.useEffect(()=>{if(!r)return;const n=x=>{d.current&&!d.current.contains(x.target)&&l(!1)};return document.addEventListener("mousedown",n),()=>document.removeEventListener("mousedown",n)},[r]),e.jsxDEV("div",{className:"relative",ref:d,children:[e.jsxDEV("button",{onClick:()=>l(!r),className:"btn-primary text-xs",children:"Actions"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:39,columnNumber:7},this),r&&e.jsxDEV("div",{className:"absolute right-0 mt-1 w-44 bg-surface-raised border border-surface-border rounded-md shadow-lg z-10",children:[e.jsxDEV("button",{onClick:()=>{o("restart"),l(!1)},className:"block w-full text-left px-4 py-2 text-xs text-text-secondary hover:bg-surface-hover",children:"Restart Workflow"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:44,columnNumber:11},this),s&&e.jsxDEV("button",{onClick:()=>{o("terminate"),l(!1)},className:"block w-full text-left px-4 py-2 text-xs text-status-error hover:bg-surface-hover",children:"Terminate"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:51,columnNumber:13},this),t&&e.jsxDEV(f,{to:`/mcp/queries/${a}?step=3`,className:"block w-full text-left px-4 py-2 text-xs text-accent hover:bg-surface-hover",onClick:()=>l(!1),children:"Compile into Pipeline"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:59,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:43,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:38,columnNumber:5},this)}function de(){const{workflowId:s}=B(),{pathname:t}=J();S(s);const a=(t.startsWith("/workflows/durable/"),"Durable Execution"),{data:o,isLoading:r,error:l,refetch:d,isFetching:n}=I(s),{data:x}=A(s),{data:u}=K(s),{data:p}=C(s),V=M(),w=R(),{isCollapsed:b,toggle:N}=$("workflow-execution"),y=c=>{var i;if(c==="terminate")confirm("Are you sure you want to terminate this workflow?")&&w.mutate(s);else if(c==="restart"&&o){const H=o.workflow_id.replace(/-[A-Za-z0-9_-]{20,}$/,""),h=o.events.find(_=>_.event_type==="workflow_execution_started"),E=(i=h==null?void 0:h.attributes)==null?void 0:i.input;E&&sessionStorage.setItem("lt:invoke:prefill",JSON.stringify(E)),V(`/workflows/start?type=${encodeURIComponent(H)}&mode=now`)}};if(r)return e.jsxDEV("div",{className:"animate-pulse space-y-4",children:[e.jsxDEV("div",{className:"h-8 bg-surface-sunken rounded w-64"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:110,columnNumber:9},this),e.jsxDEV("div",{className:"h-60 bg-surface-sunken rounded"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:111,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:109,columnNumber:7},this);if(l||!o){const c=(l==null?void 0:l.message)??"",i=c.includes("expired")||c.includes("no longer available");return e.jsxDEV("div",{children:[e.jsxDEV(f,{to:"/workflows/executions",className:"text-xs text-text-tertiary hover:text-text-primary",children:"← Workflows"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:122,columnNumber:9},this),e.jsxDEV("div",{className:"mt-4 text-center py-8",children:[e.jsxDEV("p",{className:"text-sm text-text-primary mb-1",children:i?"Execution data is no longer available":l?"Unable to load execution":"Execution not found"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:126,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:i?"This workflow's underlying job has expired. The task record is preserved, but the execution timeline has been cleaned up.":c||"The workflow could not be resolved."},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:133,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:125,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:121,columnNumber:7},this)}const W=o.status!=="completed"&&o.status!=="failed",P=o.status==="completed"&&o.events.some(c=>{if(c.event_type!=="activity_task_completed")return!1;const i=c.attributes.activity_type;return i==="callDbTool"||i==="callVisionTool"||i==="callMcpTool"||(i==null?void 0:i.startsWith("mcp_"))});return e.jsxDEV("div",{children:[e.jsxDEV(Q,{title:a,actions:e.jsxDEV("div",{className:"flex items-center gap-3",children:[e.jsxDEV(z,{onRefresh:()=>d(),isFetching:n,apiPath:`/workflow-states/${s}/execution`},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:158,columnNumber:13},this),e.jsxDEV(j,{status:o.status},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:163,columnNumber:13},this),e.jsxDEV(G,{isRunning:W,hasToolCalls:P,workflowId:s,onAction:y},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:164,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:157,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:154,columnNumber:7},this),e.jsxDEV(U,{execution:o,task:x,childTasks:u==null?void 0:u.tasks,escalations:p==null?void 0:p.escalations},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:174,columnNumber:7},this),w.error&&e.jsxDEV("div",{className:"py-3 mb-6",children:e.jsxDEV("p",{className:"text-xs text-status-error",children:["Terminate failed: ",w.error.message]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:183,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:182,columnNumber:9},this),e.jsxDEV("div",{className:"space-y-6",children:[e.jsxDEV(g,{title:"Details",sectionKey:"details",isCollapsed:b("details"),onToggle:N,contentClassName:"mt-4 ml-9",children:e.jsxDEV(Z,{execution:o},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:192,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:191,columnNumber:9},this),e.jsxDEV(g,{title:"Execution Timeline",sectionKey:"timeline",isCollapsed:b("timeline"),onToggle:N,contentClassName:"mt-4 ml-9",children:e.jsxDEV(O,{events:o.events,childTasks:u==null?void 0:u.tasks},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:196,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:195,columnNumber:9},this),e.jsxDEV(g,{title:"Events",sectionKey:"events",isCollapsed:b("events"),onToggle:N,contentClassName:"mt-4 ml-9",children:e.jsxDEV(L,{events:o.events,childTasks:u==null?void 0:u.tasks},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:203,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:202,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:190,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/WorkflowExecutionPage.tsx",lineNumber:153,columnNumber:5},this)}export{de as WorkflowExecutionPage};
2
+ //# sourceMappingURL=WorkflowExecutionPage-C61R-3Gg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowExecutionPage-DWlNYb2M.js","sources":["../../src/pages/workflows/workflow-execution/ExecutionHeader.tsx","../../src/pages/workflows/workflow-execution/ExecutionInputResult.tsx","../../src/pages/workflows/WorkflowExecutionPage.tsx"],"sourcesContent":["import { Link } from 'react-router-dom';\nimport { StatusBadge } from '../../../components/common/display/StatusBadge';\nimport type { WorkflowExecution, LTTaskRecord, LTEscalationRecord } from '../../../api/types';\nimport { DateValue } from '../../../components/common/display/DateValue';\nimport { DurationValue } from '../../../components/common/display/DurationValue';\n\nfunction MetadataField({\n label,\n value,\n mono,\n truncate,\n children,\n}: {\n label: string;\n value?: string;\n mono?: boolean;\n truncate?: boolean;\n children?: React.ReactNode;\n}) {\n return (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n {label}\n </p>\n {children || (\n <p\n className={`text-xs text-text-primary ${mono ? 'font-mono' : ''} ${truncate ? 'truncate' : ''}`}\n title={truncate ? value : undefined}\n >\n {value}\n </p>\n )}\n </div>\n );\n}\n\n/**\n * Split a HotMesh compound entity key (taskQueue-workflowName) on the last '-'.\n * Workflow names are camelCase, so the last segment is always the workflow type.\n */\nfunction splitEntityKey(compound: string): { taskQueue: string; workflowType: string } {\n const lastDash = compound.lastIndexOf('-');\n if (lastDash <= 0) return { taskQueue: compound, workflowType: compound };\n return {\n taskQueue: compound.substring(0, lastDash),\n workflowType: compound.substring(lastDash + 1),\n };\n}\n\ninterface ExecutionHeaderProps {\n execution: WorkflowExecution;\n task?: LTTaskRecord | null;\n childTasks?: LTTaskRecord[];\n escalations?: LTEscalationRecord[];\n}\n\nexport function ExecutionHeader({ execution, task, escalations }: ExecutionHeaderProps) {\n // Determine parent relationship\n const isLeaf = task && task.workflow_id === execution.workflow_id;\n const parentWorkflowId = isLeaf ? task.parent_workflow_id : null;\n\n // Split compound HotMesh keys into separate task queue / workflow type\n const { taskQueue, workflowType } = splitEntityKey(execution.workflow_type);\n\n return (\n <div className=\"px-6 py-6 mb-6\">\n\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-y-4 gap-x-8\">\n <MetadataField label=\"Workflow Type\" value={workflowType} mono />\n <MetadataField label=\"Task Queue\" value={taskQueue} mono />\n <MetadataField label=\"Start Time\">\n {execution.start_time\n ? <DateValue date={execution.start_time} format=\"datetime\" className=\"text-text-primary\" />\n : <span className=\"text-xs text-text-tertiary\">--</span>}\n </MetadataField>\n <MetadataField label=\"End Time\">\n {execution.close_time\n ? <DateValue date={execution.close_time} format=\"datetime\" className=\"text-text-primary\" />\n : <span className=\"text-xs text-text-tertiary\">--</span>}\n </MetadataField>\n <MetadataField label=\"Duration\">\n <DurationValue ms={execution.duration_ms} className=\"font-mono text-text-primary\" />\n </MetadataField>\n <MetadataField\n label=\"History Size\"\n value={`${execution.summary.total_events} events`}\n />\n <MetadataField\n label=\"Activities\"\n value={`${execution.summary.activities.completed} / ${execution.summary.activities.total}`}\n />\n <MetadataField\n label=\"Run ID\"\n value={execution.workflow_id}\n mono\n truncate\n />\n </div>\n\n {/* Related links */}\n {(parentWorkflowId || task || (escalations && escalations.length > 0)) && (\n <div className=\"mt-5 pt-4 border-t border-surface-border space-y-3\">\n {/* Parent navigation */}\n {parentWorkflowId && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary shrink-0\">\n Parent\n </span>\n <Link\n to={`/workflows/executions/${parentWorkflowId}`}\n className=\"text-xs font-mono text-accent hover:underline truncate\"\n title={parentWorkflowId}\n >\n {parentWorkflowId}\n </Link>\n </div>\n )}\n\n {/* Process link — deep-links to process list filtered by this workflow */}\n {false && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary shrink-0\">\n Process\n </span>\n <Link\n to={`/processes/all?search=${encodeURIComponent(execution.workflow_id)}`}\n className=\"text-xs font-mono text-accent hover:underline truncate\"\n >\n Find in Processes\n </Link>\n </div>\n )}\n\n {/* Escalation links */}\n {escalations && escalations.length > 0 && (\n <div className=\"flex items-start gap-2\">\n <span className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary shrink-0 mt-0.5\">\n {escalations.length === 1 ? 'Escalation' : 'Escalations'}\n </span>\n <div className=\"flex flex-wrap gap-x-4 gap-y-1\">\n {escalations.map((esc) => (\n <Link\n key={esc.id}\n to={`/escalations/detail/${esc.id}`}\n className=\"inline-flex items-center gap-1.5 text-xs font-mono text-accent hover:underline\"\n >\n <span>{esc.type}</span>\n <StatusBadge status={esc.status} />\n </Link>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { JsonViewer } from '../../../components/common/data/JsonViewer';\nimport type { WorkflowExecution } from '../../../api/types';\n\ninterface ExecutionInputResultProps {\n execution: WorkflowExecution;\n}\n\n/**\n * Extract the workflow input envelope from the workflow_execution_started event.\n * HotMesh 0.13.0+ includes the actual trigger arguments (the envelope passed\n * to startWorkflow) in the start event's `input` attribute.\n */\nfunction extractInput(execution: WorkflowExecution): Record<string, unknown> | null {\n const startEvent = execution.events.find(\n (e) => e.event_type === 'workflow_execution_started',\n );\n const input = (startEvent?.attributes as any)?.input;\n return input && typeof input === 'object' ? input : null;\n}\n\nexport function ExecutionInputResult({ execution }: ExecutionInputResultProps) {\n const input = extractInput(execution);\n\n // Result: unwrap the workflow return — the `data` field is what LT users care about\n const rawResult = execution.result as Record<string, unknown> | null | undefined;\n const result = rawResult?.data ?? rawResult ?? null;\n\n if (!input && !result) return null;\n\n return (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6\">\n {input !== null && (\n <div>\n <JsonViewer data={input} label=\"Input Envelope\" />\n </div>\n )}\n {result !== null && (\n <div>\n <JsonViewer data={result} label=\"Result\" />\n </div>\n )}\n </div>\n );\n}\n","import { useState, useRef, useEffect } from 'react';\nimport { useParams, useLocation, useNavigate, Link } from 'react-router-dom';\nimport { useWorkflowExecution, useTerminateWorkflow } from '../../api/workflows';\nimport { useWorkflowDetailEvents } from '../../hooks/useEventHooks';\nimport { useCollapsedSections } from '../../hooks/useCollapsedSections';\nimport { useTaskByWorkflowId, useChildTasks } from '../../api/tasks';\nimport { useEscalationsByWorkflowId } from '../../api/escalations';\n\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { CollapsibleSection } from '../../components/common/layout/CollapsibleSection';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\nimport { StatusBadge } from '../../components/common/display/StatusBadge';\n\nimport { ExecutionHeader } from './workflow-execution/ExecutionHeader';\nimport { ExecutionInputResult } from './workflow-execution/ExecutionInputResult';\nimport { SwimlaneTimeline } from './workflow-execution/SwimlaneTimeline';\nimport { EventTable } from './workflow-execution/EventTable';\n\nfunction ActionsDropdown({ isRunning, hasToolCalls, workflowId, onAction }: {\n isRunning: boolean;\n hasToolCalls: boolean;\n workflowId: string;\n onAction: (action: 'restart' | 'terminate') => void;\n}) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open]);\n\n return (\n <div className=\"relative\" ref={ref}>\n <button onClick={() => setOpen(!open)} className=\"btn-primary text-xs\">\n Actions\n </button>\n {open && (\n <div className=\"absolute right-0 mt-1 w-44 bg-surface-raised border border-surface-border rounded-md shadow-lg z-10\">\n <button\n onClick={() => { onAction('restart'); setOpen(false); }}\n className=\"block w-full text-left px-4 py-2 text-xs text-text-secondary hover:bg-surface-hover\"\n >\n Restart Workflow\n </button>\n {isRunning && (\n <button\n onClick={() => { onAction('terminate'); setOpen(false); }}\n className=\"block w-full text-left px-4 py-2 text-xs text-status-error hover:bg-surface-hover\"\n >\n Terminate\n </button>\n )}\n {hasToolCalls && (\n <Link\n to={`/mcp/queries/${workflowId}?step=3`}\n className=\"block w-full text-left px-4 py-2 text-xs text-accent hover:bg-surface-hover\"\n onClick={() => setOpen(false)}\n >\n Compile into Pipeline\n </Link>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport function WorkflowExecutionPage() {\n const { workflowId } = useParams<{ workflowId: string }>();\n const { pathname } = useLocation();\n useWorkflowDetailEvents(workflowId);\n\n const executionTitle = pathname.startsWith('/workflows/durable/')\n ? 'Durable Execution'\n : 'Durable Execution';\n const { data: execution, isLoading, error, refetch, isFetching } = useWorkflowExecution(workflowId!);\n const { data: task } = useTaskByWorkflowId(workflowId!);\n const { data: childTasksData } = useChildTasks(workflowId!);\n const { data: escalationsData } = useEscalationsByWorkflowId(workflowId);\n const navigate = useNavigate();\n const terminateMutation = useTerminateWorkflow();\n const { isCollapsed, toggle } = useCollapsedSections('workflow-execution');\n\n const handleAction = (action: 'restart' | 'terminate') => {\n if (action === 'terminate') {\n if (confirm('Are you sure you want to terminate this workflow?')) {\n terminateMutation.mutate(workflowId!);\n }\n } else if (action === 'restart' && execution) {\n // Extract entity from workflow_id (format: {entity}-{guid})\n const entity = execution.workflow_id.replace(/-[A-Za-z0-9_-]{20,}$/, '');\n // Extract original input from the started event\n const startEvent = execution.events.find((e) => e.event_type === 'workflow_execution_started');\n const input = (startEvent?.attributes as any)?.input;\n if (input) {\n sessionStorage.setItem('lt:invoke:prefill', JSON.stringify(input));\n }\n navigate(`/workflows/start?type=${encodeURIComponent(entity)}&mode=now`);\n }\n };\n\n if (isLoading) {\n return (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-64\" />\n <div className=\"h-60 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n if (error || !execution) {\n const msg = (error as Error)?.message ?? '';\n const isExpired = msg.includes('expired') || msg.includes('no longer available');\n\n return (\n <div>\n <Link to=\"/workflows/executions\" className=\"text-xs text-text-tertiary hover:text-text-primary\">\n &larr; Workflows\n </Link>\n <div className=\"mt-4 text-center py-8\">\n <p className=\"text-sm text-text-primary mb-1\">\n {isExpired\n ? 'Execution data is no longer available'\n : error\n ? 'Unable to load execution'\n : 'Execution not found'}\n </p>\n <p className=\"text-xs text-text-tertiary\">\n {isExpired\n ? \"This workflow's underlying job has expired. The task record is preserved, but the execution timeline has been cleaned up.\"\n : msg || 'The workflow could not be resolved.'}\n </p>\n </div>\n </div>\n );\n }\n\n const isRunning = execution.status !== 'completed' && execution.status !== 'failed';\n const hasToolCalls = execution.status === 'completed' && execution.events.some(\n (e) => {\n if (e.event_type !== 'activity_task_completed') return false;\n const actType = (e.attributes as any).activity_type;\n return actType === 'callDbTool' || actType === 'callVisionTool' || actType === 'callMcpTool' || actType?.startsWith('mcp_');\n },\n );\n\n return (\n <div>\n <PageHeader\n title={executionTitle}\n actions={\n <div className=\"flex items-center gap-3\">\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={`/workflow-states/${workflowId}/execution`}\n />\n <StatusBadge status={execution.status} />\n <ActionsDropdown\n isRunning={isRunning}\n hasToolCalls={hasToolCalls}\n workflowId={workflowId!}\n onAction={handleAction}\n />\n </div>\n }\n />\n\n <ExecutionHeader\n execution={execution}\n task={task}\n childTasks={childTasksData?.tasks}\n escalations={escalationsData?.escalations}\n />\n\n {terminateMutation.error && (\n <div className=\"py-3 mb-6\">\n <p className=\"text-xs text-status-error\">\n Terminate failed: {terminateMutation.error.message}\n </p>\n </div>\n )}\n\n\n <div className=\"space-y-6\">\n <CollapsibleSection title=\"Details\" sectionKey=\"details\" isCollapsed={isCollapsed('details')} onToggle={toggle} contentClassName=\"mt-4 ml-9\">\n <ExecutionInputResult execution={execution} />\n </CollapsibleSection>\n\n <CollapsibleSection title=\"Execution Timeline\" sectionKey=\"timeline\" isCollapsed={isCollapsed('timeline')} onToggle={toggle} contentClassName=\"mt-4 ml-9\">\n <SwimlaneTimeline\n events={execution.events}\n childTasks={childTasksData?.tasks}\n />\n </CollapsibleSection>\n\n <CollapsibleSection title=\"Events\" sectionKey=\"events\" isCollapsed={isCollapsed('events')} onToggle={toggle} contentClassName=\"mt-4 ml-9\">\n <EventTable\n events={execution.events}\n childTasks={childTasksData?.tasks}\n />\n </CollapsibleSection>\n </div>\n </div>\n );\n}\n"],"names":["MetadataField","label","value","mono","truncate","children","jsx","splitEntityKey","compound","lastDash","ExecutionHeader","execution","task","escalations","parentWorkflowId","taskQueue","workflowType","jsxs","DateValue","DurationValue","Link","esc","StatusBadge","extractInput","startEvent","e","input","_a","ExecutionInputResult","rawResult","result","JsonViewer","ActionsDropdown","isRunning","hasToolCalls","workflowId","onAction","open","setOpen","useState","ref","useRef","useEffect","handler","WorkflowExecutionPage","useParams","pathname","useLocation","useWorkflowDetailEvents","executionTitle","isLoading","error","refetch","isFetching","useWorkflowExecution","useTaskByWorkflowId","childTasksData","useChildTasks","escalationsData","useEscalationsByWorkflowId","navigate","useNavigate","terminateMutation","useTerminateWorkflow","isCollapsed","toggle","useCollapsedSections","handleAction","action","entity","msg","isExpired","actType","PageHeader","ListToolbar","CollapsibleSection","SwimlaneTimeline","EventTable"],"mappings":"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"}
1
+ {"version":3,"file":"WorkflowExecutionPage-C61R-3Gg.js","sources":["../../src/pages/workflows/workflow-execution/ExecutionHeader.tsx","../../src/pages/workflows/workflow-execution/ExecutionInputResult.tsx","../../src/pages/workflows/WorkflowExecutionPage.tsx"],"sourcesContent":["import { Link } from 'react-router-dom';\nimport { StatusBadge } from '../../../components/common/display/StatusBadge';\nimport type { WorkflowExecution, LTTaskRecord, LTEscalationRecord } from '../../../api/types';\nimport { DateValue } from '../../../components/common/display/DateValue';\nimport { DurationValue } from '../../../components/common/display/DurationValue';\n\nfunction MetadataField({\n label,\n value,\n mono,\n truncate,\n children,\n}: {\n label: string;\n value?: string;\n mono?: boolean;\n truncate?: boolean;\n children?: React.ReactNode;\n}) {\n return (\n <div>\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n {label}\n </p>\n {children || (\n <p\n className={`text-xs text-text-primary ${mono ? 'font-mono' : ''} ${truncate ? 'truncate' : ''}`}\n title={truncate ? value : undefined}\n >\n {value}\n </p>\n )}\n </div>\n );\n}\n\n/**\n * Split a HotMesh compound entity key (taskQueue-workflowName) on the last '-'.\n * Workflow names are camelCase, so the last segment is always the workflow type.\n */\nfunction splitEntityKey(compound: string): { taskQueue: string; workflowType: string } {\n const lastDash = compound.lastIndexOf('-');\n if (lastDash <= 0) return { taskQueue: compound, workflowType: compound };\n return {\n taskQueue: compound.substring(0, lastDash),\n workflowType: compound.substring(lastDash + 1),\n };\n}\n\ninterface ExecutionHeaderProps {\n execution: WorkflowExecution;\n task?: LTTaskRecord | null;\n childTasks?: LTTaskRecord[];\n escalations?: LTEscalationRecord[];\n}\n\nexport function ExecutionHeader({ execution, task, escalations }: ExecutionHeaderProps) {\n // Determine parent relationship\n const isLeaf = task && task.workflow_id === execution.workflow_id;\n const parentWorkflowId = isLeaf ? task.parent_workflow_id : null;\n\n // Split compound HotMesh keys into separate task queue / workflow type\n const { taskQueue, workflowType } = splitEntityKey(execution.workflow_type);\n\n return (\n <div className=\"px-6 py-6 mb-6\">\n\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-y-4 gap-x-8\">\n <MetadataField label=\"Workflow Type\" value={workflowType} mono />\n <MetadataField label=\"Task Queue\" value={taskQueue} mono />\n <MetadataField label=\"Start Time\">\n {execution.start_time\n ? <DateValue date={execution.start_time} format=\"datetime\" className=\"text-text-primary\" />\n : <span className=\"text-xs text-text-tertiary\">--</span>}\n </MetadataField>\n <MetadataField label=\"End Time\">\n {execution.close_time\n ? <DateValue date={execution.close_time} format=\"datetime\" className=\"text-text-primary\" />\n : <span className=\"text-xs text-text-tertiary\">--</span>}\n </MetadataField>\n <MetadataField label=\"Duration\">\n <DurationValue ms={execution.duration_ms} className=\"font-mono text-text-primary\" />\n </MetadataField>\n <MetadataField\n label=\"History Size\"\n value={`${execution.summary.total_events} events`}\n />\n <MetadataField\n label=\"Activities\"\n value={`${execution.summary.activities.completed} / ${execution.summary.activities.total}`}\n />\n <MetadataField\n label=\"Run ID\"\n value={execution.workflow_id}\n mono\n truncate\n />\n </div>\n\n {/* Related links */}\n {(parentWorkflowId || task || (escalations && escalations.length > 0)) && (\n <div className=\"mt-5 pt-4 border-t border-surface-border space-y-3\">\n {/* Parent navigation */}\n {parentWorkflowId && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary shrink-0\">\n Parent\n </span>\n <Link\n to={`/workflows/executions/${parentWorkflowId}`}\n className=\"text-xs font-mono text-accent hover:underline truncate\"\n title={parentWorkflowId}\n >\n {parentWorkflowId}\n </Link>\n </div>\n )}\n\n {/* Process link — deep-links to process list filtered by this workflow */}\n {false && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary shrink-0\">\n Process\n </span>\n <Link\n to={`/processes/all?search=${encodeURIComponent(execution.workflow_id)}`}\n className=\"text-xs font-mono text-accent hover:underline truncate\"\n >\n Find in Processes\n </Link>\n </div>\n )}\n\n {/* Escalation links */}\n {escalations && escalations.length > 0 && (\n <div className=\"flex items-start gap-2\">\n <span className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary shrink-0 mt-0.5\">\n {escalations.length === 1 ? 'Escalation' : 'Escalations'}\n </span>\n <div className=\"flex flex-wrap gap-x-4 gap-y-1\">\n {escalations.map((esc) => (\n <Link\n key={esc.id}\n to={`/escalations/detail/${esc.id}`}\n className=\"inline-flex items-center gap-1.5 text-xs font-mono text-accent hover:underline\"\n >\n <span>{esc.type}</span>\n <StatusBadge status={esc.status} />\n </Link>\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { JsonViewer } from '../../../components/common/data/JsonViewer';\nimport type { WorkflowExecution } from '../../../api/types';\n\ninterface ExecutionInputResultProps {\n execution: WorkflowExecution;\n}\n\n/**\n * Extract the workflow input envelope from the workflow_execution_started event.\n * HotMesh 0.13.0+ includes the actual trigger arguments (the envelope passed\n * to startWorkflow) in the start event's `input` attribute.\n */\nfunction extractInput(execution: WorkflowExecution): Record<string, unknown> | null {\n const startEvent = execution.events.find(\n (e) => e.event_type === 'workflow_execution_started',\n );\n const input = (startEvent?.attributes as any)?.input;\n return input && typeof input === 'object' ? input : null;\n}\n\nexport function ExecutionInputResult({ execution }: ExecutionInputResultProps) {\n const input = extractInput(execution);\n\n // Result: unwrap the workflow return — the `data` field is what LT users care about\n const rawResult = execution.result as Record<string, unknown> | null | undefined;\n const result = rawResult?.data ?? rawResult ?? null;\n\n if (!input && !result) return null;\n\n return (\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4 mb-6\">\n {input !== null && (\n <div>\n <JsonViewer data={input} label=\"Input Envelope\" />\n </div>\n )}\n {result !== null && (\n <div>\n <JsonViewer data={result} label=\"Result\" />\n </div>\n )}\n </div>\n );\n}\n","import { useState, useRef, useEffect } from 'react';\nimport { useParams, useLocation, useNavigate, Link } from 'react-router-dom';\nimport { useWorkflowExecution, useTerminateWorkflow } from '../../api/workflows';\nimport { useWorkflowDetailEvents } from '../../hooks/useEventHooks';\nimport { useCollapsedSections } from '../../hooks/useCollapsedSections';\nimport { useTaskByWorkflowId, useChildTasks } from '../../api/tasks';\nimport { useEscalationsByWorkflowId } from '../../api/escalations';\n\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { CollapsibleSection } from '../../components/common/layout/CollapsibleSection';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\nimport { StatusBadge } from '../../components/common/display/StatusBadge';\n\nimport { ExecutionHeader } from './workflow-execution/ExecutionHeader';\nimport { ExecutionInputResult } from './workflow-execution/ExecutionInputResult';\nimport { SwimlaneTimeline } from './workflow-execution/SwimlaneTimeline';\nimport { EventTable } from './workflow-execution/EventTable';\n\nfunction ActionsDropdown({ isRunning, hasToolCalls, workflowId, onAction }: {\n isRunning: boolean;\n hasToolCalls: boolean;\n workflowId: string;\n onAction: (action: 'restart' | 'terminate') => void;\n}) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open]);\n\n return (\n <div className=\"relative\" ref={ref}>\n <button onClick={() => setOpen(!open)} className=\"btn-primary text-xs\">\n Actions\n </button>\n {open && (\n <div className=\"absolute right-0 mt-1 w-44 bg-surface-raised border border-surface-border rounded-md shadow-lg z-10\">\n <button\n onClick={() => { onAction('restart'); setOpen(false); }}\n className=\"block w-full text-left px-4 py-2 text-xs text-text-secondary hover:bg-surface-hover\"\n >\n Restart Workflow\n </button>\n {isRunning && (\n <button\n onClick={() => { onAction('terminate'); setOpen(false); }}\n className=\"block w-full text-left px-4 py-2 text-xs text-status-error hover:bg-surface-hover\"\n >\n Terminate\n </button>\n )}\n {hasToolCalls && (\n <Link\n to={`/mcp/queries/${workflowId}?step=3`}\n className=\"block w-full text-left px-4 py-2 text-xs text-accent hover:bg-surface-hover\"\n onClick={() => setOpen(false)}\n >\n Compile into Pipeline\n </Link>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport function WorkflowExecutionPage() {\n const { workflowId } = useParams<{ workflowId: string }>();\n const { pathname } = useLocation();\n useWorkflowDetailEvents(workflowId);\n\n const executionTitle = pathname.startsWith('/workflows/durable/')\n ? 'Durable Execution'\n : 'Durable Execution';\n const { data: execution, isLoading, error, refetch, isFetching } = useWorkflowExecution(workflowId!);\n const { data: task } = useTaskByWorkflowId(workflowId!);\n const { data: childTasksData } = useChildTasks(workflowId!);\n const { data: escalationsData } = useEscalationsByWorkflowId(workflowId);\n const navigate = useNavigate();\n const terminateMutation = useTerminateWorkflow();\n const { isCollapsed, toggle } = useCollapsedSections('workflow-execution');\n\n const handleAction = (action: 'restart' | 'terminate') => {\n if (action === 'terminate') {\n if (confirm('Are you sure you want to terminate this workflow?')) {\n terminateMutation.mutate(workflowId!);\n }\n } else if (action === 'restart' && execution) {\n // Extract entity from workflow_id (format: {entity}-{guid})\n const entity = execution.workflow_id.replace(/-[A-Za-z0-9_-]{20,}$/, '');\n // Extract original input from the started event\n const startEvent = execution.events.find((e) => e.event_type === 'workflow_execution_started');\n const input = (startEvent?.attributes as any)?.input;\n if (input) {\n sessionStorage.setItem('lt:invoke:prefill', JSON.stringify(input));\n }\n navigate(`/workflows/start?type=${encodeURIComponent(entity)}&mode=now`);\n }\n };\n\n if (isLoading) {\n return (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-64\" />\n <div className=\"h-60 bg-surface-sunken rounded\" />\n </div>\n );\n }\n\n if (error || !execution) {\n const msg = (error as Error)?.message ?? '';\n const isExpired = msg.includes('expired') || msg.includes('no longer available');\n\n return (\n <div>\n <Link to=\"/workflows/executions\" className=\"text-xs text-text-tertiary hover:text-text-primary\">\n &larr; Workflows\n </Link>\n <div className=\"mt-4 text-center py-8\">\n <p className=\"text-sm text-text-primary mb-1\">\n {isExpired\n ? 'Execution data is no longer available'\n : error\n ? 'Unable to load execution'\n : 'Execution not found'}\n </p>\n <p className=\"text-xs text-text-tertiary\">\n {isExpired\n ? \"This workflow's underlying job has expired. The task record is preserved, but the execution timeline has been cleaned up.\"\n : msg || 'The workflow could not be resolved.'}\n </p>\n </div>\n </div>\n );\n }\n\n const isRunning = execution.status !== 'completed' && execution.status !== 'failed';\n const hasToolCalls = execution.status === 'completed' && execution.events.some(\n (e) => {\n if (e.event_type !== 'activity_task_completed') return false;\n const actType = (e.attributes as any).activity_type;\n return actType === 'callDbTool' || actType === 'callVisionTool' || actType === 'callMcpTool' || actType?.startsWith('mcp_');\n },\n );\n\n return (\n <div>\n <PageHeader\n title={executionTitle}\n actions={\n <div className=\"flex items-center gap-3\">\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={`/workflow-states/${workflowId}/execution`}\n />\n <StatusBadge status={execution.status} />\n <ActionsDropdown\n isRunning={isRunning}\n hasToolCalls={hasToolCalls}\n workflowId={workflowId!}\n onAction={handleAction}\n />\n </div>\n }\n />\n\n <ExecutionHeader\n execution={execution}\n task={task}\n childTasks={childTasksData?.tasks}\n escalations={escalationsData?.escalations}\n />\n\n {terminateMutation.error && (\n <div className=\"py-3 mb-6\">\n <p className=\"text-xs text-status-error\">\n Terminate failed: {terminateMutation.error.message}\n </p>\n </div>\n )}\n\n\n <div className=\"space-y-6\">\n <CollapsibleSection title=\"Details\" sectionKey=\"details\" isCollapsed={isCollapsed('details')} onToggle={toggle} contentClassName=\"mt-4 ml-9\">\n <ExecutionInputResult execution={execution} />\n </CollapsibleSection>\n\n <CollapsibleSection title=\"Execution Timeline\" sectionKey=\"timeline\" isCollapsed={isCollapsed('timeline')} onToggle={toggle} contentClassName=\"mt-4 ml-9\">\n <SwimlaneTimeline\n events={execution.events}\n childTasks={childTasksData?.tasks}\n />\n </CollapsibleSection>\n\n <CollapsibleSection title=\"Events\" sectionKey=\"events\" isCollapsed={isCollapsed('events')} onToggle={toggle} contentClassName=\"mt-4 ml-9\">\n <EventTable\n events={execution.events}\n childTasks={childTasksData?.tasks}\n />\n </CollapsibleSection>\n </div>\n </div>\n );\n}\n"],"names":["MetadataField","label","value","mono","truncate","children","jsxDEV","splitEntityKey","compound","lastDash","ExecutionHeader","execution","task","escalations","parentWorkflowId","taskQueue","workflowType","DateValue","DurationValue","Link","esc","StatusBadge","extractInput","startEvent","e","input","_a","ExecutionInputResult","rawResult","result","JsonViewer","ActionsDropdown","isRunning","hasToolCalls","workflowId","onAction","open","setOpen","useState","ref","useRef","useEffect","handler","WorkflowExecutionPage","useParams","pathname","useLocation","useWorkflowDetailEvents","executionTitle","isLoading","error","refetch","isFetching","useWorkflowExecution","useTaskByWorkflowId","childTasksData","useChildTasks","escalationsData","useEscalationsByWorkflowId","navigate","useNavigate","terminateMutation","useTerminateWorkflow","isCollapsed","toggle","useCollapsedSections","handleAction","action","entity","msg","isExpired","actType","PageHeader","ListToolbar","CollapsibleSection","SwimlaneTimeline","EventTable"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{j as r}from"./index-CCOSf1PY.js";import{c as m,W as d,S as u,a6 as f}from"./vendor-icons-CBOM6Es0.js";const b=[{text:"text-rose-400",bg:"bg-rose-400/[0.08]"},{text:"text-pink-400",bg:"bg-pink-400/[0.08]"},{text:"text-fuchsia-400",bg:"bg-fuchsia-400/[0.08]"},{text:"text-purple-400",bg:"bg-purple-400/[0.08]"},{text:"text-violet-400",bg:"bg-violet-400/[0.08]"},{text:"text-indigo-400",bg:"bg-indigo-400/[0.08]"},{text:"text-blue-400",bg:"bg-blue-400/[0.08]"},{text:"text-sky-400",bg:"bg-sky-400/[0.08]"},{text:"text-cyan-400",bg:"bg-cyan-400/[0.08]"},{text:"text-teal-400",bg:"bg-teal-400/[0.08]"},{text:"text-emerald-400",bg:"bg-emerald-400/[0.08]"},{text:"text-green-400",bg:"bg-green-400/[0.08]"},{text:"text-lime-400",bg:"bg-lime-400/[0.08]"},{text:"text-yellow-400",bg:"bg-yellow-400/[0.08]"},{text:"text-amber-400",bg:"bg-amber-400/[0.08]"},{text:"text-orange-400",bg:"bg-orange-400/[0.08]"},{text:"text-red-400",bg:"bg-red-400/[0.08]"},{text:"text-stone-400",bg:"bg-stone-400/[0.08]"},{text:"text-rose-300",bg:"bg-rose-300/[0.08]"},{text:"text-violet-300",bg:"bg-violet-300/[0.08]"},{text:"text-sky-300",bg:"bg-sky-300/[0.08]"},{text:"text-teal-300",bg:"bg-teal-300/[0.08]"},{text:"text-amber-300",bg:"bg-amber-300/[0.08]"},{text:"text-pink-300",bg:"bg-pink-300/[0.08]"}];function h(e){let t=0;for(let o=0;o<e.length;o++)t=(t<<5)-t+e.charCodeAt(o)|0;return Math.abs(t)}function k(e){return b[h(e)%b.length]}const y={certified:f,configured:u,pipeline:d,durable:m},N={certified:"text-status-success",configured:"text-status-info"};function v({type:e,size:t="sm",certified:o,variant:g}){const l=t==="md"?"px-2.5 py-0.5 gap-1.5":t==="xs"?"px-1 py-px gap-0.5":"px-1.5 py-px gap-1",a=t==="md"?"13px":t==="xs"?"9px":"11px",i=t==="md"?"w-3.5 h-3.5":t==="xs"?"w-2 h-2":"w-2.5 h-2.5",s=g??(o?"certified":"durable"),c=y[s],n=N[s],x=n?null:k(e),p=n||((x==null?void 0:x.text)??"text-accent/75");return r.jsxDEV("span",{className:`inline-flex items-center ${l} font-mono text-text-secondary border border-surface-border rounded-lg`,style:{fontSize:a,lineHeight:1.1},children:[r.jsxDEV(c,{className:`${i} shrink-0 ${p}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/WorkflowPill.tsx",lineNumber:46,columnNumber:7},this),e]},void 0,!0,{fileName:"/app/dashboard/src/components/common/display/WorkflowPill.tsx",lineNumber:45,columnNumber:5},this)}export{v as W};
2
+ //# sourceMappingURL=WorkflowPill-7vt2F6wR.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowPill-BbgVTGgI.js","sources":["../../src/lib/type-color.ts","../../src/components/common/display/WorkflowPill.tsx"],"sourcesContent":["/**\n * Deterministic color assignment for workflow type names.\n *\n * Maps any string to a consistent color from a curated 24-color palette.\n * The same type name always produces the same color across the entire UI.\n * Uses a simple hash to distribute names evenly across the palette.\n *\n * Each entry provides:\n * text — icon and text color (Tailwind class)\n * bg — subtle background tint (Tailwind class)\n */\n\nconst PALETTE: Array<{ text: string; bg: string }> = [\n { text: 'text-rose-400', bg: 'bg-rose-400/[0.08]' },\n { text: 'text-pink-400', bg: 'bg-pink-400/[0.08]' },\n { text: 'text-fuchsia-400', bg: 'bg-fuchsia-400/[0.08]' },\n { text: 'text-purple-400', bg: 'bg-purple-400/[0.08]' },\n { text: 'text-violet-400', bg: 'bg-violet-400/[0.08]' },\n { text: 'text-indigo-400', bg: 'bg-indigo-400/[0.08]' },\n { text: 'text-blue-400', bg: 'bg-blue-400/[0.08]' },\n { text: 'text-sky-400', bg: 'bg-sky-400/[0.08]' },\n { text: 'text-cyan-400', bg: 'bg-cyan-400/[0.08]' },\n { text: 'text-teal-400', bg: 'bg-teal-400/[0.08]' },\n { text: 'text-emerald-400', bg: 'bg-emerald-400/[0.08]' },\n { text: 'text-green-400', bg: 'bg-green-400/[0.08]' },\n { text: 'text-lime-400', bg: 'bg-lime-400/[0.08]' },\n { text: 'text-yellow-400', bg: 'bg-yellow-400/[0.08]' },\n { text: 'text-amber-400', bg: 'bg-amber-400/[0.08]' },\n { text: 'text-orange-400', bg: 'bg-orange-400/[0.08]' },\n { text: 'text-red-400', bg: 'bg-red-400/[0.08]' },\n { text: 'text-stone-400', bg: 'bg-stone-400/[0.08]' },\n { text: 'text-rose-300', bg: 'bg-rose-300/[0.08]' },\n { text: 'text-violet-300', bg: 'bg-violet-300/[0.08]' },\n { text: 'text-sky-300', bg: 'bg-sky-300/[0.08]' },\n { text: 'text-teal-300', bg: 'bg-teal-300/[0.08]' },\n { text: 'text-amber-300', bg: 'bg-amber-300/[0.08]' },\n { text: 'text-pink-300', bg: 'bg-pink-300/[0.08]' },\n];\n\nfunction hash(str: string): number {\n let h = 0;\n for (let i = 0; i < str.length; i++) {\n h = ((h << 5) - h + str.charCodeAt(i)) | 0;\n }\n return Math.abs(h);\n}\n\nexport function typeColor(typeName: string): { text: string; bg: string } {\n return PALETTE[hash(typeName) % PALETTE.length];\n}\n","import { Workflow, ShieldCheck, Settings, Wand2 } from 'lucide-react';\nimport { typeColor } from '../../../lib/type-color';\n\ntype WorkflowVariant = 'durable' | 'configured' | 'certified' | 'pipeline';\n\ninterface WorkflowPillProps {\n type: string;\n size?: 'xs' | 'sm' | 'md';\n /** @deprecated Use `variant` instead */\n certified?: boolean;\n variant?: WorkflowVariant;\n}\n\nconst VARIANT_ICON: Record<WorkflowVariant, typeof Workflow> = {\n certified: ShieldCheck,\n configured: Settings,\n pipeline: Wand2,\n durable: Workflow,\n};\n\nconst VARIANT_FIXED_COLOR: Record<string, string> = {\n certified: 'text-status-success',\n configured: 'text-status-info',\n};\n\nexport function WorkflowPill({ type, size = 'sm', certified, variant }: WorkflowPillProps) {\n const sizeClass = size === 'md'\n ? 'px-2.5 py-0.5 gap-1.5'\n : size === 'xs'\n ? 'px-1 py-px gap-0.5'\n : 'px-1.5 py-px gap-1';\n const fontSize = size === 'md' ? '13px' : size === 'xs' ? '9px' : '11px';\n const iconClass = size === 'md' ? 'w-3.5 h-3.5' : size === 'xs' ? 'w-2 h-2' : 'w-2.5 h-2.5';\n\n const resolved = variant ?? (certified ? 'certified' : 'durable');\n const Icon = VARIANT_ICON[resolved];\n\n // Pipeline and durable variants get a type-name-derived color.\n // Certified and configured keep their fixed semantic colors.\n const fixedColor = VARIANT_FIXED_COLOR[resolved];\n const derived = fixedColor ? null : typeColor(type);\n const iconColor = fixedColor || (derived?.text ?? 'text-accent/75');\n\n return (\n <span className={`inline-flex items-center ${sizeClass} font-mono text-text-secondary border border-surface-border rounded-lg`} style={{ fontSize, lineHeight: 1.1 }}>\n <Icon className={`${iconClass} shrink-0 ${iconColor}`} />\n {type}\n </span>\n );\n}\n"],"names":["PALETTE","hash","str","h","i","typeColor","typeName","VARIANT_ICON","ShieldCheck","Settings","Wand2","Workflow","VARIANT_FIXED_COLOR","WorkflowPill","type","size","certified","variant","sizeClass","fontSize","iconClass","resolved","Icon","fixedColor","derived","iconColor","jsxs","jsx"],"mappings":"oHAYA,MAAMA,EAA+C,CACnD,CAAE,KAAM,gBAAqB,GAAI,oBAAA,EACjC,CAAE,KAAM,gBAAqB,GAAI,oBAAA,EACjC,CAAE,KAAM,mBAAqB,GAAI,uBAAA,EACjC,CAAE,KAAM,kBAAqB,GAAI,sBAAA,EACjC,CAAE,KAAM,kBAAqB,GAAI,sBAAA,EACjC,CAAE,KAAM,kBAAqB,GAAI,sBAAA,EACjC,CAAE,KAAM,gBAAqB,GAAI,oBAAA,EACjC,CAAE,KAAM,eAAqB,GAAI,mBAAA,EACjC,CAAE,KAAM,gBAAqB,GAAI,oBAAA,EACjC,CAAE,KAAM,gBAAqB,GAAI,oBAAA,EACjC,CAAE,KAAM,mBAAqB,GAAI,uBAAA,EACjC,CAAE,KAAM,iBAAqB,GAAI,qBAAA,EACjC,CAAE,KAAM,gBAAqB,GAAI,oBAAA,EACjC,CAAE,KAAM,kBAAqB,GAAI,sBAAA,EACjC,CAAE,KAAM,iBAAqB,GAAI,qBAAA,EACjC,CAAE,KAAM,kBAAqB,GAAI,sBAAA,EACjC,CAAE,KAAM,eAAqB,GAAI,mBAAA,EACjC,CAAE,KAAM,iBAAqB,GAAI,qBAAA,EACjC,CAAE,KAAM,gBAAqB,GAAI,oBAAA,EACjC,CAAE,KAAM,kBAAqB,GAAI,sBAAA,EACjC,CAAE,KAAM,eAAqB,GAAI,mBAAA,EACjC,CAAE,KAAM,gBAAqB,GAAI,oBAAA,EACjC,CAAE,KAAM,iBAAqB,GAAI,qBAAA,EACjC,CAAE,KAAM,gBAAqB,GAAI,oBAAA,CACnC,EAEA,SAASC,EAAKC,EAAqB,CACjC,IAAIC,EAAI,EACR,QAASC,EAAI,EAAGA,EAAIF,EAAI,OAAQE,IAC9BD,GAAMA,GAAK,GAAKA,EAAID,EAAI,WAAWE,CAAC,EAAK,EAE3C,OAAO,KAAK,IAAID,CAAC,CACnB,CAEO,SAASE,EAAUC,EAAgD,CACxE,OAAON,EAAQC,EAAKK,CAAQ,EAAIN,EAAQ,MAAM,CAChD,CCpCA,MAAMO,EAAyD,CAC7D,UAAYC,EACZ,WAAYC,EACZ,SAAYC,EACZ,QAAYC,CACd,EAEMC,EAA8C,CAClD,UAAY,sBACZ,WAAY,kBACd,EAEO,SAASC,EAAa,CAAE,KAAAC,EAAM,KAAAC,EAAO,KAAM,UAAAC,EAAW,QAAAC,GAA8B,CACzF,MAAMC,EAAYH,IAAS,KACvB,wBACAA,IAAS,KACP,qBACA,qBACAI,EAAWJ,IAAS,KAAO,OAASA,IAAS,KAAO,MAAQ,OAC5DK,EAAYL,IAAS,KAAO,cAAgBA,IAAS,KAAO,UAAY,cAExEM,EAAWJ,IAAYD,EAAY,YAAc,WACjDM,EAAOf,EAAac,CAAQ,EAI5BE,EAAaX,EAAoBS,CAAQ,EACzCG,EAAUD,EAAa,KAAOlB,EAAUS,CAAI,EAC5CW,EAAYF,KAAeC,GAAA,YAAAA,EAAS,OAAQ,kBAElD,OACEE,EAAAA,KAAC,OAAA,CAAK,UAAW,4BAA4BR,CAAS,yEAA0E,MAAO,CAAE,SAAAC,EAAU,WAAY,GAAA,EAC7J,SAAA,CAAAQ,MAACL,GAAK,UAAW,GAAGF,CAAS,aAAaK,CAAS,GAAI,EACtDX,CAAA,EACH,CAEJ"}
1
+ {"version":3,"file":"WorkflowPill-7vt2F6wR.js","sources":["../../src/lib/type-color.ts","../../src/components/common/display/WorkflowPill.tsx"],"sourcesContent":["/**\n * Deterministic color assignment for workflow type names.\n *\n * Maps any string to a consistent color from a curated 24-color palette.\n * The same type name always produces the same color across the entire UI.\n * Uses a simple hash to distribute names evenly across the palette.\n *\n * Each entry provides:\n * text — icon and text color (Tailwind class)\n * bg — subtle background tint (Tailwind class)\n */\n\nconst PALETTE: Array<{ text: string; bg: string }> = [\n { text: 'text-rose-400', bg: 'bg-rose-400/[0.08]' },\n { text: 'text-pink-400', bg: 'bg-pink-400/[0.08]' },\n { text: 'text-fuchsia-400', bg: 'bg-fuchsia-400/[0.08]' },\n { text: 'text-purple-400', bg: 'bg-purple-400/[0.08]' },\n { text: 'text-violet-400', bg: 'bg-violet-400/[0.08]' },\n { text: 'text-indigo-400', bg: 'bg-indigo-400/[0.08]' },\n { text: 'text-blue-400', bg: 'bg-blue-400/[0.08]' },\n { text: 'text-sky-400', bg: 'bg-sky-400/[0.08]' },\n { text: 'text-cyan-400', bg: 'bg-cyan-400/[0.08]' },\n { text: 'text-teal-400', bg: 'bg-teal-400/[0.08]' },\n { text: 'text-emerald-400', bg: 'bg-emerald-400/[0.08]' },\n { text: 'text-green-400', bg: 'bg-green-400/[0.08]' },\n { text: 'text-lime-400', bg: 'bg-lime-400/[0.08]' },\n { text: 'text-yellow-400', bg: 'bg-yellow-400/[0.08]' },\n { text: 'text-amber-400', bg: 'bg-amber-400/[0.08]' },\n { text: 'text-orange-400', bg: 'bg-orange-400/[0.08]' },\n { text: 'text-red-400', bg: 'bg-red-400/[0.08]' },\n { text: 'text-stone-400', bg: 'bg-stone-400/[0.08]' },\n { text: 'text-rose-300', bg: 'bg-rose-300/[0.08]' },\n { text: 'text-violet-300', bg: 'bg-violet-300/[0.08]' },\n { text: 'text-sky-300', bg: 'bg-sky-300/[0.08]' },\n { text: 'text-teal-300', bg: 'bg-teal-300/[0.08]' },\n { text: 'text-amber-300', bg: 'bg-amber-300/[0.08]' },\n { text: 'text-pink-300', bg: 'bg-pink-300/[0.08]' },\n];\n\nfunction hash(str: string): number {\n let h = 0;\n for (let i = 0; i < str.length; i++) {\n h = ((h << 5) - h + str.charCodeAt(i)) | 0;\n }\n return Math.abs(h);\n}\n\nexport function typeColor(typeName: string): { text: string; bg: string } {\n return PALETTE[hash(typeName) % PALETTE.length];\n}\n","import { Workflow, ShieldCheck, Settings, Wand2 } from 'lucide-react';\nimport { typeColor } from '../../../lib/type-color';\n\ntype WorkflowVariant = 'durable' | 'configured' | 'certified' | 'pipeline';\n\ninterface WorkflowPillProps {\n type: string;\n size?: 'xs' | 'sm' | 'md';\n /** @deprecated Use `variant` instead */\n certified?: boolean;\n variant?: WorkflowVariant;\n}\n\nconst VARIANT_ICON: Record<WorkflowVariant, typeof Workflow> = {\n certified: ShieldCheck,\n configured: Settings,\n pipeline: Wand2,\n durable: Workflow,\n};\n\nconst VARIANT_FIXED_COLOR: Record<string, string> = {\n certified: 'text-status-success',\n configured: 'text-status-info',\n};\n\nexport function WorkflowPill({ type, size = 'sm', certified, variant }: WorkflowPillProps) {\n const sizeClass = size === 'md'\n ? 'px-2.5 py-0.5 gap-1.5'\n : size === 'xs'\n ? 'px-1 py-px gap-0.5'\n : 'px-1.5 py-px gap-1';\n const fontSize = size === 'md' ? '13px' : size === 'xs' ? '9px' : '11px';\n const iconClass = size === 'md' ? 'w-3.5 h-3.5' : size === 'xs' ? 'w-2 h-2' : 'w-2.5 h-2.5';\n\n const resolved = variant ?? (certified ? 'certified' : 'durable');\n const Icon = VARIANT_ICON[resolved];\n\n // Pipeline and durable variants get a type-name-derived color.\n // Certified and configured keep their fixed semantic colors.\n const fixedColor = VARIANT_FIXED_COLOR[resolved];\n const derived = fixedColor ? null : typeColor(type);\n const iconColor = fixedColor || (derived?.text ?? 'text-accent/75');\n\n return (\n <span className={`inline-flex items-center ${sizeClass} font-mono text-text-secondary border border-surface-border rounded-lg`} style={{ fontSize, lineHeight: 1.1 }}>\n <Icon className={`${iconClass} shrink-0 ${iconColor}`} />\n {type}\n </span>\n );\n}\n"],"names":["PALETTE","hash","str","h","i","typeColor","typeName","VARIANT_ICON","ShieldCheck","Settings","Wand2","Workflow","VARIANT_FIXED_COLOR","WorkflowPill","type","size","certified","variant","sizeClass","fontSize","iconClass","resolved","Icon","fixedColor","derived","iconColor","jsxDEV"],"mappings":"6GAYA,MAAMA,EAA+C,CACnD,CAAE,KAAM,gBAAqB,GAAI,oBAAA,EACjC,CAAE,KAAM,gBAAqB,GAAI,oBAAA,EACjC,CAAE,KAAM,mBAAqB,GAAI,uBAAA,EACjC,CAAE,KAAM,kBAAqB,GAAI,sBAAA,EACjC,CAAE,KAAM,kBAAqB,GAAI,sBAAA,EACjC,CAAE,KAAM,kBAAqB,GAAI,sBAAA,EACjC,CAAE,KAAM,gBAAqB,GAAI,oBAAA,EACjC,CAAE,KAAM,eAAqB,GAAI,mBAAA,EACjC,CAAE,KAAM,gBAAqB,GAAI,oBAAA,EACjC,CAAE,KAAM,gBAAqB,GAAI,oBAAA,EACjC,CAAE,KAAM,mBAAqB,GAAI,uBAAA,EACjC,CAAE,KAAM,iBAAqB,GAAI,qBAAA,EACjC,CAAE,KAAM,gBAAqB,GAAI,oBAAA,EACjC,CAAE,KAAM,kBAAqB,GAAI,sBAAA,EACjC,CAAE,KAAM,iBAAqB,GAAI,qBAAA,EACjC,CAAE,KAAM,kBAAqB,GAAI,sBAAA,EACjC,CAAE,KAAM,eAAqB,GAAI,mBAAA,EACjC,CAAE,KAAM,iBAAqB,GAAI,qBAAA,EACjC,CAAE,KAAM,gBAAqB,GAAI,oBAAA,EACjC,CAAE,KAAM,kBAAqB,GAAI,sBAAA,EACjC,CAAE,KAAM,eAAqB,GAAI,mBAAA,EACjC,CAAE,KAAM,gBAAqB,GAAI,oBAAA,EACjC,CAAE,KAAM,iBAAqB,GAAI,qBAAA,EACjC,CAAE,KAAM,gBAAqB,GAAI,oBAAA,CACnC,EAEA,SAASC,EAAKC,EAAqB,CACjC,IAAIC,EAAI,EACR,QAASC,EAAI,EAAGA,EAAIF,EAAI,OAAQE,IAC9BD,GAAMA,GAAK,GAAKA,EAAID,EAAI,WAAWE,CAAC,EAAK,EAE3C,OAAO,KAAK,IAAID,CAAC,CACnB,CAEO,SAASE,EAAUC,EAAgD,CACxE,OAAON,EAAQC,EAAKK,CAAQ,EAAIN,EAAQ,MAAM,CAChD,CCpCA,MAAMO,EAAyD,CAC7D,UAAYC,EACZ,WAAYC,EACZ,SAAYC,EACZ,QAAYC,CACd,EAEMC,EAA8C,CAClD,UAAY,sBACZ,WAAY,kBACd,EAEO,SAASC,EAAa,CAAE,KAAAC,EAAM,KAAAC,EAAO,KAAM,UAAAC,EAAW,QAAAC,GAA8B,CACzF,MAAMC,EAAYH,IAAS,KACvB,wBACAA,IAAS,KACP,qBACA,qBACAI,EAAWJ,IAAS,KAAO,OAASA,IAAS,KAAO,MAAQ,OAC5DK,EAAYL,IAAS,KAAO,cAAgBA,IAAS,KAAO,UAAY,cAExEM,EAAWJ,IAAYD,EAAY,YAAc,WACjDM,EAAOf,EAAac,CAAQ,EAI5BE,EAAaX,EAAoBS,CAAQ,EACzCG,EAAUD,EAAa,KAAOlB,EAAUS,CAAI,EAC5CW,EAAYF,KAAeC,GAAA,YAAAA,EAAS,OAAQ,kBAElD,OACEE,EAAAA,OAAC,OAAA,CAAK,UAAW,4BAA4BR,CAAS,yEAA0E,MAAO,CAAE,SAAAC,EAAU,WAAY,GAAA,EAC7J,SAAA,CAAAO,EAAAA,OAACJ,GAAK,UAAW,GAAGF,CAAS,aAAaK,CAAS,IAAnD,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAuD,EACtDX,CAAA,CAAA,EAFH,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAGA,CAEJ"}
@@ -0,0 +1,2 @@
1
+ import{i as $,j as a}from"./index-CCOSf1PY.js";import{a as u}from"./vendor-query-DLp59M9_.js";import{T as k}from"./TimestampCell-B4Pc6f3A.js";import{E as T}from"./ElapsedCell-ChyMzl9n.js";import{u as P,e as F,b as R}from"./workflows-Yq7cK-vR.js";import{b as z}from"./useEventHooks-VaJ52jMm.js";import{u as A}from"./useFilterParams-CGRYFw_A.js";import{D as L}from"./DataTable-J5R6mepB.js";import{W as M}from"./WorkflowPill-7vt2F6wR.js";import{P as I}from"./PageHeader-COcgWWf-.js";import{F as U,b as p}from"./FilterBar-Bdssa-Xn.js";import{S as O}from"./StickyPagination-CGk8VAKt.js";import{L as B}from"./ListToolbar-jy8NL6ll.js";import{R as H,a as g}from"./RowActions-Bs4PF-Gd.js";import{q,S as G}from"./vendor-icons-CBOM6Es0.js";import{c as J}from"./vendor-react-Co3Y8ikm.js";import"./EmptyState-BXGvOADa.js";const K={running:"in_progress",completed:"completed",failed:"failed"},Q={in_progress:"bg-status-active",completed:"bg-status-success",failed:"bg-status-error"},X={running:"text-status-active",completed:"text-status-success",failed:"text-status-error"};function Y(m,i,c,o,r){return[{key:"workflow_id",label:"Workflow ID / Type",render:e=>{const t=Q[K[e.status]??e.status]??"bg-status-pending",f=e.status==="running"?" animate-pulse":"";return a.jsxDEV("div",{className:"flex items-start gap-2 min-w-0",children:[a.jsxDEV("span",{className:`w-1.5 h-1.5 shrink-0 rounded-full mt-1.5 ${t}${f}`,title:e.status},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:55,columnNumber:13},this),a.jsxDEV("div",{className:"min-w-0",children:[a.jsxDEV("span",{className:"font-mono text-xs text-text-primary truncate block",children:e.workflow_id},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:57,columnNumber:15},this),a.jsxDEV("div",{className:"mt-0.5",children:a.jsxDEV(M,{type:e.entity,variant:r.get(e.entity)??"durable",size:"xs"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:61,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:60,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:56,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:54,columnNumber:11},this)}},{key:"created_at",label:"Created",render:e=>a.jsxDEV(k,{date:e.created_at},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:71,columnNumber:24},this),className:"w-40",sortable:!0},{key:"updated_at",label:"Updated",render:e=>a.jsxDEV(k,{date:e.updated_at},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:78,columnNumber:24},this),className:"w-40",sortable:!0},{key:"duration",label:"Duration",render:e=>a.jsxDEV(T,{startDate:e.created_at,endDate:e.status==="running"?null:e.updated_at,isLive:e.status==="running"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:86,columnNumber:9},this),className:"w-28"},{key:"actions",label:"",render:e=>a.jsxDEV(H,{children:[a.jsxDEV(g,{icon:q,title:`Filter by ${e.entity}`,onClick:()=>m(e.entity)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:99,columnNumber:11},this),a.jsxDEV("button",{onClick:t=>{t.stopPropagation(),i(e.status)},className:"opacity-0 group-hover/row:opacity-100 transition-opacity",title:`Filter by ${e.status}`,children:a.jsxDEV("svg",{className:`w-[18px] h-[18px] ${X[e.status]??"text-text-tertiary"} hover:opacity-70`,viewBox:"0 0 24 24",fill:"currentColor",children:a.jsxDEV("circle",{cx:"12",cy:"12",r:"6"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:110,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:109,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:104,columnNumber:11},this),c&&a.jsxDEV(g,{icon:G,title:"View config",onClick:()=>o(`/workflows/registry/${encodeURIComponent(e.entity)}`)},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:114,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:98,columnNumber:9},this),className:"w-24 text-right"}]}function he({tier:m="all"}){z();const i=J(),{isSuperAdmin:c}=$(),{filters:o,setFilter:r,pagination:e,sort:t,setSort:f}=A({filters:{search:"",entity:"",status:"",tier:m}}),n=o.tier||"all",x=n==="certified"?"true":n==="durable"?"false":void 0,{data:b}=P(),{data:h}=F(),v=u.useMemo(()=>{const s=new Map;for(const N of h??[])s.set(N.workflow_type,N.tier??"durable");return s},[h]),D=Y(s=>r("entity",s),s=>r("status",s),c,i,v),[d,y]=u.useState(o.search);u.useEffect(()=>{if(d===o.search)return;const s=setTimeout(()=>r("search",d),300);return()=>clearTimeout(s)},[d,r,o.search]);const{data:l,isLoading:E,refetch:W,isFetching:j}=R({limit:e.pageSize,offset:e.offset,entity:o.entity||void 0,search:o.search||void 0,status:o.status||void 0,sort_by:t.sort_by||void 0,order:t.sort_by?t.order:void 0,registered:x}),w=(l==null?void 0:l.total)??0,V=(l==null?void 0:l.jobs)??[],S=u.useMemo(()=>[...new Set((b??[]).map(s=>s.workflow_type))].sort(),[b]),C="Durable Executions",_=n==="certified"?"No certified workflow executions found":n==="durable"?"No durable workflow executions found":"No workflow executions found";return a.jsxDEV("div",{children:[a.jsxDEV(I,{title:C,docsHash:"#docs:dashboard.md:durable-executions"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:197,columnNumber:7},this),a.jsxDEV(U,{actions:a.jsxDEV(B,{onRefresh:()=>W(),isFetching:j,apiPath:`/workflow-states/jobs?limit=${e.pageSize}&offset=${e.offset}${o.entity?`&entity=${o.entity}`:""}${o.search?`&search=${o.search}`:""}${o.status?`&status=${o.status}`:""}${t.sort_by?`&sort_by=${t.sort_by}&order=${t.order}`:""}`},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:200,columnNumber:9},this),children:[a.jsxDEV("input",{type:"text",placeholder:"Search workflow ID...",value:d,onChange:s=>y(s.target.value),className:"input text-[11px] py-1 px-2 w-56"},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:206,columnNumber:9},this),a.jsxDEV(p,{label:"Type",value:o.entity,onChange:s=>r("entity",s),options:S.map(s=>({value:s,label:s}))},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:213,columnNumber:9},this),a.jsxDEV(p,{label:"Status",value:o.status,onChange:s=>r("status",s),options:[{value:"running",label:"Running"},{value:"completed",label:"Completed"},{value:"failed",label:"Failed"}]},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:219,columnNumber:9},this),a.jsxDEV(p,{label:"Tier",value:o.tier==="all"?"":o.tier,onChange:s=>r("tier",s||"all"),options:[{value:"certified",label:"Certified"},{value:"durable",label:"Durable"}]},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:229,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:199,columnNumber:7},this),a.jsxDEV(L,{columns:D,data:V,keyFn:s=>s.workflow_id,onRowClick:s=>i(`/workflows/executions/${s.workflow_id}`),isLoading:E,emptyMessage:_,sort:t,onSort:f},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:240,columnNumber:7},this),a.jsxDEV(O,{page:e.page,totalPages:e.totalPages(w),onPageChange:e.setPage,total:w,pageSize:e.pageSize,onPageSizeChange:e.setPageSize},void 0,!1,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:251,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/workflows/WorkflowsDashboard.tsx",lineNumber:196,columnNumber:5},this)}export{he as WorkflowsDashboard};
2
+ //# sourceMappingURL=WorkflowsDashboard-BWiUNvyl.js.map