Authentication System: - Add credentials crate with keyring (OS keychain) and file fallback storage - Add auth-manager crate for unified auth across providers - Implement API key login flow for Anthropic, OpenAI, and Ollama Cloud - Add CLI commands: login, logout, auth (status) - Store credentials securely in macOS Keychain / GNOME Keyring / Windows Credential Manager API Key Helpers: - Support for password manager integration (1Password, Bitwarden, pass, AWS Secrets, Vault) - Command-based helpers with TTL caching - Priority chain: env vars → helpers → cache → stored credentials Background Token Refresh: - Automatic OAuth token refresh before expiration - Configurable check interval and refresh threshold MCP OAuth Support: - Add OAuth config to MCP server definitions - Support for SSE/HTTP transport with OAuth - Token storage with mcp: prefix Bug Fixes: - Fix keyring crate requiring explicit backend features (was using mock store) - Fix provider index not updated on credential store - Add User-Agent headers to avoid Cloudflare blocks 🤖 Generated with [Claude Code](https://claude.ai/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
32 lines
923 B
TOML
32 lines
923 B
TOML
[package]
|
|
name = "credentials"
|
|
version = "0.1.0"
|
|
edition.workspace = true
|
|
license.workspace = true
|
|
rust-version.workspace = true
|
|
description = "Secure credential storage with keyring and file fallback"
|
|
|
|
[dependencies]
|
|
# Cross-platform keyring (macOS Keychain, Linux secret-service, Windows Credential Manager)
|
|
# NOTE: keyring 3.x requires explicit backend features - without them it uses a mock store!
|
|
keyring = { version = "3", features = ["apple-native", "windows-native", "sync-secret-service"] }
|
|
|
|
# XDG/platform directories for config paths
|
|
directories = "5"
|
|
|
|
# Serialization for credential storage
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
|
|
# Error handling
|
|
thiserror = "2"
|
|
|
|
# LLM core types (StoredCredentials, AuthMethod)
|
|
llm-core = { path = "../../llm/core" }
|
|
|
|
# Async for potential future keyring operations
|
|
tokio = { version = "1", features = ["sync"] }
|
|
|
|
[dev-dependencies]
|
|
tempfile = "3"
|