@hotmeshio/long-tail 0.1.12 → 0.1.14

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 (282) hide show
  1. package/README.md +1 -1
  2. package/build/api/files.d.ts +13 -0
  3. package/build/api/files.js +44 -0
  4. package/build/api/mcp-runs.d.ts +2 -0
  5. package/build/api/mcp-runs.js +2 -0
  6. package/build/api/workflow-sets.d.ts +11 -0
  7. package/build/api/workflow-sets.js +62 -0
  8. package/build/api/yaml-workflows.d.ts +9 -0
  9. package/build/api/yaml-workflows.js +40 -11
  10. package/build/examples/seed.js +50 -0
  11. package/build/lib/db/schemas/001_schema.sql +281 -106
  12. package/build/lib/db/schemas/002_seed.sql +56 -39
  13. package/build/lib/storage/local.d.ts +15 -0
  14. package/build/lib/storage/local.js +63 -0
  15. package/build/lib/storage/mime.d.ts +4 -0
  16. package/build/lib/storage/mime.js +31 -0
  17. package/build/lib/storage/s3.d.ts +16 -0
  18. package/build/lib/storage/s3.js +70 -0
  19. package/build/lib/storage/types.d.ts +18 -0
  20. package/build/modules/utils.d.ts +73 -0
  21. package/build/modules/utils.js +84 -0
  22. package/build/routes/file-browser.d.ts +2 -0
  23. package/build/routes/file-browser.js +112 -0
  24. package/build/routes/files.js +25 -17
  25. package/build/routes/index.js +2 -0
  26. package/build/routes/mcp-runs.js +2 -0
  27. package/build/routes/workflow-sets.js +9 -0
  28. package/build/routes/yaml-workflows/deployment.js +8 -0
  29. package/build/services/insight/index.d.ts +13 -0
  30. package/build/services/insight/index.js +4 -7
  31. package/build/services/insight/prompts.d.ts +1 -1
  32. package/build/services/insight/prompts.js +1 -1
  33. package/build/services/mcp/server.js +31 -0
  34. package/build/services/mcp-runs/queries.d.ts +2 -0
  35. package/build/services/mcp-runs/queries.js +11 -1
  36. package/build/services/mcp-runs/sql.d.ts +1 -1
  37. package/build/services/mcp-runs/sql.js +2 -2
  38. package/build/services/workflow-sets/db.d.ts +1 -0
  39. package/build/services/workflow-sets/db.js +6 -0
  40. package/build/services/workflow-sets/index.d.ts +1 -1
  41. package/build/services/workflow-sets/index.js +2 -1
  42. package/build/services/workflow-sets/sql.d.ts +1 -0
  43. package/build/services/workflow-sets/sql.js +6 -1
  44. package/build/services/yaml-workflow/db.d.ts +12 -0
  45. package/build/services/yaml-workflow/db.js +18 -0
  46. package/build/services/yaml-workflow/generator.js +4 -4
  47. package/build/services/yaml-workflow/pipeline/build/index.d.ts +2 -1
  48. package/build/services/yaml-workflow/pipeline/build/index.js +3 -2
  49. package/build/services/yaml-workflow/pipeline/build/utils.d.ts +0 -2
  50. package/build/services/yaml-workflow/pipeline/build/utils.js +0 -8
  51. package/build/services/yaml-workflow/sql.d.ts +2 -1
  52. package/build/services/yaml-workflow/sql.js +10 -3
  53. package/build/system/activities/schema-exchange.d.ts +50 -0
  54. package/build/system/activities/schema-exchange.js +210 -0
  55. package/build/system/activities/sql.d.ts +1 -1
  56. package/build/system/activities/sql.js +12 -1
  57. package/build/system/index.js +1 -0
  58. package/build/system/mcp-servers/human-queue.js +31 -0
  59. package/build/system/mcp-servers/knowledge.js +35 -6
  60. package/build/system/mcp-servers/schema-exchange.d.ts +4 -0
  61. package/build/system/mcp-servers/schema-exchange.js +93 -0
  62. package/build/system/seed/server-definitions.d.ts +112 -1
  63. package/build/system/seed/server-definitions.js +37 -0
  64. package/build/system/seed/tool-manifests-data.d.ts +87 -0
  65. package/build/system/seed/tool-manifests-data.js +37 -1
  66. package/build/system/seed/tool-manifests-knowledge.d.ts +9 -1
  67. package/build/system/seed/tool-manifests-knowledge.js +6 -5
  68. package/build/system/workflows/mcp-workflow-builder/prompts.d.ts +1 -1
  69. package/build/system/workflows/mcp-workflow-builder/prompts.js +21 -20
  70. package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +1 -1
  71. package/build/system/workflows/mcp-workflow-planner/activities/persist.js +3 -3
  72. package/build/system/workflows/mcp-workflow-planner/index.js +39 -5
  73. package/build/system/workflows/mcp-workflow-planner/prompts.d.ts +1 -1
  74. package/build/system/workflows/mcp-workflow-planner/prompts.js +3 -3
  75. package/build/tsconfig.tsbuildinfo +1 -1
  76. package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js → AdminDashboard-Cngijp4Q.js} +2 -2
  77. package/dashboard/dist/assets/{AdminDashboard-DUrSBQOl.js.map → AdminDashboard-Cngijp4Q.js.map} +1 -1
  78. package/dashboard/dist/assets/{AvailableEscalationsPage-Dbd1qUK_.js → AvailableEscalationsPage-CpBfGV1h.js} +2 -2
  79. package/dashboard/dist/assets/{AvailableEscalationsPage-Dbd1qUK_.js.map → AvailableEscalationsPage-CpBfGV1h.js.map} +1 -1
  80. package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js → BotPicker-B8Uvw9Si.js} +2 -2
  81. package/dashboard/dist/assets/{BotPicker-Cg5iNEkm.js.map → BotPicker-B8Uvw9Si.js.map} +1 -1
  82. package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js → CollapsibleSection-DiFPuWOY.js} +2 -2
  83. package/dashboard/dist/assets/{CollapsibleSection-Kd9UIyeU.js.map → CollapsibleSection-DiFPuWOY.js.map} +1 -1
  84. package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js → ConfirmDeleteModal-CpXG9uyu.js} +2 -2
  85. package/dashboard/dist/assets/{ConfirmDeleteModal-DZMgmlof.js.map → ConfirmDeleteModal-CpXG9uyu.js.map} +1 -1
  86. package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js → CopyableId-DKsTR9lK.js} +2 -2
  87. package/dashboard/dist/assets/{CopyableId-cPFTRm8q.js.map → CopyableId-DKsTR9lK.js.map} +1 -1
  88. package/dashboard/dist/assets/CredentialsPage-DlS7Kf40.js +2 -0
  89. package/dashboard/dist/assets/{CredentialsPage-DJablIbs.js.map → CredentialsPage-DlS7Kf40.js.map} +1 -1
  90. package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js → CustomDurationPicker-B-9eW3pm.js} +2 -2
  91. package/dashboard/dist/assets/{CustomDurationPicker-NgIP6YDW.js.map → CustomDurationPicker-B-9eW3pm.js.map} +1 -1
  92. package/dashboard/dist/assets/{DataTable-CTRhTAfT.js → DataTable-DkOokbtL.js} +2 -2
  93. package/dashboard/dist/assets/{DataTable-CTRhTAfT.js.map → DataTable-DkOokbtL.js.map} +1 -1
  94. package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js → ElapsedCell-DVtHqM-5.js} +2 -2
  95. package/dashboard/dist/assets/{ElapsedCell-HcSJ_MMs.js.map → ElapsedCell-DVtHqM-5.js.map} +1 -1
  96. package/dashboard/dist/assets/{EmptyState-joNbd4gg.js → EmptyState-C7KIMIbE.js} +2 -2
  97. package/dashboard/dist/assets/{EmptyState-joNbd4gg.js.map → EmptyState-C7KIMIbE.js.map} +1 -1
  98. package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js → EscalationsOverview-BMKBlkPx.js} +2 -2
  99. package/dashboard/dist/assets/{EscalationsOverview-DpXDnQux.js.map → EscalationsOverview-BMKBlkPx.js.map} +1 -1
  100. package/dashboard/dist/assets/{EventTable-CYem3v8n.js → EventTable-BYZ5OVdQ.js} +2 -2
  101. package/dashboard/dist/assets/{EventTable-CYem3v8n.js.map → EventTable-BYZ5OVdQ.js.map} +1 -1
  102. package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js → FilterBar-C5r3n6YO.js} +2 -2
  103. package/dashboard/dist/assets/{FilterBar-BiO8SOzc.js.map → FilterBar-C5r3n6YO.js.map} +1 -1
  104. package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js → ListToolbar-BGUajIsW.js} +2 -2
  105. package/dashboard/dist/assets/{ListToolbar-6yRDh2e9.js.map → ListToolbar-BGUajIsW.js.map} +1 -1
  106. package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js → McpOverview-B_kJYHea.js} +2 -2
  107. package/dashboard/dist/assets/{McpOverview-CUgSxkQe.js.map → McpOverview-B_kJYHea.js.map} +1 -1
  108. package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js +5 -0
  109. package/dashboard/dist/assets/McpQueryDetailPage-Czsmovqw.js.map +1 -0
  110. package/dashboard/dist/assets/McpQueryPage-BgAq_bQg.js +2 -0
  111. package/dashboard/dist/assets/{McpQueryPage-lV6kfDG5.js.map → McpQueryPage-BgAq_bQg.js.map} +1 -1
  112. package/dashboard/dist/assets/McpRunDetailPage-B8c0OszR.js +2 -0
  113. package/dashboard/dist/assets/McpRunDetailPage-B8c0OszR.js.map +1 -0
  114. package/dashboard/dist/assets/McpRunsPage-BY8C6k78.js +2 -0
  115. package/dashboard/dist/assets/McpRunsPage-BY8C6k78.js.map +1 -0
  116. package/dashboard/dist/assets/{Modal-BuTvD0pz.js → Modal-E1yRnCeW.js} +2 -2
  117. package/dashboard/dist/assets/{Modal-BuTvD0pz.js.map → Modal-E1yRnCeW.js.map} +1 -1
  118. package/dashboard/dist/assets/OperatorDashboard-C8MSTzey.js +2 -0
  119. package/dashboard/dist/assets/{OperatorDashboard-C9SSV96T.js.map → OperatorDashboard-C8MSTzey.js.map} +1 -1
  120. package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js → PageHeader-Cm5HBQF_.js} +2 -2
  121. package/dashboard/dist/assets/{PageHeader-BcTVF9ul.js.map → PageHeader-Cm5HBQF_.js.map} +1 -1
  122. package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js → PageHeaderWithStats-CNmWJFSN.js} +2 -2
  123. package/dashboard/dist/assets/{PageHeaderWithStats-BI7JG5x6.js.map → PageHeaderWithStats-CNmWJFSN.js.map} +1 -1
  124. package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js → PriorityBadge-HSI4RVhs.js} +2 -2
  125. package/dashboard/dist/assets/{PriorityBadge-DqVaOU65.js.map → PriorityBadge-HSI4RVhs.js.map} +1 -1
  126. package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js → ProcessDetailPage-Dln8622H.js} +2 -2
  127. package/dashboard/dist/assets/{ProcessDetailPage-hFMhf9qa.js.map → ProcessDetailPage-Dln8622H.js.map} +1 -1
  128. package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js → ProcessesListPage-bIsd9N_h.js} +2 -2
  129. package/dashboard/dist/assets/{ProcessesListPage-ByVoBCQ3.js.map → ProcessesListPage-bIsd9N_h.js.map} +1 -1
  130. package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js → RolePill-BVUp2bF0.js} +2 -2
  131. package/dashboard/dist/assets/{RolePill-D9ZIkYiu.js.map → RolePill-BVUp2bF0.js.map} +1 -1
  132. package/dashboard/dist/assets/RolesPage-kH-Njt25.js +2 -0
  133. package/dashboard/dist/assets/{RolesPage-SMedMuqa.js.map → RolesPage-kH-Njt25.js.map} +1 -1
  134. package/dashboard/dist/assets/{RowActions-yDhwwDbU.js → RowActions-DbUJPfaW.js} +2 -2
  135. package/dashboard/dist/assets/{RowActions-yDhwwDbU.js.map → RowActions-DbUJPfaW.js.map} +1 -1
  136. package/dashboard/dist/assets/{StatCard-BrBnQFxh.js → StatCard-Bs3JbyAz.js} +2 -2
  137. package/dashboard/dist/assets/{StatCard-BrBnQFxh.js.map → StatCard-Bs3JbyAz.js.map} +1 -1
  138. package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js → StatusBadge-CakDdsCw.js} +2 -2
  139. package/dashboard/dist/assets/{StatusBadge-xgb-lZku.js.map → StatusBadge-CakDdsCw.js.map} +1 -1
  140. package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js → StepIndicator-Cd_SG_yA.js} +2 -2
  141. package/dashboard/dist/assets/{StepIndicator-B9ps2SvM.js.map → StepIndicator-Cd_SG_yA.js.map} +1 -1
  142. package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js → StickyPagination-Bz0C18nC.js} +2 -2
  143. package/dashboard/dist/assets/{StickyPagination-DTIjBKN3.js.map → StickyPagination-Bz0C18nC.js.map} +1 -1
  144. package/dashboard/dist/assets/{SwimlaneTimeline-RK4Yu66z.js → SwimlaneTimeline-Cfe-xQRX.js} +2 -2
  145. package/dashboard/dist/assets/{SwimlaneTimeline-RK4Yu66z.js.map → SwimlaneTimeline-Cfe-xQRX.js.map} +1 -1
  146. package/dashboard/dist/assets/{TagInput-CdNUuqk4.js → TagInput-ClFhXG-U.js} +2 -2
  147. package/dashboard/dist/assets/{TagInput-CdNUuqk4.js.map → TagInput-ClFhXG-U.js.map} +1 -1
  148. package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js → TaskDetailPage-SuMBdARt.js} +2 -2
  149. package/dashboard/dist/assets/{TaskDetailPage-C-nzaNea.js.map → TaskDetailPage-SuMBdARt.js.map} +1 -1
  150. package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js → TaskQueuePill-lJR1JW_W.js} +2 -2
  151. package/dashboard/dist/assets/{TaskQueuePill-Lvr2-NzS.js.map → TaskQueuePill-lJR1JW_W.js.map} +1 -1
  152. package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js → TasksListPage-Dkq1Vtbt.js} +2 -2
  153. package/dashboard/dist/assets/{TasksListPage-DSUmD84y.js.map → TasksListPage-Dkq1Vtbt.js.map} +1 -1
  154. package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js → TimeAgo-DgfDZ1pl.js} +2 -2
  155. package/dashboard/dist/assets/{TimeAgo-BZdLdrIh.js.map → TimeAgo-DgfDZ1pl.js.map} +1 -1
  156. package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js → TimestampCell-MpHZ1hMD.js} +2 -2
  157. package/dashboard/dist/assets/{TimestampCell-QX_0i5FK.js.map → TimestampCell-MpHZ1hMD.js.map} +1 -1
  158. package/dashboard/dist/assets/{UserName-DyZMXcBm.js → UserName-DqsosA4B.js} +2 -2
  159. package/dashboard/dist/assets/{UserName-DyZMXcBm.js.map → UserName-DqsosA4B.js.map} +1 -1
  160. package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js → WorkflowExecutionPage-CVlg38C3.js} +2 -2
  161. package/dashboard/dist/assets/{WorkflowExecutionPage-DjVxfZaF.js.map → WorkflowExecutionPage-CVlg38C3.js.map} +1 -1
  162. package/dashboard/dist/assets/WorkflowPill-CRpZhjGR.js +2 -0
  163. package/dashboard/dist/assets/WorkflowPill-CRpZhjGR.js.map +1 -0
  164. package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js → WorkflowsDashboard-Ugzbs8mV.js} +2 -2
  165. package/dashboard/dist/assets/{WorkflowsDashboard-DZjuiFZ0.js.map → WorkflowsDashboard-Ugzbs8mV.js.map} +1 -1
  166. package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js → WorkflowsOverview-CIp_lTNl.js} +2 -2
  167. package/dashboard/dist/assets/{WorkflowsOverview-CLnLRpOu.js.map → WorkflowsOverview-CIp_lTNl.js.map} +1 -1
  168. package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js +2 -0
  169. package/dashboard/dist/assets/YamlWorkflowsPage-BICF0fRO.js.map +1 -0
  170. package/dashboard/dist/assets/{bots-DIM6lBoY.js → bots-DPfUpVqI.js} +2 -2
  171. package/dashboard/dist/assets/{bots-DIM6lBoY.js.map → bots-DPfUpVqI.js.map} +1 -1
  172. package/dashboard/dist/assets/{escalation-JOTuOqjq.js → escalation-RrCDbMC3.js} +2 -2
  173. package/dashboard/dist/assets/{escalation-JOTuOqjq.js.map → escalation-RrCDbMC3.js.map} +1 -1
  174. package/dashboard/dist/assets/escalation-columns-CDGa9wsD.js +2 -0
  175. package/dashboard/dist/assets/{escalation-columns-Cyg58nkg.js.map → escalation-columns-CDGa9wsD.js.map} +1 -1
  176. package/dashboard/dist/assets/{helpers-B1BDxBZd.js → helpers-ZSKqdkdS.js} +2 -2
  177. package/dashboard/dist/assets/{helpers-B1BDxBZd.js.map → helpers-ZSKqdkdS.js.map} +1 -1
  178. package/dashboard/dist/assets/helpers-rMEcLwKs.js +2 -0
  179. package/dashboard/dist/assets/helpers-rMEcLwKs.js.map +1 -0
  180. package/dashboard/dist/assets/{index-DDYFpi4l.js → index-ABcJHHlN.js} +2 -2
  181. package/dashboard/dist/assets/{index-DDYFpi4l.js.map → index-ABcJHHlN.js.map} +1 -1
  182. package/dashboard/dist/assets/{index-D1wVX50Z.js → index-B91h_jZ0.js} +2 -2
  183. package/dashboard/dist/assets/{index-D1wVX50Z.js.map → index-B91h_jZ0.js.map} +1 -1
  184. package/dashboard/dist/assets/{index-BcR6PfpY.js → index-BbI2dzhJ.js} +2 -2
  185. package/dashboard/dist/assets/{index-BcR6PfpY.js.map → index-BbI2dzhJ.js.map} +1 -1
  186. package/dashboard/dist/assets/{index-BizfauqT.js → index-BmVCyB6C.js} +4 -4
  187. package/dashboard/dist/assets/{index-BizfauqT.js.map → index-BmVCyB6C.js.map} +1 -1
  188. package/dashboard/dist/assets/index-C1E5GTs9.js +2 -0
  189. package/dashboard/dist/assets/index-C1E5GTs9.js.map +1 -0
  190. package/dashboard/dist/assets/{index-Cf60K3x9.js → index-C90ZPzXk.js} +2 -2
  191. package/dashboard/dist/assets/{index-Cf60K3x9.js.map → index-C90ZPzXk.js.map} +1 -1
  192. package/dashboard/dist/assets/{index-BYZX9tOb.js → index-Cmgrk7PQ.js} +58 -58
  193. package/dashboard/dist/assets/index-Cmgrk7PQ.js.map +1 -0
  194. package/dashboard/dist/assets/{index-Ds0JoXS2.js → index-DNytWfSZ.js} +2 -2
  195. package/dashboard/dist/assets/{index-Ds0JoXS2.js.map → index-DNytWfSZ.js.map} +1 -1
  196. package/dashboard/dist/assets/index-DX6zxr6t.js +2 -0
  197. package/dashboard/dist/assets/{index-Cg5nfiYX.js.map → index-DX6zxr6t.js.map} +1 -1
  198. package/dashboard/dist/assets/index-DeX-ezqf.css +1 -0
  199. package/dashboard/dist/assets/index-K40Qw1tk.js +2 -0
  200. package/dashboard/dist/assets/{index-Di12t56M.js.map → index-K40Qw1tk.js.map} +1 -1
  201. package/dashboard/dist/assets/{index-BUK3qR-1.js → index-lCyNr5Xk.js} +2 -2
  202. package/dashboard/dist/assets/{index-BUK3qR-1.js.map → index-lCyNr5Xk.js.map} +1 -1
  203. package/dashboard/dist/assets/{mcp-B_xbczAt.js → mcp-CNE44TSp.js} +2 -2
  204. package/dashboard/dist/assets/{mcp-B_xbczAt.js.map → mcp-CNE44TSp.js.map} +1 -1
  205. package/dashboard/dist/assets/mcp-query-RQX0uN-5.js +2 -0
  206. package/dashboard/dist/assets/mcp-query-RQX0uN-5.js.map +1 -0
  207. package/dashboard/dist/assets/mcp-runs-0w40bdz-.js +2 -0
  208. package/dashboard/dist/assets/mcp-runs-0w40bdz-.js.map +1 -0
  209. package/dashboard/dist/assets/{namespaces-C3WtdO_9.js → namespaces-BbmdXuPp.js} +2 -2
  210. package/dashboard/dist/assets/{namespaces-C3WtdO_9.js.map → namespaces-BbmdXuPp.js.map} +1 -1
  211. package/dashboard/dist/assets/{roles-BDAsPpZG.js → roles-DoHYlhWH.js} +2 -2
  212. package/dashboard/dist/assets/{roles-BDAsPpZG.js.map → roles-DoHYlhWH.js.map} +1 -1
  213. package/dashboard/dist/assets/{settings-Ife_UwAp.js → settings-BAiJiCHS.js} +2 -2
  214. package/dashboard/dist/assets/{settings-Ife_UwAp.js.map → settings-BAiJiCHS.js.map} +1 -1
  215. package/dashboard/dist/assets/{tasks-BquNDHDI.js → tasks-CvroqHtm.js} +2 -2
  216. package/dashboard/dist/assets/{tasks-BquNDHDI.js.map → tasks-CvroqHtm.js.map} +1 -1
  217. package/dashboard/dist/assets/{useEventHooks-anv_B2Yy.js → useEventHooks-BHMbzR_y.js} +2 -2
  218. package/dashboard/dist/assets/{useEventHooks-anv_B2Yy.js.map → useEventHooks-BHMbzR_y.js.map} +1 -1
  219. package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js +2 -0
  220. package/dashboard/dist/assets/useFilterParams-CGRYFw_A.js.map +1 -0
  221. package/dashboard/dist/assets/useYamlActivityEvents-D56KV14X.js +2 -0
  222. package/dashboard/dist/assets/useYamlActivityEvents-D56KV14X.js.map +1 -0
  223. package/dashboard/dist/assets/{users-CFcxB4v6.js → users-CxIMy_xw.js} +2 -2
  224. package/dashboard/dist/assets/{users-CFcxB4v6.js.map → users-CxIMy_xw.js.map} +1 -1
  225. package/dashboard/dist/assets/{vendor-icons-T4r2DSPD.js → vendor-icons-AFGxSeQS.js} +132 -82
  226. package/dashboard/dist/assets/vendor-icons-AFGxSeQS.js.map +1 -0
  227. package/dashboard/dist/assets/{workflows-CeRci9z3.js → workflows-yR9yais7.js} +2 -2
  228. package/dashboard/dist/assets/{workflows-CeRci9z3.js.map → workflows-yR9yais7.js.map} +1 -1
  229. package/dashboard/dist/assets/yaml-workflows-QVF2MZ0l.js +2 -0
  230. package/dashboard/dist/assets/yaml-workflows-QVF2MZ0l.js.map +1 -0
  231. package/dashboard/dist/index.html +3 -3
  232. package/docs/schema-exchange.md +173 -0
  233. package/docs/self-test.md +106 -0
  234. package/package.json +4 -2
  235. package/build/lib/db/schemas/003_workflow_discovery.sql +0 -39
  236. package/build/lib/db/schemas/004_query_router.sql +0 -38
  237. package/build/lib/db/schemas/004_workflow_sets.sql +0 -29
  238. package/build/lib/db/schemas/005_triage_router.sql +0 -37
  239. package/build/lib/db/schemas/005_unique_graph_topic.sql +0 -7
  240. package/build/lib/db/schemas/006_oauth.sql +0 -50
  241. package/build/lib/db/schemas/007_security.sql +0 -27
  242. package/build/lib/db/schemas/008_bot_accounts.sql +0 -30
  243. package/build/lib/db/schemas/009_audit_trail.sql +0 -7
  244. package/build/lib/db/schemas/010_credential_providers.sql +0 -4
  245. package/build/lib/db/schemas/011_system_workflow_configs.sql +0 -37
  246. package/build/lib/db/schemas/012_drop_modality.sql +0 -6
  247. package/build/lib/db/schemas/013_execute_as.sql +0 -9
  248. package/build/lib/db/schemas/014_ephemeral_credentials.sql +0 -16
  249. package/build/lib/db/schemas/015_knowledge.sql +0 -23
  250. package/build/lib/db/schemas/016_streamable_http.sql +0 -7
  251. package/dashboard/dist/assets/CredentialsPage-DJablIbs.js +0 -2
  252. package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js +0 -5
  253. package/dashboard/dist/assets/McpQueryDetailPage-BWbinTM_.js.map +0 -1
  254. package/dashboard/dist/assets/McpQueryPage-lV6kfDG5.js +0 -2
  255. package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js +0 -2
  256. package/dashboard/dist/assets/McpRunDetailPage-D6gaxH3_.js.map +0 -1
  257. package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js +0 -2
  258. package/dashboard/dist/assets/McpRunsPage-DKvTklh9.js.map +0 -1
  259. package/dashboard/dist/assets/OperatorDashboard-C9SSV96T.js +0 -2
  260. package/dashboard/dist/assets/RolesPage-SMedMuqa.js +0 -2
  261. package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js +0 -2
  262. package/dashboard/dist/assets/WorkflowPill-CZqGslD6.js.map +0 -1
  263. package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js +0 -2
  264. package/dashboard/dist/assets/YamlWorkflowsPage-VjdhnLmO.js.map +0 -1
  265. package/dashboard/dist/assets/escalation-columns-Cyg58nkg.js +0 -2
  266. package/dashboard/dist/assets/helpers-BCix9c_m.js +0 -2
  267. package/dashboard/dist/assets/helpers-BCix9c_m.js.map +0 -1
  268. package/dashboard/dist/assets/index-BYZX9tOb.js.map +0 -1
  269. package/dashboard/dist/assets/index-Cg5nfiYX.js +0 -2
  270. package/dashboard/dist/assets/index-DcIKW-cZ.css +0 -1
  271. package/dashboard/dist/assets/index-Di12t56M.js +0 -2
  272. package/dashboard/dist/assets/mcp-query-B8-P_QoG.js +0 -2
  273. package/dashboard/dist/assets/mcp-query-B8-P_QoG.js.map +0 -1
  274. package/dashboard/dist/assets/mcp-runs-CWeZinoF.js +0 -2
  275. package/dashboard/dist/assets/mcp-runs-CWeZinoF.js.map +0 -1
  276. package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js +0 -2
  277. package/dashboard/dist/assets/useFilterParams-BUyLHcx_.js.map +0 -1
  278. package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js +0 -2
  279. package/dashboard/dist/assets/useYamlActivityEvents-DN-PTgVx.js.map +0 -1
  280. package/dashboard/dist/assets/vendor-icons-T4r2DSPD.js.map +0 -1
  281. package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js +0 -2
  282. package/dashboard/dist/assets/yaml-workflows-DLwd2BOX.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{j as e,J as k}from"./index-BYZX9tOb.js";import{a as b}from"./vendor-query-DLp59M9_.js";import{a as L,b as z,u as J,c as F,d as O,e as I}from"./mcp-B_xbczAt.js";import{E as $}from"./EmptyState-joNbd4gg.js";import{C as _}from"./ConfirmDeleteModal-DZMgmlof.js";import{P as w}from"./PageHeader-BcTVF9ul.js";import{F as A,a as q,b as y}from"./FilterBar-BiO8SOzc.js";import{S as B}from"./StickyPagination-DTIjBKN3.js";import{u as U}from"./useFilterParams-BUyLHcx_.js";import{u as G}from"./useExpandedRows-Cg9iq6Vy.js";import{b as W,R as H}from"./helpers-BCix9c_m.js";import{X as K,a4 as X,P as R,Y as C,a0 as Y,i as Q,ac as Z,ad as ee,x as se,j as re}from"./vendor-icons-T4r2DSPD.js";import{L as M,c as ae}from"./vendor-react-Co3Y8ikm.js";import{R as te,a as D}from"./RowActions-yDhwwDbU.js";import{S as oe}from"./StatusBadge-xgb-lZku.js";import"./Modal-BuTvD0pz.js";import"./BotPicker-Cg5iNEkm.js";import"./bots-DIM6lBoY.js";function ne({error:r}){const s=r instanceof Error?r.message:"";return s.startsWith("No credential found for provider")?e.jsxDEV("div",{className:"bg-status-warning/10 border border-status-warning/30 rounded-md px-3 py-2 flex items-start gap-2",children:[e.jsxDEV(Y,{size:14,className:"text-status-warning mt-0.5 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:15,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[11px] font-medium text-text-primary mb-0.5",children:"Credential required"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:17,columnNumber:11},this),e.jsxDEV("p",{className:"text-[11px] text-text-secondary mb-1",children:s},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:18,columnNumber:11},this),e.jsxDEV(M,{to:"/credentials",className:"text-[11px] text-accent hover:underline inline-flex items-center gap-1",children:["Go to Credentials ",e.jsxDEV(C,{size:10},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:20,columnNumber:31},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:19,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:16,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:14,columnNumber:7},this):e.jsxDEV("div",{className:"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2",children:e.jsxDEV("p",{className:"text-[11px] text-status-error",children:s||"Tool call failed"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:28,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:27,columnNumber:5},this)}function le({data:r}){const s=r==null?void 0:r.result,a=s==null?void 0:s.job_id,l=(s==null?void 0:s.namespace)||"longtail";return a?e.jsxDEV(M,{to:`/mcp/executions/${encodeURIComponent(a)}?namespace=${encodeURIComponent(l)}`,className:"inline-flex items-center gap-1.5 text-xs text-accent hover:underline",children:[e.jsxDEV(C,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:43,columnNumber:7},this),"View Execution"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:39,columnNumber:5},this):null}function ie({serverId:r,serverName:s,tool:a,onClose:l}){const o=L(),[i,h]=b.useState(!1),[u,p]=b.useState({}),[m,N]=b.useState(""),[c,v]=b.useState(""),[x,E]=b.useState("");b.useEffect(()=>{const n=W(a.inputSchema);p(n),N(JSON.stringify(n,null,2)),h(!1),v(""),o.reset()},[a.name,r]);const g=!!o.data||!!o.error,j=()=>{if(!i)N(JSON.stringify(u,null,2));else try{p(JSON.parse(m))}catch{}h(!i)},T=()=>{v(""),o.reset();let n;if(i)try{n=JSON.parse(m)}catch{v("Invalid JSON");return}else n={...u};o.mutate({serverId:r,toolName:a.name,arguments:n,...x?{execute_as:x}:{}})};return e.jsxDEV("div",{className:"border-l border-surface-border bg-surface-raised flex flex-col h-full",children:[e.jsxDEV("div",{className:"flex items-center justify-between px-4 py-3 border-b border-surface-border shrink-0",children:[e.jsxDEV("div",{className:"min-w-0",children:[e.jsxDEV("p",{className:"text-xs font-medium text-text-primary truncate",children:s},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:106,columnNumber:11},this),e.jsxDEV("code",{className:"text-[11px] font-mono text-accent truncate block",children:a.name},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:107,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:105,columnNumber:9},this),e.jsxDEV("button",{onClick:l,className:"p-1 text-text-tertiary hover:text-text-primary shrink-0 ml-2",children:e.jsxDEV(K,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:110,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:109,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:104,columnNumber:7},this),e.jsxDEV("div",{className:"flex-1 overflow-y-auto px-4 py-3 space-y-4",children:[e.jsxDEV(H,{selected:x,onChange:E},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:116,columnNumber:9},this),a.description&&e.jsxDEV("p",{className:"text-[11px] text-text-secondary leading-relaxed",children:a.description},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:119,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center justify-between mb-1",children:[e.jsxDEV("label",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Request"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:125,columnNumber:13},this),e.jsxDEV("button",{onClick:j,className:"text-[10px] text-accent hover:underline",children:i?"Form view":"JSON view"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:126,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:124,columnNumber:11},this),i?e.jsxDEV("textarea",{value:m,onChange:n=>N(n.target.value),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-2 font-mono text-[11px] text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary resize-y",rows:6,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:132,columnNumber:13},this):e.jsxDEV("div",{className:"space-y-3 max-h-[300px] overflow-y-auto",children:[Object.entries(u).map(([n,f])=>e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:n},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:143,columnNumber:19},this),typeof f=="boolean"?e.jsxDEV("select",{value:String(f),onChange:t=>p({...u,[n]:t.target.value==="true"}),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary",children:[e.jsxDEV("option",{value:"true",children:"true"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:150,columnNumber:23},this),e.jsxDEV("option",{value:"false",children:"false"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:151,columnNumber:23},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:145,columnNumber:21},this):typeof f=="object"?e.jsxDEV("textarea",{value:JSON.stringify(f,null,2),onChange:t=>{try{p({...u,[n]:JSON.parse(t.target.value)})}catch{}},className:"w-full min-h-[60px] px-3 py-1.5 bg-surface-sunken border border-surface-border rounded-md font-mono text-xs text-text-primary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:154,columnNumber:21},this):e.jsxDEV("input",{type:typeof f=="number"?"number":"text",value:String(f??""),onChange:t=>p({...u,[n]:typeof f=="number"?Number(t.target.value):t.target.value}),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:160,columnNumber:21},this)]},n,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:142,columnNumber:17},this)),Object.keys(u).length===0&&e.jsxDEV("p",{className:"text-[11px] text-text-tertiary italic",children:"No input fields defined"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:170,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:140,columnNumber:13},this),c&&e.jsxDEV("p",{className:"text-[11px] text-status-error mt-1",children:c},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:174,columnNumber:25},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:123,columnNumber:9},this),e.jsxDEV("button",{onClick:T,disabled:o.isPending,className:"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5",children:o.isPending?"Running...":g?e.jsxDEV(e.Fragment,{children:[e.jsxDEV(X,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:186,columnNumber:15},this)," Re-run"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:186,columnNumber:13},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV(R,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:188,columnNumber:15},this)," Run"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:188,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:178,columnNumber:9},this),o.isPending&&e.jsxDEV("div",{className:"animate-pulse",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Response"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:195,columnNumber:13},this),e.jsxDEV("div",{className:"h-20 bg-surface-sunken rounded-md"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:196,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:194,columnNumber:11},this),o.data?e.jsxDEV("div",{className:"space-y-2",children:[e.jsxDEV(k,{data:o.data,label:"Response",defaultCollapsed:!0},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:201,columnNumber:13},this),e.jsxDEV(le,{data:o.data},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:202,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:200,columnNumber:11},this):null,o.error?e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Response"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:207,columnNumber:13},this),e.jsxDEV(ne,{error:o.error},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:208,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:206,columnNumber:11},this):null]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:115,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:102,columnNumber:5},this)}function me(r){var s,a;return!!((s=r.metadata)!=null&&s.builtin)||!!((a=r.transport_config)!=null&&a.builtin)}function ce(r,s){var o;if(!s)return!0;const a=s.toLowerCase();return r.name.toLowerCase().includes(a)||(o=r.description)!=null&&o.toLowerCase().includes(a)||(r.tags??[]).some(i=>i.toLowerCase().includes(a))?!0:(r.tool_manifest??[]).some(i=>{var h;return i.name.toLowerCase().includes(a)||((h=i.description)==null?void 0:h.toLowerCase().includes(a))})}function pe(r,s){if(!s)return r;const a=s.toLowerCase();return r.filter(l=>{var o;return l.name.toLowerCase().includes(a)||((o=l.description)==null?void 0:o.toLowerCase().includes(a))})}function de({serverId:r,credentialProviders:s}){const{data:a}=z(r);if(s.length===0||!a)return null;const l=a.missing.length===0;return e.jsxDEV("span",{className:`inline-block w-2 h-2 rounded-full shrink-0 ${l?"bg-status-success":"bg-status-warning"}`,title:l?"All credentials registered":`Missing: ${a.missing.join(", ")}`},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:19,columnNumber:5},this)}function ue({server:r,expanded:s,onToggle:a,onEdit:l,onDelete:o,onTryTool:i,connect:h,disconnect:u,visibleTools:p}){const m=r.tool_manifest??[],N=me(r);return e.jsxDEV(e.Fragment,{children:[e.jsxDEV("tr",{onClick:m.length>0?a:void 0,className:`group/row border-b transition-colors duration-100 ${m.length>0?"cursor-pointer row-hover":""}`,children:[e.jsxDEV("td",{className:"px-6 py-3.5",children:e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("span",{className:`transition-transform duration-150 ${s?"rotate-90":""} ${m.length===0?"opacity-0":"text-text-tertiary"}`,children:e.jsxDEV(Q,{size:14},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:63,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:62,columnNumber:13},this),e.jsxDEV("div",{className:"min-w-0",children:[e.jsxDEV("p",{className:"text-sm text-text-primary font-medium",children:r.name},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:66,columnNumber:15},this),(r.tags??[]).length>0&&e.jsxDEV("div",{className:"flex flex-wrap gap-1 mt-0.5",children:r.tags.map(c=>e.jsxDEV("span",{className:"inline-block px-1.5 py-0 text-[9px] font-medium text-text-tertiary bg-surface-sunken rounded",children:c},c,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:70,columnNumber:21},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:68,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:65,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:61,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:60,columnNumber:9},this),e.jsxDEV("td",{className:"px-6 py-3.5 w-28",children:e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV(oe,{status:r.status},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:86,columnNumber:13},this),e.jsxDEV(de,{serverId:r.id,credentialProviders:r.credential_providers??[]},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:87,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:85,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:84,columnNumber:9},this),e.jsxDEV("td",{className:"px-6 py-3.5 w-28",children:e.jsxDEV(te,{children:[!N&&(r.status==="connected"?e.jsxDEV(D,{icon:Z,title:"Disconnect server",onClick:()=>u.mutate(r.id)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:96,columnNumber:17},this):e.jsxDEV(D,{icon:ee,title:"Connect server",onClick:()=>h.mutate(r.id),colorClass:"text-text-tertiary hover:text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:102,columnNumber:17},this)),e.jsxDEV(D,{icon:se,title:"Edit server",onClick:l},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:110,columnNumber:13},this),!N&&e.jsxDEV(D,{icon:re,title:"Delete server",onClick:o,colorClass:"text-text-tertiary hover:text-status-error"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:116,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:93,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:92,columnNumber:9},this),e.jsxDEV("td",{className:"w-12 text-center",children:e.jsxDEV("span",{className:"inline-flex items-center justify-center w-5 h-5 rounded-full border border-accent/30 text-[10px] font-medium text-accent",children:m.length},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:128,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:127,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:53,columnNumber:7},this),p.length>0&&e.jsxDEV("tr",{children:e.jsxDEV("td",{colSpan:4,className:"p-0 border-0",children:e.jsxDEV("div",{className:"grid transition-[grid-template-rows] duration-200 ease-in-out",style:{gridTemplateRows:s?"1fr":"0fr"},children:e.jsxDEV("div",{className:"overflow-hidden",children:[p.map(c=>e.jsxDEV("div",{onClick:()=>i(c),className:"group/row flex items-center cursor-pointer hover:bg-surface-hover/50 transition-colors border-b border-surface-border/30",children:[e.jsxDEV("div",{className:"flex-1 pl-14 pr-6 py-2 min-w-0",children:[e.jsxDEV("code",{className:"text-xs font-mono text-accent-primary",children:c.name},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:151,columnNumber:23},this),c.description&&e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5 line-clamp-1",children:c.description},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:153,columnNumber:25},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:150,columnNumber:21},this),e.jsxDEV("div",{className:"w-28 px-6 py-2 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:157,columnNumber:21},this),e.jsxDEV("div",{className:"w-28 px-6 py-2 flex justify-end shrink-0",children:e.jsxDEV("button",{onClick:v=>{v.stopPropagation(),i(c)},className:"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent",title:"Try tool",children:e.jsxDEV(R,{className:"w-[18px] h-[18px]",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:165,columnNumber:25},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:160,columnNumber:23},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:159,columnNumber:21},this)]},c.name,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:144,columnNumber:19},this)),e.jsxDEV("div",{className:"h-1 bg-surface-sunken/20"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:170,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:142,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:138,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:137,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:136,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:51,columnNumber:5},this)}function ke(){const r=ae(),{filters:s,setFilter:a,pagination:l}=U({filters:{status:"",search:"",tag:""}}),{data:o,isLoading:i}=J({status:s.status||void 0,search:s.search||void 0,tags:s.tag||void 0}),h=F(),u=O(),p=I(),[m,N]=b.useState(null),{expandedIds:c,toggle:v}=G("lt:expanded:mcp-servers"),[x,E]=b.useState(null),g=(o==null?void 0:o.servers)??[],j=(o==null?void 0:o.total)??0,T=b.useMemo(()=>{const t=new Set;for(const d of g)for(const S of d.tags??[])t.add(S);return[...t].sort().map(d=>({value:d,label:d}))},[g]),n=b.useMemo(()=>s.search?g.filter(t=>ce(t,s.search)):g,[g,s.search]);b.useEffect(()=>{if(!s.search)return;const t=s.search.toLowerCase();for(const d of n)(d.tool_manifest??[]).some(V=>{var P;return V.name.toLowerCase().includes(t)||((P=V.description)==null?void 0:P.toLowerCase().includes(t))})&&!c.has(d.id)&&v(d.id)},[s.search,n]);const f=()=>{m&&p.mutate(m.id,{onSuccess:()=>N(null)})};return i?e.jsxDEV("div",{children:[e.jsxDEV(w,{title:"MCP Server Tools"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:87,columnNumber:9},this),e.jsxDEV("div",{className:"animate-pulse space-y-0",children:Array.from({length:5}).map((t,d)=>e.jsxDEV("div",{className:"h-14 border-b last:border-b-0 px-6 flex items-center",children:e.jsxDEV("div",{className:"h-3 bg-surface-sunken rounded w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:91,columnNumber:15},this)},d,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:90,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:88,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:86,columnNumber:7},this):e.jsxDEV("div",{children:[e.jsxDEV(w,{title:"MCP Server Tools",actions:e.jsxDEV("button",{onClick:()=>r("/mcp/servers/new"),className:"btn-primary text-xs",children:"Register Server"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:104,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:101,columnNumber:7},this),e.jsxDEV("p",{className:"text-sm text-text-secondary mb-6 max-w-2xl leading-relaxed",children:"Registered MCP servers and their available tools. Each server exposes tools that can be used by the MCP Tool Designer."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:113,columnNumber:7},this),e.jsxDEV(A,{children:[e.jsxDEV(q,{label:"Search",value:s.search,onChange:t=>a("search",t),placeholder:"Server or tool name..."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:118,columnNumber:9},this),e.jsxDEV(y,{label:"Tag",value:s.tag,onChange:t=>a("tag",t),options:T},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:124,columnNumber:9},this),e.jsxDEV(y,{label:"Status",value:s.status,onChange:t=>a("status",t),options:[{value:"registered",label:"Registered"},{value:"connected",label:"Connected"},{value:"error",label:"Error"},{value:"disconnected",label:"Disconnected"}]},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:130,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:117,columnNumber:7},this),e.jsxDEV("div",{className:"flex gap-0 ",children:[e.jsxDEV("div",{className:`${x?"flex-1 min-w-0":"w-full"} transition-all`,children:[n.length===0?e.jsxDEV($,{title:"No servers found"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:147,columnNumber:13},this):e.jsxDEV("table",{className:"w-full",children:[e.jsxDEV("thead",{children:e.jsxDEV("tr",{className:"border-b",children:[e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Server / Tool"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:152,columnNumber:19},this),e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary w-28",children:"Status"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:155,columnNumber:19},this),e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary w-28"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:158,columnNumber:19},this),e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface w-12"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:159,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:151,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:150,columnNumber:15},this),e.jsxDEV("tbody",{children:n.map(t=>e.jsxDEV(ue,{server:t,expanded:c.has(t.id),onToggle:()=>v(t.id),onEdit:()=>r(`/mcp/servers/${t.id}`),onDelete:()=>N(t),onTryTool:d=>E({serverId:t.id,serverName:t.name,tool:d}),connect:h,disconnect:u,visibleTools:pe(t.tool_manifest??[],s.search)},t.id,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:164,columnNumber:19},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:162,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:149,columnNumber:13},this),e.jsxDEV(B,{page:l.page,totalPages:l.totalPages(j),onPageChange:l.setPage,total:j,pageSize:l.pageSize,onPageSizeChange:l.setPageSize},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:190,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:145,columnNumber:9},this),x&&e.jsxDEV("div",{className:"w-[380px] shrink-0 sticky top-0 h-[calc(100vh-12rem)]",children:e.jsxDEV(ie,{serverId:x.serverId,serverName:x.serverName,tool:x.tool,onClose:()=>E(null)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:203,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:202,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:143,columnNumber:7},this),e.jsxDEV(_,{open:!!m,onClose:()=>N(null),onConfirm:f,title:"Delete MCP Server",description:e.jsxDEV(e.Fragment,{children:["Delete"," ",e.jsxDEV("span",{className:"font-medium text-text-primary",children:m==null?void 0:m.name},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:222,columnNumber:13},this),"? This will remove the server registration."]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:220,columnNumber:11},this),isPending:p.isPending,error:p.error},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:214,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:100,columnNumber:5},this)}export{ke as McpServersPage};
2
- //# sourceMappingURL=index-Cf60K3x9.js.map
1
+ import{j as e,J as k}from"./index-Cmgrk7PQ.js";import{a as b}from"./vendor-query-DLp59M9_.js";import{a as L,b as z,u as J,c as F,d as O,e as I}from"./mcp-CNE44TSp.js";import{E as _}from"./EmptyState-C7KIMIbE.js";import{C as $}from"./ConfirmDeleteModal-CpXG9uyu.js";import{P as w}from"./PageHeader-Cm5HBQF_.js";import{F as A,a as q,b as y}from"./FilterBar-C5r3n6YO.js";import{S as B}from"./StickyPagination-Bz0C18nC.js";import{u as U}from"./useFilterParams-CGRYFw_A.js";import{u as G}from"./useExpandedRows-Cg9iq6Vy.js";import{b as W,R as H}from"./helpers-rMEcLwKs.js";import{X as K,a6 as X,P as R,_ as C,a2 as Q,i as Y,ad as Z,ae as ee,y as se,k as re}from"./vendor-icons-AFGxSeQS.js";import{L as M,c as ae}from"./vendor-react-Co3Y8ikm.js";import{R as te,a as D}from"./RowActions-DbUJPfaW.js";import{S as oe}from"./StatusBadge-CakDdsCw.js";import"./Modal-E1yRnCeW.js";import"./BotPicker-B8Uvw9Si.js";import"./bots-DPfUpVqI.js";function ne({error:r}){const s=r instanceof Error?r.message:"";return s.startsWith("No credential found for provider")?e.jsxDEV("div",{className:"bg-status-warning/10 border border-status-warning/30 rounded-md px-3 py-2 flex items-start gap-2",children:[e.jsxDEV(Q,{size:14,className:"text-status-warning mt-0.5 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:15,columnNumber:9},this),e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[11px] font-medium text-text-primary mb-0.5",children:"Credential required"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:17,columnNumber:11},this),e.jsxDEV("p",{className:"text-[11px] text-text-secondary mb-1",children:s},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:18,columnNumber:11},this),e.jsxDEV(M,{to:"/credentials",className:"text-[11px] text-accent hover:underline inline-flex items-center gap-1",children:["Go to Credentials ",e.jsxDEV(C,{size:10},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:20,columnNumber:31},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:19,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:16,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:14,columnNumber:7},this):e.jsxDEV("div",{className:"bg-status-error/10 border border-status-error/20 rounded-md px-3 py-2",children:e.jsxDEV("p",{className:"text-[11px] text-status-error",children:s||"Tool call failed"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:28,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:27,columnNumber:5},this)}function le({data:r}){const s=r==null?void 0:r.result,a=s==null?void 0:s.job_id,l=(s==null?void 0:s.namespace)||"longtail";return a?e.jsxDEV(M,{to:`/mcp/executions/${encodeURIComponent(a)}?namespace=${encodeURIComponent(l)}`,className:"inline-flex items-center gap-1.5 text-xs text-accent hover:underline",children:[e.jsxDEV(C,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:43,columnNumber:7},this),"View Execution"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:39,columnNumber:5},this):null}function ie({serverId:r,serverName:s,tool:a,onClose:l}){const o=L(),[i,h]=b.useState(!1),[u,p]=b.useState({}),[m,N]=b.useState(""),[c,v]=b.useState(""),[x,E]=b.useState("");b.useEffect(()=>{const n=W(a.inputSchema);p(n),N(JSON.stringify(n,null,2)),h(!1),v(""),o.reset()},[a.name,r]);const g=!!o.data||!!o.error,j=()=>{if(!i)N(JSON.stringify(u,null,2));else try{p(JSON.parse(m))}catch{}h(!i)},T=()=>{v(""),o.reset();let n;if(i)try{n=JSON.parse(m)}catch{v("Invalid JSON");return}else n={...u};o.mutate({serverId:r,toolName:a.name,arguments:n,...x?{execute_as:x}:{}})};return e.jsxDEV("div",{className:"border-l border-surface-border bg-surface-raised flex flex-col h-full",children:[e.jsxDEV("div",{className:"flex items-center justify-between px-4 py-3 border-b border-surface-border shrink-0",children:[e.jsxDEV("div",{className:"min-w-0",children:[e.jsxDEV("p",{className:"text-xs font-medium text-text-primary truncate",children:s},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:106,columnNumber:11},this),e.jsxDEV("code",{className:"text-[11px] font-mono text-accent truncate block",children:a.name},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:107,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:105,columnNumber:9},this),e.jsxDEV("button",{onClick:l,className:"p-1 text-text-tertiary hover:text-text-primary shrink-0 ml-2",children:e.jsxDEV(K,{className:"w-4 h-4"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:110,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:109,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:104,columnNumber:7},this),e.jsxDEV("div",{className:"flex-1 overflow-y-auto px-4 py-3 space-y-4",children:[e.jsxDEV(H,{selected:x,onChange:E},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:116,columnNumber:9},this),a.description&&e.jsxDEV("p",{className:"text-[11px] text-text-secondary leading-relaxed",children:a.description},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:119,columnNumber:11},this),e.jsxDEV("div",{children:[e.jsxDEV("div",{className:"flex items-center justify-between mb-1",children:[e.jsxDEV("label",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Request"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:125,columnNumber:13},this),e.jsxDEV("button",{onClick:j,className:"text-[10px] text-accent hover:underline",children:i?"Form view":"JSON view"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:126,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:124,columnNumber:11},this),i?e.jsxDEV("textarea",{value:m,onChange:n=>N(n.target.value),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-2 font-mono text-[11px] text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary resize-y",rows:6,spellCheck:!1},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:132,columnNumber:13},this):e.jsxDEV("div",{className:"space-y-3 max-h-[300px] overflow-y-auto",children:[Object.entries(u).map(([n,f])=>e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:n},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:143,columnNumber:19},this),typeof f=="boolean"?e.jsxDEV("select",{value:String(f),onChange:t=>p({...u,[n]:t.target.value==="true"}),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary",children:[e.jsxDEV("option",{value:"true",children:"true"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:150,columnNumber:23},this),e.jsxDEV("option",{value:"false",children:"false"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:151,columnNumber:23},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:145,columnNumber:21},this):typeof f=="object"?e.jsxDEV("textarea",{value:JSON.stringify(f,null,2),onChange:t=>{try{p({...u,[n]:JSON.parse(t.target.value)})}catch{}},className:"w-full min-h-[60px] px-3 py-1.5 bg-surface-sunken border border-surface-border rounded-md font-mono text-xs text-text-primary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:154,columnNumber:21},this):e.jsxDEV("input",{type:typeof f=="number"?"number":"text",value:String(f??""),onChange:t=>p({...u,[n]:typeof f=="number"?Number(t.target.value):t.target.value}),className:"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:160,columnNumber:21},this)]},n,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:142,columnNumber:17},this)),Object.keys(u).length===0&&e.jsxDEV("p",{className:"text-[11px] text-text-tertiary italic",children:"No input fields defined"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:170,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:140,columnNumber:13},this),c&&e.jsxDEV("p",{className:"text-[11px] text-status-error mt-1",children:c},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:174,columnNumber:25},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:123,columnNumber:9},this),e.jsxDEV("button",{onClick:T,disabled:o.isPending,className:"btn-primary text-xs disabled:opacity-50 inline-flex items-center gap-1.5",children:o.isPending?"Running...":g?e.jsxDEV(e.Fragment,{children:[e.jsxDEV(X,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:186,columnNumber:15},this)," Re-run"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:186,columnNumber:13},this):e.jsxDEV(e.Fragment,{children:[e.jsxDEV(R,{size:12},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:188,columnNumber:15},this)," Run"]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:188,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:178,columnNumber:9},this),o.isPending&&e.jsxDEV("div",{className:"animate-pulse",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Response"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:195,columnNumber:13},this),e.jsxDEV("div",{className:"h-20 bg-surface-sunken rounded-md"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:196,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:194,columnNumber:11},this),o.data?e.jsxDEV("div",{className:"space-y-2",children:[e.jsxDEV(k,{data:o.data,label:"Response",defaultCollapsed:!0},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:201,columnNumber:13},this),e.jsxDEV(le,{data:o.data},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:202,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:200,columnNumber:11},this):null,o.error?e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Response"},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:207,columnNumber:13},this),e.jsxDEV(ne,{error:o.error},void 0,!1,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:208,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:206,columnNumber:11},this):null]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:115,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/test/ToolTestPanel.tsx",lineNumber:102,columnNumber:5},this)}function me(r){var s,a;return!!((s=r.metadata)!=null&&s.builtin)||!!((a=r.transport_config)!=null&&a.builtin)}function ce(r,s){var o;if(!s)return!0;const a=s.toLowerCase();return r.name.toLowerCase().includes(a)||(o=r.description)!=null&&o.toLowerCase().includes(a)||(r.tags??[]).some(i=>i.toLowerCase().includes(a))?!0:(r.tool_manifest??[]).some(i=>{var h;return i.name.toLowerCase().includes(a)||((h=i.description)==null?void 0:h.toLowerCase().includes(a))})}function pe(r,s){if(!s)return r;const a=s.toLowerCase();return r.filter(l=>{var o;return l.name.toLowerCase().includes(a)||((o=l.description)==null?void 0:o.toLowerCase().includes(a))})}function de({serverId:r,credentialProviders:s}){const{data:a}=z(r);if(s.length===0||!a)return null;const l=a.missing.length===0;return e.jsxDEV("span",{className:`inline-block w-2 h-2 rounded-full shrink-0 ${l?"bg-status-success":"bg-status-warning"}`,title:l?"All credentials registered":`Missing: ${a.missing.join(", ")}`},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:19,columnNumber:5},this)}function ue({server:r,expanded:s,onToggle:a,onEdit:l,onDelete:o,onTryTool:i,connect:h,disconnect:u,visibleTools:p}){const m=r.tool_manifest??[],N=me(r);return e.jsxDEV(e.Fragment,{children:[e.jsxDEV("tr",{onClick:m.length>0?a:void 0,className:`group/row border-b transition-colors duration-100 ${m.length>0?"cursor-pointer row-hover":""}`,children:[e.jsxDEV("td",{className:"px-6 py-3.5",children:e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("span",{className:`transition-transform duration-150 ${s?"rotate-90":""} ${m.length===0?"opacity-0":"text-text-tertiary"}`,children:e.jsxDEV(Y,{size:14},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:63,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:62,columnNumber:13},this),e.jsxDEV("div",{className:"min-w-0",children:[e.jsxDEV("p",{className:"text-sm text-text-primary font-medium",children:r.name},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:66,columnNumber:15},this),(r.tags??[]).length>0&&e.jsxDEV("div",{className:"flex flex-wrap gap-1 mt-0.5",children:r.tags.map(c=>e.jsxDEV("span",{className:"inline-block px-1.5 py-0 text-[9px] font-medium text-text-tertiary bg-surface-sunken rounded",children:c},c,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:70,columnNumber:21},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:68,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:65,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:61,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:60,columnNumber:9},this),e.jsxDEV("td",{className:"px-6 py-3.5 w-28",children:e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV(oe,{status:r.status},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:86,columnNumber:13},this),e.jsxDEV(de,{serverId:r.id,credentialProviders:r.credential_providers??[]},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:87,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:85,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:84,columnNumber:9},this),e.jsxDEV("td",{className:"px-6 py-3.5 w-28",children:e.jsxDEV(te,{children:[!N&&(r.status==="connected"?e.jsxDEV(D,{icon:Z,title:"Disconnect server",onClick:()=>u.mutate(r.id)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:96,columnNumber:17},this):e.jsxDEV(D,{icon:ee,title:"Connect server",onClick:()=>h.mutate(r.id),colorClass:"text-text-tertiary hover:text-status-success"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:102,columnNumber:17},this)),e.jsxDEV(D,{icon:se,title:"Edit server",onClick:l},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:110,columnNumber:13},this),!N&&e.jsxDEV(D,{icon:re,title:"Delete server",onClick:o,colorClass:"text-text-tertiary hover:text-status-error"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:116,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:93,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:92,columnNumber:9},this),e.jsxDEV("td",{className:"w-12 text-center",children:e.jsxDEV("span",{className:"inline-flex items-center justify-center w-5 h-5 rounded-full border border-accent/30 text-[10px] font-medium text-accent",children:m.length},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:128,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:127,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:53,columnNumber:7},this),p.length>0&&e.jsxDEV("tr",{children:e.jsxDEV("td",{colSpan:4,className:"p-0 border-0",children:e.jsxDEV("div",{className:"grid transition-[grid-template-rows] duration-200 ease-in-out",style:{gridTemplateRows:s?"1fr":"0fr"},children:e.jsxDEV("div",{className:"overflow-hidden",children:[p.map(c=>e.jsxDEV("div",{onClick:()=>i(c),className:"group/row flex items-center cursor-pointer hover:bg-surface-hover/50 transition-colors border-b border-surface-border/30",children:[e.jsxDEV("div",{className:"flex-1 pl-14 pr-6 py-2 min-w-0",children:[e.jsxDEV("code",{className:"text-xs font-mono text-accent-primary",children:c.name},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:151,columnNumber:23},this),c.description&&e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5 line-clamp-1",children:c.description},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:153,columnNumber:25},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:150,columnNumber:21},this),e.jsxDEV("div",{className:"w-28 px-6 py-2 shrink-0"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:157,columnNumber:21},this),e.jsxDEV("div",{className:"w-28 px-6 py-2 flex justify-end shrink-0",children:e.jsxDEV("button",{onClick:v=>{v.stopPropagation(),i(c)},className:"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent",title:"Try tool",children:e.jsxDEV(R,{className:"w-[18px] h-[18px]",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:165,columnNumber:25},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:160,columnNumber:23},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:159,columnNumber:21},this)]},c.name,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:144,columnNumber:19},this)),e.jsxDEV("div",{className:"h-1 bg-surface-sunken/20"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:170,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:142,columnNumber:15},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:138,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:137,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:136,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/ServerRow.tsx",lineNumber:51,columnNumber:5},this)}function ke(){const r=ae(),{filters:s,setFilter:a,pagination:l}=U({filters:{status:"",search:"",tag:""}}),{data:o,isLoading:i}=J({status:s.status||void 0,search:s.search||void 0,tags:s.tag||void 0}),h=F(),u=O(),p=I(),[m,N]=b.useState(null),{expandedIds:c,toggle:v}=G("lt:expanded:mcp-servers"),[x,E]=b.useState(null),g=(o==null?void 0:o.servers)??[],j=(o==null?void 0:o.total)??0,T=b.useMemo(()=>{const t=new Set;for(const d of g)for(const S of d.tags??[])t.add(S);return[...t].sort().map(d=>({value:d,label:d}))},[g]),n=b.useMemo(()=>s.search?g.filter(t=>ce(t,s.search)):g,[g,s.search]);b.useEffect(()=>{if(!s.search)return;const t=s.search.toLowerCase();for(const d of n)(d.tool_manifest??[]).some(V=>{var P;return V.name.toLowerCase().includes(t)||((P=V.description)==null?void 0:P.toLowerCase().includes(t))})&&!c.has(d.id)&&v(d.id)},[s.search,n]);const f=()=>{m&&p.mutate(m.id,{onSuccess:()=>N(null)})};return i?e.jsxDEV("div",{children:[e.jsxDEV(w,{title:"MCP Server Tools"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:87,columnNumber:9},this),e.jsxDEV("div",{className:"animate-pulse space-y-0",children:Array.from({length:5}).map((t,d)=>e.jsxDEV("div",{className:"h-14 border-b last:border-b-0 px-6 flex items-center",children:e.jsxDEV("div",{className:"h-3 bg-surface-sunken rounded w-full"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:91,columnNumber:15},this)},d,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:90,columnNumber:13},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:88,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:86,columnNumber:7},this):e.jsxDEV("div",{children:[e.jsxDEV(w,{title:"MCP Server Tools",actions:e.jsxDEV("button",{onClick:()=>r("/mcp/servers/new"),className:"btn-primary text-xs",children:"Register Server"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:104,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:101,columnNumber:7},this),e.jsxDEV("p",{className:"text-sm text-text-secondary mb-6 max-w-2xl leading-relaxed",children:"Registered MCP servers and their available tools. Each server exposes tools that can be used by the MCP Tool Designer."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:113,columnNumber:7},this),e.jsxDEV(A,{children:[e.jsxDEV(q,{label:"Search",value:s.search,onChange:t=>a("search",t),placeholder:"Server or tool name..."},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:118,columnNumber:9},this),e.jsxDEV(y,{label:"Tag",value:s.tag,onChange:t=>a("tag",t),options:T},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:124,columnNumber:9},this),e.jsxDEV(y,{label:"Status",value:s.status,onChange:t=>a("status",t),options:[{value:"registered",label:"Registered"},{value:"connected",label:"Connected"},{value:"error",label:"Error"},{value:"disconnected",label:"Disconnected"}]},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:130,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:117,columnNumber:7},this),e.jsxDEV("div",{className:"flex gap-0 ",children:[e.jsxDEV("div",{className:`${x?"flex-1 min-w-0":"w-full"} transition-all`,children:[n.length===0?e.jsxDEV(_,{title:"No servers found"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:147,columnNumber:13},this):e.jsxDEV("table",{className:"w-full",children:[e.jsxDEV("thead",{children:e.jsxDEV("tr",{className:"border-b",children:[e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:"Server / Tool"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:152,columnNumber:19},this),e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary w-28",children:"Status"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:155,columnNumber:19},this),e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary w-28"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:158,columnNumber:19},this),e.jsxDEV("th",{className:"sticky top-[2.75rem] z-10 bg-surface w-12"},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:159,columnNumber:19},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:151,columnNumber:17},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:150,columnNumber:15},this),e.jsxDEV("tbody",{children:n.map(t=>e.jsxDEV(ue,{server:t,expanded:c.has(t.id),onToggle:()=>v(t.id),onEdit:()=>r(`/mcp/servers/${t.id}`),onDelete:()=>N(t),onTryTool:d=>E({serverId:t.id,serverName:t.name,tool:d}),connect:h,disconnect:u,visibleTools:pe(t.tool_manifest??[],s.search)},t.id,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:164,columnNumber:19},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:162,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:149,columnNumber:13},this),e.jsxDEV(B,{page:l.page,totalPages:l.totalPages(j),onPageChange:l.setPage,total:j,pageSize:l.pageSize,onPageSizeChange:l.setPageSize},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:190,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:145,columnNumber:9},this),x&&e.jsxDEV("div",{className:"w-[380px] shrink-0 sticky top-0 h-[calc(100vh-12rem)]",children:e.jsxDEV(ie,{serverId:x.serverId,serverName:x.serverName,tool:x.tool,onClose:()=>E(null)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:203,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:202,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:143,columnNumber:7},this),e.jsxDEV($,{open:!!m,onClose:()=>N(null),onConfirm:f,title:"Delete MCP Server",description:e.jsxDEV(e.Fragment,{children:["Delete"," ",e.jsxDEV("span",{className:"font-medium text-text-primary",children:m==null?void 0:m.name},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:222,columnNumber:13},this),"? This will remove the server registration."]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:220,columnNumber:11},this),isPending:p.isPending,error:p.error},void 0,!1,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:214,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/mcp/servers/McpServersPage.tsx",lineNumber:100,columnNumber:5},this)}export{ke as McpServersPage};
2
+ //# sourceMappingURL=index-C90ZPzXk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-Cf60K3x9.js","sources":["../../src/components/common/test/ToolTestPanel.tsx","../../src/pages/mcp/servers/helpers.ts","../../src/pages/mcp/servers/ServerRow.tsx","../../src/pages/mcp/servers/McpServersPage.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 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\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 flex flex-col h-full\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-surface-border shrink-0\">\n <div className=\"min-w-0\">\n <p className=\"text-xs font-medium text-text-primary truncate\">{serverName}</p>\n <code className=\"text-[11px] font-mono text-accent truncate block\">{tool.name}</code>\n </div>\n <button onClick={onClose} className=\"p-1 text-text-tertiary hover:text-text-primary shrink-0 ml-2\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Scrollable body */}\n <div className=\"flex-1 overflow-y-auto px-4 py-3 space-y-4\">\n <RunAsSelector selected={executeAs} onChange={setExecuteAs} />\n\n {tool.description && (\n <p className=\"text-[11px] text-text-secondary leading-relaxed\">{tool.description}</p>\n )}\n\n {/* Form / JSON toggle input */}\n <div>\n <div className=\"flex items-center justify-between mb-1\">\n <label className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">Request</label>\n <button onClick={toggleMode} className=\"text-[10px] text-accent hover:underline\">\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=\"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-2 font-mono text-[11px] text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary resize-y\"\n rows={6}\n spellCheck={false}\n />\n ) : (\n <div className=\"space-y-3 max-h-[300px] overflow-y-auto\">\n {Object.entries(fields).map(([key, value]) => (\n <div key={key}>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">{key}</label>\n {typeof value === 'boolean' ? (\n <select\n value={String(value)}\n onChange={(e) => setFields({ ...fields, [key]: e.target.value === 'true' })}\n className=\"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary\"\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : typeof value === 'object' ? (\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=\"w-full min-h-[60px] px-3 py-1.5 bg-surface-sunken border border-surface-border rounded-md font-mono text-xs text-text-primary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary\"\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=\"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary\"\n />\n )}\n </div>\n ))}\n {Object.keys(fields).length === 0 && (\n <p className=\"text-[11px] text-text-tertiary italic\">No input fields defined</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] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Response</p>\n <div className=\"h-20 bg-surface-sunken 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] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Response</p>\n <ToolErrorDisplay error={callTool.error as Error | null} />\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n","import type { McpServerRecord, McpToolManifest } from '../../../api/types';\n\nexport function isBuiltIn(row: McpServerRecord): boolean {\n return !!(row.metadata as Record<string, unknown> | null)?.builtin\n || !!(row.transport_config as Record<string, unknown> | null)?.builtin;\n}\n\n/** Check if a server or any of its tools match the search term */\nexport function matchesSearch(server: McpServerRecord, search: string): boolean {\n if (!search) return true;\n const q = search.toLowerCase();\n if (server.name.toLowerCase().includes(q)) return true;\n if (server.description?.toLowerCase().includes(q)) return true;\n if ((server.tags ?? []).some((t) => t.toLowerCase().includes(q))) return true;\n const tools = (server.tool_manifest ?? []) as McpToolManifest[];\n return tools.some(\n (t) => t.name.toLowerCase().includes(q) || t.description?.toLowerCase().includes(q),\n );\n}\n\n/** Filter tools within a server that match the search term */\nexport function filterTools(tools: McpToolManifest[], search: string): McpToolManifest[] {\n if (!search) return tools;\n const q = search.toLowerCase();\n return tools.filter(\n (t) => t.name.toLowerCase().includes(q) || t.description?.toLowerCase().includes(q),\n );\n}\n","import { ChevronRight, Pencil, Trash2, Plug, Unplug, Play } from 'lucide-react';\nimport { RowAction, RowActionGroup } from '../../../components/common/layout/RowActions';\nimport {\n useConnectMcpServer,\n useDisconnectMcpServer,\n useCredentialStatus,\n} from '../../../api/mcp';\nimport { StatusBadge } from '../../../components/common/display/StatusBadge';\n\nimport type { McpServerRecord, McpToolManifest } from '../../../api/types';\nimport { isBuiltIn } from './helpers';\n\nfunction CredentialDot({ serverId, credentialProviders }: { serverId: string; credentialProviders: string[] }) {\n const { data } = useCredentialStatus(serverId);\n if (credentialProviders.length === 0) return null;\n if (!data) return null;\n const ok = data.missing.length === 0;\n return (\n <span\n className={`inline-block w-2 h-2 rounded-full shrink-0 ${ok ? 'bg-status-success' : 'bg-status-warning'}`}\n title={ok ? 'All credentials registered' : `Missing: ${data.missing.join(', ')}`}\n />\n );\n}\n\nexport function ServerRow({\n server,\n expanded,\n onToggle,\n onEdit,\n onDelete,\n onTryTool,\n connect,\n disconnect,\n visibleTools,\n}: {\n server: McpServerRecord;\n expanded: boolean;\n onToggle: () => void;\n onEdit: () => void;\n onDelete: () => void;\n onTryTool: (tool: McpToolManifest) => void;\n connect: ReturnType<typeof useConnectMcpServer>;\n disconnect: ReturnType<typeof useDisconnectMcpServer>;\n visibleTools: McpToolManifest[];\n}) {\n const allTools = (server.tool_manifest ?? []) as McpToolManifest[];\n const builtin = isBuiltIn(server);\n\n return (\n <>\n {/* Server header row */}\n <tr\n onClick={allTools.length > 0 ? onToggle : undefined}\n className={`group/row border-b transition-colors duration-100 ${\n allTools.length > 0 ? 'cursor-pointer row-hover' : ''\n }`}\n >\n {/* Name + tags */}\n <td className=\"px-6 py-3.5\">\n <div className=\"flex items-center gap-2\">\n <span className={`transition-transform duration-150 ${expanded ? 'rotate-90' : ''} ${allTools.length === 0 ? 'opacity-0' : 'text-text-tertiary'}`}>\n <ChevronRight size={14} />\n </span>\n <div className=\"min-w-0\">\n <p className=\"text-sm text-text-primary font-medium\">{server.name}</p>\n {(server.tags ?? []).length > 0 && (\n <div className=\"flex flex-wrap gap-1 mt-0.5\">\n {server.tags.map((tag) => (\n <span\n key={tag}\n className=\"inline-block px-1.5 py-0 text-[9px] font-medium text-text-tertiary bg-surface-sunken rounded\"\n >\n {tag}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n </td>\n\n {/* Status */}\n <td className=\"px-6 py-3.5 w-28\">\n <div className=\"flex items-center gap-2\">\n <StatusBadge status={server.status} />\n <CredentialDot serverId={server.id} credentialProviders={server.credential_providers ?? []} />\n </div>\n </td>\n\n {/* Actions */}\n <td className=\"px-6 py-3.5 w-28\">\n <RowActionGroup>\n {!builtin && (\n server.status === 'connected' ? (\n <RowAction\n icon={Unplug}\n title=\"Disconnect server\"\n onClick={() => disconnect.mutate(server.id)}\n />\n ) : (\n <RowAction\n icon={Plug}\n title=\"Connect server\"\n onClick={() => connect.mutate(server.id)}\n colorClass=\"text-text-tertiary hover:text-status-success\"\n />\n )\n )}\n <RowAction\n icon={Pencil}\n title=\"Edit server\"\n onClick={onEdit}\n />\n {!builtin && (\n <RowAction\n icon={Trash2}\n title=\"Delete server\"\n onClick={onDelete}\n colorClass=\"text-text-tertiary hover:text-status-error\"\n />\n )}\n </RowActionGroup>\n </td>\n\n {/* Tool count badge — aligned with child row hover icons */}\n <td className=\"w-12 text-center\">\n <span className=\"inline-flex items-center justify-center w-5 h-5 rounded-full border border-accent/30 text-[10px] font-medium text-accent\">\n {allTools.length}\n </span>\n </td>\n </tr>\n\n {/* Expanded tool rows — description below name, aligned to outer columns */}\n {visibleTools.length > 0 && (\n <tr>\n <td colSpan={4} className=\"p-0 border-0\">\n <div\n className=\"grid transition-[grid-template-rows] duration-200 ease-in-out\"\n style={{ gridTemplateRows: expanded ? '1fr' : '0fr' }}\n >\n <div className=\"overflow-hidden\">\n {visibleTools.map((tool) => (\n <div\n key={tool.name}\n onClick={() => onTryTool(tool)}\n className=\"group/row flex items-center cursor-pointer hover:bg-surface-hover/50 transition-colors border-b border-surface-border/30\"\n >\n {/* Tool name + description below */}\n <div className=\"flex-1 pl-14 pr-6 py-2 min-w-0\">\n <code className=\"text-xs font-mono text-accent-primary\">{tool.name}</code>\n {tool.description && (\n <p className=\"text-[10px] text-text-tertiary mt-0.5 line-clamp-1\">{tool.description}</p>\n )}\n </div>\n {/* Status — empty for tools */}\n <div className=\"w-28 px-6 py-2 shrink-0\" />\n {/* Try — hover-reveal icon */}\n <div className=\"w-28 px-6 py-2 flex justify-end shrink-0\">\n <button\n onClick={(e) => { e.stopPropagation(); onTryTool(tool); }}\n className=\"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent\"\n title=\"Try tool\"\n >\n <Play className=\"w-[18px] h-[18px]\" strokeWidth={1.5} />\n </button>\n </div>\n </div>\n ))}\n <div className=\"h-1 bg-surface-sunken/20\" />\n </div>\n </div>\n </td>\n </tr>\n )}\n </>\n );\n}\n","import { useState, useMemo, useEffect } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n useMcpServers,\n useConnectMcpServer,\n useDisconnectMcpServer,\n useDeleteMcpServer,\n} from '../../../api/mcp';\nimport { EmptyState } from '../../../components/common/display/EmptyState';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport type { McpServerRecord, McpToolManifest } from '../../../api/types';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { FilterBar, FilterSelect, FilterInput } from '../../../components/common/data/FilterBar';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { useExpandedRows } from '../../../hooks/useExpandedRows';\nimport { ToolTestPanel } from '../../../components/common/test/ToolTestPanel';\nimport { matchesSearch, filterTools } from './helpers';\nimport { ServerRow } from './ServerRow';\n\nexport function McpServersPage() {\n const navigate = useNavigate();\n const { filters, setFilter, pagination } = useFilterParams({\n filters: { status: '', search: '', tag: '' },\n });\n\n const { data, isLoading } = useMcpServers({\n status: filters.status || undefined,\n search: filters.search || undefined,\n tags: filters.tag || undefined,\n });\n const connect = useConnectMcpServer();\n const disconnect = useDisconnectMcpServer();\n const deleteServer = useDeleteMcpServer();\n\n const [confirmDelete, setConfirmDelete] = useState<McpServerRecord | null>(null);\n const { expandedIds, toggle: toggleExpand } = useExpandedRows('lt:expanded:mcp-servers');\n const [tryTool, setTryTool] = useState<{\n serverId: string;\n serverName: string;\n tool: McpToolManifest;\n } | null>(null);\n\n const servers = data?.servers ?? [];\n const total = data?.total ?? 0;\n\n // Derive unique tags from current result set for the filter dropdown\n const tagOptions = useMemo(() => {\n const allTags = new Set<string>();\n for (const s of servers) {\n for (const t of s.tags ?? []) allTags.add(t);\n }\n return [...allTags].sort().map((t) => ({ value: t, label: t }));\n }, [servers]);\n\n // Client-side search filtering for tool-level matches within expanded rows\n const filteredServers = useMemo(() => {\n if (!filters.search) return servers;\n return servers.filter((s) => matchesSearch(s, filters.search));\n }, [servers, filters.search]);\n\n // Auto-expand servers whose tools match the search (so results are visible)\n useEffect(() => {\n if (!filters.search) return;\n const q = filters.search.toLowerCase();\n for (const s of filteredServers) {\n const tools = (s.tool_manifest ?? []) as McpToolManifest[];\n const hasToolMatch = tools.some(\n (t) => t.name.toLowerCase().includes(q) || t.description?.toLowerCase().includes(q),\n );\n if (hasToolMatch && !expandedIds.has(s.id)) {\n toggleExpand(s.id);\n }\n }\n }, [filters.search, filteredServers]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleDelete = () => {\n if (!confirmDelete) return;\n deleteServer.mutate(confirmDelete.id, {\n onSuccess: () => setConfirmDelete(null),\n });\n };\n\n if (isLoading) {\n return (\n <div>\n <PageHeader title=\"MCP Server Tools\" />\n <div className=\"animate-pulse space-y-0\">\n {Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"h-14 border-b last:border-b-0 px-6 flex items-center\">\n <div className=\"h-3 bg-surface-sunken rounded w-full\" />\n </div>\n ))}\n </div>\n </div>\n );\n }\n\n return (\n <div>\n <PageHeader\n title=\"MCP Server Tools\"\n actions={\n <button\n onClick={() => navigate('/mcp/servers/new')}\n className=\"btn-primary text-xs\"\n >\n Register Server\n </button>\n }\n />\n\n <p className=\"text-sm text-text-secondary mb-6 max-w-2xl leading-relaxed\">\n Registered MCP servers and their available tools. Each server exposes tools that can be used by the MCP Tool Designer.\n </p>\n\n <FilterBar>\n <FilterInput\n label=\"Search\"\n value={filters.search}\n onChange={(v) => setFilter('search', v)}\n placeholder=\"Server or tool name...\"\n />\n <FilterSelect\n label=\"Tag\"\n value={filters.tag}\n onChange={(v) => setFilter('tag', v)}\n options={tagOptions}\n />\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={[\n { value: 'registered', label: 'Registered' },\n { value: 'connected', label: 'Connected' },\n { value: 'error', label: 'Error' },\n { value: 'disconnected', label: 'Disconnected' },\n ]}\n />\n </FilterBar>\n\n <div className={`flex gap-0 ${tryTool ? '' : ''}`}>\n {/* Server list */}\n <div className={`${tryTool ? 'flex-1 min-w-0' : 'w-full'} transition-all`}>\n {filteredServers.length === 0 ? (\n <EmptyState title=\"No servers found\" />\n ) : (\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b\">\n <th className=\"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Server / Tool\n </th>\n <th className=\"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary w-28\">\n Status\n </th>\n <th className=\"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary w-28\" />\n <th className=\"sticky top-[2.75rem] z-10 bg-surface w-12\" />\n </tr>\n </thead>\n <tbody>\n {filteredServers.map((server) => (\n <ServerRow\n key={server.id}\n server={server}\n expanded={expandedIds.has(server.id)}\n onToggle={() => toggleExpand(server.id)}\n onEdit={() => navigate(`/mcp/servers/${server.id}`)}\n onDelete={() => setConfirmDelete(server)}\n onTryTool={(tool) =>\n setTryTool({\n serverId: server.id,\n serverName: server.name,\n tool,\n })\n }\n connect={connect}\n disconnect={disconnect}\n visibleTools={filterTools(\n (server.tool_manifest ?? []) as McpToolManifest[],\n filters.search,\n )}\n />\n ))}\n </tbody>\n </table>\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 {/* Test panel — slides in from right */}\n {tryTool && (\n <div className=\"w-[380px] shrink-0 sticky top-0 h-[calc(100vh-12rem)]\">\n <ToolTestPanel\n serverId={tryTool.serverId}\n serverName={tryTool.serverName}\n tool={tryTool.tool}\n onClose={() => setTryTool(null)}\n />\n </div>\n )}\n </div>\n\n {/* Delete confirmation modal */}\n <ConfirmDeleteModal\n open={!!confirmDelete}\n onClose={() => setConfirmDelete(null)}\n onConfirm={handleDelete}\n title=\"Delete MCP Server\"\n description={\n <>\n Delete{' '}\n <span className=\"font-medium text-text-primary\">{confirmDelete?.name}</span>?\n This will remove the server registration.\n </>\n }\n isPending={deleteServer.isPending}\n error={deleteServer.error as Error | null}\n />\n </div>\n );\n}\n"],"names":["ToolErrorDisplay","error","msg","jsxDEV","KeyRound","Link","ExternalLink","ExecutionLink","data","res","jobId","ns","ToolTestPanel","serverId","serverName","tool","onClose","callTool","useCallMcpTool","jsonMode","setJsonMode","useState","fields","setFields","argsJson","setArgsJson","jsonError","setJsonError","executeAs","setExecuteAs","useEffect","skeleton","buildSkeleton","hasResult","toggleMode","handleRun","parsed","X","RunAsSelector","e","key","value","Fragment","RotateCcw","Play","JsonViewer","isBuiltIn","row","_a","_b","matchesSearch","server","search","q","t","filterTools","tools","CredentialDot","credentialProviders","useCredentialStatus","ok","ServerRow","expanded","onToggle","onEdit","onDelete","onTryTool","connect","disconnect","visibleTools","allTools","builtin","ChevronRight","tag","StatusBadge","RowActionGroup","RowAction","Unplug","Plug","Pencil","Trash2","McpServersPage","navigate","useNavigate","filters","setFilter","pagination","useFilterParams","isLoading","useMcpServers","useConnectMcpServer","useDisconnectMcpServer","deleteServer","useDeleteMcpServer","confirmDelete","setConfirmDelete","expandedIds","toggleExpand","useExpandedRows","tryTool","setTryTool","servers","total","tagOptions","useMemo","allTags","s","filteredServers","handleDelete","PageHeader","_","i","FilterBar","FilterInput","v","FilterSelect","EmptyState","StickyPagination","ConfirmDeleteModal"],"mappings":"+5BASA,SAASA,GAAiB,CAAE,MAAAC,GAAkC,CAC5D,MAAMC,EAAMD,aAAiB,MAAQA,EAAM,QAAU,GACrD,OAAIC,EAAI,WAAW,kCAAkC,EAEjDC,EAAAA,OAAC,MAAA,CAAI,UAAU,mGACb,SAAA,CAAAA,SAACC,EAAA,CAAS,KAAM,GAAI,UAAU,qCAAA,EAA9B,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAoE,WACnE,MAAA,CACC,SAAA,CAAAD,SAAC,IAAA,CAAE,UAAU,mDAAmD,SAAA,qBAAA,EAAhE,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAmF,EACnFA,SAAC,IAAA,CAAE,UAAU,uCAAwC,SAAAD,CAAA,EAArD,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAyD,EACzDC,EAAAA,OAACE,EAAA,CAAK,GAAG,eAAe,UAAU,yEAAyE,SAAA,CAAA,qBACvFF,EAAAA,OAACG,EAAA,CAAa,KAAM,EAAA,EAApB,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAwB,CAAA,CAAA,EAD5C,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EALF,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAMA,CAAA,CAAA,EARF,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IASA,EAIFH,EAAAA,OAAC,OAAI,UAAU,wEACb,kBAAC,IAAA,CAAE,UAAU,gCAAiC,SAAAD,GAAO,kBAAA,EAArD,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAwE,CAAA,EAD1E,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,CAEJ,CAEA,SAASK,GAAc,CAAE,KAAAC,GAA2B,CAClD,MAAMC,EAAOD,GAAA,YAAAA,EAAc,OACrBE,EAAQD,GAAA,YAAAA,EAAK,OACbE,GAAKF,GAAA,YAAAA,EAAK,YAAa,WAC7B,OAAKC,EAEHP,EAAAA,OAACE,EAAA,CACC,GAAI,mBAAmB,mBAAmBK,CAAK,CAAC,cAAc,mBAAmBC,CAAE,CAAC,GACpF,UAAU,uEAEV,SAAA,CAAAR,EAAAA,OAACG,EAAA,CAAa,KAAM,EAAA,EAApB,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAwB,EAAE,gBAAA,CAAA,EAJ5B,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,EAFiB,IAUrB,CASO,SAASM,GAAc,CAAE,SAAAC,EAAU,WAAAC,EAAY,KAAAC,EAAM,QAAAC,GAA+B,CACzF,MAAMC,EAAWC,EAAA,EACX,CAACC,EAAUC,CAAW,EAAIC,EAAAA,SAAS,EAAK,EACxC,CAACC,EAAQC,CAAS,EAAIF,EAAAA,SAA8B,CAAA,CAAE,EACtD,CAACG,EAAUC,CAAW,EAAIJ,EAAAA,SAAS,EAAE,EACrC,CAACK,EAAWC,CAAY,EAAIN,EAAAA,SAAS,EAAE,EACvC,CAACO,EAAWC,CAAY,EAAIR,EAAAA,SAAS,EAAE,EAE7CS,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAWC,EAAcjB,EAAK,WAAW,EAC/CQ,EAAUQ,CAAQ,EAClBN,EAAY,KAAK,UAAUM,EAAU,KAAM,CAAC,CAAC,EAC7CX,EAAY,EAAK,EACjBO,EAAa,EAAE,EACfV,EAAS,MAAA,CACX,EAAG,CAACF,EAAK,KAAMF,CAAQ,CAAC,EAExB,MAAMoB,EAAY,CAAC,CAAChB,EAAS,MAAQ,CAAC,CAACA,EAAS,MAE1CiB,EAAa,IAAM,CACvB,GAAI,CAACf,EACHM,EAAY,KAAK,UAAUH,EAAQ,KAAM,CAAC,CAAC,MAE3C,IAAI,CAAEC,EAAU,KAAK,MAAMC,CAAQ,CAAC,CAAG,MAAQ,CAAoB,CAErEJ,EAAY,CAACD,CAAQ,CACvB,EAEMgB,EAAY,IAAM,CACtBR,EAAa,EAAE,EACfV,EAAS,MAAA,EACT,IAAImB,EACJ,GAAIjB,EACF,GAAI,CAAEiB,EAAS,KAAK,MAAMZ,CAAQ,CAAG,MAAQ,CAAEG,EAAa,cAAc,EAAG,MAAQ,MAErFS,EAAS,CAAE,GAAGd,CAAA,EAEhBL,EAAS,OAAO,CACd,SAAAJ,EACA,SAAUE,EAAK,KACf,UAAWqB,EACX,GAAIR,EAAY,CAAE,WAAYA,GAAc,CAAA,CAAC,CAC9C,CACH,EAEA,OACEzB,EAAAA,OAAC,MAAA,CAAI,UAAU,wEAEb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,sFACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,UACb,SAAA,CAAAA,SAAC,IAAA,CAAE,UAAU,iDAAkD,SAAAW,CAAA,EAA/D,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA0E,EAC1EX,SAAC,OAAA,CAAK,UAAU,mDAAoD,WAAK,IAAA,EAAzE,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA8E,CAAA,CAAA,EAFhF,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAGA,EACAA,EAAAA,OAAC,UAAO,QAASa,EAAS,UAAU,+DAClC,SAAAb,EAAAA,OAACkC,EAAA,CAAE,UAAU,SAAA,EAAb,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAuB,CAAA,EADzB,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAEA,CAAA,CAAA,EAPF,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAQA,EAGAlC,EAAAA,OAAC,MAAA,CAAI,UAAU,6CACb,SAAA,CAAAA,SAACmC,EAAA,CAAc,SAAUV,EAAW,SAAUC,CAAA,EAA9C,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAA4D,EAE3Dd,EAAK,aACJZ,SAAC,KAAE,UAAU,kDAAmD,WAAK,aAArE,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAiF,WAIlF,MAAA,CACC,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAA,SAAC,QAAA,CAAM,UAAU,yEAAyE,SAAA,SAAA,EAA1F,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAiG,EACjGA,EAAAA,OAAC,UAAO,QAAS+B,EAAY,UAAU,0CACpC,SAAAf,EAAW,YAAc,WAAA,EAD5B,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAKA,EAECA,EACChB,EAAAA,OAAC,WAAA,CACC,MAAOqB,EACP,SAAWe,GAAMd,EAAYc,EAAE,OAAO,KAAK,EAC3C,UAAU,yMACV,KAAM,EACN,WAAY,EAAA,EALd,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAQApC,EAAAA,OAAC,MAAA,CAAI,UAAU,0CACZ,SAAA,CAAA,OAAO,QAAQmB,CAAM,EAAE,IAAI,CAAC,CAACkB,EAAKC,CAAK,IACtCtC,EAAAA,OAAC,MAAA,CACC,SAAA,CAAAA,SAAC,QAAA,CAAM,UAAU,oFAAqF,SAAAqC,CAAA,EAAtG,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA0G,EACzG,OAAOC,GAAU,UAChBtC,EAAAA,OAAC,SAAA,CACC,MAAO,OAAOsC,CAAK,EACnB,SAAWF,GAAMhB,EAAU,CAAE,GAAGD,EAAQ,CAACkB,CAAG,EAAGD,EAAE,OAAO,QAAU,OAAQ,EAC1E,UAAU,oLAEV,SAAA,CAAApC,SAAC,SAAA,CAAO,MAAM,OAAO,SAAA,MAAA,EAArB,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAyB,EACzBA,SAAC,SAAA,CAAO,MAAM,QAAQ,SAAA,OAAA,EAAtB,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA2B,CAAA,CAAA,EAN7B,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAQE,OAAOsC,GAAU,SACnBtC,EAAAA,OAAC,WAAA,CACC,MAAO,KAAK,UAAUsC,EAAO,KAAM,CAAC,EACpC,SAAWF,GAAM,CAAE,GAAI,CAAEhB,EAAU,CAAE,GAAGD,EAAQ,CAACkB,CAAG,EAAG,KAAK,MAAMD,EAAE,OAAO,KAAK,EAAG,CAAG,MAAQ,CAAgB,CAAE,EAChH,UAAU,mNAAA,EAHZ,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAMApC,EAAAA,OAAC,QAAA,CACC,KAAM,OAAOsC,GAAU,SAAW,SAAW,OAC7C,MAAO,OAAOA,GAAS,EAAE,EACzB,SAAWF,GAAMhB,EAAU,CAAE,GAAGD,EAAQ,CAACkB,CAAG,EAAG,OAAOC,GAAU,SAAW,OAAOF,EAAE,OAAO,KAAK,EAAIA,EAAE,OAAO,MAAO,EACpH,UAAU,mLAAA,EAJZ,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EAvBMC,EAAV,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAyBA,CACD,EACA,OAAO,KAAKlB,CAAM,EAAE,SAAW,GAC9BnB,EAAAA,OAAC,IAAA,CAAE,UAAU,wCAAwC,SAAA,yBAAA,EAArD,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA4E,CAAA,CAAA,EA9BhF,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAgCA,EAEDuB,GAAavB,EAAAA,OAAC,IAAA,CAAE,UAAU,qCAAsC,SAAAuB,CAAA,EAAnD,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA6D,CAAA,CAAA,EAnD7E,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAoDA,EAGAvB,EAAAA,OAAC,SAAA,CACC,QAASgC,EACT,SAAUlB,EAAS,UACnB,UAAU,2EAET,SAAAA,EAAS,UACR,aACEgB,EACF9B,SAAAuC,EAAAA,SAAA,CAAE,SAAA,CAAAvC,EAAAA,OAACwC,EAAA,CAAU,KAAM,EAAA,EAAjB,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAqB,EAAE,SAAA,CAAA,EAAzB,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAgC,EAEhCxC,EAAAA,OAAAuC,EAAAA,SAAA,CAAE,SAAA,CAAAvC,EAAAA,OAACyC,EAAA,CAAK,KAAM,EAAA,EAAZ,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAgB,EAAE,MAAA,CAAA,EAApB,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAwB,CAAA,EAV5B,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAeC3B,EAAS,WACRd,SAAC,MAAA,CAAI,UAAU,gBACb,SAAA,CAAAA,SAAC,IAAA,CAAE,UAAU,8EAA8E,SAAA,UAAA,EAA3F,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAmG,EACnGA,EAAAA,OAAC,MAAA,CAAI,UAAU,mCAAA,EAAf,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAmD,CAAA,CAAA,EAFrD,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAGA,EAEDc,EAAS,KACRd,SAAC,MAAA,CAAI,UAAU,YACb,SAAA,CAAAA,EAAAA,OAAC0C,GAAW,KAAM5B,EAAS,KAAiC,MAAM,WAAW,iBAAgB,IAA7F,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA8F,EAC9Fd,EAAAA,OAACI,GAAA,CAAc,KAAMU,EAAS,IAAA,EAA9B,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAoC,CAAA,CAAA,EAFtC,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAGA,EACE,KACHA,EAAS,MACRd,EAAAA,OAAC,MAAA,CACC,SAAA,CAAAA,SAAC,IAAA,CAAE,UAAU,8EAA8E,SAAA,UAAA,EAA3F,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAmG,EACnGA,EAAAA,OAACH,GAAA,CAAiB,MAAOiB,EAAS,KAAA,EAAlC,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAyD,CAAA,CAAA,EAF3D,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAGA,EACE,IAAA,CAAA,EA/FN,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAgGA,CAAA,CAAA,EA7GF,OAAA,GAAA,CAAA,SAAA,8DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IA8GA,CAEJ,CCnNO,SAAS6B,GAAUC,EAA+B,SACvD,MAAO,CAAC,GAAEC,EAAAD,EAAI,WAAJ,MAAAC,EAAiD,UACtD,CAAC,GAAEC,EAAAF,EAAI,mBAAJ,MAAAE,EAAyD,QACnE,CAGO,SAASC,GAAcC,EAAyBC,EAAyB,OAC9E,GAAI,CAACA,EAAQ,MAAO,GACpB,MAAMC,EAAID,EAAO,YAAA,EAGjB,OAFID,EAAO,KAAK,YAAA,EAAc,SAASE,CAAC,IACpCL,EAAAG,EAAO,cAAP,MAAAH,EAAoB,cAAc,SAASK,KAC1CF,EAAO,MAAQ,CAAA,GAAI,KAAMG,GAAMA,EAAE,YAAA,EAAc,SAASD,CAAC,CAAC,EAAU,IAC1DF,EAAO,eAAiB,CAAA,GAC1B,KACVG,GAAA,OAAM,OAAAA,EAAE,KAAK,cAAc,SAASD,CAAC,KAAKL,EAAAM,EAAE,cAAF,YAAAN,EAAe,cAAc,SAASK,IAAC,CAEtF,CAGO,SAASE,GAAYC,EAA0BJ,EAAmC,CACvF,GAAI,CAACA,EAAQ,OAAOI,EACpB,MAAMH,EAAID,EAAO,YAAA,EACjB,OAAOI,EAAM,OACVF,GAAA,OAAM,OAAAA,EAAE,KAAK,cAAc,SAASD,CAAC,KAAKL,EAAAM,EAAE,cAAF,YAAAN,EAAe,cAAc,SAASK,IAAC,CAEtF,CCfA,SAASI,GAAc,CAAE,SAAA5C,EAAU,oBAAA6C,GAA4E,CAC7G,KAAM,CAAE,KAAAlD,CAAA,EAASmD,EAAoB9C,CAAQ,EAE7C,GADI6C,EAAoB,SAAW,GAC/B,CAAClD,EAAM,OAAO,KAClB,MAAMoD,EAAKpD,EAAK,QAAQ,SAAW,EACnC,OACEL,EAAAA,OAAC,OAAA,CACC,UAAW,8CAA8CyD,EAAK,oBAAsB,mBAAmB,GACvG,MAAOA,EAAK,6BAA+B,YAAYpD,EAAK,QAAQ,KAAK,IAAI,CAAC,EAAA,EAFhF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,CAKJ,CAEO,SAASqD,GAAU,CACxB,OAAAV,EACA,SAAAW,EACA,SAAAC,EACA,OAAAC,EACA,SAAAC,EACA,UAAAC,EACA,QAAAC,EACA,WAAAC,EACA,aAAAC,CACF,EAUG,CACD,MAAMC,EAAYnB,EAAO,eAAiB,CAAA,EACpCoB,EAAUzB,GAAUK,CAAM,EAEhC,OACEhD,EAAAA,OAAAuC,WAAA,CAEE,SAAA,CAAAvC,EAAAA,OAAC,KAAA,CACC,QAASmE,EAAS,OAAS,EAAIP,EAAW,OAC1C,UAAW,qDACTO,EAAS,OAAS,EAAI,2BAA6B,EACrD,GAGA,SAAA,CAAAnE,EAAAA,OAAC,MAAG,UAAU,cACZ,SAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,QAAK,UAAW,qCAAqC2D,EAAW,YAAc,EAAE,IAAIQ,EAAS,SAAW,EAAI,YAAc,oBAAoB,GAC7I,SAAAnE,EAAAA,OAACqE,EAAA,CAAa,KAAM,IAApB,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAwB,CAAA,EAD1B,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACArE,EAAAA,OAAC,MAAA,CAAI,UAAU,UACb,SAAA,CAAAA,SAAC,IAAA,CAAE,UAAU,wCAAyC,SAAAgD,EAAO,IAAA,EAA7D,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAkE,GAChEA,EAAO,MAAQ,CAAA,GAAI,OAAS,GAC5BhD,EAAAA,OAAC,MAAA,CAAI,UAAU,8BACZ,SAAAgD,EAAO,KAAK,IAAKsB,GAChBtE,EAAAA,OAAC,OAAA,CAEC,UAAU,+FAET,SAAAsE,CAAA,EAHIA,EADP,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMD,CAAA,EARH,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IASA,CAAA,CAAA,EAZJ,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAcA,CAAA,CAAA,EAlBF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAmBA,CAAA,EApBF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAqBA,WAGC,KAAA,CAAG,UAAU,mBACZ,SAAAtE,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAACuE,GAAA,CAAY,OAAQvB,EAAO,MAAA,EAA5B,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAoC,EACpChD,EAAAA,OAACsD,IAAc,SAAUN,EAAO,GAAI,oBAAqBA,EAAO,sBAAwB,CAAA,GAAxF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA4F,CAAA,CAAA,EAF9F,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAGA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAKA,EAGAhD,SAAC,KAAA,CAAG,UAAU,mBACZ,kBAACwE,GAAA,CACE,SAAA,CAAA,CAACJ,IACApB,EAAO,SAAW,YAChBhD,EAAAA,OAACyE,EAAA,CACC,KAAMC,EACN,MAAM,oBACN,QAAS,IAAMT,EAAW,OAAOjB,EAAO,EAAE,CAAA,EAH5C,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EAMAhD,EAAAA,OAACyE,EAAA,CACC,KAAME,GACN,MAAM,iBACN,QAAS,IAAMX,EAAQ,OAAOhB,EAAO,EAAE,EACvC,WAAW,8CAAA,EAJb,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,GAQJhD,EAAAA,OAACyE,EAAA,CACC,KAAMG,GACN,MAAM,cACN,QAASf,CAAA,EAHX,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,EAKC,CAACO,GACApE,EAAAA,OAACyE,EAAA,CACC,KAAMI,GACN,MAAM,gBACN,QAASf,EACT,WAAW,4CAAA,EAJb,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,CAAA,EA5BJ,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IA8BA,CAAA,EA/BF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAgCA,EAGA9D,EAAAA,OAAC,MAAG,UAAU,mBACZ,kBAAC,OAAA,CAAK,UAAU,2HACb,SAAAmE,EAAS,MAAA,EADZ,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,CAAA,EAHF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAIA,CAAA,CAAA,EA9EF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,EAkFCD,EAAa,OAAS,GACrBlE,EAAAA,OAAC,KAAA,CACC,kBAAC,KAAA,CAAG,QAAS,EAAG,UAAU,eACxB,SAAAA,EAAAA,OAAC,MAAA,CACC,UAAU,gEACV,MAAO,CAAE,iBAAkB2D,EAAW,MAAQ,KAAA,EAE9C,SAAA3D,EAAAA,OAAC,MAAA,CAAI,UAAU,kBACZ,SAAA,CAAAkE,EAAa,IAAKtD,GACjBZ,EAAAA,OAAC,MAAA,CAEC,QAAS,IAAM+D,EAAUnD,CAAI,EAC7B,UAAU,2HAGV,SAAA,CAAAZ,EAAAA,OAAC,MAAA,CAAI,UAAU,iCACb,SAAA,CAAAA,SAAC,OAAA,CAAK,UAAU,wCAAyC,SAAAY,EAAK,IAAA,EAA9D,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAmE,EAClEA,EAAK,aACJZ,SAAC,KAAE,UAAU,qDAAsD,WAAK,aAAxE,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAoF,CAAA,CAAA,EAHxF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAKA,EAEAA,EAAAA,OAAC,MAAA,CAAI,UAAU,yBAAA,EAAf,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAyC,EAEzCA,EAAAA,OAAC,MAAA,CAAI,UAAU,2CACb,SAAAA,EAAAA,OAAC,SAAA,CACC,QAAUoC,GAAM,CAAEA,EAAE,gBAAA,EAAmB2B,EAAUnD,CAAI,CAAG,EACxD,UAAU,gGACV,MAAM,WAEN,SAAAZ,EAAAA,OAACyC,EAAA,CAAK,UAAU,oBAAoB,YAAa,GAAA,EAAjD,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAsD,CAAA,EALxD,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAMA,EAPF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAQA,CAAA,CAAA,EAtBK7B,EAAK,KADZ,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAyBD,EACDZ,EAAAA,OAAC,MAAA,CAAI,UAAU,0BAAA,EAAf,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA0C,CAAA,CAAA,EA5B5C,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IA6BA,CAAA,EAjCF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAkCA,EAnCF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAoCA,CAAA,EArCF,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAsCA,CAAA,CAAA,EA3HJ,OAAA,GAAA,CAAA,SAAA,qDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IA6HA,CAEJ,CC7JO,SAAS8E,IAAiB,CAC/B,MAAMC,EAAWC,GAAA,EACX,CAAE,QAAAC,EAAS,UAAAC,EAAW,WAAAC,CAAA,EAAeC,EAAgB,CACzD,QAAS,CAAE,OAAQ,GAAI,OAAQ,GAAI,IAAK,EAAA,CAAG,CAC5C,EAEK,CAAE,KAAA/E,EAAM,UAAAgF,CAAA,EAAcC,EAAc,CACxC,OAAQL,EAAQ,QAAU,OAC1B,OAAQA,EAAQ,QAAU,OAC1B,KAAMA,EAAQ,KAAO,MAAA,CACtB,EACKjB,EAAUuB,EAAA,EACVtB,EAAauB,EAAA,EACbC,EAAeC,EAAA,EAEf,CAACC,EAAeC,CAAgB,EAAI1E,EAAAA,SAAiC,IAAI,EACzE,CAAE,YAAA2E,EAAa,OAAQC,CAAA,EAAiBC,EAAgB,yBAAyB,EACjF,CAACC,EAASC,CAAU,EAAI/E,EAAAA,SAIpB,IAAI,EAERgF,GAAU7F,GAAA,YAAAA,EAAM,UAAW,CAAA,EAC3B8F,GAAQ9F,GAAA,YAAAA,EAAM,QAAS,EAGvB+F,EAAaC,EAAAA,QAAQ,IAAM,CAC/B,MAAMC,MAAc,IACpB,UAAWC,KAAKL,EACd,UAAW/C,KAAKoD,EAAE,MAAQ,CAAA,EAAID,EAAQ,IAAInD,CAAC,EAE7C,MAAO,CAAC,GAAGmD,CAAO,EAAE,OAAO,IAAKnD,IAAO,CAAE,MAAOA,EAAG,MAAOA,GAAI,CAChE,EAAG,CAAC+C,CAAO,CAAC,EAGNM,EAAkBH,EAAAA,QAAQ,IACzBpB,EAAQ,OACNiB,EAAQ,OAAQK,GAAMxD,GAAcwD,EAAGtB,EAAQ,MAAM,CAAC,EADjCiB,EAE3B,CAACA,EAASjB,EAAQ,MAAM,CAAC,EAG5BtD,EAAAA,UAAU,IAAM,CACd,GAAI,CAACsD,EAAQ,OAAQ,OACrB,MAAM/B,EAAI+B,EAAQ,OAAO,YAAA,EACzB,UAAWsB,KAAKC,GACCD,EAAE,eAAiB,CAAA,GACP,KACxBpD,GAAA,OAAM,OAAAA,EAAE,KAAK,cAAc,SAASD,CAAC,KAAKL,EAAAM,EAAE,cAAF,YAAAN,EAAe,cAAc,SAASK,IAAC,GAEhE,CAAC2C,EAAY,IAAIU,EAAE,EAAE,GACvCT,EAAaS,EAAE,EAAE,CAGvB,EAAG,CAACtB,EAAQ,OAAQuB,CAAe,CAAC,EAEpC,MAAMC,EAAe,IAAM,CACpBd,GACLF,EAAa,OAAOE,EAAc,GAAI,CACpC,UAAW,IAAMC,EAAiB,IAAI,CAAA,CACvC,CACH,EAEA,OAAIP,WAEC,MAAA,CACC,SAAA,CAAArF,EAAAA,OAAC0G,EAAA,CAAW,MAAM,kBAAA,EAAlB,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAqC,EACrC1G,EAAAA,OAAC,OAAI,UAAU,0BACZ,eAAM,KAAK,CAAE,OAAQ,EAAG,EAAE,IAAI,CAAC2G,EAAGC,IACjC5G,EAAAA,OAAC,MAAA,CAAY,UAAU,uDACrB,SAAAA,SAAC,MAAA,CAAI,UAAU,sCAAA,EAAf,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAsD,GAD9C4G,EAAV,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CACD,GALH,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAMA,CAAA,CAAA,EARF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IASA,WAKD,MAAA,CACC,SAAA,CAAA5G,EAAAA,OAAC0G,EAAA,CACC,MAAM,mBACN,QACE1G,EAAAA,OAAC,SAAA,CACC,QAAS,IAAM+E,EAAS,kBAAkB,EAC1C,UAAU,sBACX,SAAA,iBAAA,EAHD,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,EARJ,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAYA/E,SAAC,IAAA,CAAE,UAAU,6DAA6D,SAAA,wHAAA,EAA1E,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAEA,WAEC6G,EAAA,CACC,SAAA,CAAA7G,EAAAA,OAAC8G,EAAA,CACC,MAAM,SACN,MAAO7B,EAAQ,OACf,SAAW8B,GAAM7B,EAAU,SAAU6B,CAAC,EACtC,YAAY,wBAAA,EAJd,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAMA/G,EAAAA,OAACgH,EAAA,CACC,MAAM,MACN,MAAO/B,EAAQ,IACf,SAAW8B,GAAM7B,EAAU,MAAO6B,CAAC,EACnC,QAASX,CAAA,EAJX,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,EAMApG,EAAAA,OAACgH,EAAA,CACC,MAAM,SACN,MAAO/B,EAAQ,OACf,SAAW8B,GAAM7B,EAAU,SAAU6B,CAAC,EACtC,QAAS,CACP,CAAE,MAAO,aAAc,MAAO,YAAA,EAC9B,CAAE,MAAO,YAAa,MAAO,WAAA,EAC7B,CAAE,MAAO,QAAS,MAAO,OAAA,EACzB,CAAE,MAAO,eAAgB,MAAO,cAAA,CAAe,CACjD,EATF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CAUA,CAAA,EAvBF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAwBA,WAEC,MAAA,CAAI,UAAW,cAEd,SAAA,CAAA/G,SAAC,OAAI,UAAW,GAAGgG,EAAU,iBAAmB,QAAQ,kBACrD,SAAA,CAAAQ,EAAgB,SAAW,EAC1BxG,SAACiH,EAAA,CAAW,MAAM,kBAAA,EAAlB,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAqC,EAErCjH,SAAC,QAAA,CAAM,UAAU,SACf,SAAA,CAAAA,SAAC,QAAA,CACC,SAAAA,EAAAA,OAAC,KAAA,CAAG,UAAU,WACZ,SAAA,CAAAA,SAAC,KAAA,CAAG,UAAU,kIAAkI,SAAA,eAAA,EAAhJ,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EACAA,SAAC,KAAA,CAAG,UAAU,uIAAuI,SAAA,QAAA,EAArJ,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAEA,EACAA,EAAAA,OAAC,KAAA,CAAG,UAAU,sIAAA,EAAd,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAqJ,EACrJA,EAAAA,OAAC,KAAA,CAAG,UAAU,2CAAA,EAAd,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAA0D,CAAA,CAAA,EAR5D,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IASA,CAAA,EAVF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAWA,EACAA,EAAAA,OAAC,QAAA,CACE,SAAAwG,EAAgB,IAAKxD,GACpBhD,EAAAA,OAAC0D,GAAA,CAEC,OAAAV,EACA,SAAU6C,EAAY,IAAI7C,EAAO,EAAE,EACnC,SAAU,IAAM8C,EAAa9C,EAAO,EAAE,EACtC,OAAQ,IAAM+B,EAAS,gBAAgB/B,EAAO,EAAE,EAAE,EAClD,SAAU,IAAM4C,EAAiB5C,CAAM,EACvC,UAAYpC,GACVqF,EAAW,CACT,SAAUjD,EAAO,GACjB,WAAYA,EAAO,KACnB,KAAApC,CAAA,CACD,EAEH,QAAAoD,EACA,WAAAC,EACA,aAAcb,GACXJ,EAAO,eAAiB,CAAA,EACzBiC,EAAQ,MAAA,CACV,EAlBKjC,EAAO,GADd,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAqBD,CAAA,EAvBH,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAwBA,CAAA,CAAA,EArCF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAsCA,EAGFhD,EAAAA,OAACkH,EAAA,CACC,KAAM/B,EAAW,KACjB,WAAYA,EAAW,WAAWgB,CAAK,EACvC,aAAchB,EAAW,QACzB,MAAAgB,EACA,SAAUhB,EAAW,SACrB,iBAAkBA,EAAW,WAAA,EAN/B,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAOA,CAAA,EApDF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAqDA,EAGCa,GACChG,EAAAA,OAAC,MAAA,CAAI,UAAU,wDACb,SAAAA,EAAAA,OAACS,GAAA,CACC,SAAUuF,EAAQ,SAClB,WAAYA,EAAQ,WACpB,KAAMA,EAAQ,KACd,QAAS,IAAMC,EAAW,IAAI,CAAA,EAJhC,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAA,CAKA,EANF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAOA,CAAA,CAAA,EAlEJ,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAoEA,EAGAjG,EAAAA,OAACmH,EAAA,CACC,KAAM,CAAC,CAACxB,EACR,QAAS,IAAMC,EAAiB,IAAI,EACpC,UAAWa,EACX,MAAM,oBACN,YACEzG,EAAAA,OAAAuC,WAAA,CAAE,SAAA,CAAA,SACO,IACPvC,SAAC,OAAA,CAAK,UAAU,gCAAiC,0BAAe,IAAA,EAAhE,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAAqE,EAAO,6CAAA,CAAA,EAF9E,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,EAAA,EAAA,IAIA,EAEF,UAAWyF,EAAa,UACxB,MAAOA,EAAa,KAAA,EAbtB,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAAA,CAcA,CAAA,EAhIF,OAAA,GAAA,CAAA,SAAA,0DAAA,WAAA,IAAA,aAAA,CAAA,EAAA,IAiIA,CAEJ"}
1
+ {"version":3,"file":"index-C90ZPzXk.js","sources":["../../src/components/common/test/ToolTestPanel.tsx","../../src/pages/mcp/servers/helpers.ts","../../src/pages/mcp/servers/ServerRow.tsx","../../src/pages/mcp/servers/McpServersPage.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 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\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 flex flex-col h-full\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-surface-border shrink-0\">\n <div className=\"min-w-0\">\n <p className=\"text-xs font-medium text-text-primary truncate\">{serverName}</p>\n <code className=\"text-[11px] font-mono text-accent truncate block\">{tool.name}</code>\n </div>\n <button onClick={onClose} className=\"p-1 text-text-tertiary hover:text-text-primary shrink-0 ml-2\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Scrollable body */}\n <div className=\"flex-1 overflow-y-auto px-4 py-3 space-y-4\">\n <RunAsSelector selected={executeAs} onChange={setExecuteAs} />\n\n {tool.description && (\n <p className=\"text-[11px] text-text-secondary leading-relaxed\">{tool.description}</p>\n )}\n\n {/* Form / JSON toggle input */}\n <div>\n <div className=\"flex items-center justify-between mb-1\">\n <label className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">Request</label>\n <button onClick={toggleMode} className=\"text-[10px] text-accent hover:underline\">\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=\"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-2 font-mono text-[11px] text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary resize-y\"\n rows={6}\n spellCheck={false}\n />\n ) : (\n <div className=\"space-y-3 max-h-[300px] overflow-y-auto\">\n {Object.entries(fields).map(([key, value]) => (\n <div key={key}>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">{key}</label>\n {typeof value === 'boolean' ? (\n <select\n value={String(value)}\n onChange={(e) => setFields({ ...fields, [key]: e.target.value === 'true' })}\n className=\"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary\"\n >\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : typeof value === 'object' ? (\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=\"w-full min-h-[60px] px-3 py-1.5 bg-surface-sunken border border-surface-border rounded-md font-mono text-xs text-text-primary resize-y focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary\"\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=\"w-full bg-surface-sunken border border-surface-border rounded-md px-3 py-1.5 text-xs text-text-primary focus:outline-none focus:ring-1 focus:ring-inset focus:ring-accent-primary\"\n />\n )}\n </div>\n ))}\n {Object.keys(fields).length === 0 && (\n <p className=\"text-[11px] text-text-tertiary italic\">No input fields defined</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] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Response</p>\n <div className=\"h-20 bg-surface-sunken 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] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">Response</p>\n <ToolErrorDisplay error={callTool.error as Error | null} />\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n","import type { McpServerRecord, McpToolManifest } from '../../../api/types';\n\nexport function isBuiltIn(row: McpServerRecord): boolean {\n return !!(row.metadata as Record<string, unknown> | null)?.builtin\n || !!(row.transport_config as Record<string, unknown> | null)?.builtin;\n}\n\n/** Check if a server or any of its tools match the search term */\nexport function matchesSearch(server: McpServerRecord, search: string): boolean {\n if (!search) return true;\n const q = search.toLowerCase();\n if (server.name.toLowerCase().includes(q)) return true;\n if (server.description?.toLowerCase().includes(q)) return true;\n if ((server.tags ?? []).some((t) => t.toLowerCase().includes(q))) return true;\n const tools = (server.tool_manifest ?? []) as McpToolManifest[];\n return tools.some(\n (t) => t.name.toLowerCase().includes(q) || t.description?.toLowerCase().includes(q),\n );\n}\n\n/** Filter tools within a server that match the search term */\nexport function filterTools(tools: McpToolManifest[], search: string): McpToolManifest[] {\n if (!search) return tools;\n const q = search.toLowerCase();\n return tools.filter(\n (t) => t.name.toLowerCase().includes(q) || t.description?.toLowerCase().includes(q),\n );\n}\n","import { ChevronRight, Pencil, Trash2, Plug, Unplug, Play } from 'lucide-react';\nimport { RowAction, RowActionGroup } from '../../../components/common/layout/RowActions';\nimport {\n useConnectMcpServer,\n useDisconnectMcpServer,\n useCredentialStatus,\n} from '../../../api/mcp';\nimport { StatusBadge } from '../../../components/common/display/StatusBadge';\n\nimport type { McpServerRecord, McpToolManifest } from '../../../api/types';\nimport { isBuiltIn } from './helpers';\n\nfunction CredentialDot({ serverId, credentialProviders }: { serverId: string; credentialProviders: string[] }) {\n const { data } = useCredentialStatus(serverId);\n if (credentialProviders.length === 0) return null;\n if (!data) return null;\n const ok = data.missing.length === 0;\n return (\n <span\n className={`inline-block w-2 h-2 rounded-full shrink-0 ${ok ? 'bg-status-success' : 'bg-status-warning'}`}\n title={ok ? 'All credentials registered' : `Missing: ${data.missing.join(', ')}`}\n />\n );\n}\n\nexport function ServerRow({\n server,\n expanded,\n onToggle,\n onEdit,\n onDelete,\n onTryTool,\n connect,\n disconnect,\n visibleTools,\n}: {\n server: McpServerRecord;\n expanded: boolean;\n onToggle: () => void;\n onEdit: () => void;\n onDelete: () => void;\n onTryTool: (tool: McpToolManifest) => void;\n connect: ReturnType<typeof useConnectMcpServer>;\n disconnect: ReturnType<typeof useDisconnectMcpServer>;\n visibleTools: McpToolManifest[];\n}) {\n const allTools = (server.tool_manifest ?? []) as McpToolManifest[];\n const builtin = isBuiltIn(server);\n\n return (\n <>\n {/* Server header row */}\n <tr\n onClick={allTools.length > 0 ? onToggle : undefined}\n className={`group/row border-b transition-colors duration-100 ${\n allTools.length > 0 ? 'cursor-pointer row-hover' : ''\n }`}\n >\n {/* Name + tags */}\n <td className=\"px-6 py-3.5\">\n <div className=\"flex items-center gap-2\">\n <span className={`transition-transform duration-150 ${expanded ? 'rotate-90' : ''} ${allTools.length === 0 ? 'opacity-0' : 'text-text-tertiary'}`}>\n <ChevronRight size={14} />\n </span>\n <div className=\"min-w-0\">\n <p className=\"text-sm text-text-primary font-medium\">{server.name}</p>\n {(server.tags ?? []).length > 0 && (\n <div className=\"flex flex-wrap gap-1 mt-0.5\">\n {server.tags.map((tag) => (\n <span\n key={tag}\n className=\"inline-block px-1.5 py-0 text-[9px] font-medium text-text-tertiary bg-surface-sunken rounded\"\n >\n {tag}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n </td>\n\n {/* Status */}\n <td className=\"px-6 py-3.5 w-28\">\n <div className=\"flex items-center gap-2\">\n <StatusBadge status={server.status} />\n <CredentialDot serverId={server.id} credentialProviders={server.credential_providers ?? []} />\n </div>\n </td>\n\n {/* Actions */}\n <td className=\"px-6 py-3.5 w-28\">\n <RowActionGroup>\n {!builtin && (\n server.status === 'connected' ? (\n <RowAction\n icon={Unplug}\n title=\"Disconnect server\"\n onClick={() => disconnect.mutate(server.id)}\n />\n ) : (\n <RowAction\n icon={Plug}\n title=\"Connect server\"\n onClick={() => connect.mutate(server.id)}\n colorClass=\"text-text-tertiary hover:text-status-success\"\n />\n )\n )}\n <RowAction\n icon={Pencil}\n title=\"Edit server\"\n onClick={onEdit}\n />\n {!builtin && (\n <RowAction\n icon={Trash2}\n title=\"Delete server\"\n onClick={onDelete}\n colorClass=\"text-text-tertiary hover:text-status-error\"\n />\n )}\n </RowActionGroup>\n </td>\n\n {/* Tool count badge — aligned with child row hover icons */}\n <td className=\"w-12 text-center\">\n <span className=\"inline-flex items-center justify-center w-5 h-5 rounded-full border border-accent/30 text-[10px] font-medium text-accent\">\n {allTools.length}\n </span>\n </td>\n </tr>\n\n {/* Expanded tool rows — description below name, aligned to outer columns */}\n {visibleTools.length > 0 && (\n <tr>\n <td colSpan={4} className=\"p-0 border-0\">\n <div\n className=\"grid transition-[grid-template-rows] duration-200 ease-in-out\"\n style={{ gridTemplateRows: expanded ? '1fr' : '0fr' }}\n >\n <div className=\"overflow-hidden\">\n {visibleTools.map((tool) => (\n <div\n key={tool.name}\n onClick={() => onTryTool(tool)}\n className=\"group/row flex items-center cursor-pointer hover:bg-surface-hover/50 transition-colors border-b border-surface-border/30\"\n >\n {/* Tool name + description below */}\n <div className=\"flex-1 pl-14 pr-6 py-2 min-w-0\">\n <code className=\"text-xs font-mono text-accent-primary\">{tool.name}</code>\n {tool.description && (\n <p className=\"text-[10px] text-text-tertiary mt-0.5 line-clamp-1\">{tool.description}</p>\n )}\n </div>\n {/* Status — empty for tools */}\n <div className=\"w-28 px-6 py-2 shrink-0\" />\n {/* Try — hover-reveal icon */}\n <div className=\"w-28 px-6 py-2 flex justify-end shrink-0\">\n <button\n onClick={(e) => { e.stopPropagation(); onTryTool(tool); }}\n className=\"opacity-0 group-hover/row:opacity-100 transition-opacity text-text-tertiary hover:text-accent\"\n title=\"Try tool\"\n >\n <Play className=\"w-[18px] h-[18px]\" strokeWidth={1.5} />\n </button>\n </div>\n </div>\n ))}\n <div className=\"h-1 bg-surface-sunken/20\" />\n </div>\n </div>\n </td>\n </tr>\n )}\n </>\n );\n}\n","import { useState, useMemo, useEffect } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n useMcpServers,\n useConnectMcpServer,\n useDisconnectMcpServer,\n useDeleteMcpServer,\n} from '../../../api/mcp';\nimport { EmptyState } from '../../../components/common/display/EmptyState';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport type { McpServerRecord, McpToolManifest } from '../../../api/types';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { FilterBar, FilterSelect, FilterInput } from '../../../components/common/data/FilterBar';\nimport { StickyPagination } from '../../../components/common/data/StickyPagination';\nimport { useFilterParams } from '../../../hooks/useFilterParams';\nimport { useExpandedRows } from '../../../hooks/useExpandedRows';\nimport { ToolTestPanel } from '../../../components/common/test/ToolTestPanel';\nimport { matchesSearch, filterTools } from './helpers';\nimport { ServerRow } from './ServerRow';\n\nexport function McpServersPage() {\n const navigate = useNavigate();\n const { filters, setFilter, pagination } = useFilterParams({\n filters: { status: '', search: '', tag: '' },\n });\n\n const { data, isLoading } = useMcpServers({\n status: filters.status || undefined,\n search: filters.search || undefined,\n tags: filters.tag || undefined,\n });\n const connect = useConnectMcpServer();\n const disconnect = useDisconnectMcpServer();\n const deleteServer = useDeleteMcpServer();\n\n const [confirmDelete, setConfirmDelete] = useState<McpServerRecord | null>(null);\n const { expandedIds, toggle: toggleExpand } = useExpandedRows('lt:expanded:mcp-servers');\n const [tryTool, setTryTool] = useState<{\n serverId: string;\n serverName: string;\n tool: McpToolManifest;\n } | null>(null);\n\n const servers = data?.servers ?? [];\n const total = data?.total ?? 0;\n\n // Derive unique tags from current result set for the filter dropdown\n const tagOptions = useMemo(() => {\n const allTags = new Set<string>();\n for (const s of servers) {\n for (const t of s.tags ?? []) allTags.add(t);\n }\n return [...allTags].sort().map((t) => ({ value: t, label: t }));\n }, [servers]);\n\n // Client-side search filtering for tool-level matches within expanded rows\n const filteredServers = useMemo(() => {\n if (!filters.search) return servers;\n return servers.filter((s) => matchesSearch(s, filters.search));\n }, [servers, filters.search]);\n\n // Auto-expand servers whose tools match the search (so results are visible)\n useEffect(() => {\n if (!filters.search) return;\n const q = filters.search.toLowerCase();\n for (const s of filteredServers) {\n const tools = (s.tool_manifest ?? []) as McpToolManifest[];\n const hasToolMatch = tools.some(\n (t) => t.name.toLowerCase().includes(q) || t.description?.toLowerCase().includes(q),\n );\n if (hasToolMatch && !expandedIds.has(s.id)) {\n toggleExpand(s.id);\n }\n }\n }, [filters.search, filteredServers]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleDelete = () => {\n if (!confirmDelete) return;\n deleteServer.mutate(confirmDelete.id, {\n onSuccess: () => setConfirmDelete(null),\n });\n };\n\n if (isLoading) {\n return (\n <div>\n <PageHeader title=\"MCP Server Tools\" />\n <div className=\"animate-pulse space-y-0\">\n {Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"h-14 border-b last:border-b-0 px-6 flex items-center\">\n <div className=\"h-3 bg-surface-sunken rounded w-full\" />\n </div>\n ))}\n </div>\n </div>\n );\n }\n\n return (\n <div>\n <PageHeader\n title=\"MCP Server Tools\"\n actions={\n <button\n onClick={() => navigate('/mcp/servers/new')}\n className=\"btn-primary text-xs\"\n >\n Register Server\n </button>\n }\n />\n\n <p className=\"text-sm text-text-secondary mb-6 max-w-2xl leading-relaxed\">\n Registered MCP servers and their available tools. Each server exposes tools that can be used by the MCP Tool Designer.\n </p>\n\n <FilterBar>\n <FilterInput\n label=\"Search\"\n value={filters.search}\n onChange={(v) => setFilter('search', v)}\n placeholder=\"Server or tool name...\"\n />\n <FilterSelect\n label=\"Tag\"\n value={filters.tag}\n onChange={(v) => setFilter('tag', v)}\n options={tagOptions}\n />\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={[\n { value: 'registered', label: 'Registered' },\n { value: 'connected', label: 'Connected' },\n { value: 'error', label: 'Error' },\n { value: 'disconnected', label: 'Disconnected' },\n ]}\n />\n </FilterBar>\n\n <div className={`flex gap-0 ${tryTool ? '' : ''}`}>\n {/* Server list */}\n <div className={`${tryTool ? 'flex-1 min-w-0' : 'w-full'} transition-all`}>\n {filteredServers.length === 0 ? (\n <EmptyState title=\"No servers found\" />\n ) : (\n <table className=\"w-full\">\n <thead>\n <tr className=\"border-b\">\n <th className=\"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n Server / Tool\n </th>\n <th className=\"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary w-28\">\n Status\n </th>\n <th className=\"sticky top-[2.75rem] z-10 bg-surface px-6 py-3 text-left text-[10px] font-semibold uppercase tracking-widest text-text-tertiary w-28\" />\n <th className=\"sticky top-[2.75rem] z-10 bg-surface w-12\" />\n </tr>\n </thead>\n <tbody>\n {filteredServers.map((server) => (\n <ServerRow\n key={server.id}\n server={server}\n expanded={expandedIds.has(server.id)}\n onToggle={() => toggleExpand(server.id)}\n onEdit={() => navigate(`/mcp/servers/${server.id}`)}\n onDelete={() => setConfirmDelete(server)}\n onTryTool={(tool) =>\n setTryTool({\n serverId: server.id,\n serverName: server.name,\n tool,\n })\n }\n connect={connect}\n disconnect={disconnect}\n visibleTools={filterTools(\n (server.tool_manifest ?? []) as McpToolManifest[],\n filters.search,\n )}\n />\n ))}\n </tbody>\n </table>\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 {/* Test panel — slides in from right */}\n {tryTool && (\n <div className=\"w-[380px] shrink-0 sticky top-0 h-[calc(100vh-12rem)]\">\n <ToolTestPanel\n serverId={tryTool.serverId}\n serverName={tryTool.serverName}\n tool={tryTool.tool}\n onClose={() => setTryTool(null)}\n />\n </div>\n )}\n </div>\n\n {/* Delete confirmation modal */}\n <ConfirmDeleteModal\n open={!!confirmDelete}\n onClose={() => setConfirmDelete(null)}\n onConfirm={handleDelete}\n title=\"Delete MCP Server\"\n description={\n <>\n Delete{' '}\n <span className=\"font-medium text-text-primary\">{confirmDelete?.name}</span>?\n This will remove the server registration.\n </>\n }\n isPending={deleteServer.isPending}\n error={deleteServer.error as Error | null}\n />\n </div>\n );\n}\n"],"names":["ToolErrorDisplay","error","msg","jsxDEV","KeyRound","Link","ExternalLink","ExecutionLink","data","res","jobId","ns","ToolTestPanel","serverId","serverName","tool","onClose","callTool","useCallMcpTool","jsonMode","setJsonMode","useState","fields","setFields","argsJson","setArgsJson","jsonError","setJsonError","executeAs","setExecuteAs","useEffect","skeleton","buildSkeleton","hasResult","toggleMode","handleRun","parsed","X","RunAsSelector","e","key","value","Fragment","RotateCcw","Play","JsonViewer","isBuiltIn","row","_a","_b","matchesSearch","server","search","q","t","filterTools","tools","CredentialDot","credentialProviders","useCredentialStatus","ok","ServerRow","expanded","onToggle","onEdit","onDelete","onTryTool","connect","disconnect","visibleTools","allTools","builtin","ChevronRight","tag","StatusBadge","RowActionGroup","RowAction","Unplug","Plug","Pencil","Trash2","McpServersPage","navigate","useNavigate","filters","setFilter","pagination","useFilterParams","isLoading","useMcpServers","useConnectMcpServer","useDisconnectMcpServer","deleteServer","useDeleteMcpServer","confirmDelete","setConfirmDelete","expandedIds","toggleExpand","useExpandedRows","tryTool","setTryTool","servers","total","tagOptions","useMemo","allTags","s","filteredServers","handleDelete","PageHeader","_","i","FilterBar","FilterInput","v","FilterSelect","EmptyState","StickyPagination","ConfirmDeleteModal"],"mappings":"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"}