From 79dc9b529a56d546cde8b4eb88f09de99fdd82b6 Mon Sep 17 00:00:00 2001 From: Sandro Date: Sat, 28 Mar 2026 23:17:17 +0000 Subject: [PATCH 01/11] feat(auth): Add web authentication with django-allauth Add social login (GitHub, GitLab), passwordless login-by-code, styled login/dashboard pages, and API key management UI. - django-allauth with conditional provider registration - Tailwind CSS v4 via standalone CLI (ARM-compatible) - WhiteNoise for static file serving - Dark-themed login, code entry, dashboard, and API keys pages - setup_default_site management command (reads DAIV_EXTERNAL_URL) - Custom social account adapter for GitLab server URL separation --- .gitignore | 3 + CHANGELOG.md | 2 + Makefile | 8 +- daiv/accounts/adapter.py | 14 ++ daiv/accounts/forms.py | 11 ++ .../management/commands/setup_default_site.py | 20 +++ daiv/accounts/socialaccount.py | 35 +++++ daiv/accounts/static/accounts/img/logo.png | Bin 0 -> 243811 bytes daiv/accounts/static_src/css/input.css | 20 +++ .../templates/account/confirm_login_code.html | 63 +++++++++ daiv/accounts/templates/account/login.html | 92 +++++++++++++ daiv/accounts/templates/account/logout.html | 25 ++++ .../templates/account/request_login_code.html | 49 +++++++ .../accounts/templates/accounts/api_keys.html | 121 ++++++++++++++++++ .../templates/accounts/dashboard.html | 58 +++++++++ daiv/accounts/templates/base.html | 43 +++++++ .../socialaccount/authentication_error.html | 35 +++++ .../templates/socialaccount/login.html | 32 +++++ .../socialaccount/login_cancelled.html | 30 +++++ daiv/accounts/urls.py | 10 ++ daiv/accounts/views.py | 69 ++++++++++ daiv/daiv/settings/components/allauth.py | 68 ++++++++++ daiv/daiv/settings/components/common.py | 58 ++++++++- daiv/daiv/settings/local.py | 1 + daiv/daiv/settings/production.py | 1 + daiv/daiv/settings/test.py | 8 +- daiv/daiv/urls.py | 15 ++- docker/local/app/Dockerfile | 7 + docker/local/app/config.env | 4 + docker/local/app/config.secrets.env.example | 6 + docker/local/app/start-app | 7 +- docker/production/app/Dockerfile | 10 +- docker/production/app/start-app | 2 + docs/getting-started/deployment.md | 23 +++- docs/reference/env-variables.md | 25 +++- pyproject.toml | 2 + uv.lock | 54 ++++++++ 37 files changed, 1016 insertions(+), 15 deletions(-) create mode 100644 daiv/accounts/adapter.py create mode 100644 daiv/accounts/forms.py create mode 100644 daiv/accounts/management/commands/setup_default_site.py create mode 100644 daiv/accounts/socialaccount.py create mode 100644 daiv/accounts/static/accounts/img/logo.png create mode 100644 daiv/accounts/static_src/css/input.css create mode 100644 daiv/accounts/templates/account/confirm_login_code.html create mode 100644 daiv/accounts/templates/account/login.html create mode 100644 daiv/accounts/templates/account/logout.html create mode 100644 daiv/accounts/templates/account/request_login_code.html create mode 100644 daiv/accounts/templates/accounts/api_keys.html create mode 100644 daiv/accounts/templates/accounts/dashboard.html create mode 100644 daiv/accounts/templates/base.html create mode 100644 daiv/accounts/templates/socialaccount/authentication_error.html create mode 100644 daiv/accounts/templates/socialaccount/login.html create mode 100644 daiv/accounts/templates/socialaccount/login_cancelled.html create mode 100644 daiv/accounts/urls.py create mode 100644 daiv/accounts/views.py create mode 100644 daiv/daiv/settings/components/allauth.py diff --git a/.gitignore b/.gitignore index 12e3c5a9..d2cbe56f 100644 --- a/.gitignore +++ b/.gitignore @@ -169,6 +169,9 @@ state-snapshots.txt request.json +# Tailwind CSS build output +daiv/accounts/static/accounts/css/styles.css + # SWE-bench daiv-traces/ predictions.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 565d0519..d9222e16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +- Added web-based authentication via django-allauth with GitHub and GitLab social login, passwordless login-by-code for existing users, and a styled dark-themed login page. Includes a post-login dashboard with API key management (create, list, revoke). + - Added `setup_langsmith_dashboard` management command to create a pre-configured LangSmith custom dashboard with 27 monitoring charts covering trace volume, latency, cost, tool usage, model comparison, and pipeline health. Supports `--project` and `--recreate` options. - Added `model` and `thinking_level` metadata to all LangSmith traces, enabling per-model dashboards and A/B comparison when switching between models. - Added async Jobs API (`POST /api/jobs`, `GET /api/jobs/{id}`) for programmatic agent execution with configurable per-user rate limiting (`JOBS_THROTTLE_RATE`). Enables scheduled CI pipelines, Slack bots, and scripted workflows to trigger DAIV agents without blocking. diff --git a/Makefile b/Makefile index 59734b1c..76963fd2 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ # Makefile -.PHONY: help setup test test-ci lint lint-check lint-format lint-fix lint-typing evals +.PHONY: help setup test test-ci lint lint-check lint-format lint-fix lint-typing evals tailwind-build tailwind-watch help: @echo "Available commands:" @@ -103,5 +103,11 @@ swerebench-clean: docs-serve: uv run --only-group=docs mkdocs serve -o -a localhost:4000 -w docs/ +tailwind-build: + docker compose exec app tailwindcss -i daiv/accounts/static_src/css/input.css -o daiv/accounts/static/accounts/css/styles.css --minify + +tailwind-watch: + docker compose exec app tailwindcss -i daiv/accounts/static_src/css/input.css -o daiv/accounts/static/accounts/css/styles.css --watch + langsmith-fetch: uv run langsmith-fetch traces --project-uuid 00d1a04e-0087-4813-9a18-5995cd5bee5c --limit 1 ./daiv-traces diff --git a/daiv/accounts/adapter.py b/daiv/accounts/adapter.py new file mode 100644 index 00000000..c085f90e --- /dev/null +++ b/daiv/accounts/adapter.py @@ -0,0 +1,14 @@ +from allauth.account.adapter import DefaultAccountAdapter +from allauth.socialaccount.adapter import DefaultSocialAccountAdapter + + +class AccountAdapter(DefaultAccountAdapter): + def is_open_for_signup(self, request): + """Disable standard email/password signup. Users are created via social providers only.""" + return False + + +class SocialAccountAdapter(DefaultSocialAccountAdapter): + def is_open_for_signup(self, request, sociallogin): + """Allow new user creation via social providers (GitHub, GitLab).""" + return True diff --git a/daiv/accounts/forms.py b/daiv/accounts/forms.py new file mode 100644 index 00000000..118a45cc --- /dev/null +++ b/daiv/accounts/forms.py @@ -0,0 +1,11 @@ +from django import forms + +from accounts.models import APIKey + + +class APIKeyCreateForm(forms.ModelForm): + name = forms.CharField(max_length=128) + + class Meta: + model = APIKey + fields = ["name"] diff --git a/daiv/accounts/management/commands/setup_default_site.py b/daiv/accounts/management/commands/setup_default_site.py new file mode 100644 index 00000000..4c3e98a3 --- /dev/null +++ b/daiv/accounts/management/commands/setup_default_site.py @@ -0,0 +1,20 @@ +from django.conf import settings +from django.contrib.sites.models import Site +from django.core.management.base import BaseCommand, CommandError + +from core.conf import settings as core_settings + + +class Command(BaseCommand): + help = "Update the default Site domain from DAIV_EXTERNAL_URL." + + def handle(self, *args, **options): + domain = core_settings.EXTERNAL_URL.host + if not domain: + raise CommandError("DAIV_EXTERNAL_URL has no valid host. Check your DAIV_EXTERNAL_URL setting.") + + rows = Site.objects.filter(pk=settings.SITE_ID).update(domain=domain, name="DAIV") + if rows == 0: + raise CommandError(f"Site with pk={settings.SITE_ID} does not exist. Run 'migrate' first.") + + self.stdout.write(self.style.SUCCESS(f"Default site updated: domain={domain}, name=DAIV")) diff --git a/daiv/accounts/socialaccount.py b/daiv/accounts/socialaccount.py new file mode 100644 index 00000000..c8ec9843 --- /dev/null +++ b/daiv/accounts/socialaccount.py @@ -0,0 +1,35 @@ +from allauth.core import context +from allauth.socialaccount.adapter import get_adapter +from allauth.socialaccount.providers.gitlab.views import GitLabOAuth2Adapter +from allauth.socialaccount.providers.oauth2.views import OAuth2CallbackView, OAuth2LoginView + + +class GitLabServerAwareAdapter(GitLabOAuth2Adapter): + """ + GitLab adapter that supports a separate ``gitlab_server_url`` app setting + for server-side HTTP calls (token exchange, profile fetch). This is needed + in Docker/compose environments where the browser-facing URL differs from + the URL reachable inside the container network. + + When ``gitlab_server_url`` is empty or absent the adapter falls back to the + standard ``gitlab_url``. + """ + + def _build_server_url(self, path): + app = get_adapter().get_app(context.request, provider=self.provider_id) + server_url = app.settings.get("gitlab_server_url") + if server_url: + return f"{server_url}{path}" + return self._build_url(path) + + @property + def access_token_url(self): + return self._build_server_url("/oauth/token") + + @property + def profile_url(self): + return self._build_server_url(f"/api/{self.provider_api_version}/user") + + +oauth2_login = OAuth2LoginView.adapter_view(GitLabServerAwareAdapter) +oauth2_callback = OAuth2CallbackView.adapter_view(GitLabServerAwareAdapter) diff --git a/daiv/accounts/static/accounts/img/logo.png b/daiv/accounts/static/accounts/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..44c4121cb76bb2a1d128014f29ae620a07e42bfd GIT binary patch literal 243811 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 z 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 LNkvXXu0mjfGob8c literal 0 HcmV?d00001 diff --git a/daiv/accounts/static_src/css/input.css b/daiv/accounts/static_src/css/input.css new file mode 100644 index 00000000..a2b17d29 --- /dev/null +++ b/daiv/accounts/static_src/css/input.css @@ -0,0 +1,20 @@ +@import "tailwindcss"; + +@theme { + --font-sans: "Outfit", ui-sans-serif, system-ui, sans-serif; +} + +@keyframes fade-up { + from { + opacity: 0; + transform: translateY(10px); + } +} + +a, button, [role="button"] { + cursor: pointer; +} + +.animate-fade-up { + animation: fade-up 0.5s ease-out both; +} diff --git a/daiv/accounts/templates/account/confirm_login_code.html b/daiv/accounts/templates/account/confirm_login_code.html new file mode 100644 index 00000000..75704768 --- /dev/null +++ b/daiv/accounts/templates/account/confirm_login_code.html @@ -0,0 +1,63 @@ +{% extends "base.html" %} +{% load static %} + +{% block title %}Enter code — DAIV{% endblock %} + +{% block content %} + +{% endblock %} diff --git a/daiv/accounts/templates/account/login.html b/daiv/accounts/templates/account/login.html new file mode 100644 index 00000000..ca884410 --- /dev/null +++ b/daiv/accounts/templates/account/login.html @@ -0,0 +1,92 @@ +{% extends "base.html" %} +{% load static socialaccount %} + +{% block title %}Sign in — DAIV{% endblock %} + +{% block content %} +
+ +
+
+ + +
+
+ + +
+
+
+
+
+
+ + +
+ + +
+ DAIV +

