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[project]
name = "copaw"
dynamic = ["version"]
description = "CoPaw is a **personal assistant** that runs in your own environment. It talks to you over multiple channels (DingTalk, Feishu, QQ, Discord, iMessage, etc.) and runs scheduled tasks according to your configuration. **What it can do is driven by Skills โ the possibilities are open-ended.** Built-in skills include cron, PDF/Office handling, news digest, file reading, and more; you can add custom skills. All data and tasks run on your machine; no third-party hosting."
readme = "README.md"
requires-python = ">=3.10,<3.14"
dependencies = [
"agentscope==1.0.16.dev0",
"agentscope-runtime==1.1.0",
"discord-py>=2.3",
"dingtalk-stream>=0.24.3",
"uvicorn>=0.40.0",
"apscheduler>=3.11.2,<4",
"playwright>=1.49.0",
"questionary>=2.1.1",
"mss>=9.0.0",
"reme-ai==0.3.0.0",
"transformers>=4.30.0",
"python-dotenv>=1.0.0",
"onnxruntime<1.24",
"lark-oapi>=1.5.3",
]
[tool.setuptools.dynamic]
version = {attr = "copaw.__version__.__version__"}
[tool.setuptools]
packages = { find = { where = ["src"] } }
include-package-data = true
[tool.setuptools.package-data]
# Dockerfile copies console build output to src/copaw/console/ (no dist subdir).
"copaw" = [
"console/**",
"agents/md_files/**",
"agents/skills/**",
"tokenizer/**",
]
[build-system]
requires = ["setuptools>=42", "wheel"]
build-backend = "setuptools.build_meta"
[project.scripts]
copaw = "copaw.cli.main:cli"
[project.optional-dependencies]
dev = [
"pytest>=8.3.5",
"pytest-asyncio>=0.23.0",
"pre-commit>=4.2.0",
"pytest-cov>=6.2.1",
]
local = [
"huggingface_hub>=0.20.0",
]
llamacpp = [
"copaw[local]",
"llama-cpp-python>=0.3.0",
]
mlx = [
"copaw[local]",
"mlx-lm>=0.10.0",
]
[tool.pytest.ini_options]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
markers = [
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
]