feat: scaffold TASK-WP6-01 admin operations
Dada P0-A isolated Windows CI / validate-and-package (push) Successful in 10m45s

This commit is contained in:
suyx
2026-08-03 19:15:03 +08:00
parent f1bebab611
commit 19212cc1b6
17 changed files with 1760 additions and 17 deletions
+94
View File
@@ -0,0 +1,94 @@
import { Type, type Static } from "@sinclair/typebox";
const isoTimestampPattern = "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(?:\\.[0-9]{3})?Z$";
const modelIdPattern = "^[a-z0-9][a-z0-9.-]+$";
const safeReferencePattern = "^[A-Za-z0-9][A-Za-z0-9:._-]{0,159}$";
export const AdminOverviewResponseSchema = Type.Object(
{
generated_at: Type.String({ pattern: isoTimestampPattern }),
user_slots: Type.Object(
{
active_and_suspended: Type.Integer({ minimum: 0 }),
limit: Type.Integer({ minimum: 1 }),
},
{ additionalProperties: false },
),
generation_jobs: Type.Object(
{
pending_manual_review: Type.Integer({ minimum: 0 }),
pending_manual_review_oldest_at: Type.Union([Type.String({ pattern: isoTimestampPattern }), Type.Null()]),
queued: Type.Integer({ minimum: 0 }),
running: Type.Integer({ minimum: 0 }),
},
{ additionalProperties: false },
),
models: Type.Object(
{
configured_default_model_id: Type.Union([Type.String({ maxLength: 80, pattern: modelIdPattern }), Type.Null()]),
configured_model_count: Type.Integer({ minimum: 0 }),
recommended_model_id: Type.Union([Type.String({ maxLength: 80, pattern: modelIdPattern }), Type.Null()]),
runtime_available_count: Type.Integer({ minimum: 0 }),
},
{ additionalProperties: false },
),
storage: Type.Object(
{
last_measured_at: Type.Union([Type.String({ pattern: isoTimestampPattern }), Type.Null()]),
limit_bytes: Type.Integer({ minimum: 1 }),
managed_content_bytes: Type.Integer({ minimum: 0 }),
status: Type.Union([
Type.Literal("normal"),
Type.Literal("critical"),
Type.Literal("full"),
Type.Literal("unavailable"),
]),
},
{ additionalProperties: false },
),
services: Type.Array(
Type.Object(
{
checked_at: Type.Union([Type.String({ pattern: isoTimestampPattern }), Type.Null()]),
service_id: Type.Union([
Type.Literal("resend"),
Type.Literal("amap"),
Type.Literal("ai_gateway"),
Type.Literal("worker"),
Type.Literal("asset_root"),
]),
status: Type.Union([
Type.Literal("available"),
Type.Literal("degraded"),
Type.Literal("paused"),
Type.Literal("unavailable"),
]),
},
{ additionalProperties: false },
),
{ maxItems: 5 },
),
recent_operations: Type.Array(
Type.Object(
{
created_at: Type.String({ pattern: isoTimestampPattern }),
operation_id: Type.String({ pattern: "^[0-9a-fA-F-]{36}$" }),
operation_type: Type.String({ maxLength: 80, pattern: "^[a-z][a-z0-9_]+$" }),
result: Type.Union([Type.Literal("succeeded"), Type.Literal("rejected"), Type.Literal("failed")]),
target_ref: Type.String({ pattern: safeReferencePattern }),
},
{ additionalProperties: false },
),
{ maxItems: 10 },
),
asset_cleanup: Type.Object(
{
pending_jobs: Type.Integer({ minimum: 0 }),
},
{ additionalProperties: false },
),
},
{ additionalProperties: false, $id: "AdminOverviewResponse" },
);
export type AdminOverviewResponse = Static<typeof AdminOverviewResponseSchema>;