v0.12.0
Added
AGUIServer— one config object with a namespaced.urls. The
Django-idiomatic front door for the package: construct it once with the tool
registry (plus optional stores / skills / auth) and mount its.urlsthe
django.contrib.adminsite.urlsway —path("agent/", server.urls). It
builds the agent view and every sub-view (tools / skills / threads /
attachments / transcribe) internally from the registry passed once (no
tools=registryecho), forwards onerequire_authenticated/get_user/
authorizepolicy to all of them, and mounts each persistence sub-view only
when its backend is active (a non-Nullstore, resolved fromDJANGO_AG_UIby
default or passed explicitly)..urlsreturns the
(patterns, app_name, namespace)triplepath()mounts directly — the
admin.site.urlsidiom,path("agent/", server.urls)with noinclude()— so
endpoints are namespaced and reversible —reverse("ag_ui:endpoint"),
"ag_ui:tools","ag_ui:threads", … — and two mounts no longer collide on flat
global names. Override the namespace withnamespace=.
Removed (breaking)
-
get_urlsis removed in favour ofAGUIServer. It was a free factory that
returned a bare, un-namespaced pattern list and required pre-building the view
then re-passing the same registry astools=. Migrate:# before from django_ag_ui import DjangoAGUIView, get_urls urlpatterns = [ *get_urls(DjangoAGUIView(registry), prefix="agent/", tools=registry, threads=store), ] # after from django_ag_ui import AGUIServer urlpatterns = [ path("agent/", AGUIServer(registry, conversation_store=store).urls), ]
The endpoint URL names are now namespaced — update
reverse()/
{% url %}calls from the old flat names (django_ag_ui,django_ag_ui_tools,
django_ag_ui_threads, …) to"<namespace>:endpoint","<namespace>:tools",
"<namespace>:threads", … (default namespace"ag_ui"). The threads /
attachments / transcribe sub-views now mount automatically when their store is
configured in settings, so passing them explicitly is only needed to override
the settings-resolved backend.