import type { SqliteDatabase } from '../db/adapter.js'; import { type JsonObject } from '../serialization/validate.js'; import { type EntryRecord } from '../memory/entries.js'; import type { PreparedSkillImport, SkillAuditStatus, SkillCandidate, SkillMaterializationAuthorization, SkillProviderFailureCode, SkillRequirement, SkillSearchResult, SkillSnapshot, SkillSourceFetchRequest } from './types.js'; export interface ExternalSkillRecord { skillId: string; provider: string; sourceType: string; sourceLocator: string; slug: string; name: string; installUrl: string | null; officialStatus: string; duplicate: boolean; installs: number; state: string; sourceWorkspace: string; sourceCommit: string | null; snapshotHash: string | null; metadata: JsonObject; auditStatus: SkillAuditStatus; generation: number; firstSeenAt: string; lastSeenAt: string; lastCheckedAt: string; disabledAt: string | null; } export type ExternalSkillState = 'discovered' | 'imported' | 'blocked' | 'stale' | 'disabled'; export interface ExternalSkillListAnchor { sourceLocator: string; slug: string; provider: string; skillId: string; } export interface ExternalSkillListPage { skills: ExternalSkillRecord[]; version: number; truncated: boolean; } export interface SkillImportResult { skillId: string; imported: number; updated: boolean; snapshotHash: string; sourceWorkspace: string; entries: EntryRecord[]; } export type ExternalSkillRefreshResult = { kind: 'refreshed'; result: SkillImportResult; } | { kind: 'staled'; skill: ExternalSkillRecord; }; export interface ExternalSkillRefreshExpectation { generation: number; sourceCommit: string | null; snapshotHash: string | null; state: string; lastCheckedAt: string; } export interface ExternalSkillEntrySummary { entryId: string; revision: number; sourcePath: string; chunkIndex: number; primary: boolean; active: boolean; } export interface ExternalSkillDetail { skill: ExternalSkillRecord; entries: ExternalSkillEntrySummary[]; } export declare function externalSkillSourceFetchRequest(detail: ExternalSkillDetail): SkillSourceFetchRequest; export type SkillSearchCacheOutcome = 'success' | 'empty' | 'rate_limited' | 'unavailable'; export interface PersistentSkillSearchResult extends SkillSearchResult { cacheOutcome: SkillSearchCacheOutcome; failureCode?: 'registry_authentication_failed'; } export type SkillSourceFailureCacheOutcome = 'source_rate_limited' | 'source_unavailable'; export interface PersistentSkillSourceFailure { code: SkillSourceFailureCacheOutcome; fetchedAt: string; expiresAt: string; } export type SkillAuditFailureCacheOutcome = Extract; export interface PersistentSkillAuditFailure { code: SkillAuditFailureCacheOutcome; fetchedAt: string; expiresAt: string; } export interface ExternalSkillCachePruneResult { discovery: number; sourceFailures: number; auditFailures: number; total: number; } export declare function readPersistentSkillSearchCache(database: SqliteDatabase, input: { provider: string; query: string; owner?: string | null; mode: 'official' | 'community'; now?: string; }): PersistentSkillSearchResult | null; export declare function writePersistentSkillSearchCache(database: SqliteDatabase, input: { provider: string; query: string; owner?: string | null; mode: 'official' | 'community'; result: SkillSearchResult; outcome: SkillSearchCacheOutcome; failureCode?: 'registry_authentication_failed'; ttlMs: number; now?: string; }): void; export declare function readPersistentSkillSourceFailure(database: SqliteDatabase, candidate: SkillCandidate, now?: string): PersistentSkillSourceFailure | null; export declare function writePersistentSkillSourceFailure(database: SqliteDatabase, candidate: SkillCandidate, code: SkillSourceFailureCacheOutcome, ttlMs: number, now?: string): void; export declare function clearPersistentSkillSourceFailure(database: SqliteDatabase, candidate: SkillCandidate): void; export declare function readPersistentSkillAuditFailure(database: SqliteDatabase, provider: string, candidate: SkillCandidate, now?: string): PersistentSkillAuditFailure | null; export declare function writePersistentSkillAuditFailure(database: SqliteDatabase, provider: string, candidate: SkillCandidate, code: SkillAuditFailureCacheOutcome, ttlMs: number, now?: string): void; export declare function clearPersistentSkillAuditFailure(database: SqliteDatabase, provider: string, candidate: SkillCandidate): void; export declare function pruneExternalSkillCaches(database: SqliteDatabase, now?: string): ExternalSkillCachePruneResult; export declare function externalSkillWorkspace(candidate: SkillCandidate): string; export interface ExternalSkillLocator { source: string; slug: string; } export declare function parseExternalSkillLocator(identifier: string): ExternalSkillLocator; export declare function resolveExternalSkillIdentifier(database: SqliteDatabase, identifier: string): ExternalSkillRecord; /** Read the durable mutation token used to bind external-skill list snapshots. */ export declare function externalSkillListVersion(database: SqliteDatabase): number; /** Capture the exact row generation required by refresh and discovery CAS operations. */ export declare function externalSkillRefreshExpectation(record: ExternalSkillRecord): ExternalSkillRefreshExpectation; /** Read the complete applicability persisted at the materialization boundary. */ export declare function externalSkillRequirement(database: SqliteDatabase, skillId: string): SkillRequirement | undefined; /** Create a materialized skill only when its canonical identity is absent under the write lock. */ export declare function persistNewSkillImportInTransaction(database: SqliteDatabase, input: PreparedSkillImport, now?: string, authorization?: SkillMaterializationAuthorization): SkillImportResult; export declare function persistSkillImport(database: SqliteDatabase, input: PreparedSkillImport, now?: string, authorization?: SkillMaterializationAuthorization): SkillImportResult; /** Persist already-validated prepared documents only through an explicit materialized-row CAS. */ export declare function persistPreparedSkillRefresh(database: SqliteDatabase, input: PreparedSkillImport, expected: ExternalSkillRefreshExpectation, now?: string, authorization?: SkillMaterializationAuthorization): SkillImportResult; /** Import through an existing unmaterialized discovery identity with a generation check. */ export declare function persistExistingSkillImportInTransaction(database: SqliteDatabase, skillId: string, input: PreparedSkillImport, expected: ExternalSkillRefreshExpectation, now?: string, canonicalTarget?: { skillId: string; expected: ExternalSkillRefreshExpectation; }, authorization?: SkillMaterializationAuthorization): SkillImportResult; export declare function persistExistingSkillImport(database: SqliteDatabase, skillId: string, input: PreparedSkillImport, expected: ExternalSkillRefreshExpectation, now?: string, canonicalTarget?: { skillId: string; expected: ExternalSkillRefreshExpectation; }, authorization?: SkillMaterializationAuthorization): SkillImportResult; export declare function recordDiscoveredSkillInTransaction(database: SqliteDatabase, candidate: SkillCandidate, now?: string): ExternalSkillRecord; export declare function recordDiscoveredSkill(database: SqliteDatabase, candidate: SkillCandidate, now?: string): ExternalSkillRecord; /** * Read one strict, keyset-ordered page bound to the durable external-skill mutation token. * Continuations must provide both the prior version and the last row's anchor. */ export declare function listExternalSkillsPage(database: SqliteDatabase, input: { state?: string; limit: number; after?: ExternalSkillListAnchor; expectedVersion?: number; }): ExternalSkillListPage; /** Strict management list with a hard 1,000-row safety bound. */ export declare function listExternalSkills(database: SqliteDatabase, options?: { state?: string; limit?: number; }): ExternalSkillRecord[]; export declare function readExternalSkill(database: SqliteDatabase, skillId: string): ExternalSkillDetail | undefined; export declare function setExternalSkillState(database: SqliteDatabase, skillId: string, state: 'disabled' | 'imported', now?: string): ExternalSkillRecord; export declare function markExternalSkillRefreshFailureInTransaction(database: SqliteDatabase, skillId: string, state: 'stale' | 'blocked', expected: ExternalSkillRefreshExpectation, now?: string): ExternalSkillRecord; export declare function markExternalSkillRefreshFailure(database: SqliteDatabase, skillId: string, state: 'stale' | 'blocked', expected: ExternalSkillRefreshExpectation, now?: string): ExternalSkillRecord; export declare function isExternalSkillReference(entry: { createdBy: string; provenance: JsonObject; }): boolean; export declare function importSkillSnapshot(database: SqliteDatabase, snapshot: SkillSnapshot, documents: PreparedSkillImport['documents'], requirement?: PreparedSkillImport['requirement'], now?: string, authorization?: SkillMaterializationAuthorization): SkillImportResult; /** Refresh inside an existing write transaction and report every committed lifecycle transition. */ export declare function refreshExternalSkillSnapshotInTransaction(database: SqliteDatabase, skillId: string, snapshot: SkillSnapshot, documents: PreparedSkillImport['documents'], requirement: PreparedSkillImport['requirement'] | undefined, expected: ExternalSkillRefreshExpectation, now?: string, authorization?: SkillMaterializationAuthorization): ExternalSkillRefreshResult; /** Refresh an existing managed skill without allowing stale fetches or moved sources to replace its current snapshot. */ export declare function refreshExternalSkillSnapshot(database: SqliteDatabase, skillId: string, snapshot: SkillSnapshot, documents: PreparedSkillImport['documents'], requirement: PreparedSkillImport['requirement'] | undefined, expected: ExternalSkillRefreshExpectation, now?: string, authorization?: SkillMaterializationAuthorization): ExternalSkillRefreshResult; //# sourceMappingURL=store.d.ts.map