/** * Embedding Backfill * * post-tool-use 등에서 즉시 임베딩이 생성되지 않은 메모리(예: e5 provider는 * transformer 로드 비용 때문에 hook 프로세스에서 즉시 생성 불가)를 * SessionEnd / SessionStart Step 1e 시점에 일괄 보강합니다 (#92: PreCompact caller 제거). * * 기존 session-end.ts의 createdIds 기준 임베딩 로직과 중복 없이 동작합니다. * (이미 임베딩 있는 건 getMemoriesWithoutEmbedding이 반환하지 않음) */ import type { MemoryDatabase } from '../db/database.js'; import type { EmbeddingConfig, LLMConfig } from '../types/index.js'; import type { createLogger } from '../utils/logger.js'; export interface BackfillResult { /** 임베딩이 생성된 메모리 수 */ generated: number; /** 처리 시도 건수 (생성 실패 포함) */ attempted: number; } /** * 임베딩이 없는 메모리를 배치 처리하여 생성합니다. * Hook 타임아웃을 고려하여 기본 상한 100건. * * @param maxCount Hook 1회당 최대 처리 건수 (기본 100). 초과분은 다음 hook에서 처리. */ export declare function backfillMissingEmbeddings(db: MemoryDatabase, embeddingConfig: EmbeddingConfig | undefined, llmConfig: LLMConfig | undefined, logger?: ReturnType, maxCount?: number): Promise; /** * #83 (ADR-048 섹션 0.13): SessionStart Step 1e — 미임베딩 백로그 게이트 판정 후 * `a2a-memory embed`(missing 1,000건/run)를 detached background로 spawn. * * SessionEnd 채널 사멸(섹션 0.12) + extract 게이트 사망(#84)으로 본 파일의 * backfillMissingEmbeddings 기존 배선(session-end/pre-compact)이 굶는 것의 신뢰 채널 이관. * shadow-rebuild.ts(#81) 게이트/lock/로그 패턴 복제 — 대상만 embeddings로 상이. */ /** 게이트 임계 — 일 유입 실측 평균 ~67건/일(피크 174)이라 백로그 존재 시 ~1일 내 발화. */ export declare const EMBED_BACKFILL_THRESHOLD = 50; /** * embed in-flight lock TTL. 실소요 ~1분(1,000건 × 16ms + e5 모델 로드) 대비 10x 여유. * 초과 시 stale로 간주하여 회수(spawn 죽음/중단 대비). 정상 완료는 embed CLI finally가 회수. */ export declare const EMBED_BACKFILL_LOCK_TTL_MS: number; /** * lock/로그 경로 — db 파일과 같은 디렉토리. resolvePath 경유 강제(#68: config `db.path`의 * `~`는 Node가 확장하지 않는다 — 단일 source 미경유 시 `/~/...` ENOENT로 spawn 영구 실패). */ export declare function embedBackfillLockPath(dbPath: string): string; /** rule 74: stdio:'ignore'는 자식 크래시를 지운다 — 로그 파일로 돌린다('w' truncate). */ export declare function embedBackfillLogPath(dbPath: string): string; /** in-flight lock 활성 여부. TTL 초과 stale lock은 회수(unlink) 후 false. */ export declare function isEmbedBackfillLocked(lockPath: string, nowMs: number): boolean; export interface EmbedBackfillSpawnResult { spawned: boolean; reason: string; missingCount: number; } /** * SessionStart Step 1e 진입점 — 게이트(count ≥ threshold) 판정 후 detached spawn. * hook은 spawn().unref() 후 즉시 반환하며, embed CLI가 완료 시 finally에서 lock을 회수한다. */ export declare function maybeSpawnEmbedBackfill(db: MemoryDatabase, dbPath: string, embeddingConfig: EmbeddingConfig | undefined, logger: ReturnType, nowMs: number): EmbedBackfillSpawnResult; //# sourceMappingURL=embedding-backfill.d.ts.map