@hotmeshio/long-tail 0.1.6 → 0.1.7

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 (335) hide show
  1. package/README.md +44 -4
  2. package/build/api/auth.d.ts +5 -0
  3. package/build/api/auth.js +42 -0
  4. package/build/api/bot-accounts.d.ts +50 -0
  5. package/build/api/bot-accounts.js +215 -0
  6. package/build/api/controlplane.d.ts +20 -0
  7. package/build/api/controlplane.js +110 -0
  8. package/build/api/dba.d.ts +15 -0
  9. package/build/api/dba.js +68 -0
  10. package/build/api/escalations.d.ts +70 -0
  11. package/build/api/escalations.js +656 -0
  12. package/build/api/exports.d.ts +32 -0
  13. package/build/api/exports.js +146 -0
  14. package/build/api/index.d.ts +18 -0
  15. package/build/api/index.js +54 -0
  16. package/build/api/insight.d.ts +29 -0
  17. package/build/api/insight.js +90 -0
  18. package/build/api/maintenance.d.ts +7 -0
  19. package/build/api/maintenance.js +28 -0
  20. package/build/api/mcp-runs.d.ts +16 -0
  21. package/build/api/mcp-runs.js +62 -0
  22. package/build/api/mcp.d.ts +52 -0
  23. package/build/api/mcp.js +212 -0
  24. package/build/api/namespaces.d.ts +7 -0
  25. package/build/{routes/escalations/helpers.js → api/namespaces.js} +24 -12
  26. package/build/api/roles.d.ts +25 -0
  27. package/build/api/roles.js +159 -0
  28. package/build/api/settings.d.ts +2 -0
  29. package/build/api/settings.js +35 -0
  30. package/build/api/tasks.d.ts +27 -0
  31. package/build/api/tasks.js +96 -0
  32. package/build/api/users.d.ts +44 -0
  33. package/build/api/users.js +162 -0
  34. package/build/api/workflow-sets.d.ts +26 -0
  35. package/build/api/workflow-sets.js +119 -0
  36. package/build/api/workflows.d.ts +48 -0
  37. package/build/api/workflows.js +298 -0
  38. package/build/api/yaml-workflows.d.ts +87 -0
  39. package/build/api/yaml-workflows.js +556 -0
  40. package/build/index.d.ts +4 -0
  41. package/build/index.js +6 -1
  42. package/build/lib/db/schemas/004_workflow_sets.sql +29 -0
  43. package/build/lib/db/schemas/005_unique_graph_topic.sql +7 -0
  44. package/build/lib/db/schemas/011_system_workflow_configs.sql +7 -0
  45. package/build/lib/events/callback.d.ts +41 -0
  46. package/build/lib/events/callback.js +98 -0
  47. package/build/modules/config.js +1 -1
  48. package/build/routes/auth.js +37 -36
  49. package/build/routes/bot-accounts.js +34 -164
  50. package/build/routes/controlplane.js +20 -60
  51. package/build/routes/dba.js +18 -28
  52. package/build/routes/escalations/bulk.js +17 -192
  53. package/build/routes/escalations/list.js +29 -75
  54. package/build/routes/escalations/resolve.js +3 -193
  55. package/build/routes/escalations/single.js +13 -122
  56. package/build/routes/exports.js +44 -95
  57. package/build/routes/index.js +2 -0
  58. package/build/routes/insight.js +46 -88
  59. package/build/routes/maintenance.js +41 -17
  60. package/build/routes/mcp-runs.js +52 -60
  61. package/build/routes/mcp.js +49 -177
  62. package/build/routes/namespaces.js +9 -20
  63. package/build/routes/roles.js +23 -97
  64. package/build/routes/settings.js +37 -25
  65. package/build/routes/tasks.js +28 -64
  66. package/build/routes/users.js +24 -113
  67. package/build/routes/workflow-sets.d.ts +2 -0
  68. package/build/routes/workflow-sets.js +98 -0
  69. package/build/routes/workflows/config.js +23 -57
  70. package/build/routes/workflows/discovery.js +11 -85
  71. package/build/routes/workflows/invocation.js +16 -84
  72. package/build/routes/yaml-workflows/cron.js +12 -61
  73. package/build/routes/yaml-workflows/crud.js +30 -223
  74. package/build/routes/yaml-workflows/deployment.js +15 -115
  75. package/build/routes/yaml-workflows/versions.js +20 -58
  76. package/build/sdk/index.d.ts +327 -0
  77. package/build/sdk/index.js +298 -0
  78. package/build/services/controlplane/index.d.ts +1 -2
  79. package/build/services/controlplane/index.js +3 -3
  80. package/build/services/controlplane/sql.d.ts +2 -2
  81. package/build/services/controlplane/sql.js +4 -5
  82. package/build/services/controlplane/types.d.ts +1 -0
  83. package/build/services/export/index.js +6 -1
  84. package/build/services/hotmesh-utils.js +2 -4
  85. package/build/services/insight/index.d.ts +7 -0
  86. package/build/services/insight/index.js +30 -0
  87. package/build/services/mcp/client/tools.js +13 -1
  88. package/build/services/mcp-runs/sql.js +1 -1
  89. package/build/services/workflow-sets/db.d.ts +16 -0
  90. package/build/services/workflow-sets/db.js +78 -0
  91. package/build/services/workflow-sets/index.d.ts +1 -0
  92. package/build/services/workflow-sets/index.js +11 -0
  93. package/build/services/workflow-sets/sql.d.ts +6 -0
  94. package/build/services/workflow-sets/sql.js +24 -0
  95. package/build/services/yaml-workflow/db-utils.d.ts +1 -0
  96. package/build/services/yaml-workflow/db-utils.js +4 -0
  97. package/build/services/yaml-workflow/db.d.ts +5 -0
  98. package/build/services/yaml-workflow/db.js +17 -0
  99. package/build/services/yaml-workflow/pipeline/build/wiring.js +14 -1
  100. package/build/services/yaml-workflow/pipeline/prompts.d.ts +1 -1
  101. package/build/services/yaml-workflow/pipeline/prompts.js +1 -1
  102. package/build/services/yaml-workflow/sql.d.ts +2 -1
  103. package/build/services/yaml-workflow/sql.js +8 -3
  104. package/build/services/yaml-workflow/types.d.ts +3 -0
  105. package/build/services/yaml-workflow/workers/callbacks.js +7 -1
  106. package/build/services/yaml-workflow/workers/register.js +7 -0
  107. package/build/start/adapters.js +4 -0
  108. package/build/system/index.js +6 -0
  109. package/build/system/mcp-servers/knowledge.js +1 -1
  110. package/build/system/seed/server-definitions.js +2 -1
  111. package/build/system/workflows/mcp-workflow-builder/activities/index.d.ts +1 -1
  112. package/build/system/workflows/mcp-workflow-builder/activities/index.js +2 -1
  113. package/build/system/workflows/mcp-workflow-builder/activities/tool-loader.d.ts +6 -0
  114. package/build/system/workflows/mcp-workflow-builder/activities/tool-loader.js +26 -0
  115. package/build/system/workflows/mcp-workflow-builder/index.js +26 -2
  116. package/build/system/workflows/mcp-workflow-builder/prompts.js +104 -35
  117. package/build/system/workflows/mcp-workflow-planner/activities/analyze.d.ts +11 -0
  118. package/build/system/workflows/mcp-workflow-planner/activities/analyze.js +36 -0
  119. package/build/system/workflows/mcp-workflow-planner/activities/index.d.ts +3 -0
  120. package/build/system/workflows/mcp-workflow-planner/activities/index.js +12 -0
  121. package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +19 -0
  122. package/build/system/workflows/mcp-workflow-planner/activities/persist.js +55 -0
  123. package/build/system/workflows/mcp-workflow-planner/activities/plan.d.ts +10 -0
  124. package/build/system/workflows/mcp-workflow-planner/activities/plan.js +43 -0
  125. package/build/system/workflows/mcp-workflow-planner/index.d.ts +7 -0
  126. package/build/system/workflows/mcp-workflow-planner/index.js +152 -0
  127. package/build/system/workflows/mcp-workflow-planner/prompts.d.ts +7 -0
  128. package/build/system/workflows/mcp-workflow-planner/prompts.js +77 -0
  129. package/build/tsconfig.tsbuildinfo +1 -1
  130. package/build/types/index.d.ts +1 -0
  131. package/build/types/sdk.d.ts +27 -0
  132. package/build/types/sdk.js +2 -0
  133. package/build/types/workflow-set.d.ts +44 -0
  134. package/build/types/workflow-set.js +5 -0
  135. package/dashboard/dist/assets/{AdminDashboard-BXkKGkb5.js → AdminDashboard-DRjkRSjJ.js} +2 -2
  136. package/dashboard/dist/assets/{AdminDashboard-BXkKGkb5.js.map → AdminDashboard-DRjkRSjJ.js.map} +1 -1
  137. package/dashboard/dist/assets/{AvailableEscalationsPage-DcH592mc.js → AvailableEscalationsPage-CnivX4Tz.js} +2 -2
  138. package/dashboard/dist/assets/{AvailableEscalationsPage-DcH592mc.js.map → AvailableEscalationsPage-CnivX4Tz.js.map} +1 -1
  139. package/dashboard/dist/assets/BotPicker-DwwaBhTH.js +2 -0
  140. package/dashboard/dist/assets/{BotPicker-A6LtzyuO.js.map → BotPicker-DwwaBhTH.js.map} +1 -1
  141. package/dashboard/dist/assets/{CollapsibleSection-C7nL2_mv.js → CollapsibleSection-DQpaVA0M.js} +2 -2
  142. package/dashboard/dist/assets/{CollapsibleSection-C7nL2_mv.js.map → CollapsibleSection-DQpaVA0M.js.map} +1 -1
  143. package/dashboard/dist/assets/{ConfirmDeleteModal-CWFwJrSl.js → ConfirmDeleteModal-B7JoDNvt.js} +2 -2
  144. package/dashboard/dist/assets/{ConfirmDeleteModal-CWFwJrSl.js.map → ConfirmDeleteModal-B7JoDNvt.js.map} +1 -1
  145. package/dashboard/dist/assets/{CopyableId-DbZ5c3jh.js → CopyableId-AqoZayBG.js} +2 -2
  146. package/dashboard/dist/assets/{CopyableId-DbZ5c3jh.js.map → CopyableId-AqoZayBG.js.map} +1 -1
  147. package/dashboard/dist/assets/{CredentialsPage-ClWkmLPu.js → CredentialsPage-qGw1kQzi.js} +2 -2
  148. package/dashboard/dist/assets/{CredentialsPage-ClWkmLPu.js.map → CredentialsPage-qGw1kQzi.js.map} +1 -1
  149. package/dashboard/dist/assets/{CustomDurationPicker-CtH2hReF.js → CustomDurationPicker-D1HUQcd0.js} +2 -2
  150. package/dashboard/dist/assets/{CustomDurationPicker-CtH2hReF.js.map → CustomDurationPicker-D1HUQcd0.js.map} +1 -1
  151. package/dashboard/dist/assets/{DataTable-CM5ZcpPi.js → DataTable-DKvSKoVG.js} +2 -2
  152. package/dashboard/dist/assets/{DataTable-CM5ZcpPi.js.map → DataTable-DKvSKoVG.js.map} +1 -1
  153. package/dashboard/dist/assets/{ElapsedCell-CwqavyeC.js → ElapsedCell-B0yrReGQ.js} +2 -2
  154. package/dashboard/dist/assets/{ElapsedCell-CwqavyeC.js.map → ElapsedCell-B0yrReGQ.js.map} +1 -1
  155. package/dashboard/dist/assets/{EmptyState-BBn78pmm.js → EmptyState-X0fIzYID.js} +2 -2
  156. package/dashboard/dist/assets/{EmptyState-BBn78pmm.js.map → EmptyState-X0fIzYID.js.map} +1 -1
  157. package/dashboard/dist/assets/{EscalationsOverview-BcJ2E3X7.js → EscalationsOverview-BQAT9W7r.js} +2 -2
  158. package/dashboard/dist/assets/{EscalationsOverview-BcJ2E3X7.js.map → EscalationsOverview-BQAT9W7r.js.map} +1 -1
  159. package/dashboard/dist/assets/{EventTable-C1en_KZ0.js → EventTable-CX1KNLhZ.js} +2 -2
  160. package/dashboard/dist/assets/{EventTable-C1en_KZ0.js.map → EventTable-CX1KNLhZ.js.map} +1 -1
  161. package/dashboard/dist/assets/{FilterBar-CZTlrLQT.js → FilterBar-DMTvuQy-.js} +2 -2
  162. package/dashboard/dist/assets/{FilterBar-CZTlrLQT.js.map → FilterBar-DMTvuQy-.js.map} +1 -1
  163. package/dashboard/dist/assets/{ListToolbar-Cdbsapig.js → ListToolbar-DTOSxoEy.js} +2 -2
  164. package/dashboard/dist/assets/{ListToolbar-Cdbsapig.js.map → ListToolbar-DTOSxoEy.js.map} +1 -1
  165. package/dashboard/dist/assets/{McpOverview-CSpEJxKa.js → McpOverview-BaKTIWrG.js} +2 -2
  166. package/dashboard/dist/assets/{McpOverview-CSpEJxKa.js.map → McpOverview-BaKTIWrG.js.map} +1 -1
  167. package/dashboard/dist/assets/McpQueryDetailPage-CC08T5k8.js +5 -0
  168. package/dashboard/dist/assets/McpQueryDetailPage-CC08T5k8.js.map +1 -0
  169. package/dashboard/dist/assets/McpQueryPage-CVfF9dYg.js +2 -0
  170. package/dashboard/dist/assets/McpQueryPage-CVfF9dYg.js.map +1 -0
  171. package/dashboard/dist/assets/{McpRunDetailPage-9xdxgG4d.js → McpRunDetailPage-CKs1RWeV.js} +2 -2
  172. package/dashboard/dist/assets/{McpRunDetailPage-9xdxgG4d.js.map → McpRunDetailPage-CKs1RWeV.js.map} +1 -1
  173. package/dashboard/dist/assets/{McpRunsPage-wWLqHsd4.js → McpRunsPage-CcPD_tY1.js} +2 -2
  174. package/dashboard/dist/assets/{McpRunsPage-wWLqHsd4.js.map → McpRunsPage-CcPD_tY1.js.map} +1 -1
  175. package/dashboard/dist/assets/{Modal-kB_P7ZOr.js → Modal-_2AbWxJT.js} +2 -2
  176. package/dashboard/dist/assets/{Modal-kB_P7ZOr.js.map → Modal-_2AbWxJT.js.map} +1 -1
  177. package/dashboard/dist/assets/OperatorDashboard-BGiRaRDr.js +2 -0
  178. package/dashboard/dist/assets/{OperatorDashboard-jc0vrgDI.js.map → OperatorDashboard-BGiRaRDr.js.map} +1 -1
  179. package/dashboard/dist/assets/{PageHeader-NkOeBR05.js → PageHeader-DVr5Qyzm.js} +2 -2
  180. package/dashboard/dist/assets/{PageHeader-NkOeBR05.js.map → PageHeader-DVr5Qyzm.js.map} +1 -1
  181. package/dashboard/dist/assets/{PageHeaderWithStats-ywNhrmFK.js → PageHeaderWithStats-D0KRASML.js} +2 -2
  182. package/dashboard/dist/assets/{PageHeaderWithStats-ywNhrmFK.js.map → PageHeaderWithStats-D0KRASML.js.map} +1 -1
  183. package/dashboard/dist/assets/{PriorityBadge-B2MQbSxy.js → PriorityBadge-Bx2559OU.js} +2 -2
  184. package/dashboard/dist/assets/{PriorityBadge-B2MQbSxy.js.map → PriorityBadge-Bx2559OU.js.map} +1 -1
  185. package/dashboard/dist/assets/{ProcessDetailPage-B7z7IdqE.js → ProcessDetailPage-69I--sry.js} +2 -2
  186. package/dashboard/dist/assets/{ProcessDetailPage-B7z7IdqE.js.map → ProcessDetailPage-69I--sry.js.map} +1 -1
  187. package/dashboard/dist/assets/{ProcessesListPage-C-uHadO6.js → ProcessesListPage-BDpUbua2.js} +2 -2
  188. package/dashboard/dist/assets/{ProcessesListPage-C-uHadO6.js.map → ProcessesListPage-BDpUbua2.js.map} +1 -1
  189. package/dashboard/dist/assets/{RolePill-C1dgC-fK.js → RolePill-CcAqEaSt.js} +2 -2
  190. package/dashboard/dist/assets/{RolePill-C1dgC-fK.js.map → RolePill-CcAqEaSt.js.map} +1 -1
  191. package/dashboard/dist/assets/{RolesPage-BSxrD1vm.js → RolesPage-Cl23Hjet.js} +2 -2
  192. package/dashboard/dist/assets/{RolesPage-BSxrD1vm.js.map → RolesPage-Cl23Hjet.js.map} +1 -1
  193. package/dashboard/dist/assets/{RowActions-lYaHGI-v.js → RowActions-B4mqIt3Z.js} +2 -2
  194. package/dashboard/dist/assets/{RowActions-lYaHGI-v.js.map → RowActions-B4mqIt3Z.js.map} +1 -1
  195. package/dashboard/dist/assets/{StatCard-v2TiITVr.js → StatCard-Cz_2OjAZ.js} +2 -2
  196. package/dashboard/dist/assets/{StatCard-v2TiITVr.js.map → StatCard-Cz_2OjAZ.js.map} +1 -1
  197. package/dashboard/dist/assets/{StatusBadge-DWlxevgG.js → StatusBadge-Wi2FJZsn.js} +2 -2
  198. package/dashboard/dist/assets/{StatusBadge-DWlxevgG.js.map → StatusBadge-Wi2FJZsn.js.map} +1 -1
  199. package/dashboard/dist/assets/{StepIndicator-CRM4ft28.js → StepIndicator-PW5NRDMb.js} +2 -2
  200. package/dashboard/dist/assets/{StepIndicator-CRM4ft28.js.map → StepIndicator-PW5NRDMb.js.map} +1 -1
  201. package/dashboard/dist/assets/{StickyPagination-CF0EToEU.js → StickyPagination-Bl2Uzz65.js} +2 -2
  202. package/dashboard/dist/assets/{StickyPagination-CF0EToEU.js.map → StickyPagination-Bl2Uzz65.js.map} +1 -1
  203. package/dashboard/dist/assets/{SwimlaneTimeline-CNlj7fgg.js → SwimlaneTimeline-CUPqMd0z.js} +2 -2
  204. package/dashboard/dist/assets/{SwimlaneTimeline-CNlj7fgg.js.map → SwimlaneTimeline-CUPqMd0z.js.map} +1 -1
  205. package/dashboard/dist/assets/{TagInput-CH8qMGhC.js → TagInput-BLtf86Ly.js} +2 -2
  206. package/dashboard/dist/assets/{TagInput-CH8qMGhC.js.map → TagInput-BLtf86Ly.js.map} +1 -1
  207. package/dashboard/dist/assets/{TaskDetailPage-CdWo-6mu.js → TaskDetailPage-BXJFX74D.js} +2 -2
  208. package/dashboard/dist/assets/{TaskDetailPage-CdWo-6mu.js.map → TaskDetailPage-BXJFX74D.js.map} +1 -1
  209. package/dashboard/dist/assets/{TaskQueuePill-BPj4ogVG.js → TaskQueuePill-CWYj3xKe.js} +2 -2
  210. package/dashboard/dist/assets/{TaskQueuePill-BPj4ogVG.js.map → TaskQueuePill-CWYj3xKe.js.map} +1 -1
  211. package/dashboard/dist/assets/{TasksListPage-CtRkMpKU.js → TasksListPage-C3cX94Mw.js} +2 -2
  212. package/dashboard/dist/assets/{TasksListPage-CtRkMpKU.js.map → TasksListPage-C3cX94Mw.js.map} +1 -1
  213. package/dashboard/dist/assets/{TimeAgo-Di1a3X5P.js → TimeAgo-B_5yDDHV.js} +2 -2
  214. package/dashboard/dist/assets/{TimeAgo-Di1a3X5P.js.map → TimeAgo-B_5yDDHV.js.map} +1 -1
  215. package/dashboard/dist/assets/{TimestampCell-CqrXql-S.js → TimestampCell-DRX724uU.js} +2 -2
  216. package/dashboard/dist/assets/{TimestampCell-CqrXql-S.js.map → TimestampCell-DRX724uU.js.map} +1 -1
  217. package/dashboard/dist/assets/{UserName-BUFYCnRa.js → UserName-Ca8FA469.js} +2 -2
  218. package/dashboard/dist/assets/{UserName-BUFYCnRa.js.map → UserName-Ca8FA469.js.map} +1 -1
  219. package/dashboard/dist/assets/{WorkflowExecutionPage-25iusMml.js → WorkflowExecutionPage-BBYWEV2P.js} +2 -2
  220. package/dashboard/dist/assets/{WorkflowExecutionPage-25iusMml.js.map → WorkflowExecutionPage-BBYWEV2P.js.map} +1 -1
  221. package/dashboard/dist/assets/WorkflowPill-BXifAuLi.js +2 -0
  222. package/dashboard/dist/assets/{WorkflowPill-DPKOcbf4.js.map → WorkflowPill-BXifAuLi.js.map} +1 -1
  223. package/dashboard/dist/assets/{WorkflowsDashboard-BgxslssH.js → WorkflowsDashboard-Drl3juz9.js} +2 -2
  224. package/dashboard/dist/assets/{WorkflowsDashboard-BgxslssH.js.map → WorkflowsDashboard-Drl3juz9.js.map} +1 -1
  225. package/dashboard/dist/assets/{WorkflowsOverview-Doe5L-Re.js → WorkflowsOverview-03IRrDLg.js} +2 -2
  226. package/dashboard/dist/assets/{WorkflowsOverview-Doe5L-Re.js.map → WorkflowsOverview-03IRrDLg.js.map} +1 -1
  227. package/dashboard/dist/assets/YamlWorkflowsPage-DC2cLxVi.js +2 -0
  228. package/dashboard/dist/assets/YamlWorkflowsPage-DC2cLxVi.js.map +1 -0
  229. package/dashboard/dist/assets/{bots-Bi2_O1Ts.js → bots-DZEXcgiJ.js} +2 -2
  230. package/dashboard/dist/assets/{bots-Bi2_O1Ts.js.map → bots-DZEXcgiJ.js.map} +1 -1
  231. package/dashboard/dist/assets/{escalation-Ck1KlLkT.js → escalation-Cw48lNaF.js} +2 -2
  232. package/dashboard/dist/assets/{escalation-Ck1KlLkT.js.map → escalation-Cw48lNaF.js.map} +1 -1
  233. package/dashboard/dist/assets/{escalation-columns-ohDsj2eJ.js → escalation-columns-NINpo3qf.js} +2 -2
  234. package/dashboard/dist/assets/{escalation-columns-ohDsj2eJ.js.map → escalation-columns-NINpo3qf.js.map} +1 -1
  235. package/dashboard/dist/assets/helpers-Cuu3xKfr.js +2 -0
  236. package/dashboard/dist/assets/helpers-Cuu3xKfr.js.map +1 -0
  237. package/dashboard/dist/assets/{helpers-BoD2SgUY.js → helpers-fk_qr729.js} +2 -2
  238. package/dashboard/dist/assets/{helpers-BoD2SgUY.js.map → helpers-fk_qr729.js.map} +1 -1
  239. package/dashboard/dist/assets/index-B98ipWxE.js +2 -0
  240. package/dashboard/dist/assets/{index-D7zYZOnH.js.map → index-B98ipWxE.js.map} +1 -1
  241. package/dashboard/dist/assets/{index-BEtLIsML.js → index-BIG3KooI.js} +2 -2
  242. package/dashboard/dist/assets/{index-BEtLIsML.js.map → index-BIG3KooI.js.map} +1 -1
  243. package/dashboard/dist/assets/{index-DYyLF-Qb.js → index-BwN3KP_L.js} +5 -5
  244. package/dashboard/dist/assets/{index-DYyLF-Qb.js.map → index-BwN3KP_L.js.map} +1 -1
  245. package/dashboard/dist/assets/index-Bxe8h1x4.js +17 -0
  246. package/dashboard/dist/assets/{index-DOkHXmyf.js.map → index-Bxe8h1x4.js.map} +1 -1
  247. package/dashboard/dist/assets/{index-FuohTtaM.js → index-CNI7k7oB.js} +3 -3
  248. package/dashboard/dist/assets/{index-FuohTtaM.js.map → index-CNI7k7oB.js.map} +1 -1
  249. package/dashboard/dist/assets/{index-CZrJ09p-.js → index-CORHB0WC.js} +2 -2
  250. package/dashboard/dist/assets/{index-CZrJ09p-.js.map → index-CORHB0WC.js.map} +1 -1
  251. package/dashboard/dist/assets/{index-PyCTS05D.css → index-DcIKW-cZ.css} +1 -1
  252. package/dashboard/dist/assets/{index-D3NyVADW.js → index-Dj-z-x8M.js} +2 -2
  253. package/dashboard/dist/assets/index-Dj-z-x8M.js.map +1 -0
  254. package/dashboard/dist/assets/{index-Bn2xHDr8.js → index-DwRytW9O.js} +3 -3
  255. package/dashboard/dist/assets/{index-Bn2xHDr8.js.map → index-DwRytW9O.js.map} +1 -1
  256. package/dashboard/dist/assets/index-aRvL-dXp.js +2 -0
  257. package/dashboard/dist/assets/{index-Dk2Q51o0.js.map → index-aRvL-dXp.js.map} +1 -1
  258. package/dashboard/dist/assets/index-b03HlbnH.js +2 -0
  259. package/dashboard/dist/assets/{index-BpT-6WgJ.js.map → index-b03HlbnH.js.map} +1 -1
  260. package/dashboard/dist/assets/{mcp-CJtYjA7A.js → mcp-BZoFryNc.js} +2 -2
  261. package/dashboard/dist/assets/{mcp-CJtYjA7A.js.map → mcp-BZoFryNc.js.map} +1 -1
  262. package/dashboard/dist/assets/mcp-query-wiw1kwm8.js +2 -0
  263. package/dashboard/dist/assets/mcp-query-wiw1kwm8.js.map +1 -0
  264. package/dashboard/dist/assets/{mcp-runs-DUWm9Z4V.js → mcp-runs-BaEKnf5v.js} +2 -2
  265. package/dashboard/dist/assets/{mcp-runs-DUWm9Z4V.js.map → mcp-runs-BaEKnf5v.js.map} +1 -1
  266. package/dashboard/dist/assets/{namespaces-BM5P2qmL.js → namespaces-BwnZI4_A.js} +2 -2
  267. package/dashboard/dist/assets/{namespaces-BM5P2qmL.js.map → namespaces-BwnZI4_A.js.map} +1 -1
  268. package/dashboard/dist/assets/{roles-lv0shpjJ.js → roles-Bgn1K8zU.js} +2 -2
  269. package/dashboard/dist/assets/{roles-lv0shpjJ.js.map → roles-Bgn1K8zU.js.map} +1 -1
  270. package/dashboard/dist/assets/{settings-Wlq92mRo.js → settings-CizYiutL.js} +2 -2
  271. package/dashboard/dist/assets/{settings-Wlq92mRo.js.map → settings-CizYiutL.js.map} +1 -1
  272. package/dashboard/dist/assets/{tasks-BFGm4PuE.js → tasks-Bmte_hc4.js} +2 -2
  273. package/dashboard/dist/assets/{tasks-BFGm4PuE.js.map → tasks-Bmte_hc4.js.map} +1 -1
  274. package/dashboard/dist/assets/{useEventHooks-DIE6ue4x.js → useEventHooks-CUCxpiI2.js} +2 -2
  275. package/dashboard/dist/assets/{useEventHooks-DIE6ue4x.js.map → useEventHooks-CUCxpiI2.js.map} +1 -1
  276. package/dashboard/dist/assets/{useYamlActivityEvents-DCwSO73t.js → useYamlActivityEvents-Cum02Ej9.js} +2 -2
  277. package/dashboard/dist/assets/{useYamlActivityEvents-DCwSO73t.js.map → useYamlActivityEvents-Cum02Ej9.js.map} +1 -1
  278. package/dashboard/dist/assets/{users-tA5-K0wA.js → users-NSDgTt-z.js} +2 -2
  279. package/dashboard/dist/assets/{users-tA5-K0wA.js.map → users-NSDgTt-z.js.map} +1 -1
  280. package/dashboard/dist/assets/{vendor-icons-BiIug1SK.js → vendor-icons-D1DdudfH.js} +93 -73
  281. package/dashboard/dist/assets/vendor-icons-D1DdudfH.js.map +1 -0
  282. package/dashboard/dist/assets/{workflows-CfLc15Wr.js → workflows-k0XRdGXx.js} +2 -2
  283. package/dashboard/dist/assets/{workflows-CfLc15Wr.js.map → workflows-k0XRdGXx.js.map} +1 -1
  284. package/dashboard/dist/assets/yaml-workflows-DAre8I78.js +2 -0
  285. package/dashboard/dist/assets/yaml-workflows-DAre8I78.js.map +1 -0
  286. package/dashboard/dist/index.html +3 -3
  287. package/docs/epic-integration.md +224 -0
  288. package/docs/events.md +28 -0
  289. package/docs/sdk.md +177 -0
  290. package/docs/story.md +157 -0
  291. package/docs/workflow-builder.md +371 -0
  292. package/package.json +3 -2
  293. package/build/routes/escalations/helpers.d.ts +0 -5
  294. package/build/routes/resolve.d.ts +0 -9
  295. package/build/routes/resolve.js +0 -19
  296. package/build/routes/yaml-workflows/helpers.d.ts +0 -2
  297. package/build/routes/yaml-workflows/helpers.js +0 -8
  298. package/dashboard/dist/assets/BotPicker-A6LtzyuO.js +0 -2
  299. package/dashboard/dist/assets/McpQueryDetailPage-DhqEI180.js +0 -5
  300. package/dashboard/dist/assets/McpQueryDetailPage-DhqEI180.js.map +0 -1
  301. package/dashboard/dist/assets/McpQueryPage-CIiVMlqo.js +0 -2
  302. package/dashboard/dist/assets/McpQueryPage-CIiVMlqo.js.map +0 -1
  303. package/dashboard/dist/assets/OperatorDashboard-jc0vrgDI.js +0 -2
  304. package/dashboard/dist/assets/RunAsSelector-CJDnyp93.js +0 -2
  305. package/dashboard/dist/assets/RunAsSelector-CJDnyp93.js.map +0 -1
  306. package/dashboard/dist/assets/WorkflowPill-DPKOcbf4.js +0 -2
  307. package/dashboard/dist/assets/YamlWorkflowsPage-BliAckJ6.js +0 -2
  308. package/dashboard/dist/assets/YamlWorkflowsPage-BliAckJ6.js.map +0 -1
  309. package/dashboard/dist/assets/index-BpT-6WgJ.js +0 -2
  310. package/dashboard/dist/assets/index-D3NyVADW.js.map +0 -1
  311. package/dashboard/dist/assets/index-D7zYZOnH.js +0 -2
  312. package/dashboard/dist/assets/index-DOkHXmyf.js +0 -17
  313. package/dashboard/dist/assets/index-Dk2Q51o0.js +0 -2
  314. package/dashboard/dist/assets/mcp-query-jQJQrs_7.js +0 -2
  315. package/dashboard/dist/assets/mcp-query-jQJQrs_7.js.map +0 -1
  316. package/dashboard/dist/assets/vendor-icons-BiIug1SK.js.map +0 -1
  317. package/dashboard/dist/assets/yaml-workflows-D7JXNqbM.js +0 -2
  318. package/dashboard/dist/assets/yaml-workflows-D7JXNqbM.js.map +0 -1
  319. package/docs/img/01-login.png +0 -0
  320. package/docs/img/02-dashboard-home.png +0 -0
  321. package/docs/img/03-processes-list.png +0 -0
  322. package/docs/img/04-escalations-list.png +0 -0
  323. package/docs/img/05-mcp-servers.png +0 -0
  324. package/docs/img/06-mcp-pipelines.png +0 -0
  325. package/docs/img/07-workflows-list.png +0 -0
  326. package/docs/img/compilation/01-query-submit.png +0 -0
  327. package/docs/img/compilation/02-mcp-servers.png +0 -0
  328. package/docs/img/compilation/03-query-completed.png +0 -0
  329. package/docs/img/compilation/04-wizard-original.png +0 -0
  330. package/docs/img/compilation/05-wizard-timeline.png +0 -0
  331. package/docs/img/compilation/06-wizard-profile.png +0 -0
  332. package/docs/img/compilation/07-wizard-deploy.png +0 -0
  333. package/docs/img/compilation/08-wizard-test-modal.png +0 -0
  334. package/docs/img/compilation/09-wizard-test-compare.png +0 -0
  335. package/docs/img/compilation/10-wizard-verify.png +0 -0