Sign in to your account

+
+ + + {% get_providers as socialaccount_providers %} + {% if socialaccount_providers %} +
+ {% for provider in socialaccount_providers %} + {% if provider.id == "github" %} + + + + + Continue with GitHub + + {% elif provider.id == "gitlab" %} + + + + + Continue with GitLab + + {% endif %} + {% endfor %} +
+ + +
+
+
+
+
+ or +
+
+ {% endif %} + + +
+ {% csrf_token %} +
+
+ +
+ +
+

+ We'll send a one-time code to your inbox +

+
+
+
+{% endblock %} diff --git a/daiv/accounts/templates/account/logout.html b/daiv/accounts/templates/account/logout.html new file mode 100644 index 00000000..90f9d1f0 --- /dev/null +++ b/daiv/accounts/templates/account/logout.html @@ -0,0 +1,25 @@ +{% extends "base.html" %} + +{% block title %}Sign out — DAIV{% endblock %} + +{% block content %} +
+
+
+

Sign out

+

Are you sure you want to sign out?

+
+
+ {% csrf_token %} + + Cancel + + +
+
+
+{% endblock %} diff --git a/daiv/accounts/templates/account/request_login_code.html b/daiv/accounts/templates/account/request_login_code.html new file mode 100644 index 00000000..6ac918f6 --- /dev/null +++ b/daiv/accounts/templates/account/request_login_code.html @@ -0,0 +1,49 @@ +{% extends "base.html" %} +{% load static %} + +{% block title %}Sign in with email — DAIV{% endblock %} + +{% block content %} +
+
+
+ +
+ +
+ DAIV +

Enter your email to sign in

+
+ +
+ {% csrf_token %} +
+ {% for field in form %} +
+ {% if field.errors %} +

{{ field.errors.0 }}

+ {% endif %} + +
+ {% endfor %} + +
+
+ +

+ Back to sign in +

+
+
+{% endblock %} diff --git a/daiv/accounts/templates/accounts/api_keys.html b/daiv/accounts/templates/accounts/api_keys.html new file mode 100644 index 00000000..de4f1c43 --- /dev/null +++ b/daiv/accounts/templates/accounts/api_keys.html @@ -0,0 +1,121 @@ +{% extends "base.html" %} +{% load static %} + +{% block title %}API Keys — DAIV{% endblock %} + +{% block content %} +
+ +
+
+
+ + DAIV + +
+
+ {{ user.name|default:user.email }} + + Sign out + +
+
+
+ + +
+
+
+

API Keys

+

Create and manage keys for programmatic access.

+
+ + ← Dashboard + +
+ + {% if new_key %} + +
+
+ + + +
+

Your new API key

+

Copy it now — you won't be able to see it again.

+
+ {{ new_key }} + +
+
+
+
+ {% endif %} + + +
+ {% csrf_token %} +

Create a new key

+
+ + +
+
+ + +
+ {% if api_keys %} +
+ {% for key in api_keys %} +
+
+
+ {{ key.name }} + {% if key.revoked %} + Revoked + {% endif %} +
+
+ Prefix: {{ key.prefix }}... + · + Created {{ key.created|timesince }} ago + {% if key.expires_at %} + · + Expires {{ key.expires_at|date:"M j, Y" }} + {% endif %} +
+
+ {% if not key.revoked %} +
+ {% csrf_token %} + +
+ {% endif %} +
+ {% endfor %} +
+ {% else %} +
+

No API keys yet. Create one above to get started.

+
+ {% endif %} +
+
+
+{% endblock %} diff --git a/daiv/accounts/templates/accounts/dashboard.html b/daiv/accounts/templates/accounts/dashboard.html new file mode 100644 index 00000000..3279ad76 --- /dev/null +++ b/daiv/accounts/templates/accounts/dashboard.html @@ -0,0 +1,58 @@ +{% extends "base.html" %} +{% load static %} + +{% block title %}Dashboard — DAIV{% endblock %} + +{% block content %} +
+ +
+
+
+ DAIV +
+
+ {{ user.name|default:user.email }} + + Sign out + +
+
+
+ + +
+
+

Dashboard

+

Welcome back, {{ user.name|default:user.email }}

+
+ + +
+
+{% endblock %} diff --git a/daiv/accounts/templates/base.html b/daiv/accounts/templates/base.html new file mode 100644 index 00000000..367edc8d --- /dev/null +++ b/daiv/accounts/templates/base.html @@ -0,0 +1,43 @@ + + + + + + {% block title %}DAIV{% endblock %} + + + + {% load static %} + + + + {% if messages %} +
+ {% for message in messages %} +
+ {{ message }} +
+ {% endfor %} +
+ + {% endif %} + {% block content %}{% endblock %} + + diff --git a/daiv/accounts/templates/socialaccount/authentication_error.html b/daiv/accounts/templates/socialaccount/authentication_error.html new file mode 100644 index 00000000..d0fcaa44 --- /dev/null +++ b/daiv/accounts/templates/socialaccount/authentication_error.html @@ -0,0 +1,35 @@ +{% extends "base.html" %} +{% load static %} + +{% block title %}Authentication error — DAIV{% endblock %} + +{% block content %} +
+
+ +
+
+ DAIV +
+ +
+
+ + + +
+

Authentication failed

+

+ Something went wrong while signing in. Please try again. +

+
+ + + Back to sign in + +
+
+{% endblock %} diff --git a/daiv/accounts/templates/socialaccount/login.html b/daiv/accounts/templates/socialaccount/login.html new file mode 100644 index 00000000..05f8753a --- /dev/null +++ b/daiv/accounts/templates/socialaccount/login.html @@ -0,0 +1,32 @@ +{% extends "base.html" %} +{% load static %} + +{% block title %}Sign in via {{ provider.name }} — DAIV{% endblock %} + +{% block content %} +
+
+ +
+
+ DAIV +

+ Continue to {{ provider.name }} +

+
+ +
+ {% csrf_token %} + +
+ +

+ Back to sign in +

+
+
+{% endblock %} diff --git a/daiv/accounts/templates/socialaccount/login_cancelled.html b/daiv/accounts/templates/socialaccount/login_cancelled.html new file mode 100644 index 00000000..69fe5390 --- /dev/null +++ b/daiv/accounts/templates/socialaccount/login_cancelled.html @@ -0,0 +1,30 @@ +{% extends "base.html" %} +{% load static %} + +{% block title %}Sign in cancelled — DAIV{% endblock %} + +{% block content %} +
+
+ +
+
+ DAIV +
+ +
+

Sign in cancelled

+

+ You cancelled the sign in process. +

