agent-webui 2.7.0__tar.gz → 2.8.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 (286) hide show
  1. {agent_webui-2.7.0 → agent_webui-2.8.0}/PKG-INFO +24 -19
  2. {agent_webui-2.7.0 → agent_webui-2.8.0}/README.md +19 -17
  3. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/__tests__/test_browser_control.py +8 -8
  4. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/__tests__/test_oidc_session.py +11 -11
  5. agent_webui-2.8.0/agent/agent_webui/__tests__/test_run_identity.py +218 -0
  6. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/__tests__/test_security_boundaries.py +1 -1
  7. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/__tests__/test_served_operations.py +27 -27
  8. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/api_extensions.py +16 -20
  9. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/apps/__init__.py +2 -2
  10. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/apps/markets/router.py +2 -3
  11. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/browser_control.py +11 -11
  12. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/contact_delivery.py +1 -1
  13. agent_webui-2.8.0/agent/agent_webui/dist/assets/AdminView-CLxZUrrN.js +1 -0
  14. agent_webui-2.7.0/agent/agent_webui/dist/assets/AgentLibraryView-Ag9Aojn6.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/AgentLibraryView-CZyRIfU4.js +1 -1
  15. agent_webui-2.8.0/agent/agent_webui/dist/assets/ArboraReadinessView-BTsg6Fpb.js +1 -0
  16. agent_webui-2.8.0/agent/agent_webui/dist/assets/AtlasView-BtiImHa3.js +5 -0
  17. agent_webui-2.7.0/agent/agent_webui/dist/assets/Availability-yN_kuNzm.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/Availability-BrYyobNN.js +1 -1
  18. agent_webui-2.8.0/agent/agent_webui/dist/assets/BrokerView-BNol9w6Q.js +1 -0
  19. agent_webui-2.7.0/agent/agent_webui/dist/assets/CatalogueView-shPPzvnU.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/CatalogueView-CB5KV7m6.js +1 -1
  20. agent_webui-2.8.0/agent/agent_webui/dist/assets/ChartPage-C6n1i1q1.js +1 -0
  21. agent_webui-2.7.0/agent/agent_webui/dist/assets/CodeGraphView-CS0svpOR.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/CodeGraphView-0XqAlYvs.js +1 -1
  22. agent_webui-2.7.0/agent/agent_webui/dist/assets/ConfigurationView-CDjgXtn3.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/ConfigurationView-Ct3GcuZX.js +1 -1
  23. agent_webui-2.7.0/agent/agent_webui/dist/assets/ConsoleConfirmView-Ckzd9Jw9.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/ConsoleConfirmView-I58gtaRX.js +1 -1
  24. agent_webui-2.7.0/agent/agent_webui/dist/assets/ContactPage-Dm-6oGO-.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/ContactPage-Df5Nf_M6.js +1 -1
  25. agent_webui-2.8.0/agent/agent_webui/dist/assets/CypherReplView-B90s64iv.js +1 -0
  26. agent_webui-2.8.0/agent/agent_webui/dist/assets/DashboardView-Bq821GJ3.js +1 -0
  27. agent_webui-2.8.0/agent/agent_webui/dist/assets/DashboardsView-Cawhi2Ib.js +1 -0
  28. agent_webui-2.7.0/agent/agent_webui/dist/assets/DataAnalystView-Dr2XzApI.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/DataAnalystView-B5w5WNFe.js +1 -1
  29. agent_webui-2.8.0/agent/agent_webui/dist/assets/EcosystemView-Bkg8UWAG.js +1 -0
  30. agent_webui-2.8.0/agent/agent_webui/dist/assets/ExploreQueryWorkspace-LtdPd2d7.js +1 -0
  31. agent_webui-2.7.0/agent/agent_webui/dist/assets/ExtractionView-BxmIMrKZ.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/ExtractionView-4djMtTbg.js +1 -1
  32. agent_webui-2.8.0/agent/agent_webui/dist/assets/FilesView-ZDVKqWlc.js +1 -0
  33. agent_webui-2.7.0/agent/agent_webui/dist/assets/FleetView-DxlUh1er.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/FleetView-CEVui43g.js +1 -1
  34. agent_webui-2.7.0/agent/agent_webui/dist/assets/GoalsView-BVpEoIAk.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/GoalsView-DR5C4EET.js +1 -1
  35. agent_webui-2.8.0/agent/agent_webui/dist/assets/Graph3DLodView-BiX8STys.js +1 -0
  36. agent_webui-2.7.0/agent/agent_webui/dist/assets/Graph3DView-CHkQLlqf.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/Graph3DView-DUg2qkja.js +1 -1
  37. agent_webui-2.8.0/agent/agent_webui/dist/assets/GraphCanvas-D5Tfn0o0.js +1 -0
  38. agent_webui-2.8.0/agent/agent_webui/dist/assets/GraphView-CGxazgvr.js +1 -0
  39. agent_webui-2.7.0/agent/agent_webui/dist/assets/ImportExportModal-8VUb-C_9.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/ImportExportModal-B47Vn5vL.js +1 -1
  40. agent_webui-2.8.0/agent/agent_webui/dist/assets/IntegrationsView-D5NB1qHT.js +2 -0
  41. agent_webui-2.7.0/agent/agent_webui/dist/assets/KnowledgeBaseView-BlW_kxs9.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/KnowledgeBaseView-NCg2M6dz.js +1 -1
  42. agent_webui-2.8.0/agent/agent_webui/dist/assets/KnowledgeView-DPWInTRP.js +1 -0
  43. agent_webui-2.8.0/agent/agent_webui/dist/assets/LLMTemplatesView-CiZKNyGY.js +1 -0
  44. agent_webui-2.7.0/agent/agent_webui/dist/assets/LearnView-D3j-JxlJ.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/LearnView-C41QyeM6.js +2 -2
  45. agent_webui-2.8.0/agent/agent_webui/dist/assets/LiveDashboardsView-DV3ftpBl.js +1 -0
  46. agent_webui-2.7.0/agent/agent_webui/dist/assets/MagmaView-DRoXXXku.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/MagmaView-LyoA2b3c.js +1 -1
  47. agent_webui-2.7.0/agent/agent_webui/dist/assets/MarketsCalendar-6QKahzMR.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/MarketsCalendar-m2jwkM8j.js +1 -1
  48. agent_webui-2.7.0/agent/agent_webui/dist/assets/MarketsHome-D_yfCf8S.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/MarketsHome-Dp_RXeiT.js +1 -1
  49. agent_webui-2.7.0/agent/agent_webui/dist/assets/MarketsMenu-W9BPQY9z.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/MarketsMenu-hS7CIyA5.js +1 -1
  50. agent_webui-2.7.0/agent/agent_webui/dist/assets/MarketsNews-BUSn6A_z.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/MarketsNews-D_aOZixQ.js +1 -1
  51. agent_webui-2.7.0/agent/agent_webui/dist/assets/MarketsPortfolio-B1n7zsFf.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/MarketsPortfolio-C2wiw20j.js +1 -1
  52. agent_webui-2.7.0/agent/agent_webui/dist/assets/MarketsShell-9oj-VJzp.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/MarketsShell-Zc2AkZJr.js +1 -1
  53. agent_webui-2.7.0/agent/agent_webui/dist/assets/McpAppsView-Dix46AWV.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/McpAppsView-DKdvG0_N.js +1 -1
  54. agent_webui-2.8.0/agent/agent_webui/dist/assets/MemoryView-Chrf2JTU.js +1 -0
  55. agent_webui-2.7.0/agent/agent_webui/dist/assets/NodeTypeBreakdown-Y3fOgxdQ.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/NodeTypeBreakdown-Bhew4z65.js +1 -1
  56. agent_webui-2.8.0/agent/agent_webui/dist/assets/NotFoundPage-CHybKkb0.js +1 -0
  57. agent_webui-2.7.0/agent/agent_webui/dist/assets/Notices-sQ0Ua11R.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/Notices-3oonQvay.js +1 -1
  58. agent_webui-2.8.0/agent/agent_webui/dist/assets/ObjectExplorerView-CNfy-XSe.js +1 -0
  59. agent_webui-2.7.0/agent/agent_webui/dist/assets/ObjectView-BRD__NZN.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/ObjectView-BG5s55p1.js +1 -1
  60. agent_webui-2.8.0/agent/agent_webui/dist/assets/ObservabilityView-CUoyLm-2.js +1 -0
  61. agent_webui-2.8.0/agent/agent_webui/dist/assets/OperateWorkspace-dpSRUomJ.js +1 -0
  62. agent_webui-2.8.0/agent/agent_webui/dist/assets/OpsPanelView-BxpmxYT-.js +1 -0
  63. agent_webui-2.8.0/agent/agent_webui/dist/assets/PrivacyPage-ChMvnVOD.js +1 -0
  64. agent_webui-2.8.0/agent/agent_webui/dist/assets/PromptsView-FmBCUric.js +1 -0
  65. agent_webui-2.7.0/agent/agent_webui/dist/assets/PublicPageLayout-CHk4A2yh.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/PublicPageLayout-BciWikRQ.js +1 -1
  66. agent_webui-2.7.0/agent/agent_webui/dist/assets/SDDView-BMi6ZQhI.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/SDDView-DQZMtOwV.js +1 -1
  67. agent_webui-2.7.0/agent/agent_webui/dist/assets/SchedulingView-D6IhdqFv.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/SchedulingView-BSDgR7Lw.js +1 -1
  68. agent_webui-2.7.0/agent/agent_webui/dist/assets/SchemaView-D-LgmDSd.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/SchemaView-jq-D6LQZ.js +1 -1
  69. agent_webui-2.8.0/agent/agent_webui/dist/assets/SessionsView-C_OXIDrS.js +1 -0
  70. agent_webui-2.7.0/agent/agent_webui/dist/assets/SharePage-DBAuPQMH.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/SharePage-BYM0uX1S.js +1 -1
  71. agent_webui-2.8.0/agent/agent_webui/dist/assets/SkillsView-DqpuikQo.js +1 -0
  72. agent_webui-2.8.0/agent/agent_webui/dist/assets/SparqlView-XZqeQ_DV.js +1 -0
  73. agent_webui-2.8.0/agent/agent_webui/dist/assets/SystemStatusView-CdXpGKS-.js +1 -0
  74. agent_webui-2.8.0/agent/agent_webui/dist/assets/TableExplorerView-D3RFqPwg.js +1 -0
  75. agent_webui-2.8.0/agent/agent_webui/dist/assets/TemporalGraphView-bgJHyEhh.js +1 -0
  76. agent_webui-2.7.0/agent/agent_webui/dist/assets/TermsPage-DMeD_5ME.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/TermsPage-DZPwiIny.js +1 -1
  77. agent_webui-2.7.0/agent/agent_webui/dist/assets/ThankYouPage-CupbLv10.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/ThankYouPage-Cjq0FQ5v.js +1 -1
  78. agent_webui-2.8.0/agent/agent_webui/dist/assets/TrendBadge-DQ4zgWWk.js +1 -0
  79. agent_webui-2.8.0/agent/agent_webui/dist/assets/UsageView-CEyf-VpZ.js +1 -0
  80. agent_webui-2.8.0/agent/agent_webui/dist/assets/UserManagementView-Ct4n0QDr.js +1 -0
  81. agent_webui-2.7.0/agent/agent_webui/dist/assets/VertexView-ClrbQVzt.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/VertexView-DnYc5KSf.js +1 -1
  82. agent_webui-2.8.0/agent/agent_webui/dist/assets/VizDemoView-PGvBvN2G.js +1 -0
  83. agent_webui-2.8.0/agent/agent_webui/dist/assets/WorkWorkspace-Drgs9R6s.js +1 -0
  84. agent_webui-2.8.0/agent/agent_webui/dist/assets/WorkflowEditorView-BazGYxiT.js +7 -0
  85. agent_webui-2.8.0/agent/agent_webui/dist/assets/WorkspaceIDEView-BY6TA4da.js +1 -0
  86. agent_webui-2.8.0/agent/agent_webui/dist/assets/arrow-up-DpBEFU1W.js +1 -0
  87. agent_webui-2.8.0/agent/agent_webui/dist/assets/circle-dot-In4UilqT.js +1 -0
  88. agent_webui-2.8.0/agent/agent_webui/dist/assets/identity-Cp486guQ.js +1 -0
  89. agent_webui-2.7.0/agent/agent_webui/dist/assets/index-CvBBCrBf.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/index-C2uiGu8Z.js +17 -17
  90. agent_webui-2.8.0/agent/agent_webui/dist/assets/index-UXCYeqCs.css +2 -0
  91. agent_webui-2.8.0/agent/agent_webui/dist/assets/loaded-workspace-commands-CXfB1eT-.js +1 -0
  92. agent_webui-2.7.0/agent/agent_webui/dist/assets/model-CcBWpHSX.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/model-Oxh121Y0.js +1 -1
  93. agent_webui-2.8.0/agent/agent_webui/dist/assets/queries-Cx8lZa--.js +1 -0
  94. agent_webui-2.7.0/agent/agent_webui/dist/assets/status-message-eVvQOUJt.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/status-message-CFnPiTvw.js +1 -1
  95. agent_webui-2.8.0/agent/agent_webui/dist/assets/tabs-aIrzMOIb.js +1 -0
  96. agent_webui-2.8.0/agent/agent_webui/dist/assets/undo-2-D4EYZLW8.js +1 -0
  97. agent_webui-2.8.0/agent/agent_webui/dist/assets/uql-H85wtqTc.js +1 -0
  98. agent_webui-2.7.0/agent/agent_webui/dist/assets/useMutation-IxXdlsmq.js → agent_webui-2.8.0/agent/agent_webui/dist/assets/useMutation-BXe25F6O.js +1 -1
  99. agent_webui-2.8.0/agent/agent_webui/dist/assets/useQuery-BCV_z3lS.js +1 -0
  100. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/index.html +11 -11
  101. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/og-image-v1.svg +3 -3
  102. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/site.webmanifest +3 -3
  103. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/spa-routes.json +5 -1
  104. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/host.py +22 -22
  105. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/observability.py +2 -2
  106. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/oidc_session.py +3 -3
  107. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/orchestrator_model.py +97 -33
  108. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/server.py +11 -11
  109. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/skills/agent-webui-development/SKILL.md +5 -5
  110. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/skills/kg-webui-admin/SKILL.md +1 -1
  111. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/skills/kg-webui-dashboards/SKILL.md +1 -1
  112. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/skills/kg-webui-extraction/SKILL.md +1 -1
  113. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/skills/kg-webui-graphviz/SKILL.md +1 -1
  114. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/skills/kg-webui-ontology-operator/SKILL.md +1 -1
  115. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/skills/kg-webui-swe/SKILL.md +1 -1
  116. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui.egg-info/PKG-INFO +24 -19
  117. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui.egg-info/SOURCES.txt +88 -78
  118. {agent_webui-2.7.0 → agent_webui-2.8.0}/pyproject.toml +5 -5
  119. {agent_webui-2.7.0 → agent_webui-2.8.0}/tests/test_identity_boundary.py +1 -1
  120. {agent_webui-2.7.0 → agent_webui-2.8.0}/tests/test_release_publication.py +1 -1
  121. agent_webui-2.7.0/agent/agent_webui/dist/assets/AdminView-Cs7hxxlS.js +0 -1
  122. agent_webui-2.7.0/agent/agent_webui/dist/assets/AtlasView-BNusEspP.js +0 -5
  123. agent_webui-2.7.0/agent/agent_webui/dist/assets/BrokerView-BRCZAdxA.js +0 -1
  124. agent_webui-2.7.0/agent/agent_webui/dist/assets/ChartPage-CTCzfMHk.js +0 -1
  125. agent_webui-2.7.0/agent/agent_webui/dist/assets/CypherReplView-B2QzDrb9.js +0 -1
  126. agent_webui-2.7.0/agent/agent_webui/dist/assets/DashboardView-BkwPaKer.js +0 -1
  127. agent_webui-2.7.0/agent/agent_webui/dist/assets/EcosystemView-BpZrGFno.js +0 -1
  128. agent_webui-2.7.0/agent/agent_webui/dist/assets/FilesView-DiD8xn9K.js +0 -1
  129. agent_webui-2.7.0/agent/agent_webui/dist/assets/Graph3DLodView-vJlLNz_w.js +0 -1
  130. agent_webui-2.7.0/agent/agent_webui/dist/assets/GraphCanvas-BuECakKk.js +0 -1
  131. agent_webui-2.7.0/agent/agent_webui/dist/assets/GraphOSReadinessView-CtUmTWrb.js +0 -1
  132. agent_webui-2.7.0/agent/agent_webui/dist/assets/GraphView-CSvUsYdN.js +0 -1
  133. agent_webui-2.7.0/agent/agent_webui/dist/assets/IntegrationsView-Ddggu4Bl.js +0 -2
  134. agent_webui-2.7.0/agent/agent_webui/dist/assets/KnowledgeView-CmJp5V4M.js +0 -1
  135. agent_webui-2.7.0/agent/agent_webui/dist/assets/LLMTemplatesView-Byu7WJwR.js +0 -1
  136. agent_webui-2.7.0/agent/agent_webui/dist/assets/LiveDashboardsView-DdZYsTjr.js +0 -1
  137. agent_webui-2.7.0/agent/agent_webui/dist/assets/MemoryView-B_zuf2qi.js +0 -1
  138. agent_webui-2.7.0/agent/agent_webui/dist/assets/NotFoundPage-C3OUDkZ6.js +0 -1
  139. agent_webui-2.7.0/agent/agent_webui/dist/assets/ObjectExplorerView-2XFjU1WB.js +0 -1
  140. agent_webui-2.7.0/agent/agent_webui/dist/assets/ObservabilityView-BSn_K6uW.js +0 -1
  141. agent_webui-2.7.0/agent/agent_webui/dist/assets/OpsPanelView-DZ1SemuU.js +0 -1
  142. agent_webui-2.7.0/agent/agent_webui/dist/assets/PrivacyPage-gVB_yGWv.js +0 -1
  143. agent_webui-2.7.0/agent/agent_webui/dist/assets/PromptsView-CW6bS2tH.js +0 -1
  144. agent_webui-2.7.0/agent/agent_webui/dist/assets/SessionsView-B85jEvq4.js +0 -1
  145. agent_webui-2.7.0/agent/agent_webui/dist/assets/SkillsView-ltbBnnOs.js +0 -1
  146. agent_webui-2.7.0/agent/agent_webui/dist/assets/SparqlView-uiz8nit1.js +0 -1
  147. agent_webui-2.7.0/agent/agent_webui/dist/assets/SystemStatusView-DeOdQhhd.js +0 -1
  148. agent_webui-2.7.0/agent/agent_webui/dist/assets/TableExplorerView-B9CIcsWB.js +0 -1
  149. agent_webui-2.7.0/agent/agent_webui/dist/assets/TemporalGraphView-BL_ULue5.js +0 -1
  150. agent_webui-2.7.0/agent/agent_webui/dist/assets/TrendBadge-BPuE-pRH.js +0 -1
  151. agent_webui-2.7.0/agent/agent_webui/dist/assets/UsageView-DdzMku0x.js +0 -1
  152. agent_webui-2.7.0/agent/agent_webui/dist/assets/UserManagementView-CVpJ2yEt.js +0 -1
  153. agent_webui-2.7.0/agent/agent_webui/dist/assets/VizDemoView-ad7BvGXc.js +0 -1
  154. agent_webui-2.7.0/agent/agent_webui/dist/assets/WorkflowEditorView-BdrKmw4Y.js +0 -7
  155. agent_webui-2.7.0/agent/agent_webui/dist/assets/WorkspaceIDEView-2E-ni7lf.js +0 -1
  156. agent_webui-2.7.0/agent/agent_webui/dist/assets/identity-DVvTRidn.js +0 -1
  157. agent_webui-2.7.0/agent/agent_webui/dist/assets/index-BRlMMQsQ.css +0 -2
  158. agent_webui-2.7.0/agent/agent_webui/dist/assets/queries-D0kNjy2X.js +0 -1
  159. agent_webui-2.7.0/agent/agent_webui/dist/assets/tabs-CjTe9LxQ.js +0 -1
  160. agent_webui-2.7.0/agent/agent_webui/dist/assets/useQuery-BGefm_dX.js +0 -1
  161. {agent_webui-2.7.0 → agent_webui-2.8.0}/LICENSE +0 -0
  162. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/__init__.py +0 -0
  163. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/__tests__/conftest.py +0 -0
  164. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/__tests__/test_api_extensions.py +0 -0
  165. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/__tests__/test_bound_sweep_regressions.py +0 -0
  166. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/__tests__/test_bug_012_github_gitlab_contract.py +0 -0
  167. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/__tests__/test_chat_resource_routes.py +0 -0
  168. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/__tests__/test_contact_delivery.py +0 -0
  169. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/__tests__/test_files_endpoints.py +0 -0
  170. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/__tests__/test_host.py +0 -0
  171. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/__tests__/test_markets_app.py +0 -0
  172. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/__tests__/test_observability.py +0 -0
  173. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/__tests__/test_parity_contract.py +0 -0
  174. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/__tests__/test_pydantic_ai_compat.py +0 -0
  175. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/__tests__/test_rbac.py +0 -0
  176. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/__tests__/test_spa_http_status.py +0 -0
  177. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/__tests__/test_workspace_helpers_chokepoint.py +0 -0
  178. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/apps/markets/__init__.py +0 -0
  179. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/apps/markets/catalog.py +0 -0
  180. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/apps/markets/chart.py +0 -0
  181. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/apps/markets/gateway.py +0 -0
  182. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/apps/markets/scanner.py +0 -0
  183. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/apps/markets/series.py +0 -0
  184. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/apps/markets/session.py +0 -0
  185. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/apps/markets/snapshots.py +0 -0
  186. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/apps/markets/timeframes.py +0 -0
  187. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/browser_control_canonical.py +0 -0
  188. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/apple-touch-icon.png +0 -0
  189. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/ChartPanel-Cxpkw3a6.js +0 -0
  190. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/InterVariable-DiVDrmQJ.woff2 +0 -0
  191. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/LegalPageContent-BmhwYoKV.js +0 -0
  192. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/SessionExpiredNotice-CMttDxWl.js +0 -0
  193. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/WorkflowEditorView-DLioOiRN.css +0 -0
  194. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/activity-DupAOJCR.js +0 -0
  195. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/api-jtHn_WxH.js +0 -0
  196. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/api-validation-CCoR_LRu.js +0 -0
  197. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/app-window-KMAPJoaW.js +0 -0
  198. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/badge-nQZ87mVE.js +0 -0
  199. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/braces-BNz2iAeD.js +0 -0
  200. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/bundle-mjs-DIyOrgL5.js +0 -0
  201. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/check-CPVKKX8l.js +0 -0
  202. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/chevron-down-DYWnPQti.js +0 -0
  203. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/chevron-left-BaGXvfgm.js +0 -0
  204. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/chevron-right-gs8WU8XT.js +0 -0
  205. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/chevron-up-C-rjGU5C.js +0 -0
  206. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/chunk-D32TOXHM-KueescCg.js +0 -0
  207. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/circle-alert-ByZ-1ERr.js +0 -0
  208. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/contact-C94LhKRg.js +0 -0
  209. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/createLucideIcon-DTQSidPf.js +0 -0
  210. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/dist-2txhAIHO.js +0 -0
  211. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/dist-BHmo3Yb6.js +0 -0
  212. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/dist-BKkt828_.js +0 -0
  213. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/dist-BLRfKgTy.js +0 -0
  214. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/dist-BjAObXUn.js +0 -0
  215. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/dist-Bq6o2UDR.js +0 -0
  216. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/dist-CWmwEm73.js +0 -0
  217. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/dist-DMVqwVuR.js +0 -0
  218. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/dist-DcreYulP.js +0 -0
  219. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/dist-mp1aFJDC.js +0 -0
  220. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/es2015-CgZynitj.js +0 -0
  221. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/external-link-Dyd5OsGm.js +0 -0
  222. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/eye-D0gCj30e.js +0 -0
  223. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/file-text-DqorJKDA.js +0 -0
  224. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/folder-open-BrzeUmMg.js +0 -0
  225. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/format-DHsGNrOH.js +0 -0
  226. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/funnel-Y4IuN8Q7.js +0 -0
  227. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/graphology-layout-forceatlas2-CF_uOjtN.js +0 -0
  228. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/hard-drive-9fR5RFS9.js +0 -0
  229. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/highlighted-body-KQOG7T2V-qSdnQsR5.js +0 -0
  230. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/hourglass-1ui486hR.js +0 -0
  231. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/layout-grid-B4IFpzLD.js +0 -0
  232. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/layout.worker-CnC9u5pP.js +0 -0
  233. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/link-2-a9RZxW2S.js +0 -0
  234. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/mermaid-MCJ5UELQ-F6vEfdbO.js +0 -0
  235. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/play-D3mjq--Q.js +0 -0
  236. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/plus-s20KYBeu.js +0 -0
  237. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/preload-helper-CRzLMJPS.js +0 -0
  238. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/react-dom-DAxA-E-a.js +0 -0
  239. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/refresh-cw-BVhl5aJX.js +0 -0
  240. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/save-CuEdPPgC.js +0 -0
  241. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/scan-search-GrqJngl3.js +0 -0
  242. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/scroll-area-srEWz9Q3.js +0 -0
  243. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/server-CE-xbAAj.js +0 -0
  244. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/sliders-vertical-Cr4E50uY.js +0 -0
  245. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/sparkles-Bae0tRI0.js +0 -0
  246. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/switch-B9Yml2pU.js +0 -0
  247. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/tag-D1RiwxuF.js +0 -0
  248. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/theme-colors-DKGWsgC0.js +0 -0
  249. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/transport-Din6U5N9.js +0 -0
  250. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/unavailable-notice-B7WdWNor.js +0 -0
  251. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/upload-DcybBZCN.js +0 -0
  252. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/utils-C0okervd.js +0 -0
  253. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/wifi-off-Dz91unNp.js +0 -0
  254. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/assets/x-BdA_yxUR.js +0 -0
  255. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/favicon-16x16.png +0 -0
  256. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/favicon-32x32.png +0 -0
  257. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/favicon-48x48.png +0 -0
  258. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/favicon.ico +0 -0
  259. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/favicon.png +0 -0
  260. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/favicon.svg +0 -0
  261. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/icon-192x192.png +0 -0
  262. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/icon-512x512.png +0 -0
  263. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/og-image-v1.png +0 -0
  264. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/robots.txt +0 -0
  265. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/dist/sitemap.xml +0 -0
  266. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/icon.png +0 -0
  267. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/public_shell.py +0 -0
  268. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/rbac.py +0 -0
  269. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui/skills/__init__.py +0 -0
  270. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui.egg-info/dependency_links.txt +0 -0
  271. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui.egg-info/entry_points.txt +0 -0
  272. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui.egg-info/requires.txt +0 -0
  273. {agent_webui-2.7.0 → agent_webui-2.8.0}/agent/agent_webui.egg-info/top_level.txt +0 -0
  274. {agent_webui-2.7.0 → agent_webui-2.8.0}/setup.cfg +0 -0
  275. {agent_webui-2.7.0 → agent_webui-2.8.0}/tests/test_dashboard_entrypoint.py +0 -0
  276. {agent_webui-2.7.0 → agent_webui-2.8.0}/tests/test_eslint_hook_contract.py +0 -0
  277. {agent_webui-2.7.0 → agent_webui-2.8.0}/tests/test_gate_wrappers.py +0 -0
  278. {agent_webui-2.7.0 → agent_webui-2.8.0}/tests/test_graph_visualization.py +0 -0
  279. {agent_webui-2.7.0 → agent_webui-2.8.0}/tests/test_health_liveness_endpoint.py +0 -0
  280. {agent_webui-2.7.0 → agent_webui-2.8.0}/tests/test_init.py +0 -0
  281. {agent_webui-2.7.0 → agent_webui-2.8.0}/tests/test_log_failure_error_code.py +0 -0
  282. {agent_webui-2.7.0 → agent_webui-2.8.0}/tests/test_package_author_privacy.py +0 -0
  283. {agent_webui-2.7.0 → agent_webui-2.8.0}/tests/test_privacy_boundaries.py +0 -0
  284. {agent_webui-2.7.0 → agent_webui-2.8.0}/tests/test_release_concurrency.py +0 -0
  285. {agent_webui-2.7.0 → agent_webui-2.8.0}/tests/test_release_gate_order.py +0 -0
  286. {agent_webui-2.7.0 → agent_webui-2.8.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.7.0
3
+ Version: 2.8.0
4
4
  Summary: Agent Web Interface for Pydantic AI Agents
5
5
  Author-email: Repository Maintainers <maintainers@knuckles.team>
6
6
  License: MIT
@@ -9,7 +9,10 @@ Classifier: License :: OSI Approved :: MIT License
9
9
  Classifier: Environment :: Console
10
10
  Classifier: Operating System :: POSIX :: Linux
11
11
  Classifier: Programming Language :: Python :: 3
12
- Requires-Python: <3.15,>=3.12
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Programming Language :: Python :: 3.13
14
+ Classifier: Programming Language :: Python :: 3.14
15
+ Requires-Python: >=3.12
13
16
  Description-Content-Type: text/markdown
14
17
  License-File: LICENSE
15
18
  Requires-Dist: agent-utilities<4.0.0,>=3.0.0
@@ -41,14 +44,14 @@ Requires-Dist: opentelemetry-instrumentation-fastapi>=0.65b0; extra == "test"
41
44
  Requires-Dist: opentelemetry-instrumentation-asgi>=0.65b0; extra == "test"
42
45
  Dynamic: license-file
43
46
 
44
- # Graph OS web UI
47
+ # Arbora web UI
45
48
 
46
49
  <p align="center">
47
- <img src="docs/assets/brands/agent-webui-logo-v1.png" alt="Graph OS Agent Web UI logo" width="160" />
50
+ <img src="docs/assets/brands/agent-webui-logo-v1.png" alt="Arbora Agent Web UI logo" width="160" />
48
51
  </p>
49
52
 
50
53
  <p align="center">
51
- <strong>The browser workspace for governed agents, workflows, and knowledge in Graph OS.</strong><br>
54
+ <strong>The browser workspace for governed agents, workflows, and knowledge in Arbora.</strong><br>
52
55
  <sub>Conversations · approvals · workflows · fleet activity · Atlas knowledge views</sub>
53
56
  </p>
54
57
 
@@ -88,16 +91,16 @@ Dynamic: license-file
88
91
 
89
92
  ## Overview
90
93
 
91
- Graph OS Agent Web UI is the browser workspace composed by Graph OS. It brings agent
94
+ Arbora Agent Web UI is the browser workspace composed by Arbora. It brings agent
92
95
  conversations, approvals, workflows, fleet activity, and Epistemic Graph
93
96
  exploration into one React application. Its FastAPI host keeps privileged
94
97
  credentials and gateway delegation on the server side.
95
98
 
96
99
  | Agent Web UI owns | Other components own |
97
100
  |---|---|
98
- | Browser presentation, local interaction state, accessible route composition, and the FastAPI boundary | Graph OS owns public routing, identity, policy, and fleet supervision; Agent Utilities owns agent behavior; Epistemic Graph owns durable knowledge; connector services own external-system effects |
101
+ | Browser presentation, local interaction state, accessible route composition, and the FastAPI boundary | Arbora owns public routing, identity, policy, and fleet supervision; Agent Utilities owns agent behavior; Epistemic Graph owns durable knowledge; connector services own external-system effects |
99
102
 
100
- Current package Version: 2.7.0.
103
+ Current package Version: 2.8.0.
101
104
 
102
105
  ## Key capabilities
103
106
 
@@ -106,7 +109,7 @@ Current package Version: 2.7.0.
106
109
  - Explore property graphs, RDF, schemas, objects, tables, documents, code, and memories through Atlas and Epistemic Graph.
107
110
  - Discover MCP Apps and connector capabilities without exposing service credentials to the browser.
108
111
  - Apply one role-aware navigation and server authorization model across the complete workspace.
109
- - Run as the Graph OS-hosted browser co-service or as an independently deployed ASGI application.
112
+ - Run as the Arbora-hosted browser co-service or as an independently deployed ASGI application.
110
113
 
111
114
  ## Documentation
112
115
 
@@ -118,20 +121,22 @@ then use the shared platform map to move between components:
118
121
  | Agent Web UI | Browser operator workspace and Atlas knowledge views | [Docs](https://knuckles-team.github.io/agent-webui/) |
119
122
  | Agent Terminal UI | Terminal and headless client; REST operations are available, with no ACP conversational path | [Docs](https://knuckles-team.github.io/agent-terminal-ui/) |
120
123
  | Geniusbot | Desktop cockpit for chat, graph, fleet, health, and operator workflows | [Docs](https://knuckles-team.github.io/geniusbot/) |
121
- | Graph OS messaging | Hosts chat and voice entrypoints; Agent Utilities supplies adapter and routing behavior | [Docs](https://knuckles-team.github.io/graph-os/) |
122
- | Graph OS | Public MCP, REST, A2A, identity, policy, and runtime composition | [Docs](https://knuckles-team.github.io/graph-os/) |
124
+ | Arbora messaging | Hosts chat and voice entrypoints; Agent Utilities supplies adapter and routing behavior | [Docs](https://knuckles-team.github.io/arbora/) |
125
+ | Arbora | Public MCP, REST, A2A, identity, policy, and runtime composition | [Docs](https://knuckles-team.github.io/arbora/) |
123
126
  | Agent Utilities | Agent decisions, workflows, evaluation, and skills | [Docs](https://knuckles-team.github.io/agent-utilities/) |
124
127
  | Epistemic Graph | Durable multimodal data, reasoning, provenance, and transactions | [Docs](https://knuckles-team.github.io/epistemic-graph/) |
125
128
  | Agent Connector SDK | Typed source adapters, connector serving, and write-back contracts | [Docs](https://knuckles-team.github.io/agent-connector-sdk/) |
126
129
 
127
130
  ## Architecture
128
131
 
129
- ![Runtime architecture: people use Agent Web UI, Agent Terminal UI, Geniusbot, and Graph OS-hosted messaging. MCP, REST, and A2A clients enter through Graph OS; source systems flow through Agent Connector SDK into Epistemic Graph.](https://raw.githubusercontent.com/Knuckles-Team/epistemic-graph/main/docs/assets/runtime-architecture.svg)
132
+ [![Runtime architecture: people use Agent Web UI, Agent Terminal UI, Geniusbot, and Arbora-hosted messaging. MCP, REST, and A2A clients enter through Arbora; source systems flow through Agent Connector SDK into Epistemic Graph.](https://raw.githubusercontent.com/Knuckles-Team/epistemic-graph/main/docs/assets/runtime-architecture.svg)](https://knuckles-team.github.io/.github/architecture/#webui)
130
133
 
131
- People also enter through Agent Terminal UI and Geniusbot or Graph OS-hosted
134
+ [Explore the live architecture](https://knuckles-team.github.io/.github/architecture/#webui)
135
+
136
+ People also enter through Agent Terminal UI and Geniusbot or Arbora-hosted
132
137
  messaging; Agent Terminal UI exposes REST operations, with no ACP conversational
133
138
  path. External applications connect over MCP, REST, or A2A. The browser talks
134
- only to its same-origin FastAPI host. Graph OS injects gateway routes and
139
+ only to its same-origin FastAPI host. Arbora injects gateway routes and
135
140
  verified request context, then delegates agent behavior to Agent Utilities and
136
141
  durable knowledge to Epistemic Graph. Source systems connect through Agent
137
142
  Connector SDK directly to Epistemic Graph. Agent Web UI renders typed results
@@ -142,15 +147,15 @@ for the request flow and trust boundaries.
142
147
 
143
148
  ## Quick start
144
149
 
145
- Generate a local profile and start Graph OS with Agent Web UI enabled:
150
+ Generate a local profile and start Arbora with Agent Web UI enabled:
146
151
 
147
152
  ```bash
148
- uvx --from "graph-os[webui]" setup-config generate --profile tiny
153
+ uvx --from "arbora[webui]" setup-config generate --profile tiny
149
154
  export ENABLE_WEB_UI=true
150
- uvx --from "graph-os[webui]" graph-os --transport streamable-http --host 127.0.0.1 --port 8000
155
+ uvx --from "arbora[webui]" arbora --transport streamable-http --host 127.0.0.1 --port 8000
151
156
  ```
152
157
 
153
- Open <http://127.0.0.1:8080>. Graph OS serves MCP on port `8000` and the Agent
158
+ Open <http://127.0.0.1:8080>. Arbora serves MCP on port `8000` and the Agent
154
159
  Web UI co-service on port `8080`. The [start guide](https://knuckles-team.github.io/agent-webui/start/)
155
160
  covers local source development and deployment profiles.
156
161
 
@@ -162,4 +167,4 @@ before opening a pull request.
162
167
 
163
168
  ## License
164
169
 
165
- Graph OS Agent Web UI is available under the [MIT License](LICENSE).
170
+ Arbora Agent Web UI is available under the [MIT License](LICENSE).
@@ -1,11 +1,11 @@
1
- # Graph OS web UI
1
+ # Arbora web UI
2
2
 
3
3
  <p align="center">
4
- <img src="docs/assets/brands/agent-webui-logo-v1.png" alt="Graph OS Agent Web UI logo" width="160" />
4
+ <img src="docs/assets/brands/agent-webui-logo-v1.png" alt="Arbora Agent Web UI logo" width="160" />
5
5
  </p>
6
6
 
7
7
  <p align="center">
8
- <strong>The browser workspace for governed agents, workflows, and knowledge in Graph OS.</strong><br>
8
+ <strong>The browser workspace for governed agents, workflows, and knowledge in Arbora.</strong><br>
9
9
  <sub>Conversations · approvals · workflows · fleet activity · Atlas knowledge views</sub>
10
10
  </p>
11
11
 
@@ -45,16 +45,16 @@
45
45
 
46
46
  ## Overview
47
47
 
48
- Graph OS Agent Web UI is the browser workspace composed by Graph OS. It brings agent
48
+ Arbora Agent Web UI is the browser workspace composed by Arbora. It brings agent
49
49
  conversations, approvals, workflows, fleet activity, and Epistemic Graph
50
50
  exploration into one React application. Its FastAPI host keeps privileged
51
51
  credentials and gateway delegation on the server side.
52
52
 
53
53
  | Agent Web UI owns | Other components own |
54
54
  |---|---|
55
- | Browser presentation, local interaction state, accessible route composition, and the FastAPI boundary | Graph OS owns public routing, identity, policy, and fleet supervision; Agent Utilities owns agent behavior; Epistemic Graph owns durable knowledge; connector services own external-system effects |
55
+ | Browser presentation, local interaction state, accessible route composition, and the FastAPI boundary | Arbora owns public routing, identity, policy, and fleet supervision; Agent Utilities owns agent behavior; Epistemic Graph owns durable knowledge; connector services own external-system effects |
56
56
 
57
- Current package Version: 2.7.0.
57
+ Current package Version: 2.8.0.
58
58
 
59
59
  ## Key capabilities
60
60
 
@@ -63,7 +63,7 @@ Current package Version: 2.7.0.
63
63
  - Explore property graphs, RDF, schemas, objects, tables, documents, code, and memories through Atlas and Epistemic Graph.
64
64
  - Discover MCP Apps and connector capabilities without exposing service credentials to the browser.
65
65
  - Apply one role-aware navigation and server authorization model across the complete workspace.
66
- - Run as the Graph OS-hosted browser co-service or as an independently deployed ASGI application.
66
+ - Run as the Arbora-hosted browser co-service or as an independently deployed ASGI application.
67
67
 
68
68
  ## Documentation
69
69
 
@@ -75,20 +75,22 @@ then use the shared platform map to move between components:
75
75
  | Agent Web UI | Browser operator workspace and Atlas knowledge views | [Docs](https://knuckles-team.github.io/agent-webui/) |
76
76
  | Agent Terminal UI | Terminal and headless client; REST operations are available, with no ACP conversational path | [Docs](https://knuckles-team.github.io/agent-terminal-ui/) |
77
77
  | Geniusbot | Desktop cockpit for chat, graph, fleet, health, and operator workflows | [Docs](https://knuckles-team.github.io/geniusbot/) |
78
- | Graph OS messaging | Hosts chat and voice entrypoints; Agent Utilities supplies adapter and routing behavior | [Docs](https://knuckles-team.github.io/graph-os/) |
79
- | Graph OS | Public MCP, REST, A2A, identity, policy, and runtime composition | [Docs](https://knuckles-team.github.io/graph-os/) |
78
+ | Arbora messaging | Hosts chat and voice entrypoints; Agent Utilities supplies adapter and routing behavior | [Docs](https://knuckles-team.github.io/arbora/) |
79
+ | Arbora | Public MCP, REST, A2A, identity, policy, and runtime composition | [Docs](https://knuckles-team.github.io/arbora/) |
80
80
  | Agent Utilities | Agent decisions, workflows, evaluation, and skills | [Docs](https://knuckles-team.github.io/agent-utilities/) |
81
81
  | Epistemic Graph | Durable multimodal data, reasoning, provenance, and transactions | [Docs](https://knuckles-team.github.io/epistemic-graph/) |
82
82
  | Agent Connector SDK | Typed source adapters, connector serving, and write-back contracts | [Docs](https://knuckles-team.github.io/agent-connector-sdk/) |
83
83
 
84
84
  ## Architecture
85
85
 
86
- ![Runtime architecture: people use Agent Web UI, Agent Terminal UI, Geniusbot, and Graph OS-hosted messaging. MCP, REST, and A2A clients enter through Graph OS; source systems flow through Agent Connector SDK into Epistemic Graph.](https://raw.githubusercontent.com/Knuckles-Team/epistemic-graph/main/docs/assets/runtime-architecture.svg)
86
+ [![Runtime architecture: people use Agent Web UI, Agent Terminal UI, Geniusbot, and Arbora-hosted messaging. MCP, REST, and A2A clients enter through Arbora; source systems flow through Agent Connector SDK into Epistemic Graph.](https://raw.githubusercontent.com/Knuckles-Team/epistemic-graph/main/docs/assets/runtime-architecture.svg)](https://knuckles-team.github.io/.github/architecture/#webui)
87
87
 
88
- People also enter through Agent Terminal UI and Geniusbot or Graph OS-hosted
88
+ [Explore the live architecture](https://knuckles-team.github.io/.github/architecture/#webui)
89
+
90
+ People also enter through Agent Terminal UI and Geniusbot or Arbora-hosted
89
91
  messaging; Agent Terminal UI exposes REST operations, with no ACP conversational
90
92
  path. External applications connect over MCP, REST, or A2A. The browser talks
91
- only to its same-origin FastAPI host. Graph OS injects gateway routes and
93
+ only to its same-origin FastAPI host. Arbora injects gateway routes and
92
94
  verified request context, then delegates agent behavior to Agent Utilities and
93
95
  durable knowledge to Epistemic Graph. Source systems connect through Agent
94
96
  Connector SDK directly to Epistemic Graph. Agent Web UI renders typed results
@@ -99,15 +101,15 @@ for the request flow and trust boundaries.
99
101
 
100
102
  ## Quick start
101
103
 
102
- Generate a local profile and start Graph OS with Agent Web UI enabled:
104
+ Generate a local profile and start Arbora with Agent Web UI enabled:
103
105
 
104
106
  ```bash
105
- uvx --from "graph-os[webui]" setup-config generate --profile tiny
107
+ uvx --from "arbora[webui]" setup-config generate --profile tiny
106
108
  export ENABLE_WEB_UI=true
107
- uvx --from "graph-os[webui]" graph-os --transport streamable-http --host 127.0.0.1 --port 8000
109
+ uvx --from "arbora[webui]" arbora --transport streamable-http --host 127.0.0.1 --port 8000
108
110
  ```
109
111
 
110
- Open <http://127.0.0.1:8080>. Graph OS serves MCP on port `8000` and the Agent
112
+ Open <http://127.0.0.1:8080>. Arbora serves MCP on port `8000` and the Agent
111
113
  Web UI co-service on port `8080`. The [start guide](https://knuckles-team.github.io/agent-webui/start/)
112
114
  covers local source development and deployment profiles.
113
115
 
@@ -119,4 +121,4 @@ before opening a pull request.
119
121
 
120
122
  ## License
121
123
 
122
- Graph OS Agent Web UI is available under the [MIT License](LICENSE).
124
+ Arbora Agent Web UI is available under the [MIT License](LICENSE).
@@ -1,4 +1,4 @@
1
- """Live-path and trust-boundary tests for the Graph OS browser channel."""
1
+ """Live-path and trust-boundary tests for the Arbora browser channel."""
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -75,7 +75,7 @@ class RecordingConnection:
75
75
  self.messages.append(message)
76
76
  if message.type == 'catalog.register':
77
77
  return {
78
- 'authority': 'graph-os',
78
+ 'authority': 'arbora',
79
79
  'route_id': message.route_id,
80
80
  'registration_generation': message.registration_generation,
81
81
  'catalog_digest': message.catalog_digest,
@@ -130,7 +130,7 @@ class _AuCancel(BaseModel):
130
130
 
131
131
 
132
132
  class RecordingPort:
133
- authority = 'graph-os'
133
+ authority = 'arbora'
134
134
  supports_durable_fences = True
135
135
  supports_durable_audit = True
136
136
  supports_attended_leases = True
@@ -174,7 +174,7 @@ class FailingOpenPort(RecordingPort):
174
174
 
175
175
  async def open_channel(self, binding: BrowserControlBinding, send: Any) -> Any:
176
176
  self.bindings.append(binding)
177
- raise RuntimeError('synthetic Graph OS open failure')
177
+ raise RuntimeError('synthetic Arbora open failure')
178
178
 
179
179
  async def revoke_attended_arm(self, binding: BrowserControlBinding) -> Any:
180
180
  self.revoked.append(binding)
@@ -482,7 +482,7 @@ def test_structural_au_message_is_validated_and_sent_to_browser(
482
482
  assert websocket.receive_json() == {
483
483
  'protocol': 'webmcp.control.v1',
484
484
  'type': 'channel.ready',
485
- 'authority': 'graph-os',
485
+ 'authority': 'arbora',
486
486
  'route_id': 'knowledge.graph',
487
487
  'registration_generation': 7,
488
488
  'catalog_digest': _CATALOG_DIGEST,
@@ -541,7 +541,7 @@ def test_one_injected_connection_handles_every_browser_event_and_outbound_send(
541
541
  ) as websocket:
542
542
  websocket.send_json(_OPEN)
543
543
  websocket.send_json(_CATALOG)
544
- assert websocket.receive_json()['authority'] == 'graph-os'
544
+ assert websocket.receive_json()['authority'] == 'arbora'
545
545
  for event in events:
546
546
  websocket.send_json(event)
547
547
  assert websocket.receive_json() == {
@@ -560,7 +560,7 @@ def test_one_injected_connection_handles_every_browser_event_and_outbound_send(
560
560
  ]
561
561
 
562
562
 
563
- def test_channel_ready_refuses_a_tampered_graph_os_catalog_receipt(
563
+ def test_channel_ready_refuses_a_tampered_arbora_catalog_receipt(
564
564
  mock_agent: Any,
565
565
  monkeypatch: pytest.MonkeyPatch,
566
566
  ) -> None:
@@ -852,7 +852,7 @@ def test_duplicate_tool_id_with_a_different_version_is_rejected(
852
852
  [{**_CATALOG['tools'][0], 'required_roles': ['é']}],
853
853
  ],
854
854
  )
855
- def test_catalog_descriptor_invariants_fail_before_graph_os(
855
+ def test_catalog_descriptor_invariants_fail_before_arbora(
856
856
  mock_agent: Any,
857
857
  monkeypatch: pytest.MonkeyPatch,
858
858
  tools: list[dict[str, Any]],
@@ -560,8 +560,8 @@ async def test_a_caller_with_its_own_bearer_is_never_given_a_browser_session():
560
560
  authorization = [v for k, v in seen['headers'] if k.lower() == b'authorization']
561
561
  assert authorization == [b'Bearer service-token']
562
562
  assert 'browser_login_session_ref' not in seen['state']
563
- assert seen['state'].get('graphos_session_admitted') is not True
564
- assert 'graphos_console_mfa_at_ms' not in seen['state']
563
+ assert seen['state'].get('arbora_session_admitted') is not True
564
+ assert 'arbora_console_mfa_at_ms' not in seen['state']
565
565
 
566
566
 
567
567
  @pytest.mark.anyio
@@ -591,10 +591,10 @@ async def test_a_valid_session_is_forwarded_as_the_users_own_bearer():
591
591
  assert login_ref.startswith('login_')
592
592
  assert len(login_ref) == 70
593
593
  assert 'users-own-token' not in login_ref
594
- # This is a legacy sealed Keycloak cookie, not a live GraphOS identity
595
- # broker session. Only GraphOS IdentityGate may set the admission marker.
596
- assert seen['state'].get('graphos_session_admitted') is not True
597
- assert 'graphos_console_mfa_at_ms' not in seen['state']
594
+ # This is a legacy sealed Keycloak cookie, not a live Arbora identity
595
+ # broker session. Only Arbora IdentityGate may set the admission marker.
596
+ assert seen['state'].get('arbora_session_admitted') is not True
597
+ assert 'arbora_console_mfa_at_ms' not in seen['state']
598
598
 
599
599
 
600
600
  @pytest.mark.anyio
@@ -1229,7 +1229,7 @@ async def test_finalize_consumes_recent_auth_once_and_mints_exact_arm(monkeypatc
1229
1229
  revoked: list = []
1230
1230
 
1231
1231
  class Port:
1232
- authority = 'graph-os'
1232
+ authority = 'arbora'
1233
1233
  supports_durable_fences = True
1234
1234
  supports_durable_audit = True
1235
1235
  supports_attended_leases = True
@@ -1457,13 +1457,13 @@ def anyio_backend():
1457
1457
 
1458
1458
  # --------------------------------------------------- browser session evidence
1459
1459
  #
1460
- # graph-os's browser identity producer (``graph_os.identity.broker
1461
- # .GraphOSBrowserAuthority``) is the real caller of this port: it verifies a
1462
- # live ``__Host-graphos_session`` cookie, then calls this exact chokepoint to
1460
+ # arbora's browser identity producer (``arbora.identity.broker
1461
+ # .ArboraBrowserAuthority``) is the real caller of this port: it verifies a
1462
+ # live ``__Host-arbora_session`` cookie, then calls this exact chokepoint to
1463
1463
  # turn its own owner-verified evidence into the MFA timestamp its HTTP/MCP
1464
1464
  # caller projection needs. These tests exercise the webui side of that
1465
1465
  # contract with a synthetic authority fixture standing in for the real
1466
- # producer, which graph-os's own suite covers end to end.
1466
+ # producer, which arbora's own suite covers end to end.
1467
1467
 
1468
1468
  _EVIDENCE_ORIGIN = 'https://console.example.test'
1469
1469
  _NOW_MS = 2_000_000
@@ -0,0 +1,218 @@
1
+ """WEBUI-API-R011.2: conversation labels and admitted run identity stay distinct."""
2
+
3
+ # spec: WEBUI-API-R011.2.1
4
+
5
+ import asyncio
6
+
7
+ import pytest
8
+ from agent_webui.orchestrator_model import (
9
+ _conversation_session_id,
10
+ _run_identity,
11
+ build_orchestrator_model,
12
+ )
13
+ from pydantic_ai import Agent
14
+ from pydantic_ai.messages import ModelRequest, UserPromptPart
15
+
16
+
17
+ def request(text='hello', conversation_id=None):
18
+ return ModelRequest(
19
+ parts=[UserPromptPart(content=text)], conversation_id=conversation_id
20
+ )
21
+
22
+
23
+ def task_result(task_id, context='owned-context'):
24
+ return {
25
+ 'value': {
26
+ 'id': task_id,
27
+ 'contextId': context,
28
+ 'metadata': {
29
+ 'arbora': {
30
+ 'runId': 'run-' + task_id,
31
+ 'runTraceRef': 'opaque-ref-' + task_id,
32
+ }
33
+ },
34
+ 'artifacts': [{'parts': [{'kind': 'text', 'text': 'reply-' + task_id}]}],
35
+ }
36
+ }
37
+
38
+
39
+ def test_explicit_identity_is_stable_not_content_derived():
40
+ assert _conversation_session_id([request('one', 'c1')]) == 'webui:c1'
41
+ assert _conversation_session_id([request('two', 'c1')]) == 'webui:c1'
42
+ assert _conversation_session_id([request('one', 'c2')]) == 'webui:c2'
43
+ assert _conversation_session_id([request()]) != _conversation_session_id(
44
+ [request()]
45
+ )
46
+
47
+
48
+ def test_conflicting_identity_refused():
49
+ with pytest.raises(ValueError, match='Conflicting'):
50
+ _conversation_session_id(
51
+ [request(conversation_id='a'), request(conversation_id='b')]
52
+ )
53
+
54
+
55
+ def test_explicit_references_only_no_guessed_trace():
56
+ metadata = _run_identity(task_result('t1'), 'webui:c1')
57
+ assert metadata is not None
58
+ identity = metadata['arbora_run']
59
+ assert identity == {
60
+ 'conversation_context': 'webui:c1',
61
+ 'task_id': 't1',
62
+ 'context_id': 'owned-context',
63
+ 'run_id': 'run-t1',
64
+ 'run_trace_ref': 'opaque-ref-t1',
65
+ }
66
+ assert _run_identity({'value': {'status': {}}}, 'webui:c1') is None
67
+ assert _run_identity({'result': task_result('nested')}, 'webui:c1') is None
68
+ assert _run_identity({'value': {'id': 't', 'contextId': 'c'}}, 'webui:c1') == {
69
+ 'arbora_run': {
70
+ 'conversation_context': 'webui:c1',
71
+ 'task_id': 't',
72
+ 'context_id': 'c',
73
+ }
74
+ }
75
+
76
+
77
+ @pytest.mark.parametrize(
78
+ 'field,value', [('id', 1), ('contextId', ''), ('contextId', ['c'])]
79
+ )
80
+ def test_invalid_returned_identity_refused(field, value):
81
+ result = task_result('t1')
82
+ result['value'][field] = value
83
+ assert _run_identity(result, 'webui:c1') is None
84
+
85
+
86
+ async def test_stream_metadata_is_request_local_and_preserves_exact_refs():
87
+ calls = []
88
+
89
+ async def invoke(op, params, *, idempotency_key):
90
+ context = params['message']['contextId']
91
+ calls.append((context, idempotency_key))
92
+ await asyncio.sleep(0)
93
+ return task_result(context)
94
+
95
+ agent = Agent(build_orchestrator_model(invoke=invoke))
96
+
97
+ async def run(conversation):
98
+ async with agent.run_stream('hello', conversation_id=conversation) as result:
99
+ await result.get_output()
100
+ return result.response
101
+
102
+ one, two = await asyncio.gather(run('one'), run('two'))
103
+ assert one.metadata['arbora_run']['task_id'] == 'webui:one'
104
+ assert two.metadata['arbora_run']['task_id'] == 'webui:two'
105
+ assert one.metadata['arbora_run']['run_trace_ref'] == 'opaque-ref-webui:one'
106
+ from pydantic_ai.ui.vercel_ai import VercelAIAdapter
107
+
108
+ wire = VercelAIAdapter.dump_messages([one])[0]
109
+ assert wire.metadata['arbora_run'] == one.metadata['arbora_run']
110
+ # Repeated turns share conversation identity, not a fabricated task/run ID.
111
+ again = await run('one')
112
+ assert again.metadata['arbora_run']['conversation_context'] == 'webui:one'
113
+ assert calls[0][1] != calls[-1][1]
114
+ assert calls[-1][0] == 'webui:one'
115
+
116
+
117
+ async def test_failed_stream_does_not_reuse_previous_identity():
118
+ calls = 0
119
+
120
+ async def invoke(op, params, *, idempotency_key):
121
+ nonlocal calls
122
+ calls += 1
123
+ if calls == 2:
124
+ raise RuntimeError('unavailable')
125
+ return task_result('first' if calls == 1 else 'third')
126
+
127
+ agent = Agent(build_orchestrator_model(invoke=invoke))
128
+ first = await agent.run('first', conversation_id='one')
129
+ assert first.response.metadata['arbora_run']['task_id'] == 'first'
130
+ with pytest.raises(RuntimeError, match='unavailable'):
131
+ async with agent.run_stream('second', conversation_id='two') as result:
132
+ await result.get_output()
133
+ async with agent.run_stream('retry', conversation_id='two') as result:
134
+ await result.get_output()
135
+ assert result.response.metadata['arbora_run']['task_id'] == 'third'
136
+ assert (
137
+ result.response.metadata['arbora_run']['conversation_context']
138
+ == 'webui:two'
139
+ )
140
+
141
+
142
+ @pytest.mark.parametrize('malformed', [False, True])
143
+ async def test_real_vercel_stream_propagates_served_identity_without_repeating_effects(
144
+ malformed,
145
+ ):
146
+ import json
147
+
148
+ from pydantic_ai.ui.vercel_ai import VercelAIAdapter
149
+ from starlette.requests import Request
150
+
151
+ calls = []
152
+
153
+ async def invoke(op, params, *, idempotency_key):
154
+ calls.append(params)
155
+ result = task_result('wire-task')
156
+ if malformed:
157
+ result['value']['id'] = 42
158
+ return {'ok': True, 'result': result, 'meta': {'registry_digest': 'test'}}
159
+
160
+ payload = json.dumps(
161
+ {
162
+ 'id': '/selected',
163
+ 'trigger': 'submit-message',
164
+ 'messages': [
165
+ {
166
+ 'id': 'u1',
167
+ 'role': 'user',
168
+ 'parts': [{'type': 'text', 'text': 'hello'}],
169
+ }
170
+ ],
171
+ }
172
+ ).encode()
173
+
174
+ async def receive():
175
+ return {'type': 'http.request', 'body': payload, 'more_body': False}
176
+
177
+ request = Request(
178
+ {
179
+ 'type': 'http',
180
+ 'method': 'POST',
181
+ 'path': '/api/chats/messages',
182
+ 'headers': [(b'content-type', b'application/json')],
183
+ },
184
+ receive,
185
+ )
186
+ response = await VercelAIAdapter.dispatch_request(
187
+ request, agent=Agent(build_orchestrator_model(invoke=invoke)), sdk_version=7
188
+ )
189
+ assert hasattr(response, 'body_iterator'), response.body
190
+ chunks = [chunk async for chunk in response.body_iterator]
191
+ body = ''.join(
192
+ chunk.decode() if isinstance(chunk, bytes) else chunk for chunk in chunks
193
+ )
194
+ assert len(calls) == 1
195
+ assert calls[0]['message']['contextId'] == 'webui:/selected'
196
+ assert 'reply-wire-task' in body
197
+ events = [
198
+ json.loads(line[6:])
199
+ for line in body.splitlines()
200
+ if line.startswith('data: ') and line != 'data: [DONE]'
201
+ ]
202
+ metadata = [
203
+ event['messageMetadata']
204
+ for event in events
205
+ if event['type'] == 'message-metadata'
206
+ ]
207
+ assert len(metadata) == 1
208
+ if malformed:
209
+ assert 'arbora_run' not in metadata[0]
210
+ else:
211
+ assert metadata[0]['arbora_run']['task_id'] == 'wire-task'
212
+ assert metadata[0]['arbora_run']['run_trace_ref'] == 'opaque-ref-wire-task'
213
+
214
+
215
+ def test_error_envelope_cannot_supply_identity():
216
+ assert (
217
+ _run_identity({'ok': False, 'result': task_result('fake')}, 'webui:c') is None
218
+ )
@@ -270,7 +270,7 @@ def _run_html_document(body_chunks: list[bytes], policy: str | None = None) -> l
270
270
  return messages
271
271
 
272
272
 
273
- @pytest.mark.spec('DS-08')
273
+ @pytest.mark.spec('WEBUI-DESIGN-R009')
274
274
  def test_html_documents_carry_a_fresh_style_nonce() -> None:
275
275
  chunks = [b'<meta property="csp-nonce" nonce="AGENT_WEBUI_', b'CSP_NONCE">']
276
276
  first = _run_html_document(chunks)