feat: persist settings and enrich conversation context
This commit is contained in:
1 parent
a36723a325
commit
2c100d72b6
84 files changed
+2248
-644
No files matched your search
+37
-40
@@ -7,9 +7,9 @@ Complete reference for configuring RedditBot.
|
||||
## Table of Contents
|
||||
|
||||
1. [Configuration Overview](#configuration-overview)
|
||||
2. [Configuration Files](#configuration-files)
|
||||
2. [Configuration Storage](#configuration-storage)
|
||||
3. [Environment Variables](#environment-variables)
|
||||
4. [config.yaml Reference](#configyaml-reference)
|
||||
4. [Application Settings](#application-settings)
|
||||
5. [Runtime Configuration](#runtime-configuration)
|
||||
6. [Configuration Validation](#configuration-validation)
|
||||
7. [Troubleshooting](#troubleshooting)
|
||||
@@ -25,7 +25,7 @@ RedditBot uses a layered configuration approach:
|
||||
│ Priority Order (High → Low) │
|
||||
├──────────────────────────────────────────────────────────────┤
|
||||
│ 1. Environment Variables │
|
||||
│ (OPENROUTER_API_KEY, REDDIT_USERNAME, etc.) │
|
||||
│ (OPENROUTER_API_KEY, WEB_DASHBOARD_TOKEN) │
|
||||
│ │
|
||||
│ 2. config.yaml │
|
||||
│ (Primary configuration file) │
|
||||
@@ -37,18 +37,20 @@ RedditBot uses a layered configuration approach:
|
||||
|
||||
Configuration is loaded at startup by `loadConfig()` in `src/config/index.ts`, which:
|
||||
|
||||
1. Reads `config.yaml` from the project root
|
||||
2. Merges environment variable overrides
|
||||
1. Reads the singleton `app_config` record from SQLite
|
||||
2. Imports `config.yaml` only when upgrading an existing database that has no settings record
|
||||
3. Validates the entire configuration tree using Zod
|
||||
4. Returns a strongly-typed `Config` object
|
||||
|
||||
Application-owned settings are edited from the dashboard and saved to SQLite. `OPENROUTER_API_KEY`, `WEB_DASHBOARD_TOKEN`, and `DATABASE_PATH` remain environment-owned bootstrap values and are never stored in `app_config`.
|
||||
|
||||
---
|
||||
|
||||
## Configuration Files
|
||||
## Configuration Storage
|
||||
|
||||
### config.yaml
|
||||
### Legacy config.yaml
|
||||
|
||||
The primary configuration file, located at the project root:
|
||||
`config.yaml` is retained temporarily as a one-time migration source for existing installations. Once every deployed database contains an `app_config` row, it can be removed in a follow-up release.
|
||||
|
||||
```
|
||||
RedditBot/
|
||||
@@ -79,14 +81,13 @@ data/
|
||||
|
||||
## Environment Variables
|
||||
|
||||
Environment variables override corresponding values in `config.yaml`.
|
||||
Environment variables provide secrets and bootstrap settings that are intentionally excluded from SQLite.
|
||||
|
||||
| Variable | Required | Type | Description | Example |
|
||||
|---|---|---|---|---|
|
||||
| `OPENROUTER_API_KEY` | Yes | string | OpenRouter API key for AI services | `sk-or-v1-abc123...` |
|
||||
| `REDDIT_USERNAME` | Yes | string | Reddit username for authentication | `MyBotUser` |
|
||||
| `REDDIT_PASSWORD` | Yes | string | Reddit password for authentication | `secret123` |
|
||||
| `BROWSER_HEADLESS` | No | boolean | Run browser in headless mode | `true` or `false` |
|
||||
| `WEB_DASHBOARD_TOKEN` | Yes when dashboard enabled | string | Dashboard access token | `long-random-secret` |
|
||||
| `DATABASE_PATH` | No | string | SQLite database location | `./data/reddit-bot.db` |
|
||||
|
||||
### Setting Environment Variables
|
||||
|
||||
@@ -96,9 +97,7 @@ Create a `.env` file in the project root:
|
||||
|
||||
```env
|
||||
OPENROUTER_API_KEY=sk-or-v1-abc123...
|
||||
REDDIT_USERNAME=MyBotUser
|
||||
REDDIT_PASSWORD=secret123
|
||||
BROWSER_HEADLESS=true
|
||||
WEB_DASHBOARD_TOKEN=long-random-secret
|
||||
```
|
||||
|
||||
> **Note**: Add `.env` to `.gitignore` - never commit credentials.
|
||||
@@ -107,8 +106,7 @@ BROWSER_HEADLESS=true
|
||||
|
||||
```bash
|
||||
export OPENROUTER_API_KEY=sk-or-v1-abc123...
|
||||
export REDDIT_USERNAME=MyBotUser
|
||||
export REDDIT_PASSWORD=secret123
|
||||
export WEB_DASHBOARD_TOKEN=long-random-secret
|
||||
```
|
||||
|
||||
**Option 3: Docker**
|
||||
@@ -118,13 +116,16 @@ Pass via `docker-compose.yml` or Docker CLI:
|
||||
```yaml
|
||||
environment:
|
||||
- OPENROUTER_API_KEY=sk-or-v1-abc123...
|
||||
- REDDIT_USERNAME=MyBotUser
|
||||
- REDDIT_PASSWORD=secret123
|
||||
- WEB_DASHBOARD_TOKEN=long-random-secret
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## config.yaml Reference
|
||||
## Application Settings
|
||||
|
||||
Use **Settings** in the dashboard for monitoring, rate limits, dry-run behaviour, subreddits, models, prompts, filtering, media sync, and strategy configuration. The advanced JSON editor exposes settings that do not yet have dedicated controls; its payload is validated by the server before it is saved.
|
||||
|
||||
The YAML examples below document the legacy field layout used during one-time migration.
|
||||
|
||||
Complete reference for every configuration option.
|
||||
|
||||
@@ -235,13 +236,9 @@ Max messages: 20 per hour
|
||||
|
||||
```yaml
|
||||
browser:
|
||||
# Run browser in headless mode (no UI)
|
||||
# Set to false for debugging
|
||||
headless: true
|
||||
|
||||
# Directory for persistent browser data
|
||||
# Cookies and session storage are saved here
|
||||
userDataDir: "./data/browser"
|
||||
# Persistent managed-browser data populated only by verified imports
|
||||
sessionDir: "./data/browser-session"
|
||||
dryRun: false
|
||||
```
|
||||
|
||||
**Browser session persistence:**
|
||||
@@ -412,8 +409,8 @@ All configuration is validated using Zod at startup. Invalid configuration will
|
||||
| `rateLimit.minDelayMs` | Must be positive integer |
|
||||
| `rateLimit.maxMessagesPerHour` | Must be positive integer |
|
||||
| `rateLimit.jitterMs` | Must be non-negative integer |
|
||||
| `browser.headless` | Must be boolean |
|
||||
| `browser.userDataDir` | Must be non-empty string |
|
||||
| `browser.sessionDir` | Must be non-empty string |
|
||||
| `browser.dryRun` | Must be boolean |
|
||||
| `database.path` | Must be non-empty string |
|
||||
| `mediaSync.enabled` | Must be boolean |
|
||||
| `mediaSync.intervalMinutes` | Must be positive integer (if enabled) |
|
||||
@@ -432,8 +429,8 @@ All configuration is validated using Zod at startup. Invalid configuration will
|
||||
**Error**: `Invalid config: reddit.subreddits must be a non-empty array`
|
||||
**Fix**: Add at least one subreddit to `reddit.subreddits` in `config.yaml`
|
||||
|
||||
**Error**: `Invalid config: browser.userDataDir must be a string`
|
||||
**Fix**: Ensure `browser.userDataDir` is set in `config.yaml`
|
||||
**Error**: `Invalid config: browser.sessionDir must be a string`
|
||||
**Fix**: Ensure `browser.sessionDir` is set in `config.yaml`
|
||||
|
||||
---
|
||||
|
||||
@@ -449,15 +446,15 @@ All configuration is validated using Zod at startup. Invalid configuration will
|
||||
3. Verify environment variables are set correctly
|
||||
4. Check bot logs for specific validation errors
|
||||
|
||||
### Credentials Not Working
|
||||
### Account Authentication Not Working
|
||||
|
||||
**Symptom**: Browser login fails.
|
||||
**Symptom**: Account work remains paused.
|
||||
|
||||
**Steps**:
|
||||
1. Verify `REDDIT_USERNAME` and `REDDIT_PASSWORD` are correct
|
||||
2. Check that the account is not locked or requires 2FA
|
||||
3. Try manual login via `npm run login`
|
||||
4. Ensure `BROWSER_HEADLESS=false` for debugging login issues
|
||||
1. Sign in to Reddit in local Chrome
|
||||
2. Open Reddit Chat and wait for the extension badge to show `OK`
|
||||
3. Export and upload a fresh combined session dump
|
||||
4. Check dashboard logs for Reddit or Matrix identity verification errors
|
||||
|
||||
### AI Not Working
|
||||
|
||||
@@ -475,9 +472,9 @@ All configuration is validated using Zod at startup. Invalid configuration will
|
||||
**Symptom**: Bot stops with "Browser session expired" error.
|
||||
|
||||
**Steps**:
|
||||
1. Delete `data/browser/` directory
|
||||
2. Run `npm run login` to re-authenticate
|
||||
3. Restart the bot
|
||||
1. Open Reddit Chat in the local Chrome profile containing the extension
|
||||
2. Export and upload a fresh session dump
|
||||
3. Delete the downloaded dump after verification
|
||||
|
||||
### Port Already in Use
|
||||
|
||||
|
||||
Reference in new issue
Block a user