The Telegram bot token was a const in AddChannels(), and the Mistral API
key was baked into the embedded Provider.Mistral.toml resource.
- Wire AddChannels() through the existing (previously unused)
AddTelegramOptions(), which binds "Channels:Telegram" and validates on
start. TelegramOptions is resolved from IOptions<> so TelegramAdapter
and TelegramChannel are unchanged.
- Ship the embedded provider defaults with an empty ApiKey. Ollama's
placeholder is now a non-secret literal.
- Re-apply AddEnvironmentVariables() last in AddLunaConfiguration() so
env vars override the TOML sources; without this the embedded defaults
would shadow injected credentials.
Credentials are now supplied via Providers__Mistral__ApiKey and
Channels__Telegram__BotToken, or via ~/.luna/providers/*.toml overrides.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Implement configuration system with embedded TOML resources for agent
and provider definitions, custom IConfigurationSource/Provider for
agent and provider options, and DI extension methods. Includes config
models for agents, providers, sessions, and Telegram integration.