feat(agent-runtime): 实现运行审计与状态服务

This commit is contained in:
bruce
2026-09-09 13:01:36 +08:00
parent 163d20f710
commit befd682675
11 changed files with 614 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
from django.contrib import admin
from .models import AgentRun, AgentRunEvent, HumanApproval, ToolCall
from .services import resolve_approval
class ReadOnlyAuditAdmin(admin.ModelAdmin):
"""审计记录允许查看但禁止通过 Admin 改写或删除。"""
def has_add_permission(self, request):
return False
def has_change_permission(self, request, obj=None):
return request.user.is_staff if obj is None else False
def has_delete_permission(self, request, obj=None):
return False
@admin.register(AgentRun)
class AgentRunAdmin(admin.ModelAdmin):
list_display = ("title", "owner", "status", "created_at", "finished_at")
list_filter = ("status",)
search_fields = ("title", "owner__username", "trace_id")
admin.site.register(AgentRunEvent, ReadOnlyAuditAdmin)
admin.site.register(ToolCall, ReadOnlyAuditAdmin)
@admin.register(HumanApproval)
class HumanApprovalAdmin(admin.ModelAdmin):
"""人工确认正文只读,通过受控动作执行领域状态转换。"""
list_display = ("approval_type", "run", "status", "requested_at", "resolved_by")
list_filter = ("status", "approval_type")
readonly_fields = tuple(field.name for field in HumanApproval._meta.fields)
actions = ("approve_selected", "reject_selected")
@admin.action(description="通过选中的待确认请求")
def approve_selected(self, request, queryset):
for approval in queryset:
resolve_approval(request.user, approval.id, True, {"source": "admin"})
@admin.action(description="拒绝选中的待确认请求")
def reject_selected(self, request, queryset):
for approval in queryset:
resolve_approval(request.user, approval.id, False, {"source": "admin"})
def has_add_permission(self, request):
return False
def has_delete_permission(self, request, obj=None):
return False