import type { AuthCredentialIfAbsentReason, AuthCredentialIfAbsentSnapshotResult, AuthStorage } from "@gajae-code/ai/core"; import type { ModelRegistry } from "../config/model-registry"; import { type CredentialDiscoveryResult, type CredentialOrigin, type DiscoveryOptions, type ImportableCredential } from "./credential-import"; export declare const CREDENTIAL_AUTO_IMPORT_ROTATION_WARNING = "Refreshing in gjc may log out the Claude/Codex CLI because OAuth refresh tokens can rotate."; export declare const CREDENTIAL_AUTO_IMPORT_PERSISTENCE_WARNING = "Credential import preference could not be saved; external credentials may be offered again."; export declare const CREDENTIAL_AUTO_IMPORT_REFRESH_WARNING = "Imported credentials were saved, but provider availability could not be refreshed."; export declare const CREDENTIAL_AUTO_IMPORT_DISCOVERY_WARNING = "External credential discovery could not be completed. Use /provider to import credentials manually."; export declare const CREDENTIAL_AUTO_IMPORT_RETRY_WARNING = "Some external credentials could not be imported. Use /provider to retry."; export declare const CREDENTIAL_AUTO_IMPORT_STATE_UNREADABLE_WARNING = "Credential import preference could not be read. External credential discovery was skipped; use /provider to import credentials manually."; export type CredentialAutoImportSourceLabel = "claude-code-file" | "claude-code-keychain" | "codex-file"; export type CredentialAutoImportTrigger = "startup" | "bare-login" | "setup-cli"; export type InitialImportResolution = "accepted" | "declined"; export type CredentialAutoImportStateProblem = "invalid-initial-import-resolution" | "invalid-last-import-version" | "malformed-json" | "malformed-root"; export interface CredentialAutoImportStateFile { lastImportVersion?: string; initialImportResolution?: InitialImportResolution; } export interface CredentialAutoImportStateReadResult { state: CredentialAutoImportStateFile; problems: CredentialAutoImportStateProblem[]; unreadable: boolean; } export interface CredentialAutoImportStateMutation { lastImportVersion?: string; initialImportResolution?: InitialImportResolution; } export interface CredentialAutoImportStateStore { read: () => Promise; write: (mutation: CredentialAutoImportStateMutation) => Promise; } export interface CredentialAutoImportStateStoreDependencies { withFileLock?: (filePath: string, transaction: () => Promise) => Promise; rename?: (oldPath: string, newPath: string) => Promise; } export declare function getCredentialAutoImportStatePath(agentDir?: string): string; export declare function createCredentialAutoImportStateStore(agentDir?: string, dependencies?: CredentialAutoImportStateStoreDependencies): CredentialAutoImportStateStore; export declare function readCredentialAutoImportState(agentDir?: string): Promise; export declare function isCredentialAutoImportStateResolvedForVersion(state: CredentialAutoImportStateFile, version: string): boolean; export declare function readCredentialImportMarker(agentDir?: string): Promise; export declare function writeCredentialImportMarker(version: string, agentDir?: string): Promise; export declare enum CredentialAutoImportFailureClass { DiscoveryUnavailable = "discovery-unavailable", SourceUnreadable = "source-unreadable", SourceMalformed = "source-malformed", KeychainDenied = "keychain-denied", WriteInvalid = "write-invalid", WriteConflict = "write-conflict", BrokerUnavailable = "broker-unavailable", BrokerUnsupported = "broker-unsupported", Unknown = "unknown" } export interface CredentialAutoImportSkipped { credential: ImportableCredential; reason: AuthCredentialIfAbsentReason; entries: AuthCredentialIfAbsentSnapshotResult["entries"]; } export interface CredentialAutoImportFailure { credential?: ImportableCredential; origin?: CredentialOrigin; source?: string; failureClass: CredentialAutoImportFailureClass; } export interface CredentialAutoImportResult { imported: ImportableCredential[]; skipped: CredentialAutoImportSkipped[]; failures: CredentialAutoImportFailure[]; discovered: boolean; discovery?: CredentialDiscoveryResult; globalDiscoveryFailure?: CredentialAutoImportFailure; } export declare function formatCredentialAutoImportCandidateLabel(candidate: Pick): string; export declare function formatCredentialAutoImportPrompt(candidates: readonly Pick[]): string; export declare function logCredentialAutoImportFailures(trigger: CredentialAutoImportTrigger, failures: readonly Pick[]): void; export type CredentialAutoImportAuthStorage = Pick; export interface CredentialAutoImportOptions { authStorage: CredentialAutoImportAuthStorage; discover?: (options?: DiscoveryOptions) => Promise; discoveryOptions?: DiscoveryOptions; trigger: CredentialAutoImportTrigger; sourceLabel?: CredentialAutoImportSourceLabel; } export declare function runExternalCredentialAutoImport({ authStorage, discover, discoveryOptions, }: CredentialAutoImportOptions): Promise; export declare function buildCredentialAutoImportNotice(result: Pick): string | undefined; export declare function formatCredentialAutoImportResult(result: CredentialAutoImportResult): string[]; export interface StartupCredentialAutoImportOptions { authStorage: CredentialAutoImportOptions["authStorage"]; modelRegistry: Pick; discover?: CredentialAutoImportOptions["discover"]; version?: string; agentDir?: string; stateStore?: CredentialAutoImportStateStore; } export declare function runStartupCredentialAutoImportIfNeeded({ authStorage: activeAuthStorage, modelRegistry: activeModelRegistry, discover, version, agentDir, stateStore, }: StartupCredentialAutoImportOptions): Promise;