steward_mirror/pyproject.toml
Andrew Ridgway 76777c98eb
feat: add Matrix appservice bot and platform-agnostic conversation core
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>
2026-08-18 21:38:01 +10:00

59 lines
1.1 KiB
TOML

[build-system]
requires = ["setuptools>=68", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "steward"
version = "0.4.2"
description = "A long-running, AI-assisted personal operations platform"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"python-telegram-bot>=21.0",
"openai>=1.30",
"httpx>=0.27",
"python-dotenv>=1.0",
"apscheduler>=3.10",
"pydantic>=2.7",
"pydantic-settings>=2.3",
"omegaconf>=2.3",
"mautrix>=0.21.0",
]
[project.optional-dependencies]
dev = [
"pytest>=8.2",
"pytest-asyncio>=0.23",
"pytest-mock>=3.14",
"ruff>=0.4",
"mypy>=1.10",
"respx>=0.21",
"pre-commit>=3.0",
]
[project.scripts]
steward = "steward.main:run"
[tool.setuptools.packages.find]
where = ["."]
include = ["steward*"]
[tool.setuptools.package-data]
steward = ["config_schema.yaml"]
[tool.ruff]
line-length = 100
target-version = "py312"
[tool.ruff.lint]
select = ["E", "F", "I", "UP"]
[tool.mypy]
python_version = "3.12"
strict = true
ignore_missing_imports = true
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]