agent-webui 2.4.0__tar.gz → 2.5.0__tar.gz

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 (576) hide show
  1. {agent_webui-2.4.0 → agent_webui-2.5.0}/PKG-INFO +3 -3
  2. {agent_webui-2.4.0 → agent_webui-2.5.0}/README.md +1 -1
  3. agent_webui-2.5.0/agent/agent_webui/__tests__/test_ws_dashboard_endpoint.py +240 -0
  4. agent_webui-2.4.0/agent/agent_webui/dist/assets/AdminView-DdIl1J2T.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/AdminView-DSBiAzar.js +1 -1
  5. agent_webui-2.4.0/agent/agent_webui/dist/assets/AgentLibraryView-ixBX4oSu.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/AgentLibraryView-B_2VurOi.js +1 -1
  6. agent_webui-2.4.0/agent/agent_webui/dist/assets/BrokerView-CLLvP2bT.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/BrokerView-CmhV2mmw.js +1 -1
  7. agent_webui-2.4.0/agent/agent_webui/dist/assets/CapabilityWorkbench-DgoNJQln.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/CapabilityWorkbench-DIB26uv1.js +1 -1
  8. agent_webui-2.4.0/agent/agent_webui/dist/assets/CatalogueView-DVQEH2FU.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/CatalogueView-C15NBwbK.js +1 -1
  9. agent_webui-2.4.0/agent/agent_webui/dist/assets/CodeGraphView-B-4YSp6t.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/CodeGraphView-B74nVMss.js +1 -1
  10. agent_webui-2.4.0/agent/agent_webui/dist/assets/ConfigurationView-vx-k_OFa.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/ConfigurationView-CXDKpW1v.js +1 -1
  11. agent_webui-2.4.0/agent/agent_webui/dist/assets/CypherReplView-C2pGdpgy.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/CypherReplView-DqGyzwTq.js +1 -1
  12. agent_webui-2.5.0/agent/agent_webui/dist/assets/DashboardView-CXUtem0R.js +1 -0
  13. agent_webui-2.4.0/agent/agent_webui/dist/assets/DataAnalystView-Bh0404iH.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/DataAnalystView-BDWzmxtk.js +1 -1
  14. agent_webui-2.5.0/agent/agent_webui/dist/assets/EcosystemView-TGyz_gQd.js +1 -0
  15. agent_webui-2.4.0/agent/agent_webui/dist/assets/ExtractionView-BBPzCe0y.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/ExtractionView-BghOmkNh.js +1 -1
  16. agent_webui-2.4.0/agent/agent_webui/dist/assets/FilesView-lf-w9_sf.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/FilesView-BGoiAmXp.js +1 -1
  17. agent_webui-2.4.0/agent/agent_webui/dist/assets/FleetView-CZ-eX8Qg.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/FleetView-DDs69lfz.js +1 -1
  18. agent_webui-2.4.0/agent/agent_webui/dist/assets/GoalsView-4eph2QUc.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/GoalsView-B5SR1LQq.js +1 -1
  19. agent_webui-2.4.0/agent/agent_webui/dist/assets/GraphCanvas-CRjIf0Eq.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/GraphCanvas-KsKaIrUe.js +1 -1
  20. agent_webui-2.4.0/agent/agent_webui/dist/assets/GraphView-CPgRwGcK.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/GraphView-a__8-wOp.js +1 -1
  21. agent_webui-2.4.0/agent/agent_webui/dist/assets/ImportExportModal-CmYwHimu.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/ImportExportModal-DcwawV2C.js +1 -1
  22. agent_webui-2.4.0/agent/agent_webui/dist/assets/KnowledgeBaseView-kzSGlDWM.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/KnowledgeBaseView-wEjNZ4FG.js +1 -1
  23. agent_webui-2.4.0/agent/agent_webui/dist/assets/KnowledgeView-9si-OxUT.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/KnowledgeView-BVbNdeET.js +1 -1
  24. agent_webui-2.4.0/agent/agent_webui/dist/assets/LLMTemplatesView-CP6WW-Ix.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/LLMTemplatesView-Cw-EwWfG.js +1 -1
  25. agent_webui-2.4.0/agent/agent_webui/dist/assets/LearnView-BPJN8pYK.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/LearnView-B-5NJFlZ.js +1 -1
  26. agent_webui-2.4.0/agent/agent_webui/dist/assets/LiveDashboardsView-B7vUCGf9.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/LiveDashboardsView-B4eW2_8J.js +1 -1
  27. agent_webui-2.4.0/agent/agent_webui/dist/assets/MagmaView-BfPq_Cme.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/MagmaView-DE2323Ta.js +1 -1
  28. agent_webui-2.4.0/agent/agent_webui/dist/assets/MemoryView-B8juhQCI.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/MemoryView-BQ6gN_y2.js +1 -1
  29. agent_webui-2.4.0/agent/agent_webui/dist/assets/ObjectExplorerView-DkEaCB_T.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/ObjectExplorerView-uLvZzE28.js +1 -1
  30. agent_webui-2.4.0/agent/agent_webui/dist/assets/ObjectView-OKwzMVM6.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/ObjectView-Cs_tUZYO.js +1 -1
  31. agent_webui-2.4.0/agent/agent_webui/dist/assets/ObservabilityView-7corUyDB.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/ObservabilityView-0AKFLL0-.js +1 -1
  32. agent_webui-2.4.0/agent/agent_webui/dist/assets/OpsPanelView-BL7u1cKR.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/OpsPanelView-D7Rw9ywx.js +1 -1
  33. agent_webui-2.4.0/agent/agent_webui/dist/assets/PromptsView-Di3xXTQU.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/PromptsView-BXNmyZRV.js +1 -1
  34. agent_webui-2.4.0/agent/agent_webui/dist/assets/SDDView-DkRw4wod.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/SDDView-CQJ7z8Dp.js +1 -1
  35. agent_webui-2.4.0/agent/agent_webui/dist/assets/SchedulingView-DuVnlC7u.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/SchedulingView-DjXigXMs.js +1 -1
  36. agent_webui-2.4.0/agent/agent_webui/dist/assets/SchemaView-DNDUQCYs.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/SchemaView-CvRpLjsu.js +1 -1
  37. agent_webui-2.4.0/agent/agent_webui/dist/assets/SessionExpiredNotice-DRgIunzu.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/SessionExpiredNotice-CrQNB3w1.js +1 -1
  38. agent_webui-2.4.0/agent/agent_webui/dist/assets/SessionsView-Bb5cIZGO.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/SessionsView-CYz5uzhv.js +1 -1
  39. agent_webui-2.4.0/agent/agent_webui/dist/assets/SkillsView-DllVhOam.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/SkillsView-CHwEtjSq.js +1 -1
  40. agent_webui-2.4.0/agent/agent_webui/dist/assets/SparqlView-yg8k4YOm.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/SparqlView-D69qGwk8.js +1 -1
  41. agent_webui-2.4.0/agent/agent_webui/dist/assets/SystemStatusView-B8bFBR30.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/SystemStatusView-Pi_e2OEz.js +1 -1
  42. agent_webui-2.4.0/agent/agent_webui/dist/assets/TemporalGraphView-ChnIx6vs.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/TemporalGraphView-lFJzLVs0.js +1 -1
  43. agent_webui-2.4.0/agent/agent_webui/dist/assets/UsageView-DLsFXcLZ.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/UsageView-CX7Vb6Lt.js +1 -1
  44. agent_webui-2.4.0/agent/agent_webui/dist/assets/VertexView-Ds4c-TjP.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/VertexView-Bp_C-7l_.js +1 -1
  45. agent_webui-2.4.0/agent/agent_webui/dist/assets/VizDemoView-BCW9LhXy.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/VizDemoView-D_oz_um-.js +1 -1
  46. agent_webui-2.4.0/agent/agent_webui/dist/assets/WorkflowEditorView-CCULvC6K.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/WorkflowEditorView-D6wymnT_.js +1 -1
  47. agent_webui-2.4.0/agent/agent_webui/dist/assets/WorkspaceIDEView-BxqEM3wd.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/WorkspaceIDEView-Dnk2T9ov.js +1 -1
  48. agent_webui-2.4.0/agent/agent_webui/dist/assets/abnfDiagram-VRR7QNED-H2XXduqj.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/abnfDiagram-VRR7QNED-CsuJjCjk.js +1 -1
  49. agent_webui-2.4.0/agent/agent_webui/dist/assets/arc-lM2b0hLG.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/arc-CiupbUxd.js +1 -1
  50. agent_webui-2.4.0/agent/agent_webui/dist/assets/architectureDiagram-ZJ3FMSHR-BMtizQ0W.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/architectureDiagram-ZJ3FMSHR-CkEGYQEy.js +1 -1
  51. agent_webui-2.4.0/agent/agent_webui/dist/assets/blockDiagram-677ZJIJ3-D71T3fZ4.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/blockDiagram-677ZJIJ3-DD6XUSEK.js +1 -1
  52. agent_webui-2.4.0/agent/agent_webui/dist/assets/c4Diagram-LMCZKHZV-hArFFPIw.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/c4Diagram-LMCZKHZV-ZSSClfqx.js +1 -1
  53. agent_webui-2.4.0/agent/agent_webui/dist/assets/card-B8Y9xTh8.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/card-29-M2biw.js +1 -1
  54. agent_webui-2.5.0/agent/agent_webui/dist/assets/channel-CIbFY73Q.js +1 -0
  55. agent_webui-2.4.0/agent/agent_webui/dist/assets/chevron-left-BOhdSPVl.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/chevron-left-rsESdWJl.js +1 -1
  56. agent_webui-2.4.0/agent/agent_webui/dist/assets/chevron-right-CcqMO7bs.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/chevron-right-B1I27H18.js +1 -1
  57. agent_webui-2.4.0/agent/agent_webui/dist/assets/chunk-2Q5K7J3B-Dg2QJ7Vy.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/chunk-2Q5K7J3B-B9EvxKe6.js +1 -1
  58. agent_webui-2.4.0/agent/agent_webui/dist/assets/chunk-32BRIVSS-CWrp8olR.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/chunk-32BRIVSS-wTGkyMn1.js +1 -1
  59. agent_webui-2.4.0/agent/agent_webui/dist/assets/chunk-5VM5RSS4-NIMiyex7.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/chunk-5VM5RSS4-D-WDE4he.js +1 -1
  60. agent_webui-2.4.0/agent/agent_webui/dist/assets/chunk-EX3LRPZG-BIxHFkC-.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/chunk-EX3LRPZG-SDKRiORp.js +1 -1
  61. agent_webui-2.4.0/agent/agent_webui/dist/assets/chunk-JWPE2WC7-DmLod2hg.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/chunk-JWPE2WC7-gKoLtmND.js +1 -1
  62. agent_webui-2.4.0/agent/agent_webui/dist/assets/chunk-MOJQB5TN-BuR0vTVY.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/chunk-MOJQB5TN-BYZG1oiE.js +1 -1
  63. agent_webui-2.4.0/agent/agent_webui/dist/assets/chunk-RYQCIY6F-DcQbTDme.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/chunk-RYQCIY6F-Dynf0GqK.js +1 -1
  64. agent_webui-2.4.0/agent/agent_webui/dist/assets/chunk-V7JOEXUC-Bg9heOGF.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/chunk-V7JOEXUC-8oMotCKx.js +1 -1
  65. agent_webui-2.4.0/agent/agent_webui/dist/assets/chunk-VR4S4FIN-BlZabCP4.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/chunk-VR4S4FIN-NkqQPPYT.js +1 -1
  66. agent_webui-2.4.0/agent/agent_webui/dist/assets/chunk-XXDRQBXY-DETF_YpO.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/chunk-XXDRQBXY-DGLQS7Tv.js +1 -1
  67. agent_webui-2.4.0/agent/agent_webui/dist/assets/circle-alert-BAG8GWpt.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/circle-alert-gXzQ9rtk.js +1 -1
  68. agent_webui-2.5.0/agent/agent_webui/dist/assets/classDiagram-OUVF2IWQ-Bw3i4DwI.js +1 -0
  69. agent_webui-2.5.0/agent/agent_webui/dist/assets/classDiagram-v2-EOCWNBFH-Bw3i4DwI.js +1 -0
  70. agent_webui-2.4.0/agent/agent_webui/dist/assets/code-block-IT6T5CEO-Bu8iEo2x.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/code-block-IT6T5CEO-Bkg0-Vm_.js +1 -1
  71. agent_webui-2.4.0/agent/agent_webui/dist/assets/cose-bilkent-JH36ORCC-euE2VkX5.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/cose-bilkent-JH36ORCC-B2q2xg_C.js +1 -1
  72. agent_webui-2.4.0/agent/agent_webui/dist/assets/cynefin-VYW2F7L2-C78PJBVx.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/cynefin-VYW2F7L2-B6OyiM9j.js +1 -1
  73. agent_webui-2.4.0/agent/agent_webui/dist/assets/cynefinDiagram-TSTJHNR4-yNJBOovg.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/cynefinDiagram-TSTJHNR4-CTeGXEa3.js +1 -1
  74. agent_webui-2.4.0/agent/agent_webui/dist/assets/dagre-VKFMJZFB-DKurkZZO.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/dagre-VKFMJZFB-Bxl9d0yM.js +1 -1
  75. agent_webui-2.4.0/agent/agent_webui/dist/assets/diagram-FQU43EPY-BSgmOc4m.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/diagram-FQU43EPY-DIUfzXYS.js +1 -1
  76. agent_webui-2.4.0/agent/agent_webui/dist/assets/diagram-G47NLZAW-BjKpgfyr.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/diagram-G47NLZAW-DsjgOElU.js +1 -1
  77. agent_webui-2.4.0/agent/agent_webui/dist/assets/diagram-NH7WQ7WH-CoBVqoVd.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/diagram-NH7WQ7WH-BqPjd1It.js +1 -1
  78. agent_webui-2.4.0/agent/agent_webui/dist/assets/diagram-OA4YK3LP-H4zifzg5.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/diagram-OA4YK3LP-BYtl-zno.js +1 -1
  79. agent_webui-2.4.0/agent/agent_webui/dist/assets/diagram-WEI45ONY-CgQfyiKG.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/diagram-WEI45ONY-Cx7aH0RB.js +1 -1
  80. agent_webui-2.4.0/agent/agent_webui/dist/assets/ebnfDiagram-CCIWWBDH-BnU1p8QJ.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/ebnfDiagram-CCIWWBDH-BNemAzuz.js +1 -1
  81. agent_webui-2.4.0/agent/agent_webui/dist/assets/erDiagram-Q63AITRT-CYrBTLeE.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/erDiagram-Q63AITRT-BmQilZ0O.js +1 -1
  82. agent_webui-2.4.0/agent/agent_webui/dist/assets/external-link-ChibGV02.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/external-link-Cs_FRwqo.js +1 -1
  83. agent_webui-2.4.0/agent/agent_webui/dist/assets/eye-J1X8tfEC.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/eye-BwOY-p8F.js +1 -1
  84. agent_webui-2.4.0/agent/agent_webui/dist/assets/file-text-DYSSeu61.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/file-text-8cIcAIb7.js +1 -1
  85. agent_webui-2.4.0/agent/agent_webui/dist/assets/flowDiagram-23GEKE2U-BPni-4Uq.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/flowDiagram-23GEKE2U-D3kMcBvv.js +1 -1
  86. agent_webui-2.4.0/agent/agent_webui/dist/assets/folder-open-DorowgiR.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/folder-open-CbpEosRj.js +1 -1
  87. agent_webui-2.4.0/agent/agent_webui/dist/assets/ganttDiagram-NO4QXBWP-BPC8uYoE.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/ganttDiagram-NO4QXBWP-C-VY8per.js +1 -1
  88. agent_webui-2.4.0/agent/agent_webui/dist/assets/gateway-CigIg5Ky.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/gateway-CgeA_tnH.js +1 -1
  89. agent_webui-2.4.0/agent/agent_webui/dist/assets/git-fork-DRJTpbOa.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/git-fork-n82jcfvN.js +1 -1
  90. agent_webui-2.4.0/agent/agent_webui/dist/assets/gitGraphDiagram-IHSO6WYX-BlLFjDRR.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/gitGraphDiagram-IHSO6WYX-ClRKScMc.js +1 -1
  91. agent_webui-2.4.0/agent/agent_webui/dist/assets/hard-drive-CTKxvTH_.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/hard-drive-BuKvkgIh.js +1 -1
  92. agent_webui-2.5.0/agent/agent_webui/dist/assets/index-BFJH-weA.css +1 -0
  93. agent_webui-2.4.0/agent/agent_webui/dist/assets/index-5905FP-_.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/index-BPIxneVz.js +1 -1
  94. agent_webui-2.4.0/agent/agent_webui/dist/assets/index-oJW-_XBm.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/index-BnusqFjf.js +5 -5
  95. agent_webui-2.4.0/agent/agent_webui/dist/assets/infoDiagram-FWYZ7A6U-DQJ67tM4.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/infoDiagram-FWYZ7A6U-DCRJhC06.js +1 -1
  96. agent_webui-2.4.0/agent/agent_webui/dist/assets/ishikawaDiagram-FXEZZL3T-CUlQaGb3.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/ishikawaDiagram-FXEZZL3T-BDGETADq.js +1 -1
  97. agent_webui-2.4.0/agent/agent_webui/dist/assets/journeyDiagram-5HDEW3XC-Cxtzej1n.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/journeyDiagram-5HDEW3XC-A5D6agwX.js +1 -1
  98. agent_webui-2.4.0/agent/agent_webui/dist/assets/kanban-definition-HUTT4EX6-DgguyhjP.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/kanban-definition-HUTT4EX6-D9jcUHNj.js +1 -1
  99. agent_webui-2.4.0/agent/agent_webui/dist/assets/layers-BhkOkAA4.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/layers-hZjIkrBL.js +1 -1
  100. agent_webui-2.4.0/agent/agent_webui/dist/assets/layout-grid-CnXSizVw.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/layout-grid-BG7JxUVz.js +1 -1
  101. agent_webui-2.4.0/agent/agent_webui/dist/assets/link-2-Buc-uFN8.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/link-2-C6oG5mtY.js +1 -1
  102. agent_webui-2.4.0/agent/agent_webui/dist/assets/mermaid.core-BtOOpj-u.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/mermaid.core-BEKwWcfi.js +5 -5
  103. agent_webui-2.4.0/agent/agent_webui/dist/assets/mindmap-definition-LN4V7U3C-Dizgk25m.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/mindmap-definition-LN4V7U3C-DauEY-Q2.js +1 -1
  104. agent_webui-2.4.0/agent/agent_webui/dist/assets/pegDiagram-2B236MQR-BZtJpqSh.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/pegDiagram-2B236MQR-BfZR4-r_.js +1 -1
  105. agent_webui-2.4.0/agent/agent_webui/dist/assets/pieDiagram-ENE6RG2P-DsqTDQhC.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/pieDiagram-ENE6RG2P-Dpe2UVub.js +1 -1
  106. agent_webui-2.4.0/agent/agent_webui/dist/assets/play-D6f5O0-7.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/play-C-OxI9c6.js +1 -1
  107. agent_webui-2.4.0/agent/agent_webui/dist/assets/plus-54fL5QKg.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/plus-BDW6SPoV.js +1 -1
  108. agent_webui-2.4.0/agent/agent_webui/dist/assets/quadrantDiagram-ABIIQ3AL-D8jyLdoV.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/quadrantDiagram-ABIIQ3AL-BHb10KXg.js +1 -1
  109. agent_webui-2.4.0/agent/agent_webui/dist/assets/railroadDiagram-RFXS5EU6-DjUZztPK.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/railroadDiagram-RFXS5EU6-DEMTyjrq.js +1 -1
  110. agent_webui-2.4.0/agent/agent_webui/dist/assets/refresh-cw-DW_113QE.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/refresh-cw-CErjhfzP.js +1 -1
  111. agent_webui-2.4.0/agent/agent_webui/dist/assets/requirementDiagram-TGXJPOKE-CF-heiDJ.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/requirementDiagram-TGXJPOKE-CcHaH35X.js +1 -1
  112. agent_webui-2.4.0/agent/agent_webui/dist/assets/sankeyDiagram-HTMAVEWB-DUcFNIxb.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/sankeyDiagram-HTMAVEWB-BRX9q0ZV.js +1 -1
  113. agent_webui-2.4.0/agent/agent_webui/dist/assets/save-9us-oTb8.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/save-BA_PJYfu.js +1 -1
  114. agent_webui-2.4.0/agent/agent_webui/dist/assets/scroll-area-DESuUYBV.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/scroll-area-6S6hb12a.js +1 -1
  115. agent_webui-2.4.0/agent/agent_webui/dist/assets/separator-zDhOPLiO.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/separator-D4WBEvIB.js +1 -1
  116. agent_webui-2.4.0/agent/agent_webui/dist/assets/sequenceDiagram-DBY2YBRQ-DdWICNzc.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/sequenceDiagram-DBY2YBRQ-EX1OXMTy.js +1 -1
  117. agent_webui-2.4.0/agent/agent_webui/dist/assets/server-CnnwkO12.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/server-s_mG4xeh.js +1 -1
  118. agent_webui-2.4.0/agent/agent_webui/dist/assets/shield-P_xYMus_.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/shield-Dc9voAxe.js +1 -1
  119. agent_webui-2.4.0/agent/agent_webui/dist/assets/sizeCapture-X5ZJPWSS-Bux0kKMF.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/sizeCapture-X5ZJPWSS-CsUVEFTW.js +1 -1
  120. agent_webui-2.4.0/agent/agent_webui/dist/assets/slider-D4ispnNX.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/slider-C9vCWDgS.js +1 -1
  121. agent_webui-2.4.0/agent/agent_webui/dist/assets/sliders-vertical-VQFfrq91.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/sliders-vertical-CTCyE0ZK.js +1 -1
  122. agent_webui-2.4.0/agent/agent_webui/dist/assets/stateDiagram-2N3HPSRC-Dt78Xk2-.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/stateDiagram-2N3HPSRC-DjEqb5gp.js +1 -1
  123. agent_webui-2.5.0/agent/agent_webui/dist/assets/stateDiagram-v2-6OUMAXLB-B1Riou9B.js +1 -0
  124. agent_webui-2.4.0/agent/agent_webui/dist/assets/swimlanes-5IMT3BWC-CC-1PXz6.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/swimlanes-5IMT3BWC-DrngCSw_.js +2 -2
  125. agent_webui-2.5.0/agent/agent_webui/dist/assets/swimlanesDiagram-G3AALYLV-BwoyfsUE.js +8 -0
  126. agent_webui-2.4.0/agent/agent_webui/dist/assets/tabs-D-bKS-GJ.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/tabs-DyMly3FL.js +1 -1
  127. agent_webui-2.4.0/agent/agent_webui/dist/assets/timeline-definition-FHXFAJF6-BWL60Xat.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/timeline-definition-FHXFAJF6-Cw2gujjj.js +1 -1
  128. agent_webui-2.4.0/agent/agent_webui/dist/assets/trash-2-DeGIbUgN.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/trash-2-DFCg7koa.js +1 -1
  129. agent_webui-2.4.0/agent/agent_webui/dist/assets/unavailable-notice-Ce6qen9e.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/unavailable-notice-BQC05P73.js +1 -1
  130. agent_webui-2.4.0/agent/agent_webui/dist/assets/upload-DmuzS9eW.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/upload-3QvhVQpo.js +1 -1
  131. agent_webui-2.4.0/agent/agent_webui/dist/assets/useMutation-DV8r6JGu.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/useMutation-CbxHLs5C.js +1 -1
  132. agent_webui-2.4.0/agent/agent_webui/dist/assets/users--f66Eji2.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/users-B_4AeAj6.js +1 -1
  133. agent_webui-2.4.0/agent/agent_webui/dist/assets/vennDiagram-L72KCM5P-DNRDnQ_c.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/vennDiagram-L72KCM5P-BPpbKVs9.js +1 -1
  134. agent_webui-2.4.0/agent/agent_webui/dist/assets/wardleyDiagram-EHGQE667-C9HdCyDU.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/wardleyDiagram-EHGQE667-X5bS3hk_.js +1 -1
  135. agent_webui-2.4.0/agent/agent_webui/dist/assets/wifi-off-Dx38TebK.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/wifi-off-dBDwDwnn.js +1 -1
  136. agent_webui-2.4.0/agent/agent_webui/dist/assets/xychartDiagram-FW5EYKEG-C_eLikf8.js → agent_webui-2.5.0/agent/agent_webui/dist/assets/xychartDiagram-FW5EYKEG-B_3v6jud.js +1 -1
  137. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/index.html +2 -2
  138. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/server.py +72 -5
  139. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui.egg-info/PKG-INFO +3 -3
  140. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui.egg-info/SOURCES.txt +134 -133
  141. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui.egg-info/requires.txt +1 -1
  142. {agent_webui-2.4.0 → agent_webui-2.5.0}/pyproject.toml +22 -4
  143. agent_webui-2.4.0/agent/agent_webui/dist/assets/DashboardView-CLyo1wAx.js +0 -1
  144. agent_webui-2.4.0/agent/agent_webui/dist/assets/EcosystemView-DLcG4Tbo.js +0 -1
  145. agent_webui-2.4.0/agent/agent_webui/dist/assets/channel-BBelYpwX.js +0 -1
  146. agent_webui-2.4.0/agent/agent_webui/dist/assets/classDiagram-OUVF2IWQ-BYX5lF1j.js +0 -1
  147. agent_webui-2.4.0/agent/agent_webui/dist/assets/classDiagram-v2-EOCWNBFH-BYX5lF1j.js +0 -1
  148. agent_webui-2.4.0/agent/agent_webui/dist/assets/index-BiEkWcna.css +0 -1
  149. agent_webui-2.4.0/agent/agent_webui/dist/assets/stateDiagram-v2-6OUMAXLB-CD1Fbi3p.js +0 -1
  150. agent_webui-2.4.0/agent/agent_webui/dist/assets/swimlanesDiagram-G3AALYLV-LSgkiJFK.js +0 -8
  151. {agent_webui-2.4.0 → agent_webui-2.5.0}/LICENSE +0 -0
  152. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__init__.py +0 -0
  153. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/conftest.py +0 -0
  154. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_agent_library_endpoints.py +0 -0
  155. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_api_extensions.py +0 -0
  156. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_canonical_gateway_mount.py +0 -0
  157. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_engine_construction_wiring.py +0 -0
  158. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_files_endpoints.py +0 -0
  159. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_graph_identity.py +0 -0
  160. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_graph_kb_endpoints.py +0 -0
  161. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_identity_middleware_boundary.py +0 -0
  162. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_integration.py +0 -0
  163. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_mcp_delegation_routes.py +0 -0
  164. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_mcp_server_inventory.py +0 -0
  165. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_observability.py +0 -0
  166. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_oidc_session.py +0 -0
  167. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_ontology_endpoints.py +0 -0
  168. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_parity_contract.py +0 -0
  169. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_pydantic_ai_compat.py +0 -0
  170. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_rbac.py +0 -0
  171. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_security_boundaries.py +0 -0
  172. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_skill_kg_classification.py +0 -0
  173. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_workflow_endpoints.py +0 -0
  174. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_workspace_helpers_chokepoint.py +0 -0
  175. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/__tests__/test_ws_dashboard_denial_diagnostics.py +0 -0
  176. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/api_extensions.py +0 -0
  177. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/apple-touch-icon.png +0 -0
  178. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  179. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  180. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  181. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  182. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  183. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  184. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  185. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  186. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  187. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  188. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  189. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  190. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  191. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  192. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  193. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  194. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  195. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  196. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  197. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  198. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  199. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  200. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  201. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  202. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  203. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  204. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  205. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  206. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  207. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  208. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  209. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  210. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  211. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  212. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  213. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  214. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  215. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  216. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  217. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  218. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  219. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  220. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  221. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  222. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  223. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  224. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  225. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  226. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  227. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  228. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  229. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  230. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  231. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  232. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  233. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  234. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  235. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  236. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  237. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/WorkflowEditorView-BnuhLJ6X.css +0 -0
  238. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/abap-BdImnpbu.js +0 -0
  239. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/actionscript-3-CoDkCxhg.js +0 -0
  240. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/ada-bCR0ucgS.js +0 -0
  241. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/andromeeda-C4gqWexZ.js +0 -0
  242. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/angular-html-CU67Zn6k.js +0 -0
  243. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/angular-ts-BwZT4LLn.js +0 -0
  244. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/apache-Pmp26Uib.js +0 -0
  245. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/apex-D8_7TLub.js +0 -0
  246. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/apl-dKokRX4l.js +0 -0
  247. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/applescript-Co6uUVPk.js +0 -0
  248. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/ara-BRHolxvo.js +0 -0
  249. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/asciidoc-Ve4PFQV2.js +0 -0
  250. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/asm-D_Q5rh1f.js +0 -0
  251. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/astro-CbQHKStN.js +0 -0
  252. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/aurora-x-D-2ljcwZ.js +0 -0
  253. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/awk-DMzUqQB5.js +0 -0
  254. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/ayu-dark-DYE7WIF3.js +0 -0
  255. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/ayu-light-BA47KaF1.js +0 -0
  256. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/ayu-mirage-32ctXXKs.js +0 -0
  257. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/ballerina-BFfxhgS-.js +0 -0
  258. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/bat-BkioyH1T.js +0 -0
  259. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/beancount-k_qm7-4y.js +0 -0
  260. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/berry-uYugtg8r.js +0 -0
  261. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/bibtex-CHM0blh-.js +0 -0
  262. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/bicep-Bmn6On1c.js +0 -0
  263. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/bird2-DPOp833l.js +0 -0
  264. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/blade-D4QpJJKB.js +0 -0
  265. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/bsl-BO_Y6i37.js +0 -0
  266. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/c-BIGW1oBm.js +0 -0
  267. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/c3-eo99z4R2.js +0 -0
  268. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/cadence-Bv_4Rxtq.js +0 -0
  269. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/cairo-KRGpt6FW.js +0 -0
  270. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/catppuccin-frappe-DFWUc33u.js +0 -0
  271. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/catppuccin-latte-C9dUb6Cb.js +0 -0
  272. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/catppuccin-macchiato-DQyhUUbL.js +0 -0
  273. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/catppuccin-mocha-D87Tk5Gz.js +0 -0
  274. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/clarity-D53aC0YG.js +0 -0
  275. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/clojure-P80f7IUj.js +0 -0
  276. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/cmake-D1j8_8rp.js +0 -0
  277. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/cobol-nwyudZeR.js +0 -0
  278. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/codeowners-Bp6g37R7.js +0 -0
  279. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/codeql-DsOJ9woJ.js +0 -0
  280. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/coffee-Ch7k5sss.js +0 -0
  281. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/common-lisp-Cg-RD9OK.js +0 -0
  282. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/coq-DkFqJrB1.js +0 -0
  283. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/cpp-CofmeUqb.js +0 -0
  284. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/crystal-tKQVLTB8.js +0 -0
  285. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/csharp-COcwbKMJ.js +0 -0
  286. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/css-DPfMkruS.js +0 -0
  287. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/csv-fuZLfV_i.js +0 -0
  288. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/cue-D82EKSYY.js +0 -0
  289. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/cypher-COkxafJQ.js +0 -0
  290. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/cytoscape.esm-D3_iZ_3b.js +0 -0
  291. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/d-85-TOEBH.js +0 -0
  292. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/dark-plus-C3mMm8J8.js +0 -0
  293. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/dart-CF10PKvl.js +0 -0
  294. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/dax-CEL-wOlO.js +0 -0
  295. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/defaultLocale-DX6XiGOO.js +0 -0
  296. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/desktop-BmXAJ9_W.js +0 -0
  297. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/diff-D97Zzqfu.js +0 -0
  298. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/docker-BcOcwvcX.js +0 -0
  299. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/dotenv-Da5cRb03.js +0 -0
  300. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/dracula-BzJJZx-M.js +0 -0
  301. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/dracula-soft-BXkSAIEj.js +0 -0
  302. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/dream-maker-BtqSS_iP.js +0 -0
  303. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/edge-BkV0erSs.js +0 -0
  304. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/elixir-CDX3lj18.js +0 -0
  305. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/elm-DbKCFpqz.js +0 -0
  306. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/emacs-lisp-C9XAeP06.js +0 -0
  307. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/erb-B12qg9BL.js +0 -0
  308. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/erlang-DsQrWhSR.js +0 -0
  309. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/everforest-dark-BgDCqdQA.js +0 -0
  310. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/everforest-light-C8M2exoo.js +0 -0
  311. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/fennel-BYunw83y.js +0 -0
  312. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/fish-BvzEVeQv.js +0 -0
  313. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/fluent-C4IJs8-o.js +0 -0
  314. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/fortran-fixed-form-CkoXwp7k.js +0 -0
  315. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/fortran-free-form-BxgE0vQu.js +0 -0
  316. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/fsharp-CXgrBDvD.js +0 -0
  317. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/gdresource-BOOCDP_w.js +0 -0
  318. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/gdscript-C5YyOfLZ.js +0 -0
  319. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/gdshader-DkwncUOv.js +0 -0
  320. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/genie-D0YGMca9.js +0 -0
  321. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/gherkin-DyxjwDmM.js +0 -0
  322. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/git-commit-F4YmCXRG.js +0 -0
  323. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/git-rebase-r7XF79zn.js +0 -0
  324. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/github-dark-DHJKELXO.js +0 -0
  325. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/github-dark-default-Cuk6v7N8.js +0 -0
  326. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/github-dark-dimmed-DH5Ifo-i.js +0 -0
  327. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -0
  328. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/github-light-DAi9KRSo.js +0 -0
  329. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/github-light-default-D7oLnXFd.js +0 -0
  330. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/github-light-high-contrast-BfjtVDDH.js +0 -0
  331. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/gleam-BspZqrRM.js +0 -0
  332. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/glimmer-js-Rg0-pVw9.js +0 -0
  333. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/glimmer-ts-U6CK756n.js +0 -0
  334. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/glsl-DplSGwfg.js +0 -0
  335. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/gn-n2N0HUVH.js +0 -0
  336. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/gnuplot-DdkO51Og.js +0 -0
  337. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/go-CxLEBnE3.js +0 -0
  338. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/graph-DOmOIIwC.js +0 -0
  339. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/graphql-ChdNCCLP.js +0 -0
  340. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/groovy-gcz8RCvz.js +0 -0
  341. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -0
  342. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/gruvbox-dark-medium-GsRaNv29.js +0 -0
  343. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/gruvbox-dark-soft-CVdnzihN.js +0 -0
  344. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/gruvbox-light-hard-CH1njM8p.js +0 -0
  345. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/gruvbox-light-medium-DRw_LuNl.js +0 -0
  346. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/gruvbox-light-soft-hJgmCMqR.js +0 -0
  347. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/hack-CaT9iCJl.js +0 -0
  348. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/haml-B8DHNrY2.js +0 -0
  349. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/handlebars-BL8al0AC.js +0 -0
  350. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/haskell-Df6bDoY_.js +0 -0
  351. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/haxe-CzTSHFRz.js +0 -0
  352. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/hcl-BWvSN4gD.js +0 -0
  353. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/hjson-D5-asLiD.js +0 -0
  354. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/hlsl-D3lLCCz7.js +0 -0
  355. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/horizon-BUw7H-hv.js +0 -0
  356. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/horizon-bright-Cn-bp-IR.js +0 -0
  357. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/houston-DnULxvSX.js +0 -0
  358. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/html-GMplVEZG.js +0 -0
  359. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/html-derivative-BFtXZ54Q.js +0 -0
  360. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/http-jrhK8wxY.js +0 -0
  361. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/hurl-irOxFIW8.js +0 -0
  362. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/hxml-Bvhsp5Yf.js +0 -0
  363. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/hy-DFXneXwc.js +0 -0
  364. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/imba-DGztddWO.js +0 -0
  365. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/ini-BEwlwnbL.js +0 -0
  366. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/init-Gi6I4Gst.js +0 -0
  367. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/java-CylS5w8V.js +0 -0
  368. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/javascript-wDzz0qaB.js +0 -0
  369. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/jinja-4LBKfQ-Z.js +0 -0
  370. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/jison-wvAkD_A8.js +0 -0
  371. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/json-Cp-IABpG.js +0 -0
  372. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/json5-C9tS-k6U.js +0 -0
  373. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/jsonc-Des-eS-w.js +0 -0
  374. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/jsonl-DcaNXYhu.js +0 -0
  375. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/jsonnet-DFQXde-d.js +0 -0
  376. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/jssm-C2t-YnRu.js +0 -0
  377. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/jsx-g9-lgVsj.js +0 -0
  378. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/julia-CxzCAyBv.js +0 -0
  379. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/just-Cw27pwNe.js +0 -0
  380. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/kanagawa-dragon-CkXjmgJE.js +0 -0
  381. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/kanagawa-lotus-CfQXZHmo.js +0 -0
  382. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/kanagawa-wave-DWedfzmr.js +0 -0
  383. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/katex-DLVrwanO.css +0 -0
  384. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/kdl-DV7GczEv.js +0 -0
  385. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/kotlin-BdnUsdx6.js +0 -0
  386. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/kusto-DZf3V79B.js +0 -0
  387. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/laserwave-DUszq2jm.js +0 -0
  388. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/latex-CWtU0Tv5.js +0 -0
  389. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/layout-D-LzfAck.js +0 -0
  390. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/lean-BZvkOJ9d.js +0 -0
  391. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/less-B1dDrJ26.js +0 -0
  392. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/light-plus-B7mTdjB0.js +0 -0
  393. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/linear-D1g5s_fh.js +0 -0
  394. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/liquid-DYVedYrR.js +0 -0
  395. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/llvm-DjAJT7YJ.js +0 -0
  396. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/log-2UxHyX5q.js +0 -0
  397. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/logo-BtOb2qkB.js +0 -0
  398. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/lua-BaeVxFsk.js +0 -0
  399. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/luau-C-HG3fhB.js +0 -0
  400. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/make-CHLpvVh8.js +0 -0
  401. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/map-DxJ2ADlA.js +0 -0
  402. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/markdown-Cvjx9yec.js +0 -0
  403. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/marko-CnJfTvn9.js +0 -0
  404. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/material-theme-D5KoaKCx.js +0 -0
  405. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/material-theme-darker-BfHTSMKl.js +0 -0
  406. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/material-theme-lighter-B0m2ddpp.js +0 -0
  407. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/material-theme-ocean-CyktbL80.js +0 -0
  408. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/material-theme-palenight-Csfq5Kiy.js +0 -0
  409. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/matlab-D7o27uSR.js +0 -0
  410. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/mdc-BMNejdWA.js +0 -0
  411. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/mdx-Cmh6b_Ma.js +0 -0
  412. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/mermaid-mWjccvbQ.js +0 -0
  413. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/min-dark-CafNBF8u.js +0 -0
  414. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/min-light-CTRr51gU.js +0 -0
  415. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/mipsasm-CKIfxQSi.js +0 -0
  416. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/mojo-rZm6bMo-.js +0 -0
  417. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/monokai-D4h5O-jR.js +0 -0
  418. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/moonbit-_H4v1dQx.js +0 -0
  419. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/move-IF9eRakj.js +0 -0
  420. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/narrat-DRg8JJMk.js +0 -0
  421. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/nextflow-Zz6hmt5N.js +0 -0
  422. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/nextflow-groovy-BeH2EWoN.js +0 -0
  423. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/nginx-BpAMiNFr.js +0 -0
  424. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/night-owl-C39BiMTA.js +0 -0
  425. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/night-owl-light-CMTm3GFP.js +0 -0
  426. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/nim-CVrawwO9.js +0 -0
  427. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/nix-CwoSXNpI.js +0 -0
  428. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/nord-Ddv68eIx.js +0 -0
  429. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/nushell-Cz2AlsmD.js +0 -0
  430. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/objective-c-DXmwc3jG.js +0 -0
  431. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/objective-cpp-CLxacb5B.js +0 -0
  432. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/ocaml-C0hk2d4L.js +0 -0
  433. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/odin-BBf5iR-q.js +0 -0
  434. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/one-dark-pro-DVMEJ2y_.js +0 -0
  435. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/one-light-C3Wv6jpd.js +0 -0
  436. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/openscad-C4EeE6gA.js +0 -0
  437. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/ordinal-Cboi1Yqb.js +0 -0
  438. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/pascal-D93ZcfNL.js +0 -0
  439. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/perl-C0TMdlhV.js +0 -0
  440. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/php-Dhbhpdrm.js +0 -0
  441. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/pkl-u5AG7uiY.js +0 -0
  442. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/plastic-3e1v2bzS.js +0 -0
  443. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/plsql-ChMvpjG-.js +0 -0
  444. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/po-BTJTHyun.js +0 -0
  445. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/poimandres-CS3Unz2-.js +0 -0
  446. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/polar-C0HS_06l.js +0 -0
  447. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/postcss-CXtECtnM.js +0 -0
  448. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/powerquery-CEu0bR-o.js +0 -0
  449. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/powershell-Dpen1YoG.js +0 -0
  450. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/prisma-Dd19v3D-.js +0 -0
  451. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/prolog-CbFg5uaA.js +0 -0
  452. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/proto-C7zT0LnQ.js +0 -0
  453. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/pug-CGlum2m_.js +0 -0
  454. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/puppet-BMWR74SV.js +0 -0
  455. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/purescript-CklMAg4u.js +0 -0
  456. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/python-B6aJPvgy.js +0 -0
  457. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/qml-3beO22l8.js +0 -0
  458. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/qmldir-C8lEn-DE.js +0 -0
  459. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/qss-IeuSbFQv.js +0 -0
  460. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/r-Dspwwk_N.js +0 -0
  461. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/racket-BqYA7rlc.js +0 -0
  462. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/raku-DXvB9xmW.js +0 -0
  463. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/razor-Uh8Bk_45.js +0 -0
  464. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/red-bN70gL4F.js +0 -0
  465. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/reg-C-SQnVFl.js +0 -0
  466. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/regexp-CDVJQ6XC.js +0 -0
  467. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/rel-C3B-1QV4.js +0 -0
  468. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/riscv-BM1_JUlF.js +0 -0
  469. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/ron-D8l8udqQ.js +0 -0
  470. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/rose-pine-dawn-DHQR4-dF.js +0 -0
  471. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/rose-pine-moon-D4_iv3hh.js +0 -0
  472. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/rose-pine-qdsjHGoJ.js +0 -0
  473. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/rosmsg-BJDFO7_C.js +0 -0
  474. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/rst-BrH8l1NY.js +0 -0
  475. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/ruby-Dw2BHqvy.js +0 -0
  476. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/rust-B1yitclQ.js +0 -0
  477. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/sas-cz2c8ADy.js +0 -0
  478. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/sass-Cj5Yp3dK.js +0 -0
  479. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/scala-C151Ov-r.js +0 -0
  480. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/scheme-C98Dy4si.js +0 -0
  481. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/scss-OYdSNvt2.js +0 -0
  482. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/sdbl-DVxCFoDh.js +0 -0
  483. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/shaderlab-Dg9Lc6iA.js +0 -0
  484. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/shellscript-Yzrsuije.js +0 -0
  485. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/shellsession-BADoaaVG.js +0 -0
  486. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/slack-dark-BthQWCQV.js +0 -0
  487. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/slack-ochin-DqwNpetd.js +0 -0
  488. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/smalltalk-BERRCDM3.js +0 -0
  489. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/snazzy-light-Bw305WKR.js +0 -0
  490. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/solarized-dark-DXbdFlpD.js +0 -0
  491. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/solarized-light-L9t79GZl.js +0 -0
  492. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/solidity-rGO070M0.js +0 -0
  493. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/soy-Brmx7dQM.js +0 -0
  494. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/sparql-rVzFXLq3.js +0 -0
  495. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/splunk-BtCnVYZw.js +0 -0
  496. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/sql-BLtJtn59.js +0 -0
  497. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/ssh-config-_ykCGR6B.js +0 -0
  498. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/stata-BH5u7GGu.js +0 -0
  499. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/stylus-BEDo0Tqx.js +0 -0
  500. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/surrealql-Bq5Q-fJD.js +0 -0
  501. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/svelte-C_ipcX3V.js +0 -0
  502. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/swift-D82vCrfD.js +0 -0
  503. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/synthwave-84-CbfX1IO0.js +0 -0
  504. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/system-verilog-CnnmHF94.js +0 -0
  505. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/systemd-4A_iFExJ.js +0 -0
  506. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/talonscript-CkByrt1z.js +0 -0
  507. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/tasl-QIJgUcNo.js +0 -0
  508. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/tcl-dwOrl1Do.js +0 -0
  509. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/templ-P3uqSqPl.js +0 -0
  510. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/terraform-BETggiCN.js +0 -0
  511. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/tex-idrVyKtj.js +0 -0
  512. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/tokyo-night-hegEt444.js +0 -0
  513. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/toml-vGWfd6FD.js +0 -0
  514. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/transform-CpIVI4vC.js +0 -0
  515. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/ts-tags-zn1MmPIZ.js +0 -0
  516. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/tsv-B_m7g4N7.js +0 -0
  517. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/tsx-COt5Ahok.js +0 -0
  518. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/turtle-BsS91CYL.js +0 -0
  519. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/twig-DNn4PbVi.js +0 -0
  520. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/typescript-BPQ3VLAy.js +0 -0
  521. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/typespec-BGHnOYBU.js +0 -0
  522. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/typst-DHCkPAjA.js +0 -0
  523. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/v-BcVCzyr7.js +0 -0
  524. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/v4-Dnyct6Ft.js +0 -0
  525. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/vala-CsfeWuGM.js +0 -0
  526. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/value-DIujSiJ7.js +0 -0
  527. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/vb-D17OF-Vu.js +0 -0
  528. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/verilog-BQ8w6xss.js +0 -0
  529. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/vesper-DU1UobuO.js +0 -0
  530. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/vhdl-CeAyd5Ju.js +0 -0
  531. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/viml-CJc9bBzg.js +0 -0
  532. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/vitesse-black-Bkuqu6BP.js +0 -0
  533. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/vitesse-dark-D0r3Knsf.js +0 -0
  534. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/vitesse-light-CVO1_9PV.js +0 -0
  535. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/vue-DN_0RTcg.js +0 -0
  536. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/vue-html-AaS7Mt5G.js +0 -0
  537. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/vue-vine-CQOfvN7w.js +0 -0
  538. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/vyper-CDx5xZoG.js +0 -0
  539. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/wasm-CG6Dc4jp.js +0 -0
  540. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/wasm-MzD3tlZU.js +0 -0
  541. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/wenyan-BV7otONQ.js +0 -0
  542. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/wgsl-Dx-B1_4e.js +0 -0
  543. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/wikitext-BhOHFoWU.js +0 -0
  544. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/wit-5i3qLPDT.js +0 -0
  545. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/wolfram-lXgVvXCa.js +0 -0
  546. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/xml-sdJ4AIDG.js +0 -0
  547. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/xsl-CtQFsRM5.js +0 -0
  548. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/yaml-Buea-lGh.js +0 -0
  549. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/zenscript-DVFEvuxE.js +0 -0
  550. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/assets/zig-VOosw3JB.js +0 -0
  551. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/favicon.ico +0 -0
  552. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/favicon.png +0 -0
  553. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/dist/favicon.svg +0 -0
  554. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/graph_identity.py +0 -0
  555. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/icon.png +0 -0
  556. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/observability.py +0 -0
  557. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/oidc_session.py +0 -0
  558. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/orchestrator_model.py +0 -0
  559. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/rbac.py +0 -0
  560. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/skills/__init__.py +0 -0
  561. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/skills/kg-webui-admin/SKILL.md +0 -0
  562. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/skills/kg-webui-dashboards/SKILL.md +0 -0
  563. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/skills/kg-webui-extraction/SKILL.md +0 -0
  564. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/skills/kg-webui-graphviz/SKILL.md +0 -0
  565. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/skills/kg-webui-ontology-operator/SKILL.md +0 -0
  566. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui/skills/kg-webui-swe/SKILL.md +0 -0
  567. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui.egg-info/dependency_links.txt +0 -0
  568. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui.egg-info/entry_points.txt +0 -0
  569. {agent_webui-2.4.0 → agent_webui-2.5.0}/agent/agent_webui.egg-info/top_level.txt +0 -0
  570. {agent_webui-2.4.0 → agent_webui-2.5.0}/setup.cfg +0 -0
  571. {agent_webui-2.4.0 → agent_webui-2.5.0}/tests/test_destubbed_endpoints.py +0 -0
  572. {agent_webui-2.4.0 → agent_webui-2.5.0}/tests/test_graph_visualization.py +0 -0
  573. {agent_webui-2.4.0 → agent_webui-2.5.0}/tests/test_init.py +0 -0
  574. {agent_webui-2.4.0 → agent_webui-2.5.0}/tests/test_privacy_boundaries.py +0 -0
  575. {agent_webui-2.4.0 → agent_webui-2.5.0}/tests/test_provision_identity_tier2_admission.py +0 -0
  576. {agent_webui-2.4.0 → agent_webui-2.5.0}/tests/test_startup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-webui
