diff --git a/admin-compliance/app/(sdk)/sdk/source-policy/page.tsx b/admin-compliance/app/(sdk)/sdk/source-policy/page.tsx
index 4efd3a7..04e5bcd 100644
--- a/admin-compliance/app/(sdk)/sdk/source-policy/page.tsx
+++ b/admin-compliance/app/(sdk)/sdk/source-policy/page.tsx
@@ -3,8 +3,8 @@
/**
* Source Policy Management Page (SDK Version)
*
- * Whitelist-based data source management for edu-search-service.
- * For auditors: Full audit trail for all changes.
+ * Whitelist-based data source management for compliance RAG corpus.
+ * Controls which legal sources may be used, PII rules, and audit trail.
*/
import { useState, useEffect } from 'react'
@@ -15,14 +15,14 @@ import { OperationsMatrixTab } from '@/components/sdk/source-policy/OperationsMa
import { PIIRulesTab } from '@/components/sdk/source-policy/PIIRulesTab'
import { AuditTab } from '@/components/sdk/source-policy/AuditTab'
-// API base URL for edu-search-service
+// API base URL for backend-compliance
const getApiBase = () => {
- if (typeof window === 'undefined') return 'http://localhost:8088'
+ if (typeof window === 'undefined') return 'http://localhost:8002/api'
const hostname = window.location.hostname
if (hostname === 'localhost' || hostname === '127.0.0.1') {
- return 'http://localhost:8088'
+ return 'http://localhost:8002/api'
}
- return `https://${hostname}:8089`
+ return `https://${hostname}:8002/api`
}
interface PolicyStats {
diff --git a/admin-compliance/components/sdk/Sidebar/SDKSidebar.tsx b/admin-compliance/components/sdk/Sidebar/SDKSidebar.tsx
index 3260c2e..fecd59d 100644
--- a/admin-compliance/components/sdk/Sidebar/SDKSidebar.tsx
+++ b/admin-compliance/components/sdk/Sidebar/SDKSidebar.tsx
@@ -10,6 +10,7 @@ import {
getStepsForPackage,
type SDKPackageId,
type SDKStep,
+ type RAGCorpusStatus,
} from '@/lib/sdk'
// =============================================================================
@@ -288,6 +289,41 @@ interface SDKSidebarProps {
onCollapsedChange?: (collapsed: boolean) => void
}
+// =============================================================================
+// CORPUS STALENESS INFO
+// =============================================================================
+
+function CorpusStalenessInfo({ ragCorpusStatus }: { ragCorpusStatus: RAGCorpusStatus }) {
+ const collections = ragCorpusStatus.collections
+ const collectionNames = Object.keys(collections)
+ if (collectionNames.length === 0) return null
+
+ // Check if corpus was updated after the last fetch (simplified: show last update time)
+ const lastUpdated = collectionNames.reduce((latest, name) => {
+ const updated = new Date(collections[name].last_updated)
+ return updated > latest ? updated : latest
+ }, new Date(0))
+
+ const daysSinceUpdate = Math.floor((Date.now() - lastUpdated.getTime()) / (1000 * 60 * 60 * 24))
+ const totalChunks = collectionNames.reduce((sum, name) => sum + collections[name].chunks_count, 0)
+
+ return (
+
+
+
30 ? 'bg-amber-400' : 'bg-green-400'}`} />
+
+ RAG Corpus: {totalChunks} Chunks
+
+
+ {daysSinceUpdate > 30 && (
+
+ Corpus {daysSinceUpdate}d alt — Re-Evaluation empfohlen
+
+ )}
+
+ )
+}
+
export function SDKSidebar({ collapsed = false, onCollapsedChange }: SDKSidebarProps) {
const pathname = usePathname()
const { state, packageCompletion, completionPercentage, getCheckpointStatus } = useSDK()
@@ -391,6 +427,11 @@ export function SDKSidebar({ collapsed = false, onCollapsedChange }: SDKSidebarP
)}
+ {/* RAG Corpus Staleness Badge */}
+ {!collapsed && state.ragCorpusStatus && (
+
+ )}
+
{/* Navigation - 5 Packages */}