agent-webui 2.7.0__tar.gz → 2.7.1__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.
- {agent_webui-2.7.0 → agent_webui-2.7.1}/PKG-INFO +18 -18
- {agent_webui-2.7.0 → agent_webui-2.7.1}/README.md +17 -17
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__tests__/test_browser_control.py +8 -8
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__tests__/test_oidc_session.py +11 -11
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__tests__/test_served_operations.py +25 -25
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/api_extensions.py +11 -11
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/apps/__init__.py +2 -2
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/browser_control.py +11 -11
- agent_webui-2.7.0/agent/agent_webui/dist/assets/AdminView-Cs7hxxlS.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/AdminView-BdhlXNuH.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/AgentLibraryView-Ag9Aojn6.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/AgentLibraryView-CN9epMHd.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/GraphOSReadinessView-CtUmTWrb.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/ArboraReadinessView-BkGEkah-.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/AtlasView-BNusEspP.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/AtlasView-De6w_9WH.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/Availability-yN_kuNzm.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/Availability-Den2CaKK.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/BrokerView-BRCZAdxA.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/BrokerView-DHE8-a7g.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/CatalogueView-shPPzvnU.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/CatalogueView-B4K-jYbP.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/ChartPage-CTCzfMHk.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/ChartPage-CajmeMxT.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/CodeGraphView-CS0svpOR.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/CodeGraphView-CUlMGeog.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/ConfigurationView-CDjgXtn3.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/ConfigurationView-QQbmt8FI.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/ConsoleConfirmView-Ckzd9Jw9.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/ConsoleConfirmView-DGgSpeYr.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/ContactPage-Dm-6oGO-.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/ContactPage-DVqe4ojO.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/CypherReplView-B2QzDrb9.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/CypherReplView-BFVNSbHf.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/DashboardView-BkwPaKer.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/DashboardView-JHHk8nfw.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/DataAnalystView-Dr2XzApI.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/DataAnalystView-D2rDgmTE.js +1 -1
- agent_webui-2.7.1/agent/agent_webui/dist/assets/EcosystemView-BxdVgmYl.js +1 -0
- agent_webui-2.7.0/agent/agent_webui/dist/assets/ExtractionView-BxmIMrKZ.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/ExtractionView-SIs5t7-2.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/FilesView-DiD8xn9K.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/FilesView-B4kygc4_.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/FleetView-DxlUh1er.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/FleetView-CqZBn2Gb.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/GoalsView-BVpEoIAk.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/GoalsView-qftV4zVF.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/Graph3DLodView-vJlLNz_w.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/Graph3DLodView-CNt0ZZ1f.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/Graph3DView-CHkQLlqf.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/Graph3DView-DvrfNH4Y.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/GraphCanvas-BuECakKk.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/GraphCanvas-CvF9sWHU.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/GraphView-CSvUsYdN.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/GraphView-DtSYTFIU.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/ImportExportModal-8VUb-C_9.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/ImportExportModal-3aJofrNe.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/IntegrationsView-Ddggu4Bl.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/IntegrationsView-DanxQx4E.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/KnowledgeBaseView-BlW_kxs9.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/KnowledgeBaseView-DJzbVXf_.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/KnowledgeView-CmJp5V4M.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/KnowledgeView-0lzdQNlj.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/LLMTemplatesView-Byu7WJwR.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/LLMTemplatesView-DpYhR3Rz.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/LearnView-D3j-JxlJ.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/LearnView-CyFpsc5N.js +1 -1
- agent_webui-2.7.1/agent/agent_webui/dist/assets/LiveDashboardsView-ESAfLAEw.js +1 -0
- agent_webui-2.7.0/agent/agent_webui/dist/assets/MagmaView-DRoXXXku.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/MagmaView-DeUYSUus.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/MarketsCalendar-6QKahzMR.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/MarketsCalendar-BJ4xSyWw.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/MarketsHome-D_yfCf8S.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/MarketsHome-CbspJWR4.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/MarketsMenu-W9BPQY9z.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/MarketsMenu-DHt2G1_0.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/MarketsNews-BUSn6A_z.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/MarketsNews-DZwg_as1.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/MarketsPortfolio-B1n7zsFf.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/MarketsPortfolio-DMM4Yl1Q.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/MarketsShell-9oj-VJzp.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/MarketsShell-C1x1kWh-.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/McpAppsView-Dix46AWV.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/McpAppsView-l-sCScNo.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/MemoryView-B_zuf2qi.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/MemoryView-Dghm1rMT.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/NodeTypeBreakdown-Y3fOgxdQ.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/NodeTypeBreakdown-Aede8Ovl.js +1 -1
- agent_webui-2.7.1/agent/agent_webui/dist/assets/NotFoundPage-y3NN-QVf.js +1 -0
- agent_webui-2.7.0/agent/agent_webui/dist/assets/Notices-sQ0Ua11R.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/Notices-D17hdIJE.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/ObjectExplorerView-2XFjU1WB.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/ObjectExplorerView-DdPfSjOg.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/ObjectView-BRD__NZN.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/ObjectView-DG1Z_OYW.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/ObservabilityView-BSn_K6uW.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/ObservabilityView-Ce5o66gv.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/OpsPanelView-DZ1SemuU.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/OpsPanelView-CDke42HU.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/PrivacyPage-gVB_yGWv.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/PrivacyPage-DypYppFK.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/PromptsView-CW6bS2tH.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/PromptsView-C0soAhv5.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/PublicPageLayout-CHk4A2yh.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/PublicPageLayout-1ji-4LZL.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/SDDView-BMi6ZQhI.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/SDDView-B0meX0p3.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/SchedulingView-D6IhdqFv.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/SchedulingView-DvwK95G0.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/SchemaView-D-LgmDSd.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/SchemaView-o5YEfujF.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/SessionsView-B85jEvq4.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/SessionsView-DSoZk_Lz.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/SharePage-DBAuPQMH.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/SharePage-5sxMYGoz.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/SkillsView-ltbBnnOs.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/SkillsView-CL-inq1F.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/SparqlView-uiz8nit1.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/SparqlView-Duik6wYZ.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/SystemStatusView-DeOdQhhd.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/SystemStatusView-D7PxxotJ.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/TableExplorerView-B9CIcsWB.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/TableExplorerView-Jt0S_NKW.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/TemporalGraphView-BL_ULue5.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/TemporalGraphView-DF-se9oo.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/TermsPage-DMeD_5ME.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/TermsPage-CDnQDbgV.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/ThankYouPage-CupbLv10.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/ThankYouPage-BvFj5K9A.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/TrendBadge-BPuE-pRH.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/TrendBadge-DFvlzJv5.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/UsageView-DdzMku0x.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/UsageView-exhd6ewz.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/UserManagementView-CVpJ2yEt.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/UserManagementView-DFsbzkZb.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/VertexView-ClrbQVzt.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/VertexView-E0vs0cRH.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/VizDemoView-ad7BvGXc.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/VizDemoView-Bt3r5KAC.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/WorkflowEditorView-BdrKmw4Y.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/WorkflowEditorView-6bMv23QZ.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/WorkspaceIDEView-2E-ni7lf.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/WorkspaceIDEView-BXzXC4zp.js +1 -1
- agent_webui-2.7.1/agent/agent_webui/dist/assets/identity-C3qnrvHo.js +1 -0
- agent_webui-2.7.0/agent/agent_webui/dist/assets/index-CvBBCrBf.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/index-B3Hz4lzB.js +6 -6
- agent_webui-2.7.0/agent/agent_webui/dist/assets/model-CcBWpHSX.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/model-C4AzLQrj.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/queries-D0kNjy2X.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/queries-PjkfUoGJ.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/status-message-eVvQOUJt.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/status-message-ovrDYMYX.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/tabs-CjTe9LxQ.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/tabs-BxSTPadT.js +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/useMutation-IxXdlsmq.js → agent_webui-2.7.1/agent/agent_webui/dist/assets/useMutation-Bjdc9UtI.js +1 -1
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/index.html +9 -9
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/og-image-v1.svg +3 -3
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/site.webmanifest +3 -3
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/spa-routes.json +1 -1
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/host.py +22 -22
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/observability.py +2 -2
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/oidc_session.py +2 -2
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/orchestrator_model.py +4 -4
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/server.py +11 -11
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/skills/agent-webui-development/SKILL.md +5 -5
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/skills/kg-webui-admin/SKILL.md +1 -1
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/skills/kg-webui-dashboards/SKILL.md +1 -1
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/skills/kg-webui-extraction/SKILL.md +1 -1
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/skills/kg-webui-graphviz/SKILL.md +1 -1
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/skills/kg-webui-ontology-operator/SKILL.md +1 -1
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/skills/kg-webui-swe/SKILL.md +1 -1
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui.egg-info/PKG-INFO +18 -18
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui.egg-info/SOURCES.txt +76 -76
- {agent_webui-2.7.0 → agent_webui-2.7.1}/pyproject.toml +1 -1
- {agent_webui-2.7.0 → agent_webui-2.7.1}/tests/test_identity_boundary.py +1 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/EcosystemView-BpZrGFno.js +0 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/LiveDashboardsView-DdZYsTjr.js +0 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/NotFoundPage-C3OUDkZ6.js +0 -1
- agent_webui-2.7.0/agent/agent_webui/dist/assets/identity-DVvTRidn.js +0 -1
- {agent_webui-2.7.0 → agent_webui-2.7.1}/LICENSE +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__init__.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__tests__/conftest.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__tests__/test_api_extensions.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__tests__/test_bound_sweep_regressions.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__tests__/test_bug_012_github_gitlab_contract.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__tests__/test_chat_resource_routes.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__tests__/test_contact_delivery.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__tests__/test_files_endpoints.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__tests__/test_host.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__tests__/test_markets_app.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__tests__/test_observability.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__tests__/test_parity_contract.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__tests__/test_pydantic_ai_compat.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__tests__/test_rbac.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__tests__/test_security_boundaries.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__tests__/test_spa_http_status.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__tests__/test_workspace_helpers_chokepoint.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/apps/markets/__init__.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/apps/markets/catalog.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/apps/markets/chart.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/apps/markets/gateway.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/apps/markets/router.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/apps/markets/scanner.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/apps/markets/series.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/apps/markets/session.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/apps/markets/snapshots.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/apps/markets/timeframes.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/browser_control_canonical.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/contact_delivery.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/apple-touch-icon.png +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/ChartPanel-Cxpkw3a6.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/InterVariable-DiVDrmQJ.woff2 +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/LegalPageContent-BmhwYoKV.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/SessionExpiredNotice-CMttDxWl.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/WorkflowEditorView-DLioOiRN.css +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/activity-DupAOJCR.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/api-jtHn_WxH.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/api-validation-CCoR_LRu.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/app-window-KMAPJoaW.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/badge-nQZ87mVE.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/braces-BNz2iAeD.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/bundle-mjs-DIyOrgL5.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/check-CPVKKX8l.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/chevron-down-DYWnPQti.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/chevron-left-BaGXvfgm.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/chevron-right-gs8WU8XT.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/chevron-up-C-rjGU5C.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/chunk-D32TOXHM-KueescCg.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/circle-alert-ByZ-1ERr.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/contact-C94LhKRg.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/createLucideIcon-DTQSidPf.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/dist-2txhAIHO.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/dist-BHmo3Yb6.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/dist-BKkt828_.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/dist-BLRfKgTy.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/dist-BjAObXUn.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/dist-Bq6o2UDR.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/dist-CWmwEm73.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/dist-DMVqwVuR.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/dist-DcreYulP.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/dist-mp1aFJDC.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/es2015-CgZynitj.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/external-link-Dyd5OsGm.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/eye-D0gCj30e.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/file-text-DqorJKDA.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/folder-open-BrzeUmMg.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/format-DHsGNrOH.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/funnel-Y4IuN8Q7.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/graphology-layout-forceatlas2-CF_uOjtN.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/hard-drive-9fR5RFS9.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/highlighted-body-KQOG7T2V-qSdnQsR5.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/hourglass-1ui486hR.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/index-BRlMMQsQ.css +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/layout-grid-B4IFpzLD.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/layout.worker-CnC9u5pP.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/link-2-a9RZxW2S.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/mermaid-MCJ5UELQ-F6vEfdbO.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/play-D3mjq--Q.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/plus-s20KYBeu.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/preload-helper-CRzLMJPS.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/react-dom-DAxA-E-a.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/refresh-cw-BVhl5aJX.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/save-CuEdPPgC.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/scan-search-GrqJngl3.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/scroll-area-srEWz9Q3.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/server-CE-xbAAj.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/sliders-vertical-Cr4E50uY.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/sparkles-Bae0tRI0.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/switch-B9Yml2pU.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/tag-D1RiwxuF.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/theme-colors-DKGWsgC0.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/transport-Din6U5N9.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/unavailable-notice-B7WdWNor.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/upload-DcybBZCN.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/useQuery-BGefm_dX.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/utils-C0okervd.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/wifi-off-Dz91unNp.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/assets/x-BdA_yxUR.js +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/favicon-16x16.png +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/favicon-32x32.png +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/favicon-48x48.png +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/favicon.ico +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/favicon.png +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/favicon.svg +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/icon-192x192.png +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/icon-512x512.png +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/og-image-v1.png +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/robots.txt +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/dist/sitemap.xml +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/icon.png +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/public_shell.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/rbac.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/skills/__init__.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui.egg-info/dependency_links.txt +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui.egg-info/entry_points.txt +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui.egg-info/requires.txt +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui.egg-info/top_level.txt +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/setup.cfg +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/tests/test_dashboard_entrypoint.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/tests/test_eslint_hook_contract.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/tests/test_gate_wrappers.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/tests/test_graph_visualization.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/tests/test_health_liveness_endpoint.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/tests/test_init.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/tests/test_log_failure_error_code.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/tests/test_package_author_privacy.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/tests/test_privacy_boundaries.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/tests/test_release_concurrency.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/tests/test_release_gate_order.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/tests/test_release_publication.py +0 -0
- {agent_webui-2.7.0 → agent_webui-2.7.1}/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.
|
|
3
|
+
Version: 2.7.1
|
|
4
4
|
Summary: Agent Web Interface for Pydantic AI Agents
|
|
5
5
|
Author-email: Repository Maintainers <maintainers@knuckles.team>
|
|
6
6
|
License: MIT
|
|
@@ -41,14 +41,14 @@ Requires-Dist: opentelemetry-instrumentation-fastapi>=0.65b0; extra == "test"
|
|
|
41
41
|
Requires-Dist: opentelemetry-instrumentation-asgi>=0.65b0; extra == "test"
|
|
42
42
|
Dynamic: license-file
|
|
43
43
|
|
|
44
|
-
#
|
|
44
|
+
# Arbora web UI
|
|
45
45
|
|
|
46
46
|
<p align="center">
|
|
47
|
-
<img src="docs/assets/brands/agent-webui-logo-v1.png" alt="
|
|
47
|
+
<img src="docs/assets/brands/agent-webui-logo-v1.png" alt="Arbora Agent Web UI logo" width="160" />
|
|
48
48
|
</p>
|
|
49
49
|
|
|
50
50
|
<p align="center">
|
|
51
|
-
<strong>The browser workspace for governed agents, workflows, and knowledge in
|
|
51
|
+
<strong>The browser workspace for governed agents, workflows, and knowledge in Arbora.</strong><br>
|
|
52
52
|
<sub>Conversations · approvals · workflows · fleet activity · Atlas knowledge views</sub>
|
|
53
53
|
</p>
|
|
54
54
|
|
|
@@ -88,16 +88,16 @@ Dynamic: license-file
|
|
|
88
88
|
|
|
89
89
|
## Overview
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
Arbora Agent Web UI is the browser workspace composed by Arbora. It brings agent
|
|
92
92
|
conversations, approvals, workflows, fleet activity, and Epistemic Graph
|
|
93
93
|
exploration into one React application. Its FastAPI host keeps privileged
|
|
94
94
|
credentials and gateway delegation on the server side.
|
|
95
95
|
|
|
96
96
|
| Agent Web UI owns | Other components own |
|
|
97
97
|
|---|---|
|
|
98
|
-
| Browser presentation, local interaction state, accessible route composition, and the FastAPI boundary |
|
|
98
|
+
| 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
99
|
|
|
100
|
-
Current package Version: 2.7.
|
|
100
|
+
Current package Version: 2.7.1.
|
|
101
101
|
|
|
102
102
|
## Key capabilities
|
|
103
103
|
|
|
@@ -106,7 +106,7 @@ Current package Version: 2.7.0.
|
|
|
106
106
|
- Explore property graphs, RDF, schemas, objects, tables, documents, code, and memories through Atlas and Epistemic Graph.
|
|
107
107
|
- Discover MCP Apps and connector capabilities without exposing service credentials to the browser.
|
|
108
108
|
- Apply one role-aware navigation and server authorization model across the complete workspace.
|
|
109
|
-
- Run as the
|
|
109
|
+
- Run as the Arbora-hosted browser co-service or as an independently deployed ASGI application.
|
|
110
110
|
|
|
111
111
|
## Documentation
|
|
112
112
|
|
|
@@ -118,20 +118,20 @@ then use the shared platform map to move between components:
|
|
|
118
118
|
| Agent Web UI | Browser operator workspace and Atlas knowledge views | [Docs](https://knuckles-team.github.io/agent-webui/) |
|
|
119
119
|
| 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
120
|
| Geniusbot | Desktop cockpit for chat, graph, fleet, health, and operator workflows | [Docs](https://knuckles-team.github.io/geniusbot/) |
|
|
121
|
-
|
|
|
122
|
-
|
|
|
121
|
+
| Arbora messaging | Hosts chat and voice entrypoints; Agent Utilities supplies adapter and routing behavior | [Docs](https://knuckles-team.github.io/arbora/) |
|
|
122
|
+
| Arbora | Public MCP, REST, A2A, identity, policy, and runtime composition | [Docs](https://knuckles-team.github.io/arbora/) |
|
|
123
123
|
| Agent Utilities | Agent decisions, workflows, evaluation, and skills | [Docs](https://knuckles-team.github.io/agent-utilities/) |
|
|
124
124
|
| Epistemic Graph | Durable multimodal data, reasoning, provenance, and transactions | [Docs](https://knuckles-team.github.io/epistemic-graph/) |
|
|
125
125
|
| Agent Connector SDK | Typed source adapters, connector serving, and write-back contracts | [Docs](https://knuckles-team.github.io/agent-connector-sdk/) |
|
|
126
126
|
|
|
127
127
|
## Architecture
|
|
128
128
|
|
|
129
|
-

|
|
130
130
|
|
|
131
|
-
People also enter through Agent Terminal UI and Geniusbot or
|
|
131
|
+
People also enter through Agent Terminal UI and Geniusbot or Arbora-hosted
|
|
132
132
|
messaging; Agent Terminal UI exposes REST operations, with no ACP conversational
|
|
133
133
|
path. External applications connect over MCP, REST, or A2A. The browser talks
|
|
134
|
-
only to its same-origin FastAPI host.
|
|
134
|
+
only to its same-origin FastAPI host. Arbora injects gateway routes and
|
|
135
135
|
verified request context, then delegates agent behavior to Agent Utilities and
|
|
136
136
|
durable knowledge to Epistemic Graph. Source systems connect through Agent
|
|
137
137
|
Connector SDK directly to Epistemic Graph. Agent Web UI renders typed results
|
|
@@ -142,15 +142,15 @@ for the request flow and trust boundaries.
|
|
|
142
142
|
|
|
143
143
|
## Quick start
|
|
144
144
|
|
|
145
|
-
Generate a local profile and start
|
|
145
|
+
Generate a local profile and start Arbora with Agent Web UI enabled:
|
|
146
146
|
|
|
147
147
|
```bash
|
|
148
|
-
uvx --from "
|
|
148
|
+
uvx --from "arbora[webui]" setup-config generate --profile tiny
|
|
149
149
|
export ENABLE_WEB_UI=true
|
|
150
|
-
uvx --from "
|
|
150
|
+
uvx --from "arbora[webui]" arbora --transport streamable-http --host 127.0.0.1 --port 8000
|
|
151
151
|
```
|
|
152
152
|
|
|
153
|
-
Open <http://127.0.0.1:8080>.
|
|
153
|
+
Open <http://127.0.0.1:8080>. Arbora serves MCP on port `8000` and the Agent
|
|
154
154
|
Web UI co-service on port `8080`. The [start guide](https://knuckles-team.github.io/agent-webui/start/)
|
|
155
155
|
covers local source development and deployment profiles.
|
|
156
156
|
|
|
@@ -162,4 +162,4 @@ before opening a pull request.
|
|
|
162
162
|
|
|
163
163
|
## License
|
|
164
164
|
|
|
165
|
-
|
|
165
|
+
Arbora Agent Web UI is available under the [MIT License](LICENSE).
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Arbora web UI
|
|
2
2
|
|
|
3
3
|
<p align="center">
|
|
4
|
-
<img src="docs/assets/brands/agent-webui-logo-v1.png" alt="
|
|
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
|
|
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
|
-
|
|
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 |
|
|
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.
|
|
57
|
+
Current package Version: 2.7.1.
|
|
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
|
|
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,20 @@ 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
|
-
|
|
|
79
|
-
|
|
|
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
|
-

|
|
87
87
|
|
|
88
|
-
People also enter through Agent Terminal UI and Geniusbot or
|
|
88
|
+
People also enter through Agent Terminal UI and Geniusbot or Arbora-hosted
|
|
89
89
|
messaging; Agent Terminal UI exposes REST operations, with no ACP conversational
|
|
90
90
|
path. External applications connect over MCP, REST, or A2A. The browser talks
|
|
91
|
-
only to its same-origin FastAPI host.
|
|
91
|
+
only to its same-origin FastAPI host. Arbora injects gateway routes and
|
|
92
92
|
verified request context, then delegates agent behavior to Agent Utilities and
|
|
93
93
|
durable knowledge to Epistemic Graph. Source systems connect through Agent
|
|
94
94
|
Connector SDK directly to Epistemic Graph. Agent Web UI renders typed results
|
|
@@ -99,15 +99,15 @@ for the request flow and trust boundaries.
|
|
|
99
99
|
|
|
100
100
|
## Quick start
|
|
101
101
|
|
|
102
|
-
Generate a local profile and start
|
|
102
|
+
Generate a local profile and start Arbora with Agent Web UI enabled:
|
|
103
103
|
|
|
104
104
|
```bash
|
|
105
|
-
uvx --from "
|
|
105
|
+
uvx --from "arbora[webui]" setup-config generate --profile tiny
|
|
106
106
|
export ENABLE_WEB_UI=true
|
|
107
|
-
uvx --from "
|
|
107
|
+
uvx --from "arbora[webui]" arbora --transport streamable-http --host 127.0.0.1 --port 8000
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
-
Open <http://127.0.0.1:8080>.
|
|
110
|
+
Open <http://127.0.0.1:8080>. Arbora serves MCP on port `8000` and the Agent
|
|
111
111
|
Web UI co-service on port `8080`. The [start guide](https://knuckles-team.github.io/agent-webui/start/)
|
|
112
112
|
covers local source development and deployment profiles.
|
|
113
113
|
|
|
@@ -119,4 +119,4 @@ before opening a pull request.
|
|
|
119
119
|
|
|
120
120
|
## License
|
|
121
121
|
|
|
122
|
-
|
|
122
|
+
Arbora Agent Web UI is available under the [MIT License](LICENSE).
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Live-path and trust-boundary tests for the
|
|
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': '
|
|
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 = '
|
|
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
|
|
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': '
|
|
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'] == '
|
|
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
|
|
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
|
|
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('
|
|
564
|
-
assert '
|
|
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
|
|
595
|
-
# broker session. Only
|
|
596
|
-
assert seen['state'].get('
|
|
597
|
-
assert '
|
|
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 = '
|
|
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
|
-
#
|
|
1461
|
-
# .
|
|
1462
|
-
# live ``__Host-
|
|
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
|
|
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
|
{agent_webui-2.7.0 → agent_webui-2.7.1}/agent/agent_webui/__tests__/test_served_operations.py
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""WebUI routes backed by
|
|
1
|
+
"""WebUI routes backed by Arbora served operations, over a faked Arbora HTTP API.
|
|
2
2
|
|
|
3
3
|
Each test drives the real app (identity gate, route scopes, the ``host`` seam)
|
|
4
4
|
and answers ``POST <api>/ops/<op_id>`` with an in-process ``httpx`` transport.
|
|
@@ -22,7 +22,7 @@ from pydantic_ai.models.test import TestModel
|
|
|
22
22
|
_ADMIN = 'kg:read kg:write kg:admin'
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
class
|
|
25
|
+
class FakeArbora:
|
|
26
26
|
"""Record each served-operation call and answer from a per-op table."""
|
|
27
27
|
|
|
28
28
|
def __init__(self) -> None:
|
|
@@ -44,8 +44,8 @@ class FakeGraphOs:
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
@pytest.fixture
|
|
47
|
-
def
|
|
48
|
-
fake =
|
|
47
|
+
def arbora(monkeypatch: pytest.MonkeyPatch) -> FakeArbora:
|
|
48
|
+
fake = FakeArbora()
|
|
49
49
|
real_client = httpx.AsyncClient
|
|
50
50
|
|
|
51
51
|
def client(*args: Any, **kwargs: Any) -> httpx.AsyncClient:
|
|
@@ -58,7 +58,7 @@ def graph_os(monkeypatch: pytest.MonkeyPatch) -> FakeGraphOs:
|
|
|
58
58
|
|
|
59
59
|
|
|
60
60
|
@pytest.fixture
|
|
61
|
-
def app(
|
|
61
|
+
def app(arbora: FakeArbora) -> Any:
|
|
62
62
|
return create_agent_web_app(Agent(TestModel()), workspace_helpers={})
|
|
63
63
|
|
|
64
64
|
|
|
@@ -187,13 +187,13 @@ def _client(app: Any, scope: str = _ADMIN) -> TestClient:
|
|
|
187
187
|
)
|
|
188
188
|
# spec: APIUI-06.1
|
|
189
189
|
def test_read_routes_project_the_served_operation(
|
|
190
|
-
app,
|
|
190
|
+
app, arbora, method, path, body, op_id, value, sent, expected
|
|
191
191
|
) -> None:
|
|
192
|
-
|
|
192
|
+
arbora.results[op_id] = value
|
|
193
193
|
response = _client(app).request(method, f'/api/enhanced{path}', json=body)
|
|
194
194
|
assert response.status_code == 200, response.text
|
|
195
195
|
assert response.json() == expected
|
|
196
|
-
called, params, headers =
|
|
196
|
+
called, params, headers = arbora.calls[-1]
|
|
197
197
|
assert called == op_id
|
|
198
198
|
assert sent.items() <= params.items()
|
|
199
199
|
assert headers['accept'] == 'application/json'
|
|
@@ -234,18 +234,18 @@ def test_read_routes_project_the_served_operation(
|
|
|
234
234
|
],
|
|
235
235
|
)
|
|
236
236
|
def test_write_routes_send_one_idempotency_key(
|
|
237
|
-
app,
|
|
237
|
+
app, arbora, path, body, op_id, sent
|
|
238
238
|
) -> None:
|
|
239
|
-
|
|
239
|
+
arbora.results[op_id] = {'status': 'ok'}
|
|
240
240
|
response = _client(app).post(f'/api/enhanced{path}', json=body)
|
|
241
241
|
assert response.status_code == 200, response.text
|
|
242
|
-
called, params, headers =
|
|
242
|
+
called, params, headers = arbora.calls[-1]
|
|
243
243
|
assert called == op_id
|
|
244
244
|
assert sent.items() <= params.items()
|
|
245
245
|
assert len(headers['idempotency-key']) == 32
|
|
246
246
|
|
|
247
247
|
|
|
248
|
-
def test_a_missing_operation_answers_not_available(app,
|
|
248
|
+
def test_a_missing_operation_answers_not_available(app, arbora) -> None:
|
|
249
249
|
response = _client(app).get('/api/enhanced/graph/search?query=x')
|
|
250
250
|
assert response.status_code == 501
|
|
251
251
|
assert response.json()['detail']['needs_operation'] == 'retrieval.search'
|
|
@@ -255,8 +255,8 @@ def test_a_missing_operation_answers_not_available(app, graph_os) -> None:
|
|
|
255
255
|
('code', 'status'),
|
|
256
256
|
[('PERMISSION_DENIED', 403), ('INVALID_ARGUMENT', 400), ('SOMETHING_NEW', 502)],
|
|
257
257
|
)
|
|
258
|
-
def
|
|
259
|
-
|
|
258
|
+
def test_a_arbora_refusal_keeps_its_status(app, arbora, code, status) -> None:
|
|
259
|
+
arbora.results['retrieval.search'] = httpx.Response(
|
|
260
260
|
403, json={'ok': False, 'error': {'code': code, 'message': 'secret detail'}}
|
|
261
261
|
)
|
|
262
262
|
response = _client(app).get('/api/enhanced/graph/search?query=x')
|
|
@@ -274,22 +274,22 @@ def test_a_graph_os_refusal_keeps_its_status(app, graph_os, code, status) -> Non
|
|
|
274
274
|
)
|
|
275
275
|
# spec: APIUI-06.1
|
|
276
276
|
def test_routes_without_a_served_operation_answer_not_available(
|
|
277
|
-
app,
|
|
277
|
+
app, arbora, path, operation
|
|
278
278
|
) -> None:
|
|
279
279
|
response = _client(app).get(f'/api/enhanced{path}')
|
|
280
280
|
assert response.status_code == 501
|
|
281
281
|
detail = response.json()['detail']
|
|
282
282
|
assert (detail['error'], detail['needs_operation']) == ('not_available', operation)
|
|
283
|
-
assert
|
|
283
|
+
assert arbora.calls == []
|
|
284
284
|
|
|
285
285
|
|
|
286
|
-
def
|
|
287
|
-
|
|
286
|
+
def test_unsafe_graph_queries_never_reach_arbora(app, arbora) -> None:
|
|
287
|
+
arbora.results['query.uql'] = []
|
|
288
288
|
response = _client(app).post(
|
|
289
289
|
'/api/enhanced/graph/query', json={'query': 'MATCH (n) DETACH DELETE n'}
|
|
290
290
|
)
|
|
291
291
|
assert response.status_code == 400
|
|
292
|
-
assert
|
|
292
|
+
assert arbora.calls == []
|
|
293
293
|
|
|
294
294
|
|
|
295
295
|
@pytest.mark.parametrize(
|
|
@@ -303,20 +303,20 @@ def test_unsafe_graph_queries_never_reach_graph_os(app, graph_os) -> None:
|
|
|
303
303
|
('kg:read', 'GET', '/api/enhanced/sessions', 200),
|
|
304
304
|
],
|
|
305
305
|
)
|
|
306
|
-
def
|
|
307
|
-
app,
|
|
306
|
+
def test_route_scopes_gate_before_arbora(
|
|
307
|
+
app, arbora, scope, method, path, expected
|
|
308
308
|
) -> None:
|
|
309
|
-
|
|
309
|
+
arbora.results.update(
|
|
310
310
|
{'query.uql': [], 'retrieval.search': [], 'agents.tasks.list': []}
|
|
311
311
|
)
|
|
312
312
|
response = _client(app, scope).request(
|
|
313
313
|
method, path, json={'query': 'MATCH (n) RETURN n'} if method == 'POST' else None
|
|
314
314
|
)
|
|
315
315
|
assert response.status_code == expected
|
|
316
|
-
assert bool(
|
|
316
|
+
assert bool(arbora.calls) == (expected == 200)
|
|
317
317
|
|
|
318
318
|
|
|
319
|
-
def test_an_unauthenticated_request_is_refused(app,
|
|
319
|
+
def test_an_unauthenticated_request_is_refused(app, arbora) -> None:
|
|
320
320
|
response = TestClient(app).get('/api/enhanced/graph/search?query=x')
|
|
321
321
|
assert response.status_code == 401
|
|
322
|
-
assert
|
|
322
|
+
assert arbora.calls == []
|
|
@@ -1078,7 +1078,7 @@ def set_workspace_helpers(helpers: dict[str, Any]) -> None:
|
|
|
1078
1078
|
def get_engine() -> Any:
|
|
1079
1079
|
"""The WebUI holds no graph engine.
|
|
1080
1080
|
|
|
1081
|
-
Graph data comes from
|
|
1081
|
+
Graph data comes from Arbora served operations. A route that still
|
|
1082
1082
|
needs an in-process engine answers "not available".
|
|
1083
1083
|
"""
|
|
1084
1084
|
raise unavailable('Graph engine', 'query.uql')
|
|
@@ -1966,7 +1966,7 @@ async def delete_mcp_server(server_name: str, hard: bool = False) -> dict[str, A
|
|
|
1966
1966
|
async def call_mcp_tool_route(data: dict[str, Any]) -> dict[str, Any]:
|
|
1967
1967
|
"""Invoke one MCP tool through the served ``fleet.call`` operation.
|
|
1968
1968
|
|
|
1969
|
-
|
|
1969
|
+
Arbora owns the allowlist, actor policy, credentials and audit. The
|
|
1970
1970
|
WebUI checks only the request shape.
|
|
1971
1971
|
"""
|
|
1972
1972
|
|
|
@@ -3114,7 +3114,7 @@ async def get_graph_relationships() -> list[dict[str, Any]]:
|
|
|
3114
3114
|
# ★ THE AGGREGATE IN EVERY QUERY BELOW IS LOAD-BEARING, NOT DECORATION --
|
|
3115
3115
|
# BUT NOT FOR THE REASON THIS COMMENT ORIGINALLY GAVE.
|
|
3116
3116
|
# Measured 2026-08-25 against the live engine (eg 2.27.0, `platform/
|
|
3117
|
-
#
|
|
3117
|
+
# arbora`) the SAME projection with and without an aggregate:
|
|
3118
3118
|
# MATCH (n:Skill) RETURN n.name as name LIMIT 5 -> [] (!)
|
|
3119
3119
|
# MATCH (n:Skill) RETURN n.name as name, count(*) as c -> 308 rows
|
|
3120
3120
|
# MATCH (a)-[r]->(b) RETURN a.id as s, b.id as o -> [] (!)
|
|
@@ -4074,7 +4074,7 @@ _GRAPH_STATS_BY_TYPE_LIMIT = 200
|
|
|
4074
4074
|
# than left as a bare literal) so the value carries its measurement
|
|
4075
4075
|
# rationale and so the regression tests can drive the real deadline path.
|
|
4076
4076
|
#
|
|
4077
|
-
# Measured in-pod (
|
|
4077
|
+
# Measured in-pod (arbora), per single isolated request:
|
|
4078
4078
|
# * 25,121-row tenant graph, 2026-08-25, service principal
|
|
4079
4079
|
# - `SELECT COUNT(*) FROM nodes` .......................... 0.07s
|
|
4080
4080
|
# - `MATCH (a)-[r]->(b) RETURN count(r)` .................. 0.52s
|
|
@@ -4505,7 +4505,7 @@ async def update_memory(memory_id: str, data: dict[str, Any]) -> dict[str, Any]:
|
|
|
4505
4505
|
|
|
4506
4506
|
@router.delete('/graph/memory/{memory_id}')
|
|
4507
4507
|
async def delete_memory(memory_id: str) -> dict[str, Any]:
|
|
4508
|
-
"""Memory deletion needs a served operation that
|
|
4508
|
+
"""Memory deletion needs a served operation that Arbora does not have."""
|
|
4509
4509
|
|
|
4510
4510
|
_validate_runtime_id(memory_id)
|
|
4511
4511
|
raise unavailable('Graph memory deletion', 'memory.delete')
|
|
@@ -6187,7 +6187,7 @@ def _scrub_existing_session_rows(conn: Any) -> None:
|
|
|
6187
6187
|
async def get_all_sessions(limit: int = 50) -> list[dict[str, Any]]:
|
|
6188
6188
|
"""List the caller's agent tasks through ``agents.tasks.list``.
|
|
6189
6189
|
|
|
6190
|
-
|
|
6190
|
+
Arbora scopes the list to the verified caller. The WebUI adds no rows.
|
|
6191
6191
|
"""
|
|
6192
6192
|
|
|
6193
6193
|
value = await served('agents.tasks.list', {'limit': max(1, min(limit, 100))})
|
|
@@ -7582,7 +7582,7 @@ async def _call_mcp_tool(
|
|
|
7582
7582
|
*,
|
|
7583
7583
|
timeout: float = 30.0,
|
|
7584
7584
|
) -> Any:
|
|
7585
|
-
"""Invoke an MCP tool through the host's governed
|
|
7585
|
+
"""Invoke an MCP tool through the host's governed Arbora delegation seam.
|
|
7586
7586
|
|
|
7587
7587
|
The WebUI intentionally never reads launch commands, spawns registry
|
|
7588
7588
|
entries, or composes child environments. The host injects ``call_mcp_tool``
|
|
@@ -8996,7 +8996,7 @@ async def run_workflow(request: Request) -> dict[str, Any]:
|
|
|
8996
8996
|
# Relationship to the canonical gateway routes (drift policy):
|
|
8997
8997
|
#
|
|
8998
8998
|
# * The canonical KG REST surface (/api/graph/*, /api/ontology/*, /api/object/*)
|
|
8999
|
-
# is owned by
|
|
8999
|
+
# is owned by Arbora. An Arbora host mounts it through the public
|
|
9000
9000
|
# ``ApplicationComposer`` port passed to ``create_agent_web_app``; standalone
|
|
9001
9001
|
# WebUI intentionally does not expose those gateway routes.
|
|
9002
9002
|
# * Routes here that have a 1:1 canonical tool twin dispatch through
|
|
@@ -9023,7 +9023,7 @@ async def _canonical_kg_tool(tool_name: str, **kwargs: Any) -> Any:
|
|
|
9023
9023
|
"""Dispatch a call through the canonical KG tool surface.
|
|
9024
9024
|
|
|
9025
9025
|
``agent_utilities.mcp.kg_server.REGISTERED_TOOLS`` holds the single
|
|
9026
|
-
canonical implementation behind both the
|
|
9026
|
+
canonical implementation behind both the arbora MCP tools and the API
|
|
9027
9027
|
gateway's action-routed REST twins. Routes here that mirror one of those
|
|
9028
9028
|
tools 1:1 must dispatch through it — never reimplement the body — so the
|
|
9029
9029
|
webui surface cannot drift from what gateway/MCP clients observe.
|
|
@@ -9043,7 +9043,7 @@ def _raise_canonical_error(result: Any, status_code: int = 500) -> None:
|
|
|
9043
9043
|
# Atlas governed source façade
|
|
9044
9044
|
#
|
|
9045
9045
|
# Atlas does not own a second connector registry. These routes are a typed,
|
|
9046
|
-
# privacy-preserving HTTP façade over the canonical
|
|
9046
|
+
# privacy-preserving HTTP façade over the canonical arbora tools and are kept
|
|
9047
9047
|
# deliberately small so the source-control plane remains authoritative in
|
|
9048
9048
|
# agent-utilities. In particular, a connection declaration contains aliases,
|
|
9049
9049
|
# policy knobs, and opaque profile references only. A DSN, endpoint, identity,
|
|
@@ -12282,7 +12282,7 @@ async def save_ontology_object_view(
|
|
|
12282
12282
|
raise HTTPException(status_code=500, detail=type(e).__name__) from e
|
|
12283
12283
|
|
|
12284
12284
|
|
|
12285
|
-
# Served
|
|
12285
|
+
# Served Arbora operation helpers
|
|
12286
12286
|
|
|
12287
12287
|
|
|
12288
12288
|
async def _write_memory(key: str, data: dict[str, Any]) -> Any:
|
|
@@ -52,7 +52,7 @@ def build_apps_router(apps: list[AppBackend]) -> APIRouter:
|
|
|
52
52
|
def default_apps() -> list[AppBackend]:
|
|
53
53
|
"""The apps this WebUI hosts.
|
|
54
54
|
|
|
55
|
-
Markets reads market signals from the graph.
|
|
55
|
+
Markets reads market signals from the graph. Arbora does not serve a
|
|
56
56
|
market-signal operation yet, so the app reports "not available".
|
|
57
57
|
"""
|
|
58
58
|
|
|
@@ -68,7 +68,7 @@ def default_apps() -> list[AppBackend]:
|
|
|
68
68
|
router=build_markets_router(gateway),
|
|
69
69
|
available=lambda: False,
|
|
70
70
|
unavailable_reason=(
|
|
71
|
-
'Markets is not available:
|
|
71
|
+
'Markets is not available: Arbora does not serve the '
|
|
72
72
|
'markets.signals.read operation yet.'
|
|
73
73
|
),
|
|
74
74
|
)
|