3
- Version: 2.4.0
3
+ Version: 2.5.0
4
4
  Summary: Agent Web Interface for Pydantic AI Agents
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
@@ -33,7 +33,7 @@ Requires-Dist: networkx>=3.6.1; extra == "test"
33
33
  Requires-Dist: opentelemetry-instrumentation-starlette>=0.65b0; extra == "test"
34
34
  Requires-Dist: opentelemetry-instrumentation-fastapi>=0.65b0; extra == "test"
35
35
  Requires-Dist: opentelemetry-instrumentation-asgi>=0.65b0; extra == "test"
36
- Requires-Dist: agent-utilities[agent-runtime,graph,metrics]>=2.0.0; extra == "test"
36
+ Requires-Dist: agent-utilities[agent-headless,graph,metrics]>=2.0.0; extra == "test"
37
37
  Dynamic: license-file
38
38
 
39
39
  # Agent WebUI
@@ -58,7 +58,7 @@ Dynamic: license-file
58
58
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/agent-webui)
59
59
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/agent-webui)
60
60
 
61
- _Version: 2.4.0_
61
+ _Version: 2.5.0_
62
62
 
63
63
  > **Documentation** — The architecture, graph-activity event model, feature surface,
64
64
  > and ecosystem integration of Agent WebUI are maintained in the
