feat: 补齐会话中心 v1 与任务创建准备流
This commit is contained in:
@@ -4,6 +4,27 @@ export type PlatformId = (typeof platforms)[number];
|
||||
export const searchRequirements = ["none", "recommended", "required"] as const;
|
||||
export type SearchRequirement = (typeof searchRequirements)[number];
|
||||
|
||||
export const sessionStatuses = ["missing", "ready", "expired"] as const;
|
||||
export type SessionStatus = (typeof sessionStatuses)[number];
|
||||
|
||||
export const strategyLayers = ["L0", "L1", "L2", "L3"] as const;
|
||||
export type StrategyLayer = (typeof strategyLayers)[number];
|
||||
|
||||
export const platformCapabilities = ["search", "detail", "reviews", "login"] as const;
|
||||
export type PlatformCapability = (typeof platformCapabilities)[number];
|
||||
|
||||
export const strategyAttemptOutcomes = [
|
||||
"succeeded",
|
||||
"blocked",
|
||||
"failed",
|
||||
"no_result",
|
||||
"skipped"
|
||||
] as const;
|
||||
export type StrategyAttemptOutcome = (typeof strategyAttemptOutcomes)[number];
|
||||
|
||||
export const strategyAttemptTriggers = ["system", "retry", "recovery"] as const;
|
||||
export type StrategyAttemptTrigger = (typeof strategyAttemptTriggers)[number];
|
||||
|
||||
export const taskStatuses = [
|
||||
"Draft",
|
||||
"Searching",
|
||||
@@ -64,3 +85,18 @@ export type SampleFlag = (typeof sampleFlags)[number];
|
||||
|
||||
export const evidenceSourceTypes = ["product", "review"] as const;
|
||||
export type EvidenceSourceType = (typeof evidenceSourceTypes)[number];
|
||||
|
||||
export const retentionActions = ["task_deleted", "retention_cleanup"] as const;
|
||||
export type RetentionAction = (typeof retentionActions)[number];
|
||||
|
||||
export const auditActions = [
|
||||
"session.prepared",
|
||||
"session.cleared",
|
||||
"task.recovery_completed",
|
||||
"platform.retry_started",
|
||||
"platform.retry_completed",
|
||||
"task.deleted",
|
||||
"report.published",
|
||||
"report.unchanged"
|
||||
] as const;
|
||||
export type AuditAction = (typeof auditActions)[number];
|
||||
|
||||
@@ -1,7 +1,15 @@
|
||||
import type {
|
||||
AuditAction,
|
||||
PlatformCapability,
|
||||
PlatformId,
|
||||
PlatformStatus,
|
||||
SearchRequirement,
|
||||
ReportableTaskStatus,
|
||||
RetentionAction,
|
||||
SessionStatus,
|
||||
StrategyAttemptOutcome,
|
||||
StrategyAttemptTrigger,
|
||||
StrategyLayer,
|
||||
TaskStage,
|
||||
TaskStatus
|
||||
} from "./enums";
|
||||
@@ -46,8 +54,120 @@ export interface TaskEventRecord {
|
||||
export interface SessionReadinessRecord {
|
||||
platform: PlatformId;
|
||||
ready: boolean;
|
||||
status: SessionStatus;
|
||||
searchRequirement: SearchRequirement;
|
||||
reason: string;
|
||||
lastPreparedAt?: string | undefined;
|
||||
expiresAt?: string | undefined;
|
||||
}
|
||||
|
||||
export interface SessionStateRecord {
|
||||
platform: PlatformId;
|
||||
ready: boolean;
|
||||
status: SessionStatus;
|
||||
searchRequirement: SearchRequirement;
|
||||
scope: "workspace";
|
||||
ttlHours: number;
|
||||
lastPreparedAt?: string | undefined;
|
||||
expiresAt?: string | undefined;
|
||||
encryptedSnapshotAvailable: boolean;
|
||||
cipherLabel?: string | undefined;
|
||||
}
|
||||
|
||||
export interface StrategyAttemptRecord {
|
||||
attemptId: string;
|
||||
taskId: string;
|
||||
platform: PlatformId;
|
||||
capability: PlatformCapability;
|
||||
layer: StrategyLayer;
|
||||
outcome: StrategyAttemptOutcome;
|
||||
trigger: StrategyAttemptTrigger;
|
||||
startedAt: string;
|
||||
finishedAt: string;
|
||||
durationMs: number;
|
||||
errorType?: string | undefined;
|
||||
detail: string;
|
||||
}
|
||||
|
||||
export interface PlatformRunMetricRecord {
|
||||
taskId: string;
|
||||
platform: PlatformId;
|
||||
searchDurationMs: number;
|
||||
detailDurationMs: number;
|
||||
reviewsDurationMs: number;
|
||||
retryCount: number;
|
||||
recoveryCount: number;
|
||||
lastUpdatedAt: string;
|
||||
}
|
||||
|
||||
export interface ReportMetricRecord {
|
||||
taskId: string;
|
||||
reportVersion: number;
|
||||
taskStatus: ReportableTaskStatus;
|
||||
selectedLinkCount: number;
|
||||
reviewSampleCount: number;
|
||||
blockedPlatforms: PlatformId[];
|
||||
failedPlatforms: PlatformId[];
|
||||
sampleInsufficient: boolean;
|
||||
partialPlatformFailure: boolean;
|
||||
generatedAt: string;
|
||||
}
|
||||
|
||||
export interface RetentionMetricRecord {
|
||||
metricId: string;
|
||||
action: RetentionAction;
|
||||
taskId?: string | undefined;
|
||||
deletedReportCount: number;
|
||||
deletedArtifactCount: number;
|
||||
residualArtifactCount: number;
|
||||
recordedAt: string;
|
||||
}
|
||||
|
||||
export type AuditMetadataValue = string | number | boolean | null;
|
||||
export type AuditMetadata = Record<string, AuditMetadataValue>;
|
||||
|
||||
export interface AuditLogRecord {
|
||||
auditId: string;
|
||||
taskId?: string | undefined;
|
||||
platform?: PlatformId | undefined;
|
||||
action: AuditAction;
|
||||
message: string;
|
||||
createdAt: string;
|
||||
metadata?: AuditMetadata | undefined;
|
||||
}
|
||||
|
||||
export interface ObservabilityOverview {
|
||||
strategyAttempts: {
|
||||
total: number;
|
||||
searchSuccessRate: number;
|
||||
browserFallbackShare: number;
|
||||
byLayer: Array<{
|
||||
layer: StrategyLayer;
|
||||
count: number;
|
||||
}>;
|
||||
byOutcome: Array<{
|
||||
outcome: StrategyAttemptOutcome;
|
||||
count: number;
|
||||
}>;
|
||||
};
|
||||
platformRuns: PlatformRunMetricRecord[];
|
||||
reports: {
|
||||
published: number;
|
||||
unchanged: number;
|
||||
sampleInsufficient: number;
|
||||
partialFailures: number;
|
||||
};
|
||||
retention: {
|
||||
taskDeletes: number;
|
||||
cleanupRuns: number;
|
||||
deletedReports: number;
|
||||
residualArtifacts: number;
|
||||
};
|
||||
audits: {
|
||||
total: number;
|
||||
recoveryActions: number;
|
||||
deleteActions: number;
|
||||
};
|
||||
}
|
||||
|
||||
export interface TaskRecord {
|
||||
|
||||
Reference in New Issue
Block a user