agent-webui 2.8.2__tar.gz → 2.8.3__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.8.2 → agent_webui-2.8.3}/PKG-INFO +65 -54
- agent_webui-2.8.3/README.md +135 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__tests__/test_browser_control.py +114 -3
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__tests__/test_oidc_session.py +78 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__tests__/test_run_identity.py +111 -1
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__tests__/test_security_boundaries.py +155 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__tests__/test_workspace_helpers_chokepoint.py +20 -1
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/browser_control.py +50 -2
- agent_webui-2.8.3/agent/agent_webui/dist/assets/AdminView-Cr-K2QMy.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/AgentLibraryView-Dy527WTZ.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/ArboraReadinessView-Ck11bobs.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/AtlasView-xc-KWBhz.js +5 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/Availability-6sZvWPY8.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/BrokerView-DHPqPg8t.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/CatalogueView-BAoRHToO.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/ChartPage-MBkSENf4.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/ChartPanel-ByG-AwHr.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/CodeGraphView-BqeA8P80.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/ConfigurationView-CnUXSXDA.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/ConsoleConfirmView-CJO3Fn9C.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/ContactPage-D1wMd6dJ.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/CypherReplView-Cf4P4Beg.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/DashboardView-07o5xP8n.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/DashboardsView-CzrRymM0.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/DataAnalystView-zmxf0LeM.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/EcosystemView-CAQdeuWm.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/ExploreQueryWorkspace-BJ26pzMo.css +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/ExploreQueryWorkspace-pTN3wIt1.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/ExtractionView-DBZo9RzB.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/FilesView-BOaBDQrc.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/FleetView-BIf39emL.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/GoalsView-CSBNseRR.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/Graph3DLodView-DRdKV-UK.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/Graph3DView-CKvr12_O.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/GraphCanvas-B7n5FC0f.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/GraphView-CJiqwtSR.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/ImportExportModal-DG2LArjK.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/IntegrationsView-Dbzh_WYX.js +2 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/KnowledgeBaseView-DpAJYfqR.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/KnowledgeView-Drb0WUc-.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/LLMTemplatesView-BT5Rd_ez.js +1 -0
- agent_webui-2.8.2/agent/agent_webui/dist/assets/LearnView-CwniIN2x.js → agent_webui-2.8.3/agent/agent_webui/dist/assets/LearnView-CML6XpcP.js +2 -2
- agent_webui-2.8.3/agent/agent_webui/dist/assets/LegalPageContent-Bm_CBUGE.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/LiveDashboardsView-C1dGr12m.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/MagmaView-CEfvw6kO.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/MarketsCalendar-Fton5_7h.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/MarketsHome-Dn9nH7XL.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/MarketsMenu-dagQnbiy.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/MarketsNews-KMxwr5q6.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/MarketsPortfolio-Pg4gF-Jr.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/MarketsShell-vfOQzaYr.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/McpAppsView-BY7WiRUp.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/MemoryView-BWguya_c.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/NodeTypeBreakdown-C_hdpGrL.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/NotFoundPage-CIzsJJ-z.js +1 -0
- agent_webui-2.8.2/agent/agent_webui/dist/assets/Notices-BMgxi7sA.js → agent_webui-2.8.3/agent/agent_webui/dist/assets/Notices-jXTJAa7a.js +1 -1
- agent_webui-2.8.3/agent/agent_webui/dist/assets/ObjectExplorerView-BU_OUMW_.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/ObjectView-ErFXylGv.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/ObservabilityView-CWF8HbP6.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/OperateWorkspace-Dk36newj.css +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/OperateWorkspace-OyVFI3A0.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/OpsPanelView-t8KKflmu.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/PrivacyPage-DxysQLTX.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/PromptsView-kb7bJ9bo.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/PublicPageLayout-Ue-pLK8W.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/SDDView-CWkLtDkZ.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/SchedulingView-YOf2WX_h.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/SchemaView-T2X3SMsb.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/SessionExpiredNotice-CmOpwgL0.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/SessionsView-CRVJfECu.js +1 -0
- agent_webui-2.8.2/agent/agent_webui/dist/assets/SharePage-DUJXSbfY.js → agent_webui-2.8.3/agent/agent_webui/dist/assets/SharePage-Bq9Akv3R.js +1 -1
- agent_webui-2.8.3/agent/agent_webui/dist/assets/SkillsView-C2a1AtcW.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/SparqlView-D4TN2exF.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/SystemStatusView-ceUFxi3A.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/TableExplorerView-D0LTHSGV.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/TemporalGraphView-Bej-2oHX.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/TermsPage-kQCR0E2Q.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/ThankYouPage-C8B3L_nM.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/TrendBadge-Uz9XP-FT.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/UsageAnalytics-Byb-C2Mf.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/UsageView-BntJWZjM.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/UserManagementView-B0sVWQ8U.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/VertexView-C1t2-FBv.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/VizDemoView-aTcthAUj.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/WorkWorkspace-e84JW5Nx.js +1 -0
- agent_webui-2.8.2/agent/agent_webui/dist/assets/WorkflowEditorView-DLioOiRN.css → agent_webui-2.8.3/agent/agent_webui/dist/assets/WorkflowEditor-BBi0xqfA.css +1 -1
- agent_webui-2.8.3/agent/agent_webui/dist/assets/WorkflowEditor-vqFhHucI.js +7 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/WorkflowEditorView-DlgHpFDV.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/WorkspaceEntry-BFu89uhg.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/WorkspaceIDEView-xi7J6mPj.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/activity-wxK2oia9.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/agent-webui-logo-v1-VWdN6xka.png +0 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/api-BagsM1RI.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/api-validation-NpkvZISL.js +55 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/app-window-CbIjaWcA.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/arbora-canopy-wallpaper-DNkGKAAT.webp +0 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/arrow-right-B6o8ih31.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/arrow-up-pAvlwflr.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/badge-DgRsOs_B.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/ban-CntMVRjX.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/book-CZOS2z52.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/bot-DJubVMbb.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/boxes-DjGrU3EE.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/braces-LlpoK2cB.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/brain-CMWtd-dG.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/bundle-mjs-BrzRq6pJ.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/button-FiWvpk0-.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/calendar-Dn_su29R.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/check-CeqQMSxo.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/chevron-down-GCd0KYkz.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/chevron-left-BU-gzZmi.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/chevron-right-DG5uuC3t.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/chevron-up-D5LHzLPe.js +1 -0
- agent_webui-2.8.2/agent/agent_webui/dist/assets/chunk-D32TOXHM-DlmBzSI9.js → agent_webui-2.8.3/agent/agent_webui/dist/assets/chunk-D32TOXHM-USeHa1y6.js +8 -8
- agent_webui-2.8.3/agent/agent_webui/dist/assets/circle-alert-Dh5nOe-b.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/circle-check-big-C6wDMbX1.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/circle-dot-DCiCuTUk.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/circle-x-CuJysPOj.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/clock-BmTGvU7y.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/code-CG6BKKdO.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/collapsible-DrQehFiG.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/compass-DwUxHGlu.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/consent-wR2n6tPB.js +1 -0
- agent_webui-2.8.2/agent/agent_webui/dist/assets/contact-C94LhKRg.js → agent_webui-2.8.3/agent/agent_webui/dist/assets/contact-BsP_1Kh_.js +1 -1
- agent_webui-2.8.3/agent/agent_webui/dist/assets/cpu-IYheat0H.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/database-D_ZttHD3.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/dialog-C3M4cCWP.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/dist-B9MWMbbp.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/dist-B9T39wqA.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/dist-B9it-s2D.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/dist-BoWlX7Of.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/dist-Cq_kZFns.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/dist-GVDnsA1_.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/dist-RgA-h0i1.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/dist-_usKwZhw.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/dist-cloPsfHP.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/download-DDm8WZfp.js +1 -0
- agent_webui-2.8.2/agent/agent_webui/dist/assets/es2015-CgZynitj.js → agent_webui-2.8.3/agent/agent_webui/dist/assets/es2015-93DYJMMo.js +1 -1
- agent_webui-2.8.3/agent/agent_webui/dist/assets/external-link-BEYSemmH.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/eye-DZ8zkkBt.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/file-text-ohb7m22K.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/funnel-BysCvpUj.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/gateway-d57Ii4vf.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/gauge-Doo-Y0cP.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/git-branch-Dz6e7QKj.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/globe-CC6xr668.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/graduation-cap-suZkOdGm.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/graph-read-MhXhOTws.js +1 -0
- agent_webui-2.8.2/agent/agent_webui/dist/assets/graphology-layout-forceatlas2-CF_uOjtN.js → agent_webui-2.8.3/agent/agent_webui/dist/assets/graphology-layout-forceatlas2-C9kVFb6Q.js +3 -3
- agent_webui-2.8.3/agent/agent_webui/dist/assets/hard-drive-FQarD2TZ.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/highlighted-body-KQOG7T2V-4Cs5B11g.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/hourglass-Ca2eYKO-.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/identity-CsWtEhpA.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/image-BsluAxxt.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/inbox-C1dzKQk5.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/index-By339qhL.css +2 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/index-p_B93mfq.js +16 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/index.browser-GOpg5kdt.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/jsx-runtime-EIAPxkjE.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/layers-B7z2_C1d.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/layout-grid-DrflND0U.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/link-2-BIhrKCW0.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/loaded-workspace-commands-Bkw62-xT.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/loader-circle-C6dXhor8.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/mermaid-MCJ5UELQ-BDf1kS1X.js +1 -0
- agent_webui-2.8.2/agent/agent_webui/dist/assets/model-BPtIOW9U.js → agent_webui-2.8.3/agent/agent_webui/dist/assets/model-CfRgAerm.js +2 -2
- agent_webui-2.8.3/agent/agent_webui/dist/assets/network-B8biYPFN.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/operate-compatibility-BI5DYA0I.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/package-DbqJfmpB.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/page-context-yj_FdVFS.js +2 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/play-BbqKXliZ.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/plus-DkkwBcr8.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/queries-BjluSJ_Z.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/react-dom-Bmqbd4fh.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/refresh-cw-C2inm5h6.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/response-CwJPC4rU.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/rotate-ccw-clock-XB6OIEbP.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/safe-url-C7XOIHnu.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/save-9e_SXAQN.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/scan-search-DXSdHF8a.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/scroll-area-DtbNJ7K7.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/search-Baccawhn.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/select-DMICaw4O.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/send-kQ1twOSu.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/server-DFqSs-ao.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/settings-2-3T7XPfF0.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/settings-BKuH_tfP.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/share-2-Bvud2MTX.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/shield-alert-eylgu0XC.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/shield-check-DjYPuGYF.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/shield-question-mark-B3zHwcr5.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/sliders-vertical-DRiOgkZe.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/sparkles-BT04vi9E.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/status-message-B032XQ9h.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/switch-CXJT2aVa.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/table-2-D_o4NMrW.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/tabs-B_IKOhlf.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/tag-DqYtL7Of.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/terminal-DplDmRLk.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/textarea-BIj9GK42.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/theme-colors-DxWt_FzQ.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/tooltip-9HcvWpVw.js +1 -0
- agent_webui-2.8.2/agent/agent_webui/dist/assets/transport-Din6U5N9.js → agent_webui-2.8.3/agent/agent_webui/dist/assets/transport-C19qbzVc.js +1 -1
- agent_webui-2.8.3/agent/agent_webui/dist/assets/trending-up-Di2w79Fh.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/triangle-alert-DWaRrWWw.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/unavailable-notice-Co6u2AUq.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/undo-2-DiHLbKTR.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/upload-BT-awznv.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/uql-BEW3dWVd.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/useConversationIdFromUrl-BXmIOzca.css +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/useConversationIdFromUrl-pT7QYKB7.js +35 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/useMutation-CpT5O_Zp.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/useQuery-BQzVeXO6.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/useWorkspaceAdmission-sHF3mnnG.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/utils-De6WF9ua.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/wallet-DP5mac_p.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/waypoints-Cg1JEUr1.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/wifi-off-CpiBqL-3.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/workflow-DpYfp5ES.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/wrench-BswmnjxE.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/x-UdLPE6b2.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/assets/zap-DpOOMBfX.js +1 -0
- agent_webui-2.8.3/agent/agent_webui/dist/index.html +129 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/dist/site.webmanifest +2 -2
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/dist/spa-routes.json +2 -1
- agent_webui-2.8.3/agent/agent_webui/local_browser_boundary.py +39 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/oidc_session.py +33 -11
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/orchestrator_model.py +20 -2
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/server.py +23 -2
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/skills/agent-webui-development/SKILL.md +1 -1
- agent_webui-2.8.3/agent/agent_webui/turn_usage.py +44 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui.egg-info/PKG-INFO +65 -54
- agent_webui-2.8.3/agent/agent_webui.egg-info/SOURCES.txt +319 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui.egg-info/requires.txt +3 -3
- {agent_webui-2.8.2 → agent_webui-2.8.3}/pyproject.toml +5 -5
- agent_webui-2.8.3/tests/test_ci_browser_gate.py +115 -0
- agent_webui-2.8.3/tests/test_ci_python_scope.py +165 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/tests/test_explicit_auth_modes.py +16 -14
- agent_webui-2.8.3/tests/test_gate_wrappers.py +136 -0
- agent_webui-2.8.3/tests/test_local_browser_boundary.py +92 -0
- agent_webui-2.8.3/tests/test_logfire_host_console.py +70 -0
- agent_webui-2.8.3/tests/test_oidc_configuration_intent.py +110 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/tests/test_release_concurrency.py +7 -1
- {agent_webui-2.8.2 → agent_webui-2.8.3}/tests/test_release_publication.py +28 -1
- agent_webui-2.8.2/README.md +0 -124
- agent_webui-2.8.2/agent/agent_webui/dist/assets/AdminView-BIFRCbto.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/AgentLibraryView-aNq65894.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/ArboraReadinessView-BmWLG_D9.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/AtlasView-bOHeqjzz.js +0 -5
- agent_webui-2.8.2/agent/agent_webui/dist/assets/Availability-DcNRbzdy.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/BrokerView-B3w_c03n.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/CatalogueView-B0iAT03z.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/ChartPage-CRAD2z1k.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/ChartPanel-Cxpkw3a6.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/CodeGraphView-BeQf4kUO.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/ConfigurationView-B7myL6KX.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/ConsoleConfirmView-DC8vQRT4.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/ContactPage-CrUMpT6z.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/CypherReplView-B_Gps99Z.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/DashboardView-Dxfr5-0-.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/DashboardsView-DAhfgrRe.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/DataAnalystView-DTZm34Nz.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/EcosystemView-KfiSPiGs.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/ExploreQueryWorkspace-Dd3_FYVu.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/ExtractionView-VASGV56_.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/FilesView-DLrYatRc.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/FleetView-C99Ga-hI.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/GoalsView-DAu9qK9a.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/Graph3DLodView-Bsfy0liY.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/Graph3DView-DwJKaNXc.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/GraphCanvas-D615Ydp_.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/GraphView-BPbJ01X-.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/ImportExportModal-B3fBFl0t.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/IntegrationsView-BoP-b04a.js +0 -2
- agent_webui-2.8.2/agent/agent_webui/dist/assets/KnowledgeBaseView-jMCJn12P.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/KnowledgeView-C08lo1OX.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/LLMTemplatesView-DPgr4JMg.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/LegalPageContent-BmhwYoKV.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/LiveDashboardsView-BVlEIber.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/MagmaView-Btqs3FEc.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/MarketsCalendar-CzDpujKF.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/MarketsHome-CDlfVGyj.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/MarketsMenu-B1bHhcpg.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/MarketsNews-DLO5rNe6.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/MarketsPortfolio-CFPLxeNB.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/MarketsShell-NPgz5G8J.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/McpAppsView-w7Dr4bvn.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/MemoryView-aQG3zHCd.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/NodeTypeBreakdown-BOMv1ZeK.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/NotFoundPage-C2ECSjyN.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/ObjectExplorerView--g4BJ5dV.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/ObjectView-CbIoH6sb.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/ObservabilityView-CfalBbSz.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/OperateWorkspace-D400qwDi.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/OpsPanelView-BVKeYxwT.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/PrivacyPage-B5f2BGOV.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/PromptsView-loJvVKRN.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/PublicPageLayout-_LKXfe3w.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/SDDView-Zjr9UcvP.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/SchedulingView-DR8FPiLA.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/SchemaView-ChSQqt9G.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/SessionExpiredNotice-CMttDxWl.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/SessionsView-BwsQSk7r.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/SkillsView-01A_BKpo.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/SparqlView-CaTSeagP.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/SystemStatusView-CzjDdbH1.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/TableExplorerView-Ctnjs49l.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/TemporalGraphView-DmNuWXin.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/TermsPage-Dq5ZQToT.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/ThankYouPage-CRs3DWs5.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/TrendBadge-DwOOOIwz.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/UsageView-DekU27sG.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/UserManagementView-DzKgnC7G.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/VertexView-COILYrFt.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/VizDemoView-DmUb9Zv5.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/WorkWorkspace-DOjWpb5z.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/WorkflowEditorView-Bx4xegQ5.js +0 -7
- agent_webui-2.8.2/agent/agent_webui/dist/assets/WorkspaceIDEView-CXBs7DX5.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/activity-DupAOJCR.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/api-jtHn_WxH.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/api-validation-CCoR_LRu.js +0 -55
- agent_webui-2.8.2/agent/agent_webui/dist/assets/app-window-KMAPJoaW.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/arrow-up-DpBEFU1W.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/badge-nQZ87mVE.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/braces-BNz2iAeD.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/bundle-mjs-DIyOrgL5.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/check-CPVKKX8l.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/chevron-down-DYWnPQti.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/chevron-left-BaGXvfgm.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/chevron-right-gs8WU8XT.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/chevron-up-C-rjGU5C.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/circle-alert-ByZ-1ERr.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/circle-dot-In4UilqT.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/createLucideIcon-DTQSidPf.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/dist-2txhAIHO.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/dist-BHmo3Yb6.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/dist-BKkt828_.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/dist-BLRfKgTy.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/dist-BjAObXUn.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/dist-Bq6o2UDR.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/dist-DMVqwVuR.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/dist-DcreYulP.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/dist-mp1aFJDC.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/external-link-Dyd5OsGm.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/eye-D0gCj30e.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/file-text-DqorJKDA.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/folder-open-BrzeUmMg.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/funnel-Y4IuN8Q7.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/hard-drive-9fR5RFS9.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/highlighted-body-KQOG7T2V-rcYJ5xue.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/hourglass-1ui486hR.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/identity-Ba52P5P-.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/index-CdIjHcNl.css +0 -2
- agent_webui-2.8.2/agent/agent_webui/dist/assets/index-GCzCgfSc.js +0 -46
- agent_webui-2.8.2/agent/agent_webui/dist/assets/layout-grid-B4IFpzLD.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/link-2-a9RZxW2S.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/loaded-workspace-commands-BAiOXoYc.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/mermaid-MCJ5UELQ-B2-BBYrw.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/play-D3mjq--Q.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/plus-s20KYBeu.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/queries-Bn_hp_Ib.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/react-dom-DAxA-E-a.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/refresh-cw-BVhl5aJX.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/save-CuEdPPgC.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/scan-search-GrqJngl3.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/scroll-area-srEWz9Q3.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/server-CE-xbAAj.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/sliders-vertical-Cr4E50uY.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/sparkles-Bae0tRI0.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/status-message-4rJx-ibz.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/switch-B9Yml2pU.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/tabs-Bzz5t0iB.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/tag-D1RiwxuF.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/theme-colors-DKGWsgC0.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/unavailable-notice-B7WdWNor.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/undo-2-D4EYZLW8.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/upload-DcybBZCN.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/uql-H85wtqTc.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/useMutation-Bw3sL9K4.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/useQuery-BCV_z3lS.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/utils-C0okervd.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/wifi-off-Dz91unNp.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/assets/x-BdA_yxUR.js +0 -1
- agent_webui-2.8.2/agent/agent_webui/dist/index.html +0 -71
- agent_webui-2.8.2/agent/agent_webui.egg-info/SOURCES.txt +0 -246
- agent_webui-2.8.2/tests/test_gate_wrappers.py +0 -69
- {agent_webui-2.8.2 → agent_webui-2.8.3}/LICENSE +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__init__.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__tests__/conftest.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__tests__/test_api_extensions.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__tests__/test_bound_sweep_regressions.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__tests__/test_bug_012_github_gitlab_contract.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__tests__/test_chat_resource_routes.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__tests__/test_contact_delivery.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__tests__/test_files_endpoints.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__tests__/test_host.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__tests__/test_markets_app.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__tests__/test_observability.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__tests__/test_parity_contract.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__tests__/test_pydantic_ai_compat.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__tests__/test_rbac.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__tests__/test_served_operations.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/__tests__/test_spa_http_status.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/api_extensions.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/apps/__init__.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/apps/markets/__init__.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/apps/markets/catalog.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/apps/markets/chart.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/apps/markets/gateway.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/apps/markets/router.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/apps/markets/scanner.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/apps/markets/series.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/apps/markets/session.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/apps/markets/snapshots.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/apps/markets/timeframes.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/auth_policy.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/browser_control_canonical.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/contact_delivery.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/dist/apple-touch-icon.png +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/dist/assets/InterVariable-DiVDrmQJ.woff2 +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/dist/assets/dist-CWmwEm73.js +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/dist/assets/format-DHsGNrOH.js +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/dist/assets/layout.worker-CnC9u5pP.js +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/dist/assets/preload-helper-BLdHbfdN.js +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/dist/favicon-16x16.png +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/dist/favicon-32x32.png +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/dist/favicon-48x48.png +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/dist/favicon.ico +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/dist/favicon.png +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/dist/favicon.svg +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/dist/icon-192x192.png +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/dist/icon-512x512.png +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/dist/og-image-v1.png +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/dist/og-image-v1.svg +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/dist/robots.txt +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/dist/sitemap.xml +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/host.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/icon.png +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/observability.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/public_shell.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/rbac.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/skills/__init__.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/skills/kg-webui-admin/SKILL.md +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/skills/kg-webui-dashboards/SKILL.md +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/skills/kg-webui-extraction/SKILL.md +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/skills/kg-webui-graphviz/SKILL.md +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/skills/kg-webui-ontology-operator/SKILL.md +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui/skills/kg-webui-swe/SKILL.md +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui.egg-info/dependency_links.txt +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui.egg-info/entry_points.txt +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/agent/agent_webui.egg-info/top_level.txt +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/setup.cfg +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/tests/test_dashboard_entrypoint.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/tests/test_eslint_hook_contract.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/tests/test_graph_visualization.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/tests/test_health_liveness_endpoint.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/tests/test_identity_boundary.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/tests/test_init.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/tests/test_log_failure_error_code.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/tests/test_package_author_privacy.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/tests/test_privacy_boundaries.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/tests/test_release_gate_order.py +0 -0
- {agent_webui-2.8.2 → agent_webui-2.8.3}/tests/test_startup.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-webui
|
|
3
|
-
Version: 2.8.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 2.8.3
|
|
4
|
+
Summary: Overstory: the browser workspace for Arbora
|
|
5
5
|
Author-email: Repository Maintainers <maintainers@knuckles.team>
|
|
6
6
|
License: MIT
|
|
7
7
|
Classifier: Development Status :: 4 - Beta
|
|
@@ -15,13 +15,13 @@ Classifier: Programming Language :: Python :: 3.14
|
|
|
15
15
|
Requires-Python: >=3.12
|
|
16
16
|
Description-Content-Type: text/markdown
|
|
17
17
|
License-File: LICENSE
|
|
18
|
-
Requires-Dist:
|
|
19
|
-
Requires-Dist:
|
|
18
|
+
Requires-Dist: meristem<5,>=4.0.1
|
|
19
|
+
Requires-Dist: scion-sdk<1.0.0,>=0.5.6
|
|
20
20
|
Requires-Dist: httpx>=0.28.1
|
|
21
21
|
Requires-Dist: msgpack>=1.1.0
|
|
22
22
|
Requires-Dist: fastapi>=0.143.3
|
|
23
23
|
Requires-Dist: langfuse>=5.0.2
|
|
24
|
-
Requires-Dist: pydantic-ai-slim[ui]==2.
|
|
24
|
+
Requires-Dist: pydantic-ai-slim[ui]==2.63.0
|
|
25
25
|
Requires-Dist: python-multipart>=0.0.32
|
|
26
26
|
Requires-Dist: sse-starlette>=3.5.0
|
|
27
27
|
Requires-Dist: starlette>=1.8.0
|
|
@@ -44,110 +44,117 @@ Requires-Dist: opentelemetry-instrumentation-fastapi>=0.65b0; extra == "test"
|
|
|
44
44
|
Requires-Dist: opentelemetry-instrumentation-asgi>=0.65b0; extra == "test"
|
|
45
45
|
Dynamic: license-file
|
|
46
46
|
|
|
47
|
-
#
|
|
47
|
+
# Overstory
|
|
48
48
|
|
|
49
49
|
<p align="center">
|
|
50
|
-
<img src="docs/assets/brands/agent-webui-logo-v1.png" alt="
|
|
50
|
+
<img src="docs/assets/brands/agent-webui-logo-v1.png" alt="Overstory logo" width="160" />
|
|
51
51
|
</p>
|
|
52
52
|
|
|
53
|
+
Overstory is the browser workspace for Arbora. The repository is `overstory`;
|
|
54
|
+
the package remains `agent-webui`. Existing gallery images retain their original capture provenance.
|
|
55
|
+
|
|
53
56
|
<p align="center">
|
|
54
57
|
<strong>The browser workspace for governed agents, workflows, and knowledge in Arbora.</strong><br>
|
|
55
|
-
<sub>Conversations · approvals · workflows · fleet activity ·
|
|
58
|
+
<sub>Conversations · approvals · workflows · fleet activity · Understory knowledge views</sub>
|
|
56
59
|
</p>
|
|
57
60
|
|
|
58
61
|
<p align="center">
|
|
59
62
|
|
|
60
63
|
[](https://pypi.org/project/agent-webui/)
|
|
61
|
-
[](https://knuckles-team.github.io/
|
|
63
|
-
[](https://github.com/Knuckles-Team/overstory/actions/workflows/release.yml)
|
|
65
|
+
[](https://knuckles-team.github.io/overstory/)
|
|
66
|
+
[](LICENSE)
|
|
67
|
+
[](https://github.com/Knuckles-Team/overstory/actions/workflows/pages.yml)
|
|
65
68
|
[](https://pypi.org/project/agent-webui/)
|
|
66
69
|
[](https://pypi.org/project/agent-webui/)
|
|
67
70
|
[](https://pypi.org/project/agent-webui/)
|
|
68
71
|
[](https://pypi.org/project/agent-webui/)
|
|
69
|
-
[](https://img.shields.io/github/last-commit/Knuckles-Team/
|
|
73
|
-
[](https://img.shields.io/github/directory-file-count/Knuckles-Team/
|
|
72
|
+
[](https://github.com/Knuckles-Team/overstory/stargazers)
|
|
73
|
+
[](https://github.com/Knuckles-Team/overstory/forks)
|
|
74
|
+
[](https://github.com/Knuckles-Team/overstory/graphs/contributors)
|
|
75
|
+
[](https://github.com/Knuckles-Team/overstory/commits/main)
|
|
76
|
+
[](https://github.com/Knuckles-Team/overstory/pulls)
|
|
77
|
+
[](https://github.com/Knuckles-Team/overstory/pulls?q=is%3Apr+is%3Aclosed)
|
|
78
|
+
[](https://github.com/Knuckles-Team/overstory/issues)
|
|
79
|
+
[](https://github.com/Knuckles-Team/overstory)
|
|
80
|
+
[](https://github.com/Knuckles-Team/overstory)
|
|
81
|
+
[](https://github.com/Knuckles-Team/overstory)
|
|
82
|
+
[](https://github.com/Knuckles-Team/overstory)
|
|
80
83
|
|
|
81
84
|
</p>
|
|
82
85
|
|
|
83
86
|
<p align="center">
|
|
84
|
-
<a href="https://knuckles-team.github.io/
|
|
85
|
-
<a href="https://knuckles-team.github.io/
|
|
86
|
-
<a href="https://knuckles-team.github.io/
|
|
87
|
-
<a href="https://knuckles-team.github.io/
|
|
87
|
+
<a href="https://knuckles-team.github.io/overstory/">Documentation</a> ·
|
|
88
|
+
<a href="https://knuckles-team.github.io/overstory/features/">Capabilities</a> ·
|
|
89
|
+
<a href="https://knuckles-team.github.io/overstory/architecture/">Interfaces</a> ·
|
|
90
|
+
<a href="https://knuckles-team.github.io/overstory/status/">Status</a>
|
|
88
91
|
</p>
|
|
89
92
|
|
|
90
|
-

|
|
94
|
+
|
|
95
|
+
The conversation-first workspace uses synthetic demo data, not a live account.
|
|
96
|
+
Open **Settings** for theme, surface and privacy choices.
|
|
97
|
+
See the [workspace gallery and screenshot refresh guide](docs/screenshots.md).
|
|
91
98
|
|
|
92
99
|
## Overview
|
|
93
100
|
|
|
94
|
-
|
|
95
|
-
conversations, approvals, workflows, fleet activity, and
|
|
101
|
+
Overstory is the browser workspace composed by Arbora. It brings agent
|
|
102
|
+
conversations, approvals, workflows, fleet activity, and Medulla
|
|
96
103
|
exploration into one React application. Its FastAPI host keeps privileged
|
|
97
104
|
credentials and gateway delegation on the server side.
|
|
98
105
|
|
|
99
|
-
|
|
|
106
|
+
| Overstory owns | Other components own |
|
|
100
107
|
|---|---|
|
|
101
|
-
| Browser presentation, local interaction state, accessible route composition, and the FastAPI boundary | Arbora owns public routing, identity, policy, and fleet supervision;
|
|
108
|
+
| Browser presentation, local interaction state, accessible route composition, and the FastAPI boundary | Arbora owns public routing, identity, policy, and fleet supervision; Meristem applies supplied plans; Medulla owns durable knowledge; connector services own external-system effects |
|
|
102
109
|
|
|
103
|
-
Current package Version: 2.8.
|
|
110
|
+
Current package Version: 2.8.3.
|
|
104
111
|
|
|
105
112
|
## Key capabilities
|
|
106
113
|
|
|
107
114
|
- Stream agent responses with sources, governed tool activity, and approval prompts.
|
|
108
115
|
- Build and run workflows while observing sessions, goals, schedules, and fleet health.
|
|
109
|
-
- Explore property graphs, RDF, schemas, objects, tables, documents, code, and memories through
|
|
116
|
+
- Explore property graphs, RDF, schemas, objects, tables, documents, code, and memories through Understory and Medulla.
|
|
110
117
|
- Discover MCP Apps and connector capabilities without exposing service credentials to the browser.
|
|
111
118
|
- Apply one role-aware navigation and server authorization model across the complete workspace.
|
|
112
119
|
- Run as the Arbora-hosted browser co-service or as an independently deployed ASGI application.
|
|
113
120
|
|
|
114
121
|
## Documentation
|
|
115
122
|
|
|
116
|
-
Start with the [
|
|
123
|
+
Start with the [Overstory documentation](https://knuckles-team.github.io/overstory/),
|
|
117
124
|
then use the shared platform map to move between components:
|
|
118
125
|
|
|
119
126
|
| Component | Role | Documentation |
|
|
120
127
|
|---|---|---|
|
|
121
|
-
|
|
|
122
|
-
|
|
|
123
|
-
|
|
|
124
|
-
| Arbora messaging |
|
|
128
|
+
| Overstory | Browser operator workspace and Understory knowledge views | [Docs](https://knuckles-team.github.io/overstory/) |
|
|
129
|
+
| Tuig | Terminal and headless client; central A2A/REST and experimental headless local ACP; full session parity remains unqualified | [Docs](https://knuckles-team.github.io/tuig/) |
|
|
130
|
+
| Axil | Desktop cockpit for chat, graph, fleet, health, and operator workflows | [Docs](https://knuckles-team.github.io/axil/) |
|
|
131
|
+
| Arbora messaging | Chat and voice entrypoints hosted by Arbora | [Docs](https://knuckles-team.github.io/arbora/) |
|
|
125
132
|
| Arbora | Public MCP, REST, A2A, identity, policy, and runtime composition | [Docs](https://knuckles-team.github.io/arbora/) |
|
|
126
|
-
|
|
|
127
|
-
|
|
|
128
|
-
|
|
|
133
|
+
| Meristem | In-run harness that applies supplied plans | [Docs](https://knuckles-team.github.io/meristem/) |
|
|
134
|
+
| Medulla | Durable multimodal data, reasoning, provenance, and transactions | [Docs](https://knuckles-team.github.io/medulla/) |
|
|
135
|
+
| Scion SDK | Typed source adapters, connector serving, and write-back contracts | [Docs](https://knuckles-team.github.io/scion-sdk/) |
|
|
129
136
|
|
|
130
137
|
## Architecture
|
|
131
138
|
|
|
132
|
-
[](https://knuckles-team.github.io/.github/architecture/#webui)
|
|
133
140
|
|
|
134
141
|
[Explore the live architecture](https://knuckles-team.github.io/.github/architecture/#webui)
|
|
135
142
|
|
|
136
|
-
People also enter through
|
|
137
|
-
messaging
|
|
138
|
-
|
|
139
|
-
only to its same-origin FastAPI host. Arbora injects gateway routes and
|
|
140
|
-
verified request context
|
|
141
|
-
durable knowledge
|
|
142
|
-
|
|
143
|
+
People also enter through Tuig and Axil or Arbora-hosted
|
|
144
|
+
messaging. Tuig retains central A2A/REST and experimental headless local ACP;
|
|
145
|
+
full session parity remains unqualified. External applications connect over MCP,
|
|
146
|
+
REST, or A2A. The browser talks only to its same-origin FastAPI host. Arbora injects gateway routes and
|
|
147
|
+
verified request context. Meristem applies supplied plans; Medulla owns
|
|
148
|
+
durable knowledge. Source systems connect through Scion SDK
|
|
149
|
+
directly to Medulla. Overstory renders typed results
|
|
143
150
|
and local presentation state while each service retains its own authority.
|
|
144
151
|
|
|
145
|
-
See the [architecture guide](https://knuckles-team.github.io/
|
|
152
|
+
See the [architecture guide](https://knuckles-team.github.io/overstory/architecture/)
|
|
146
153
|
for the request flow and trust boundaries.
|
|
147
154
|
|
|
148
155
|
## Quick start
|
|
149
156
|
|
|
150
|
-
Generate a local profile and start Arbora with
|
|
157
|
+
Generate a local profile and start Arbora with Overstory enabled:
|
|
151
158
|
|
|
152
159
|
```bash
|
|
153
160
|
uvx --from "arbora[webui]" setup-config generate --profile tiny
|
|
@@ -156,7 +163,7 @@ uvx --from "arbora[webui]" arbora --transport streamable-http --host 127.0.0.1 -
|
|
|
156
163
|
```
|
|
157
164
|
|
|
158
165
|
Open <http://127.0.0.1:8080>. Arbora serves MCP on port `8000` and the Agent
|
|
159
|
-
Web UI co-service on port `8080`. The [start guide](https://knuckles-team.github.io/
|
|
166
|
+
Web UI co-service on port `8080`. The [start guide](https://knuckles-team.github.io/overstory/start/)
|
|
160
167
|
covers local source development and deployment profiles.
|
|
161
168
|
|
|
162
169
|
## Contributing
|
|
@@ -165,6 +172,10 @@ Issues and pull requests are welcome. Read [AGENTS.md](AGENTS.md), keep browser
|
|
|
165
172
|
and server authority boundaries intact, and run the repository validation suite
|
|
166
173
|
before opening a pull request.
|
|
167
174
|
|
|
175
|
+
Refresh the documented workspace views with `pnpm screenshots:refresh`. See the
|
|
176
|
+
[screenshot guide](docs/screenshots.md) for synthetic fixtures, hosted capture,
|
|
177
|
+
provenance and review before committing refreshed images.
|
|
178
|
+
|
|
168
179
|
## License
|
|
169
180
|
|
|
170
|
-
|
|
181
|
+
Overstory is available under the [MIT License](LICENSE).
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Overstory
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="docs/assets/brands/agent-webui-logo-v1.png" alt="Overstory logo" width="160" />
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
Overstory is the browser workspace for Arbora. The repository is `overstory`;
|
|
8
|
+
the package remains `agent-webui`. Existing gallery images retain their original capture provenance.
|
|
9
|
+
|
|
10
|
+
<p align="center">
|
|
11
|
+
<strong>The browser workspace for governed agents, workflows, and knowledge in Arbora.</strong><br>
|
|
12
|
+
<sub>Conversations · approvals · workflows · fleet activity · Understory knowledge views</sub>
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
<p align="center">
|
|
16
|
+
|
|
17
|
+
[](https://pypi.org/project/agent-webui/)
|
|
18
|
+
[](https://github.com/Knuckles-Team/overstory/actions/workflows/release.yml)
|
|
19
|
+
[](https://knuckles-team.github.io/overstory/)
|
|
20
|
+
[](LICENSE)
|
|
21
|
+
[](https://github.com/Knuckles-Team/overstory/actions/workflows/pages.yml)
|
|
22
|
+
[](https://pypi.org/project/agent-webui/)
|
|
23
|
+
[](https://pypi.org/project/agent-webui/)
|
|
24
|
+
[](https://pypi.org/project/agent-webui/)
|
|
25
|
+
[](https://pypi.org/project/agent-webui/)
|
|
26
|
+
[](https://github.com/Knuckles-Team/overstory/stargazers)
|
|
27
|
+
[](https://github.com/Knuckles-Team/overstory/forks)
|
|
28
|
+
[](https://github.com/Knuckles-Team/overstory/graphs/contributors)
|
|
29
|
+
[](https://github.com/Knuckles-Team/overstory/commits/main)
|
|
30
|
+
[](https://github.com/Knuckles-Team/overstory/pulls)
|
|
31
|
+
[](https://github.com/Knuckles-Team/overstory/pulls?q=is%3Apr+is%3Aclosed)
|
|
32
|
+
[](https://github.com/Knuckles-Team/overstory/issues)
|
|
33
|
+
[](https://github.com/Knuckles-Team/overstory)
|
|
34
|
+
[](https://github.com/Knuckles-Team/overstory)
|
|
35
|
+
[](https://github.com/Knuckles-Team/overstory)
|
|
36
|
+
[](https://github.com/Knuckles-Team/overstory)
|
|
37
|
+
|
|
38
|
+
</p>
|
|
39
|
+
|
|
40
|
+
<p align="center">
|
|
41
|
+
<a href="https://knuckles-team.github.io/overstory/">Documentation</a> ·
|
|
42
|
+
<a href="https://knuckles-team.github.io/overstory/features/">Capabilities</a> ·
|
|
43
|
+
<a href="https://knuckles-team.github.io/overstory/architecture/">Interfaces</a> ·
|
|
44
|
+
<a href="https://knuckles-team.github.io/overstory/status/">Status</a>
|
|
45
|
+
</p>
|
|
46
|
+
|
|
47
|
+

|
|
48
|
+
|
|
49
|
+
The conversation-first workspace uses synthetic demo data, not a live account.
|
|
50
|
+
Open **Settings** for theme, surface and privacy choices.
|
|
51
|
+
See the [workspace gallery and screenshot refresh guide](docs/screenshots.md).
|
|
52
|
+
|
|
53
|
+
## Overview
|
|
54
|
+
|
|
55
|
+
Overstory is the browser workspace composed by Arbora. It brings agent
|
|
56
|
+
conversations, approvals, workflows, fleet activity, and Medulla
|
|
57
|
+
exploration into one React application. Its FastAPI host keeps privileged
|
|
58
|
+
credentials and gateway delegation on the server side.
|
|
59
|
+
|
|
60
|
+
| Overstory owns | Other components own |
|
|
61
|
+
|---|---|
|
|
62
|
+
| Browser presentation, local interaction state, accessible route composition, and the FastAPI boundary | Arbora owns public routing, identity, policy, and fleet supervision; Meristem applies supplied plans; Medulla owns durable knowledge; connector services own external-system effects |
|
|
63
|
+
|
|
64
|
+
Current package Version: 2.8.3.
|
|
65
|
+
|
|
66
|
+
## Key capabilities
|
|
67
|
+
|
|
68
|
+
- Stream agent responses with sources, governed tool activity, and approval prompts.
|
|
69
|
+
- Build and run workflows while observing sessions, goals, schedules, and fleet health.
|
|
70
|
+
- Explore property graphs, RDF, schemas, objects, tables, documents, code, and memories through Understory and Medulla.
|
|
71
|
+
- Discover MCP Apps and connector capabilities without exposing service credentials to the browser.
|
|
72
|
+
- Apply one role-aware navigation and server authorization model across the complete workspace.
|
|
73
|
+
- Run as the Arbora-hosted browser co-service or as an independently deployed ASGI application.
|
|
74
|
+
|
|
75
|
+
## Documentation
|
|
76
|
+
|
|
77
|
+
Start with the [Overstory documentation](https://knuckles-team.github.io/overstory/),
|
|
78
|
+
then use the shared platform map to move between components:
|
|
79
|
+
|
|
80
|
+
| Component | Role | Documentation |
|
|
81
|
+
|---|---|---|
|
|
82
|
+
| Overstory | Browser operator workspace and Understory knowledge views | [Docs](https://knuckles-team.github.io/overstory/) |
|
|
83
|
+
| Tuig | Terminal and headless client; central A2A/REST and experimental headless local ACP; full session parity remains unqualified | [Docs](https://knuckles-team.github.io/tuig/) |
|
|
84
|
+
| Axil | Desktop cockpit for chat, graph, fleet, health, and operator workflows | [Docs](https://knuckles-team.github.io/axil/) |
|
|
85
|
+
| Arbora messaging | Chat and voice entrypoints hosted by Arbora | [Docs](https://knuckles-team.github.io/arbora/) |
|
|
86
|
+
| Arbora | Public MCP, REST, A2A, identity, policy, and runtime composition | [Docs](https://knuckles-team.github.io/arbora/) |
|
|
87
|
+
| Meristem | In-run harness that applies supplied plans | [Docs](https://knuckles-team.github.io/meristem/) |
|
|
88
|
+
| Medulla | Durable multimodal data, reasoning, provenance, and transactions | [Docs](https://knuckles-team.github.io/medulla/) |
|
|
89
|
+
| Scion SDK | Typed source adapters, connector serving, and write-back contracts | [Docs](https://knuckles-team.github.io/scion-sdk/) |
|
|
90
|
+
|
|
91
|
+
## Architecture
|
|
92
|
+
|
|
93
|
+
[](https://knuckles-team.github.io/.github/architecture/#webui)
|
|
94
|
+
|
|
95
|
+
[Explore the live architecture](https://knuckles-team.github.io/.github/architecture/#webui)
|
|
96
|
+
|
|
97
|
+
People also enter through Tuig and Axil or Arbora-hosted
|
|
98
|
+
messaging. Tuig retains central A2A/REST and experimental headless local ACP;
|
|
99
|
+
full session parity remains unqualified. External applications connect over MCP,
|
|
100
|
+
REST, or A2A. The browser talks only to its same-origin FastAPI host. Arbora injects gateway routes and
|
|
101
|
+
verified request context. Meristem applies supplied plans; Medulla owns
|
|
102
|
+
durable knowledge. Source systems connect through Scion SDK
|
|
103
|
+
directly to Medulla. Overstory renders typed results
|
|
104
|
+
and local presentation state while each service retains its own authority.
|
|
105
|
+
|
|
106
|
+
See the [architecture guide](https://knuckles-team.github.io/overstory/architecture/)
|
|
107
|
+
for the request flow and trust boundaries.
|
|
108
|
+
|
|
109
|
+
## Quick start
|
|
110
|
+
|
|
111
|
+
Generate a local profile and start Arbora with Overstory enabled:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
uvx --from "arbora[webui]" setup-config generate --profile tiny
|
|
115
|
+
export ENABLE_WEB_UI=true
|
|
116
|
+
uvx --from "arbora[webui]" arbora --transport streamable-http --host 127.0.0.1 --port 8000
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Open <http://127.0.0.1:8080>. Arbora serves MCP on port `8000` and the Agent
|
|
120
|
+
Web UI co-service on port `8080`. The [start guide](https://knuckles-team.github.io/overstory/start/)
|
|
121
|
+
covers local source development and deployment profiles.
|
|
122
|
+
|
|
123
|
+
## Contributing
|
|
124
|
+
|
|
125
|
+
Issues and pull requests are welcome. Read [AGENTS.md](AGENTS.md), keep browser
|
|
126
|
+
and server authority boundaries intact, and run the repository validation suite
|
|
127
|
+
before opening a pull request.
|
|
128
|
+
|
|
129
|
+
Refresh the documented workspace views with `pnpm screenshots:refresh`. See the
|
|
130
|
+
[screenshot guide](docs/screenshots.md) for synthetic fixtures, hosted capture,
|
|
131
|
+
provenance and review before committing refreshed images.
|
|
132
|
+
|
|
133
|
+
## License
|
|
134
|
+
|
|
135
|
+
Overstory is available under the [MIT License](LICENSE).
|
|
@@ -16,12 +16,13 @@ from agent_webui.browser_control import (
|
|
|
16
16
|
BrowserControlBinding,
|
|
17
17
|
BrowserMessage,
|
|
18
18
|
ControlCancelled,
|
|
19
|
+
ServerMessage,
|
|
19
20
|
)
|
|
20
21
|
from agent_webui.browser_control_canonical import canonical_protocol_json
|
|
21
22
|
from agent_webui.server import create_agent_web_app
|
|
22
23
|
from cryptography.fernet import Fernet
|
|
23
24
|
from fastapi.testclient import TestClient
|
|
24
|
-
from pydantic import BaseModel, ConfigDict
|
|
25
|
+
from pydantic import BaseModel, ConfigDict, TypeAdapter, ValidationError
|
|
25
26
|
from starlette.websockets import WebSocketDisconnect
|
|
26
27
|
|
|
27
28
|
pytestmark = pytest.mark.integration
|
|
@@ -108,7 +109,10 @@ class MismatchedCatalogReceiptConnection(RecordingConnection):
|
|
|
108
109
|
class AcknowledgingConnection(RecordingConnection):
|
|
109
110
|
async def receive(self, message: BrowserMessage) -> Any:
|
|
110
111
|
receipt = await super().receive(message)
|
|
111
|
-
if
|
|
112
|
+
if (
|
|
113
|
+
message.type != 'catalog.register'
|
|
114
|
+
and message.type != 'control.proposal_response'
|
|
115
|
+
):
|
|
112
116
|
await self.outbound_send(
|
|
113
117
|
_AuCancel(
|
|
114
118
|
protocol='webmcp.control.v1',
|
|
@@ -277,7 +281,7 @@ def _browser_headers(*, origin: str = 'https://au.example') -> dict[str, str]:
|
|
|
277
281
|
session = {
|
|
278
282
|
'access_token': 'verified-human-access-token',
|
|
279
283
|
'refresh_token': '',
|
|
280
|
-
'expires_at': time.time() + 300,
|
|
284
|
+
'expires_at': int(time.time()) + 300,
|
|
281
285
|
}
|
|
282
286
|
packed = zlib.compress(json.dumps(session).encode('utf-8'), 9)
|
|
283
287
|
sealed = Fernet(_SESSION_KEY.encode('ascii')).encrypt(packed).decode('ascii')
|
|
@@ -1002,3 +1006,110 @@ def test_unicode_result_uses_the_same_utf8_json_budget_as_the_browser(
|
|
|
1002
1006
|
)
|
|
1003
1007
|
|
|
1004
1008
|
assert port.connection.messages[-1].type == 'control.result'
|
|
1009
|
+
|
|
1010
|
+
|
|
1011
|
+
def _proposal_request() -> dict[str, Any]:
|
|
1012
|
+
return {
|
|
1013
|
+
'protocol': 'webmcp.control.v1',
|
|
1014
|
+
'type': 'control.proposal_request',
|
|
1015
|
+
'proposal_id': 'proposal-1',
|
|
1016
|
+
'proposal_digest': _DIGEST,
|
|
1017
|
+
'registration_generation': 7,
|
|
1018
|
+
'tool_id': 'webui.page.context',
|
|
1019
|
+
'schema_digest': _DIGEST,
|
|
1020
|
+
'arguments': {},
|
|
1021
|
+
'requester_agent': 'web-agent',
|
|
1022
|
+
'requester_run_ref': 'run-1',
|
|
1023
|
+
'expires_at': int(time.time()) + 30,
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
|
|
1027
|
+
def test_proposal_wire_round_trip_uses_existing_authority_connection(
|
|
1028
|
+
mock_agent: Any,
|
|
1029
|
+
monkeypatch: pytest.MonkeyPatch,
|
|
1030
|
+
) -> None:
|
|
1031
|
+
_configure_identity(monkeypatch)
|
|
1032
|
+
port = RecordingPort()
|
|
1033
|
+
request = _proposal_request()
|
|
1034
|
+
withdrawn = {
|
|
1035
|
+
'protocol': 'webmcp.control.v1',
|
|
1036
|
+
'type': 'control.proposal_withdrawn',
|
|
1037
|
+
'proposal_id': 'proposal-1',
|
|
1038
|
+
'reason': 'declined',
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
class ProposalConnection(RecordingConnection):
|
|
1042
|
+
async def receive(self, message: BrowserMessage) -> Any:
|
|
1043
|
+
receipt = await super().receive(message)
|
|
1044
|
+
if message.type == 'control.cancelled':
|
|
1045
|
+
await self.outbound_send(request)
|
|
1046
|
+
if message.type == 'control.proposal_response':
|
|
1047
|
+
await self.outbound_send(withdrawn)
|
|
1048
|
+
return receipt
|
|
1049
|
+
|
|
1050
|
+
port.connection = ProposalConnection()
|
|
1051
|
+
client = TestClient(_app(mock_agent, port))
|
|
1052
|
+
with client.websocket_connect(
|
|
1053
|
+
'/ws/browser-control', headers=_browser_headers()
|
|
1054
|
+
) as websocket:
|
|
1055
|
+
websocket.send_json(_OPEN)
|
|
1056
|
+
websocket.send_json(_CATALOG)
|
|
1057
|
+
assert websocket.receive_json()['type'] == 'channel.ready'
|
|
1058
|
+
websocket.send_json(
|
|
1059
|
+
{
|
|
1060
|
+
'protocol': 'webmcp.control.v1',
|
|
1061
|
+
'type': 'control.cancelled',
|
|
1062
|
+
'call_id': 'synthetic-trigger',
|
|
1063
|
+
'effect': 'none',
|
|
1064
|
+
}
|
|
1065
|
+
)
|
|
1066
|
+
assert websocket.receive_json() == request
|
|
1067
|
+
websocket.send_json(
|
|
1068
|
+
{
|
|
1069
|
+
'protocol': 'webmcp.control.v1',
|
|
1070
|
+
'type': 'control.proposal_response',
|
|
1071
|
+
'proposal_id': 'proposal-1',
|
|
1072
|
+
'proposal_digest': _DIGEST,
|
|
1073
|
+
'accepted': False,
|
|
1074
|
+
}
|
|
1075
|
+
)
|
|
1076
|
+
assert websocket.receive_json() == withdrawn
|
|
1077
|
+
assert port.connection.messages[-1].type == 'control.proposal_response'
|
|
1078
|
+
assert port.connection.messages[-1].accepted is False
|
|
1079
|
+
assert len(port.bindings) == 1
|
|
1080
|
+
|
|
1081
|
+
|
|
1082
|
+
@pytest.mark.parametrize(
|
|
1083
|
+
'field,value',
|
|
1084
|
+
[
|
|
1085
|
+
('registration_generation', True),
|
|
1086
|
+
('registration_generation', 0),
|
|
1087
|
+
('schema_digest', 'wrong'),
|
|
1088
|
+
('requester_run_ref', '../run'),
|
|
1089
|
+
('requester_agent', 'a' * 513),
|
|
1090
|
+
('expires_at', float('inf')),
|
|
1091
|
+
('arguments', {'bad': float('nan')}),
|
|
1092
|
+
],
|
|
1093
|
+
)
|
|
1094
|
+
def test_proposal_server_wire_rejects_malformed_input(field: str, value: Any) -> None:
|
|
1095
|
+
|
|
1096
|
+
with pytest.raises((ValidationError, ValueError)):
|
|
1097
|
+
TypeAdapter(ServerMessage).validate_python(
|
|
1098
|
+
{**_proposal_request(), field: value}, strict=True
|
|
1099
|
+
)
|
|
1100
|
+
|
|
1101
|
+
|
|
1102
|
+
@pytest.mark.parametrize('accepted', ['true', 1, None])
|
|
1103
|
+
def test_proposal_response_requires_a_boolean_decision(accepted: Any) -> None:
|
|
1104
|
+
|
|
1105
|
+
with pytest.raises(ValidationError):
|
|
1106
|
+
TypeAdapter(BrowserMessage).validate_python(
|
|
1107
|
+
{
|
|
1108
|
+
'protocol': 'webmcp.control.v1',
|
|
1109
|
+
'type': 'control.proposal_response',
|
|
1110
|
+
'proposal_id': 'proposal-1',
|
|
1111
|
+
'proposal_digest': _DIGEST,
|
|
1112
|
+
'accepted': accepted,
|
|
1113
|
+
},
|
|
1114
|
+
strict=True,
|
|
1115
|
+
)
|
|
@@ -1714,3 +1714,81 @@ async def test_verify_browser_session_rejects_a_principal_mismatch(
|
|
|
1714
1714
|
await verify_browser_session(
|
|
1715
1715
|
scope, session, authority=authority, console_origin=_EVIDENCE_ORIGIN
|
|
1716
1716
|
)
|
|
1717
|
+
|
|
1718
|
+
|
|
1719
|
+
@pytest.mark.anyio
|
|
1720
|
+
@pytest.mark.parametrize('path', [SESSION_PATH, '/api/fixture'])
|
|
1721
|
+
@pytest.mark.parametrize('refresh', ['', 'rejected-refresh'])
|
|
1722
|
+
async def test_expired_http_session_clears_cookies_and_status(
|
|
1723
|
+
monkeypatch, path, refresh
|
|
1724
|
+
):
|
|
1725
|
+
async def refuse_api(scope, receive, send):
|
|
1726
|
+
assert not any(key == b'authorization' for key, _ in scope['headers'])
|
|
1727
|
+
await OIDCBrowserSessionMiddleware._respond(send, 401)
|
|
1728
|
+
|
|
1729
|
+
middleware = OIDCBrowserSessionMiddleware(refuse_api, settings=_settings())
|
|
1730
|
+
|
|
1731
|
+
async def rejected(_form):
|
|
1732
|
+
return None
|
|
1733
|
+
|
|
1734
|
+
monkeypatch.setattr(middleware, '_token_request', rejected)
|
|
1735
|
+
sealed = middleware._seal(
|
|
1736
|
+
{
|
|
1737
|
+
'access_token': 'expired-fixture',
|
|
1738
|
+
'refresh_token': refresh,
|
|
1739
|
+
'expires_at': time.time() - 1,
|
|
1740
|
+
}
|
|
1741
|
+
)
|
|
1742
|
+
cookie = '; '.join(
|
|
1743
|
+
raw.decode().split(';', 1)[0]
|
|
1744
|
+
for _, raw in _session_cookie_headers(sealed, secure=False)
|
|
1745
|
+
)
|
|
1746
|
+
send = _Recorder()
|
|
1747
|
+
await middleware(_scope(path, headers=[(b'cookie', cookie.encode())]), None, send)
|
|
1748
|
+
assert send.status == (200 if path == SESSION_PATH else 401)
|
|
1749
|
+
if path == SESSION_PATH:
|
|
1750
|
+
assert json.loads(send.body) == {'authenticated': False}
|
|
1751
|
+
assert send.headers(b'set-cookie') == [
|
|
1752
|
+
raw for _, raw in _clear_session_cookie_headers(secure=False)
|
|
1753
|
+
]
|
|
1754
|
+
|
|
1755
|
+
|
|
1756
|
+
@pytest.mark.anyio
|
|
1757
|
+
async def test_session_status_renews_and_persists_cookie(monkeypatch):
|
|
1758
|
+
middleware = OIDCBrowserSessionMiddleware(_noop_app, settings=_settings())
|
|
1759
|
+
|
|
1760
|
+
async def renewed(form):
|
|
1761
|
+
assert form['refresh_token'] == 'refresh-fixture'
|
|
1762
|
+
return {
|
|
1763
|
+
'access_token': 'new-fixture',
|
|
1764
|
+
'expires_in': 300,
|
|
1765
|
+
'refresh_token': 'renewed-refresh-fixture',
|
|
1766
|
+
}
|
|
1767
|
+
|
|
1768
|
+
monkeypatch.setattr(middleware, '_token_request', renewed)
|
|
1769
|
+
sealed = middleware._seal(
|
|
1770
|
+
{
|
|
1771
|
+
'access_token': 'expired-fixture',
|
|
1772
|
+
'refresh_token': 'refresh-fixture',
|
|
1773
|
+
'expires_at': time.time() - 1,
|
|
1774
|
+
}
|
|
1775
|
+
)
|
|
1776
|
+
cookie = '; '.join(
|
|
1777
|
+
raw.decode().split(';', 1)[0]
|
|
1778
|
+
for _, raw in _session_cookie_headers(sealed, secure=False)
|
|
1779
|
+
)
|
|
1780
|
+
send = _Recorder()
|
|
1781
|
+
await middleware(
|
|
1782
|
+
_scope(SESSION_PATH, headers=[(b'cookie', cookie.encode())]), None, send
|
|
1783
|
+
)
|
|
1784
|
+
assert json.loads(send.body)['authenticated'] is True
|
|
1785
|
+
cookies = {
|
|
1786
|
+
raw.decode().split(';', 1)[0].split('=', 1)[0]: raw.decode()
|
|
1787
|
+
.split(';', 1)[0]
|
|
1788
|
+
.split('=', 1)[1]
|
|
1789
|
+
for raw in send.headers(b'set-cookie')
|
|
1790
|
+
}
|
|
1791
|
+
renewed_session = middleware._unseal(_read_session_cookie(cookies))
|
|
1792
|
+
assert renewed_session is not None
|
|
1793
|
+
assert renewed_session['access_token'] == 'new-fixture'
|
|
1794
|
+
assert renewed_session['refresh_token'] == 'renewed-refresh-fixture'
|