@@ -1,2 +1,2 @@
1
- import{j as e}from"./index-DYyLF-Qb.js";import{a as m}from"./vendor-query-DLp59M9_.js";import{u as T}from"./mcp-CJtYjA7A.js";import{u as L}from"./mcp-runs-DUWm9Z4V.js";import{u as P}from"./yaml-workflows-D7JXNqbM.js";import{u as _}from"./namespaces-BM5P2qmL.js";import{P as R}from"./PageHeader-NkOeBR05.js";import{S as N}from"./StatCard-v2TiITVr.js";import{c as F,d as A}from"./vendor-icons-BiIug1SK.js";import{c as z}from"./vendor-react-Co3Y8ikm.js";const y=[{label:"1h",ms:36e5},{label:"24h",ms:864e5},{label:"7d",ms:6048e5},{label:"30d",ms:2592e6}];function I(r){return r<1e3?`${Math.round(r)}ms`:r<6e4?`${(r/1e3).toFixed(1)}s`:r<36e5?`${(r/6e4).toFixed(1)}m`:`${(r/36e5).toFixed(1)}h`}function f({value:r,colorClass:o,onClick:g}){return r===0?e.jsxDEV("span",{className:"text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:53,columnNumber:12},this):e.jsxDEV("button",{onClick:g,className:`${o} hover:underline tabular-nums font-medium`,children:r},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:56,columnNumber:5},this)}function X(){const r=z(),[o,g]=m.useState("24h"),[u,C]=m.useState("longtail"),{data:p}=_(),{data:n}=L({limit:500,app_id:u}),{data:w,isLoading:k}=T(),{data:M,isLoading:S}=P({limit:200}),j=m.useMemo(()=>((p==null?void 0:p.namespaces)??[]).map(s=>s.name),[p==null?void 0:p.namespaces]),b=(w==null?void 0:w.servers)??[],v=(M==null?void 0:M.workflows)??[],E=m.useMemo(()=>b.reduce((s,i)=>s+(Array.isArray(i.tool_manifest)?i.tool_manifest.length:0),0),[b]),O=m.useMemo(()=>new Set(v.map(i=>i.app_id)).size,[v]),V=m.useMemo(()=>{const s=y.find(i=>i.label===o);return Date.now()-s.ms},[o]),c=m.useMemo(()=>((n==null?void 0:n.jobs)??[]).filter(s=>new Date(s.created_at).getTime()>=V),[n==null?void 0:n.jobs,V]),D=m.useMemo(()=>{const s=new Map;for(const a of c){const t=s.get(a.entity)??{total:0,running:0,completed:0,failed:0,durations:[]};if(t.total++,a.status==="running"&&t.running++,a.status==="completed"){t.completed++;const h=new Date(a.updated_at).getTime()-new Date(a.created_at).getTime();h>0&&t.durations.push(h)}a.status==="failed"&&t.failed++,s.set(a.entity,t)}const i=[];for(const[a,t]of s)i.push({pipeline:a,...t,avgDuration:t.durations.length>0?t.durations.reduce((h,$)=>h+$,0)/t.durations.length:null});return i.sort((a,t)=>t.total-a.total)},[c]),x=m.useMemo(()=>({total:c.length,running:c.filter(s=>s.status==="running").length,completed:c.filter(s=>s.status==="completed").length,failed:c.filter(s=>s.status==="failed").length}),[c]),l=(s,i)=>{const a=new URLSearchParams;u!=="longtail"&&a.set("namespace",u),s&&a.set("entity",s),i&&a.set("status",i);const t=a.toString();r(`/mcp/executions${t?`?${t}`:""}`)},d="pb-2 text-[10px] font-semibold uppercase tracking-widest text-text-tertiary";return e.jsxDEV("div",{children:[e.jsxDEV(R,{title:"Discovered"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:155,columnNumber:7},this),e.jsxDEV("div",{className:"flex items-center gap-4 mb-6",children:[e.jsxDEV("div",{className:"flex items-center gap-1",children:y.map(s=>e.jsxDEV("button",{onClick:()=>g(s.label),className:`px-3 py-1 text-xs rounded-full transition-colors ${o===s.label?"bg-accent text-text-inverse":"text-text-tertiary hover:text-text-primary hover:bg-surface-hover"}`,children:s.label},s.label,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:161,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:159,columnNumber:9},this),j.length>1&&e.jsxDEV("select",{value:u,onChange:s=>C(s.target.value),className:"select text-xs py-1 px-2",children:j.map(s=>e.jsxDEV("option",{value:s,children:s},s,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:181,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:175,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:158,columnNumber:7},this),e.jsxDEV("div",{className:"grid grid-cols-4 gap-4 mb-8",children:[e.jsxDEV(N,{label:"Total Runs",value:x.total,onClick:()=>l()},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:189,columnNumber:9},this),e.jsxDEV(N,{label:"Running",value:x.running,colorClass:"text-status-active",onClick:()=>l(void 0,"running")},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:190,columnNumber:9},this),e.jsxDEV(N,{label:"Completed",value:x.completed,colorClass:"text-status-success",onClick:()=>l(void 0,"completed")},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:191,columnNumber:9},this),e.jsxDEV(N,{label:"Failed",value:x.failed,colorClass:"text-status-error",onClick:()=>l(void 0,"failed")},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:192,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:188,columnNumber:7},this),D.length>0&&e.jsxDEV("table",{className:"w-full text-left mb-10",children:[e.jsxDEV("thead",{children:e.jsxDEV("tr",{className:"border-b border-surface-border",children:[e.jsxDEV("th",{className:d,children:"Tool"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:200,columnNumber:15},this),e.jsxDEV("th",{className:`${d} text-right w-20`,children:"Total"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:201,columnNumber:15},this),e.jsxDEV("th",{className:`${d} text-right w-20`,children:"Running"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:202,columnNumber:15},this),e.jsxDEV("th",{className:`${d} text-right w-24`,children:"Completed"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:203,columnNumber:15},this),e.jsxDEV("th",{className:`${d} text-right w-20`,children:"Failed"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:204,columnNumber:15},this),e.jsxDEV("th",{className:`${d} text-right w-28`,children:"Avg Duration"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:205,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:199,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:198,columnNumber:11},this),e.jsxDEV("tbody",{children:D.map(s=>e.jsxDEV("tr",{className:"border-b border-surface-border last:border-b-0",children:[e.jsxDEV("td",{className:"py-3 text-sm font-mono text-text-primary",children:e.jsxDEV("button",{onClick:()=>l(s.pipeline),className:"hover:text-accent hover:underline",children:s.pipeline},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:212,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:211,columnNumber:17},this),e.jsxDEV("td",{className:"py-3 text-sm text-right",children:e.jsxDEV(f,{value:s.total,colorClass:"text-text-secondary",onClick:()=>l(s.pipeline)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:220,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:219,columnNumber:17},this),e.jsxDEV("td",{className:"py-3 text-sm text-right",children:e.jsxDEV(f,{value:s.running,colorClass:"text-status-active",onClick:()=>l(s.pipeline,"running")},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:223,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:222,columnNumber:17},this),e.jsxDEV("td",{className:"py-3 text-sm text-right",children:e.jsxDEV(f,{value:s.completed,colorClass:"text-status-success",onClick:()=>l(s.pipeline,"completed")},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:226,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:225,columnNumber:17},this),e.jsxDEV("td",{className:"py-3 text-sm text-right",children:e.jsxDEV(f,{value:s.failed,colorClass:"text-status-error",onClick:()=>l(s.pipeline,"failed")},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:229,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:228,columnNumber:17},this),e.jsxDEV("td",{className:"py-3 text-sm font-mono text-text-secondary text-right",children:s.avgDuration!==null?I(s.avgDuration):"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:231,columnNumber:17},this)]},s.pipeline,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:210,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:208,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:197,columnNumber:9},this),D.length===0&&e.jsxDEV("div",{className:"py-12 text-center mb-8",children:e.jsxDEV("p",{className:"text-sm text-text-tertiary",children:["No MCP tool activity in the last ",o]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:242,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:241,columnNumber:9},this),e.jsxDEV("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxDEV("button",{onClick:()=>r("/mcp/servers"),className:"bg-surface-raised border border-surface-border rounded-md p-5 text-left hover:border-accent/40 transition-colors",children:[e.jsxDEV("div",{className:"flex items-center gap-3 mb-3",children:[e.jsxDEV(F,{size:16,className:"text-accent shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:255,columnNumber:13},this),e.jsxDEV("span",{className:"text-sm font-medium text-text-primary",children:"Tool Servers"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:256,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:254,columnNumber:11},this),e.jsxDEV("p",{className:"text-2xl font-light tabular-nums text-text-primary mb-1",children:[k?"—":b.length,e.jsxDEV("span",{className:"text-sm text-text-tertiary font-normal ml-2",children:["server",b.length!==1?"s":""," · ",E," tool",E!==1?"s":""]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:260,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:258,columnNumber:11},this),e.jsxDEV("p",{className:"text-[11px] text-text-tertiary leading-relaxed mt-2",children:"Built-in and external MCP servers. Each server exposes tools that workflows and agents can call."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:264,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:250,columnNumber:9},this),e.jsxDEV("button",{onClick:()=>r("/mcp/workflows"),className:"bg-surface-raised border border-surface-border rounded-md p-5 text-left hover:border-accent/40 transition-colors",children:[e.jsxDEV("div",{className:"flex items-center gap-3 mb-3",children:[e.jsxDEV(A,{size:16,className:"text-purple-400 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:274,columnNumber:13},this),e.jsxDEV("span",{className:"text-sm font-medium text-text-primary",children:"Pipeline Registry"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:275,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:273,columnNumber:11},this),e.jsxDEV("p",{className:"text-2xl font-light tabular-nums text-text-primary mb-1",children:[S?"—":v.length,e.jsxDEV("span",{className:"text-sm text-text-tertiary font-normal ml-2",children:["workflow",v.length!==1?"s":""," · ",O," server",O!==1?"s":""]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:279,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:277,columnNumber:11},this),e.jsxDEV("p",{className:"text-[11px] text-text-tertiary leading-relaxed mt-2",children:"Compiled from discovery runs. Deterministic tool-to-tool pipelines — no LLM, no token costs."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:283,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:269,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:249,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:154,columnNumber:5},this)}export{X as McpOverview};
2
- //# sourceMappingURL=McpOverview-CSpEJxKa.js.map
1
+ import{j as e}from"./index-BwN3KP_L.js";import{a as m}from"./vendor-query-DLp59M9_.js";import{u as T}from"./mcp-BZoFryNc.js";import{u as L}from"./mcp-runs-BaEKnf5v.js";import{u as P}from"./yaml-workflows-DAre8I78.js";import{u as _}from"./namespaces-BwnZI4_A.js";import{P as R}from"./PageHeader-DVr5Qyzm.js";import{S as N}from"./StatCard-Cz_2OjAZ.js";import{d as F,e as A}from"./vendor-icons-D1DdudfH.js";import{c as z}from"./vendor-react-Co3Y8ikm.js";const y=[{label:"1h",ms:36e5},{label:"24h",ms:864e5},{label:"7d",ms:6048e5},{label:"30d",ms:2592e6}];function I(r){return r<1e3?`${Math.round(r)}ms`:r<6e4?`${(r/1e3).toFixed(1)}s`:r<36e5?`${(r/6e4).toFixed(1)}m`:`${(r/36e5).toFixed(1)}h`}function f({value:r,colorClass:o,onClick:g}){return r===0?e.jsxDEV("span",{className:"text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:53,columnNumber:12},this):e.jsxDEV("button",{onClick:g,className:`${o} hover:underline tabular-nums font-medium`,children:r},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:56,columnNumber:5},this)}function X(){const r=z(),[o,g]=m.useState("24h"),[u,C]=m.useState("longtail"),{data:p}=_(),{data:n}=L({limit:500,app_id:u}),{data:w,isLoading:k}=T(),{data:M,isLoading:S}=P({limit:200}),j=m.useMemo(()=>((p==null?void 0:p.namespaces)??[]).map(s=>s.name),[p==null?void 0:p.namespaces]),b=(w==null?void 0:w.servers)??[],v=(M==null?void 0:M.workflows)??[],E=m.useMemo(()=>b.reduce((s,i)=>s+(Array.isArray(i.tool_manifest)?i.tool_manifest.length:0),0),[b]),O=m.useMemo(()=>new Set(v.map(i=>i.app_id)).size,[v]),V=m.useMemo(()=>{const s=y.find(i=>i.label===o);return Date.now()-s.ms},[o]),c=m.useMemo(()=>((n==null?void 0:n.jobs)??[]).filter(s=>new Date(s.created_at).getTime()>=V),[n==null?void 0:n.jobs,V]),D=m.useMemo(()=>{const s=new Map;for(const a of c){const t=s.get(a.entity)??{total:0,running:0,completed:0,failed:0,durations:[]};if(t.total++,a.status==="running"&&t.running++,a.status==="completed"){t.completed++;const h=new Date(a.updated_at).getTime()-new Date(a.created_at).getTime();h>0&&t.durations.push(h)}a.status==="failed"&&t.failed++,s.set(a.entity,t)}const i=[];for(const[a,t]of s)i.push({pipeline:a,...t,avgDuration:t.durations.length>0?t.durations.reduce((h,$)=>h+$,0)/t.durations.length:null});return i.sort((a,t)=>t.total-a.total)},[c]),x=m.useMemo(()=>({total:c.length,running:c.filter(s=>s.status==="running").length,completed:c.filter(s=>s.status==="completed").length,failed:c.filter(s=>s.status==="failed").length}),[c]),l=(s,i)=>{const a=new URLSearchParams;u!=="longtail"&&a.set("namespace",u),s&&a.set("entity",s),i&&a.set("status",i);const t=a.toString();r(`/mcp/executions${t?`?${t}`:""}`)},d="pb-2 text-[10px] font-semibold uppercase tracking-widest text-text-tertiary";return e.jsxDEV("div",{children:[e.jsxDEV(R,{title:"Discovered"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:155,columnNumber:7},this),e.jsxDEV("div",{className:"flex items-center gap-4 mb-6",children:[e.jsxDEV("div",{className:"flex items-center gap-1",children:y.map(s=>e.jsxDEV("button",{onClick:()=>g(s.label),className:`px-3 py-1 text-xs rounded-full transition-colors ${o===s.label?"bg-accent text-text-inverse":"text-text-tertiary hover:text-text-primary hover:bg-surface-hover"}`,children:s.label},s.label,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:161,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:159,columnNumber:9},this),j.length>1&&e.jsxDEV("select",{value:u,onChange:s=>C(s.target.value),className:"select text-xs py-1 px-2",children:j.map(s=>e.jsxDEV("option",{value:s,children:s},s,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:181,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:175,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:158,columnNumber:7},this),e.jsxDEV("div",{className:"grid grid-cols-4 gap-4 mb-8",children:[e.jsxDEV(N,{label:"Total Runs",value:x.total,onClick:()=>l()},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:189,columnNumber:9},this),e.jsxDEV(N,{label:"Running",value:x.running,colorClass:"text-status-active",onClick:()=>l(void 0,"running")},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:190,columnNumber:9},this),e.jsxDEV(N,{label:"Completed",value:x.completed,colorClass:"text-status-success",onClick:()=>l(void 0,"completed")},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:191,columnNumber:9},this),e.jsxDEV(N,{label:"Failed",value:x.failed,colorClass:"text-status-error",onClick:()=>l(void 0,"failed")},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:192,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:188,columnNumber:7},this),D.length>0&&e.jsxDEV("table",{className:"w-full text-left mb-10",children:[e.jsxDEV("thead",{children:e.jsxDEV("tr",{className:"border-b border-surface-border",children:[e.jsxDEV("th",{className:d,children:"Tool"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:200,columnNumber:15},this),e.jsxDEV("th",{className:`${d} text-right w-20`,children:"Total"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:201,columnNumber:15},this),e.jsxDEV("th",{className:`${d} text-right w-20`,children:"Running"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:202,columnNumber:15},this),e.jsxDEV("th",{className:`${d} text-right w-24`,children:"Completed"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:203,columnNumber:15},this),e.jsxDEV("th",{className:`${d} text-right w-20`,children:"Failed"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:204,columnNumber:15},this),e.jsxDEV("th",{className:`${d} text-right w-28`,children:"Avg Duration"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:205,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:199,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:198,columnNumber:11},this),e.jsxDEV("tbody",{children:D.map(s=>e.jsxDEV("tr",{className:"border-b border-surface-border last:border-b-0",children:[e.jsxDEV("td",{className:"py-3 text-sm font-mono text-text-primary",children:e.jsxDEV("button",{onClick:()=>l(s.pipeline),className:"hover:text-accent hover:underline",children:s.pipeline},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:212,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:211,columnNumber:17},this),e.jsxDEV("td",{className:"py-3 text-sm text-right",children:e.jsxDEV(f,{value:s.total,colorClass:"text-text-secondary",onClick:()=>l(s.pipeline)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:220,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:219,columnNumber:17},this),e.jsxDEV("td",{className:"py-3 text-sm text-right",children:e.jsxDEV(f,{value:s.running,colorClass:"text-status-active",onClick:()=>l(s.pipeline,"running")},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:223,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:222,columnNumber:17},this),e.jsxDEV("td",{className:"py-3 text-sm text-right",children:e.jsxDEV(f,{value:s.completed,colorClass:"text-status-success",onClick:()=>l(s.pipeline,"completed")},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:226,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:225,columnNumber:17},this),e.jsxDEV("td",{className:"py-3 text-sm text-right",children:e.jsxDEV(f,{value:s.failed,colorClass:"text-status-error",onClick:()=>l(s.pipeline,"failed")},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:229,columnNumber:19},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:228,columnNumber:17},this),e.jsxDEV("td",{className:"py-3 text-sm font-mono text-text-secondary text-right",children:s.avgDuration!==null?I(s.avgDuration):"—"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:231,columnNumber:17},this)]},s.pipeline,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:210,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:208,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:197,columnNumber:9},this),D.length===0&&e.jsxDEV("div",{className:"py-12 text-center mb-8",children:e.jsxDEV("p",{className:"text-sm text-text-tertiary",children:["No MCP tool activity in the last ",o]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:242,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:241,columnNumber:9},this),e.jsxDEV("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxDEV("button",{onClick:()=>r("/mcp/servers"),className:"bg-surface-raised border border-surface-border rounded-md p-5 text-left hover:border-accent/40 transition-colors",children:[e.jsxDEV("div",{className:"flex items-center gap-3 mb-3",children:[e.jsxDEV(F,{size:16,className:"text-accent shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:255,columnNumber:13},this),e.jsxDEV("span",{className:"text-sm font-medium text-text-primary",children:"Tool Servers"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:256,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:254,columnNumber:11},this),e.jsxDEV("p",{className:"text-2xl font-light tabular-nums text-text-primary mb-1",children:[k?"—":b.length,e.jsxDEV("span",{className:"text-sm text-text-tertiary font-normal ml-2",children:["server",b.length!==1?"s":""," · ",E," tool",E!==1?"s":""]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:260,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:258,columnNumber:11},this),e.jsxDEV("p",{className:"text-[11px] text-text-tertiary leading-relaxed mt-2",children:"Built-in and external MCP servers. Each server exposes tools that workflows and agents can call."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:264,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:250,columnNumber:9},this),e.jsxDEV("button",{onClick:()=>r("/mcp/workflows"),className:"bg-surface-raised border border-surface-border rounded-md p-5 text-left hover:border-accent/40 transition-colors",children:[e.jsxDEV("div",{className:"flex items-center gap-3 mb-3",children:[e.jsxDEV(A,{size:16,className:"text-purple-400 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:274,columnNumber:13},this),e.jsxDEV("span",{className:"text-sm font-medium text-text-primary",children:"Pipeline Registry"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:275,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:273,columnNumber:11},this),e.jsxDEV("p",{className:"text-2xl font-light tabular-nums text-text-primary mb-1",children:[S?"—":v.length,e.jsxDEV("span",{className:"text-sm text-text-tertiary font-normal ml-2",children:["workflow",v.length!==1?"s":""," · ",O," server",O!==1?"s":""]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:279,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:277,columnNumber:11},this),e.jsxDEV("p",{className:"text-[11px] text-text-tertiary leading-relaxed mt-2",children:"Compiled from discovery runs. Deterministic tool-to-tool pipelines — no LLM, no token costs."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:283,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:269,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:249,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/McpOverview.tsx",lineNumber:154,columnNumber:5},this)}export{X as McpOverview};
2
+ //# sourceMappingURL=McpOverview-BaKTIWrG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"McpOverview-CSpEJxKa.js","sources":["../../src/pages/mcp/McpOverview.tsx"],"sourcesContent":["import { useState, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Server, Workflow } from 'lucide-react';\nimport { useMcpServers } from '../../api/mcp';\nimport { useMcpRuns } from '../../api/mcp-runs';\nimport { useYamlWorkflows } from '../../api/yaml-workflows';\nimport { useNamespaces } from '../../api/namespaces';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { StatCard } from '../../components/common/data/StatCard';\nimport type { McpToolManifest } from '../../api/types';\n\n// ── Duration filter ──────────────────────────────────────────────────────────\n\nconst DURATIONS = [\n { label: '1h', ms: 3_600_000 },\n { label: '24h', ms: 86_400_000 },\n { label: '7d', ms: 604_800_000 },\n { label: '30d', ms: 2_592_000_000 },\n] as const;\n\ntype DurationLabel = (typeof DURATIONS)[number]['label'];\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction formatDuration(ms: number): string {\n if (ms < 1000) return `${Math.round(ms)}ms`;\n if (ms < 60_000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3_600_000) return `${(ms / 60_000).toFixed(1)}m`;\n return `${(ms / 3_600_000).toFixed(1)}h`;\n}\n\ninterface PipelineStats {\n pipeline: string;\n total: number;\n running: number;\n completed: number;\n failed: number;\n avgDuration: number | null;\n}\n\n// ── Reusable components ──────────────────────────────────────────────────────\n\nfunction StatCell({\n value,\n colorClass,\n onClick,\n}: {\n value: number;\n colorClass: string;\n onClick: () => void;\n}) {\n if (value === 0) {\n return <span className=\"text-text-tertiary\">0</span>;\n }\n return (\n <button\n onClick={onClick}\n className={`${colorClass} hover:underline tabular-nums font-medium`}\n >\n {value}\n </button>\n );\n}\n\n// ── Page ─────────────────────────────────────────────────────────────────────\n\nexport function McpOverview() {\n const navigate = useNavigate();\n const [duration, setDuration] = useState<DurationLabel>('24h');\n const [namespace, setNamespace] = useState('longtail');\n\n const { data: nsData } = useNamespaces();\n const { data: allRuns } = useMcpRuns({ limit: 500, app_id: namespace });\n const { data: serverData, isLoading: serversLoading } = useMcpServers();\n const { data: yamlData, isLoading: yamlLoading } = useYamlWorkflows({ limit: 200 });\n\n const namespaces = useMemo(\n () => (nsData?.namespaces ?? []).map((ns) => ns.name),\n [nsData?.namespaces],\n );\n\n // ── Server counts ────────────────────────────────────────────\n const servers = serverData?.servers ?? [];\n const yamlWorkflows = yamlData?.workflows ?? [];\n\n const serverToolCount = useMemo(\n () => servers.reduce((sum, s) => sum + (Array.isArray(s.tool_manifest) ? (s.tool_manifest as McpToolManifest[]).length : 0), 0),\n [servers],\n );\n\n const workflowServerCount = useMemo(() => {\n const appIds = new Set(yamlWorkflows.map((wf) => wf.app_id));\n return appIds.size;\n }, [yamlWorkflows]);\n\n // ── Run stats ──────────────────────────────────────────────────\n const cutoff = useMemo(() => {\n const d = DURATIONS.find((d) => d.label === duration)!;\n return Date.now() - d.ms;\n }, [duration]);\n\n const runs = useMemo(\n () => (allRuns?.jobs ?? []).filter((j) => new Date(j.created_at).getTime() >= cutoff),\n [allRuns?.jobs, cutoff],\n );\n\n const byPipeline = useMemo(() => {\n const map = new Map<string, { total: number; running: number; completed: number; failed: number; durations: number[] }>();\n for (const j of runs) {\n const entry = map.get(j.entity) ?? { total: 0, running: 0, completed: 0, failed: 0, durations: [] };\n entry.total++;\n if (j.status === 'running') entry.running++;\n if (j.status === 'completed') {\n entry.completed++;\n const dur = new Date(j.updated_at).getTime() - new Date(j.created_at).getTime();\n if (dur > 0) entry.durations.push(dur);\n }\n if (j.status === 'failed') entry.failed++;\n map.set(j.entity, entry);\n }\n\n const result: PipelineStats[] = [];\n for (const [pipeline, stats] of map) {\n result.push({\n pipeline,\n ...stats,\n avgDuration: stats.durations.length > 0\n ? stats.durations.reduce((a, b) => a + b, 0) / stats.durations.length\n : null,\n });\n }\n return result.sort((a, b) => b.total - a.total);\n }, [runs]);\n\n const totals = useMemo(() => ({\n total: runs.length,\n running: runs.filter((j) => j.status === 'running').length,\n completed: runs.filter((j) => j.status === 'completed').length,\n failed: runs.filter((j) => j.status === 'failed').length,\n }), [runs]);\n\n const goToRuns = (entity?: string, status?: string) => {\n const params = new URLSearchParams();\n if (namespace !== 'longtail') params.set('namespace', namespace);\n if (entity) params.set('entity', entity);\n if (status) params.set('status', status);\n const qs = params.toString();\n navigate(`/mcp/executions${qs ? `?${qs}` : ''}`);\n };\n\n const thCls = 'pb-2 text-[10px] font-semibold uppercase tracking-widest text-text-tertiary';\n\n return (\n <div>\n <PageHeader title=\"Discovered\" />\n\n {/* ── Duration tabs + namespace ────────────────────────── */}\n <div className=\"flex items-center gap-4 mb-6\">\n <div className=\"flex items-center gap-1\">\n {DURATIONS.map((d) => (\n <button\n key={d.label}\n onClick={() => setDuration(d.label)}\n className={`px-3 py-1 text-xs rounded-full transition-colors ${\n duration === d.label\n ? 'bg-accent text-text-inverse'\n : 'text-text-tertiary hover:text-text-primary hover:bg-surface-hover'\n }`}\n >\n {d.label}\n </button>\n ))}\n </div>\n {namespaces.length > 1 && (\n <select\n value={namespace}\n onChange={(e) => setNamespace(e.target.value)}\n className=\"select text-xs py-1 px-2\"\n >\n {namespaces.map((ns) => (\n <option key={ns} value={ns}>{ns}</option>\n ))}\n </select>\n )}\n </div>\n\n {/* ── Summary cards ────────────────────────────────────── */}\n <div className=\"grid grid-cols-4 gap-4 mb-8\">\n <StatCard label=\"Total Runs\" value={totals.total} onClick={() => goToRuns()} />\n <StatCard label=\"Running\" value={totals.running} colorClass=\"text-status-active\" onClick={() => goToRuns(undefined, 'running')} />\n <StatCard label=\"Completed\" value={totals.completed} colorClass=\"text-status-success\" onClick={() => goToRuns(undefined, 'completed')} />\n <StatCard label=\"Failed\" value={totals.failed} colorClass=\"text-status-error\" onClick={() => goToRuns(undefined, 'failed')} />\n </div>\n\n {/* ── By-pipeline table ────────────────────────────────── */}\n {byPipeline.length > 0 && (\n <table className=\"w-full text-left mb-10\">\n <thead>\n <tr className=\"border-b border-surface-border\">\n <th className={thCls}>Tool</th>\n <th className={`${thCls} text-right w-20`}>Total</th>\n <th className={`${thCls} text-right w-20`}>Running</th>\n <th className={`${thCls} text-right w-24`}>Completed</th>\n <th className={`${thCls} text-right w-20`}>Failed</th>\n <th className={`${thCls} text-right w-28`}>Avg Duration</th>\n </tr>\n </thead>\n <tbody>\n {byPipeline.map((row) => (\n <tr key={row.pipeline} className=\"border-b border-surface-border last:border-b-0\">\n <td className=\"py-3 text-sm font-mono text-text-primary\">\n <button\n onClick={() => goToRuns(row.pipeline)}\n className=\"hover:text-accent hover:underline\"\n >\n {row.pipeline}\n </button>\n </td>\n <td className=\"py-3 text-sm text-right\">\n <StatCell value={row.total} colorClass=\"text-text-secondary\" onClick={() => goToRuns(row.pipeline)} />\n </td>\n <td className=\"py-3 text-sm text-right\">\n <StatCell value={row.running} colorClass=\"text-status-active\" onClick={() => goToRuns(row.pipeline, 'running')} />\n </td>\n <td className=\"py-3 text-sm text-right\">\n <StatCell value={row.completed} colorClass=\"text-status-success\" onClick={() => goToRuns(row.pipeline, 'completed')} />\n </td>\n <td className=\"py-3 text-sm text-right\">\n <StatCell value={row.failed} colorClass=\"text-status-error\" onClick={() => goToRuns(row.pipeline, 'failed')} />\n </td>\n <td className=\"py-3 text-sm font-mono text-text-secondary text-right\">\n {row.avgDuration !== null ? formatDuration(row.avgDuration) : '—'}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n )}\n\n {byPipeline.length === 0 && (\n <div className=\"py-12 text-center mb-8\">\n <p className=\"text-sm text-text-tertiary\">\n No MCP tool activity in the last {duration}\n </p>\n </div>\n )}\n\n {/* ── Server inventory (compact cards) ─────────────────── */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <button\n onClick={() => navigate('/mcp/servers')}\n className=\"bg-surface-raised border border-surface-border rounded-md p-5 text-left hover:border-accent/40 transition-colors\"\n >\n <div className=\"flex items-center gap-3 mb-3\">\n <Server size={16} className=\"text-accent shrink-0\" />\n <span className=\"text-sm font-medium text-text-primary\">Tool Servers</span>\n </div>\n <p className=\"text-2xl font-light tabular-nums text-text-primary mb-1\">\n {serversLoading ? '—' : servers.length}\n <span className=\"text-sm text-text-tertiary font-normal ml-2\">\n server{servers.length !== 1 ? 's' : ''} · {serverToolCount} tool{serverToolCount !== 1 ? 's' : ''}\n </span>\n </p>\n <p className=\"text-[11px] text-text-tertiary leading-relaxed mt-2\">\n Built-in and external MCP servers. Each server exposes tools that workflows and agents can call.\n </p>\n </button>\n\n <button\n onClick={() => navigate('/mcp/workflows')}\n className=\"bg-surface-raised border border-surface-border rounded-md p-5 text-left hover:border-accent/40 transition-colors\"\n >\n <div className=\"flex items-center gap-3 mb-3\">\n <Workflow size={16} className=\"text-purple-400 shrink-0\" />\n <span className=\"text-sm font-medium text-text-primary\">Pipeline Registry</span>\n </div>\n <p className=\"text-2xl font-light tabular-nums text-text-primary mb-1\">\n {yamlLoading ? '—' : yamlWorkflows.length}\n <span className=\"text-sm text-text-tertiary font-normal ml-2\">\n workflow{yamlWorkflows.length !== 1 ? 's' : ''} · {workflowServerCount} server{workflowServerCount !== 1 ? 's' : ''}\n </span>\n </p>\n <p className=\"text-[11px] text-text-tertiary leading-relaxed mt-2\">\n Compiled from discovery runs. Deterministic tool-to-tool pipelines — no LLM, no token costs.\n </p>\n </button>\n </div>\n </div>\n );\n}\n"],"names":["DURATIONS","formatDuration","ms","StatCell","value","colorClass","onClick","jsxDEV","McpOverview","navigate","useNavigate","duration","setDuration","useState","namespace","setNamespace","nsData","useNamespaces","allRuns","useMcpRuns","serverData","serversLoading","useMcpServers","yamlData","yamlLoading","useYamlWorkflows","namespaces","useMemo","ns","servers","yamlWorkflows","serverToolCount","sum","s","workflowServerCount","wf","cutoff","d","runs","j","byPipeline","map","entry","dur","result","pipeline","stats","a","b","totals","goToRuns","entity","status","params","qs","thCls","PageHeader","e","StatCard","row","Server","Workflow"],"mappings":"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"}
1
+ {"version":3,"file":"McpOverview-BaKTIWrG.js","sources":["../../src/pages/mcp/McpOverview.tsx"],"sourcesContent":["import { useState, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Server, Workflow } from 'lucide-react';\nimport { useMcpServers } from '../../api/mcp';\nimport { useMcpRuns } from '../../api/mcp-runs';\nimport { useYamlWorkflows } from '../../api/yaml-workflows';\nimport { useNamespaces } from '../../api/namespaces';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { StatCard } from '../../components/common/data/StatCard';\nimport type { McpToolManifest } from '../../api/types';\n\n// ── Duration filter ──────────────────────────────────────────────────────────\n\nconst DURATIONS = [\n { label: '1h', ms: 3_600_000 },\n { label: '24h', ms: 86_400_000 },\n { label: '7d', ms: 604_800_000 },\n { label: '30d', ms: 2_592_000_000 },\n] as const;\n\ntype DurationLabel = (typeof DURATIONS)[number]['label'];\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction formatDuration(ms: number): string {\n if (ms < 1000) return `${Math.round(ms)}ms`;\n if (ms < 60_000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3_600_000) return `${(ms / 60_000).toFixed(1)}m`;\n return `${(ms / 3_600_000).toFixed(1)}h`;\n}\n\ninterface PipelineStats {\n pipeline: string;\n total: number;\n running: number;\n completed: number;\n failed: number;\n avgDuration: number | null;\n}\n\n// ── Reusable components ──────────────────────────────────────────────────────\n\nfunction StatCell({\n value,\n colorClass,\n onClick,\n}: {\n value: number;\n colorClass: string;\n onClick: () => void;\n}) {\n if (value === 0) {\n return <span className=\"text-text-tertiary\">0</span>;\n }\n return (\n <button\n onClick={onClick}\n className={`${colorClass} hover:underline tabular-nums font-medium`}\n >\n {value}\n </button>\n );\n}\n\n// ── Page ─────────────────────────────────────────────────────────────────────\n\nexport function McpOverview() {\n const navigate = useNavigate();\n const [duration, setDuration] = useState<DurationLabel>('24h');\n const [namespace, setNamespace] = useState('longtail');\n\n const { data: nsData } = useNamespaces();\n const { data: allRuns } = useMcpRuns({ limit: 500, app_id: namespace });\n const { data: serverData, isLoading: serversLoading } = useMcpServers();\n const { data: yamlData, isLoading: yamlLoading } = useYamlWorkflows({ limit: 200 });\n\n const namespaces = useMemo(\n () => (nsData?.namespaces ?? []).map((ns) => ns.name),\n [nsData?.namespaces],\n );\n\n // ── Server counts ────────────────────────────────────────────\n const servers = serverData?.servers ?? [];\n const yamlWorkflows = yamlData?.workflows ?? [];\n\n const serverToolCount = useMemo(\n () => servers.reduce((sum, s) => sum + (Array.isArray(s.tool_manifest) ? (s.tool_manifest as McpToolManifest[]).length : 0), 0),\n [servers],\n );\n\n const workflowServerCount = useMemo(() => {\n const appIds = new Set(yamlWorkflows.map((wf) => wf.app_id));\n return appIds.size;\n }, [yamlWorkflows]);\n\n // ── Run stats ──────────────────────────────────────────────────\n const cutoff = useMemo(() => {\n const d = DURATIONS.find((d) => d.label === duration)!;\n return Date.now() - d.ms;\n }, [duration]);\n\n const runs = useMemo(\n () => (allRuns?.jobs ?? []).filter((j) => new Date(j.created_at).getTime() >= cutoff),\n [allRuns?.jobs, cutoff],\n );\n\n const byPipeline = useMemo(() => {\n const map = new Map<string, { total: number; running: number; completed: number; failed: number; durations: number[] }>();\n for (const j of runs) {\n const entry = map.get(j.entity) ?? { total: 0, running: 0, completed: 0, failed: 0, durations: [] };\n entry.total++;\n if (j.status === 'running') entry.running++;\n if (j.status === 'completed') {\n entry.completed++;\n const dur = new Date(j.updated_at).getTime() - new Date(j.created_at).getTime();\n if (dur > 0) entry.durations.push(dur);\n }\n if (j.status === 'failed') entry.failed++;\n map.set(j.entity, entry);\n }\n\n const result: PipelineStats[] = [];\n for (const [pipeline, stats] of map) {\n result.push({\n pipeline,\n ...stats,\n avgDuration: stats.durations.length > 0\n ? stats.durations.reduce((a, b) => a + b, 0) / stats.durations.length\n : null,\n });\n }\n return result.sort((a, b) => b.total - a.total);\n }, [runs]);\n\n const totals = useMemo(() => ({\n total: runs.length,\n running: runs.filter((j) => j.status === 'running').length,\n completed: runs.filter((j) => j.status === 'completed').length,\n failed: runs.filter((j) => j.status === 'failed').length,\n }), [runs]);\n\n const goToRuns = (entity?: string, status?: string) => {\n const params = new URLSearchParams();\n if (namespace !== 'longtail') params.set('namespace', namespace);\n if (entity) params.set('entity', entity);\n if (status) params.set('status', status);\n const qs = params.toString();\n navigate(`/mcp/executions${qs ? `?${qs}` : ''}`);\n };\n\n const thCls = 'pb-2 text-[10px] font-semibold uppercase tracking-widest text-text-tertiary';\n\n return (\n <div>\n <PageHeader title=\"Discovered\" />\n\n {/* ── Duration tabs + namespace ────────────────────────── */}\n <div className=\"flex items-center gap-4 mb-6\">\n <div className=\"flex items-center gap-1\">\n {DURATIONS.map((d) => (\n <button\n key={d.label}\n onClick={() => setDuration(d.label)}\n className={`px-3 py-1 text-xs rounded-full transition-colors ${\n duration === d.label\n ? 'bg-accent text-text-inverse'\n : 'text-text-tertiary hover:text-text-primary hover:bg-surface-hover'\n }`}\n >\n {d.label}\n </button>\n ))}\n </div>\n {namespaces.length > 1 && (\n <select\n value={namespace}\n onChange={(e) => setNamespace(e.target.value)}\n className=\"select text-xs py-1 px-2\"\n >\n {namespaces.map((ns) => (\n <option key={ns} value={ns}>{ns}</option>\n ))}\n </select>\n )}\n </div>\n\n {/* ── Summary cards ────────────────────────────────────── */}\n <div className=\"grid grid-cols-4 gap-4 mb-8\">\n <StatCard label=\"Total Runs\" value={totals.total} onClick={() => goToRuns()} />\n <StatCard label=\"Running\" value={totals.running} colorClass=\"text-status-active\" onClick={() => goToRuns(undefined, 'running')} />\n <StatCard label=\"Completed\" value={totals.completed} colorClass=\"text-status-success\" onClick={() => goToRuns(undefined, 'completed')} />\n <StatCard label=\"Failed\" value={totals.failed} colorClass=\"text-status-error\" onClick={() => goToRuns(undefined, 'failed')} />\n </div>\n\n {/* ── By-pipeline table ────────────────────────────────── */}\n {byPipeline.length > 0 && (\n <table className=\"w-full text-left mb-10\">\n <thead>\n <tr className=\"border-b border-surface-border\">\n <th className={thCls}>Tool</th>\n <th className={`${thCls} text-right w-20`}>Total</th>\n <th className={`${thCls} text-right w-20`}>Running</th>\n <th className={`${thCls} text-right w-24`}>Completed</th>\n <th className={`${thCls} text-right w-20`}>Failed</th>\n <th className={`${thCls} text-right w-28`}>Avg Duration</th>\n </tr>\n </thead>\n <tbody>\n {byPipeline.map((row) => (\n <tr key={row.pipeline} className=\"border-b border-surface-border last:border-b-0\">\n <td className=\"py-3 text-sm font-mono text-text-primary\">\n <button\n onClick={() => goToRuns(row.pipeline)}\n className=\"hover:text-accent hover:underline\"\n >\n {row.pipeline}\n </button>\n </td>\n <td className=\"py-3 text-sm text-right\">\n <StatCell value={row.total} colorClass=\"text-text-secondary\" onClick={() => goToRuns(row.pipeline)} />\n </td>\n <td className=\"py-3 text-sm text-right\">\n <StatCell value={row.running} colorClass=\"text-status-active\" onClick={() => goToRuns(row.pipeline, 'running')} />\n </td>\n <td className=\"py-3 text-sm text-right\">\n <StatCell value={row.completed} colorClass=\"text-status-success\" onClick={() => goToRuns(row.pipeline, 'completed')} />\n </td>\n <td className=\"py-3 text-sm text-right\">\n <StatCell value={row.failed} colorClass=\"text-status-error\" onClick={() => goToRuns(row.pipeline, 'failed')} />\n </td>\n <td className=\"py-3 text-sm font-mono text-text-secondary text-right\">\n {row.avgDuration !== null ? formatDuration(row.avgDuration) : '—'}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n )}\n\n {byPipeline.length === 0 && (\n <div className=\"py-12 text-center mb-8\">\n <p className=\"text-sm text-text-tertiary\">\n No MCP tool activity in the last {duration}\n </p>\n </div>\n )}\n\n {/* ── Server inventory (compact cards) ─────────────────── */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <button\n onClick={() => navigate('/mcp/servers')}\n className=\"bg-surface-raised border border-surface-border rounded-md p-5 text-left hover:border-accent/40 transition-colors\"\n >\n <div className=\"flex items-center gap-3 mb-3\">\n <Server size={16} className=\"text-accent shrink-0\" />\n <span className=\"text-sm font-medium text-text-primary\">Tool Servers</span>\n </div>\n <p className=\"text-2xl font-light tabular-nums text-text-primary mb-1\">\n {serversLoading ? '—' : servers.length}\n <span className=\"text-sm text-text-tertiary font-normal ml-2\">\n server{servers.length !== 1 ? 's' : ''} · {serverToolCount} tool{serverToolCount !== 1 ? 's' : ''}\n </span>\n </p>\n <p className=\"text-[11px] text-text-tertiary leading-relaxed mt-2\">\n Built-in and external MCP servers. Each server exposes tools that workflows and agents can call.\n </p>\n </button>\n\n <button\n onClick={() => navigate('/mcp/workflows')}\n className=\"bg-surface-raised border border-surface-border rounded-md p-5 text-left hover:border-accent/40 transition-colors\"\n >\n <div className=\"flex items-center gap-3 mb-3\">\n <Workflow size={16} className=\"text-purple-400 shrink-0\" />\n <span className=\"text-sm font-medium text-text-primary\">Pipeline Registry</span>\n </div>\n <p className=\"text-2xl font-light tabular-nums text-text-primary mb-1\">\n {yamlLoading ? '—' : yamlWorkflows.length}\n <span className=\"text-sm text-text-tertiary font-normal ml-2\">\n workflow{yamlWorkflows.length !== 1 ? 's' : ''} · {workflowServerCount} server{workflowServerCount !== 1 ? 's' : ''}\n </span>\n </p>\n <p className=\"text-[11px] text-text-tertiary leading-relaxed mt-2\">\n Compiled from discovery runs. Deterministic tool-to-tool pipelines — no LLM, no token costs.\n </p>\n </button>\n </div>\n </div>\n );\n}\n"],"names":["DURATIONS","formatDuration","ms","StatCell","value","colorClass","onClick","jsxDEV","McpOverview","navigate","useNavigate","duration","setDuration","useState","namespace","setNamespace","nsData","useNamespaces","allRuns","useMcpRuns","serverData","serversLoading","useMcpServers","yamlData","yamlLoading","useYamlWorkflows","namespaces","useMemo","ns","servers","yamlWorkflows","serverToolCount","sum","s","workflowServerCount","wf","cutoff","d","runs","j","byPipeline","map","entry","dur","result","pipeline","stats","a","b","totals","goToRuns","entity","status","params","qs","thCls","PageHeader","e","StatCard","row","Server","Workflow"],"mappings":"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"}