Introduce a shared ConversationService (steward/bot/core.py) that owns the LLM call, history, knowledge-base search, and thread-memory keying behind a normalized ThreadKey, so both Telegram and Matrix drive the same pipeline. - Add steward/bot/matrix.py: a mautrix-python appservice bot that receives Synapse transactions and replies via the client-server API. - Refactor telegram.py handlers into thin wrappers over ConversationService. - Generalize ThreadMemoryStore/ThreadSummary to platform-scoped keys with legacy chat_id:thread_id migration. - Add a matrix config section (homeserver, tokens, room/user allowlists). - Rewrite main.py as async, starting Telegram and/or Matrix on one event loop. - Add mautrix>=0.21.0 dependency. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
85 lines
2.6 KiB
YAML
85 lines
2.6 KiB
YAML
# Steward Configuration Schema
|
|
# This is the default configuration. Override values in your own config file or via environment variables.
|
|
# Environment variable format: STEWARD__<section>__<key>=value
|
|
# Example: STEWARD__TELEGRAM__BOT_TOKEN=your_token
|
|
|
|
telegram:
|
|
# Telegram bot token (REQUIRED - set via env or config)
|
|
bot_token: ""
|
|
|
|
# List of user IDs allowed to interact with the bot via DM
|
|
# Empty list means all users are allowed
|
|
allowed_user_ids: []
|
|
|
|
# List of group/channel IDs where the bot is allowed to operate
|
|
# Empty list means all groups are allowed
|
|
group_ids: []
|
|
|
|
openai:
|
|
# OpenAI API key (REQUIRED - set via env for security)
|
|
api_key: ""
|
|
|
|
# API base URL (can use any OpenAI-compatible provider)
|
|
base_url: "https://api.openai.com/v1"
|
|
|
|
# Model to use
|
|
model: "gpt-4o"
|
|
|
|
# System prompt for the bot
|
|
system_prompt: "You are Steward, a persistent, trustworthy AI-assisted personal operations platform. You reduce cognitive load by observing, remembering, planning, and proposing actions. You are conservative, transparent, and policy-aware. Always explain your reasoning."
|
|
|
|
analysis:
|
|
# Target URL for API analysis (optional - set to enable analysis feature)
|
|
target_url: ""
|
|
|
|
# API key for analysis target (optional)
|
|
target_api_key: ""
|
|
|
|
# Cron schedule for automatic analysis
|
|
cron_hour: 8
|
|
cron_minute: 0
|
|
|
|
memory:
|
|
# Path to thread memory storage file
|
|
thread_memory_path: "thread_memory.json"
|
|
|
|
tools:
|
|
# MCP/OpenAPI tool server URL (optional - set to enable tool calling)
|
|
mcp_server_url: ""
|
|
|
|
# API key for MCP server (optional)
|
|
mcp_server_api_key: ""
|
|
|
|
matrix:
|
|
# Matrix appservice integration (optional - set to enable the Matrix bot)
|
|
# The bot registers as a Synapse application service and receives events
|
|
# via HTTP transactions, then replies through the client-server API.
|
|
|
|
# Homeserver client-server base URL (e.g. http://matrix:8008)
|
|
homeserver_url: ""
|
|
|
|
# Homeserver domain (server_name), e.g. matrix.aridgwayweb.com
|
|
homeserver_domain: ""
|
|
|
|
# Appservice token used by the bot to authenticate to the homeserver
|
|
as_token: ""
|
|
|
|
# Homeserver token used to authenticate incoming transactions
|
|
hs_token: ""
|
|
|
|
# Localpart of the bot user (becomes @<localpart>:<domain>)
|
|
bot_localpart: "steward"
|
|
|
|
# Unique appservice ID
|
|
appservice_id: "steward"
|
|
|
|
# Host/port the appservice HTTP server listens on
|
|
listen_host: "0.0.0.0"
|
|
listen_port: 8000
|
|
|
|
# List of room IDs the bot is allowed to operate in (empty = all rooms)
|
|
allowed_room_ids: []
|
|
|
|
# List of user IDs (MXIDs) allowed to talk to the bot (empty = all users)
|
|
allowed_user_ids: []
|