@@ -20,7 +20,7 @@
20
20
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/agent-webui)
21
21
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/agent-webui)
22
22
 
23
- _Version: 2.4.0_
23
+ _Version: 2.5.0_
24
24
 
25
25
  > **Documentation** — The architecture, graph-activity event model, feature surface,
26
26
  > and ecosystem integration of Agent WebUI are maintained in the
@@ -0,0 +1,240 @@
1
+ """W-19: implement `/ws/dashboard` (`reports/webui-graphos-defects-2026-08-08.md`).
2
+
3
+ W-18's root cause, proven live against the running pod, was that the backend
4
+ registered **zero** websocket routes — `/ws/dashboard` existed only as a string
5
+ in `_ADMIN_ROUTE_PREFIXES` (`server.py:106`). Starlette closed the unmatched
6
+ handshake and uvicorn logged that close as a bare `"WebSocket /ws/dashboard"
7
+ 403`, which read for hours like an authorization bug even though no denial
8
+ branch ever ran (all 10 instrumented `websocket.close` sites stayed silent).
9
+
10
+ These tests pin the fix from three angles, matching the sign-off criteria in
11
+ the W-19 tasking:
12
+
13
+ * ``test_ws_dashboard_route_is_registered`` — the literal regression guard for
14
+ "WebSocketRoutes registered: 0".
15
+ * ``test_ws_dashboard_streams_snapshot_then_update_from_the_full_dashboard_handler``
16
+ — proves the socket REUSES ``agent_utilities.gateway.api.get_full_dashboard``
17
+ (the exact function backing ``GET /api/dashboard/full``) instead of
18
+ re-deriving widget data of its own: patching that one function changes what
19
+ the socket sends.
20
+ * ``test_full_app_admits_a_valid_kg_admin_bearer_session`` /
21
+ ``test_full_app_denies_a_kg_write_only_bearer_session`` — extend
22
+ `test_ws_dashboard_denial_diagnostics.py`'s proof (a stub inner app behind a
23
+ manually-assembled middleware chain) to the REAL app built by
24
+ ``create_agent_web_app``, so admission is proven against the actual
25
+ implemented endpoint, not a stand-in.
26
+ """
27
+
28
+ from __future__ import annotations
29
+
30
+ from unittest.mock import AsyncMock, patch
31
+
32
+ import pytest
33
+ from fastapi.testclient import TestClient
34
+ from starlette.routing import WebSocketRoute
35
+
36
+ pytestmark = pytest.mark.integration
37
+
38
+
39
+ def _build_app():
40
+ from agent_webui.server import create_agent_web_app
41
+ from pydantic_ai import Agent
42
+ from pydantic_ai.models.test import TestModel
43
+
44
+ return create_agent_web_app(Agent(TestModel()), {'get_path': lambda x: x})
45
+
46
+
47
+ def _sample_dashboard_response():
48
+ from agent_utilities.gateway.api import DashboardResponse
49
+ from agent_utilities.gateway.models import DashboardLayout, WidgetData
50
+
51
+ return DashboardResponse(
52
+ layout=DashboardLayout(),
53
+ data={
54
+ 'jellyfin': WidgetData(
55
+ fields={'active_streams': 2},
56
+ status='ok',
57
+ error=None,
58
+ timestamp='2026-08-08T00:00:00Z',
59
+ )
60
+ },
61
+ )
62
+
63
+
64
+ def _fake_actor(monkeypatch: pytest.MonkeyPatch, *, roles: frozenset[str]) -> None:
65
+ """Mirrors ``test_ws_dashboard_denial_diagnostics.py``'s helper of the same
66
+ name: stands in for real JWT/JWKS verification with a deterministic
67
+ ``ActorContext`` so the test proves the AUTHORIZATION wiring, not a real
68
+ identity provider round-trip."""
69
+
70
+ import agent_utilities.security.request_identity as _shared
71
+ from agent_utilities.security.brain_context import ActorContext
72
+
73
+ actor = ActorContext(
74
+ actor_id='subject-1', tenant_id='homelab', roles=roles, authenticated=True
75
+ )
76
+
77
+ async def _fake_actor_from_bearer_token(_token: str) -> ActorContext:
78
+ return actor
79
+
80
+ monkeypatch.setattr(
81
+ _shared, 'actor_from_bearer_token', _fake_actor_from_bearer_token
82
+ )
83
+
84
+
85
+ def _configure_jwt_verifier(monkeypatch: pytest.MonkeyPatch) -> None:
86
+ """Make ``_identity_enforced()`` True so the real middleware chain gates
87
+ the websocket handshake exactly as it does in production, instead of the
88
+ permissive default the rest of this suite (and ``AGENT_UTILITIES_TESTING
89
+ =true``) otherwise leaves in place."""
90
+
91
+ from agent_utilities.core.config import config
92
+
93
+ monkeypatch.setattr(
94
+ config, 'auth_jwt_jwks_uri', 'https://idp.invalid/certs', raising=False
95
+ )
96
+ monkeypatch.setattr(
97
+ config, 'auth_jwt_issuer', 'https://idp.invalid/', raising=False
98
+ )
99
+ monkeypatch.setattr(config, 'auth_jwt_audience', 'agent-webui', raising=False)
100
+ monkeypatch.setattr(config, 'kg_policy_version', '1', raising=False)
101
+ monkeypatch.setattr(config, 'allowed_origins', 'https://au.arpa', raising=False)
102
+
103
+
104
+ def test_ws_dashboard_route_is_registered() -> None:
105
+ """Direct regression guard for the proven live defect: before this change,
106
+ counting ``WebSocketRoute`` instances on the real app returned 0."""
107
+
108
+ app = _build_app()
109
+ ws_paths = {route.path for route in app.routes if isinstance(route, WebSocketRoute)}
110
+ assert '/ws/dashboard' in ws_paths
111
+
112
+
113
+ def test_ws_dashboard_streams_snapshot_then_update_from_the_full_dashboard_handler(
114
+ monkeypatch: pytest.MonkeyPatch,
115
+ ) -> None:
116
+ """The socket's `data` payload comes from `get_full_dashboard()` — the
117
+ same function `GET /api/dashboard/full` is built from — not a duplicated
118
+ aggregation path. Patching only that function changes both messages."""
119
+
120
+ import agent_webui.server as server_module
121
+
122
+ monkeypatch.setattr(server_module, '_DASHBOARD_WS_PUSH_INTERVAL_SECONDS', 0.01)
123
+
124
+ sample = _sample_dashboard_response()
125
+ expected_data = {
126
+ 'jellyfin': {
127
+ 'fields': {'active_streams': 2},
128
+ 'status': 'ok',
129
+ 'error': None,
130
+ 'timestamp': '2026-08-08T00:00:00Z',
131
+ 'raw': None,
132
+ }
133
+ }
134
+
135
+ with patch(
136
+ 'agent_utilities.gateway.api.get_full_dashboard',
137
+ new=AsyncMock(return_value=sample),
138
+ ):
139
+ app = _build_app()
140
+ client = TestClient(app)
141
+ with client.websocket_connect('/ws/dashboard') as ws:
142
+ snapshot = ws.receive_json()
143
+ assert snapshot == {'type': 'snapshot', 'data': expected_data}
144
+
145
+ update = ws.receive_json()
146
+ assert update == {'type': 'update', 'data': expected_data}
147
+
148
+
149
+ def test_ws_dashboard_closes_cleanly_on_client_disconnect(
150
+ monkeypatch: pytest.MonkeyPatch,
151
+ ) -> None:
152
+ """No leaked task, no server-side exception, when the client hangs up
153
+ right after the first message — the common case given the frontend's
154
+ aggressive 5s reconnect loop (`DashboardView.tsx`)."""
155
+
156
+ import agent_webui.server as server_module
157
+
158
+ monkeypatch.setattr(server_module, '_DASHBOARD_WS_PUSH_INTERVAL_SECONDS', 5.0)
159
+
160
+ sample = _sample_dashboard_response()
161
+ with patch(
162
+ 'agent_utilities.gateway.api.get_full_dashboard',
163
+ new=AsyncMock(return_value=sample),
164
+ ):
165
+ app = _build_app()
166
+ client = TestClient(app)
167
+ with client.websocket_connect('/ws/dashboard') as ws:
168
+ ws.receive_json()
169
+ # Exiting the `with` block closes the client side; the server's
170
+ # `receive_text()` wait must raise WebSocketDisconnect (caught inside
171
+ # the handler) rather than hang the test or raise past TestClient.
172
+
173
+
174
+ def test_full_app_admits_a_valid_kg_admin_bearer_session(
175
+ monkeypatch: pytest.MonkeyPatch,
176
+ ) -> None:
177
+ """End-to-end extension of `test_ws_dashboard_denial_diagnostics.py`'s
178
+ admission proof: that file drove the middleware chain against a STUB
179
+ inner app (proving the chain itself is correct); this drives it against
180
+ the REAL app built by `create_agent_web_app`, so a valid `kg:admin`
181
+ bearer session is proven to reach the ACTUAL implemented handler and
182
+ receive real (patched) dashboard data — not merely "some inner app"."""
183
+
184
+ _configure_jwt_verifier(monkeypatch)
185
+ _fake_actor(monkeypatch, roles=frozenset({'kg:admin'}))
186
+
187
+ import agent_webui.server as server_module
188
+
189
+ monkeypatch.setattr(server_module, '_DASHBOARD_WS_PUSH_INTERVAL_SECONDS', 5.0)
190
+
191
+ sample = _sample_dashboard_response()
192
+ with patch(
193
+ 'agent_utilities.gateway.api.get_full_dashboard',
194
+ new=AsyncMock(return_value=sample),
195
+ ):
196
+ app = _build_app()
197
+ client = TestClient(app)
198
+ with client.websocket_connect(
199
+ '/ws/dashboard',
200
+ headers={
201
+ 'Authorization': 'Bearer placeholder-users-own-credential',
202
+ 'Origin': 'https://au.arpa',
203
+ 'Host': 'testserver',
204
+ },
205
+ ) as ws:
206
+ snapshot = ws.receive_json()
207
+ assert snapshot['type'] == 'snapshot'
208
+ assert snapshot['data']['jellyfin']['status'] == 'ok'
209
+
210
+
211
+ def test_full_app_denies_a_kg_write_only_bearer_session(
212
+ monkeypatch: pytest.MonkeyPatch,
213
+ ) -> None:
214
+ """A caller with `kg:write` but not `kg:admin` must still be refused —
215
+ the new route must not have widened `_ADMIN_ROUTE_PREFIXES`' `kg:admin`
216
+ requirement for `/ws/dashboard`."""
217
+
218
+ from starlette.websockets import WebSocketDisconnect
219
+
220
+ _configure_jwt_verifier(monkeypatch)
221
+ _fake_actor(monkeypatch, roles=frozenset({'kg:write'}))
222
+
223
+ with patch(
224
+ 'agent_utilities.gateway.api.get_full_dashboard',
225
+ new=AsyncMock(side_effect=AssertionError('must not be reached')),
226
+ ):
227
+ app = _build_app()
228
+ client = TestClient(app)
229
+ with pytest.raises(WebSocketDisconnect) as exc_info:
230
+ with client.websocket_connect(
231
+ '/ws/dashboard',
232
+ headers={
233
+ 'Authorization': 'Bearer placeholder-users-own-credential',
234
+ 'Origin': 'https://au.arpa',
235
+ 'Host': 'testserver',
236
+ },
237
+ ) as ws:
238
+ ws.receive_json()
239
+
240
+ assert exc_info.value.code == 4403
@@ -1 +1 @@
1
- import{v as _,o as B,ab as V,q as A,s as k,l as I,_ as F,p as L,r as t,j as e,aS as O,a as w,a5 as K,B as l,D as H,av as X,L as S,P as J,d as M,a7 as Q,H as W,aA as Y}from"./index-oJW-_XBm.js";import{T as Z,a as ee,b as C,c as R}from"./tabs-D-bKS-GJ.js";import{C as o,a as N,b,c as y,d as m}from"./card-B8Y9xTh8.js";import{U as D}from"./unavailable-notice-Ce6qen9e.js";import{b as E,g as U,c as se}from"./gateway-CigIg5Ky.js";import{R as P}from"./refresh-cw-DW_113QE.js";import{L as ae}from"./layers-BhkOkAA4.js";import{S as te}from"./server-CnnwkO12.js";import"./wifi-off-Dx38TebK.js";const ne=[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8",key:"1s80jp"}],["path",{d:"M10 12h4",key:"a56b0p"}]],le=_("archive",ne);const re=[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 12a9 3 0 0 0 5 2.69",key:"1ui2ym"}],["path",{d:"M21 9.3V5",key:"6k6cib"}],["path",{d:"M3 5v14a9 3 0 0 0 6.47 2.88",key:"i62tjy"}],["path",{d:"M12 12v4h4",key:"1bxaet"}],["path",{d:"M13 20a5 5 0 0 0 9-3 4.5 4.5 0 0 0-4.5-4.5c-1.33 0-2.54.54-3.41 1.41L12 16",key:"1f4ei9"}]],ie=_("database-backup",re);const ce=[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]],de=_("key-round",ce);const oe=[["path",{d:"M10 15H6a4 4 0 0 0-4 4v2",key:"1nfge6"}],["path",{d:"m14.305 16.53.923-.382",key:"1itpsq"}],["path",{d:"m15.228 13.852-.923-.383",key:"eplpkm"}],["path",{d:"m16.852 12.228-.383-.923",key:"13v3q0"}],["path",{d:"m16.852 17.772-.383.924",key:"1i8mnm"}],["path",{d:"m19.148 12.228.383-.923",key:"1q8j1v"}],["path",{d:"m19.53 18.696-.382-.924",key:"vk1qj3"}],["path",{d:"m20.772 13.852.924-.383",key:"n880s0"}],["path",{d:"m20.772 16.148.924.383",key:"1g6xey"}],["circle",{cx:"18",cy:"15",r:"3",key:"gjjjvw"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],$=_("user-cog",oe),me=B({endpoint:k(),local:L(),reachable:L().optional(),breaker:k().optional()}),xe=B({mode:F(["single","sharded"]),default_graph:k().optional(),endpoints:I(me)});function q(){return E("/dashboard/daemon/shards",xe)}function he(){return E("/dashboard/daemon/status")}const ue=B({total_nodes:A(),total_relationships:A(),by_type:V(k(),A())}),pe=B({source_systems:I(k())});function je(){return E("/enhanced/graph/stats",ue)}function fe(){return E("/enhanced/code/instances",pe)}function ge(){return U("/configure",{action:"rbac_list"})}function Ne(){return U("/configure",{action:"backup_status"})}function be(){return se("/graph/configure",{action:"backup_create"})}function G(s){return s===void 0?"-":s>=1e6?`${(s/1e6).toFixed(1)}M`:s>=1e3?`${(s/1e3).toFixed(1)}k`:String(s)}function ve(){const[s,h]=t.useState(null),[r,p]=t.useState(null),[u,v]=t.useState([]),[f,g]=t.useState(!1),[x,j]=t.useState(!1),a=async()=>{j(!0);const[c,T,z]=await Promise.all([je(),q(),fe()]);h(c.ok?c.data:null),p(T.ok?T.data:null),v(z.ok&&z.data?z.data.source_systems:[]),g(!z.ok),j(!1)};t.useEffect(()=>{a()},[]);const d=r?.default_graph??"__commons__",i=r?.endpoints??[],n=s?.by_type??{};return e.jsxs("div",{className:"space-y-6","data-testid":"admin-tenants-panel",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("h2",{className:"text-lg font-semibold flex items-center gap-2",children:[e.jsx(O,{className:"size-5"}),"Tenants & Graphs"]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"Per-tenant node/edge counts and shard placement."})]}),e.jsxs(w,{variant:"outline",size:"sm",onClick:()=>{a()},disabled:x,children:[e.jsx(P,{className:x?"size-4 animate-spin":"size-4"}),e.jsx("span",{className:"ml-2",children:"Refresh"})]})]}),e.jsxs(o,{children:[e.jsxs(N,{children:[e.jsxs(b,{className:"text-base flex items-center gap-2",children:[e.jsx(K,{className:"size-4"}),e.jsx("span",{className:"font-mono",children:d}),e.jsx(l,{variant:"secondary",children:"active"})]}),e.jsx(y,{children:"The active graph tenant served by this backend."})]}),e.jsxs(m,{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-3 gap-4",children:[e.jsxs("div",{className:"rounded border p-3",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Nodes"}),e.jsx("p",{className:"text-2xl font-bold",children:G(s?.total_nodes)})]}),e.jsxs("div",{className:"rounded border p-3",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Relationships"}),e.jsx("p",{className:"text-2xl font-bold",children:G(s?.total_relationships)})]}),e.jsxs("div",{className:"rounded border p-3",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Shard placement"}),e.jsx("p",{className:"text-lg font-semibold",children:i.length?`${String(i.length)} shard(s)`:"-"})]})]}),Object.keys(n).length>0&&e.jsxs("div",{children:[e.jsxs("p",{className:"text-sm font-medium mb-2 flex items-center gap-1",children:[e.jsx(H,{className:"size-3.5"}),"Counts by type"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:Object.entries(n).map(([c,T])=>e.jsxs(l,{variant:"outline",className:"gap-1",children:[c,e.jsx("span",{className:"text-muted-foreground",children:G(T)})]},c))})]}),i.length>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium mb-2",children:"Placed on"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:i.map(c=>e.jsxs(l,{variant:c.reachable?"default":"destructive",className:"font-mono text-xs gap-1",children:[c.endpoint,c.local&&e.jsx("span",{className:"opacity-70",children:"· local"})]},c.endpoint))})]})]})]}),e.jsxs(o,{children:[e.jsxs(N,{children:[e.jsxs(b,{className:"text-base flex items-center gap-2",children:[e.jsx(X,{className:"size-4"}),"Indexed source tenants"]}),e.jsx(y,{children:"Ingested source-systems that carry code in the graph."})]}),e.jsx(m,{children:x?e.jsx(S,{className:"size-4 animate-spin text-muted-foreground"}):f?e.jsx(D,{what:"Indexed source tenants"}):u.length===0?e.jsx("p",{className:"text-muted-foreground text-sm",children:"No indexed source tenants reported."}):e.jsx("div",{className:"flex flex-wrap gap-2",children:u.map(c=>e.jsx(l,{variant:"secondary",className:"font-mono text-xs",children:c},c))})})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Note: full multi-tenant enumeration (a per-tenant catalog with per-tenant counts) is not yet exposed over the REST surface — the engine tenant catalog is reachable only over the UDS client. This panel shows the active graph with real statistics and shard placement plus indexed source tenants."})]})}function ye(s){if(!s)return"outline";const h=s.toLowerCase();return h==="closed"?"default":h==="open"?"destructive":"secondary"}function ke(){const[s,h]=t.useState(null),[r,p]=t.useState(null),[u,v]=t.useState(!1),[f,g]=t.useState(null),[x,j]=t.useState(!1),a=async()=>{j(!0);const[n,c]=await Promise.all([q(),he()]);v(n.unavailable),g(!n.ok&&!n.unavailable?n.error??"The shard topology request failed.":null),h(n.ok?n.data:null),p(c.ok?c.data:null),j(!1)};t.useEffect(()=>{a()},[]);const d=s?.endpoints??[],i=d.filter(n=>n.reachable).length;return e.jsxs("div",{className:"space-y-6","data-testid":"admin-shards-panel",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("h2",{className:"text-lg font-semibold flex items-center gap-2",children:[e.jsx(ae,{className:"size-5"}),"Shard Topology",s&&e.jsx(l,{variant:"secondary",className:"uppercase",children:s.mode})]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"K-way writer layout, per-shard reachability and circuit-breaker state."})]}),e.jsxs(w,{variant:"outline",size:"sm",onClick:()=>{a()},disabled:x,children:[e.jsx(P,{className:x?"size-4 animate-spin":"size-4"}),e.jsx("span",{className:"ml-2",children:"Refresh"})]})]}),u?e.jsxs("p",{className:"text-muted-foreground text-sm",children:["The ",e.jsx("code",{children:"/api/dashboard/daemon/shards"})," route is not activated on this backend yet."]}):f?e.jsx(D,{what:`Shard topology (${f})`}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[e.jsx(o,{children:e.jsxs(m,{className:"pt-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Mode"}),e.jsx("p",{className:"text-2xl font-bold capitalize",children:s?.mode??"-"})]})}),e.jsx(o,{children:e.jsxs(m,{className:"pt-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Shards"}),e.jsx("p",{className:"text-2xl font-bold",children:d.length||"-"})]})}),e.jsx(o,{children:e.jsxs(m,{className:"pt-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Reachable"}),e.jsx("p",{className:"text-2xl font-bold",children:d.length?`${String(i)}/${String(d.length)}`:"-"})]})}),e.jsx(o,{children:e.jsxs(m,{className:"pt-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Default graph"}),e.jsx("p",{className:"text-lg font-semibold font-mono truncate",children:s?.default_graph??"-"})]})})]}),e.jsxs(o,{children:[e.jsxs(N,{children:[e.jsx(b,{className:"text-base",children:"Shards"}),e.jsx(y,{children:"Each configured engine endpoint and its live health."})]}),e.jsx(m,{children:d.length===0?e.jsx("p",{className:"text-muted-foreground text-sm",children:"No shard endpoints reported."}):e.jsx("div",{className:"space-y-2",children:d.map((n,c)=>e.jsxs("div",{className:"flex items-center justify-between rounded border p-3 text-sm",children:[e.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[e.jsx(te,{className:"size-4 shrink-0 text-muted-foreground"}),e.jsxs("div",{className:"flex flex-col min-w-0",children:[e.jsx("span",{className:"font-mono truncate",children:n.endpoint}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:["writer #",c," ",n.local?"· local":"· remote"]})]})]}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[n.local&&e.jsx(l,{variant:"outline",children:"local"}),n.breaker&&e.jsx(l,{variant:ye(n.breaker),className:"font-mono text-xs",children:n.breaker}),n.reachable?e.jsxs(l,{variant:"default",className:"gap-1",children:[e.jsx(J,{className:"size-3"}),"up"]}):e.jsxs(l,{variant:"destructive",className:"gap-1",children:[e.jsx(M,{className:"size-3"}),"down"]})]})]},n.endpoint))})})]}),e.jsxs(o,{children:[e.jsxs(N,{children:[e.jsx(b,{className:"text-base",children:"Daemon"}),e.jsx(y,{children:"The consolidated KG background daemon that hosts the local shard."})]}),e.jsx(m,{children:r?e.jsxs("div",{className:"flex flex-wrap gap-2 text-sm",children:[r.role!==void 0&&e.jsxs(l,{variant:"secondary",className:"gap-1",children:["role: ",r.role]}),e.jsxs(l,{variant:r.running?"default":"outline",className:"gap-1",children:[r.running?e.jsx(S,{className:"size-3 animate-spin"}):e.jsx(M,{className:"size-3"}),r.running?"running":"stopped"]}),r.queue_depth!==void 0&&e.jsxs(l,{variant:"secondary",children:["queue: ",String(r.queue_depth)]})]}):e.jsx("p",{className:"text-muted-foreground text-sm",children:"Daemon status unavailable."})})]})]})]})}function we(){const[s,h]=t.useState(null),[r,p]=t.useState(!1),[u,v]=t.useState(!1),f=async()=>{v(!0);const a=await ge();p(!a.ok),h(a.ok?a.data:null),v(!1)};t.useEffect(()=>{f()},[]);const g=s?.roles??[],x=s?.grants??[],j=s?.identities??[];return e.jsxs("div",{className:"space-y-6","data-testid":"admin-rbac-panel",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("h2",{className:"text-lg font-semibold flex items-center gap-2",children:[e.jsx(Q,{className:"size-5"}),"RBAC"]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"Roles, resource/action grants and agent identities (EG-092 / EG-303)."})]}),e.jsxs(w,{variant:"outline",size:"sm",onClick:()=>{f()},disabled:u,children:[e.jsx(P,{className:u?"size-4 animate-spin":"size-4"}),e.jsx("span",{className:"ml-2",children:"Refresh"})]})]}),u?e.jsx(S,{className:"size-5 animate-spin text-muted-foreground"}):r?e.jsxs(o,{className:"border-dashed",children:[e.jsxs(N,{children:[e.jsxs(b,{className:"text-base flex items-center gap-2",children:[e.jsx(l,{variant:"outline",children:"read-only · not wired"}),"RBAC admin not exposed over REST yet"]}),e.jsxs(y,{children:["The engine RBAC admin surface (EG-092 roles/grants + EG-303 durable persistence) is reachable today only over the epistemic-graph UDS client (",e.jsx("code",{children:"client.rbac.*"})," — AddRole / RemoveRole / AddGrant / RemoveGrant / List). This panel will render the live policy — and enable editing where the API allows — as soon as the REST twin is wired; until then it is read-only by design and shows no fabricated data."]})]}),e.jsxs(m,{className:"space-y-2 text-sm text-muted-foreground",children:[e.jsx("p",{className:"font-medium text-foreground",children:"The engine RBAC model:"}),e.jsxs("ul",{className:"list-disc pl-5 space-y-1",children:[e.jsxs("li",{children:[e.jsx("span",{className:"font-medium text-foreground",children:"Roles"})," — durable named roles with a role hierarchy (EG-092), persisted to redb and reloaded at boot (EG-303)."]}),e.jsxs("li",{children:[e.jsx("span",{className:"font-medium text-foreground",children:"Grants"})," — resource/action grants bound to a role, enforced over per-agent row-level security + ACLs with a hash-chained audit log."]}),e.jsxs("li",{children:[e.jsx("span",{className:"font-medium text-foreground",children:"Agent identities"})," — the agent principals the grants are evaluated against."]})]})]})]}):e.jsx(e.Fragment,{children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsxs(o,{children:[e.jsx(N,{children:e.jsxs(b,{className:"text-base flex items-center gap-2",children:[e.jsx($,{className:"size-4"}),"Roles",e.jsx(l,{variant:"secondary",children:g.length})]})}),e.jsx(m,{className:"space-y-2",children:g.length===0?e.jsx("p",{className:"text-muted-foreground text-sm",children:"No roles."}):g.map(a=>e.jsxs("div",{className:"rounded border p-2 text-sm",children:[e.jsx("span",{className:"font-medium font-mono",children:a.name}),a.description&&e.jsx("p",{className:"text-xs text-muted-foreground",children:a.description})]},a.name))})]}),e.jsxs(o,{children:[e.jsx(N,{children:e.jsxs(b,{className:"text-base flex items-center gap-2",children:[e.jsx(de,{className:"size-4"}),"Grants",e.jsx(l,{variant:"secondary",children:x.length})]})}),e.jsx(m,{className:"space-y-2",children:x.length===0?e.jsx("p",{className:"text-muted-foreground text-sm",children:"No grants."}):x.map((a,d)=>e.jsxs("div",{className:"rounded border p-2 text-xs font-mono",children:[e.jsx("span",{className:"font-medium",children:a.role})," → ",a.action??"*"," on ",a.resource??"*",a.effect&&e.jsx(l,{variant:"outline",className:"ml-2",children:a.effect})]},`${a.role}-${String(d)}`))})]}),e.jsxs(o,{children:[e.jsx(N,{children:e.jsxs(b,{className:"text-base flex items-center gap-2",children:[e.jsx($,{className:"size-4"}),"Agent identities",e.jsx(l,{variant:"secondary",children:j.length})]})}),e.jsx(m,{className:"space-y-2",children:j.length===0?e.jsx("p",{className:"text-muted-foreground text-sm",children:"No identities."}):j.map(a=>e.jsxs("div",{className:"rounded border p-2 text-sm",children:[e.jsx("span",{className:"font-mono",children:a.id}),a.roles&&a.roles.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1 mt-1",children:a.roles.map(d=>e.jsx(l,{variant:"outline",className:"text-xs",children:d},d))})]},a.id))})]})]})})]})}function Se(s){if(s===void 0)return"-";const h=["B","KB","MB","GB","TB"];let r=s,p=0;for(;r>=1024&&p<h.length-1;)r/=1024,p++;return`${r.toFixed(1)} ${h[p]}`}function Te(){const[s,h]=t.useState(null),[r,p]=t.useState(!1),[u,v]=t.useState(!1),[f,g]=t.useState(!1),x=async()=>{v(!0);const i=await Ne();p(!i.ok),h(i.ok?i.data:null),v(!1)};t.useEffect(()=>{x()},[]);const j=async()=>{g(!0),await be(),await x(),g(!1)},a=s?.backups??[],d=!r;return e.jsxs("div",{className:"space-y-6","data-testid":"admin-backup-panel",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("h2",{className:"text-lg font-semibold flex items-center gap-2",children:[e.jsx(ie,{className:"size-5"}),"Backup & PITR"]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"Online backups and point-in-time restore (CONCEPT:EG-090)."})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(w,{variant:"outline",size:"sm",onClick:()=>{x()},disabled:u,children:[e.jsx(P,{className:u?"size-4 animate-spin":"size-4"}),e.jsx("span",{className:"ml-2",children:"Refresh"})]}),e.jsxs(w,{size:"sm",onClick:()=>{j()},disabled:!d||f,title:d?"Trigger an online backup":"Backup REST twin not wired yet",children:[f?e.jsx(S,{className:"size-4 animate-spin"}):e.jsx(le,{className:"size-4"}),e.jsx("span",{className:"ml-2",children:"Trigger backup"})]})]})]}),u?e.jsx(S,{className:"size-5 animate-spin text-muted-foreground"}):d?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-3 gap-4",children:[e.jsx(o,{children:e.jsxs(m,{className:"pt-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Snapshots"}),e.jsx("p",{className:"text-2xl font-bold",children:a.length})]})}),e.jsx(o,{children:e.jsxs(m,{className:"pt-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Last backup"}),e.jsx("p",{className:"text-lg font-semibold",children:s?.last_backup_at??"-"})]})}),e.jsx(o,{children:e.jsxs(m,{className:"pt-6",children:[e.jsxs("p",{className:"text-sm text-muted-foreground flex items-center gap-1",children:[e.jsx(W,{className:"size-3.5"}),"PITR window"]}),e.jsxs("p",{className:"text-xs font-mono",children:[s?.pitr_window?.earliest??"-"," → ",s?.pitr_window?.latest??"-"]})]})})]}),e.jsxs(o,{children:[e.jsxs(N,{children:[e.jsx(b,{className:"text-base",children:"Snapshots"}),e.jsx(y,{children:"Retained backups available for point-in-time restore."})]}),e.jsx(m,{children:a.length===0?e.jsx("p",{className:"text-muted-foreground text-sm",children:"No snapshots yet."}):e.jsx("div",{className:"space-y-2",children:a.map(i=>e.jsxs("div",{className:"flex items-center justify-between rounded border p-2 text-sm",children:[e.jsxs("div",{className:"flex flex-col min-w-0",children:[e.jsx("span",{className:"font-mono truncate",children:i.id}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[i.created_at??"-"," ",i.shard?`· ${i.shard}`:""," ",i.lsn?`· LSN ${i.lsn}`:""]})]}),e.jsx(l,{variant:"secondary",children:Se(i.size_bytes)})]},i.id))})})]})]}):e.jsxs(o,{className:"border-dashed",children:[e.jsxs(N,{children:[e.jsxs(b,{className:"text-base flex items-center gap-2",children:[e.jsx(l,{variant:"outline",children:"read-only · not wired"}),"Backup/PITR not exposed over REST yet"]}),e.jsxs(y,{children:["Online backup / restore (EG-090) is reachable today only over the epistemic-graph UDS client (a",e.jsx("code",{children:" Method::Backup"})," op streaming a per-shard MVCC snapshot). This panel will list snapshots, show the PITR window, and enable the trigger control as soon as the REST twin is wired; until then it is read-only by design and shows no fabricated backups."]})]}),e.jsxs(m,{className:"text-sm text-muted-foreground space-y-2",children:[e.jsx("p",{className:"font-medium text-foreground",children:"The engine backup model:"}),e.jsxs("ul",{className:"list-disc pl-5 space-y-1",children:[e.jsx("li",{children:"Online per-shard MVCC snapshot streamed verbatim (no write-stall)."}),e.jsx("li",{children:"Point-in-time restore to a chosen LSN / timestamp within the retained window."})]})]})]})]})}function Le(){return e.jsxs("div",{className:"space-y-6","data-testid":"admin-view",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[e.jsx(Y,{className:"size-6"}),"Admin Console"]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"Tenants, shard topology, RBAC and backup/PITR for the epistemic-graph engine."})]}),e.jsxs(Z,{defaultValue:"tenants",children:[e.jsxs(ee,{children:[e.jsx(C,{value:"tenants",children:"Tenants"}),e.jsx(C,{value:"shards",children:"Shards"}),e.jsx(C,{value:"rbac",children:"RBAC"}),e.jsx(C,{value:"backup",children:"Backup / PITR"})]}),e.jsx(R,{value:"tenants",className:"mt-4",children:e.jsx(ve,{})}),e.jsx(R,{value:"shards",className:"mt-4",children:e.jsx(ke,{})}),e.jsx(R,{value:"rbac",className:"mt-4",children:e.jsx(we,{})}),e.jsx(R,{value:"backup",className:"mt-4",children:e.jsx(Te,{})})]})]})}export{Le as default};
1
+ import{v as _,o as B,ab as V,q as A,s as k,l as I,_ as F,p as L,r as t,j as e,aS as O,a as w,a5 as K,B as l,D as H,av as X,L as S,P as J,d as M,a7 as Q,H as W,aA as Y}from"./index-BnusqFjf.js";import{T as Z,a as ee,b as C,c as R}from"./tabs-DyMly3FL.js";import{C as o,a as N,b,c as y,d as m}from"./card-29-M2biw.js";import{U as D}from"./unavailable-notice-BQC05P73.js";import{b as E,g as U,c as se}from"./gateway-CgeA_tnH.js";import{R as P}from"./refresh-cw-CErjhfzP.js";import{L as ae}from"./layers-hZjIkrBL.js";import{S as te}from"./server-s_mG4xeh.js";import"./wifi-off-dBDwDwnn.js";const ne=[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8",key:"1s80jp"}],["path",{d:"M10 12h4",key:"a56b0p"}]],le=_("archive",ne);const re=[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 12a9 3 0 0 0 5 2.69",key:"1ui2ym"}],["path",{d:"M21 9.3V5",key:"6k6cib"}],["path",{d:"M3 5v14a9 3 0 0 0 6.47 2.88",key:"i62tjy"}],["path",{d:"M12 12v4h4",key:"1bxaet"}],["path",{d:"M13 20a5 5 0 0 0 9-3 4.5 4.5 0 0 0-4.5-4.5c-1.33 0-2.54.54-3.41 1.41L12 16",key:"1f4ei9"}]],ie=_("database-backup",re);const ce=[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]],de=_("key-round",ce);const oe=[["path",{d:"M10 15H6a4 4 0 0 0-4 4v2",key:"1nfge6"}],["path",{d:"m14.305 16.53.923-.382",key:"1itpsq"}],["path",{d:"m15.228 13.852-.923-.383",key:"eplpkm"}],["path",{d:"m16.852 12.228-.383-.923",key:"13v3q0"}],["path",{d:"m16.852 17.772-.383.924",key:"1i8mnm"}],["path",{d:"m19.148 12.228.383-.923",key:"1q8j1v"}],["path",{d:"m19.53 18.696-.382-.924",key:"vk1qj3"}],["path",{d:"m20.772 13.852.924-.383",key:"n880s0"}],["path",{d:"m20.772 16.148.924.383",key:"1g6xey"}],["circle",{cx:"18",cy:"15",r:"3",key:"gjjjvw"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],$=_("user-cog",oe),me=B({endpoint:k(),local:L(),reachable:L().optional(),breaker:k().optional()}),xe=B({mode:F(["single","sharded"]),default_graph:k().optional(),endpoints:I(me)});function q(){return E("/dashboard/daemon/shards",xe)}function he(){return E("/dashboard/daemon/status")}const ue=B({total_nodes:A(),total_relationships:A(),by_type:V(k(),A())}),pe=B({source_systems:I(k())});function je(){return E("/enhanced/graph/stats",ue)}function fe(){return E("/enhanced/code/instances",pe)}function ge(){return U("/configure",{action:"rbac_list"})}function Ne(){return U("/configure",{action:"backup_status"})}function be(){return se("/graph/configure",{action:"backup_create"})}function G(s){return s===void 0?"-":s>=1e6?`${(s/1e6).toFixed(1)}M`:s>=1e3?`${(s/1e3).toFixed(1)}k`:String(s)}function ve(){const[s,h]=t.useState(null),[r,p]=t.useState(null),[u,v]=t.useState([]),[f,g]=t.useState(!1),[x,j]=t.useState(!1),a=async()=>{j(!0);const[c,T,z]=await Promise.all([je(),q(),fe()]);h(c.ok?c.data:null),p(T.ok?T.data:null),v(z.ok&&z.data?z.data.source_systems:[]),g(!z.ok),j(!1)};t.useEffect(()=>{a()},[]);const d=r?.default_graph??"__commons__",i=r?.endpoints??[],n=s?.by_type??{};return e.jsxs("div",{className:"space-y-6","data-testid":"admin-tenants-panel",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("h2",{className:"text-lg font-semibold flex items-center gap-2",children:[e.jsx(O,{className:"size-5"}),"Tenants & Graphs"]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"Per-tenant node/edge counts and shard placement."})]}),e.jsxs(w,{variant:"outline",size:"sm",onClick:()=>{a()},disabled:x,children:[e.jsx(P,{className:x?"size-4 animate-spin":"size-4"}),e.jsx("span",{className:"ml-2",children:"Refresh"})]})]}),e.jsxs(o,{children:[e.jsxs(N,{children:[e.jsxs(b,{className:"text-base flex items-center gap-2",children:[e.jsx(K,{className:"size-4"}),e.jsx("span",{className:"font-mono",children:d}),e.jsx(l,{variant:"secondary",children:"active"})]}),e.jsx(y,{children:"The active graph tenant served by this backend."})]}),e.jsxs(m,{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-3 gap-4",children:[e.jsxs("div",{className:"rounded border p-3",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Nodes"}),e.jsx("p",{className:"text-2xl font-bold",children:G(s?.total_nodes)})]}),e.jsxs("div",{className:"rounded border p-3",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Relationships"}),e.jsx("p",{className:"text-2xl font-bold",children:G(s?.total_relationships)})]}),e.jsxs("div",{className:"rounded border p-3",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Shard placement"}),e.jsx("p",{className:"text-lg font-semibold",children:i.length?`${String(i.length)} shard(s)`:"-"})]})]}),Object.keys(n).length>0&&e.jsxs("div",{children:[e.jsxs("p",{className:"text-sm font-medium mb-2 flex items-center gap-1",children:[e.jsx(H,{className:"size-3.5"}),"Counts by type"]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:Object.entries(n).map(([c,T])=>e.jsxs(l,{variant:"outline",className:"gap-1",children:[c,e.jsx("span",{className:"text-muted-foreground",children:G(T)})]},c))})]}),i.length>0&&e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium mb-2",children:"Placed on"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:i.map(c=>e.jsxs(l,{variant:c.reachable?"default":"destructive",className:"font-mono text-xs gap-1",children:[c.endpoint,c.local&&e.jsx("span",{className:"opacity-70",children:"· local"})]},c.endpoint))})]})]})]}),e.jsxs(o,{children:[e.jsxs(N,{children:[e.jsxs(b,{className:"text-base flex items-center gap-2",children:[e.jsx(X,{className:"size-4"}),"Indexed source tenants"]}),e.jsx(y,{children:"Ingested source-systems that carry code in the graph."})]}),e.jsx(m,{children:x?e.jsx(S,{className:"size-4 animate-spin text-muted-foreground"}):f?e.jsx(D,{what:"Indexed source tenants"}):u.length===0?e.jsx("p",{className:"text-muted-foreground text-sm",children:"No indexed source tenants reported."}):e.jsx("div",{className:"flex flex-wrap gap-2",children:u.map(c=>e.jsx(l,{variant:"secondary",className:"font-mono text-xs",children:c},c))})})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Note: full multi-tenant enumeration (a per-tenant catalog with per-tenant counts) is not yet exposed over the REST surface — the engine tenant catalog is reachable only over the UDS client. This panel shows the active graph with real statistics and shard placement plus indexed source tenants."})]})}function ye(s){if(!s)return"outline";const h=s.toLowerCase();return h==="closed"?"default":h==="open"?"destructive":"secondary"}function ke(){const[s,h]=t.useState(null),[r,p]=t.useState(null),[u,v]=t.useState(!1),[f,g]=t.useState(null),[x,j]=t.useState(!1),a=async()=>{j(!0);const[n,c]=await Promise.all([q(),he()]);v(n.unavailable),g(!n.ok&&!n.unavailable?n.error??"The shard topology request failed.":null),h(n.ok?n.data:null),p(c.ok?c.data:null),j(!1)};t.useEffect(()=>{a()},[]);const d=s?.endpoints??[],i=d.filter(n=>n.reachable).length;return e.jsxs("div",{className:"space-y-6","data-testid":"admin-shards-panel",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("h2",{className:"text-lg font-semibold flex items-center gap-2",children:[e.jsx(ae,{className:"size-5"}),"Shard Topology",s&&e.jsx(l,{variant:"secondary",className:"uppercase",children:s.mode})]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"K-way writer layout, per-shard reachability and circuit-breaker state."})]}),e.jsxs(w,{variant:"outline",size:"sm",onClick:()=>{a()},disabled:x,children:[e.jsx(P,{className:x?"size-4 animate-spin":"size-4"}),e.jsx("span",{className:"ml-2",children:"Refresh"})]})]}),u?e.jsxs("p",{className:"text-muted-foreground text-sm",children:["The ",e.jsx("code",{children:"/api/dashboard/daemon/shards"})," route is not activated on this backend yet."]}):f?e.jsx(D,{what:`Shard topology (${f})`}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[e.jsx(o,{children:e.jsxs(m,{className:"pt-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Mode"}),e.jsx("p",{className:"text-2xl font-bold capitalize",children:s?.mode??"-"})]})}),e.jsx(o,{children:e.jsxs(m,{className:"pt-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Shards"}),e.jsx("p",{className:"text-2xl font-bold",children:d.length||"-"})]})}),e.jsx(o,{children:e.jsxs(m,{className:"pt-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Reachable"}),e.jsx("p",{className:"text-2xl font-bold",children:d.length?`${String(i)}/${String(d.length)}`:"-"})]})}),e.jsx(o,{children:e.jsxs(m,{className:"pt-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Default graph"}),e.jsx("p",{className:"text-lg font-semibold font-mono truncate",children:s?.default_graph??"-"})]})})]}),e.jsxs(o,{children:[e.jsxs(N,{children:[e.jsx(b,{className:"text-base",children:"Shards"}),e.jsx(y,{children:"Each configured engine endpoint and its live health."})]}),e.jsx(m,{children:d.length===0?e.jsx("p",{className:"text-muted-foreground text-sm",children:"No shard endpoints reported."}):e.jsx("div",{className:"space-y-2",children:d.map((n,c)=>e.jsxs("div",{className:"flex items-center justify-between rounded border p-3 text-sm",children:[e.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[e.jsx(te,{className:"size-4 shrink-0 text-muted-foreground"}),e.jsxs("div",{className:"flex flex-col min-w-0",children:[e.jsx("span",{className:"font-mono truncate",children:n.endpoint}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:["writer #",c," ",n.local?"· local":"· remote"]})]})]}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[n.local&&e.jsx(l,{variant:"outline",children:"local"}),n.breaker&&e.jsx(l,{variant:ye(n.breaker),className:"font-mono text-xs",children:n.breaker}),n.reachable?e.jsxs(l,{variant:"default",className:"gap-1",children:[e.jsx(J,{className:"size-3"}),"up"]}):e.jsxs(l,{variant:"destructive",className:"gap-1",children:[e.jsx(M,{className:"size-3"}),"down"]})]})]},n.endpoint))})})]}),e.jsxs(o,{children:[e.jsxs(N,{children:[e.jsx(b,{className:"text-base",children:"Daemon"}),e.jsx(y,{children:"The consolidated KG background daemon that hosts the local shard."})]}),e.jsx(m,{children:r?e.jsxs("div",{className:"flex flex-wrap gap-2 text-sm",children:[r.role!==void 0&&e.jsxs(l,{variant:"secondary",className:"gap-1",children:["role: ",r.role]}),e.jsxs(l,{variant:r.running?"default":"outline",className:"gap-1",children:[r.running?e.jsx(S,{className:"size-3 animate-spin"}):e.jsx(M,{className:"size-3"}),r.running?"running":"stopped"]}),r.queue_depth!==void 0&&e.jsxs(l,{variant:"secondary",children:["queue: ",String(r.queue_depth)]})]}):e.jsx("p",{className:"text-muted-foreground text-sm",children:"Daemon status unavailable."})})]})]})]})}function we(){const[s,h]=t.useState(null),[r,p]=t.useState(!1),[u,v]=t.useState(!1),f=async()=>{v(!0);const a=await ge();p(!a.ok),h(a.ok?a.data:null),v(!1)};t.useEffect(()=>{f()},[]);const g=s?.roles??[],x=s?.grants??[],j=s?.identities??[];return e.jsxs("div",{className:"space-y-6","data-testid":"admin-rbac-panel",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("h2",{className:"text-lg font-semibold flex items-center gap-2",children:[e.jsx(Q,{className:"size-5"}),"RBAC"]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"Roles, resource/action grants and agent identities (EG-092 / EG-303)."})]}),e.jsxs(w,{variant:"outline",size:"sm",onClick:()=>{f()},disabled:u,children:[e.jsx(P,{className:u?"size-4 animate-spin":"size-4"}),e.jsx("span",{className:"ml-2",children:"Refresh"})]})]}),u?e.jsx(S,{className:"size-5 animate-spin text-muted-foreground"}):r?e.jsxs(o,{className:"border-dashed",children:[e.jsxs(N,{children:[e.jsxs(b,{className:"text-base flex items-center gap-2",children:[e.jsx(l,{variant:"outline",children:"read-only · not wired"}),"RBAC admin not exposed over REST yet"]}),e.jsxs(y,{children:["The engine RBAC admin surface (EG-092 roles/grants + EG-303 durable persistence) is reachable today only over the epistemic-graph UDS client (",e.jsx("code",{children:"client.rbac.*"})," — AddRole / RemoveRole / AddGrant / RemoveGrant / List). This panel will render the live policy — and enable editing where the API allows — as soon as the REST twin is wired; until then it is read-only by design and shows no fabricated data."]})]}),e.jsxs(m,{className:"space-y-2 text-sm text-muted-foreground",children:[e.jsx("p",{className:"font-medium text-foreground",children:"The engine RBAC model:"}),e.jsxs("ul",{className:"list-disc pl-5 space-y-1",children:[e.jsxs("li",{children:[e.jsx("span",{className:"font-medium text-foreground",children:"Roles"})," — durable named roles with a role hierarchy (EG-092), persisted to redb and reloaded at boot (EG-303)."]}),e.jsxs("li",{children:[e.jsx("span",{className:"font-medium text-foreground",children:"Grants"})," — resource/action grants bound to a role, enforced over per-agent row-level security + ACLs with a hash-chained audit log."]}),e.jsxs("li",{children:[e.jsx("span",{className:"font-medium text-foreground",children:"Agent identities"})," — the agent principals the grants are evaluated against."]})]})]})]}):e.jsx(e.Fragment,{children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsxs(o,{children:[e.jsx(N,{children:e.jsxs(b,{className:"text-base flex items-center gap-2",children:[e.jsx($,{className:"size-4"}),"Roles",e.jsx(l,{variant:"secondary",children:g.length})]})}),e.jsx(m,{className:"space-y-2",children:g.length===0?e.jsx("p",{className:"text-muted-foreground text-sm",children:"No roles."}):g.map(a=>e.jsxs("div",{className:"rounded border p-2 text-sm",children:[e.jsx("span",{className:"font-medium font-mono",children:a.name}),a.description&&e.jsx("p",{className:"text-xs text-muted-foreground",children:a.description})]},a.name))})]}),e.jsxs(o,{children:[e.jsx(N,{children:e.jsxs(b,{className:"text-base flex items-center gap-2",children:[e.jsx(de,{className:"size-4"}),"Grants",e.jsx(l,{variant:"secondary",children:x.length})]})}),e.jsx(m,{className:"space-y-2",children:x.length===0?e.jsx("p",{className:"text-muted-foreground text-sm",children:"No grants."}):x.map((a,d)=>e.jsxs("div",{className:"rounded border p-2 text-xs font-mono",children:[e.jsx("span",{className:"font-medium",children:a.role})," → ",a.action??"*"," on ",a.resource??"*",a.effect&&e.jsx(l,{variant:"outline",className:"ml-2",children:a.effect})]},`${a.role}-${String(d)}`))})]}),e.jsxs(o,{children:[e.jsx(N,{children:e.jsxs(b,{className:"text-base flex items-center gap-2",children:[e.jsx($,{className:"size-4"}),"Agent identities",e.jsx(l,{variant:"secondary",children:j.length})]})}),e.jsx(m,{className:"space-y-2",children:j.length===0?e.jsx("p",{className:"text-muted-foreground text-sm",children:"No identities."}):j.map(a=>e.jsxs("div",{className:"rounded border p-2 text-sm",children:[e.jsx("span",{className:"font-mono",children:a.id}),a.roles&&a.roles.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1 mt-1",children:a.roles.map(d=>e.jsx(l,{variant:"outline",className:"text-xs",children:d},d))})]},a.id))})]})]})})]})}function Se(s){if(s===void 0)return"-";const h=["B","KB","MB","GB","TB"];let r=s,p=0;for(;r>=1024&&p<h.length-1;)r/=1024,p++;return`${r.toFixed(1)} ${h[p]}`}function Te(){const[s,h]=t.useState(null),[r,p]=t.useState(!1),[u,v]=t.useState(!1),[f,g]=t.useState(!1),x=async()=>{v(!0);const i=await Ne();p(!i.ok),h(i.ok?i.data:null),v(!1)};t.useEffect(()=>{x()},[]);const j=async()=>{g(!0),await be(),await x(),g(!1)},a=s?.backups??[],d=!r;return e.jsxs("div",{className:"space-y-6","data-testid":"admin-backup-panel",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("h2",{className:"text-lg font-semibold flex items-center gap-2",children:[e.jsx(ie,{className:"size-5"}),"Backup & PITR"]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"Online backups and point-in-time restore (CONCEPT:EG-090)."})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(w,{variant:"outline",size:"sm",onClick:()=>{x()},disabled:u,children:[e.jsx(P,{className:u?"size-4 animate-spin":"size-4"}),e.jsx("span",{className:"ml-2",children:"Refresh"})]}),e.jsxs(w,{size:"sm",onClick:()=>{j()},disabled:!d||f,title:d?"Trigger an online backup":"Backup REST twin not wired yet",children:[f?e.jsx(S,{className:"size-4 animate-spin"}):e.jsx(le,{className:"size-4"}),e.jsx("span",{className:"ml-2",children:"Trigger backup"})]})]})]}),u?e.jsx(S,{className:"size-5 animate-spin text-muted-foreground"}):d?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-3 gap-4",children:[e.jsx(o,{children:e.jsxs(m,{className:"pt-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Snapshots"}),e.jsx("p",{className:"text-2xl font-bold",children:a.length})]})}),e.jsx(o,{children:e.jsxs(m,{className:"pt-6",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Last backup"}),e.jsx("p",{className:"text-lg font-semibold",children:s?.last_backup_at??"-"})]})}),e.jsx(o,{children:e.jsxs(m,{className:"pt-6",children:[e.jsxs("p",{className:"text-sm text-muted-foreground flex items-center gap-1",children:[e.jsx(W,{className:"size-3.5"}),"PITR window"]}),e.jsxs("p",{className:"text-xs font-mono",children:[s?.pitr_window?.earliest??"-"," → ",s?.pitr_window?.latest??"-"]})]})})]}),e.jsxs(o,{children:[e.jsxs(N,{children:[e.jsx(b,{className:"text-base",children:"Snapshots"}),e.jsx(y,{children:"Retained backups available for point-in-time restore."})]}),e.jsx(m,{children:a.length===0?e.jsx("p",{className:"text-muted-foreground text-sm",children:"No snapshots yet."}):e.jsx("div",{className:"space-y-2",children:a.map(i=>e.jsxs("div",{className:"flex items-center justify-between rounded border p-2 text-sm",children:[e.jsxs("div",{className:"flex flex-col min-w-0",children:[e.jsx("span",{className:"font-mono truncate",children:i.id}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[i.created_at??"-"," ",i.shard?`· ${i.shard}`:""," ",i.lsn?`· LSN ${i.lsn}`:""]})]}),e.jsx(l,{variant:"secondary",children:Se(i.size_bytes)})]},i.id))})})]})]}):e.jsxs(o,{className:"border-dashed",children:[e.jsxs(N,{children:[e.jsxs(b,{className:"text-base flex items-center gap-2",children:[e.jsx(l,{variant:"outline",children:"read-only · not wired"}),"Backup/PITR not exposed over REST yet"]}),e.jsxs(y,{children:["Online backup / restore (EG-090) is reachable today only over the epistemic-graph UDS client (a",e.jsx("code",{children:" Method::Backup"})," op streaming a per-shard MVCC snapshot). This panel will list snapshots, show the PITR window, and enable the trigger control as soon as the REST twin is wired; until then it is read-only by design and shows no fabricated backups."]})]}),e.jsxs(m,{className:"text-sm text-muted-foreground space-y-2",children:[e.jsx("p",{className:"font-medium text-foreground",children:"The engine backup model:"}),e.jsxs("ul",{className:"list-disc pl-5 space-y-1",children:[e.jsx("li",{children:"Online per-shard MVCC snapshot streamed verbatim (no write-stall)."}),e.jsx("li",{children:"Point-in-time restore to a chosen LSN / timestamp within the retained window."})]})]})]})]})}function Le(){return e.jsxs("div",{className:"space-y-6","data-testid":"admin-view",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[e.jsx(Y,{className:"size-6"}),"Admin Console"]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"Tenants, shard topology, RBAC and backup/PITR for the epistemic-graph engine."})]}),e.jsxs(Z,{defaultValue:"tenants",children:[e.jsxs(ee,{children:[e.jsx(C,{value:"tenants",children:"Tenants"}),e.jsx(C,{value:"shards",children:"Shards"}),e.jsx(C,{value:"rbac",children:"RBAC"}),e.jsx(C,{value:"backup",children:"Backup / PITR"})]}),e.jsx(R,{value:"tenants",className:"mt-4",children:e.jsx(ve,{})}),e.jsx(R,{value:"shards",className:"mt-4",children:e.jsx(ke,{})}),e.jsx(R,{value:"rbac",className:"mt-4",children:e.jsx(we,{})}),e.jsx(R,{value:"backup",className:"mt-4",children:e.jsx(Te,{})})]})]})}export{Le as default};
@@ -1 +1 @@
1
- import{r as t,j as e,a as d,U as ee,V as se,z as te,B as o,y as Ce,I as f,W as ke,Y as Se,m as ae,Z as _e,t as r}from"./index-oJW-_XBm.js";import{C as Ae,a as Le,b as Te,c as ze,d as Ue}from"./card-B8Y9xTh8.js";import{S as Re}from"./scroll-area-DESuUYBV.js";import{U as z}from"./unavailable-notice-Ce6qen9e.js";import{E as re}from"./external-link-ChibGV02.js";import{P as U}from"./plus-54fL5QKg.js";import{R}from"./refresh-cw-DW_113QE.js";import{T as Ee}from"./trash-2-DeGIbUgN.js";import"./wifi-off-Dx38TebK.js";function ne(n){window.history.pushState({},"",n),window.dispatchEvent(new Event("history-state-changed"))}function x(n){return Array.isArray(n)?n:[]}const E={app_profile:"",deployment_profile:"",chat_models:[],embedding_models:[]};function qe(){const[n,p]=t.useState("library"),[oe,le]=t.useState([]),[b,$]=t.useState(!0),[v,ie]=t.useState(""),[O,de]=t.useState([]),[ce,I]=t.useState(!0),[g,me]=t.useState([]),[xe,P]=t.useState(!1),[i,j]=t.useState(E),[pe,F]=t.useState(!0),[ge,N]=t.useState(!1),[he,y]=t.useState(!1),[w,C]=t.useState(!1),[c,k]=t.useState(""),[J,S]=t.useState(""),[h,B]=t.useState(""),[D,_]=t.useState(""),[M,q]=t.useState(""),[G,Y]=t.useState(new Set),[V,W]=t.useState(!1),[u,H]=t.useState(""),[A,Q]=t.useState(""),[Z,K]=t.useState(!1),m=async()=>{try{$(!0);const s=await fetch("/api/enhanced/agent-library/agents");if(!s.ok){r.error("Failed to load the Agent Library"),N(!0);return}le(x(await s.json())),N(!1)}catch{r.error("Failed to connect to the Agent Library"),N(!0)}finally{$(!1)}},L=async()=>{try{I(!0);const s=await fetch("/api/enhanced/agent-library/suggestions");if(!s.ok)return;de(x(await s.json()))}catch{}finally{I(!1)}},T=async s=>{try{P(!0);const a=s?`?mcp_server=${encodeURIComponent(s)}`:"",l=await fetch(`/api/enhanced/agent-library/tools${a}`);if(!l.ok){y(!0);return}me(x(await l.json())),y(!1)}catch{y(!0)}finally{P(!1)}},ue=async()=>{try{F(!0);const s=await fetch("/api/enhanced/agent-library/config-summary");if(!s.ok){j(E),C(!0);return}const a=await s.json();j({app_profile:a?.app_profile??"",deployment_profile:a?.deployment_profile??"",chat_models:x(a?.chat_models),embedding_models:x(a?.embedding_models)}),C(!1)}catch{j(E),C(!0)}finally{F(!1)}};t.useEffect(()=>{m(),L(),T(),ue()},[]);const fe=t.useMemo(()=>{const s=new Set;for(const a of g)a.mcp_server&&s.add(a.mcp_server);return Array.from(s).sort()},[g]),be=s=>{Y(a=>{const l=new Set(a);return l.has(s)?l.delete(s):l.add(s),l})},ve=s=>{p("compose"),_(s.mcp_server),k(a=>a||`${s.mcp_server} agent`),S(a=>a||`Uses the ${s.mcp_server} tools: ${s.sample_tools.join(", ")}.`),T(s.mcp_server),r.message(`Composing an agent for '${s.mcp_server}'`)},je=async()=>{if(!c.trim()||!h.trim()){r.error("Name and instructions are required");return}W(!0);try{const s=await fetch("/api/enhanced/agent-library/agents",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:c.trim(),description:J.trim(),instructions:h.trim(),bind_server:D||void 0,model_preference:M||void 0,tool_ids:Array.from(G)})});if(!s.ok){const a=await s.json().catch(()=>null);r.error(a?.detail??"Failed to compose the agent");return}r.success(`Agent '${c.trim()}' saved and ready to delegate to`),k(""),S(""),B(""),_(""),q(""),Y(new Set),p("library"),m(),L()}catch{r.error("Network error composing the agent")}finally{W(!1)}},Ne=async s=>{try{if(!(await fetch(`/api/enhanced/agent-library/agents/${encodeURIComponent(s.id)}`,{method:"DELETE"})).ok){r.error("Failed to archive that agent");return}r.success(`Archived '${s.name}'`),m()}catch{r.error("Network error archiving the agent")}},ye=async()=>{if(!u.trim()){r.error("An agent URL is required");return}let s;if(A.trim())try{s=JSON.parse(A)}catch{r.error("The pasted agent card is not valid JSON");return}K(!0);try{const a=await fetch("/api/enhanced/agent-library/a2a",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:u.trim(),agent_card:s})});if(!a.ok){const l=await a.json().catch(()=>null);r.error(l?.detail??"Failed to register that agent");return}r.success("External agent registered"),H(""),Q(""),m()}catch{r.error("Network error registering the external agent")}finally{K(!1)}},X=oe.filter(s=>s.name.toLowerCase().includes(v.toLowerCase())||s.description.toLowerCase().includes(v.toLowerCase())),we=[{id:"library",label:"Library",icon:ee},{id:"compose",label:"Compose an Agent",icon:U},{id:"external",label:"External Agents",icon:se},{id:"config",label:"Model & Config",icon:te}];return e.jsx("div",{className:"space-y-6",children:e.jsxs(Ae,{className:"border-border/40 bg-card/60 backdrop-blur-md",children:[e.jsxs(Le,{children:[e.jsxs("div",{className:"flex flex-col md:flex-row justify-between items-start md:items-center gap-4",children:[e.jsxs("div",{children:[e.jsx(Te,{className:"text-2xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-teal-400 via-emerald-400 to-green-500",children:"Agent Library"}),e.jsx(ze,{children:"Compose agents from prompts and tools you already have, register outside A2A agents, and call on any of them whenever you need — stored in the knowledge graph, not your browser."})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(d,{variant:"outline",size:"sm",onClick:()=>{ne("/prompts")},children:["Prompts Registry ",e.jsx(re,{className:"size-3.5 ml-1.5"})]}),e.jsxs(d,{variant:"outline",size:"sm",onClick:()=>{ne("/skills")},children:["Tools & Skills ",e.jsx(re,{className:"size-3.5 ml-1.5"})]})]})]}),e.jsx("div",{className:"flex flex-wrap gap-2 mt-4 border-b border-border/40 pb-2",children:we.map(s=>e.jsxs("button",{onClick:()=>{p(s.id)},className:`flex items-center gap-2 px-3 py-1.5 rounded-md text-xs font-semibold transition-all border ${n===s.id?"bg-emerald-500/10 border-emerald-500/30 text-emerald-400 font-bold":"bg-transparent border-transparent text-muted-foreground hover:text-foreground"}`,children:[e.jsx(s.icon,{className:"size-3.5"}),e.jsx("span",{children:s.label})]},s.id))})]}),e.jsxs(Ue,{children:[n==="library"&&e.jsxs("div",{className:"space-y-6",children:[!ce&&O.length>0&&e.jsxs("div",{className:"space-y-3",children:[e.jsxs("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5",children:[e.jsx(te,{className:"size-3.5 text-emerald-400"})," Suggested, from what is installed"]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:O.slice(0,6).map(s=>e.jsxs("div",{className:"p-3.5 rounded-lg border border-emerald-500/20 bg-emerald-500/5 flex flex-col gap-2",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"font-bold text-sm text-foreground",children:s.mcp_server}),e.jsxs(o,{variant:"secondary",className:"text-[10px]",children:[s.tool_count," tool",s.tool_count===1?"":"s"]})]}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:s.reason}),e.jsxs(d,{size:"sm",variant:"outline",className:"self-start h-7 text-xs",onClick:()=>{ve(s)},children:[e.jsx(U,{className:"size-3.5 mr-1"})," Build this agent"]})]},s.mcp_server))})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(Ce,{className:"absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground"}),e.jsx(f,{placeholder:"Search your agents...",value:v,onChange:s=>{ie(s.target.value)},className:"pl-9 h-9 bg-muted/20"})]}),e.jsx(d,{variant:"outline",size:"icon",className:"h-9 w-9 shrink-0",onClick:()=>{m(),L()},disabled:b,children:e.jsx(R,{className:`size-4 ${b?"animate-spin":""}`})}),e.jsxs(d,{size:"sm",onClick:()=>{p("compose")},children:[e.jsx(U,{className:"size-4 mr-1.5"})," New agent"]})]}),e.jsx(Re,{className:"h-[calc(100vh-32rem)] min-h-[16rem] pr-2",children:b?e.jsxs("div",{className:"flex flex-col items-center justify-center py-12 gap-3",children:[e.jsx(R,{className:"size-8 text-emerald-500 animate-spin"}),e.jsx("span",{className:"text-sm text-muted-foreground font-medium",children:"Querying the graph..."})]}):ge?e.jsx("div",{className:"text-center py-12",children:e.jsx(z,{what:"The Agent Library",className:"justify-center"})}):X.length===0?e.jsx("div",{className:"text-center py-12 text-muted-foreground text-sm",children:"No agents yet. Compose one, or register an external A2A agent."}):e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:X.map(s=>e.jsxs("div",{className:"p-4 rounded-xl border border-border/40 bg-muted/10 backdrop-blur-sm hover:border-emerald-500/30 transition-all flex flex-col justify-between",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between gap-2 mb-2",children:[e.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[s.kind==="a2a"?e.jsx(se,{className:"size-4 text-teal-400 shrink-0"}):e.jsx(ee,{className:"size-4 text-emerald-400 shrink-0"}),e.jsx("h4",{className:"font-bold text-sm text-foreground truncate",children:s.name})]}),e.jsx(o,{variant:"outline",className:`text-[10px] font-semibold shrink-0 ${s.kind==="a2a"?"bg-teal-500/10 border-teal-500/30 text-teal-400":"bg-emerald-500/10 border-emerald-500/30 text-emerald-400"}`,children:s.kind==="a2a"?"External · A2A":"Local"})]}),e.jsx("p",{className:"text-xs text-muted-foreground leading-normal line-clamp-3",children:s.description||"No description."}),s.mcp_server&&e.jsxs("div",{className:"text-[10px] text-muted-foreground mt-2",children:[e.jsx(ke,{className:"size-3 inline mr-1"}),"bound to ",e.jsx("code",{className:"font-mono",children:s.mcp_server})]})]}),e.jsxs("div",{className:"mt-4 flex items-center justify-between border-t border-border/30 pt-3",children:[e.jsxs("div",{className:"flex items-center gap-1 text-[10px] text-emerald-400 font-bold",children:[e.jsx(Se,{className:"size-3"}),s.runnable_bound===!1?"Prompt only":"Delegatable"]}),e.jsx("button",{onClick:()=>{Ne(s)},className:"p-1.5 rounded text-muted-foreground hover:text-red-400 hover:bg-red-500/10 transition-all","aria-label":`Archive ${s.name}`,children:e.jsx(Ee,{className:"size-3.5"})})]})]},s.id))})})]}),n==="compose"&&e.jsxs("div",{className:"max-w-2xl space-y-5",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Name"}),e.jsx(f,{value:c,onChange:s=>{k(s.target.value)},placeholder:"e.g. release-notes-writer",className:"mt-1 bg-muted/20"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Description"}),e.jsx(f,{value:J,onChange:s=>{S(s.target.value)},placeholder:"One line: what does this agent do for you?",className:"mt-1 bg-muted/20"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Instructions (its system prompt)"}),e.jsx(ae,{value:h,onChange:s=>{B(s.target.value)},placeholder:"You are a specialist that...",className:"mt-1 bg-muted/20 font-mono text-xs leading-relaxed",rows:8})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Bind an entire MCP server's tools (optional)"}),e.jsxs("select",{value:D,onChange:s=>{_(s.target.value),T(s.target.value||void 0)},className:"w-full h-9 mt-1 px-3 rounded-md border border-input bg-muted/20 text-xs",children:[e.jsx("option",{value:"",children:"— none —"}),fe.map(s=>e.jsx("option",{value:s,children:s},s))]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Preferred model (optional, advisory)"}),e.jsxs("select",{value:M,onChange:s=>{q(s.target.value)},className:"w-full h-9 mt-1 px-3 rounded-md border border-input bg-muted/20 text-xs",children:[e.jsx("option",{value:"",children:"— default —"}),i.chat_models.map(s=>e.jsxs("option",{value:s.id,children:[s.id," (",s.provider,")"]},s.id))]})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Or pick individual tools"}),e.jsx("div",{className:"mt-2 max-h-56 overflow-y-auto rounded-lg border border-border/20 bg-muted/5 p-2 space-y-1",children:xe?e.jsx("div",{className:"text-xs text-muted-foreground p-2",children:"Loading tools..."}):he?e.jsx("div",{className:"p-2",children:e.jsx(z,{what:"The tool catalog"})}):g.length===0?e.jsx("div",{className:"text-xs text-muted-foreground p-2",children:"No tools ingested yet for this filter — the agent can still run prompt-only."}):g.map(s=>e.jsxs("label",{className:"flex items-center gap-2 px-2 py-1.5 rounded hover:bg-muted/20 cursor-pointer",children:[e.jsx(_e,{checked:G.has(s.id),onCheckedChange:()=>{be(s.id)}}),e.jsx("span",{className:"text-xs font-mono",children:s.name}),s.mcp_server&&e.jsx("span",{className:"text-[10px] text-muted-foreground ml-auto",children:s.mcp_server})]},s.id))})]}),e.jsx(d,{onClick:()=>{je()},disabled:V||!c.trim()||!h.trim(),className:"bg-emerald-600 hover:bg-emerald-700",children:V?"Saving...":"Save agent to the Library"})]}),n==="external"&&e.jsxs("div",{className:"max-w-2xl space-y-5",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:"Register an outside agent that speaks the A2A protocol. Give its URL and, if it doesn't publish a discoverable agent card, paste the card JSON yourself."}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Agent URL"}),e.jsx(f,{value:u,onChange:s=>{H(s.target.value)},placeholder:"https://agent.example.com",className:"mt-1 bg-muted/20 font-mono text-xs"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Agent card JSON (optional — auto-fetched from the URL if left blank)"}),e.jsx(ae,{value:A,onChange:s=>{Q(s.target.value)},placeholder:'{"name": "...", "description": "...", "capabilities": []}',className:"mt-1 bg-muted/20 font-mono text-xs",rows:8})]}),e.jsx(d,{onClick:()=>{ye()},disabled:Z||!u.trim(),className:"bg-teal-600 hover:bg-teal-700",children:Z?"Registering...":"Register external agent"})]}),n==="config"&&e.jsx("div",{className:"space-y-6",children:pe?e.jsx("div",{className:"flex items-center justify-center py-12 gap-3",children:e.jsx(R,{className:"size-8 text-emerald-500 animate-spin"})}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-wrap gap-4 text-xs",children:[e.jsxs("div",{className:"rounded-md border border-border/30 bg-muted/10 px-3 py-2",children:[e.jsx("div",{className:"text-muted-foreground",children:"App profile"}),e.jsx("div",{className:"font-bold",children:i.app_profile||"—"})]}),e.jsxs("div",{className:"rounded-md border border-border/30 bg-muted/10 px-3 py-2",children:[e.jsx("div",{className:"text-muted-foreground",children:"Deployment profile"}),e.jsx("div",{className:"font-bold",children:i.deployment_profile||"—"})]})]}),w&&e.jsx(z,{what:"The model configuration summary"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground mb-2",children:"Chat models"}),w?null:i.chat_models.length===0?e.jsx("div",{className:"text-xs text-muted-foreground",children:"No chat models configured."}):e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:i.chat_models.map(s=>e.jsxs("div",{className:"p-3 rounded-lg border border-border/30 bg-muted/5 space-y-1.5",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"font-mono font-bold text-xs",children:s.id}),e.jsx(o,{variant:"outline",className:"text-[9px]",children:s.provider})]}),e.jsxs("div",{className:"flex flex-wrap gap-1",children:[s.intelligence_level&&e.jsx(o,{variant:"secondary",className:"text-[9px]",children:s.intelligence_level}),s.can_route&&e.jsx(o,{variant:"secondary",className:"text-[9px]",children:"router"}),s.can_kg&&e.jsx(o,{variant:"secondary",className:"text-[9px]",children:"kg"}),s.vision&&e.jsx(o,{variant:"secondary",className:"text-[9px]",children:"vision"}),s.reasoning&&e.jsx(o,{variant:"secondary",className:"text-[9px]",children:"reasoning"}),s.tools_enabled&&e.jsx(o,{variant:"secondary",className:"text-[9px]",children:"tools"})]}),s.context_window?e.jsxs("div",{className:"text-[10px] text-muted-foreground",children:[s.context_window.toLocaleString()," token context"]}):null]},s.id))})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground mb-2",children:"Embedding models"}),w?null:i.embedding_models.length===0?e.jsx("div",{className:"text-xs text-muted-foreground",children:"No embedding models configured."}):e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:i.embedding_models.map(s=>e.jsxs("div",{className:"p-3 rounded-lg border border-border/30 bg-muted/5 space-y-1",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"font-mono font-bold text-xs",children:s.id}),e.jsx(o,{variant:"outline",className:"text-[9px]",children:s.provider})]}),e.jsxs("div",{className:"text-[10px] text-muted-foreground",children:["chunk ",s.chunk_size??"—",s.context_window?` · ${s.context_window.toLocaleString()} token context`:""]})]},s.id))})]}),e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["Read-only view of the active ",e.jsx("code",{children:"AgentConfig"})," model registry. Secrets and provider credentials are never sent to the browser."]})]})})]})]})})}export{qe as default};
1
+ import{r as t,j as e,a as d,U as ee,V as se,z as te,B as o,y as Ce,I as f,W as ke,Y as Se,m as ae,Z as _e,t as r}from"./index-BnusqFjf.js";import{C as Ae,a as Le,b as Te,c as ze,d as Ue}from"./card-29-M2biw.js";import{S as Re}from"./scroll-area-6S6hb12a.js";import{U as z}from"./unavailable-notice-BQC05P73.js";import{E as re}from"./external-link-Cs_FRwqo.js";import{P as U}from"./plus-BDW6SPoV.js";import{R}from"./refresh-cw-CErjhfzP.js";import{T as Ee}from"./trash-2-DFCg7koa.js";import"./wifi-off-dBDwDwnn.js";function ne(n){window.history.pushState({},"",n),window.dispatchEvent(new Event("history-state-changed"))}function x(n){return Array.isArray(n)?n:[]}const E={app_profile:"",deployment_profile:"",chat_models:[],embedding_models:[]};function qe(){const[n,p]=t.useState("library"),[oe,le]=t.useState([]),[b,$]=t.useState(!0),[v,ie]=t.useState(""),[O,de]=t.useState([]),[ce,I]=t.useState(!0),[g,me]=t.useState([]),[xe,P]=t.useState(!1),[i,j]=t.useState(E),[pe,F]=t.useState(!0),[ge,N]=t.useState(!1),[he,y]=t.useState(!1),[w,C]=t.useState(!1),[c,k]=t.useState(""),[J,S]=t.useState(""),[h,B]=t.useState(""),[D,_]=t.useState(""),[M,q]=t.useState(""),[G,Y]=t.useState(new Set),[V,W]=t.useState(!1),[u,H]=t.useState(""),[A,Q]=t.useState(""),[Z,K]=t.useState(!1),m=async()=>{try{$(!0);const s=await fetch("/api/enhanced/agent-library/agents");if(!s.ok){r.error("Failed to load the Agent Library"),N(!0);return}le(x(await s.json())),N(!1)}catch{r.error("Failed to connect to the Agent Library"),N(!0)}finally{$(!1)}},L=async()=>{try{I(!0);const s=await fetch("/api/enhanced/agent-library/suggestions");if(!s.ok)return;de(x(await s.json()))}catch{}finally{I(!1)}},T=async s=>{try{P(!0);const a=s?`?mcp_server=${encodeURIComponent(s)}`:"",l=await fetch(`/api/enhanced/agent-library/tools${a}`);if(!l.ok){y(!0);return}me(x(await l.json())),y(!1)}catch{y(!0)}finally{P(!1)}},ue=async()=>{try{F(!0);const s=await fetch("/api/enhanced/agent-library/config-summary");if(!s.ok){j(E),C(!0);return}const a=await s.json();j({app_profile:a?.app_profile??"",deployment_profile:a?.deployment_profile??"",chat_models:x(a?.chat_models),embedding_models:x(a?.embedding_models)}),C(!1)}catch{j(E),C(!0)}finally{F(!1)}};t.useEffect(()=>{m(),L(),T(),ue()},[]);const fe=t.useMemo(()=>{const s=new Set;for(const a of g)a.mcp_server&&s.add(a.mcp_server);return Array.from(s).sort()},[g]),be=s=>{Y(a=>{const l=new Set(a);return l.has(s)?l.delete(s):l.add(s),l})},ve=s=>{p("compose"),_(s.mcp_server),k(a=>a||`${s.mcp_server} agent`),S(a=>a||`Uses the ${s.mcp_server} tools: ${s.sample_tools.join(", ")}.`),T(s.mcp_server),r.message(`Composing an agent for '${s.mcp_server}'`)},je=async()=>{if(!c.trim()||!h.trim()){r.error("Name and instructions are required");return}W(!0);try{const s=await fetch("/api/enhanced/agent-library/agents",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:c.trim(),description:J.trim(),instructions:h.trim(),bind_server:D||void 0,model_preference:M||void 0,tool_ids:Array.from(G)})});if(!s.ok){const a=await s.json().catch(()=>null);r.error(a?.detail??"Failed to compose the agent");return}r.success(`Agent '${c.trim()}' saved and ready to delegate to`),k(""),S(""),B(""),_(""),q(""),Y(new Set),p("library"),m(),L()}catch{r.error("Network error composing the agent")}finally{W(!1)}},Ne=async s=>{try{if(!(await fetch(`/api/enhanced/agent-library/agents/${encodeURIComponent(s.id)}`,{method:"DELETE"})).ok){r.error("Failed to archive that agent");return}r.success(`Archived '${s.name}'`),m()}catch{r.error("Network error archiving the agent")}},ye=async()=>{if(!u.trim()){r.error("An agent URL is required");return}let s;if(A.trim())try{s=JSON.parse(A)}catch{r.error("The pasted agent card is not valid JSON");return}K(!0);try{const a=await fetch("/api/enhanced/agent-library/a2a",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:u.trim(),agent_card:s})});if(!a.ok){const l=await a.json().catch(()=>null);r.error(l?.detail??"Failed to register that agent");return}r.success("External agent registered"),H(""),Q(""),m()}catch{r.error("Network error registering the external agent")}finally{K(!1)}},X=oe.filter(s=>s.name.toLowerCase().includes(v.toLowerCase())||s.description.toLowerCase().includes(v.toLowerCase())),we=[{id:"library",label:"Library",icon:ee},{id:"compose",label:"Compose an Agent",icon:U},{id:"external",label:"External Agents",icon:se},{id:"config",label:"Model & Config",icon:te}];return e.jsx("div",{className:"space-y-6",children:e.jsxs(Ae,{className:"border-border/40 bg-card/60 backdrop-blur-md",children:[e.jsxs(Le,{children:[e.jsxs("div",{className:"flex flex-col md:flex-row justify-between items-start md:items-center gap-4",children:[e.jsxs("div",{children:[e.jsx(Te,{className:"text-2xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-teal-400 via-emerald-400 to-green-500",children:"Agent Library"}),e.jsx(ze,{children:"Compose agents from prompts and tools you already have, register outside A2A agents, and call on any of them whenever you need — stored in the knowledge graph, not your browser."})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(d,{variant:"outline",size:"sm",onClick:()=>{ne("/prompts")},children:["Prompts Registry ",e.jsx(re,{className:"size-3.5 ml-1.5"})]}),e.jsxs(d,{variant:"outline",size:"sm",onClick:()=>{ne("/skills")},children:["Tools & Skills ",e.jsx(re,{className:"size-3.5 ml-1.5"})]})]})]}),e.jsx("div",{className:"flex flex-wrap gap-2 mt-4 border-b border-border/40 pb-2",children:we.map(s=>e.jsxs("button",{onClick:()=>{p(s.id)},className:`flex items-center gap-2 px-3 py-1.5 rounded-md text-xs font-semibold transition-all border ${n===s.id?"bg-emerald-500/10 border-emerald-500/30 text-emerald-400 font-bold":"bg-transparent border-transparent text-muted-foreground hover:text-foreground"}`,children:[e.jsx(s.icon,{className:"size-3.5"}),e.jsx("span",{children:s.label})]},s.id))})]}),e.jsxs(Ue,{children:[n==="library"&&e.jsxs("div",{className:"space-y-6",children:[!ce&&O.length>0&&e.jsxs("div",{className:"space-y-3",children:[e.jsxs("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5",children:[e.jsx(te,{className:"size-3.5 text-emerald-400"})," Suggested, from what is installed"]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:O.slice(0,6).map(s=>e.jsxs("div",{className:"p-3.5 rounded-lg border border-emerald-500/20 bg-emerald-500/5 flex flex-col gap-2",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"font-bold text-sm text-foreground",children:s.mcp_server}),e.jsxs(o,{variant:"secondary",className:"text-[10px]",children:[s.tool_count," tool",s.tool_count===1?"":"s"]})]}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:s.reason}),e.jsxs(d,{size:"sm",variant:"outline",className:"self-start h-7 text-xs",onClick:()=>{ve(s)},children:[e.jsx(U,{className:"size-3.5 mr-1"})," Build this agent"]})]},s.mcp_server))})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(Ce,{className:"absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground"}),e.jsx(f,{placeholder:"Search your agents...",value:v,onChange:s=>{ie(s.target.value)},className:"pl-9 h-9 bg-muted/20"})]}),e.jsx(d,{variant:"outline",size:"icon",className:"h-9 w-9 shrink-0",onClick:()=>{m(),L()},disabled:b,children:e.jsx(R,{className:`size-4 ${b?"animate-spin":""}`})}),e.jsxs(d,{size:"sm",onClick:()=>{p("compose")},children:[e.jsx(U,{className:"size-4 mr-1.5"})," New agent"]})]}),e.jsx(Re,{className:"h-[calc(100vh-32rem)] min-h-[16rem] pr-2",children:b?e.jsxs("div",{className:"flex flex-col items-center justify-center py-12 gap-3",children:[e.jsx(R,{className:"size-8 text-emerald-500 animate-spin"}),e.jsx("span",{className:"text-sm text-muted-foreground font-medium",children:"Querying the graph..."})]}):ge?e.jsx("div",{className:"text-center py-12",children:e.jsx(z,{what:"The Agent Library",className:"justify-center"})}):X.length===0?e.jsx("div",{className:"text-center py-12 text-muted-foreground text-sm",children:"No agents yet. Compose one, or register an external A2A agent."}):e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:X.map(s=>e.jsxs("div",{className:"p-4 rounded-xl border border-border/40 bg-muted/10 backdrop-blur-sm hover:border-emerald-500/30 transition-all flex flex-col justify-between",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between gap-2 mb-2",children:[e.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[s.kind==="a2a"?e.jsx(se,{className:"size-4 text-teal-400 shrink-0"}):e.jsx(ee,{className:"size-4 text-emerald-400 shrink-0"}),e.jsx("h4",{className:"font-bold text-sm text-foreground truncate",children:s.name})]}),e.jsx(o,{variant:"outline",className:`text-[10px] font-semibold shrink-0 ${s.kind==="a2a"?"bg-teal-500/10 border-teal-500/30 text-teal-400":"bg-emerald-500/10 border-emerald-500/30 text-emerald-400"}`,children:s.kind==="a2a"?"External · A2A":"Local"})]}),e.jsx("p",{className:"text-xs text-muted-foreground leading-normal line-clamp-3",children:s.description||"No description."}),s.mcp_server&&e.jsxs("div",{className:"text-[10px] text-muted-foreground mt-2",children:[e.jsx(ke,{className:"size-3 inline mr-1"}),"bound to ",e.jsx("code",{className:"font-mono",children:s.mcp_server})]})]}),e.jsxs("div",{className:"mt-4 flex items-center justify-between border-t border-border/30 pt-3",children:[e.jsxs("div",{className:"flex items-center gap-1 text-[10px] text-emerald-400 font-bold",children:[e.jsx(Se,{className:"size-3"}),s.runnable_bound===!1?"Prompt only":"Delegatable"]}),e.jsx("button",{onClick:()=>{Ne(s)},className:"p-1.5 rounded text-muted-foreground hover:text-red-400 hover:bg-red-500/10 transition-all","aria-label":`Archive ${s.name}`,children:e.jsx(Ee,{className:"size-3.5"})})]})]},s.id))})})]}),n==="compose"&&e.jsxs("div",{className:"max-w-2xl space-y-5",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Name"}),e.jsx(f,{value:c,onChange:s=>{k(s.target.value)},placeholder:"e.g. release-notes-writer",className:"mt-1 bg-muted/20"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Description"}),e.jsx(f,{value:J,onChange:s=>{S(s.target.value)},placeholder:"One line: what does this agent do for you?",className:"mt-1 bg-muted/20"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Instructions (its system prompt)"}),e.jsx(ae,{value:h,onChange:s=>{B(s.target.value)},placeholder:"You are a specialist that...",className:"mt-1 bg-muted/20 font-mono text-xs leading-relaxed",rows:8})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Bind an entire MCP server's tools (optional)"}),e.jsxs("select",{value:D,onChange:s=>{_(s.target.value),T(s.target.value||void 0)},className:"w-full h-9 mt-1 px-3 rounded-md border border-input bg-muted/20 text-xs",children:[e.jsx("option",{value:"",children:"— none —"}),fe.map(s=>e.jsx("option",{value:s,children:s},s))]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Preferred model (optional, advisory)"}),e.jsxs("select",{value:M,onChange:s=>{q(s.target.value)},className:"w-full h-9 mt-1 px-3 rounded-md border border-input bg-muted/20 text-xs",children:[e.jsx("option",{value:"",children:"— default —"}),i.chat_models.map(s=>e.jsxs("option",{value:s.id,children:[s.id," (",s.provider,")"]},s.id))]})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Or pick individual tools"}),e.jsx("div",{className:"mt-2 max-h-56 overflow-y-auto rounded-lg border border-border/20 bg-muted/5 p-2 space-y-1",children:xe?e.jsx("div",{className:"text-xs text-muted-foreground p-2",children:"Loading tools..."}):he?e.jsx("div",{className:"p-2",children:e.jsx(z,{what:"The tool catalog"})}):g.length===0?e.jsx("div",{className:"text-xs text-muted-foreground p-2",children:"No tools ingested yet for this filter — the agent can still run prompt-only."}):g.map(s=>e.jsxs("label",{className:"flex items-center gap-2 px-2 py-1.5 rounded hover:bg-muted/20 cursor-pointer",children:[e.jsx(_e,{checked:G.has(s.id),onCheckedChange:()=>{be(s.id)}}),e.jsx("span",{className:"text-xs font-mono",children:s.name}),s.mcp_server&&e.jsx("span",{className:"text-[10px] text-muted-foreground ml-auto",children:s.mcp_server})]},s.id))})]}),e.jsx(d,{onClick:()=>{je()},disabled:V||!c.trim()||!h.trim(),className:"bg-emerald-600 hover:bg-emerald-700",children:V?"Saving...":"Save agent to the Library"})]}),n==="external"&&e.jsxs("div",{className:"max-w-2xl space-y-5",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:"Register an outside agent that speaks the A2A protocol. Give its URL and, if it doesn't publish a discoverable agent card, paste the card JSON yourself."}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Agent URL"}),e.jsx(f,{value:u,onChange:s=>{H(s.target.value)},placeholder:"https://agent.example.com",className:"mt-1 bg-muted/20 font-mono text-xs"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Agent card JSON (optional — auto-fetched from the URL if left blank)"}),e.jsx(ae,{value:A,onChange:s=>{Q(s.target.value)},placeholder:'{"name": "...", "description": "...", "capabilities": []}',className:"mt-1 bg-muted/20 font-mono text-xs",rows:8})]}),e.jsx(d,{onClick:()=>{ye()},disabled:Z||!u.trim(),className:"bg-teal-600 hover:bg-teal-700",children:Z?"Registering...":"Register external agent"})]}),n==="config"&&e.jsx("div",{className:"space-y-6",children:pe?e.jsx("div",{className:"flex items-center justify-center py-12 gap-3",children:e.jsx(R,{className:"size-8 text-emerald-500 animate-spin"})}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-wrap gap-4 text-xs",children:[e.jsxs("div",{className:"rounded-md border border-border/30 bg-muted/10 px-3 py-2",children:[e.jsx("div",{className:"text-muted-foreground",children:"App profile"}),e.jsx("div",{className:"font-bold",children:i.app_profile||"—"})]}),e.jsxs("div",{className:"rounded-md border border-border/30 bg-muted/10 px-3 py-2",children:[e.jsx("div",{className:"text-muted-foreground",children:"Deployment profile"}),e.jsx("div",{className:"font-bold",children:i.deployment_profile||"—"})]})]}),w&&e.jsx(z,{what:"The model configuration summary"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground mb-2",children:"Chat models"}),w?null:i.chat_models.length===0?e.jsx("div",{className:"text-xs text-muted-foreground",children:"No chat models configured."}):e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:i.chat_models.map(s=>e.jsxs("div",{className:"p-3 rounded-lg border border-border/30 bg-muted/5 space-y-1.5",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"font-mono font-bold text-xs",children:s.id}),e.jsx(o,{variant:"outline",className:"text-[9px]",children:s.provider})]}),e.jsxs("div",{className:"flex flex-wrap gap-1",children:[s.intelligence_level&&e.jsx(o,{variant:"secondary",className:"text-[9px]",children:s.intelligence_level}),s.can_route&&e.jsx(o,{variant:"secondary",className:"text-[9px]",children:"router"}),s.can_kg&&e.jsx(o,{variant:"secondary",className:"text-[9px]",children:"kg"}),s.vision&&e.jsx(o,{variant:"secondary",className:"text-[9px]",children:"vision"}),s.reasoning&&e.jsx(o,{variant:"secondary",className:"text-[9px]",children:"reasoning"}),s.tools_enabled&&e.jsx(o,{variant:"secondary",className:"text-[9px]",children:"tools"})]}),s.context_window?e.jsxs("div",{className:"text-[10px] text-muted-foreground",children:[s.context_window.toLocaleString()," token context"]}):null]},s.id))})]}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground mb-2",children:"Embedding models"}),w?null:i.embedding_models.length===0?e.jsx("div",{className:"text-xs text-muted-foreground",children:"No embedding models configured."}):e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:i.embedding_models.map(s=>e.jsxs("div",{className:"p-3 rounded-lg border border-border/30 bg-muted/5 space-y-1",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"font-mono font-bold text-xs",children:s.id}),e.jsx(o,{variant:"outline",className:"text-[9px]",children:s.provider})]}),e.jsxs("div",{className:"text-[10px] text-muted-foreground",children:["chunk ",s.chunk_size??"—",s.context_window?` · ${s.context_window.toLocaleString()} token context`:""]})]},s.id))})]}),e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["Read-only view of the active ",e.jsx("code",{children:"AgentConfig"})," model registry. Secrets and provider credentials are never sent to the browser."]})]})})]})]})})}export{qe as default};
@@ -1 +1 @@
1
- import{r as l,j as e,a8 as L,a as T,a9 as R,B as $,I,m as J,L as O,n as q,t as d}from"./index-oJW-_XBm.js";import{C as u,a as x,b as h,c as f,d as b}from"./card-B8Y9xTh8.js";import{g as B}from"./gateway-CigIg5Ky.js";import{R as D}from"./refresh-cw-DW_113QE.js";async function g(a,r={}){const i=await B("/broker",{action:a,...r});return i.ok||!i.unavailable?i:B("/bus",{action:a,...r})}function j(a,r=""){return typeof a=="string"?a:typeof a=="number"||typeof a=="boolean"?String(a):r}function H(a){if(!a||typeof a!="object")return[];const r=a;return(Array.isArray(r)?r:r.topics??r.queues??[]).map(t=>{if(typeof t=="string")return{name:t};const n=t??{};return{name:j(n.name)||j(n.topic)||j(n.id,"topic"),depth:typeof n.depth=="number"?n.depth:typeof n.pending=="number"?n.pending:void 0,consumers:typeof n.consumers=="number"?n.consumers:void 0,subscribers:typeof n.subscribers=="number"?n.subscribers:void 0}})}function U(a){if(!a||typeof a!="object")return[];const r=a;return(Array.isArray(r)?r:r.messages??[]).map(t=>({id:typeof t.id=="string"?t.id:void 0,topic:typeof t.topic=="string"?t.topic:void 0,payload:t.payload??t.body??t.content,sender:typeof t.sender=="string"?t.sender:typeof t.from=="string"?t.from:void 0,timestamp:typeof t.timestamp=="number"||typeof t.timestamp=="string"?t.timestamp:void 0}))}function K(){const[a,r]=l.useState([]),[i,t]=l.useState(null),[n,y]=l.useState([]),[v,N]=l.useState(!1),[z,A]=l.useState(!1),[k,M]=l.useState(""),[c,w]=l.useState(""),[S,C]=l.useState(!1),p=async()=>{N(!0);const s=await g("topics");if(A(s.unavailable),s.ok){const o=H(s.data);r(o),!i&&o[0]&&t(o[0].name)}else r([]);N(!1)},P=async s=>{const o=await g("messages",{topic:s,limit:25});o.ok?y(U(o.data)):y([])};l.useEffect(()=>{p()},[]),l.useEffect(()=>{i&&P(i)},[i]);const E=async()=>{const s=k.trim()||i;if(!s){d.warning("Choose or enter a topic to publish to.");return}C(!0);let o=c;try{o=JSON.parse(c)}catch{}const m=await g("publish",{topic:s,payload:o});m.ok?(d.success(`Published to ${s}`),w(""),s===i&&P(s),p()):m.unavailable?d.error("Broker route not activated on this backend."):d.error(`Publish failed: ${m.error??"unknown error"}`),C(!1)};return e.jsxs("div",{className:"space-y-6","data-testid":"broker-view",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[e.jsx(L,{className:"size-6"}),"Message Broker"]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"Topics, queue depth, and message flow over the agent bus."})]}),e.jsxs(T,{variant:"outline",size:"sm",onClick:()=>{p()},disabled:v,children:[e.jsx(D,{className:v?"size-4 animate-spin":"size-4"}),e.jsx("span",{className:"ml-2",children:"Refresh"})]})]}),z&&e.jsxs("div",{className:"rounded-md border border-amber-500/50 bg-amber-50/50 dark:bg-amber-500/10 p-3 flex items-start gap-2 text-sm",children:[e.jsx(R,{className:"size-4 mt-0.5 shrink-0 text-amber-600 dark:text-amber-400"}),e.jsxs("p",{className:"text-muted-foreground",children:["Neither ",e.jsx("span",{className:"font-mono",children:"/graph/broker"})," nor ",e.jsx("span",{className:"font-mono",children:"/graph/bus"})," ","is serving on this backend yet."]})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-[18rem_1fr] gap-6",children:[e.jsxs(u,{className:"h-fit",children:[e.jsxs(x,{children:[e.jsx(h,{className:"text-base",children:"Topics"}),e.jsxs(f,{children:[a.length," topic(s)"]})]}),e.jsx(b,{children:a.length===0?e.jsx("p",{className:"text-muted-foreground text-sm",children:"No topics reported."}):e.jsx("div",{className:"space-y-1",children:a.map(s=>e.jsxs("button",{type:"button",onClick:()=>{t(s.name)},className:"w-full text-left rounded border p-2 hover:bg-muted/50 transition-colors "+(s.name===i?"bg-accent":""),children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"truncate font-mono text-xs",children:s.name}),s.depth!==void 0&&e.jsx($,{variant:"outline",children:s.depth})]}),(s.consumers!==void 0||s.subscribers!==void 0)&&e.jsxs("span",{className:"text-xs text-muted-foreground",children:[s.consumers??s.subscribers," consumer(s)"]})]},s.name))})})]}),e.jsxs("div",{className:"space-y-6",children:[e.jsxs(u,{children:[e.jsxs(x,{children:[e.jsxs(h,{className:"text-base",children:["Messages",i?` · ${i}`:""]}),e.jsxs(f,{children:[n.length," recent message(s)"]})]}),e.jsx(b,{children:n.length===0?e.jsx("p",{className:"text-muted-foreground text-sm",children:"No messages."}):e.jsx("div",{className:"space-y-2",children:n.map((s,o)=>e.jsxs("div",{className:"rounded border p-2 text-sm",children:[e.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground mb-1",children:[e.jsx("span",{children:s.sender??"unknown"}),e.jsx("span",{children:s.timestamp?new Date(s.timestamp).toLocaleString():""})]}),e.jsx("pre",{className:"font-mono text-xs whitespace-pre-wrap break-words",children:typeof s.payload=="string"?s.payload:JSON.stringify(s.payload,null,2)})]},s.id??`msg-${String(o)}`))})})]}),e.jsxs(u,{children:[e.jsxs(x,{children:[e.jsx(h,{className:"text-base",children:"Publish"}),e.jsx(f,{children:"Send a test message (JSON or raw string)."})]}),e.jsxs(b,{className:"space-y-3",children:[e.jsx(I,{"aria-label":"Publish topic",placeholder:i??"topic",value:k,onChange:s=>{M(s.target.value)}}),e.jsx(J,{"aria-label":"Publish body",placeholder:'{"hello": "world"}',value:c,onChange:s=>{w(s.target.value)},rows:3,className:"font-mono text-sm"}),e.jsx("div",{className:"flex justify-end",children:e.jsxs(T,{onClick:()=>{E()},disabled:S||!c.trim(),children:[S?e.jsx(O,{className:"size-4 mr-2 animate-spin"}):e.jsx(q,{className:"size-4 mr-2"}),"Publish"]})})]})]})]})]})]})}export{K as default};
1
+ import{r as l,j as e,a8 as L,a as T,a9 as R,B as $,I,m as J,L as O,n as q,t as d}from"./index-BnusqFjf.js";import{C as u,a as x,b as h,c as f,d as b}from"./card-29-M2biw.js";import{g as B}from"./gateway-CgeA_tnH.js";import{R as D}from"./refresh-cw-CErjhfzP.js";async function g(a,r={}){const i=await B("/broker",{action:a,...r});return i.ok||!i.unavailable?i:B("/bus",{action:a,...r})}function j(a,r=""){return typeof a=="string"?a:typeof a=="number"||typeof a=="boolean"?String(a):r}function H(a){if(!a||typeof a!="object")return[];const r=a;return(Array.isArray(r)?r:r.topics??r.queues??[]).map(t=>{if(typeof t=="string")return{name:t};const n=t??{};return{name:j(n.name)||j(n.topic)||j(n.id,"topic"),depth:typeof n.depth=="number"?n.depth:typeof n.pending=="number"?n.pending:void 0,consumers:typeof n.consumers=="number"?n.consumers:void 0,subscribers:typeof n.subscribers=="number"?n.subscribers:void 0}})}function U(a){if(!a||typeof a!="object")return[];const r=a;return(Array.isArray(r)?r:r.messages??[]).map(t=>({id:typeof t.id=="string"?t.id:void 0,topic:typeof t.topic=="string"?t.topic:void 0,payload:t.payload??t.body??t.content,sender:typeof t.sender=="string"?t.sender:typeof t.from=="string"?t.from:void 0,timestamp:typeof t.timestamp=="number"||typeof t.timestamp=="string"?t.timestamp:void 0}))}function K(){const[a,r]=l.useState([]),[i,t]=l.useState(null),[n,y]=l.useState([]),[v,N]=l.useState(!1),[z,A]=l.useState(!1),[k,M]=l.useState(""),[c,w]=l.useState(""),[S,C]=l.useState(!1),p=async()=>{N(!0);const s=await g("topics");if(A(s.unavailable),s.ok){const o=H(s.data);r(o),!i&&o[0]&&t(o[0].name)}else r([]);N(!1)},P=async s=>{const o=await g("messages",{topic:s,limit:25});o.ok?y(U(o.data)):y([])};l.useEffect(()=>{p()},[]),l.useEffect(()=>{i&&P(i)},[i]);const E=async()=>{const s=k.trim()||i;if(!s){d.warning("Choose or enter a topic to publish to.");return}C(!0);let o=c;try{o=JSON.parse(c)}catch{}const m=await g("publish",{topic:s,payload:o});m.ok?(d.success(`Published to ${s}`),w(""),s===i&&P(s),p()):m.unavailable?d.error("Broker route not activated on this backend."):d.error(`Publish failed: ${m.error??"unknown error"}`),C(!1)};return e.jsxs("div",{className:"space-y-6","data-testid":"broker-view",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[e.jsx(L,{className:"size-6"}),"Message Broker"]}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"Topics, queue depth, and message flow over the agent bus."})]}),e.jsxs(T,{variant:"outline",size:"sm",onClick:()=>{p()},disabled:v,children:[e.jsx(D,{className:v?"size-4 animate-spin":"size-4"}),e.jsx("span",{className:"ml-2",children:"Refresh"})]})]}),z&&e.jsxs("div",{className:"rounded-md border border-amber-500/50 bg-amber-50/50 dark:bg-amber-500/10 p-3 flex items-start gap-2 text-sm",children:[e.jsx(R,{className:"size-4 mt-0.5 shrink-0 text-amber-600 dark:text-amber-400"}),e.jsxs("p",{className:"text-muted-foreground",children:["Neither ",e.jsx("span",{className:"font-mono",children:"/graph/broker"})," nor ",e.jsx("span",{className:"font-mono",children:"/graph/bus"})," ","is serving on this backend yet."]})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-[18rem_1fr] gap-6",children:[e.jsxs(u,{className:"h-fit",children:[e.jsxs(x,{children:[e.jsx(h,{className:"text-base",children:"Topics"}),e.jsxs(f,{children:[a.length," topic(s)"]})]}),e.jsx(b,{children:a.length===0?e.jsx("p",{className:"text-muted-foreground text-sm",children:"No topics reported."}):e.jsx("div",{className:"space-y-1",children:a.map(s=>e.jsxs("button",{type:"button",onClick:()=>{t(s.name)},className:"w-full text-left rounded border p-2 hover:bg-muted/50 transition-colors "+(s.name===i?"bg-accent":""),children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"truncate font-mono text-xs",children:s.name}),s.depth!==void 0&&e.jsx($,{variant:"outline",children:s.depth})]}),(s.consumers!==void 0||s.subscribers!==void 0)&&e.jsxs("span",{className:"text-xs text-muted-foreground",children:[s.consumers??s.subscribers," consumer(s)"]})]},s.name))})})]}),e.jsxs("div",{className:"space-y-6",children:[e.jsxs(u,{children:[e.jsxs(x,{children:[e.jsxs(h,{className:"text-base",children:["Messages",i?` · ${i}`:""]}),e.jsxs(f,{children:[n.length," recent message(s)"]})]}),e.jsx(b,{children:n.length===0?e.jsx("p",{className:"text-muted-foreground text-sm",children:"No messages."}):e.jsx("div",{className:"space-y-2",children:n.map((s,o)=>e.jsxs("div",{className:"rounded border p-2 text-sm",children:[e.jsxs("div",{className:"flex items-center justify-between text-xs text-muted-foreground mb-1",children:[e.jsx("span",{children:s.sender??"unknown"}),e.jsx("span",{children:s.timestamp?new Date(s.timestamp).toLocaleString():""})]}),e.jsx("pre",{className:"font-mono text-xs whitespace-pre-wrap break-words",children:typeof s.payload=="string"?s.payload:JSON.stringify(s.payload,null,2)})]},s.id??`msg-${String(o)}`))})})]}),e.jsxs(u,{children:[e.jsxs(x,{children:[e.jsx(h,{className:"text-base",children:"Publish"}),e.jsx(f,{children:"Send a test message (JSON or raw string)."})]}),e.jsxs(b,{className:"space-y-3",children:[e.jsx(I,{"aria-label":"Publish topic",placeholder:i??"topic",value:k,onChange:s=>{M(s.target.value)}}),e.jsx(J,{"aria-label":"Publish body",placeholder:'{"hello": "world"}',value:c,onChange:s=>{w(s.target.value)},rows:3,className:"font-mono text-sm"}),e.jsx("div",{className:"flex justify-end",children:e.jsxs(T,{onClick:()=>{E()},disabled:S||!c.trim(),children:[S?e.jsx(O,{className:"size-4 mr-2 animate-spin"}):e.jsx(q,{className:"size-4 mr-2"}),"Publish"]})})]})]})]})]})]})}export{K as default};