+
+ + + Back to sign in + +
+
+{% endblock %} diff --git a/daiv/accounts/urls.py b/daiv/accounts/urls.py new file mode 100644 index 00000000..a40388d7 --- /dev/null +++ b/daiv/accounts/urls.py @@ -0,0 +1,10 @@ +from django.urls import path + +from accounts.views import APIKeyCreateView, APIKeyListView, APIKeyRevokeView, DashboardView + +urlpatterns = [ + path("", DashboardView.as_view(), name="dashboard"), + path("api-keys/", APIKeyListView.as_view(), name="api_keys"), + path("api-keys/create/", APIKeyCreateView.as_view(), name="api_key_create"), + path("api-keys//revoke/", APIKeyRevokeView.as_view(), name="api_key_revoke"), +] diff --git a/daiv/accounts/views.py b/daiv/accounts/views.py new file mode 100644 index 00000000..f2b4a934 --- /dev/null +++ b/daiv/accounts/views.py @@ -0,0 +1,69 @@ +import logging + +from django.contrib import messages +from django.contrib.auth.mixins import LoginRequiredMixin +from django.db import IntegrityError +from django.shortcuts import redirect +from django.views import View +from django.views.generic import TemplateView + +from accounts.forms import APIKeyCreateForm +from accounts.models import APIKey + +logger = logging.getLogger(__name__) + + +class DashboardView(LoginRequiredMixin, TemplateView): + template_name = "accounts/dashboard.html" + + +class APIKeyListView(LoginRequiredMixin, TemplateView): + template_name = "accounts/api_keys.html" + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["api_keys"] = APIKey.objects.filter(user=self.request.user).order_by("revoked", "-created") + context["new_key"] = self.request.session.pop("new_api_key", None) + context["form"] = APIKeyCreateForm() + return context + + +class APIKeyCreateView(LoginRequiredMixin, View): + def post(self, request): + form = APIKeyCreateForm(request.POST) + if not form.is_valid(): + for error in form.errors.values(): + messages.error(request, error[0]) + return redirect("api_keys") + + try: + key_generator = APIKey.objects.key_generator + key, prefix, hashed_key = key_generator.generate() + APIKey.objects.create( + user=request.user, name=form.cleaned_data["name"], prefix=prefix, hashed_key=hashed_key + ) + except IntegrityError: + messages.error(request, "Failed to create API key due to a conflict. Please try again.") + return redirect("api_keys") + except Exception: + logger.exception("Unexpected error creating API key for user %s", request.user.pk) + messages.error(request, "An unexpected error occurred. Please try again.") + return redirect("api_keys") + + request.session["new_api_key"] = key + messages.success(request, f"API key '{form.cleaned_data['name']}' created.") + return redirect("api_keys") + + +class APIKeyRevokeView(LoginRequiredMixin, View): + def post(self, request, pk): + api_key = APIKey.objects.filter(pk=pk, user=request.user).first() + if api_key is None: + messages.error(request, "API key not found.") + elif api_key.revoked: + messages.info(request, f"API key '{api_key.name}' was already revoked.") + else: + api_key.revoked = True + api_key.save(update_fields=["revoked"]) + messages.success(request, f"API key '{api_key.name}' revoked.") + return redirect("api_keys") diff --git a/daiv/daiv/settings/components/allauth.py b/daiv/daiv/settings/components/allauth.py new file mode 100644 index 00000000..64670447 --- /dev/null +++ b/daiv/daiv/settings/components/allauth.py @@ -0,0 +1,68 @@ +import logging + +from decouple import config +from get_docker_secret import get_docker_secret + +logger = logging.getLogger("daiv.settings") + +# --------------------------------------------------------------------------- +# django-allauth +# --------------------------------------------------------------------------- + +AUTHENTICATION_BACKENDS = [ + "django.contrib.auth.backends.ModelBackend", + "allauth.account.auth_backends.AuthenticationBackend", +] + +ACCOUNT_LOGIN_METHODS = {"email"} +ACCOUNT_EMAIL_REQUIRED = True +# Email verification is skipped because users authenticate via social providers +# (which verify emails) or via login-by-code (which proves email ownership). +ACCOUNT_EMAIL_VERIFICATION = "none" +ACCOUNT_LOGIN_BY_CODE_ENABLED = True +ACCOUNT_LOGIN_BY_CODE_MAX_ATTEMPTS = 3 +ACCOUNT_LOGIN_BY_CODE_TIMEOUT = 300 +ACCOUNT_ADAPTER = "accounts.adapter.AccountAdapter" +SOCIALACCOUNT_ADAPTER = "accounts.adapter.SocialAccountAdapter" +ACCOUNT_EMAIL_UNKNOWN_ACCOUNTS = False + +SOCIALACCOUNT_LOGIN_ON_GET = True +SOCIALACCOUNT_AUTO_SIGNUP = True +SOCIALACCOUNT_EMAIL_AUTHENTICATION = True +SOCIALACCOUNT_EMAIL_AUTHENTICATION_AUTO_CONNECT = True + +LOGIN_REDIRECT_URL = "/dashboard/" +ACCOUNT_LOGOUT_REDIRECT_URL = "/accounts/login/" +LOGIN_URL = "/accounts/login/" + +# Register social providers only when credentials are fully configured. +# This prevents rendering login buttons that lead to broken OAuth flows. +SOCIALACCOUNT_PROVIDERS = {} + + +def _register_provider(name, scope, app_config): + client_id = get_docker_secret(f"ALLAUTH_{name.upper()}_CLIENT_ID", default="") + secret = get_docker_secret(f"ALLAUTH_{name.upper()}_SECRET", default="") + if client_id and secret: + app = {"client_id": client_id, "secret": secret, **app_config} + SOCIALACCOUNT_PROVIDERS[name] = {"SCOPE": scope, "APPS": [app]} + elif bool(client_id) != bool(secret): + logger.warning( + "Partial %s OAuth config: set both ALLAUTH_%s_CLIENT_ID and ALLAUTH_%s_SECRET, or neither.", + name.capitalize(), + name.upper(), + name.upper(), + ) + + +_register_provider("github", scope=["user:email"], app_config={}) +_register_provider( + "gitlab", + scope=["read_user"], + app_config={ + "settings": { + "gitlab_url": config("ALLAUTH_GITLAB_URL", default="https://gitlab.com"), + "gitlab_server_url": config("ALLAUTH_GITLAB_SERVER_URL", default=""), + } + }, +) diff --git a/daiv/daiv/settings/components/common.py b/daiv/daiv/settings/components/common.py index 2662d643..c6bd6da3 100644 --- a/daiv/daiv/settings/components/common.py +++ b/daiv/daiv/settings/components/common.py @@ -1,3 +1,5 @@ +from pathlib import Path + from decouple import Csv, config from get_docker_secret import get_docker_secret @@ -11,24 +13,58 @@ LOCAL_APPS = ["accounts", "automation", "codebase", "core", "slash_commands"] -THIRD_PARTY_APPS = ["crontask", "django_extensions", "django_tasks", "django_tasks_db"] +THIRD_PARTY_APPS = [ + "crontask", + "django_extensions", + "django_tasks", + "django_tasks_db", + "allauth", + "allauth.account", + "allauth.socialaccount", + "allauth.socialaccount.providers.github", + "allauth.socialaccount.providers.gitlab", +] -DJANGO_APPS = ["django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions"] +DJANGO_APPS = [ + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.sites", + "django.contrib.messages", + "django.contrib.staticfiles", +] -# See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps INSTALLED_APPS = LOCAL_APPS + THIRD_PARTY_APPS + DJANGO_APPS MIDDLEWARE = [ "django.middleware.security.SecurityMiddleware", + "whitenoise.middleware.WhiteNoiseMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.common.CommonMiddleware", + "django.middleware.csrf.CsrfViewMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", + "django.contrib.messages.middleware.MessageMiddleware", + "allauth.account.middleware.AccountMiddleware", ] # TEMPLATE CONFIGURATION - https://docs.djangoproject.com/en/dev/ref/settings/#templates -TEMPLATES = [{"BACKEND": "django.template.backends.django.DjangoTemplates", "APP_DIRS": True}] +TEMPLATES = [ + { + "BACKEND": "django.template.backends.django.DjangoTemplates", + "APP_DIRS": True, + "OPTIONS": { + "context_processors": [ + "django.template.context_processors.debug", + "django.template.context_processors.request", + "django.contrib.auth.context_processors.auth", + "django.contrib.messages.context_processors.messages", + ] + }, + } +] DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" @@ -38,7 +74,6 @@ # Password validation -# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ {"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"}, @@ -76,3 +111,16 @@ # Use CSRF in session instead of cookie: https://docs.djangoproject.com/en/dev/ref/csrf/ CSRF_USE_SESSIONS = True X_FRAME_OPTIONS = "DENY" + + +# STATIC FILES - https://docs.djangoproject.com/en/dev/ref/settings/#static-files + +STATIC_URL = "/static/" +STATIC_ROOT = Path.home() / "data" / "static" +STORAGES = {"staticfiles": {"BACKEND": "whitenoise.storage.CompressedManifestStaticFilesStorage"}} + + +# EMAIL + +EMAIL_BACKEND = config("EMAIL_BACKEND", default="django.core.mail.backends.console.EmailBackend") +DEFAULT_FROM_EMAIL = config("DEFAULT_FROM_EMAIL", default="noreply@daiv.dev") diff --git a/daiv/daiv/settings/local.py b/daiv/daiv/settings/local.py index b5445c40..e27d12db 100644 --- a/daiv/daiv/settings/local.py +++ b/daiv/daiv/settings/local.py @@ -14,4 +14,5 @@ "components/logs.py", "components/debug.py", "components/tasks.py", + "components/allauth.py", ) diff --git a/daiv/daiv/settings/production.py b/daiv/daiv/settings/production.py index bccb0c61..10303ab2 100644 --- a/daiv/daiv/settings/production.py +++ b/daiv/daiv/settings/production.py @@ -8,4 +8,5 @@ "components/logs.py", "components/tasks.py", "components/sentry.py", + "components/allauth.py", ) diff --git a/daiv/daiv/settings/test.py b/daiv/daiv/settings/test.py index 1ae6b9df..e850c315 100644 --- a/daiv/daiv/settings/test.py +++ b/daiv/daiv/settings/test.py @@ -1,3 +1,9 @@ from split_settings.tools import include -include("components/common.py", "components/i18n.py", "components/tasks.py", "components/testing.py") +include( + "components/common.py", + "components/i18n.py", + "components/tasks.py", + "components/allauth.py", + "components/testing.py", +) diff --git a/daiv/daiv/urls.py b/daiv/daiv/urls.py index 164d6efe..2ed19eb5 100644 --- a/daiv/daiv/urls.py +++ b/daiv/daiv/urls.py @@ -1,9 +1,18 @@ -from django.urls import path +from django.urls import include, path +from accounts.socialaccount import oauth2_callback, oauth2_login from core.views import HealthCheckView from daiv.api import api urlpatterns = [ - path(route="api/", view=api.urls), - path(route="-/alive/", view=HealthCheckView.as_view(), name="health_check"), + # Custom GitLab OAuth views must come before allauth.urls so they take + # precedence over the default GitLab provider views. This lets us use a + # Docker-internal URL for server-side token exchange while keeping the + # browser-facing authorize URL unchanged. + path("accounts/gitlab/login/", oauth2_login, name="gitlab_login"), + path("accounts/gitlab/login/callback/", oauth2_callback, name="gitlab_callback"), + path("accounts/", include("allauth.urls")), + path("dashboard/", include("accounts.urls")), + path("api/", api.urls), + path("-/alive/", HealthCheckView.as_view(), name="health_check"), ] diff --git a/docker/local/app/Dockerfile b/docker/local/app/Dockerfile index b20a532c..a64f65ed 100644 --- a/docker/local/app/Dockerfile +++ b/docker/local/app/Dockerfile @@ -61,3 +61,10 @@ COPY --chown=app:app docker/local/app /home/app/docker RUN uv sync \ && mkdir -p /home/app/data + +# Install Tailwind CSS standalone CLI (v4) +RUN TAILWIND_VERSION="v4.1.7" \ + && ARCH=$(dpkg --print-architecture | sed 's/amd64/x64/' | sed 's/arm64/arm64/') \ + && curl -sfLO "https://github.com/tailwindlabs/tailwindcss/releases/download/${TAILWIND_VERSION}/tailwindcss-linux-${ARCH}" \ + && chmod +x "tailwindcss-linux-${ARCH}" \ + && mv "tailwindcss-linux-${ARCH}" /home/app/.local/bin/tailwindcss diff --git a/docker/local/app/config.env b/docker/local/app/config.env index 5476f9ed..e7b4bdbb 100644 --- a/docker/local/app/config.env +++ b/docker/local/app/config.env @@ -23,6 +23,10 @@ CODEBASE_GITLAB_URL=http://gitlab:8929 # CODEBASE_GITHUB_APP_ID= # CODEBASE_GITHUB_INSTALLATION_ID= +# Allauth +ALLAUTH_GITLAB_URL=http://127.0.0.1:8929 +ALLAUTH_GITLAB_SERVER_URL=http://gitlab:8929 + # LangSmith observability LANGCHAIN_TRACING_V2=true LANGCHAIN_PROJECT=default diff --git a/docker/local/app/config.secrets.env.example b/docker/local/app/config.secrets.env.example index f0124e22..31e13b92 100644 --- a/docker/local/app/config.secrets.env.example +++ b/docker/local/app/config.secrets.env.example @@ -29,3 +29,9 @@ CONTEXT7_API_KEY= # Sandbox secure execution (requires --profile sandbox) DAIV_SANDBOX_API_KEY= + +# Social auth (django-allauth) +ALLAUTH_GITHUB_CLIENT_ID= +ALLAUTH_GITHUB_SECRET= +ALLAUTH_GITLAB_CLIENT_ID= +ALLAUTH_GITLAB_SECRET= diff --git a/docker/local/app/start-app b/docker/local/app/start-app index 081b03fb..3f6fe192 100644 --- a/docker/local/app/start-app +++ b/docker/local/app/start-app @@ -14,6 +14,11 @@ fi django-admin compilemessages --ignore=.venv django-admin migrate --noinput +django-admin setup_default_site django-admin setup_checkpoint_saver -exec uvicorn --host 0.0.0.0 --port 8000 --ssl-keyfile "$CERT_DIR/cert.key" --ssl-certfile "$CERT_DIR/cert.crt" --reload --reload-dir 'daiv/' "daiv.asgi:application" +# Build Tailwind CSS and collect static files (use `make tailwind-watch` for hot reload) +tailwindcss -i daiv/accounts/static_src/css/input.css -o daiv/accounts/static/accounts/css/styles.css --minify +django-admin collectstatic --noinput + +exec uvicorn --host 0.0.0.0 --port 8000 --ssl-keyfile "$CERT_DIR/cert.key" --ssl-certfile "$CERT_DIR/cert.crt" --reload --reload-dir 'daiv/' --reload-include '*.html' --reload-include '*.css' "daiv.asgi:application" diff --git a/docker/production/app/Dockerfile b/docker/production/app/Dockerfile index 5ff674a5..47ce5e2a 100644 --- a/docker/production/app/Dockerfile +++ b/docker/production/app/Dockerfile @@ -24,7 +24,7 @@ ENV UV_LINK_MODE=copy \ # Create a virtual environment and make it relocatable RUN uv venv .venv --relocatable -# Install uv +# Install Python dependencies RUN --mount=type=cache,target=/root/.cache/uv \ --mount=type=bind,source=uv.lock,target=uv.lock \ --mount=type=bind,source=pyproject.toml,target=pyproject.toml \ @@ -91,7 +91,13 @@ WORKDIR /home/daiv RUN chmod +x entrypoint start-app start-worker start-crontask \ && python -m compileall app \ && django-admin compilemessages --ignore=.venv/**/locale \ - && mkdir -p data/media data/static + && mkdir -p data/media data/static \ + # Build Tailwind CSS + && ARCH=$(dpkg --print-architecture | sed 's/amd64/x64/' | sed 's/arm64/arm64/') \ + && curl -sfLO "https://github.com/tailwindlabs/tailwindcss/releases/download/v4.1.7/tailwindcss-linux-${ARCH}" \ + && chmod +x "tailwindcss-linux-${ARCH}" \ + && ./"tailwindcss-linux-${ARCH}" -i app/accounts/static_src/css/input.css -o app/accounts/static/accounts/css/styles.css --minify \ + && rm "tailwindcss-linux-${ARCH}" HEALTHCHECK --interval=10s --start-period=30s \ CMD curl --fail http://127.0.0.1:8000/-/alive/ || exit 1 diff --git a/docker/production/app/start-app b/docker/production/app/start-app index c9d13dfe..213313b2 100644 --- a/docker/production/app/start-app +++ b/docker/production/app/start-app @@ -3,6 +3,8 @@ set -eu django-admin migrate --noinput +django-admin setup_default_site django-admin setup_checkpoint_saver +django-admin collectstatic --noinput exec uvicorn --host ${UVICORN_HOST:-0.0.0.0} --port ${UVICORN_PORT:-8000} --lifespan off --app-dir "/home/daiv/app" "daiv.asgi:application" diff --git a/docs/getting-started/deployment.md b/docs/getting-started/deployment.md index d9f0f4d2..bf4e1324 100644 --- a/docs/getting-started/deployment.md +++ b/docs/getting-started/deployment.md @@ -43,6 +43,10 @@ This guide walks you through deploying DAIV using Docker Swarm or Docker Compose * **`codebase_gitlab_webhook_secret`** - Random secret for GitLab webhook validation * **`daiv_sandbox_api_key`** - Random API key for Sandbox service authentication * **`openrouter_api_key`** - [OpenRouter API key](https://openrouter.ai/settings/keys) for LLM access +* **`allauth_github_client_id`** - GitHub OAuth App client ID (see [Authentication](../reference/env-variables.md#authentication)) +* **`allauth_github_secret`** - GitHub OAuth App secret +* **`allauth_gitlab_client_id`** - GitLab OAuth Application ID (see [Authentication](../reference/env-variables.md#authentication)) +* **`allauth_gitlab_secret`** - GitLab OAuth Application secret **Create each secret using this command** (see [Docker Secrets documentation](https://docs.docker.com/reference/cli/docker/secret/create/) for more details): @@ -147,6 +151,10 @@ services: - codebase_gitlab_webhook_secret - daiv_sandbox_api_key - openrouter_api_key + - allauth_github_client_id + - allauth_github_secret + - allauth_gitlab_client_id + - allauth_gitlab_secret networks: - internal - external @@ -282,6 +290,14 @@ secrets: external: true sentry_access_token: external: true + allauth_github_client_id: + external: true + allauth_github_secret: + external: true + allauth_gitlab_client_id: + external: true + allauth_gitlab_secret: + external: true ``` @@ -370,6 +386,11 @@ x-app-defaults: &x_app_default OPENROUTER_API_KEY: openrouter-api-key (8) # Sandbox settings DAIV_SANDBOX_API_KEY: daiv-sandbox-api-key (9) + # Authentication (at least one social provider recommended) + ALLAUTH_GITHUB_CLIENT_ID: github-client-id + ALLAUTH_GITHUB_SECRET: github-secret + ALLAUTH_GITLAB_CLIENT_ID: gitlab-client-id + ALLAUTH_GITLAB_SECRET: gitlab-secret services: db: @@ -628,7 +649,7 @@ server { systemctl restart nginx ``` -**Verify the configuration** by accessing your domain in a web browser. You should see the DAIV interface. +**Verify the configuration** by accessing your domain in a web browser. You should see the DAIV login page at `https://your-domain/accounts/login/`. --- diff --git a/docs/reference/env-variables.md b/docs/reference/env-variables.md index 2d899386..536f8fd0 100644 --- a/docs/reference/env-variables.md +++ b/docs/reference/env-variables.md @@ -110,6 +110,29 @@ Variables marked with: !!! note "Global policy vs. repository policy" `DAIV_SANDBOX_COMMAND_POLICY_DISALLOW` and `DAIV_SANDBOX_COMMAND_POLICY_ALLOW` set global defaults. Per-repository overrides are defined in the `.daiv.yml` `sandbox.command_policy` section and are merged at evaluation time. Built-in safety rules (blocking `git commit`, `git push`, etc.) cannot be overridden by either mechanism. +### Authentication + +DAIV uses [django-allauth](https://docs.allauth.org/) for web authentication. Users sign in via social providers (GitHub, GitLab) or passwordless login-by-code for existing accounts. Configure at least one social provider. + +| Variable | Description | Default | Example | +|-------------------------|------------------------------------|:--------------:|-----------------| +| `ALLAUTH_GITHUB_CLIENT_ID` :material-lock: | GitHub OAuth App client ID | *(none)* | `Iv1.abc123` | +| `ALLAUTH_GITHUB_SECRET` :material-lock: | GitHub OAuth App secret | *(none)* | | +| `ALLAUTH_GITLAB_CLIENT_ID` :material-lock: | GitLab OAuth Application ID | *(none)* | | +| `ALLAUTH_GITLAB_SECRET` :material-lock: | GitLab OAuth Application secret | *(none)* | | +| `ALLAUTH_GITLAB_URL` | GitLab instance URL (for OAuth redirects to the user's browser) | `https://gitlab.com` | `https://gitlab.example.com` | +| `ALLAUTH_GITLAB_SERVER_URL` | GitLab server URL (for server-to-server API calls, if different from `ALLAUTH_GITLAB_URL`) | *(none)* | `http://gitlab:8929` | +| `EMAIL_BACKEND` | Django email backend for login-by-code emails | `django.core.mail.backends.console.EmailBackend` | `django.core.mail.backends.smtp.EmailBackend` | +| `DEFAULT_FROM_EMAIL` | Sender address for login-by-code emails | `noreply@daiv.dev` | `noreply@example.com` | + +!!! info "Setting up social providers" + **GitHub**: Create an OAuth App at [github.com/settings/developers](https://github.com/settings/developers). Set the callback URL to `https:///accounts/github/login/callback/`. + + **GitLab**: Create an Application in your GitLab instance under **Admin Area → Applications** or **User Settings → Applications**. Set the redirect URI to `https:///accounts/gitlab/login/callback/` with the `read_user` scope. + +!!! note + Social providers are only registered when **both** client ID and secret are set. If only one is configured, a warning is logged and the provider button is not shown on the login page. + ### Other | Variable | Description | Default | Example | @@ -117,7 +140,7 @@ Variables marked with: | `DAIV_EXTERNAL_URL` | External URL of the application. | `https://app:8000` | `https://daiv.example.com` | !!! note - The `DAIV_EXTERNAL_URL` variable is used to define webhooks on Git platform. Make sure that the URL is accessible from the Git platform. + The `DAIV_EXTERNAL_URL` variable is used to define webhooks on Git platform and as the site domain for authentication emails. Make sure that the URL is accessible from the Git platform. --- diff --git a/pyproject.toml b/pyproject.toml index a50144eb..3fa7a73b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,6 +22,7 @@ dependencies = [ "ddgs==9.11.4", "deepagents==0.4.12", "django==6.0.3", + "django-allauth[socialaccount]==65.4.0", "django-crontask==1.1.3", "django-extensions==4.1.0", "django-ninja==1.6.2", @@ -53,6 +54,7 @@ dependencies = [ "sentry-sdk==2.56.0", "unidiff==0.7.5", "uvicorn[standard]==0.42.0", + "whitenoise==6.9.0", ] urls.changelog = "https://github.com/srtab/daiv/blob/main/CHANGELOG.md" urls.issues = "https://github.com/srtab/daiv/issues" diff --git a/uv.lock b/uv.lock index c965ac3a..a25bd6e7 100644 --- a/uv.lock +++ b/uv.lock @@ -416,6 +416,7 @@ dependencies = [ { name = "ddgs" }, { name = "deepagents" }, { name = "django" }, + { name = "django-allauth", extra = ["socialaccount"] }, { name = "django-crontask" }, { name = "django-extensions" }, { name = "django-ninja" }, @@ -447,6 +448,7 @@ dependencies = [ { name = "sentry-sdk" }, { name = "unidiff" }, { name = "uvicorn", extra = ["standard"] }, + { name = "whitenoise" }, ] [package.dev-dependencies] @@ -482,6 +484,7 @@ requires-dist = [ { name = "ddgs", specifier = "==9.11.4" }, { name = "deepagents", specifier = "==0.4.12" }, { name = "django", specifier = "==6.0.3" }, + { name = "django-allauth", extras = ["socialaccount"], specifier = "==65.4.0" }, { name = "django-crontask", specifier = "==1.1.3" }, { name = "django-extensions", specifier = "==4.1.0" }, { name = "django-ninja", specifier = "==1.6.2" }, @@ -513,6 +516,7 @@ requires-dist = [ { name = "sentry-sdk", specifier = "==2.56.0" }, { name = "unidiff", specifier = "==0.7.5" }, { name = "uvicorn", extras = ["standard"], specifier = "==0.42.0" }, + { name = "whitenoise", specifier = "==6.9.0" }, ] [package.metadata.requires-dev] @@ -652,6 +656,23 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/72/b1/23f2556967c45e34d3d3cf032eb1bd3ef925ee458667fb99052a0b3ea3a6/django-6.0.3-py3-none-any.whl", hash = "sha256:2e5974441491ddb34c3f13d5e7a9f97b07ba03bf70234c0a9c68b79bbb235bc3", size = 8358527, upload-time = "2026-03-03T13:55:10.552Z" }, ] +[[package]] +name = "django-allauth" +version = "65.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asgiref" }, + { name = "django" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b4/f0/8aca7cc8c63b432565472e231ace2edfe3966304884f0ab106362e586ff8/django_allauth-65.4.0.tar.gz", hash = "sha256:1b6eb5d4a781a9a18dcd5ccf2bcae7ae542a56baea8e7b8f33a54c743cb54b0a", size = 1559056, upload-time = "2025-02-06T09:29:42.93Z" } + +[package.optional-dependencies] +socialaccount = [ + { name = "pyjwt", extra = ["crypto"] }, + { name = "requests" }, + { name = "requests-oauthlib" }, +] + [[package]] name = "django-crontask" version = "1.1.3" @@ -931,6 +952,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3f/ae/8bffcbd373b57a5992cd077cbe8858fff39110480a9d50697091faea6f39/greenlet-3.3.2-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:8d1658d7291f9859beed69a776c10822a0a799bc4bfe1bd4272bb60e62507dab", size = 279650, upload-time = "2026-02-20T20:18:00.783Z" }, { url = "https://files.pythonhosted.org/packages/d1/c0/45f93f348fa49abf32ac8439938726c480bd96b2a3c6f4d949ec0124b69f/greenlet-3.3.2-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:18cb1b7337bca281915b3c5d5ae19f4e76d35e1df80f4ad3c1a7be91fadf1082", size = 650295, upload-time = "2026-02-20T20:47:34.036Z" }, { url = "https://files.pythonhosted.org/packages/b3/de/dd7589b3f2b8372069ab3e4763ea5329940fc7ad9dcd3e272a37516d7c9b/greenlet-3.3.2-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c2e47408e8ce1c6f1ceea0dffcdf6ebb85cc09e55c7af407c99f1112016e45e9", size = 662163, upload-time = "2026-02-20T20:56:01.295Z" }, + { url = "https://files.pythonhosted.org/packages/cd/ac/85804f74f1ccea31ba518dcc8ee6f14c79f73fe36fa1beba38930806df09/greenlet-3.3.2-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e3cb43ce200f59483eb82949bf1835a99cf43d7571e900d7c8d5c62cdf25d2f9", size = 675371, upload-time = "2026-02-20T21:02:49.664Z" }, { url = "https://files.pythonhosted.org/packages/d2/d8/09bfa816572a4d83bccd6750df1926f79158b1c36c5f73786e26dbe4ee38/greenlet-3.3.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63d10328839d1973e5ba35e98cccbca71b232b14051fd957b6f8b6e8e80d0506", size = 664160, upload-time = "2026-02-20T20:21:04.015Z" }, { url = "https://files.pythonhosted.org/packages/48/cf/56832f0c8255d27f6c35d41b5ec91168d74ec721d85f01a12131eec6b93c/greenlet-3.3.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8e4ab3cfb02993c8cc248ea73d7dae6cec0253e9afa311c9b37e603ca9fad2ce", size = 1619181, upload-time = "2026-02-20T20:49:36.052Z" }, { url = "https://files.pythonhosted.org/packages/0a/23/b90b60a4aabb4cec0796e55f25ffbfb579a907c3898cd2905c8918acaa16/greenlet-3.3.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:94ad81f0fd3c0c0681a018a976e5c2bd2ca2d9d94895f23e7bb1af4e8af4e2d5", size = 1687713, upload-time = "2026-02-20T20:21:11.684Z" }, @@ -939,6 +961,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/98/6d/8f2ef704e614bcf58ed43cfb8d87afa1c285e98194ab2cfad351bf04f81e/greenlet-3.3.2-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:e26e72bec7ab387ac80caa7496e0f908ff954f31065b0ffc1f8ecb1338b11b54", size = 286617, upload-time = "2026-02-20T20:19:29.856Z" }, { url = "https://files.pythonhosted.org/packages/5e/0d/93894161d307c6ea237a43988f27eba0947b360b99ac5239ad3fe09f0b47/greenlet-3.3.2-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b466dff7a4ffda6ca975979bab80bdadde979e29fc947ac3be4451428d8b0e4", size = 655189, upload-time = "2026-02-20T20:47:35.742Z" }, { url = "https://files.pythonhosted.org/packages/f5/2c/d2d506ebd8abcb57386ec4f7ba20f4030cbe56eae541bc6fd6ef399c0b41/greenlet-3.3.2-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b8bddc5b73c9720bea487b3bffdb1840fe4e3656fba3bd40aa1489e9f37877ff", size = 658225, upload-time = "2026-02-20T20:56:02.527Z" }, + { url = "https://files.pythonhosted.org/packages/d1/67/8197b7e7e602150938049d8e7f30de1660cfb87e4c8ee349b42b67bdb2e1/greenlet-3.3.2-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:59b3e2c40f6706b05a9cd299c836c6aa2378cabe25d021acd80f13abf81181cf", size = 666581, upload-time = "2026-02-20T21:02:51.526Z" }, { url = "https://files.pythonhosted.org/packages/8e/30/3a09155fbf728673a1dea713572d2d31159f824a37c22da82127056c44e4/greenlet-3.3.2-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b26b0f4428b871a751968285a1ac9648944cea09807177ac639b030bddebcea4", size = 657907, upload-time = "2026-02-20T20:21:05.259Z" }, { url = "https://files.pythonhosted.org/packages/f3/fd/d05a4b7acd0154ed758797f0a43b4c0962a843bedfe980115e842c5b2d08/greenlet-3.3.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1fb39a11ee2e4d94be9a76671482be9398560955c9e568550de0224e41104727", size = 1618857, upload-time = "2026-02-20T20:49:37.309Z" }, { url = "https://files.pythonhosted.org/packages/6f/e1/50ee92a5db521de8f35075b5eff060dd43d39ebd46c2181a2042f7070385/greenlet-3.3.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:20154044d9085151bc309e7689d6f7ba10027f8f5a8c0676ad398b951913d89e", size = 1680010, upload-time = "2026-02-20T20:21:13.427Z" }, @@ -1884,6 +1907,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1f/b6/7c0d4334c15983cec7f92a69e8ce9b1e6f31857e5ee3a413ac424e6bd63d/numpy-2.4.3-cp314-cp314t-win_arm64.whl", hash = "sha256:4d382735cecd7bcf090172489a525cd7d4087bc331f7df9f60ddc9a296cf208e", size = 10565454, upload-time = "2026-03-09T07:58:33.031Z" }, ] +[[package]] +name = "oauthlib" +version = "3.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/5f/19930f824ffeb0ad4372da4812c50edbd1434f678c90c2733e1188edfc63/oauthlib-3.3.1.tar.gz", hash = "sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9", size = 185918, upload-time = "2025-06-19T22:48:08.269Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl", hash = "sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", size = 160065, upload-time = "2025-06-19T22:48:06.508Z" }, +] + [[package]] name = "openai" version = "2.30.0" @@ -2766,6 +2798,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/56/5d/c814546c2333ceea4ba42262d8c4d55763003e767fa169adc693bd524478/requests-2.33.0-py3-none-any.whl", hash = "sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b", size = 65017, upload-time = "2026-03-25T15:10:40.382Z" }, ] +[[package]] +name = "requests-oauthlib" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "oauthlib" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/f2/05f29bc3913aea15eb670be136045bf5c5bbf4b99ecb839da9b422bb2c85/requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9", size = 55650, upload-time = "2024-03-22T20:32:29.939Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36", size = 24179, upload-time = "2024-03-22T20:32:28.055Z" }, +] + [[package]] name = "requests-toolbelt" version = "1.0.0" @@ -3359,6 +3404,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6f/28/258ebab549c2bf3e64d2b0217b973467394a9cea8c42f70418ca2c5d0d2e/websockets-16.0-py3-none-any.whl", hash = "sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec", size = 171598, upload-time = "2026-01-10T09:23:45.395Z" }, ] +[[package]] +name = "whitenoise" +version = "6.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/cf/c15c2f21aee6b22a9f6fc9be3f7e477e2442ec22848273db7f4eb73d6162/whitenoise-6.9.0.tar.gz", hash = "sha256:8c4a7c9d384694990c26f3047e118c691557481d624f069b7f7752a2f735d609", size = 25920, upload-time = "2025-02-06T22:16:34.957Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b2/2ce9263149fbde9701d352bda24ea1362c154e196d2fda2201f18fc585d7/whitenoise-6.9.0-py3-none-any.whl", hash = "sha256:c8a489049b7ee9889617bb4c274a153f3d979e8f51d2efd0f5b403caf41c57df", size = 20161, upload-time = "2025-02-06T22:16:32.589Z" }, +] + [[package]] name = "wrapt" version = "2.1.2" From a44b98e3351b179c5bfe91468806227a109b7a02 Mon Sep 17 00:00:00 2001 From: Sandro Date: Sat, 28 Mar 2026 23:40:11 +0000 Subject: [PATCH 02/11] perf(auth): Defer inline message dismiss script Change {% endif %} {% block content %}{% endblock %} From fab984f4677a34be6d944916b47ee179ffb1a8e1 Mon Sep 17 00:00:00 2001 From: Sandro Date: Sun, 29 Mar 2026 23:54:06 +0100 Subject: [PATCH 03/11] refactor(docker): Centralise Tailwind CSS version in a build ARG The version was hardcoded in both Dockerfiles. A top-level ARG with a default makes upgrades a single-edit operation per file and allows overriding at build time via --build-arg. --- docker/local/app/Dockerfile | 7 +++++-- docker/production/app/Dockerfile | 6 +++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/docker/local/app/Dockerfile b/docker/local/app/Dockerfile index a64f65ed..fd3a779b 100644 --- a/docker/local/app/Dockerfile +++ b/docker/local/app/Dockerfile @@ -1,5 +1,9 @@ +ARG TAILWIND_VERSION="v4.1.7" + FROM debian:bookworm-slim +ARG TAILWIND_VERSION + LABEL maintainer="srtabs@gmail.com" RUN apt-get update \ @@ -63,8 +67,7 @@ RUN uv sync \ && mkdir -p /home/app/data # Install Tailwind CSS standalone CLI (v4) -RUN TAILWIND_VERSION="v4.1.7" \ - && ARCH=$(dpkg --print-architecture | sed 's/amd64/x64/' | sed 's/arm64/arm64/') \ +RUN ARCH=$(dpkg --print-architecture | sed 's/amd64/x64/' | sed 's/arm64/arm64/') \ && curl -sfLO "https://github.com/tailwindlabs/tailwindcss/releases/download/${TAILWIND_VERSION}/tailwindcss-linux-${ARCH}" \ && chmod +x "tailwindcss-linux-${ARCH}" \ && mv "tailwindcss-linux-${ARCH}" /home/app/.local/bin/tailwindcss diff --git a/docker/production/app/Dockerfile b/docker/production/app/Dockerfile index 47ce5e2a..7105fb23 100644 --- a/docker/production/app/Dockerfile +++ b/docker/production/app/Dockerfile @@ -1,3 +1,5 @@ +ARG TAILWIND_VERSION="v4.1.7" + ######################################################################################################### # Python compile image ######################################################################################################### @@ -35,6 +37,8 @@ RUN --mount=type=cache,target=/root/.cache/uv \ ######################################################################################################### FROM python:3.14.2-slim-bookworm AS python-builder +ARG TAILWIND_VERSION + LABEL maintainer="srtabs@gmail.com" RUN apt-get update \ @@ -94,7 +98,7 @@ RUN chmod +x entrypoint start-app start-worker start-crontask \ && mkdir -p data/media data/static \ # Build Tailwind CSS && ARCH=$(dpkg --print-architecture | sed 's/amd64/x64/' | sed 's/arm64/arm64/') \ - && curl -sfLO "https://github.com/tailwindlabs/tailwindcss/releases/download/v4.1.7/tailwindcss-linux-${ARCH}" \ + && curl -sfLO "https://github.com/tailwindlabs/tailwindcss/releases/download/${TAILWIND_VERSION}/tailwindcss-linux-${ARCH}" \ && chmod +x "tailwindcss-linux-${ARCH}" \ && ./"tailwindcss-linux-${ARCH}" -i app/accounts/static_src/css/input.css -o app/accounts/static/accounts/css/styles.css --minify \ && rm "tailwindcss-linux-${ARCH}" From 851b84841a433262bb528188433bb7c6dc622b82 Mon Sep 17 00:00:00 2001 From: Sandro Date: Sun, 29 Mar 2026 23:54:12 +0100 Subject: [PATCH 04/11] refactor(auth): Replace hardcoded /api/docs/ link with {% url %} tag Set a stable urls_namespace="api" on NinjaAPI so the dashboard template can use {% url 'api:openapi-view' %} instead of a hardcoded path. --- daiv/accounts/templates/accounts/dashboard.html | 2 +- daiv/daiv/api.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/daiv/accounts/templates/accounts/dashboard.html b/daiv/accounts/templates/accounts/dashboard.html index 3279ad76..48d6b56a 100644 --- a/daiv/accounts/templates/accounts/dashboard.html +++ b/daiv/accounts/templates/accounts/dashboard.html @@ -30,7 +30,7 @@

