This file is the authoritative, permanent reference. Do not introduce new names without updating THIS file.
All runtime configuration MUST use only the canonical names below. Legacy aliases (double underscores, mixed casing) are deprecated and will be removed.
Thumbprint store binding is now the sole supported certificate mechanism. Always import the PFX into LocalMachine\\My and set the thumbprint.
| Name | Purpose |
|---|---|
| BOT_APP_ID | Microsoft Bot / AAD App (Client) ID for the bot. |
| BOT_APP_PASSWORD | Client secret (bot password) for AAD app. |
| BOT_BASEURL | Public base URL (e.g. https://jarvis.aicollaborator.net) for bot endpoints & calling webhook. No trailing slash. |
| CERTIFICATE_THUMBPRINT | Thumbprint of TLS cert in LocalMachine\My (store binding). |
| AZURE_SPEECH_REGION | Azure Speech Service region (e.g. eastus). |
| AZURE_SPEECH_KEY | Azure Speech Service key. |
| AZURE_OPENAI_ENDPOINT | Azure OpenAI endpoint base URL. |
| AZURE_OPENAI_DEPLOYMENT | Azure OpenAI deployment name (model deployment). |
| AZURE_OPENAI_KEY | Azure OpenAI API key. |
| Name | Purpose | Default |
|------|---------|---------||
| AZURE_OPENAI_MAX_TOKENS | Override max tokens for responses (validated bounds). | 350 |
| JARVIS_MAX_CONCURRENT_AI | Semaphore limit for concurrent AI calls. | 2 |
| JARVIS_CONVERSATION_MEMORY_TURNS | Number of previous Q&A turns to remember per call. | 10 |
| JARVIS_WAKE_DEBOUNCE_MS | Minimum milliseconds between wake acknowledgements. | 5000 |
| JARVIS_MAX_PROACTIVE_PER_MINUTE | Proactive message throttle window (max messages per minute). | 10 |
| JARVIS_IDLE_TIMEOUT_SECONDS | Seconds of idle time before stopping STT recognizer. | 600 |
| JARVIS_LOG_VERBOSE_AUDIO | Enable verbose audio frame logging (1=on, 0=off). | 0 |
| SPEECH_INITIAL_SILENCE_MS | Azure Speech STT initial silence timeout (ms). | 2000 |
| SPEECH_END_SILENCE_MS | Azure Speech STT end-of-utterance silence timeout (ms). | 500 |
| APP_PORT | Override HTTP (non-HTTPS) listener port (for health/diagnostics). | 8080 |
| TEST_RELAX | If 1, relax strict startup checks (speech, external deps). | Off |
| Name | Purpose |
|---|---|
| ASPNETCORE_ENVIRONMENT | Standard ASP.NET Core environment (Development/Production). |
File path certificate binding has been removed. Always use store thumbprint.
| Deprecated | Reason / Replacement |
|---|---|
| CERT_THUMBPRINT | Use CERTIFICATE_THUMBPRINT (will be removed) |
| CertificateThumbprint | Use CERTIFICATE_THUMBPRINT |
| CERTIFICATE_PATH | Removed (no direct file binding) |
| CERTIFICATE_PASSWORD | Removed (no direct file binding) |
| Certificate__FilePath | Removed |
| Certificate__Password | Removed |
| AzureSpeech__Region | Use AZURE_SPEECH_REGION |
| AzureSpeech__Key | Use AZURE_SPEECH_KEY |
| AZURE_OPENAI_DEPLOYMENT_NAME | Use AZURE_OPENAI_DEPLOYMENT |
| AzureOpenAI__MaxTokens | Use AZURE_OPENAI_MAX_TOKENS |
| PORT | Use APP_PORT |
| CI_TEST_RELAX / UNIT_TEST_MODE / JARVIS_TEST_LIGHTWEIGHT | Use TEST_RELAX |
- Transitional phase: Code supports canonical + deprecated (read canonical first, fallback to deprecated).
- After stabilization: Remove deprecated lookups.
- Any new variable must be added here prior to code changes.
- Import certificate PFX into LocalMachine\My.
- Set CERTIFICATE_THUMBPRINT (verify with
Get-ChildItem Cert:\LocalMachine\My). - BOT_APP_ID / BOT_APP_PASSWORD
- BOT_BASEURL (matches DNS + certificate CN/SAN)
- AZURE_SPEECH_REGION / AZURE_SPEECH_KEY
- AZURE_OPENAI_ENDPOINT / AZURE_OPENAI_DEPLOYMENT / AZURE_OPENAI_KEY
- (Optional) AZURE_OPENAI_MAX_TOKENS - increase for longer responses (default: 350)
- (Optional) JARVIS_CONVERSATION_MEMORY_TURNS - adjust memory size (default: 10, range: 3-50)
- (Optional) SPEECH_INITIAL_SILENCE_MS / SPEECH_END_SILENCE_MS - tune wake phrase sensitivity
- (Optional) JARVIS_LOG_VERBOSE_AUDIO - enable for audio troubleshooting (set to 1)
- (Optional) APP_PORT, TEST_RELAX (for staging/testing only)
Store all secrets in Key Vault where possible; rotate on exposure. Never commit real key values to the repo. Thumbprint-only binding reduces secret surface (no PFX password needed at runtime).