devmate 1.0.0__tar.gz → 2.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- devmate-2.1.0/PKG-INFO +186 -0
- devmate-2.1.0/README.md +134 -0
- {devmate-1.0.0 → devmate-2.1.0}/pyproject.toml +11 -2
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate/__init__.py +1 -1
- devmate-2.1.0/src/devmate/ai_config/__init__.py +159 -0
- devmate-2.1.0/src/devmate/ai_scenarios/__init__.py +276 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate/app/cli.py +1090 -20
- devmate-2.1.0/src/devmate/app/tui.py +526 -0
- devmate-2.1.0/src/devmate/app/web/__init__.py +542 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate/core/logging.py +2 -1
- devmate-2.1.0/src/devmate/mcp/__init__.py +458 -0
- devmate-2.1.0/src/devmate/plugin/__init__.py +188 -0
- devmate-2.1.0/src/devmate/plugin_market/__init__.py +318 -0
- devmate-2.1.0/src/devmate/plugin_market/ratings.py +120 -0
- devmate-2.1.0/src/devmate/plugin_market/remote.py +183 -0
- devmate-2.1.0/src/devmate/rag/__init__.py +393 -0
- devmate-2.1.0/src/devmate/workflow/__init__.py +315 -0
- devmate-2.1.0/src/devmate.egg-info/PKG-INFO +186 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate.egg-info/SOURCES.txt +10 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate.egg-info/entry_points.txt +2 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate.egg-info/requires.txt +3 -0
- devmate-2.1.0/src/devmate_agent/__init__.py +718 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate_apihub/__init__.py +190 -1
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate_monitor/__init__.py +68 -23
- devmate-2.1.0/src/devmate_publisher/__init__.py +104 -0
- devmate-1.0.0/PKG-INFO +0 -116
- devmate-1.0.0/README.md +0 -67
- devmate-1.0.0/src/devmate/app/tui.py +0 -291
- devmate-1.0.0/src/devmate/app/web/__init__.py +0 -95
- devmate-1.0.0/src/devmate.egg-info/PKG-INFO +0 -116
- devmate-1.0.0/src/devmate_agent/__init__.py +0 -440
- {devmate-1.0.0 → devmate-2.1.0}/setup.cfg +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate/__main__.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate/app/__init__.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate/bus/__init__.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate/bus/bus.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate/bus/command.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate/core/__init__.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate/core/config.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate/core/security.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate/events/__init__.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate/events/bus.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate/events/domain_event.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate/module/__init__.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate/module/registry.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate/security/audit.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate/security/vault.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate.egg-info/dependency_links.txt +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate.egg-info/top_level.txt +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate_apidev/__init__.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate_dbadmin/__init__.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate_gitflow/__init__.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate_notekeeper/__init__.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate_regexlab/__init__.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate_reporter/__init__.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate_scaffold/__init__.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate_sshman/__init__.py +0 -0
- {devmate-1.0.0 → devmate-2.1.0}/src/devmate_toolkit/__init__.py +0 -0
devmate-2.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: devmate
|
|
3
|
+
Version: 2.1.0
|
|
4
|
+
Summary: 程序员终端瑞士军刀 + AI 原生平台——替代 5 个独立工具,一个 CLI 搞定
|
|
5
|
+
Author-email: DevMate Team <devmate@example.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Keywords: cli,developer-tools,terminal,productivity
|
|
8
|
+
Classifier: Development Status :: 3 - Alpha
|
|
9
|
+
Classifier: Environment :: Console
|
|
10
|
+
Classifier: Intended Audience :: Developers
|
|
11
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
+
Classifier: Topic :: Software Development
|
|
14
|
+
Classifier: Topic :: Utilities
|
|
15
|
+
Requires-Python: >=3.11
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
Requires-Dist: click>=8.1
|
|
18
|
+
Requires-Dist: rich>=13.0
|
|
19
|
+
Requires-Dist: pydantic>=2.0
|
|
20
|
+
Requires-Dist: pydantic-settings>=2.0
|
|
21
|
+
Requires-Dist: pyyaml>=6.0
|
|
22
|
+
Requires-Dist: sqlalchemy>=2.0
|
|
23
|
+
Requires-Dist: alembic>=1.13
|
|
24
|
+
Requires-Dist: cryptography>=42.0
|
|
25
|
+
Requires-Dist: httpx>=0.27
|
|
26
|
+
Requires-Dist: psutil>=5.9
|
|
27
|
+
Provides-Extra: web
|
|
28
|
+
Requires-Dist: fastapi>=0.110; extra == "web"
|
|
29
|
+
Requires-Dist: uvicorn[standard]>=0.29; extra == "web"
|
|
30
|
+
Requires-Dist: jinja2>=3.1; extra == "web"
|
|
31
|
+
Requires-Dist: python-multipart>=0.0.9; extra == "web"
|
|
32
|
+
Requires-Dist: python-jose[cryptography]>=3.3; extra == "web"
|
|
33
|
+
Requires-Dist: passlib[bcrypt]>=1.7; extra == "web"
|
|
34
|
+
Requires-Dist: starlette<0.50; extra == "web"
|
|
35
|
+
Provides-Extra: tui
|
|
36
|
+
Requires-Dist: textual>=1.0; extra == "tui"
|
|
37
|
+
Provides-Extra: ai
|
|
38
|
+
Requires-Dist: chromadb>=0.5; extra == "ai"
|
|
39
|
+
Requires-Dist: tiktoken>=0.7; extra == "ai"
|
|
40
|
+
Requires-Dist: sentence-transformers>=2.2; extra == "ai"
|
|
41
|
+
Provides-Extra: dev
|
|
42
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
43
|
+
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
|
|
44
|
+
Requires-Dist: pytest-cov>=5.0; extra == "dev"
|
|
45
|
+
Requires-Dist: ruff>=0.5; extra == "dev"
|
|
46
|
+
Requires-Dist: mypy>=1.10; extra == "dev"
|
|
47
|
+
Provides-Extra: all
|
|
48
|
+
Requires-Dist: devmate[web]; extra == "all"
|
|
49
|
+
Requires-Dist: devmate[tui]; extra == "all"
|
|
50
|
+
Requires-Dist: devmate[ai]; extra == "all"
|
|
51
|
+
Requires-Dist: devmate[dev]; extra == "all"
|
|
52
|
+
|
|
53
|
+
# 🏗️ DevMate
|
|
54
|
+
|
|
55
|
+
> **程序员终端瑞士军刀 + AI 原生平台——替代 5 个独立工具,一个 CLI 搞定**
|
|
56
|
+
|
|
57
|
+
[](https://www.python.org/downloads/)
|
|
58
|
+
[](LICENSE)
|
|
59
|
+
[]()
|
|
60
|
+
|
|
61
|
+
DevMate 是一个 **CLI + TUI + Web 三模架构** 的程序员全能工坊。装一个 devmate,少装 Postman + TablePlus + htop + 正则工具 + 文件管理器 + AI Agent。
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## ✨ 核心亮点
|
|
66
|
+
|
|
67
|
+
| 能力 | 说明 |
|
|
68
|
+
|------|------|
|
|
69
|
+
| 🤖 **AI Agent** | ReAct 循环 + 11 个内置工具,自然语言指挥终端干活 |
|
|
70
|
+
| 🗺 **自然语言 → 工作流** | 说"检查服务器磁盘并汇总",自动编排多步工作流并执行 |
|
|
71
|
+
| 📚 **RAG 知识库** | ChromaDB 向量检索,笔记/文档语义搜索(4 种嵌入模型可选) |
|
|
72
|
+
| 🔍 **AI 代码审查** | 读源码 + 知识库上下文,输出 Bug/安全/性能/风格建议 |
|
|
73
|
+
| 💬 **个人知识问答** | "上个月怎么修的内存泄漏" → 基于你的笔记直接给答案 |
|
|
74
|
+
| 🧩 **插件市场** | 搜索/安装/发布/评分插件,生态可扩展 |
|
|
75
|
+
| 🌐 **三端同源** | CLI / TUI / Web 共享同一套命令实现 |
|
|
76
|
+
|
|
77
|
+
## 🚀 快速开始
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# 安装
|
|
81
|
+
pip install "devmate[all]"
|
|
82
|
+
|
|
83
|
+
# 首次运行(交互式引导)
|
|
84
|
+
devmate
|
|
85
|
+
|
|
86
|
+
# 试试这些命令
|
|
87
|
+
devmate tk organize ~/Downloads --dry-run # 整理文件(预览模式)
|
|
88
|
+
devmate db connect sqlite:///test.db # 连接数据库
|
|
89
|
+
devmate api get https://httpbin.org/get # 发送 HTTP 请求
|
|
90
|
+
devmate ai add default --provider openai --key sk-xxx # 配置 AI 模型
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## 🤖 AI 场景演示
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# ① 自然语言 → 工作流自动编排
|
|
97
|
+
devmate agent flow "检查所有服务器磁盘并汇总"
|
|
98
|
+
|
|
99
|
+
# ② AI 代码审查
|
|
100
|
+
devmate agent review ./src
|
|
101
|
+
|
|
102
|
+
# ③ 个人知识问答(基于 RAG 知识库)
|
|
103
|
+
devmate agent ask "上个月怎么修的内存泄漏"
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## 📦 模块一览(16 个)
|
|
107
|
+
|
|
108
|
+
| 模块 | CLI 入口 | 功能 | 状态 |
|
|
109
|
+
|------|---------|------|------|
|
|
110
|
+
| **toolkit** | `devmate tk` | 文件整理、目录大小排行、缓存清理 | ✅ |
|
|
111
|
+
| **apidev** | `devmate api` | HTTP 客户端、Mock Server、请求历史 | ✅ |
|
|
112
|
+
| **dbadmin** | `devmate db` | SQL 编辑器、表浏览器、保存的查询 | ✅ |
|
|
113
|
+
| **apihub** | `devmate ai` | AI 模型统一接入、智能路由、成本追踪 | ✅ |
|
|
114
|
+
| **agent** | `devmate agent` | ReAct 循环、11 工具、三大 AI 场景 | ✅ |
|
|
115
|
+
| **workflow** | `devmate wf` | 多步工作流编排引擎 | ✅ |
|
|
116
|
+
| **knowledge** | `devmate knowledge` | RAG 向量知识库 | ✅ |
|
|
117
|
+
| **plugin** | `devmate plugin` | 插件市场、评分、发布 | ✅ |
|
|
118
|
+
| vault | `devmate vault` | 加密密钥管理器 | ✅ |
|
|
119
|
+
| audit | `devmate audit` | 审计日志 | ✅ |
|
|
120
|
+
| sshman | `devmate ssh` | SSH 连接管理 | ✅ |
|
|
121
|
+
| gitflow | `devmate git` | Git 工作流增强 | ✅ |
|
|
122
|
+
| regexlab | `devmate re` | 正则表达式实验室 | ✅ |
|
|
123
|
+
| notekeeper | `devmate note` | 个人笔记 | ✅ |
|
|
124
|
+
| monitor | `devmate top` | 系统监控 | ✅ |
|
|
125
|
+
| reporter | `devmate report` | 报告生成 | ✅ |
|
|
126
|
+
|
|
127
|
+
## 🖥 Web 面板
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
devmate web --port 8600
|
|
131
|
+
# 打开 http://127.0.0.1:8600 (默认 admin/devmate)
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
包含:仪表盘、Agent 引擎(三大场景可视化)、RAG 知识库、工作流编排、AI 配置、插件市场、用量统计。
|
|
135
|
+
|
|
136
|
+
## 📥 安装方式
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
pip install devmate # 最小安装(CLI 核心)
|
|
140
|
+
pip install "devmate[dev]" # 开发安装(测试 + 代码检查)
|
|
141
|
+
pip install "devmate[ai]" # AI 功能(ChromaDB + 嵌入模型)
|
|
142
|
+
pip install "devmate[all]" # 完整安装
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## 🔧 开发
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
git clone https://github.com/CXuanPro/DevMate.git
|
|
149
|
+
cd DevMate
|
|
150
|
+
python -m venv .venv && source .venv/bin/activate
|
|
151
|
+
pip install -e ".[dev]"
|
|
152
|
+
|
|
153
|
+
devmate --help # 验证
|
|
154
|
+
pytest # 运行测试(200+)
|
|
155
|
+
ruff check src/ tests/ # 代码检查
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## 📐 架构
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
┌─────────┐ ┌─────────┐ ┌─────────┐
|
|
162
|
+
│ CLI │ │ TUI │ │ Web │ ← 用户入口层
|
|
163
|
+
└────┬────┘ └────┬────┘ └────┬────┘
|
|
164
|
+
└────────────┼────────────┘
|
|
165
|
+
▼
|
|
166
|
+
路由 / 调度层(事件总线)
|
|
167
|
+
▼
|
|
168
|
+
┌───────────────────┐
|
|
169
|
+
│ Agent Harness │ ← LLM + 工具 + RAG + 工作流
|
|
170
|
+
│ + 16 个业务模块 │
|
|
171
|
+
└───────────────────┘
|
|
172
|
+
▼
|
|
173
|
+
安全基建(vault / audit)
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## 🗺 路线图
|
|
177
|
+
|
|
178
|
+
- ✅ **Phase 1 (v0.x)** — CLI 瑞士军刀:16 模块
|
|
179
|
+
- ✅ **Phase 2 (v1.x)** — AI 原生平台:Agent + RAG + 工作流 + 场景
|
|
180
|
+
- ✅ **Phase 3 (v2.x)** — 生态市场:插件市场 + 评分 + 说明
|
|
181
|
+
- ⬜ **Phase 4 (v3.0)** — 开放平台:远程市场 / 配置云同步 / 团队审计 / SSO
|
|
182
|
+
- ⬜ **Phase 5 (v4.0+)** — 开发者终端 OS
|
|
183
|
+
|
|
184
|
+
## 📄 License
|
|
185
|
+
|
|
186
|
+
MIT
|
devmate-2.1.0/README.md
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# 🏗️ DevMate
|
|
2
|
+
|
|
3
|
+
> **程序员终端瑞士军刀 + AI 原生平台——替代 5 个独立工具,一个 CLI 搞定**
|
|
4
|
+
|
|
5
|
+
[](https://www.python.org/downloads/)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
[]()
|
|
8
|
+
|
|
9
|
+
DevMate 是一个 **CLI + TUI + Web 三模架构** 的程序员全能工坊。装一个 devmate,少装 Postman + TablePlus + htop + 正则工具 + 文件管理器 + AI Agent。
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## ✨ 核心亮点
|
|
14
|
+
|
|
15
|
+
| 能力 | 说明 |
|
|
16
|
+
|------|------|
|
|
17
|
+
| 🤖 **AI Agent** | ReAct 循环 + 11 个内置工具,自然语言指挥终端干活 |
|
|
18
|
+
| 🗺 **自然语言 → 工作流** | 说"检查服务器磁盘并汇总",自动编排多步工作流并执行 |
|
|
19
|
+
| 📚 **RAG 知识库** | ChromaDB 向量检索,笔记/文档语义搜索(4 种嵌入模型可选) |
|
|
20
|
+
| 🔍 **AI 代码审查** | 读源码 + 知识库上下文,输出 Bug/安全/性能/风格建议 |
|
|
21
|
+
| 💬 **个人知识问答** | "上个月怎么修的内存泄漏" → 基于你的笔记直接给答案 |
|
|
22
|
+
| 🧩 **插件市场** | 搜索/安装/发布/评分插件,生态可扩展 |
|
|
23
|
+
| 🌐 **三端同源** | CLI / TUI / Web 共享同一套命令实现 |
|
|
24
|
+
|
|
25
|
+
## 🚀 快速开始
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# 安装
|
|
29
|
+
pip install "devmate[all]"
|
|
30
|
+
|
|
31
|
+
# 首次运行(交互式引导)
|
|
32
|
+
devmate
|
|
33
|
+
|
|
34
|
+
# 试试这些命令
|
|
35
|
+
devmate tk organize ~/Downloads --dry-run # 整理文件(预览模式)
|
|
36
|
+
devmate db connect sqlite:///test.db # 连接数据库
|
|
37
|
+
devmate api get https://httpbin.org/get # 发送 HTTP 请求
|
|
38
|
+
devmate ai add default --provider openai --key sk-xxx # 配置 AI 模型
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## 🤖 AI 场景演示
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# ① 自然语言 → 工作流自动编排
|
|
45
|
+
devmate agent flow "检查所有服务器磁盘并汇总"
|
|
46
|
+
|
|
47
|
+
# ② AI 代码审查
|
|
48
|
+
devmate agent review ./src
|
|
49
|
+
|
|
50
|
+
# ③ 个人知识问答(基于 RAG 知识库)
|
|
51
|
+
devmate agent ask "上个月怎么修的内存泄漏"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## 📦 模块一览(16 个)
|
|
55
|
+
|
|
56
|
+
| 模块 | CLI 入口 | 功能 | 状态 |
|
|
57
|
+
|------|---------|------|------|
|
|
58
|
+
| **toolkit** | `devmate tk` | 文件整理、目录大小排行、缓存清理 | ✅ |
|
|
59
|
+
| **apidev** | `devmate api` | HTTP 客户端、Mock Server、请求历史 | ✅ |
|
|
60
|
+
| **dbadmin** | `devmate db` | SQL 编辑器、表浏览器、保存的查询 | ✅ |
|
|
61
|
+
| **apihub** | `devmate ai` | AI 模型统一接入、智能路由、成本追踪 | ✅ |
|
|
62
|
+
| **agent** | `devmate agent` | ReAct 循环、11 工具、三大 AI 场景 | ✅ |
|
|
63
|
+
| **workflow** | `devmate wf` | 多步工作流编排引擎 | ✅ |
|
|
64
|
+
| **knowledge** | `devmate knowledge` | RAG 向量知识库 | ✅ |
|
|
65
|
+
| **plugin** | `devmate plugin` | 插件市场、评分、发布 | ✅ |
|
|
66
|
+
| vault | `devmate vault` | 加密密钥管理器 | ✅ |
|
|
67
|
+
| audit | `devmate audit` | 审计日志 | ✅ |
|
|
68
|
+
| sshman | `devmate ssh` | SSH 连接管理 | ✅ |
|
|
69
|
+
| gitflow | `devmate git` | Git 工作流增强 | ✅ |
|
|
70
|
+
| regexlab | `devmate re` | 正则表达式实验室 | ✅ |
|
|
71
|
+
| notekeeper | `devmate note` | 个人笔记 | ✅ |
|
|
72
|
+
| monitor | `devmate top` | 系统监控 | ✅ |
|
|
73
|
+
| reporter | `devmate report` | 报告生成 | ✅ |
|
|
74
|
+
|
|
75
|
+
## 🖥 Web 面板
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
devmate web --port 8600
|
|
79
|
+
# 打开 http://127.0.0.1:8600 (默认 admin/devmate)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
包含:仪表盘、Agent 引擎(三大场景可视化)、RAG 知识库、工作流编排、AI 配置、插件市场、用量统计。
|
|
83
|
+
|
|
84
|
+
## 📥 安装方式
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
pip install devmate # 最小安装(CLI 核心)
|
|
88
|
+
pip install "devmate[dev]" # 开发安装(测试 + 代码检查)
|
|
89
|
+
pip install "devmate[ai]" # AI 功能(ChromaDB + 嵌入模型)
|
|
90
|
+
pip install "devmate[all]" # 完整安装
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## 🔧 开发
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
git clone https://github.com/CXuanPro/DevMate.git
|
|
97
|
+
cd DevMate
|
|
98
|
+
python -m venv .venv && source .venv/bin/activate
|
|
99
|
+
pip install -e ".[dev]"
|
|
100
|
+
|
|
101
|
+
devmate --help # 验证
|
|
102
|
+
pytest # 运行测试(200+)
|
|
103
|
+
ruff check src/ tests/ # 代码检查
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## 📐 架构
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
┌─────────┐ ┌─────────┐ ┌─────────┐
|
|
110
|
+
│ CLI │ │ TUI │ │ Web │ ← 用户入口层
|
|
111
|
+
└────┬────┘ └────┬────┘ └────┬────┘
|
|
112
|
+
└────────────┼────────────┘
|
|
113
|
+
▼
|
|
114
|
+
路由 / 调度层(事件总线)
|
|
115
|
+
▼
|
|
116
|
+
┌───────────────────┐
|
|
117
|
+
│ Agent Harness │ ← LLM + 工具 + RAG + 工作流
|
|
118
|
+
│ + 16 个业务模块 │
|
|
119
|
+
└───────────────────┘
|
|
120
|
+
▼
|
|
121
|
+
安全基建(vault / audit)
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## 🗺 路线图
|
|
125
|
+
|
|
126
|
+
- ✅ **Phase 1 (v0.x)** — CLI 瑞士军刀:16 模块
|
|
127
|
+
- ✅ **Phase 2 (v1.x)** — AI 原生平台:Agent + RAG + 工作流 + 场景
|
|
128
|
+
- ✅ **Phase 3 (v2.x)** — 生态市场:插件市场 + 评分 + 说明
|
|
129
|
+
- ⬜ **Phase 4 (v3.0)** — 开放平台:远程市场 / 配置云同步 / 团队审计 / SSO
|
|
130
|
+
- ⬜ **Phase 5 (v4.0+)** — 开发者终端 OS
|
|
131
|
+
|
|
132
|
+
## 📄 License
|
|
133
|
+
|
|
134
|
+
MIT
|
|
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "devmate"
|
|
7
|
-
version = "1.0
|
|
8
|
-
description = "
|
|
7
|
+
version = "2.1.0"
|
|
8
|
+
description = "程序员终端瑞士军刀 + AI 原生平台——替代 5 个独立工具,一个 CLI 搞定"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [
|
|
11
11
|
{name = "DevMate Team", email = "devmate@example.com"}
|
|
@@ -33,6 +33,7 @@ dependencies = [
|
|
|
33
33
|
"alembic>=1.13",
|
|
34
34
|
"cryptography>=42.0",
|
|
35
35
|
"httpx>=0.27",
|
|
36
|
+
"psutil>=5.9",
|
|
36
37
|
]
|
|
37
38
|
|
|
38
39
|
[project.optional-dependencies]
|
|
@@ -43,6 +44,7 @@ web = [
|
|
|
43
44
|
"python-multipart>=0.0.9",
|
|
44
45
|
"python-jose[cryptography]>=3.3",
|
|
45
46
|
"passlib[bcrypt]>=1.7",
|
|
47
|
+
"starlette<0.50",
|
|
46
48
|
]
|
|
47
49
|
tui = [
|
|
48
50
|
"textual>=1.0",
|
|
@@ -50,6 +52,7 @@ tui = [
|
|
|
50
52
|
ai = [
|
|
51
53
|
"chromadb>=0.5",
|
|
52
54
|
"tiktoken>=0.7",
|
|
55
|
+
"sentence-transformers>=2.2", # 语义嵌入模型(可选)
|
|
53
56
|
]
|
|
54
57
|
dev = [
|
|
55
58
|
"pytest>=8.0",
|
|
@@ -82,8 +85,14 @@ notekeeper = "devmate_notekeeper"
|
|
|
82
85
|
monitor = "devmate_monitor"
|
|
83
86
|
reporter = "devmate_reporter"
|
|
84
87
|
scaffold = "devmate_scaffold"
|
|
88
|
+
audit = "devmate_audit"
|
|
89
|
+
plugin = "devmate_plugin_engine"
|
|
85
90
|
publisher = "devmate_publisher"
|
|
86
91
|
|
|
92
|
+
[tool.setuptools.packages.find]
|
|
93
|
+
where = ["src"]
|
|
94
|
+
include = ["devmate*", "devmate_*"]
|
|
95
|
+
|
|
87
96
|
[tool.ruff]
|
|
88
97
|
line-length = 100
|
|
89
98
|
target-version = "py311"
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"""
|
|
2
|
+
devmate.ai_config — 统一 AI 配置
|
|
3
|
+
|
|
4
|
+
管理所有 AI 相关配置:向量化模型、对话模型、API Key、RAG 设置等。
|
|
5
|
+
所有配置存储在 ~/.devmate/ai_config.json 中。
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import json
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
from devmate.bus.command import CommandResult
|
|
12
|
+
|
|
13
|
+
CONFIG_FILE = Path.home() / ".devmate" / "ai_config.json"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# ── 默认配置 ──────────────────────────────────────
|
|
17
|
+
|
|
18
|
+
DEFAULT_CONFIG = {
|
|
19
|
+
# 嵌入/向量化模型
|
|
20
|
+
"embedding": {
|
|
21
|
+
"model": "hash", # hash / sentence-transformers / openai / ollama
|
|
22
|
+
"ollama_url": "http://127.0.0.1:11434",
|
|
23
|
+
"openai_key": "", # 可选,不设置则从 vault 读取
|
|
24
|
+
},
|
|
25
|
+
# 对话模型
|
|
26
|
+
"chat": {
|
|
27
|
+
"default_provider": "default",
|
|
28
|
+
"routing": True, # 是否启用智能路由
|
|
29
|
+
"ollama_url": "http://127.0.0.1:11434",
|
|
30
|
+
},
|
|
31
|
+
# RAG 检索
|
|
32
|
+
"rag": {
|
|
33
|
+
"top_k": 5, # 默认检索条数
|
|
34
|
+
"auto_index": False, # 笔记变更时自动索引
|
|
35
|
+
},
|
|
36
|
+
# Agent
|
|
37
|
+
"agent": {
|
|
38
|
+
"max_steps": 10, # 最大 ReAct 循环步数
|
|
39
|
+
"debug": False, # 是否启用调试模式
|
|
40
|
+
"system_prompt": "", # 自定义系统提示词
|
|
41
|
+
},
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _load() -> dict:
|
|
46
|
+
"""加载全部配置"""
|
|
47
|
+
if not CONFIG_FILE.exists():
|
|
48
|
+
return DEFAULT_CONFIG.copy()
|
|
49
|
+
try:
|
|
50
|
+
data = json.loads(CONFIG_FILE.read_text())
|
|
51
|
+
# 合并默认值,确保新字段有默认值
|
|
52
|
+
merged = DEFAULT_CONFIG.copy()
|
|
53
|
+
for section, values in data.items():
|
|
54
|
+
if section in merged and isinstance(merged[section], dict):
|
|
55
|
+
merged[section].update(values)
|
|
56
|
+
else:
|
|
57
|
+
merged[section] = values
|
|
58
|
+
return merged
|
|
59
|
+
except Exception:
|
|
60
|
+
return DEFAULT_CONFIG.copy()
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _save(config: dict):
|
|
64
|
+
CONFIG_FILE.parent.mkdir(parents=True, exist_ok=True)
|
|
65
|
+
CONFIG_FILE.write_text(json.dumps(config, indent=2, ensure_ascii=False))
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def get(section: str, key: str, default=None):
|
|
69
|
+
"""读取配置项"""
|
|
70
|
+
cfg = _load()
|
|
71
|
+
return cfg.get(section, {}).get(key, default)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
# ── 嵌入/向量化配置 ──────────────────────────────
|
|
75
|
+
|
|
76
|
+
def get_embedding_model() -> str:
|
|
77
|
+
return get("embedding", "model", "hash")
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def get_embedding_ollama_url() -> str:
|
|
81
|
+
return get("embedding", "ollama_url", "http://127.0.0.1:11434")
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def get_embedding_openai_key() -> str:
|
|
85
|
+
key = get("embedding", "openai_key", "")
|
|
86
|
+
if not key:
|
|
87
|
+
try:
|
|
88
|
+
from devmate.security.vault import vault as _vault
|
|
89
|
+
key = _vault.get("ai_provider_default", "devmate_default")
|
|
90
|
+
except Exception:
|
|
91
|
+
pass
|
|
92
|
+
return key
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
# ── 对话模型配置 ──────────────────────────────────
|
|
96
|
+
|
|
97
|
+
def get_chat_default_provider() -> str:
|
|
98
|
+
return get("chat", "default_provider", "default")
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def get_chat_routing_enabled() -> bool:
|
|
102
|
+
return get("chat", "routing", True)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
# ── RAG 配置 ──────────────────────────────────────
|
|
106
|
+
|
|
107
|
+
def get_rag_top_k() -> int:
|
|
108
|
+
return get("rag", "top_k", 5)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
# ── Agent 配置 ───────────────────────────────────
|
|
112
|
+
|
|
113
|
+
def get_agent_max_steps() -> int:
|
|
114
|
+
return get("agent", "max_steps", 10)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def get_agent_debug() -> bool:
|
|
118
|
+
return get("agent", "debug", False)
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
# ── 管理命令 ──────────────────────────────────────
|
|
122
|
+
|
|
123
|
+
def show() -> CommandResult:
|
|
124
|
+
"""显示全部配置"""
|
|
125
|
+
cfg = _load()
|
|
126
|
+
return CommandResult(success=True, data=cfg)
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def set_key(section: str, key: str, value) -> CommandResult:
|
|
130
|
+
"""设置配置项"""
|
|
131
|
+
cfg = _load()
|
|
132
|
+
if section not in cfg:
|
|
133
|
+
cfg[section] = {}
|
|
134
|
+
cfg[section][key] = value
|
|
135
|
+
_save(cfg)
|
|
136
|
+
return CommandResult(success=True, data={
|
|
137
|
+
"message": f"✅ 已设置: {section}.{key} = {value}",
|
|
138
|
+
"section": section, "key": key, "value": value,
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def set_dict(config_dict: dict) -> CommandResult:
|
|
143
|
+
"""批量设置(从 JSON 更新)"""
|
|
144
|
+
cfg = _load()
|
|
145
|
+
for section, values in config_dict.items():
|
|
146
|
+
if isinstance(values, dict):
|
|
147
|
+
if section not in cfg:
|
|
148
|
+
cfg[section] = {}
|
|
149
|
+
cfg[section].update(values)
|
|
150
|
+
else:
|
|
151
|
+
cfg[section] = values
|
|
152
|
+
_save(cfg)
|
|
153
|
+
return CommandResult(success=True, data={"message": "✅ 配置已更新"})
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def reset() -> CommandResult:
|
|
157
|
+
"""重置为默认配置"""
|
|
158
|
+
_save(DEFAULT_CONFIG.copy())
|
|
159
|
+
return CommandResult(success=True, data={"message": "✅ 配置已重置为默认值"})
|