import type { Identity, Membership } from "./authBackend.js"; /** Collapse the home dir to `~` for display. `~/.vincentt/config.json` in every transcript. */ export declare function displayConfigPath(absPath: string, home: string): string; /** The active org is the personal one (login lands on personal; the CLI never prompts). */ export declare function activeOrg(memberships: Membership[]): Membership | undefined; /** * The success line's org clause: "Active org: " plus, when the user belongs to * team orgs too, "· also a member of: A, B". A platform-invited creator with only a personal * org gets just the active-org line (no trailing clause). */ export declare function orgSummaryLine(identity: Identity): string; export interface LoginCommandDeps { /** Print a line to the user (stdout for the transcript). */ print: (line: string) => void; /** The token currently on this machine, if any (env override or config file). */ currentToken: () => Promise; /** Confirm who a present token belongs to (GET /me). Undefined if it can't be resolved. */ whoAmI: () => Promise; /** Run the loopback + PKCE flow; resolves identity + the saved config path. */ runLogin: () => Promise<{ identity: Identity; configPath: string; }>; /** Forget the existing token before a --force re-login. */ clearToken: () => Promise; /** For displaying the config path as ~/…. */ home: string; /** Absolute config path (for the L2 already-signed-in line). */ configPath: string; } export interface LoginCommandOptions { force?: boolean; } /** * Drive `vincentt login`. Returns an exit code (0 ok, 1 failed). Never throws for expected * failure states (timeout, cancel, state-mismatch) — they print a ✗ line ending with the * exact retry command and return 1. No stack trace, no token printed. */ export declare function loginCommand(deps: LoginCommandDeps, opts?: LoginCommandOptions): Promise;