feat(agent-runtime): 实现运行审计与状态服务
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user