/** * Fire-and-forget telemetry + admin query facade (FR-011) */ import type { BatchScheduler } from '../../../infrastructure/scheduler/batch-scheduler.js'; import { TelemetryRepository, type ConsolidationQualityResult, type FeedbackQualityResult, type MemoryQualityResult, type SearchQualityResult, type SystemMetricsResult } from '../repositories/telemetry-repository.js'; import type { TelemetryEventInput, TelemetryEventQueryFilters, TelemetryEventRow, TelemetryPeriod } from '../types/telemetry.types.js'; export interface TelemetryContext { requestId: string; ownerId: string | null; } export declare class TelemetryService { private readonly repository; private readonly getScheduler?; private readonly als; /** 행 단위 손상 JSON이 전체 목록 API를 깨지 않게 한다 (FR-010) */ static safeParseExtraData(raw: string | null): Record | null; constructor(repository: TelemetryRepository, getScheduler?: (() => BatchScheduler | null) | undefined); getContext(): TelemetryContext | undefined; runWithContext(ownerId: string | null, fn: () => Promise): Promise; record(partial: Omit & { requestId?: string; ownerId?: string | null; }): void; getSearchQuality(period: TelemetryPeriod, ownerId?: string | null): SearchQualityResult; getMemoryQuality(ownerId?: string | null): MemoryQualityResult; getConsolidationQuality(ownerId?: string | null): ConsolidationQualityResult; getFeedbackQuality(period: TelemetryPeriod, ownerId?: string | null): FeedbackQualityResult; getSystemMetrics(period: TelemetryPeriod, ownerId?: string | null): SystemMetricsResult; private static jobNameToTelemetryEventType; private buildJobSnapshot; getEvents(filters: TelemetryEventQueryFilters): { events: Array & { extra_data: Record | null; }>; total: number; limit: number; offset: number; timestamp: string; }; hasPriorWriteWithContentHash(ownerId: string | null, contentHash: string, sinceIso: string): boolean; } //# sourceMappingURL=telemetry-service.d.ts.map