-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathpyproject.toml
More file actions
95 lines (89 loc) · 2.79 KB
/
pyproject.toml
File metadata and controls
95 lines (89 loc) · 2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[project]
name = "logos"
version = "1.0.20"
description = "A self-hosted agent platform — inference routing, multi-model benchmarking, and policy-governed agent runs across local and cloud hardware"
readme = "README.md"
requires-python = ">=3.11"
authors = [{ name = "gregsgreycode" }]
license = { text = "MIT" }
dependencies = [
# Core
"openai",
"anthropic>=0.39.0",
"python-dotenv",
"fire",
"httpx",
"rich",
"tenacity",
"pyyaml",
"requests",
"jinja2",
"pydantic>=2.0",
# Interactive CLI (prompt_toolkit is used directly by cli.py)
"prompt_toolkit",
# Knowledge base (RAG)
"numpy>=1.24.0",
# System resource introspection (used by OpenShellExecutor.get_headroom)
"psutil>=5.9.0",
# Tools
"firecrawl-py",
"fal-client",
# Text-to-speech (Edge TTS is free, no API key needed)
"edge-tts",
"faster-whisper>=1.0.0",
# Skills Hub (GitHub App JWT auth — optional, only needed for bot identity)
"PyJWT[crypto]",
]
[project.optional-dependencies]
daytona = ["daytona>=0.148.0"]
dev = ["pytest", "pytest-asyncio", "pytest-xdist", "mcp>=1.2.0"]
messaging = ["python-telegram-bot>=20.0", "discord.py[voice]>=2.0", "aiohttp>=3.9.0", "slack-bolt>=1.18.0", "slack-sdk>=3.27.0", "argon2-cffi>=23.1.0"]
cron = ["croniter"]
slack = ["slack-bolt>=1.18.0", "slack-sdk>=3.27.0"]
cli = ["simple-term-menu"]
tts-premium = ["elevenlabs"]
voice = ["sounddevice>=0.4.6"]
pty = [
"ptyprocess>=0.7.0; sys_platform != 'win32'",
"pywinpty>=2.0.0; sys_platform == 'win32'",
]
mcp = ["mcp>=1.2.0"]
homeassistant = ["aiohttp>=3.9.0"]
k8s = ["kubernetes>=29.0.0"]
acp = ["agent-client-protocol==0.8.1"]
all = [
"logos[daytona]",
"logos[messaging]",
"logos[cron]",
"logos[cli]",
"logos[dev]",
"logos[tts-premium]",
"logos[slack]",
"logos[pty]",
"logos[mcp]",
"logos[homeassistant]",
"logos[acp]",
"logos[voice]",
"logos[k8s]",
]
[project.scripts]
logos = "logos_cli.main:main"
logos-acp = "acp_adapter.entry:main"
[tool.setuptools]
py-modules = []
[tool.setuptools.packages.find]
include = ["agent", "tools", "tools.*", "logos_cli", "logos_cli.*", "gateway", "gateway.*", "core", "core.*", "acp_adapter", "logos", "logos.*", "workflows", "workflows.*"]
[tool.pytest.ini_options]
testpaths = ["tests"]
markers = [
"integration: marks tests requiring external services (API keys, Modal, etc.)",
]
addopts = "-m 'not integration' -n auto --ignore=tests/run_interrupt_test.py --ignore=tests/test_interactive_interrupt.py --ignore=tests/test_real_interrupt_subagent.py"
filterwarnings = [
# aiohttp transports call self._loop in __del__ after the test event loop has
# been torn down; this is a known aiohttp/asyncio cleanup race, not a real bug.
"ignore::pytest.PytestUnraisableExceptionWarning",
]