Dashboard

-
diff --git a/daiv/daiv/api.py b/daiv/daiv/api.py index 0436f5e1..c273d404 100644 --- a/daiv/daiv/api.py +++ b/daiv/daiv/api.py @@ -6,7 +6,7 @@ from . import __version__ -api = NinjaAPI(version=__version__, title="Daiv API", docs_url="/docs/") +api = NinjaAPI(version=__version__, title="Daiv API", docs_url="/docs/", urls_namespace="api") api.add_router("/codebase", codebase_router) api.add_router("/chat", chat_router) api.add_router("/models", models_router) From 777be43bcfa14fe520ec738d5a61689376396852 Mon Sep 17 00:00:00 2001 From: Sandro Date: Sun, 29 Mar 2026 23:54:29 +0100 Subject: [PATCH 05/11] test(auth): Add tests for APIKeyCreateView and APIKeyRevokeView Cover the happy-path create flow, ownership check (a user cannot revoke another user's key), already-revoked guard, and login-required redirects. --- daiv/accounts/forms.py | 2 - tests/unit_tests/accounts/test_views.py | 105 ++++++++++++++++++++++++ 2 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 tests/unit_tests/accounts/test_views.py diff --git a/daiv/accounts/forms.py b/daiv/accounts/forms.py index 118a45cc..daf259e3 100644 --- a/daiv/accounts/forms.py +++ b/daiv/accounts/forms.py @@ -4,8 +4,6 @@ class APIKeyCreateForm(forms.ModelForm): - name = forms.CharField(max_length=128) - class Meta: model = APIKey fields = ["name"] diff --git a/tests/unit_tests/accounts/test_views.py b/tests/unit_tests/accounts/test_views.py new file mode 100644 index 00000000..7c7f0c8b --- /dev/null +++ b/tests/unit_tests/accounts/test_views.py @@ -0,0 +1,105 @@ +from django.contrib.messages import get_messages +from django.test import Client +from django.urls import reverse + +import pytest + +from accounts.models import APIKey, User + + +@pytest.fixture +def user(db): + return User.objects.create_user(username="alice", email="alice@test.com", password="testpass123") # noqa: S106 + + +@pytest.fixture +def other_user(db): + return User.objects.create_user(username="bob", email="bob@test.com", password="testpass456") # noqa: S106 + + +@pytest.fixture +def logged_in_client(user): + client = Client() + client.force_login(user) + return client + + +def _create_api_key(user, name="test-key"): + gen = APIKey.objects.key_generator + key, prefix, hashed_key = gen.generate() + api_key = APIKey.objects.create(user=user, name=name, prefix=prefix, hashed_key=hashed_key) + return api_key, key + + +@pytest.mark.django_db +class TestAPIKeyCreateView: + def test_create_stores_key_in_session(self, logged_in_client, user): + response = logged_in_client.post(reverse("api_key_create"), {"name": "my-key"}) + assert response.status_code == 302 + assert response.url == reverse("api_keys") + + api_key = APIKey.objects.get(user=user) + assert api_key.name == "my-key" + assert not api_key.revoked + + # The raw key was stored in the session so it can be shown once on the list page. + session = logged_in_client.session + assert api_key.prefix in session["new_api_key"] + + def test_create_multiple_keys(self, logged_in_client, user): + logged_in_client.post(reverse("api_key_create"), {"name": "key-1"}) + logged_in_client.post(reverse("api_key_create"), {"name": "key-2"}) + + assert APIKey.objects.filter(user=user).count() == 2 + + def test_create_requires_login(self): + client = Client() + response = client.post(reverse("api_key_create"), {"name": "my-key"}) + assert response.status_code == 302 + assert "/accounts/login/" in response.url + + +@pytest.mark.django_db +class TestAPIKeyRevokeView: + def test_revoke_own_key(self, logged_in_client, user): + api_key, _ = _create_api_key(user) + + response = logged_in_client.post(reverse("api_key_revoke", kwargs={"pk": api_key.pk})) + assert response.status_code == 302 + + api_key.refresh_from_db() + assert api_key.revoked + + def test_cannot_revoke_other_users_key(self, logged_in_client, other_user): + api_key, _ = _create_api_key(other_user, name="bob-key") + + response = logged_in_client.post(reverse("api_key_revoke", kwargs={"pk": api_key.pk})) + assert response.status_code == 302 + + api_key.refresh_from_db() + assert not api_key.revoked + + msgs = list(get_messages(response.wsgi_request)) + assert any("not found" in str(m).lower() for m in msgs) + + def test_revoke_already_revoked_key(self, logged_in_client, user): + api_key, _ = _create_api_key(user) + api_key.revoked = True + api_key.save(update_fields=["revoked"]) + + response = logged_in_client.post(reverse("api_key_revoke", kwargs={"pk": api_key.pk})) + assert response.status_code == 302 + + msgs = list(get_messages(response.wsgi_request)) + assert any("already revoked" in str(m).lower() for m in msgs) + + def test_revoke_requires_login(self, user): + api_key, _ = _create_api_key(user) + + client = Client() + response = client.post(reverse("api_key_revoke", kwargs={"pk": api_key.pk})) + assert response.status_code == 302 + assert "/accounts/login/" in response.url + + api_key.refresh_from_db() + assert not api_key.revoked From 37fb3785613852565dcb655a2bf883230ade3cc5 Mon Sep 17 00:00:00 2001 From: Sandro Date: Mon, 30 Mar 2026 00:30:55 +0100 Subject: [PATCH 06/11] refactor(auth): Split monolithic urls.py into dedicated URL modules Replace single accounts/urls.py with allauth_urls.py, api_keys_urls.py, and dashboard_urls.py. Move custom GitLab OAuth and allauth routes from the root urlconf into accounts/allauth_urls.py so each concern has its own module. --- daiv/accounts/allauth_urls.py | 28 ++++++++++++++++++++++++++++ daiv/accounts/api_keys_urls.py | 9 +++++++++ daiv/accounts/dashboard_urls.py | 5 +++++ daiv/accounts/urls.py | 10 ---------- daiv/daiv/urls.py | 12 +++--------- 5 files changed, 45 insertions(+), 19 deletions(-) create mode 100644 daiv/accounts/allauth_urls.py create mode 100644 daiv/accounts/api_keys_urls.py create mode 100644 daiv/accounts/dashboard_urls.py delete mode 100644 daiv/accounts/urls.py diff --git a/daiv/accounts/allauth_urls.py b/daiv/accounts/allauth_urls.py new file mode 100644 index 00000000..fc986236 --- /dev/null +++ b/daiv/accounts/allauth_urls.py @@ -0,0 +1,28 @@ +from django.urls import path + +from allauth.account import views as account_views +from allauth.socialaccount import views as socialaccount_views +from allauth.urls import build_provider_urlpatterns + +from accounts.socialaccount import oauth2_callback, oauth2_login + +urlpatterns = [ + # Custom GitLab OAuth adapter must come before auto-discovered provider + # URLs so it takes precedence. This lets us use a Docker-internal URL for + # server-side token exchange while keeping the browser-facing authorize URL + # unchanged. + path("gitlab/login/", oauth2_login, name="gitlab_login"), + path("gitlab/login/callback/", oauth2_callback, name="gitlab_callback"), + # Account views (login, logout, login-by-code only — no signup, password, + # or email management routes). + path("login/", account_views.login, name="account_login"), + path("logout/", account_views.logout, name="account_logout"), + path("login/code/", account_views.request_login_code, name="account_request_login_code"), + path("login/code/confirm/", account_views.confirm_login_code, name="account_confirm_login_code"), + # Social account views required by the OAuth flow. + path("3rdparty/login/cancelled/", socialaccount_views.login_cancelled, name="socialaccount_login_cancelled"), + path("3rdparty/login/error/", socialaccount_views.login_error, name="socialaccount_login_error"), + path("3rdparty/signup/", socialaccount_views.signup, name="socialaccount_signup"), + # Auto-discovered OAuth provider URLs (GitHub, GitLab, etc.). + *build_provider_urlpatterns(), +] diff --git a/daiv/accounts/api_keys_urls.py b/daiv/accounts/api_keys_urls.py new file mode 100644 index 00000000..f67a7439 --- /dev/null +++ b/daiv/accounts/api_keys_urls.py @@ -0,0 +1,9 @@ +from django.urls import path + +from accounts.views import APIKeyCreateView, APIKeyListView, APIKeyRevokeView + +urlpatterns = [ + path("", APIKeyListView.as_view(), name="api_keys"), + path("create/", APIKeyCreateView.as_view(), name="api_key_create"), + path("/revoke/", APIKeyRevokeView.as_view(), name="api_key_revoke"), +] diff --git a/daiv/accounts/dashboard_urls.py b/daiv/accounts/dashboard_urls.py new file mode 100644 index 00000000..9eac277a --- /dev/null +++ b/daiv/accounts/dashboard_urls.py @@ -0,0 +1,5 @@ +from django.urls import path + +from accounts.views import DashboardView + +urlpatterns = [path("", DashboardView.as_view(), name="dashboard")] diff --git a/daiv/accounts/urls.py b/daiv/accounts/urls.py deleted file mode 100644 index a40388d7..00000000 --- a/daiv/accounts/urls.py +++ /dev/null @@ -1,10 +0,0 @@ -from django.urls import path - -from accounts.views import APIKeyCreateView, APIKeyListView, APIKeyRevokeView, DashboardView - -urlpatterns = [ - path("", DashboardView.as_view(), name="dashboard"), - path("api-keys/", APIKeyListView.as_view(), name="api_keys"), - path("api-keys/create/", APIKeyCreateView.as_view(), name="api_key_create"), - path("api-keys//revoke/", APIKeyRevokeView.as_view(), name="api_key_revoke"), -] diff --git a/daiv/daiv/urls.py b/daiv/daiv/urls.py index 2ed19eb5..6e7cebee 100644 --- a/daiv/daiv/urls.py +++ b/daiv/daiv/urls.py @@ -1,18 +1,12 @@ from django.urls import include, path -from accounts.socialaccount import oauth2_callback, oauth2_login from core.views import HealthCheckView from daiv.api import api urlpatterns = [ - # Custom GitLab OAuth views must come before allauth.urls so they take - # precedence over the default GitLab provider views. This lets us use a - # Docker-internal URL for server-side token exchange while keeping the - # browser-facing authorize URL unchanged. - path("accounts/gitlab/login/", oauth2_login, name="gitlab_login"), - path("accounts/gitlab/login/callback/", oauth2_callback, name="gitlab_callback"), - path("accounts/", include("allauth.urls")), - path("dashboard/", include("accounts.urls")), + path("accounts/", include("accounts.allauth_urls")), + path("accounts/api-keys/", include("accounts.api_keys_urls")), + path("dashboard/", include("accounts.dashboard_urls")), path("api/", api.urls), path("-/alive/", HealthCheckView.as_view(), name="health_check"), ] From a1c8f0d7ac58574c660ebba645a96709694e930a Mon Sep 17 00:00:00 2001 From: Sandro Date: Mon, 30 Mar 2026 00:31:04 +0100 Subject: [PATCH 07/11] chore(docker): Bump Tailwind CSS from v4.1.7 to v4.2.2 --- docker/local/app/Dockerfile | 2 +- docker/production/app/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/local/app/Dockerfile b/docker/local/app/Dockerfile index fd3a779b..479ff9f4 100644 --- a/docker/local/app/Dockerfile +++ b/docker/local/app/Dockerfile @@ -1,4 +1,4 @@ -ARG TAILWIND_VERSION="v4.1.7" +ARG TAILWIND_VERSION="v4.2.2" FROM debian:bookworm-slim diff --git a/docker/production/app/Dockerfile b/docker/production/app/Dockerfile index 7105fb23..4dc6ea2d 100644 --- a/docker/production/app/Dockerfile +++ b/docker/production/app/Dockerfile @@ -1,4 +1,4 @@ -ARG TAILWIND_VERSION="v4.1.7" +ARG TAILWIND_VERSION="v4.2.2" ######################################################################################################### # Python compile image From a2af9c8080dfd2c4013845cae0fcc3a72621fb50 Mon Sep 17 00:00:00 2001 From: Sandro Date: Mon, 30 Mar 2026 12:09:48 +0100 Subject: [PATCH 08/11] feat(dashboard): Add activity counters with temporal filtering Display job stats (total processed, success rate, issues resolved, MRs assisted, active API keys) on the dashboard with period filter pills (7d/30d/90d/all). Tasks now return a code_changes flag via GitState so the dashboard can distinguish jobs that produced code from comment-only runs. Recovery logic extracted to BaseManager and GitPushPermissionError now propagates to callers. --- .../templates/accounts/dashboard.html | 23 ++++++++- daiv/accounts/views.py | 48 +++++++++++++++++++ daiv/automation/agent/middlewares/git.py | 17 +++---- daiv/codebase/managers/base.py | 44 +++++++++++++++++ daiv/codebase/managers/issue_addressor.py | 34 ++++++------- daiv/codebase/managers/review_addressor.py | 35 +++++++------- daiv/codebase/tasks.py | 8 ++-- .../automation/agent/middlewares/test_git.py | 17 ++++--- 8 files changed, 170 insertions(+), 56 deletions(-) diff --git a/daiv/accounts/templates/accounts/dashboard.html b/daiv/accounts/templates/accounts/dashboard.html index 48d6b56a..bec57ed8 100644 --- a/daiv/accounts/templates/accounts/dashboard.html +++ b/daiv/accounts/templates/accounts/dashboard.html @@ -28,7 +28,28 @@

Dashboard

Welcome back, {{ user.name|default:user.email }}

-
+ + + + +
+ {% for counter in counters %} +
+

{{ counter.value }}

+

{{ counter.label }}

+
+ {% endfor %} +
+ +
diff --git a/daiv/accounts/views.py b/daiv/accounts/views.py index f2b4a934..7c39953e 100644 --- a/daiv/accounts/views.py +++ b/daiv/accounts/views.py @@ -1,21 +1,69 @@ import logging +from datetime import timedelta from django.contrib import messages from django.contrib.auth.mixins import LoginRequiredMixin from django.db import IntegrityError +from django.db.models import Count, Q from django.shortcuts import redirect +from django.utils import timezone from django.views import View from django.views.generic import TemplateView +from django_tasks.base import TaskResultStatus +from django_tasks_db.models import DBTaskResult + from accounts.forms import APIKeyCreateForm from accounts.models import APIKey logger = logging.getLogger(__name__) +ISSUE_TASK_PATH = "codebase.tasks.address_issue_task" +MR_TASK_PATH = "codebase.tasks.address_mr_comments_task" +TASK_PATHS = (ISSUE_TASK_PATH, MR_TASK_PATH) + +PERIOD_CHOICES = [("7d", "7 days", 7), ("30d", "30 days", 30), ("90d", "90 days", 90), ("all", "All time", None)] +PERIOD_DAYS = {key: days for key, _, days in PERIOD_CHOICES} +DEFAULT_PERIOD = "30d" + class DashboardView(LoginRequiredMixin, TemplateView): template_name = "accounts/dashboard.html" + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + + period = self.request.GET.get("period", DEFAULT_PERIOD) + if period not in PERIOD_DAYS: + period = DEFAULT_PERIOD + days = PERIOD_DAYS[period] + + tasks = DBTaskResult.objects.filter(task_path__in=TASK_PATHS) + if days is not None: + tasks = tasks.filter(enqueued_at__gte=timezone.now() - timedelta(days=days)) + + successful = Q(status=TaskResultStatus.SUCCESSFUL) + code_changes = Q(return_value__code_changes=True) + stats = tasks.aggregate( + total=Count("id"), + successful=Count("id", filter=successful), + issues=Count("id", filter=successful & code_changes & Q(task_path=ISSUE_TASK_PATH)), + mrs=Count("id", filter=successful & code_changes & Q(task_path=MR_TASK_PATH)), + ) + active_api_keys = APIKey.objects.filter(user=self.request.user, revoked=False).count() + + total = stats["total"] + context["counters"] = [ + {"label": "Jobs processed", "value": total}, + {"label": "Success rate", "value": f"{round(stats['successful'] / total * 100)}%" if total else "—"}, + {"label": "Issues resolved", "value": stats["issues"]}, + {"label": "MRs assisted", "value": stats["mrs"]}, + {"label": "Active API keys", "value": active_api_keys}, + ] + context["periods"] = [{"key": key, "label": label} for key, label, _ in PERIOD_CHOICES] + context["current_period"] = period + return context + class APIKeyListView(LoginRequiredMixin, TemplateView): template_name = "accounts/api_keys.html" diff --git a/daiv/automation/agent/middlewares/git.py b/daiv/automation/agent/middlewares/git.py index 30e64970..cdf232d2 100644 --- a/daiv/automation/agent/middlewares/git.py +++ b/daiv/automation/agent/middlewares/git.py @@ -12,7 +12,7 @@ from automation.agent.publishers import GitChangePublisher from codebase.base import MergeRequest, Scope from codebase.context import RuntimeCtx # noqa: TC001 -from codebase.utils import GitManager, GitPushPermissionError, get_repo_ref +from codebase.utils import GitManager, get_repo_ref if TYPE_CHECKING: from collections.abc import Awaitable, Callable @@ -58,6 +58,11 @@ class GitState(AgentState): The merge request used to commit the changes. """ + code_changes: Annotated[bool, PrivateStateAttr] + """ + Whether the agent produced code changes that were published to the repository. + """ + class GitMiddleware(AgentMiddleware[GitState, RuntimeCtx]): """ @@ -118,7 +123,7 @@ async def abefore_agent(self, state: GitState, runtime: Runtime[RuntimeCtx]) -> logger.warning("[%s] Failed to checkout to branch '%s': %s", self.name, merge_request.source_branch, e) merge_request = None - return {"merge_request": merge_request} + return {"merge_request": merge_request, "code_changes": False} async def awrap_model_call( self, request: ModelRequest[RuntimeCtx], handler: Callable[[ModelRequest[RuntimeCtx]], Awaitable[ModelResponse]] @@ -153,17 +158,13 @@ async def aafter_agent(self, state: GitState, runtime: Runtime[RuntimeCtx]) -> d return None publisher = GitChangePublisher(runtime.context) - try: - merge_request = await publisher.publish(merge_request=state.get("merge_request"), skip_ci=self.skip_ci) - except GitPushPermissionError as e: - logger.warning("[%s] Failed to publish changes due to git push permissions: %s", self.name, e) - return None + merge_request = await publisher.publish(merge_request=state.get("merge_request"), skip_ci=self.skip_ci) if merge_request: if runtime.context.scope == Scope.ISSUE and (rt := get_current_run_tree()): # If an issue resulted in a merge request, we send it to LangSmith for tracking. rt.metadata["merge_request_id"] = merge_request.merge_request_id - return {"merge_request": merge_request} + return {"merge_request": merge_request, "code_changes": True} return None diff --git a/daiv/codebase/managers/base.py b/daiv/codebase/managers/base.py index 2594a2b1..4ad0995d 100644 --- a/daiv/codebase/managers/base.py +++ b/daiv/codebase/managers/base.py @@ -1,13 +1,20 @@ +import logging from typing import TYPE_CHECKING from langgraph.store.memory import InMemoryStore +from automation.agent.publishers import GitChangePublisher from codebase.clients import RepoClient from codebase.utils import GitManager if TYPE_CHECKING: + from langchain.agents import CompiledAgent + from langchain_core.runnables import RunnableConfig + from codebase.context import RuntimeCtx +logger = logging.getLogger("daiv.managers") + class BaseManager: """ @@ -22,3 +29,40 @@ def __init__(self, *, runtime_ctx: RuntimeCtx): self.client = RepoClient.create_instance() self.store = InMemoryStore() self.git_manager = GitManager(self.ctx.gitrepo) + + async def _recover_draft( + self, agent: CompiledAgent, config: RunnableConfig, *, entity_label: str, entity_id: int | str + ) -> bool: + """ + Attempt to publish a draft MR from the agent's persisted state after an unexpected error. + + Returns: + Whether a draft merge request was successfully published. + """ + try: + snapshot = await agent.aget_state(config=config) + snapshot_mr = snapshot.values.get("merge_request") + + publisher = GitChangePublisher(self.ctx) + published_mr = await publisher.publish( + merge_request=snapshot_mr, as_draft=(snapshot_mr is None or snapshot_mr.draft) + ) + + if published_mr: + await agent.aupdate_state(config=config, values={"merge_request": published_mr}) + return True + except Exception: + logger.exception("Recovery failed after agent error for %s %s", entity_label, entity_id) + + return False + + @staticmethod + async def _read_code_changes(agent: CompiledAgent, config: RunnableConfig) -> dict[str, bool]: + """ + Read the ``code_changes`` flag from the agent's persisted state. + + ``code_changes`` is a PrivateStateAttr, so it's omitted from ainvoke output. + We read it from the persisted checkpoint instead. + """ + snapshot = await agent.aget_state(config=config) + return {"code_changes": bool(snapshot.values.get("code_changes"))} diff --git a/daiv/codebase/managers/issue_addressor.py b/daiv/codebase/managers/issue_addressor.py index 7a621c6e..44f01574 100644 --- a/daiv/codebase/managers/issue_addressor.py +++ b/daiv/codebase/managers/issue_addressor.py @@ -9,7 +9,6 @@ from langgraph.checkpoint.redis.aio import AsyncRedisSaver from automation.agent.graph import create_daiv_agent -from automation.agent.publishers import GitChangePublisher from automation.agent.utils import extract_text_content, get_daiv_agent_kwargs from codebase.base import GitPlatform from core.constants import BOT_NAME @@ -40,7 +39,9 @@ def __init__(self, *, issue: Issue, mention_comment_id: str | None = None, runti self.mention_comment_id = mention_comment_id @classmethod - async def address_issue(cls, *, issue: Issue, mention_comment_id: str | None = None, runtime_ctx: RuntimeCtx): + async def address_issue( + cls, *, issue: Issue, mention_comment_id: str | None = None, runtime_ctx: RuntimeCtx + ) -> dict[str, bool]: """ Address the issue. @@ -48,16 +49,20 @@ async def address_issue(cls, *, issue: Issue, mention_comment_id: str | None = N issue (Issue): The issue object. mention_comment_id (str | None): The mention comment id. Defaults to None. runtime_ctx (RuntimeCtx): The runtime context. + + Returns: + A dict with ``code_changes`` indicating whether code was published. """ manager = cls(issue=issue, mention_comment_id=mention_comment_id, runtime_ctx=runtime_ctx) try: - await manager._address_issue() + return await manager._address_issue() except Exception as e: logger.exception("Error addressing issue %d: %s", issue.iid, e) manager._add_unable_to_address_issue_note() + return {"code_changes": False} - async def _address_issue(self): + async def _address_issue(self) -> dict[str, bool]: """ Process the issue by addressing it with the appropriate actions. """ @@ -114,22 +119,11 @@ async def _address_issue(self): try: result = await daiv_agent.ainvoke({"messages": messages}, config=agent_config, context=self.ctx) except Exception: - snapshot = await daiv_agent.aget_state(config=agent_config) - - # If and unexpect error occurs while addressing the issue, a draft merge request is created to avoid - # losing the changes made by the agent. - snapshot_mr = snapshot.values.get("merge_request") - - publisher = GitChangePublisher(self.ctx) - published_mr = await publisher.publish( - merge_request=snapshot_mr, as_draft=(snapshot_mr is None or snapshot_mr.draft) + draft_published = await self._recover_draft( + daiv_agent, agent_config, entity_label="issue", entity_id=self.issue.iid ) - - # If the draft merge request is created successfully, we update the state to reflect the new MR. - if published_mr: - await daiv_agent.aupdate_state(config=agent_config, values={"merge_request": published_mr}) - - self._add_unable_to_address_issue_note(draft_published=bool(published_mr)) + self._add_unable_to_address_issue_note(draft_published=draft_published) + return {"code_changes": draft_published} else: if ( result @@ -141,6 +135,8 @@ async def _address_issue(self): else: self._add_unable_to_address_issue_note() + return await self._read_code_changes(daiv_agent, agent_config) + def _add_unable_to_address_issue_note(self, *, draft_published: bool = False): """ Add a note to the issue to inform the user that the response could not be generated. diff --git a/daiv/codebase/managers/review_addressor.py b/daiv/codebase/managers/review_addressor.py index f731c51d..23100917 100644 --- a/daiv/codebase/managers/review_addressor.py +++ b/daiv/codebase/managers/review_addressor.py @@ -13,7 +13,6 @@ from unidiff.patch import Line from automation.agent.graph import create_daiv_agent -from automation.agent.publishers import GitChangePublisher from automation.agent.utils import extract_text_content, get_daiv_agent_kwargs from codebase.base import GitPlatform, MergeRequest, Note, NoteDiffPosition, NoteDiffPositionType, NotePositionType from core.constants import BOT_NAME @@ -199,7 +198,9 @@ def __init__(self, *, merge_request: MergeRequest, mention_comment_id: str, runt ) @classmethod - async def address_comments(cls, *, merge_request: MergeRequest, mention_comment_id: str, runtime_ctx: RuntimeCtx): + async def address_comments( + cls, *, merge_request: MergeRequest, mention_comment_id: str, runtime_ctx: RuntimeCtx + ) -> dict[str, bool]: """ Process comments left directly on the merge request (not in the diff or thread) that mention DAIV. @@ -207,16 +208,20 @@ async def address_comments(cls, *, merge_request: MergeRequest, mention_comment_ merge_request (MergeRequest): The merge request. mention_comment_id (str): The mention comment id. runtime_ctx (RuntimeCtx): The runtime context. + + Returns: + A dict with ``code_changes`` indicating whether code was published. """ manager = cls(merge_request=merge_request, mention_comment_id=mention_comment_id, runtime_ctx=runtime_ctx) try: - await manager._address_comments() + return await manager._address_comments() except Exception: logger.exception("Error addressing comments for merge request: %d", merge_request.merge_request_id) manager._add_unable_to_address_review_note() + return {"code_changes": False} - async def _address_comments(self): + async def _address_comments(self) -> dict[str, bool]: """ Process comments left directly on the merge request (not in the diff or thread) that mention DAIV. """ @@ -263,20 +268,14 @@ async def _address_comments(self): context=self.ctx, ) except Exception: - snapshot = await daiv_agent.aget_state(config=agent_config) - - # If and unexpect error occurs while addressing the review, a draft merge request is created to avoid - # losing the changes made by the agent. - publisher = GitChangePublisher(self.ctx) - merge_request = snapshot.values.get("merge_request") - merge_request = await publisher.publish( - merge_request=merge_request, as_draft=(merge_request is None or merge_request.draft) + draft_published = await self._recover_draft( + daiv_agent, + agent_config, + entity_label="merge request", + entity_id=self.merge_request.merge_request_id, ) - - if merge_request: - await daiv_agent.aupdate_state(config=agent_config, values={"merge_request": merge_request}) - - self._add_unable_to_address_review_note(draft_published=bool(merge_request)) + self._add_unable_to_address_review_note(draft_published=draft_published) + return {"code_changes": draft_published} else: if ( result @@ -288,6 +287,8 @@ async def _address_comments(self): else: self._add_unable_to_address_review_note() + return await self._read_code_changes(daiv_agent, agent_config) + def _add_unable_to_address_review_note(self, *, draft_published: bool = False): """ Add a note to the merge request to inform the user that the review could not be addressed. diff --git a/daiv/codebase/tasks.py b/daiv/codebase/tasks.py index 78a00abb..a95cd95b 100644 --- a/daiv/codebase/tasks.py +++ b/daiv/codebase/tasks.py @@ -30,7 +30,7 @@ def setup_webhooks_cron_task(): @task(dedup=True) async def address_issue_task( repo_id: str, issue_iid: int, mention_comment_id: str | None = None, ref: str | None = None -): +) -> dict[str, bool]: """ Address an issue by creating a merge request with the changes described on the issue description. @@ -43,13 +43,13 @@ async def address_issue_task( client = RepoClient.create_instance() issue = client.get_issue(repo_id, issue_iid) async with set_runtime_ctx(repo_id, scope=Scope.ISSUE, ref=ref, issue=issue) as runtime_ctx: - await IssueAddressorManager.address_issue( + return await IssueAddressorManager.address_issue( issue=issue, mention_comment_id=mention_comment_id, runtime_ctx=runtime_ctx ) @task(dedup=True) -async def address_mr_comments_task(repo_id: str, merge_request_id: int, mention_comment_id: str): +async def address_mr_comments_task(repo_id: str, merge_request_id: int, mention_comment_id: str) -> dict[str, bool]: """ Address comments left directly on the merge request (not in the diff or thread) that mention DAIV. @@ -63,6 +63,6 @@ async def address_mr_comments_task(repo_id: str, merge_request_id: int, mention_ async with set_runtime_ctx( repo_id, scope=Scope.MERGE_REQUEST, ref=merge_request.source_branch, merge_request=merge_request ) as runtime_ctx: - await CommentsAddressorManager.address_comments( + return await CommentsAddressorManager.address_comments( merge_request=merge_request, mention_comment_id=mention_comment_id, runtime_ctx=runtime_ctx ) diff --git a/tests/unit_tests/automation/agent/middlewares/test_git.py b/tests/unit_tests/automation/agent/middlewares/test_git.py index 564f9911..b00d60fc 100644 --- a/tests/unit_tests/automation/agent/middlewares/test_git.py +++ b/tests/unit_tests/automation/agent/middlewares/test_git.py @@ -1,5 +1,7 @@ from unittest.mock import AsyncMock, Mock, patch +import pytest + from automation.agent.middlewares.git import GitMiddleware from codebase.base import Scope from codebase.utils import GitPushPermissionError @@ -13,14 +15,15 @@ def _make_runtime(*, scope: Scope = Scope.ISSUE) -> Mock: class TestGitMiddleware: - async def test_aafter_agent_returns_none_when_publish_fails_with_push_permission_error(self): + async def test_aafter_agent_propagates_push_permission_error(self): middleware = GitMiddleware() runtime = _make_runtime() - with patch( - "automation.agent.middlewares.git.GitChangePublisher.publish", - new=AsyncMock(side_effect=GitPushPermissionError("No permission to push")), + with ( + patch( + "automation.agent.middlewares.git.GitChangePublisher.publish", + new=AsyncMock(side_effect=GitPushPermissionError("No permission to push")), + ), + pytest.raises(GitPushPermissionError), ): - result = await middleware.aafter_agent(state={"merge_request": None}, runtime=runtime) - - assert result is None + await middleware.aafter_agent(state={"merge_request": None}, runtime=runtime) From 8000f67e99d0b6190dfb629a011057dcc44a6afb Mon Sep 17 00:00:00 2001 From: Sandro Date: Mon, 30 Mar 2026 12:10:54 +0100 Subject: [PATCH 09/11] fix(auth): Add account_signup stub to prevent reverse() error Allauth's login view calls reverse("account_signup") internally. Since signup is disabled, add a redirect stub that sends visitors back to the login page. --- daiv/accounts/allauth_urls.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/daiv/accounts/allauth_urls.py b/daiv/accounts/allauth_urls.py index fc986236..80a75c78 100644 --- a/daiv/accounts/allauth_urls.py +++ b/daiv/accounts/allauth_urls.py @@ -1,4 +1,5 @@ from django.urls import path +from django.views.generic import RedirectView from allauth.account import views as account_views from allauth.socialaccount import views as socialaccount_views @@ -15,6 +16,9 @@ path("gitlab/login/callback/", oauth2_callback, name="gitlab_callback"), # Account views (login, logout, login-by-code only — no signup, password, # or email management routes). + # Stub so allauth's login view can reverse("account_signup") without error; + # actual signup is disabled — visitors land back on the login page. + path("signup/", RedirectView.as_view(pattern_name="account_login", permanent=False), name="account_signup"), path("login/", account_views.login, name="account_login"), path("logout/", account_views.logout, name="account_logout"), path("login/code/", account_views.request_login_code, name="account_request_login_code"), From 728c59a56b7413dc1484cc26f3290e2859a804eb Mon Sep 17 00:00:00 2001 From: Sandro Date: Mon, 30 Mar 2026 12:16:56 +0100 Subject: [PATCH 10/11] docs(changelog): Add dashboard counters entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d9222e16..ab3c03a2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Added web-based authentication via django-allauth with GitHub and GitLab social login, passwordless login-by-code for existing users, and a styled dark-themed login page. Includes a post-login dashboard with API key management (create, list, revoke). +- Added activity counters to the dashboard showing jobs processed, success rate, issues resolved, MRs assisted, and active API keys, with a temporal filter (7d/30d/90d/all time). - Added `setup_langsmith_dashboard` management command to create a pre-configured LangSmith custom dashboard with 27 monitoring charts covering trace volume, latency, cost, tool usage, model comparison, and pipeline health. Supports `--project` and `--recreate` options. - Added `model` and `thinking_level` metadata to all LangSmith traces, enabling per-model dashboards and A/B comparison when switching between models. From 90165c17d2c423e47832afc7267179ebf1a20de6 Mon Sep 17 00:00:00 2001 From: Sandro Date: Mon, 30 Mar 2026 12:17:50 +0100 Subject: [PATCH 11/11] docs(changelog): Remove stray blank line --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ab3c03a2..226949c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added web-based authentication via django-allauth with GitHub and GitLab social login, passwordless login-by-code for existing users, and a styled dark-themed login page. Includes a post-login dashboard with API key management (create, list, revoke). - Added activity counters to the dashboard showing jobs processed, success rate, issues resolved, MRs assisted, and active API keys, with a temporal filter (7d/30d/90d/all time). - - Added `setup_langsmith_dashboard` management command to create a pre-configured LangSmith custom dashboard with 27 monitoring charts covering trace volume, latency, cost, tool usage, model comparison, and pipeline health. Supports `--project` and `--recreate` options. - Added `model` and `thinking_level` metadata to all LangSmith traces, enabling per-model dashboards and A/B comparison when switching between models. - Added async Jobs API (`POST /api/jobs`, `GET /api/jobs/{id}`) for programmatic agent execution with configurable per-user rate limiting (`JOBS_THROTTLE_RATE`). Enables scheduled CI pipelines, Slack bots, and scripted workflows to trigger DAIV agents without blocking.