overmind-mcp
Version:
Orchestrateur universel agents IA multi-modeles via MCP. Inclut le protocole 'Custom-Nickname' pour identifier vos agents avec des surnoms originaux (The Chaos Prophet, Shadow Sniper, etc.), l'isolation mémoire (Private Memory Context) et le support pour
105 lines • 5.07 kB
TypeScript
/**
* HermesPoolClient — Thin wrapper over the native Hermes credential pool.
*
* ╔════════════════════════════════════════════════════════════════════════╗
* ║ WHY THIS EXISTS ║
* ║ ║
* ║ Hermes manages API keys centrally via `hermes auth add <provider>`. ║
* ║ Credentials are stored in a global pool with automatic rotation ║
* ║ (round_robin by default) and rate-limit aware failover. ║
* ║ ║
* ║ Overmind previously wrote `.env` files with hardcoded credentials per ║
* ║ profile. That defeated the pool — one key per profile, no rotation, ║
* ║ no failover. The right approach is to add credentials to the POOL ║
* ║ and let Hermes resolve them per profile. ║
* ║ ║
* ║ Providers in the pool (from `hermes auth list`): ║
* ║ - anthropic, copilot, deepseek, minimax, minimax-cn, ║
* ║ openai-api, qwen-oauth, xai, zai ║
* ║ ║
* ║ Per-profile: only config.yaml's `model.provider` is needed. ║
* ║ Hermes resolves the credentials + base_url from the pool automatically. ║
* ╚════════════════════════════════════════════════════════════════════════╝
*/
export interface PoolCredential {
/** Display label, e.g. "GLM coding 34" or "DeepSeek 7" */
label: string;
/** Where the credential came from: env var, manual entry, OAuth file, etc. */
source: 'env' | 'manual' | 'oauth' | 'gh_cli' | 'unknown';
/** Currently active in the rotation (← marker) */
active: boolean;
/** Raw suffix of the key for display, e.g. "sk-o...e25b" */
preview?: string;
/** If rate-limited, e.g. "rate-limited rate_limit_error (429) (10m 10s left)" */
status?: string;
}
export interface PoolProvider {
/** Canonical Hermes provider id, e.g. "zai", "minimax-cn", "deepseek" */
id: string;
/** Total number of credentials in this provider's pool */
count: number;
/** True if at least one credential is currently active (not rate-limited) */
hasActive: boolean;
/** All credentials in the pool, in rotation order */
credentials: PoolCredential[];
}
export declare class HermesPoolClient {
/**
* List all providers and their credentials from `hermes auth list`.
* The output format is:
*
* <provider-id> (N credentials):
* #1 <label> api_key <source> [<status>] [←]
* #2 <label> api_key <source>
* ...
*/
static list(): Promise<PoolProvider[]>;
static parseAuthList(raw: string): PoolProvider[];
/**
* Get a specific provider's pool info. Returns null if provider doesn't exist.
*/
static getProvider(providerId: string): Promise<PoolProvider | null>;
/**
* Add a credential to a provider's pool.
* Wraps `hermes auth add <provider> --api-key <key> [--inference-url <url>]`.
*/
static addCredential(providerId: string, apiKey: string, opts?: {
label?: string;
inferenceUrl?: string;
}): Promise<void>;
/**
* Remove a credential from a provider's pool by label.
* Hermes auth remove uses positional <provider> <label>.
*/
static removeCredential(providerId: string, label: string): Promise<void>;
/**
* Sync a list of credentials into the pool, deduped by label.
* Useful for bulk-importing from an Overmind workspace .env.
*/
static syncCredentials(providerId: string, credentials: Array<{
apiKey: string;
label?: string;
inferenceUrl?: string;
}>): Promise<{
added: number;
skipped: number;
}>;
/**
* Check if a provider has at least one healthy credential available.
*/
static isProviderHealthy(providerId: string): Promise<boolean>;
/**
* List all healthy providers (at least one non-rate-limited credential).
*/
static listHealthyProviders(): Promise<string[]>;
/**
* Compute a short summary of the pool state — useful for status embeds / dashboards.
*/
static summary(): Promise<{
totalProviders: number;
totalCredentials: number;
healthyProviders: string[];
rateLimitedProviders: string[];
}>;
}
//# sourceMappingURL=HermesPoolClient.d.ts.map