feat: harden enterprise control plane

This commit is contained in:
AI Bot
2026-05-17 02:20:08 +08:00
parent 67511c31f4
commit e1aed590f8
112 changed files with 10977 additions and 2004 deletions

View File

@@ -6,7 +6,30 @@ export interface BossAdminMenuItem {
export interface BossAdminBackofficePayload {
ok: boolean;
surface: "platform" | "enterprise";
currentCompany: Record<string, unknown> | null;
menuTree: BossAdminMenuItem[];
insights: {
onboardingSteps: string[];
serviceStatuses: Array<Record<string, unknown>>;
openingPreview: Array<Record<string, unknown>>;
deliveryChecklist: Array<Record<string, unknown>>;
recentCompanies: Array<Record<string, unknown>>;
customerHealthRows: Array<Record<string, unknown>>;
riskAggregates: Array<Record<string, unknown>>;
customerFollowups: Array<Record<string, unknown>>;
enterpriseGoals: Array<Record<string, unknown>>;
organizationUnits: string[];
departmentProgress: Array<Record<string, unknown>>;
masterAgentSummary: string[];
permissionHighlights: string[];
agentFlowSteps: string[];
skillUsageAudit: Array<Record<string, unknown>>;
recoveryActions: string[];
backupStatus: Record<string, unknown>;
capabilitySummary: Record<string, number>;
surface: "platform" | "enterprise";
};
workbench: {
summary: Record<string, number>;
companies: Array<Record<string, unknown>>;
@@ -36,6 +59,34 @@ export interface BossAdminBackofficePayload {
yudaoMapping: Record<string, string>;
}
export interface BossAdminBackupSnapshot {
snapshotId: string;
fileName: string;
absolutePath: string;
bytes: number;
sha256: string;
createdAt: string;
actorAccount?: string;
reason?: string;
schemaVersion?: number;
}
export interface BossAdminBackupStatus {
mode: "file";
backupDir: string;
stateFile: string;
restorePointCount: number;
lastBackupAt?: string;
status: "ready" | "empty" | "error";
detail?: string;
}
export interface BossAdminBackupsPayload {
ok: boolean;
status: BossAdminBackupStatus;
snapshots: BossAdminBackupSnapshot[];
}
async function requestJson<T>(url: string, init: RequestInit = {}): Promise<T> {
const response = await fetch(url, {
credentials: "include",
@@ -57,8 +108,8 @@ async function requestJson<T>(url: string, init: RequestInit = {}): Promise<T> {
return response.json();
}
export async function fetchBossAdminBackoffice(): Promise<BossAdminBackofficePayload> {
return requestJson<BossAdminBackofficePayload>("/api/v1/admin/backoffice");
export async function fetchBossAdminBackoffice(scope: "platform" | "enterprise" = "platform"): Promise<BossAdminBackofficePayload> {
return requestJson<BossAdminBackofficePayload>(`/api/v1/admin/backoffice?scope=${scope}`);
}
export async function postAdminAccess(payload: Record<string, unknown>) {
@@ -81,3 +132,27 @@ export async function postSkillLifecycleRequest(payload: Record<string, unknown>
body: JSON.stringify(payload),
});
}
export async function fetchAdminBackups(): Promise<BossAdminBackupsPayload> {
return requestJson<BossAdminBackupsPayload>("/api/v1/admin/backups");
}
export async function createAdminBackup(reason: string) {
return requestJson<Record<string, unknown>>("/api/v1/admin/backups", {
method: "POST",
body: JSON.stringify({
action: "create_snapshot",
reason,
}),
});
}
export async function restoreAdminBackup(snapshotId: string) {
return requestJson<Record<string, unknown>>("/api/v1/admin/backups", {
method: "POST",
body: JSON.stringify({
action: "restore_snapshot",
snapshotId,
}),
});
}