Files
owlen/crates/platform/credentials/Cargo.toml
vikingowl 5b0774958a feat(auth): add multi-provider authentication with secure credential storage
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>
2025-12-03 00:27:37 +01:00

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"