From 49dd4518a1544bf1b03c3763999a92a92dcd6bfe Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Wed, 1 Jul 2026 10:35:40 +0900 Subject: [PATCH] Complete admin visual surfaces --- contextual_orchestrator/admin.py | 302 ++++++++++++++++++++++++++++--- tests/test_admin_contract.py | 6 + 2 files changed, 286 insertions(+), 22 deletions(-) diff --git a/contextual_orchestrator/admin.py b/contextual_orchestrator/admin.py index 71bd39c1a..bb005d5b6 100644 --- a/contextual_orchestrator/admin.py +++ b/contextual_orchestrator/admin.py @@ -29,6 +29,28 @@ "view_json": "View JSON", "audit_compliance": "Audit & Compliance", "recent_errors": "Recent Errors", + "datasets_title": "Datasets", + "access_control_title": "Access Control", + "integrations_title": "Integrations", + "observability_title": "Observability", + "settings_title": "Settings", + "evaluation_replay": "Evaluation Replay", + "run_evaluation": "Run Evaluation", + "dataset_name": "Dataset", + "dataset_owner": "Owner", + "dataset_prompts": "Prompts", + "access_inspector": "Access List Inspector", + "step_header": "Step", + "visible_context": "Visible Context", + "provider_header": "Provider", + "endpoint_header": "Endpoint", + "policy_header": "Policy", + "metric_header": "Metric", + "value_header": "Value", + "locale_bundle": "Locale Bundle", + "safe_trace_default": "Trace hidden by default", + "single_api_status": "OpenAI-compatible endpoint active", + "no_trace": "Run a conduct trace to populate workflow evidence.", "source_basis": "Source basis", "source_basis_text": "Fugu: one interface. TRINITY: thinker, worker, verifier. Conductor: access-list workflow visibility.", "agent_header": "Agent", @@ -56,6 +78,12 @@ "worker_latency": "worker exceeded latency threshold", "confidence_low": "confidence below policy threshold", "planner_capacity": "planner pool near soft limit", + "evaluation_hint": "Replay prompts against route or conduct mode before policy rollout.", + "golden_prompts": "Golden prompts", + "security_reviews": "Security reviews", + "research_tasks": "Research tasks", + "production_ready": "Production ready", + "policy_control": "Policy control", }, "ko": { "brand_name": "컨텍스트 오케스트레이터", @@ -85,6 +113,28 @@ "view_json": "JSON 보기", "audit_compliance": "감사 및 컴플라이언스", "recent_errors": "최근 오류", + "datasets_title": "데이터셋", + "access_control_title": "접근 제어", + "integrations_title": "연동", + "observability_title": "관측", + "settings_title": "설정", + "evaluation_replay": "평가 리플레이", + "run_evaluation": "평가 실행", + "dataset_name": "데이터셋", + "dataset_owner": "담당", + "dataset_prompts": "프롬프트", + "access_inspector": "접근 목록 검사기", + "step_header": "단계", + "visible_context": "보이는 컨텍스트", + "provider_header": "공급자", + "endpoint_header": "엔드포인트", + "policy_header": "정책", + "metric_header": "지표", + "value_header": "값", + "locale_bundle": "로케일 번들", + "safe_trace_default": "트레이스는 기본 숨김", + "single_api_status": "OpenAI 호환 엔드포인트 활성", + "no_trace": "conduct 트레이스를 실행하면 워크플로 근거가 채워집니다.", "source_basis": "논문 근거", "source_basis_text": "Fugu: 단일 인터페이스. TRINITY: thinker, worker, verifier. Conductor: access-list 기반 워크플로 가시성.", "agent_header": "에이전트", @@ -112,6 +162,12 @@ "worker_latency": "worker 지연 임계값 초과", "confidence_low": "신뢰도가 정책 임계값보다 낮음", "planner_capacity": "planner 풀이 소프트 한도에 근접", + "evaluation_hint": "정책 롤아웃 전에 route 또는 conduct 모드로 프롬프트를 재생합니다.", + "golden_prompts": "골든 프롬프트", + "security_reviews": "보안 리뷰", + "research_tasks": "리서치 태스크", + "production_ready": "프로덕션 준비", + "policy_control": "정책 제어", }, } @@ -224,6 +280,14 @@ gap: 12px; padding: 12px; } + .view[hidden] { display: none; } + .detail-grid { + padding: 12px; + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 12px; + } + .wide { grid-column: 1 / -1; } .panel { background: var(--surface); border: 1px solid var(--line); @@ -332,6 +396,41 @@ font: 12px/1.5 "Cascadia Mono", "SFMono-Regular", monospace; } .json[hidden] { display: none; } + .inspector { + padding: 14px; + display: grid; + gap: 10px; + } + .inspector[hidden] { display: none; } + .access-row { + display: grid; + grid-template-columns: 120px 1fr; + gap: 10px; + border: 1px solid var(--line); + border-radius: var(--r); + padding: 10px; + background: #fbfcfc; + } + .empty { + border: 1px dashed var(--line); + border-radius: var(--r); + padding: 18px; + color: var(--muted); + background: #fbfcfc; + } + .kpis { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 10px; + padding: 14px; + } + .kpi { + border: 1px solid var(--line); + border-radius: var(--r); + padding: 12px; + background: #fbfcfc; + } + .kpi strong { display: block; font-size: 22px; margin-top: 5px; } .audit { display: grid; gap: 12px; } .audit { align-self: start; align-content: start; } .audit-list { padding: 10px 14px 14px; display: grid; gap: 10px; } @@ -361,7 +460,10 @@ .app { grid-template-columns: 1fr; } .sidebar { display: none; } .grid { grid-template-columns: minmax(0, 1fr); max-width: 100vw; overflow: hidden; } + .detail-grid { grid-template-columns: minmax(0, 1fr); } .panel { max-width: calc(100vw - 24px); overflow-x: auto; } + .wide { grid-column: auto; } + .kpis { grid-template-columns: 1fr; } table { min-width: 560px; } .workflow { grid-column: auto; } .steps { grid-template-columns: 1fr; } @@ -380,16 +482,16 @@ @@ -400,7 +502,7 @@
Language
Healthy
-
+

Agent Pool

@@ -451,6 +553,7 @@
+
+ + + + + + +