devassist-agent 1.0.0
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.
- package/LICENSE +21 -0
- package/README.md +467 -0
- package/bin/devassist.js +220 -0
- package/package.json +44 -0
- package/src/ai/adapter.js +464 -0
- package/src/ai/providers/claude.js +80 -0
- package/src/ai/providers/hunyuan.js +87 -0
- package/src/ai/providers/openai.js +74 -0
- package/src/ai/providers/qwen.js +81 -0
- package/src/cli/commands/ai.js +944 -0
- package/src/cli/commands/ask.js +79 -0
- package/src/cli/commands/backup.js +30 -0
- package/src/cli/commands/check.js +327 -0
- package/src/cli/commands/clean.js +130 -0
- package/src/cli/commands/comparison-report.js +326 -0
- package/src/cli/commands/convention.js +91 -0
- package/src/cli/commands/debt.js +49 -0
- package/src/cli/commands/deploy.js +88 -0
- package/src/cli/commands/diff.js +193 -0
- package/src/cli/commands/doctor.js +186 -0
- package/src/cli/commands/fix.js +195 -0
- package/src/cli/commands/init.js +431 -0
- package/src/cli/commands/inject.js +254 -0
- package/src/cli/commands/report.js +310 -0
- package/src/cli/commands/restore.js +78 -0
- package/src/cli/commands/schema.js +93 -0
- package/src/cli/commands/watch.js +212 -0
- package/src/cli/shared/code-context.js +51 -0
- package/src/cli/shared/config-loader.js +89 -0
- package/src/cli/shared/file-collector.js +116 -0
- package/src/cli/shared/inline-ignore.js +142 -0
- package/src/cli/shared/watch-list.js +281 -0
- package/src/core/event-bus.js +83 -0
- package/src/core/fsm.js +103 -0
- package/src/core/logger.js +54 -0
- package/src/core/rule-engine.js +117 -0
- package/src/index.js +64 -0
- package/src/modules/dev-time/arch-risk-assessor.js +250 -0
- package/src/modules/dev-time/code-quality-guard.js +1340 -0
- package/src/modules/dev-time/convention-store.js +201 -0
- package/src/modules/dev-time/impact-analyzer.js +292 -0
- package/src/modules/dev-time/pre-deploy-guard.js +284 -0
- package/src/modules/dev-time/schema-registry.js +284 -0
- package/src/modules/dev-time/tech-debt-tracker.js +225 -0
- package/src/modules/dev-time/version-manager.js +280 -0
- package/src/modules/runtime/channel-agent.js +404 -0
- package/src/modules/runtime/channel-middleware.js +316 -0
- package/src/modules/runtime/index.js +64 -0
- package/src/modules/runtime/infrastructure-guard.js +582 -0
- package/src/modules/runtime/notification-center.js +443 -0
- package/src/modules/runtime/schema-gatekeeper.js +664 -0
- package/src/modules/runtime/tool-registry.js +329 -0
- package/templates/ci/github-actions.yml +60 -0
- package/templates/ci/gitlab-ci.yml +30 -0
- package/templates/ci/pre-commit-hook.sh +18 -0
- package/templates/git-hooks/pre-commit +61 -0
- package/tests/run-all.js +434 -0
- package/tests/test-layer2.js +461 -0
- package/tests/test-new-rules.js +157 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 DevAssist Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,467 @@
|
|
|
1
|
+
# DevAssist Agent
|
|
2
|
+
|
|
3
|
+
**AI 辅助开发的质量守护智能体** — 从88条故障经验中提炼的开发辅助工具,防止代码腐化、局部优化、约定遗忘。
|
|
4
|
+
|
|
5
|
+
## 架构概览
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
9
|
+
│ DevAssist Agent │
|
|
10
|
+
├─────────────────┬──────────────────┬────────────────────────┤
|
|
11
|
+
│ Layer 1 │ Layer 2 │ Layer 3 │
|
|
12
|
+
│ 开发时检查 │ 运行时基础设施 │ AI 大模型接口 │
|
|
13
|
+
│ (CLI + hooks) │ (base code) │ (增强分析) │
|
|
14
|
+
├─────────────────┼──────────────────┼────────────────────────┤
|
|
15
|
+
│ ConventionStore │ ToolRegistry │ AI Adapter │
|
|
16
|
+
│ SchemaRegistry │ ChannelAgent │ ├─ 通义千问 (Qwen) │
|
|
17
|
+
│ ImpactAnalyzer │ ChannelMiddleware│ ├─ OpenAI (GPT) │
|
|
18
|
+
│ TechDebtTracker │ InfrastructureGuard│ ├─ Claude (Anthropic) │
|
|
19
|
+
│ CodeQualityGuard│ NotificationCenter│ └─ 混元 (Hunyuan) │
|
|
20
|
+
│ ArchRiskAssessor│ SchemaGatekeeper │ 规则引擎先跑 → AI增强 │
|
|
21
|
+
│ PreDeployGuard │ │ │
|
|
22
|
+
│ VersionManager │ │ │
|
|
23
|
+
└─────────────────┴──────────────────┴────────────────────────┘
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## 安装
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# 全局安装(推荐)
|
|
30
|
+
npm install -g devassist-agent
|
|
31
|
+
|
|
32
|
+
# 或项目内安装
|
|
33
|
+
npm install --save-dev devassist-agent
|
|
34
|
+
|
|
35
|
+
# 验证安装
|
|
36
|
+
devassist --version
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## .devassistignore
|
|
40
|
+
|
|
41
|
+
项目根目录可放置 `.devassistignore` 文件(格式类似 `.gitignore`),列出扫描时需跳过的目录和文件:
|
|
42
|
+
|
|
43
|
+
```gitignore
|
|
44
|
+
# 备份/归档目录
|
|
45
|
+
*_backup/
|
|
46
|
+
*_old/
|
|
47
|
+
|
|
48
|
+
# 依赖
|
|
49
|
+
node_modules/
|
|
50
|
+
|
|
51
|
+
# 构建输出
|
|
52
|
+
dist/
|
|
53
|
+
build/
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## 快速开始
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# 1. 初始化项目(创建 .devassist/ 配置 + git hooks)
|
|
60
|
+
devassist init
|
|
61
|
+
|
|
62
|
+
# 2. 初始化并安装运行时基础设施(base code)
|
|
63
|
+
devassist init --base-code
|
|
64
|
+
|
|
65
|
+
# 3. 扫描代码质量
|
|
66
|
+
devassist check
|
|
67
|
+
|
|
68
|
+
# 4. 带 AI 深度分析扫描
|
|
69
|
+
devassist check --ai
|
|
70
|
+
|
|
71
|
+
# 5. 部署前检查
|
|
72
|
+
devassist deploy --check
|
|
73
|
+
|
|
74
|
+
# 6. 查看技术债看板
|
|
75
|
+
devassist debt --scan
|
|
76
|
+
|
|
77
|
+
# 7. 注册约定
|
|
78
|
+
devassist convention add "前端禁止ES6+语法" --category code --severity block
|
|
79
|
+
|
|
80
|
+
# 8. 注册 DB Schema
|
|
81
|
+
devassist schema import schema.sql
|
|
82
|
+
|
|
83
|
+
# 9. 增量备份
|
|
84
|
+
devassist backup "发布前备份"
|
|
85
|
+
|
|
86
|
+
# 10. AI 问答
|
|
87
|
+
devassist ask "这个函数的圈复杂度是否过高?"
|
|
88
|
+
|
|
89
|
+
# 11. 配置 AI(通义千问)
|
|
90
|
+
devassist ai --setup --provider qwen --key sk-xxxx
|
|
91
|
+
devassist ai --test
|
|
92
|
+
|
|
93
|
+
# 12. 生成约定文件供 AI Agent 读取
|
|
94
|
+
devassist inject --format all
|
|
95
|
+
|
|
96
|
+
# 13. 环境诊断
|
|
97
|
+
devassist doctor
|
|
98
|
+
|
|
99
|
+
# 14. 清理旧报告和备份
|
|
100
|
+
devassist clean --days 30
|
|
101
|
+
|
|
102
|
+
# 15. 自动修复常见问题(预览模式)
|
|
103
|
+
devassist fix --all --dry-run
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## CLI 命令
|
|
107
|
+
|
|
108
|
+
| 命令 | 说明 | 示例 |
|
|
109
|
+
|------|------|------|
|
|
110
|
+
| `init` | 初始化项目 | `devassist init --base-code` |
|
|
111
|
+
| `check` | 代码质量扫描 | `devassist check --ai` |
|
|
112
|
+
| `watch` | 实时监控文件变更 | `devassist watch --ai` |
|
|
113
|
+
| `diff` | 只检查变更文件 (CI模式) | `devassist diff --staged` |
|
|
114
|
+
| `report` | 生成 HTML 检查报告 | `devassist report --open` |
|
|
115
|
+
| `deploy` | 部署前检查 | `devassist deploy --check` |
|
|
116
|
+
| `debt` | 技术债看板 | `devassist debt --scan` |
|
|
117
|
+
| `convention` | 约定管理 | `devassist convention list` |
|
|
118
|
+
| `schema` | Schema 管理 | `devassist schema import db.sql` |
|
|
119
|
+
| `backup` | 增量备份 | `devassist backup "v1.2"` |
|
|
120
|
+
| `restore` | 非破坏性恢复 | `devassist restore v-2026-07-22` |
|
|
121
|
+
| `ask` | AI 问答 | `devassist ask "分析这段代码"` |
|
|
122
|
+
| `ai` | AI 配置与测试 | `devassist ai --setup --provider qwen --key sk-xxx` |
|
|
123
|
+
| `inject` | 生成约定文件 | `devassist inject --format cursor` |
|
|
124
|
+
| `doctor` | 环境诊断 | `devassist doctor` |
|
|
125
|
+
| `clean` | 清理旧文件 | `devassist clean --days 30` |
|
|
126
|
+
| `fix` | 自动修复 | `devassist fix --all --dry-run` |
|
|
127
|
+
| `help` | 帮助 | `devassist help` |
|
|
128
|
+
|
|
129
|
+
## Layer 1:开发时检查模块
|
|
130
|
+
|
|
131
|
+
### ConventionStore(约定记忆库)
|
|
132
|
+
防止 AI 遗忘早期约定。所有约定持久化存储,每次检查自动匹配。
|
|
133
|
+
```json
|
|
134
|
+
// .devassist/conventions.json
|
|
135
|
+
{
|
|
136
|
+
"conventions": [
|
|
137
|
+
{
|
|
138
|
+
"id": "naming-list-key",
|
|
139
|
+
"rule": "列表数据必须使用 data.list,不用 data.items 或 data.records",
|
|
140
|
+
"forbid": "data\\.(items|records)\\s*[=:]",
|
|
141
|
+
"severity": "block"
|
|
142
|
+
}
|
|
143
|
+
]
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### ImpactAnalyzer(影响分析器)
|
|
148
|
+
防止 Agent 局部优化打补丁。修改文件前分析影响范围,检测大规模代码缩减。
|
|
149
|
+
- 依赖图分析:修改 app.js → 标记所有依赖文件
|
|
150
|
+
- 行数缩减阻断:2720行 → 106行 → 危险!阻断
|
|
151
|
+
- 补丁检测:前端兼容代码 → 建议改后端
|
|
152
|
+
|
|
153
|
+
### SchemaRegistry(Schema 注册中心)
|
|
154
|
+
防止代码库腐化。追踪 DB 表结构和 API 契约的版本变化。
|
|
155
|
+
- DDL 导入:35 张表结构自动解析
|
|
156
|
+
- 漂移检测:容器内加字段未同步源码 → 告警
|
|
157
|
+
- API 契约:注册了 data.list,返回 data.items → 阻断
|
|
158
|
+
|
|
159
|
+
### CodeQualityGuard(代码质量守护)
|
|
160
|
+
30 条规则,覆盖安全漏洞、性能反模式、代码缺陷三大维度:
|
|
161
|
+
|
|
162
|
+
**安全漏洞检测(8 条)**
|
|
163
|
+
- `sec-eval-usage` — eval/Function 代码注入 (block)
|
|
164
|
+
- `sec-sql-injection` — SQL 字符串拼接注入 (block)
|
|
165
|
+
- `sec-hardcoded-secrets` — 硬编码密钥/密码/Token (block)
|
|
166
|
+
- `sec-path-traversal` — 用户输入拼入文件路径 (warn)
|
|
167
|
+
- `sec-command-injection` — exec/spawn 字符串拼接 (block)
|
|
168
|
+
- `sec-insecure-crypto` — MD5/SHA1 弱哈希、Math.random 安全场景 (warn)
|
|
169
|
+
- `sec-xss-risk` — innerHTML/document.write XSS (block)
|
|
170
|
+
- `sec-proto-pollution` — Object.assign 原型链污染 (warn)
|
|
171
|
+
|
|
172
|
+
**性能反模式检测(6 条)**
|
|
173
|
+
- `perf-sync-io-in-async` — 异步函数中同步 I/O 阻塞事件循环 (warn)
|
|
174
|
+
- `perf-n-plus-1` — 循环内 await N+1 查询 (warn)
|
|
175
|
+
- `perf-string-concat-loop` — 循环内字符串拼接 O(n²) (info)
|
|
176
|
+
- `perf-regex-in-loop` — 循环内重复编译正则 (info)
|
|
177
|
+
- `perf-json-parse-unsafe` — JSON.parse 无 try/catch (warn)
|
|
178
|
+
- `perf-no-pagination` — 无分页全表查询 (warn)
|
|
179
|
+
|
|
180
|
+
**代码缺陷检测(16 条)**
|
|
181
|
+
- null 安全检查(深层属性链未判空)
|
|
182
|
+
- 时序竞态检测(DOMContentLoaded 前绑定事件)
|
|
183
|
+
- 重复声明检测(作用域感知)
|
|
184
|
+
- 文件过大检测(默认 800 行上限)
|
|
185
|
+
- ID/Class 混淆检测
|
|
186
|
+
- await 未被 try/catch 包裹
|
|
187
|
+
- **API 响应键名漂移检测**(data.list vs data.items vs data.records → BLOCK)
|
|
188
|
+
- **fetch 缺少错误处理**(无 .catch() 的 fetch 调用)
|
|
189
|
+
- **硬编码配置值**(端口/URL 硬编码)
|
|
190
|
+
- **console.log 残留**(生产代码调试日志)
|
|
191
|
+
- **async 调用缺少 await**(Promise 被丢弃)
|
|
192
|
+
- **事件监听无清理**(addEventListener 无 removeEventListener)
|
|
193
|
+
- **TODO/FIXME 堆积**(技术债务标记积累)
|
|
194
|
+
- **魔法数字**(硬编码数值常量)
|
|
195
|
+
- **错误响应格式不一致**(code+msg vs code+message vs error:string)
|
|
196
|
+
- **危险文件覆盖检测**(fs.writeFileSync 写入大段字符串)
|
|
197
|
+
|
|
198
|
+
### ArchRiskAssessor(架构风险评估)
|
|
199
|
+
- 过度设计预警(代码行数 vs 问题复杂度比值)
|
|
200
|
+
- 恢复循环检测(catch 块中的直接自调用)
|
|
201
|
+
- 远程代码注入风险检测
|
|
202
|
+
|
|
203
|
+
### PreDeployGuard(部署前检查)
|
|
204
|
+
- 端口冲突检测(防 supervisord 抢 8080)
|
|
205
|
+
- MIME 类型验证、路由规则验证
|
|
206
|
+
- 部署清单 checklist、Cache-Busting 检查
|
|
207
|
+
|
|
208
|
+
### TechDebtTracker(技术债追踪)
|
|
209
|
+
- 每周扫描复杂度、耦合度、重复率
|
|
210
|
+
- 自动排序"下一个该还的债"
|
|
211
|
+
|
|
212
|
+
### VersionManager(版本备份)
|
|
213
|
+
- 增量备份(只备份变更文件)
|
|
214
|
+
- 非破坏性恢复(恢复前预警将丢失的文件)
|
|
215
|
+
|
|
216
|
+
## Layer 2:运行时基础设施
|
|
217
|
+
|
|
218
|
+
安装方式:`devassist init --base-code`
|
|
219
|
+
|
|
220
|
+
### ToolRegistry(工具注册中心)
|
|
221
|
+
零升级架构核心。新功能以 tool 模块动态注册,无需重新编译。
|
|
222
|
+
```javascript
|
|
223
|
+
const { registry, MODULE_TYPES } = require('./lib');
|
|
224
|
+
|
|
225
|
+
await registry.register({
|
|
226
|
+
id: 'weather.query',
|
|
227
|
+
name: 'Weather Query',
|
|
228
|
+
version: '1.0.0',
|
|
229
|
+
type: MODULE_TYPES.DYNAMIC,
|
|
230
|
+
category: 'weather',
|
|
231
|
+
schema: {
|
|
232
|
+
input: { required: ['city'], properties: { city: 'string' } },
|
|
233
|
+
output: { required: ['temp'], properties: { temp: 'number' } },
|
|
234
|
+
},
|
|
235
|
+
handler: async (input) => ({ temp: 25, city: input.city }),
|
|
236
|
+
});
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### ChannelAgent(服务端协议处理器)
|
|
240
|
+
接收客户端协议消息,HMAC 签名验证,路由到 ToolRegistry。
|
|
241
|
+
```
|
|
242
|
+
客户端: { protocol, seq, action, timestamp, token, payload, signature }
|
|
243
|
+
↓
|
|
244
|
+
ChannelAgent.handleRequest()
|
|
245
|
+
↓
|
|
246
|
+
ActionRouter → ToolRegistry.invoke()
|
|
247
|
+
↓
|
|
248
|
+
服务端: { protocol, code, data, message, seq, timestamp }
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### ChannelMiddleware(中间件链)
|
|
252
|
+
Koa 风格的洋葱模型中间件:
|
|
253
|
+
- `errorHandler()` — 错误捕获
|
|
254
|
+
- `requestLogger()` — 请求日志
|
|
255
|
+
- `authGuard()` — JWT 认证
|
|
256
|
+
- `rateLimiter()` — 滑动窗口限流
|
|
257
|
+
- `schemaValidator()` — 输入校验
|
|
258
|
+
- `corsHandler()` — CORS 处理
|
|
259
|
+
|
|
260
|
+
### InfrastructureGuard(健康监控)
|
|
261
|
+
5 探针 + 自适应频率 + FSM 状态机:
|
|
262
|
+
- HttpProbe — HTTP 端点存活检查
|
|
263
|
+
- DatabaseProbe — 数据库连接检查
|
|
264
|
+
- MemoryProbe — 堆内存/RSS 监控
|
|
265
|
+
- DiskProbe — 磁盘空间检查
|
|
266
|
+
- ProcessProbe — 子进程存活检查
|
|
267
|
+
|
|
268
|
+
状态流转:`HEALTHY → DEGRADED → UNHEALTHY → RECOVERING → HEALTHY`
|
|
269
|
+
|
|
270
|
+
### NotificationCenter(通知中心)
|
|
271
|
+
4 通道 + 优先级路由 + 去重 + 限流:
|
|
272
|
+
- LogChannel — 控制台/文件日志
|
|
273
|
+
- EmailChannel — 邮件通知
|
|
274
|
+
- WebhookChannel — HTTP Webhook
|
|
275
|
+
- DingTalkChannel — 钉钉群机器人
|
|
276
|
+
|
|
277
|
+
### SchemaGatekeeper(运行时协议守门)
|
|
278
|
+
4 层防御,15 条规则:
|
|
279
|
+
1. **语法层**:JSON 可序列化、无循环引用、无 undefined
|
|
280
|
+
2. **Schema 层**:必填检查、类型匹配、长度/范围校验
|
|
281
|
+
3. **语义层**:响应信封检查、字段命名一致性
|
|
282
|
+
4. **安全层**:SQL 注入、XSS、路径穿越、命令注入、敏感字段泄露
|
|
283
|
+
|
|
284
|
+
## Layer 3:AI 大模型接口
|
|
285
|
+
|
|
286
|
+
**设计原则:规则引擎是主,AI 是增强层,不是替代层。**
|
|
287
|
+
|
|
288
|
+
```
|
|
289
|
+
规则引擎先跑(零延迟、可预测)
|
|
290
|
+
↓ 发现疑似问题
|
|
291
|
+
AI 深度分析(根因 + 修复建议 + 置信度)
|
|
292
|
+
↓ AI 不可达时
|
|
293
|
+
降级:仅返回规则引擎结果,标注 "AI 分析不可用"
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
支持 4 个 provider:
|
|
297
|
+
- 通义千问(Qwen / DashScope)
|
|
298
|
+
- OpenAI(GPT-4 / GPT-3.5)
|
|
299
|
+
- Claude(Anthropic)
|
|
300
|
+
- 腾讯混元(Hunyuan / TokenHub)
|
|
301
|
+
|
|
302
|
+
支持多引擎并行分析(N 引擎可扩展),对比不同 AI 的判断结果,不一致项自动标记"待观察"。
|
|
303
|
+
|
|
304
|
+
### AI 配置
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
# 方式一:命令行配置(推荐)
|
|
308
|
+
devassist ai --setup --provider qwen --key sk-xxxx
|
|
309
|
+
devassist ai --test # 测试连通性
|
|
310
|
+
devassist ai --status # 查看配置状态
|
|
311
|
+
|
|
312
|
+
# 方式二:环境变量
|
|
313
|
+
export DASHSCOPE_API_KEY=sk-xxxx # 通义千问
|
|
314
|
+
export HUNYUAN_API_KEY=sk-xxxx # 腾讯混元
|
|
315
|
+
|
|
316
|
+
# 方式三:编辑 .devassist/ai-config.json
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### AI 深度分析
|
|
320
|
+
|
|
321
|
+
```bash
|
|
322
|
+
# 扫描并对 warn/block 级别发现做 AI 根因分析
|
|
323
|
+
devassist check --ai
|
|
324
|
+
|
|
325
|
+
# 单独分析最近一次 check 的结果
|
|
326
|
+
devassist ai --analyze
|
|
327
|
+
|
|
328
|
+
# 向 AI 提问
|
|
329
|
+
devassist ask "为什么 API 返回 data.items 而不是 data.list?"
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
AI 返回结构化分析:根因、是否误报、修复建议、代码示例、置信度。
|
|
333
|
+
|
|
334
|
+
### 约定自动注入(Convention Injection)
|
|
335
|
+
|
|
336
|
+
核心差异化能力——让 AI Agent 在写代码时自动获取项目约定:
|
|
337
|
+
|
|
338
|
+
```bash
|
|
339
|
+
# 生成 .devassist/CONVENTIONS.md(Markdown 格式,AI Agent 自动发现)
|
|
340
|
+
devassist inject --format markdown
|
|
341
|
+
|
|
342
|
+
# 生成 .cursorrules(Cursor 读取)
|
|
343
|
+
devassist inject --format cursor
|
|
344
|
+
|
|
345
|
+
# 生成 .traerules(Trae 读取)
|
|
346
|
+
devassist inject --format trae
|
|
347
|
+
|
|
348
|
+
# 一次性生成所有格式
|
|
349
|
+
devassist inject --format all
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
工作原理:AI Agent(Trae/WorkBuddy/Cursor)在开始写代码前会读取项目根目录的规则文件。`inject` 命令将 `.devassist/conventions.json` 中的约定同步到这些文件,确保 AI 始终知道项目约定。每次更新约定后重新运行 `inject` 即可同步。
|
|
353
|
+
|
|
354
|
+
## 测试
|
|
355
|
+
|
|
356
|
+
```bash
|
|
357
|
+
# 全部测试(59 项)
|
|
358
|
+
node tests/run-all.js
|
|
359
|
+
|
|
360
|
+
# Layer 2 集成测试(69 项)
|
|
361
|
+
node tests/test-layer2.js
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
**总计:128 项测试,全部通过。**
|
|
365
|
+
|
|
366
|
+
## 项目结构
|
|
367
|
+
|
|
368
|
+
```
|
|
369
|
+
devassist/
|
|
370
|
+
├── bin/
|
|
371
|
+
│ └── devassist.js # CLI 入口
|
|
372
|
+
├── src/
|
|
373
|
+
│ ├── core/ # 核心引擎
|
|
374
|
+
│ │ ├── event-bus.js # 事件总线
|
|
375
|
+
│ │ ├── fsm.js # 状态机(含无限循环保护)
|
|
376
|
+
│ │ ├── rule-engine.js # 规则引擎
|
|
377
|
+
│ │ └── logger.js # 结构化日志
|
|
378
|
+
│ ├── modules/
|
|
379
|
+
│ │ ├── dev-time/ # Layer 1: 开发时模块
|
|
380
|
+
│ │ │ ├── convention-store.js
|
|
381
|
+
│ │ │ ├── schema-registry.js
|
|
382
|
+
│ │ │ ├── impact-analyzer.js
|
|
383
|
+
│ │ │ ├── tech-debt-tracker.js
|
|
384
|
+
│ │ │ ├── code-quality-guard.js
|
|
385
|
+
│ │ │ ├── arch-risk-assessor.js
|
|
386
|
+
│ │ │ ├── pre-deploy-guard.js
|
|
387
|
+
│ │ │ └── version-manager.js
|
|
388
|
+
│ │ └── runtime/ # Layer 2: 运行时模块
|
|
389
|
+
│ │ ├── tool-registry.js
|
|
390
|
+
│ │ ├── channel-agent.js
|
|
391
|
+
│ │ ├── channel-middleware.js
|
|
392
|
+
│ │ ├── infrastructure-guard.js
|
|
393
|
+
│ │ ├── notification-center.js
|
|
394
|
+
│ │ ├── schema-gatekeeper.js
|
|
395
|
+
│ │ └── index.js
|
|
396
|
+
│ ├── ai/ # Layer 3: AI 接口
|
|
397
|
+
│ │ ├── adapter.js # 统一适配器
|
|
398
|
+
│ │ └── providers/
|
|
399
|
+
│ │ ├── qwen.js # 通义千问
|
|
400
|
+
│ │ ├── openai.js # OpenAI
|
|
401
|
+
│ │ ├── claude.js # Claude
|
|
402
|
+
│ │ └── hunyuan.js # 腾讯混元
|
|
403
|
+
│ ├── cli/
|
|
404
|
+
│ │ ├── commands/ # CLI 命令
|
|
405
|
+
│ │ │ ├── init.js
|
|
406
|
+
│ │ │ ├── check.js
|
|
407
|
+
│ │ │ ├── watch.js # 实时监控
|
|
408
|
+
│ │ │ ├── diff.js # CI 增量检查
|
|
409
|
+
│ │ │ ├── report.js # HTML 报告
|
|
410
|
+
│ │ │ ├── deploy.js
|
|
411
|
+
│ │ │ ├── debt.js
|
|
412
|
+
│ │ │ ├── convention.js
|
|
413
|
+
│ │ │ ├── schema.js
|
|
414
|
+
│ │ │ ├── backup.js
|
|
415
|
+
│ │ │ ├── restore.js
|
|
416
|
+
│ │ │ ├── ask.js
|
|
417
|
+
│ │ │ ├── ai.js # AI 配置与测试
|
|
418
|
+
│ │ │ ├── inject.js # 约定注入(生成 .cursorrules 等)
|
|
419
|
+
│ │ │ ├── doctor.js # 环境诊断
|
|
420
|
+
│ │ │ ├── clean.js # 清理旧文件
|
|
421
|
+
│ │ │ └── fix.js # 自动修复
|
|
422
|
+
│ │ └── shared/ # 公共模块
|
|
423
|
+
│ │ ├── file-collector.js # 文件收集(collectFiles/walkDir)
|
|
424
|
+
│ │ ├── config-loader.js # 项目配置加载(.devassist/config.json)
|
|
425
|
+
│ │ ├── inline-ignore.js # 行内忽略注释处理
|
|
426
|
+
│ │ └── code-context.js # AI 代码上下文提取
|
|
427
|
+
│ └── index.js # 统一导出
|
|
428
|
+
├── templates/
|
|
429
|
+
│ ├── git-hooks/
|
|
430
|
+
│ │ └── pre-commit # Git pre-commit hook
|
|
431
|
+
│ └── ci/
|
|
432
|
+
│ ├── github-actions.yml # GitHub Actions CI 模板
|
|
433
|
+
│ ├── gitlab-ci.yml # GitLab CI 模板
|
|
434
|
+
│ └── pre-commit-hook.sh # pre-commit hook 模板
|
|
435
|
+
├── tests/
|
|
436
|
+
│ ├── run-all.js # Layer 1 测试
|
|
437
|
+
│ └── test-layer2.js # Layer 2 集成测试
|
|
438
|
+
└── package.json
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
## 防御故障覆盖
|
|
442
|
+
|
|
443
|
+
基于小麦AI助手 88 条故障报告的分析:
|
|
444
|
+
|
|
445
|
+
| 痛点 | 命中故障 | 防御模块 |
|
|
446
|
+
|------|---------|---------|
|
|
447
|
+
| 局部优化 | 41/88 | ImpactAnalyzer |
|
|
448
|
+
| 代码库腐化 | 35/88 | SchemaRegistry + ConventionStore |
|
|
449
|
+
| 记忆碎片化 | 32/88 | ConventionStore (ADR) |
|
|
450
|
+
| 重构成本高 | 23/88 | TechDebtTracker |
|
|
451
|
+
| 代码缺陷 | 33% | CodeQualityGuard |
|
|
452
|
+
| 部署配置 | 27% | PreDeployGuard |
|
|
453
|
+
| 架构设计 | 20% | ArchRiskAssessor |
|
|
454
|
+
| 文件管理 | 13% | VersionManager |
|
|
455
|
+
|
|
456
|
+
**对 10 个严重故障防御覆盖率:100%**
|
|
457
|
+
|
|
458
|
+
## 零外部依赖
|
|
459
|
+
|
|
460
|
+
整个项目不依赖任何 npm 包,仅使用 Node.js 内置模块(`crypto`, `os`, `fs`, `path`, `http`)。这意味着:
|
|
461
|
+
- 安装即用,无需 `npm install`
|
|
462
|
+
- 不会引入安全漏洞
|
|
463
|
+
- 不会因依赖更新而破坏
|
|
464
|
+
|
|
465
|
+
## License
|
|
466
|
+
|
|
467
|
+
MIT
|