import type { DatabaseSync } from 'node:sqlite'; import { type HomeAdvisor, type HomeAdviceMetrics, type HomeOpportunity, type HomeOpportunityHistoryItem } from '@xopcai/gateway-contract'; import type { HomeGeneratedResult } from './types.js'; import { type HomeAdvicePersonalization, type HomeSuccessfulPattern } from './strategy.js'; export interface HomePrincipal { ownerId: string; workspaceId: string; } export type HomeGenerationReason = 'manual_refresh' | 'project_changed' | 'task_changed' | 'conversation_changed' | 'connector_changed' | 'scheduled_refresh'; export interface HomeGenerationClaim extends HomePrincipal { generationId: string; leaseOwner: string; leaseEpoch: number; attempt: number; reasons: HomeGenerationReason[]; } export interface HomeGenerationCompletion { result: HomeGeneratedResult; snapshotHash: string; evidenceIds: string[]; modelRef?: string; inputTokens?: number; outputTokens?: number; estimatedCostUsd?: number; outcomeReason?: string; completedAt: number; } export type HomeFeedbackKind = 'started' | 'discussed' | 'already_done' | 'irrelevant' | 'too_early' | 'source_incorrect' | 'less_like_this' | 'snoozed'; export interface HomeOpportunityFeedbackInput { feedbackId?: string; idempotencyKey: string; kind: HomeFeedbackKind; expectedRevision: number; createdAt: number; reasonCode?: string; note?: string; scope?: Record; snoozedUntil?: number; resolution?: { kind: 'session' | 'task' | 'scene'; ref: string; }; } export declare class HomeIntelligenceRepository { private readonly db; constructor(db: DatabaseSync); enqueue(principal: HomePrincipal, input: { idempotencyKey: string; reasons: HomeGenerationReason[]; requestedAt: number; }): { generationId: string; created: boolean; }; claimNext(principal: HomePrincipal, workerId: string, now: number, leaseMs?: number): HomeGenerationClaim | undefined; complete(claim: HomeGenerationClaim, completion: HomeGenerationCompletion): { dirty: boolean; }; fail(claim: HomeGenerationClaim, now: number, errorCode: string, retryAt?: number): void; getLatestSnapshotHash(principal: HomePrincipal): string | undefined; getLatestContextRefreshRequestedAt(principal: HomePrincipal): number | undefined; getProviderUsageSince(startedAt: number, operation: string): { calls: number; totalTokens: number; }; listSuppressionKeys(principal: HomePrincipal): Set; getSuccessfulPatterns(principal: HomePrincipal): HomeSuccessfulPattern[]; getPersonalization(principal: HomePrincipal, now: number): HomeAdvicePersonalization; getMetrics(principal: HomePrincipal, since: number, until: number): HomeAdviceMetrics; invalidateOpportunitiesByEvidenceSources(principal: HomePrincipal, sourceTypes: ReadonlySet, now: number): number; getAdvisor(principal: HomePrincipal, now: number): HomeAdvisor; getOpportunity(principal: HomePrincipal, opportunityId: string, now: number): HomeOpportunity | undefined; getOpportunitySnapshot(principal: HomePrincipal, opportunityId: string): HomeOpportunity | undefined; listHistory(principal: HomePrincipal): HomeOpportunityHistoryItem[]; isFeedbackRecorded(opportunityId: string, idempotencyKey: string): boolean; recordFeedback(principal: HomePrincipal, opportunityId: string, input: HomeOpportunityFeedbackInput): HomeOpportunity | undefined; undoFeedback(principal: HomePrincipal, opportunityId: string, idempotencyKey: string, now: number): HomeOpportunity; maintain(now: number): { expired: number; awakened: number; }; private requireClaim; private feedbackTransition; private opportunityDedupeKey; }