export type RepositoryProvider = 'github' | 'bitbucket' | 'azure-devops'; export type RepositoryCoordinates = { provider: 'github'; owner: string; repository: string; } | { provider: 'bitbucket'; workspace: string; repository: string; } | { provider: 'azure-devops'; organization: string; project: string; repository: string; }; export type ImmutableRepositoryIdentity = { provider: RepositoryProvider; repositoryId: string; workspaceId: string; tenantId: string; }; export type SignedRepositoryPolicy = { identityKey: string; identity: ImmutableRepositoryIdentity; signatureVerified: boolean; ownership: 'salesforce-owned' | 'customer-owned' | 'personal'; repositoryKind: 'canonical' | 'fork' | 'mirror'; transferred: boolean; }; export type RepositoryVerificationResult = { status: 'verified'; policy: SignedRepositoryPolicy; } | { status: 'unverified'; } | { status: 'unavailable'; source: 'api' | 'policy'; }; export type RepositoryVerifier = { verify(coordinates: RepositoryCoordinates): RepositoryVerificationResult | Promise; }; export type ObservedRemote = string | { url: string; effective?: boolean; }; export type RepositoryClassificationReason = 'verified-salesforce-owned' | 'no-remote' | 'remote-parse-error' | 'api-unavailable' | 'policy-unavailable' | 'unverified-repository' | 'customer-owned-repository' | 'personal-repository' | 'fork-repository' | 'mirror-repository' | 'transferred-repository' | 'mixed-remotes' | 'local-override-downgrade' | 'local-override-cannot-upgrade'; export type RepositoryClassification = { classification: 'salesforce-owned' | 'customer-repository'; reasons: RepositoryClassificationReason[]; coordinates: RepositoryCoordinates[]; identities: ImmutableRepositoryIdentity[]; }; export type ClassifyRepositoryOptions = { remotes: readonly ObservedRemote[]; verifier: RepositoryVerifier; localOverride?: 'salesforce-owned' | 'customer-repository'; }; /** Parse only recognized provider hosts and exact repository path shapes. Names are lookup coordinates, not ownership evidence. */ export declare function parseRepositoryRemote(remote: string): RepositoryCoordinates | null; export declare function immutableRepositoryIdentityKey(identity: ImmutableRepositoryIdentity): string; /** Classify observed remotes conservatively. The verifier is the only boundary allowed to establish ownership. */ export declare function classifyRepository(options: ClassifyRepositoryOptions): Promise;