add-coder 0.1.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/README.md +50 -0
- package/bin/add-coder.js +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +576 -0
- package/package.json +64 -0
- package/templates/adapters/claude/hooks/doc-format-guard.sh +17 -0
- package/templates/adapters/claude/hooks/notification.sh +9 -0
- package/templates/adapters/claude/hooks/permission-gate.sh +18 -0
- package/templates/adapters/claude/hooks/post-tool-failure.sh +10 -0
- package/templates/adapters/claude/hooks/post-tool-use.sh +18 -0
- package/templates/adapters/claude/hooks/pre-compact.sh +14 -0
- package/templates/adapters/claude/hooks/pre-tool-use.sh +28 -0
- package/templates/adapters/claude/hooks/prompt-submit.sh +16 -0
- package/templates/adapters/claude/hooks/review-checklist.sh +10 -0
- package/templates/adapters/claude/hooks/session-start.sh +23 -0
- package/templates/adapters/claude/hooks/stop-check.sh +10 -0
- package/templates/adapters/claude/hooks/subagent-guard.sh +15 -0
- package/templates/adapters/claude/mcp.json +13 -0
- package/templates/adapters/claude/settings.json +125 -0
- package/templates/adapters/qoder/hooks/doc-format-guard.sh +164 -0
- package/templates/adapters/qoder/hooks/lib/context-inject.sh +96 -0
- package/templates/adapters/qoder/hooks/lib/state-detect.sh +104 -0
- package/templates/adapters/qoder/hooks/lib/vocabulary.sh +49 -0
- package/templates/adapters/qoder/hooks/notification.sh +22 -0
- package/templates/adapters/qoder/hooks/permission-gate.sh +8 -0
- package/templates/adapters/qoder/hooks/post-tool-failure.sh +8 -0
- package/templates/adapters/qoder/hooks/post-tool-use.sh +20 -0
- package/templates/adapters/qoder/hooks/pre-compact.sh +12 -0
- package/templates/adapters/qoder/hooks/pre-tool-use.sh +77 -0
- package/templates/adapters/qoder/hooks/prompt-submit.sh +72 -0
- package/templates/adapters/qoder/hooks/review-checklist.sh +157 -0
- package/templates/adapters/qoder/hooks/session-start.sh +16 -0
- package/templates/adapters/qoder/hooks/stop-check.sh +71 -0
- package/templates/adapters/qoder/hooks/subagent-guard.sh +11 -0
- package/templates/adapters/qoder/mcp.json +13 -0
- package/templates/adapters/qoder/settings.json +125 -0
- package/templates/adapters/qoder/sync-policy.json +18 -0
- package/templates/adapters/vscode/extensions.json +5 -0
- package/templates/adapters/vscode/launch.json +16 -0
- package/templates/adapters/vscode/settings.json +16 -0
- package/templates/adapters/vscode/tasks.json +38 -0
- package/templates/core/agents/add-flow-guardian.md +276 -0
- package/templates/core/agents/add-orchestrator.md +217 -0
- package/templates/core/plans/2026-07/08/farm-agent-add-coder-npm-package-add-route-v1.md +323 -0
- package/templates/core/plans/2026-07/08/farm-agent-add-coder-npm-package-handoff-v1.md +678 -0
- package/templates/core/plans/2026-07/08/farm-agent-add-coder-npm-package-plan-v1.md +785 -0
- package/templates/core/prisma/add.prisma +34 -0
- package/templates/core/reports/REPORT-WORKFLOW.md +250 -0
- package/templates/core/reports/boundary-runtime-report.md +134 -0
- package/templates/core/reports/code-review-combined-report.md +227 -0
- package/templates/core/reports/code-review-fix-verification-report.md +505 -0
- package/templates/core/reports/code-review-suggestions.md +66 -0
- package/templates/core/reports/index.md +57 -0
- package/templates/core/reports/runtime-report/gateway.md +741 -0
- package/templates/core/rules/project_rules.md +905 -0
- package/templates/core/rules/theory-practice-map.toml +105 -0
- package/templates/core/scripts/mcp-server.ts +3492 -0
- package/templates/core/skills/add-paradigm/SKILL.md +1086 -0
- package/templates/core/skills/session-init/SKILL.md +215 -0
- package/templates/core/specs/farm-agent-add-coder-npm-package/checklist.md +125 -0
- package/templates/core/specs/farm-agent-add-coder-npm-package/spec.md +343 -0
- package/templates/core/specs/farm-agent-add-coder-npm-package/tasks.md +203 -0
- package/templates/core/templates/01-/346/236/266/346/236/204//343/200/212ADD/345/274/200/345/217/221/345/267/245/344/275/234/350/267/257/345/276/204/344/270/216/346/226/207/346/241/243/345/215/217/345/220/214/350/247/204/350/214/203/343/200/213.md +386 -0
- package/templates/core/templates/TERMINOLOGY.md +81 -0
- package/templates/core/templates/add-route-template-heavyweight.md +288 -0
- package/templates/core/templates/add-route-template.md +242 -0
- package/templates/core/templates/add-route-template.schema.json +35 -0
- package/templates/core/templates/checklist-template.md +72 -0
- package/templates/core/templates/checklist-template.schema.json +20 -0
- package/templates/core/templates/fix-verification-template.md +132 -0
- package/templates/core/templates/fix-verification-template.schema.json +54 -0
- package/templates/core/templates/handoff-multi-round-template.md +295 -0
- package/templates/core/templates/handoff-multi-round.schema.json +48 -0
- package/templates/core/templates/handoff-single-round-template.md +145 -0
- package/templates/core/templates/handoff-single-round.schema.json +92 -0
- package/templates/core/templates/index.md +60 -0
- package/templates/core/templates/report-template.md +126 -0
- package/templates/core/templates/report-template.schema.json +69 -0
- package/templates/core/templates/review-implementation-template.md +66 -0
- package/templates/core/templates/review-implementation-template.schema.json +58 -0
- package/templates/core/templates/review-runtime-template.md +73 -0
- package/templates/core/templates/review-runtime-template.schema.json +47 -0
- package/templates/core/templates/review-template.md +37 -0
- package/templates/core/templates/review-template.schema.json +42 -0
- package/templates/core/templates/runtime-report-template.md +73 -0
- package/templates/core/templates/runtime-report-template.schema.json +48 -0
- package/templates/core/templates/simple-plan-template.md +166 -0
- package/templates/core/templates/simple-plan-template.schema.json +109 -0
- package/templates/core/templates/spec-template.md +22 -0
- package/templates/core/templates/spec-template.schema.json +41 -0
- package/templates/core/templates/standard-plan-template.md +96 -0
- package/templates/core/templates/standard-plan-template.schema.json +73 -0
- package/templates/core/templates/tasks-template.md +54 -0
- package/templates/core/templates/tasks-template.schema.json +43 -0
- package/templates/core/tools/README.md +361 -0
- package/templates/core/vocabulary/add-governance-vocabulary.md +370 -0
- package/templates/shared/hooks-lib/common.sh +22 -0
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
# {{projectName}} Code Review 修复验证对照报告
|
|
2
|
+
|
|
3
|
+
> 生成时间:2026-06-30(第十一次验证,修正 #20a)
|
|
4
|
+
> 源报告:`code-review-combined-report.md`(24 个问题)
|
|
5
|
+
> 验证方式:逐文件读取当前代码实际状态,精确对比
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 总览
|
|
10
|
+
|
|
11
|
+
| 状态 | 数量 | 占比 |
|
|
12
|
+
|------|------|------|
|
|
13
|
+
| ✅ 已修复 | 12 | 50.0% |
|
|
14
|
+
| ⚠️ 部分修复 | 2 | 8.3% |
|
|
15
|
+
| ❌ 仍存在 | 10 | 41.7% |
|
|
16
|
+
| **总计** | **24** | **100%** |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 逐条对照
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
### 一、安全风险(2 项)
|
|
25
|
+
|
|
26
|
+
#### #1 JWT 硬编码默认密钥 → ✅ 已修复
|
|
27
|
+
|
|
28
|
+
- **文件**: [src/lib/auth.ts:3-10](file://{{projectRoot}}/src/lib/auth.ts#L3-L10)
|
|
29
|
+
- **原问题**:
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
const JWT_SECRET = process.env.JWT_SECRET || "dev-secret-key"
|
|
33
|
+
```
|
|
34
|
+
生产环境漏配环境变量将使用可预测的弱密钥
|
|
35
|
+
|
|
36
|
+
- **当前代码**:
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
const JWT_SECRET = (() => {
|
|
40
|
+
const secret = process.env.JWT_SECRET
|
|
41
|
+
if (!secret) {
|
|
42
|
+
if (process.env.NODE_ENV === "production") {
|
|
43
|
+
throw new Error("FATAL: JWT_SECRET must be set in production environment")
|
|
44
|
+
}
|
|
45
|
+
return "dev-secret-key"
|
|
46
|
+
}
|
|
47
|
+
return secret
|
|
48
|
+
})()
|
|
49
|
+
```
|
|
50
|
+
生产环境缺失时直接拒绝启动,开发环境使用 `"dev-secret-key"`
|
|
51
|
+
|
|
52
|
+
- **判定**: ✅ 已修复
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
#### #2 QWeather JWT 签名是占位符 → ✅ 已修复
|
|
57
|
+
|
|
58
|
+
- **文件**: [src/lib/farm-server-client.ts:68-86](file://{{projectRoot}}/src/lib/farm-server-client.ts#L68-L86)
|
|
59
|
+
- **原问题**: EdDSA 签名写死为 `"PLACEHOLDER_SIGNATURE"`,生产环境会导致认证失败
|
|
60
|
+
- **当前代码**: 增加占位符检测逻辑,检测到占位符时:
|
|
61
|
+
1. 记录审计日志(`fsClientAudit` + `writeFsClientAudit`)
|
|
62
|
+
2. `throw new Error("QWeather EdDSA signing not implemented — cannot use placeholder in production")`
|
|
63
|
+
- **判定**: ✅ 已修复
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
### 二、代码重复 / 架构问题(7 项)
|
|
68
|
+
|
|
69
|
+
#### #3 LLM 模块重复(`llm.ts` vs `llm/index.ts`) → ✅ 已修复
|
|
70
|
+
|
|
71
|
+
- **原问题**: 旧版 `src/lib/llm.ts` 与新版 `src/lib/llm/index.ts` 并存,旧文件成死代码
|
|
72
|
+
- **当前状态**: `src/lib/llm.ts` 文件不存在,仅保留 `src/lib/llm/index.ts`
|
|
73
|
+
- **判定**: ✅ 已修复
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
#### #4 Chroma 客户端重复(`chroma.ts` vs `chroma-client.ts`) → ✅ 已修复
|
|
78
|
+
|
|
79
|
+
- **原问题**: 两个 ChromaDB 客户端实现,一个用 `chromadb` npm 包,一个用原生 HTTP fetch,功能重叠
|
|
80
|
+
- **当前状态**: `src/lib/chroma.ts` 已删除,仅保留 `src/lib/chroma-client.ts`
|
|
81
|
+
- **判定**: ✅ 已修复
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
#### #5 `extractTokenFromRequest` 重复定义 → ✅ 已修复
|
|
86
|
+
|
|
87
|
+
- **原问题**: 同一函数在 `auth.ts` 和 `auth-gateway.ts` 中各定义一次
|
|
88
|
+
- **当前代码** ([src/caijuehub/strategies/auth-gateway.ts:15](file://{{projectRoot}}/src/caijuehub/strategies/auth-gateway.ts#L15)):
|
|
89
|
+
|
|
90
|
+
```ts
|
|
91
|
+
import { getUserFromRequest, extractTokenFromRequest, type JWTPayload } from "@/lib/auth"
|
|
92
|
+
```
|
|
93
|
+
已改为从 `auth.ts` 导入,`auth-gateway.ts` 中不再有 `function extractTokenFromRequest` 的定义
|
|
94
|
+
|
|
95
|
+
- **判定**: ✅ 已修复
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
#### #6 8+ 个日志模块共享相同代码模式 → ❌ 仍存在
|
|
100
|
+
|
|
101
|
+
- **当前状态**: 8 个日志模块各自独立,每个都有重复的 `ensureLogDir()` / `writeToFile()` 实现:
|
|
102
|
+
|
|
103
|
+
| 文件 | ensureLogDir + writeToFile |
|
|
104
|
+
|------|---------------------------|
|
|
105
|
+
| `log/audit.ts`(新增,替代 agent-audit-logger.ts) | 重复 |
|
|
106
|
+
| `agent-gateway-dev-logger.ts` | 重复 |
|
|
107
|
+
| `audit-logger.ts` | 重复 |
|
|
108
|
+
| `chat-persistence-logger.ts` | 重复 |
|
|
109
|
+
| `chat-stats-logger.ts` | 重复 |
|
|
110
|
+
| `model-config-logger.ts` | 重复 |
|
|
111
|
+
| `stream-bus-logger.ts` | 重复 |
|
|
112
|
+
| `stream-chat-logger.ts` | 重复 |
|
|
113
|
+
|
|
114
|
+
共 67 处 `ensureLogDir`/`writeToFile` 调用分散在 8 个文件中,未提取公共模块。注意:`agent-audit-logger.ts` 已删除,其审计日志逻辑迁移至 `src/lib/log/audit.ts`,但 `ensureLogDir`/`writeToFile` 仍在 `audit.ts` 中重复实现
|
|
115
|
+
|
|
116
|
+
- **判定**: ❌ 仍存在
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
#### #7 `agent-gateway-dev-logger.ts` 与 `agent-gateway-audit.ts` 行为不一致 → ❌ 仍存在
|
|
121
|
+
|
|
122
|
+
- **文件**: [src/lib/agent-gateway-dev-logger.ts](file://{{projectRoot}}/src/lib/agent-gateway-dev-logger.ts) / [src/lib/agent-gateway-audit.ts](file://{{projectRoot}}/src/lib/agent-gateway-audit.ts)
|
|
123
|
+
- **当前状态**: 两个模块仍独立存在
|
|
124
|
+
- `agent-gateway-dev-logger.ts`:仅在 `NODE_ENV=development` 时输出,写文件日志
|
|
125
|
+
- `agent-gateway-audit.ts`:始终输出,写 AuditLog 表(已改用 `import { writeAuditLog } from "@/lib/log"`)
|
|
126
|
+
- 功能重叠但行为不一致,类型定义也各自独立
|
|
127
|
+
- **判定**: ❌ 仍存在
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
#### #8 `audit-log.ts` 内存存储审计日志 → ❌ 仍存在
|
|
132
|
+
|
|
133
|
+
- **文件**: [src/services/audit-log.ts:33](file://{{projectRoot}}/src/services/audit-log.ts#L33)
|
|
134
|
+
- **当前代码**:
|
|
135
|
+
|
|
136
|
+
```ts
|
|
137
|
+
const auditLogs: AuditLogEntry[] = []
|
|
138
|
+
|
|
139
|
+
export async function createAuditLog(entry) {
|
|
140
|
+
auditLogs.push(log)
|
|
141
|
+
// 仅在开发环境 console.log
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
仍只存内存数组,进程重启全部丢失。对比 `src/lib/log/audit.ts` 已用 Prisma DB 持久化
|
|
145
|
+
|
|
146
|
+
- **判定**: ❌ 仍存在
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
#### #9 `agents/index.ts` 职责过大 → ❌ 仍存在
|
|
151
|
+
|
|
152
|
+
- **文件**: [src/agents/index.ts](file://{{projectRoot}}/src/agents/index.ts)
|
|
153
|
+
- **当前状态**: 500 行(原报告 468 行),仍混含 StateGraph、ToolNode 包装器、审计包装器、`runAgent`/`streamAgent` 入口、Tracer 管理、`buildPartialState`,未拆分
|
|
154
|
+
- **判定**: ❌ 仍存在
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
### 三、健壮性 / 边界条件(5 项)
|
|
159
|
+
|
|
160
|
+
#### #10 LLM 单例竞态条件 → ❌ 仍存在
|
|
161
|
+
|
|
162
|
+
- **文件**: [src/lib/llm/index.ts:225-249](file://{{projectRoot}}/src/lib/llm/index.ts#L225-L249)
|
|
163
|
+
- **当前代码**:
|
|
164
|
+
|
|
165
|
+
```ts
|
|
166
|
+
export function setLLMConfig(config) {
|
|
167
|
+
runtimeConfigOverride = { ... }
|
|
168
|
+
resetLLM() // 将 llmInstance 置为 null
|
|
169
|
+
// ...
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
并发请求携带不同 `modelConfig` 时,A 请求的 `resetLLM()` 可能影响 B 请求正在使用的 `llmInstance`,竞态风险未消除
|
|
173
|
+
|
|
174
|
+
- **判定**: ❌ 仍存在
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
#### #11 `activeTracers` Map 潜在内存泄漏 → ✅ 已修复
|
|
179
|
+
|
|
180
|
+
- **文件**: [src/agents/index.ts:239-257](file://{{projectRoot}}/src/agents/index.ts#L239-L257)
|
|
181
|
+
- **当前代码**:
|
|
182
|
+
|
|
183
|
+
```ts
|
|
184
|
+
const tracerCreateTimes = new Map<string, number>()
|
|
185
|
+
const TRACER_TTL_MS = 30 * 60 * 1000 // 30 分钟 TTL
|
|
186
|
+
|
|
187
|
+
function cleanupExpiredTracers(): void {
|
|
188
|
+
const now = Date.now()
|
|
189
|
+
for (const [traceId, createTime] of tracerCreateTimes) {
|
|
190
|
+
if (now - createTime > TRACER_TTL_MS) {
|
|
191
|
+
activeTracers.delete(traceId)
|
|
192
|
+
tracerCreateTimes.delete(traceId)
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
`cleanupExpiredTracers()` 在 `startChainTrace()` 和 `wrapNodeWithAudit()` 中均被调用,Tracer 30 分钟后自动过期清理
|
|
198
|
+
|
|
199
|
+
- **判定**: ✅ 已修复
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
#### #12 审计日志静默吞错 → ✅ 已修复
|
|
204
|
+
|
|
205
|
+
- **原文件**: `src/lib/agent-audit-logger.ts`(已删除)
|
|
206
|
+
- **新文件**: [src/lib/log/audit.ts:193-237](file://{{projectRoot}}/src/lib/log/audit.ts#L193-L237)
|
|
207
|
+
- **原问题**: catch 只做 `console.error`,DB 不可用时所有审计记录静默丢失
|
|
208
|
+
- **当前代码**: 审计日志模块已重构为 `src/lib/log/` 目录结构:
|
|
209
|
+
|
|
210
|
+
```ts
|
|
211
|
+
} catch (error) {
|
|
212
|
+
auditLogWriteFailCount++
|
|
213
|
+
const isAlert = auditLogWriteFailCount % AUDIT_LOG_FAIL_ALERT_INTERVAL === 0 // 每 100 次
|
|
214
|
+
|
|
215
|
+
// 三通道输出:console + file(agentAudit 写 file)
|
|
216
|
+
agentAudit("AUDIT_LOG_WRITE_FAIL", ...)
|
|
217
|
+
|
|
218
|
+
// 外部告警通道:多渠道路由(企微 / 飞书 / 钉钉)
|
|
219
|
+
if (isAlert) {
|
|
220
|
+
void sendAlert({
|
|
221
|
+
title: "{{projectName}} 审计日志 DB 写入异常",
|
|
222
|
+
level: "error",
|
|
223
|
+
content: `**累计失败次数**:${auditLogWriteFailCount} 次\n...`,
|
|
224
|
+
})
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
已完整实现,且比原版更强:
|
|
230
|
+
- 失败计数器 `auditLogWriteFailCount`(可追踪丢失量)
|
|
231
|
+
- 每 100 次失败触发告警
|
|
232
|
+
- 三通道输出:console + file + agentAudit
|
|
233
|
+
- 多渠道路由告警:
|
|
234
|
+
- `src/lib/log/notify/control.ts` — 告警控制中心
|
|
235
|
+
- `src/lib/log/notify/channels/wecom.ts` — 企微群机器人
|
|
236
|
+
- `src/lib/log/notify/channels/feishu.ts` — 飞书群机器人
|
|
237
|
+
- `src/lib/log/notify/channels/dingtalk.ts` — 钉钉群机器人
|
|
238
|
+
- 旧 `wecom-notify.ts` 已删除,升级为多通道 `sendAlert`
|
|
239
|
+
|
|
240
|
+
- **判定**: ✅ 已修复
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
#### #13 缺少请求体运行时校验 → ❌ 仍存在
|
|
245
|
+
|
|
246
|
+
- **文件**: [src/app/api/agent/chat/route.ts:20](file://{{projectRoot}}/src/app/api/agent/chat/route.ts#L20)
|
|
247
|
+
- **当前代码**:
|
|
248
|
+
|
|
249
|
+
```ts
|
|
250
|
+
const body: ChatRequest & { intent?: string; userId?: string } = await request.json()
|
|
251
|
+
```
|
|
252
|
+
直接做类型断言,无 Zod 等运行时校验,格式错误的请求体会在深层抛出不友好的异常
|
|
253
|
+
|
|
254
|
+
- **判定**: ❌ 仍存在
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
#### #14 Model config 使用 `require()` 动态加载 → ❌ 仍存在
|
|
259
|
+
|
|
260
|
+
- **文件**: [src/lib/llm/index.ts:245-246](file://{{projectRoot}}/src/lib/llm/index.ts#L245-L246)
|
|
261
|
+
- **当前代码**:
|
|
262
|
+
|
|
263
|
+
```ts
|
|
264
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
265
|
+
const { modelConfigAudit } = require("@/lib/model-config-logger")
|
|
266
|
+
```
|
|
267
|
+
仍使用 `require()` 动态加载,ESM 环境下可能不稳定
|
|
268
|
+
|
|
269
|
+
- **判定**: ❌ 仍存在
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
### 四、代码整洁(7 项)
|
|
274
|
+
|
|
275
|
+
#### #15 大量 `as any` / `as unknown as` 类型断言 → ⚠️ 部分修复
|
|
276
|
+
|
|
277
|
+
- **原问题**: 约 119 处 `any` 使用
|
|
278
|
+
- **当前状态**: 66 处(-44.5%),分布在 28 个文件中
|
|
279
|
+
- **判定**: ⚠️ 部分修复 — 数量显著减少,但仍存在较多
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
#### #16 `knowledge-indexer.ts` 遗留调试日志 → ❌ 仍存在
|
|
284
|
+
|
|
285
|
+
- **文件**: [src/services/knowledge-indexer.ts:568-576](file://{{projectRoot}}/src/services/knowledge-indexer.ts#L568-L576)
|
|
286
|
+
- **当前代码**:
|
|
287
|
+
|
|
288
|
+
```ts
|
|
289
|
+
console.log(`[RAG-DEBUG] 开始搜索: query="..."`)
|
|
290
|
+
console.log(`[RAG-DEBUG] 嵌入配置: provider=...`)
|
|
291
|
+
console.log(`[RAG-DEBUG] 查询嵌入完成: 维度=...`)
|
|
292
|
+
```
|
|
293
|
+
`[RAG-DEBUG]` 前缀的 `console.log` 仍存在,生产环境也会输出
|
|
294
|
+
|
|
295
|
+
- **判定**: ❌ 仍存在
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
#### #17 未完成的 TODO → ❌ 仍存在
|
|
300
|
+
|
|
301
|
+
- **文件**: [src/agents/policy-update-loop.ts:149](file://{{projectRoot}}/src/agents/policy-update-loop.ts#L149)
|
|
302
|
+
- **当前代码**:
|
|
303
|
+
|
|
304
|
+
```ts
|
|
305
|
+
// TODO: 根据 pathMetrics 定制提示语——第 7 轮设计 reserve 但未实现
|
|
306
|
+
// if (pathMetrics.dominantAction === "relax_evidence_filter") { ... }
|
|
307
|
+
// else if (pathMetrics.dominantAction === "activate_expert") { ... }
|
|
308
|
+
const hintText = "信息可能存在缺口,建议扩大检索范围并交叉验证多源数据"
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
- **判定**: ❌ 仍存在
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
#### #18 `AgentAuditPhase` 类型过于庞大 → ✅ 已修复
|
|
316
|
+
|
|
317
|
+
- **原文件**: `src/lib/agent-audit-logger.ts`(已删除)
|
|
318
|
+
- **新文件**: [src/lib/log/phase.ts:12-211](file://{{projectRoot}}/src/lib/log/phase.ts#L12-L211)
|
|
319
|
+
- **当前状态**: 已从 117 个成员的扁平联合类型,拆分为 **11 个业务域子类型**:
|
|
320
|
+
|
|
321
|
+
| 子类型 | 业务域 | 成员数 |
|
|
322
|
+
|--------|--------|--------|
|
|
323
|
+
| `ChatPhase` | 会话生命周期 | ~16 |
|
|
324
|
+
| `NodePhase` | 图节点生命周期 | 7 |
|
|
325
|
+
| `RetrievalPhase` | 检索与 RAG | ~23 |
|
|
326
|
+
| `ReportPhase` | 报告生成 | 4 |
|
|
327
|
+
| `OSKernelPhase` | OS Kernel 管线 | 8 |
|
|
328
|
+
| `ReasoningPhase` | 推理节点 | 7 |
|
|
329
|
+
| `DisciplinePhase` | 知识分类体系 | 8 |
|
|
330
|
+
| `StreamingPhase` | 流式追踪 | 6 |
|
|
331
|
+
| `H5APIPhase` | H5 REST API | 14 |
|
|
332
|
+
| `InfraPhase` | 基础设施 | ~29 |
|
|
333
|
+
| `ACAPhase` | ACA Graph | 4 |
|
|
334
|
+
|
|
335
|
+
```ts
|
|
336
|
+
export type AgentAuditPhase =
|
|
337
|
+
| ChatPhase
|
|
338
|
+
| NodePhase
|
|
339
|
+
| RetrievalPhase
|
|
340
|
+
| ReportPhase
|
|
341
|
+
| OSKernelPhase
|
|
342
|
+
| ReasoningPhase
|
|
343
|
+
| DisciplinePhase
|
|
344
|
+
| StreamingPhase
|
|
345
|
+
| H5APIPhase
|
|
346
|
+
| InfraPhase
|
|
347
|
+
| ACAPhase
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
每个子类型不超过 20 个成员,新增 Phase 只需定位到对应域即可
|
|
351
|
+
|
|
352
|
+
- **判定**: ✅ 已修复
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
#### #19 脚本目录过于庞大(60+ 文件) → ❌ 仍存在
|
|
357
|
+
|
|
358
|
+
- **路径**: `scripts/`
|
|
359
|
+
- **当前状态**: 64 个文件,含一次性迁移脚本(`backfill-projectId.ts`、`fix-knowledge-data.js`、`restore-from-dump.js`、`restore-docs.js` 等)和 `.bat`/`.sh` 双份,未归档
|
|
360
|
+
- **判定**: ❌ 仍存在
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
#### #20 Prisma 多文件 Schema 注释与实际路径不一致 → ✅ 已修复
|
|
365
|
+
|
|
366
|
+
- **文件**: [prisma/schema.prisma:10-17](file://{{projectRoot}}/prisma/schema.prisma#L10-L17)
|
|
367
|
+
- **当前代码**:
|
|
368
|
+
|
|
369
|
+
```
|
|
370
|
+
// prisma/
|
|
371
|
+
// ├── schema.prisma — 入口(datasource + generator)
|
|
372
|
+
// ├── main.prisma — 现有模型(User/Chat/RAG/Knowledge/Seed 等)
|
|
373
|
+
// └── nongqing.prisma — 农情报告域(ProductionPlan/GrowthStage/FarmTask)
|
|
374
|
+
```
|
|
375
|
+
注释已修正为实际路径
|
|
376
|
+
|
|
377
|
+
- **判定**: ✅ 已修复
|
|
378
|
+
|
|
379
|
+
---
|
|
380
|
+
|
|
381
|
+
#### #21 项目中大量 `console.log` → ⚠️ 部分修复
|
|
382
|
+
|
|
383
|
+
- **原问题**: 842+ 处,散落在 100+ 个文件中
|
|
384
|
+
- **当前状态**: 410 处(-51.3%),分布在 87 个文件中
|
|
385
|
+
- **判定**: ⚠️ 部分修复 — 数量大幅减少,但仍存在大量直接使用
|
|
386
|
+
|
|
387
|
+
---
|
|
388
|
+
|
|
389
|
+
### 五、基础设施 / 运维(2 项)
|
|
390
|
+
|
|
391
|
+
#### #22 Chroma 端口未绑定 localhost → ✅ 已修复
|
|
392
|
+
|
|
393
|
+
- **文件**: [docker-compose.yml:50](file://{{projectRoot}}/docker-compose.yml#L50)
|
|
394
|
+
- **原问题**: Chroma 端口映射为 `"8000:8000"`,没有绑定到 `127.0.0.1`,公网部署时暴露在外
|
|
395
|
+
- **当前代码**:
|
|
396
|
+
|
|
397
|
+
```yaml
|
|
398
|
+
chromadb:
|
|
399
|
+
ports:
|
|
400
|
+
- "127.0.0.1:8000:8000"
|
|
401
|
+
```
|
|
402
|
+
已改为绑定 `127.0.0.1`,与 PostgreSQL(`"127.0.0.1:5433:5432"`)保持一致
|
|
403
|
+
|
|
404
|
+
- **判定**: ✅ 已修复
|
|
405
|
+
|
|
406
|
+
---
|
|
407
|
+
|
|
408
|
+
#### #23 Docker Compose 资源限制被注释 → ❌ 仍存在
|
|
409
|
+
|
|
410
|
+
- **文件**: [docker-compose.yml:30-36](file://{{projectRoot}}/docker-compose.yml#L30-L36) / [docker-compose.yml:60-67](file://{{projectRoot}}/docker-compose.yml#L60-L67)
|
|
411
|
+
- **当前代码**: PostgreSQL 和 Chroma 的 `deploy.resources` 全部仍被注释:
|
|
412
|
+
|
|
413
|
+
```yaml
|
|
414
|
+
# deploy:
|
|
415
|
+
# resources:
|
|
416
|
+
# limits:
|
|
417
|
+
# memory: 2G
|
|
418
|
+
# cpus: '1'
|
|
419
|
+
# reservations:
|
|
420
|
+
# memory: 512M
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
- **判定**: ❌ 仍存在
|
|
424
|
+
|
|
425
|
+
---
|
|
426
|
+
|
|
427
|
+
### 六、附加发现
|
|
428
|
+
|
|
429
|
+
#### #20a `prisma/dev.db` SQLite 文件 → ✅ 已修复
|
|
430
|
+
|
|
431
|
+
- **文件**: `prisma/dev.db`
|
|
432
|
+
- **原问题**: Schema 注释已修正为 PostgreSQL,但 `dev.db` SQLite 文件未清理,说明开发环境曾混用 SQLite 和 PostgreSQL
|
|
433
|
+
- **当前状态**: `prisma/dev.db` 文件已不存在,已清理
|
|
434
|
+
- **判定**: ✅ 已修复
|
|
435
|
+
|
|
436
|
+
---
|
|
437
|
+
|
|
438
|
+
## 状态汇总表
|
|
439
|
+
|
|
440
|
+
| # | 分类 | 问题 | 当前文件 | 状态 |
|
|
441
|
+
|---|------|------|------|------|
|
|
442
|
+
| 1 | 安全 | JWT 硬编码默认密钥 | auth.ts | ✅ 已修复 |
|
|
443
|
+
| 2 | 安全 | QWeather JWT 占位签名 | farm-server-client.ts | ✅ 已修复 |
|
|
444
|
+
| 3 | 代码重复 | LLM 模块重复 | llm.ts(已删除) | ✅ 已修复 |
|
|
445
|
+
| 4 | 代码重复 | Chroma 客户端重复 | chroma.ts(已删除) | ✅ 已修复 |
|
|
446
|
+
| 5 | 代码重复 | extractTokenFromRequest 重复 | auth-gateway.ts | ✅ 已修复 |
|
|
447
|
+
| 6 | 代码重复 | 8 个日志模块重复 ensureLogDir | 8 个 logger 文件 | ❌ 仍存在 |
|
|
448
|
+
| 7 | 代码重复 | gateway-dev-logger vs gateway-audit | 2 个 gateway 文件 | ❌ 仍存在 |
|
|
449
|
+
| 8 | 代码重复 | audit-log 内存存储 | services/audit-log.ts | ❌ 仍存在 |
|
|
450
|
+
| 9 | 代码重复 | agents/index.ts 职责过大 | agents/index.ts | ❌ 仍存在 |
|
|
451
|
+
| 10 | 健壮性 | LLM 单例竞态条件 | llm/index.ts | ❌ 仍存在 |
|
|
452
|
+
| 11 | 健壮性 | activeTracers 内存泄漏 | agents/index.ts | ✅ 已修复 |
|
|
453
|
+
| 12 | 健壮性 | 审计日志静默吞错 | log/audit.ts(重构后) | ✅ 已修复 |
|
|
454
|
+
| 13 | 健壮性 | 缺少请求体运行时校验 | agent/chat/route.ts | ❌ 仍存在 |
|
|
455
|
+
| 14 | 健壮性 | Model config require() | llm/index.ts | ❌ 仍存在 |
|
|
456
|
+
| 15 | 整洁 | 大量 as any 断言(119→66) | 28 个文件 | ⚠️ 部分修复 |
|
|
457
|
+
| 16 | 整洁 | knowledge-indexer 调试日志 | knowledge-indexer.ts | ❌ 仍存在 |
|
|
458
|
+
| 17 | 整洁 | 未完成 TODO | policy-update-loop.ts | ❌ 仍存在 |
|
|
459
|
+
| 18 | 整洁 | AgentAuditPhase 117 个成员 | log/phase.ts | ✅ 已修复 |
|
|
460
|
+
| 19 | 整洁 | scripts/ 64 个文件 | scripts/ | ❌ 仍存在 |
|
|
461
|
+
| 20 | 整洁 | Prisma schema 注释 | schema.prisma | ✅ 已修复 |
|
|
462
|
+
| 21 | 整洁 | console.log(842→410) | 87 个文件 | ⚠️ 部分修复 |
|
|
463
|
+
| 22 | 运维 | Chroma 端口未绑定 | docker-compose.yml | ✅ 已修复 |
|
|
464
|
+
| 23 | 运维 | Docker 资源限制注释 | docker-compose.yml | ❌ 仍存在 |
|
|
465
|
+
| 20a | 附加 | prisma/dev.db 未清理 | prisma/dev.db(已删除) | ✅ 已修复 |
|
|
466
|
+
|
|
467
|
+
---
|
|
468
|
+
|
|
469
|
+
## 本验证周期发现的重构变化
|
|
470
|
+
|
|
471
|
+
| 变化 | 旧文件 | 新文件 |
|
|
472
|
+
|------|--------|--------|
|
|
473
|
+
| 审计日志模块重构 | `src/lib/agent-audit-logger.ts`(已删除) | `src/lib/log/audit.ts` |
|
|
474
|
+
| 通知模块多通道升级 | `src/lib/wecom-notify.ts`(已删除) | `src/lib/log/notify/`(企微/飞书/钉钉) |
|
|
475
|
+
| Phase 类型独立 | `agent-audit-logger.ts` 内嵌 | `src/lib/log/phase.ts` |
|
|
476
|
+
| 统一入口 | 分散 import | `import { ... } from "@/lib/log"` |
|
|
477
|
+
|
|
478
|
+
---
|
|
479
|
+
|
|
480
|
+
## 修复优先级
|
|
481
|
+
|
|
482
|
+
| 优先级 | 问题 | 说明 |
|
|
483
|
+
|--------|------|------|
|
|
484
|
+
| ~~P0~~ | ~~#1, #2, #4, #12, #22~~ | ~~已修复~~ |
|
|
485
|
+
| P1 | #10 LLM 竞态条件 | 并发场景下 LLM 实例可能被意外重置 |
|
|
486
|
+
| P2 | #6, #7, #8, #9, #13, #14 | 架构重复、缺少校验、动态 require |
|
|
487
|
+
| P3 | #15, #16, #17, #19, #21, #23 | 技术债务、基础设施配置 |
|
|
488
|
+
|
|
489
|
+
---
|
|
490
|
+
|
|
491
|
+
## 修复趋势
|
|
492
|
+
|
|
493
|
+
| 维度 | 进展 |
|
|
494
|
+
|------|------|
|
|
495
|
+
| 安全 | JWT + QWeather 全部修复 ✅ |
|
|
496
|
+
| 网络暴露 | Chroma 端口已绑定 127.0.0.1 ✅ |
|
|
497
|
+
| 代码重复 | LLM 模块、Chroma 客户端、extractTokenFromRequest 已统一 ✅ |
|
|
498
|
+
| 内存泄漏 | activeTracers TTL 机制已上线 ✅ |
|
|
499
|
+
| 审计告警 | 三通道输出 + 多渠道路由(企微/飞书/钉钉)已上线 ✅ |
|
|
500
|
+
| 模块化 | 审计日志从单体文件重构为 `log/` 目录结构 ✅ |
|
|
501
|
+
| SQLite 清理 | `prisma/dev.db` 已删除,完全迁移至 PostgreSQL ✅ |
|
|
502
|
+
| 类型安全 | `as any` 断言 119→66(-44.5%)⚠️ |
|
|
503
|
+
| Phase 拆分 | AgentAuditPhase 117 成员 → 11 个业务域子类型 ✅ |
|
|
504
|
+
| 日志规范 | `console.log` 842→410(-51.3%)⚠️ |
|
|
505
|
+
| 核心遗留 | 日志模块 ensureLogDir 重复、LLM 竞态、审计持久化、Docker 资源限制 ❌ |
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# {{projectName}} 项目代码审查建议
|
|
2
|
+
|
|
3
|
+
## 1. 重复的 LLM 模块
|
|
4
|
+
|
|
5
|
+
`src/lib/llm.ts` 和 `src/lib/llm/index.ts` 两个文件同时存在,功能重叠。旧版 `llm.ts` 使用 `globalForLLM` 模式 + IIFE 的 `llmWithTools`,新版 `index.ts` 使用 `AuditedLLM` 包装类 + 延迟初始化。`agents/index.ts` 实际引用的是 `@/lib/llm/index`,旧文件成了死代码,建议删除避免混淆。
|
|
6
|
+
|
|
7
|
+
## 2. LLM 单例存在竞态条件
|
|
8
|
+
|
|
9
|
+
`src/lib/llm/index.ts` 中 `setLLMConfig()` 会调用 `resetLLM()` 将 `llmInstance` 置为 `null`,而 `getLLM()` 在 `null` 时会重建。如果两个并发请求携带不同的 `modelConfig`,A 请求的重置可能影响 B 请求正在使用的实例。建议改为按请求/线程隔离的 LLM 实例,或使用请求级缓存。
|
|
10
|
+
|
|
11
|
+
## 3. 大量 `as any` 类型断言
|
|
12
|
+
|
|
13
|
+
`src/agents/index.ts` 中存在大量 `as any`、`as unknown as` 类型断言,特别是消息类型转换(如 `state.messages as unknown as Array<Record<string, unknown>>`)、toolResults 赋值(`toolResults: toolResults as any`)等。这些绕过了 TypeScript 类型检查,建议逐步用类型守卫或 zod schema 替代。
|
|
14
|
+
|
|
15
|
+
## 4. QWeather JWT 签名是占位符
|
|
16
|
+
|
|
17
|
+
`src/lib/farm-server-client.ts` 第 71 行的 `createQWeatherJwt()` 函数中,EdDSA 签名写死了 `"PLACEHOLDER_SIGNATURE"`。注释说"实际迁移 co-agent 天气工具时会携带完整的 JWT 签名实现",说明这是未完成的功能,生产环境会导致认证失败。
|
|
18
|
+
|
|
19
|
+
## 5. 审计日志静默吞错
|
|
20
|
+
|
|
21
|
+
`src/lib/agent-audit-logger.ts` 中 `writeAuditLog()` 的 catch 块只做了 `console.error`,`ensureLogDir()` 的 catch 完全忽略。这意味着当 DB 不可用时,所有审计记录会静默丢失,没有告警机制。建议至少增加一个失败计数器或 metric 上报。
|
|
22
|
+
|
|
23
|
+
## 6. JWT 硬编码默认密钥
|
|
24
|
+
|
|
25
|
+
`src/lib/auth.ts` 第 4 行 `JWT_SECRET = process.env.JWT_SECRET || "dev-secret-key"`。在生产环境中如果忘记设置环境变量,会使用可预测的默认密钥,存在安全风险。建议在生产环境强制要求配置,缺失时直接拒绝启动。
|
|
26
|
+
|
|
27
|
+
## 7. `activeTracers` Map 潜在内存泄漏
|
|
28
|
+
|
|
29
|
+
`src/agents/index.ts` 第 239 行 `activeTracers` Map 的清理依赖 `endChainTrace()` 被调用。如果流式请求异常中断(客户端断开),`endChainTrace` 可能不会被调用,导致 Map 持续增长。建议增加 TTL 过期机制或定期清理。
|
|
30
|
+
|
|
31
|
+
## 8. 缺少请求体校验
|
|
32
|
+
|
|
33
|
+
`src/app/api/agent/chat/route.ts` 直接用 `await request.json()` 后做类型断言,没有用 Zod 或类似库做运行时校验。如果客户端发送了格式错误的请求体,错误会在深层抛出不友好的异常。
|
|
34
|
+
|
|
35
|
+
## 9. 脚本目录过于庞大(50+ 脚本)
|
|
36
|
+
|
|
37
|
+
`scripts/` 目录下有 50+ 个脚本,包含大量一次性迁移脚本(如 `backfill-projectId.ts`、`fix-knowledge-data.js`、`restore-from-dump.js`),还有 Windows `.bat` 和 Unix `.sh` 双份。建议将一次性脚本归档到单独目录,减少维护负担。
|
|
38
|
+
|
|
39
|
+
## 10. 大文件职责混杂
|
|
40
|
+
|
|
41
|
+
`src/agents/index.ts`(468 行)同时包含了:StateGraph 定义、ToolNode 包装器、审计包装器 `wrapNodeWithAudit`、`runAgent`/`streamAgent` 入口、Tracer 管理、`buildPartialState`。建议拆分为多个文件:
|
|
42
|
+
|
|
43
|
+
- `graph.ts` — 图定义
|
|
44
|
+
- `tool-node-wrapper.ts` — ToolNode 包装器
|
|
45
|
+
- `audit-wrapper.ts` — 审计包装器
|
|
46
|
+
- `agent-runner.ts` — runAgent/streamAgent 入口
|
|
47
|
+
|
|
48
|
+
## 11. Chroma 端口未绑定 localhost
|
|
49
|
+
|
|
50
|
+
`docker-compose.yml` 中 Chroma 端口映射为 `"8000:8000"`,没有绑定到 `127.0.0.1`,而 PostgreSQL 是 `"127.0.0.1:5433:5432"`。如果部署在公网机器上,Chroma 的 8000 端口会暴露在外,建议统一绑定到 `127.0.0.1`。
|
|
51
|
+
|
|
52
|
+
## 12. Docker Compose 中资源限制被注释
|
|
53
|
+
|
|
54
|
+
`docker-compose.yml` 中 PostgreSQL 和 Chroma 的 `deploy.resources` 全部被注释掉了。在生产环境中没有资源限制,某个服务 OOM 可能影响整个宿主机。建议根据实际负载启用 resource limits。
|
|
55
|
+
|
|
56
|
+
## 13. `pnpm-lock.yaml` 和 `package-lock.json` 同时存在
|
|
57
|
+
|
|
58
|
+
项目根目录同时存在 `pnpm-lock.yaml` 和 `package-lock.json`,说明可能在 npm 和 pnpm 之间切换过。建议统一使用一种包管理器,删除另一个 lock 文件。
|
|
59
|
+
|
|
60
|
+
## 14. Model config 切换使用 `require()` 动态加载
|
|
61
|
+
|
|
62
|
+
`src/lib/llm/index.ts` 第 246-247 行使用 `require("@/lib/model-config-logger")` 动态加载,这在 ESM 环境下可能不稳定。注释 `// Logger unavailable in server context` 也说明这有已知问题。建议改为静态 import 或明确的依赖注入。
|
|
63
|
+
|
|
64
|
+
## 15. Prisma 多文件 Schema 路径不一致
|
|
65
|
+
|
|
66
|
+
`schema.prisma` 注释说子文件在 `prisma/schema/` 目录下,但实际 `main.prisma` 和 `nongqing.prisma` 在 `prisma/` 根目录。而且 `prisma/` 下还有一个 `dev.db`(SQLite 文件),说明开发环境可能混用了 SQLite 和 PostgreSQL。
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Reports 总览
|
|
2
|
+
|
|
3
|
+
> 自动生成: 2026-07-01 11:41:22 | 共 6 份 Report | 下次更新: 每天 2:10 AM
|
|
4
|
+
>
|
|
5
|
+
> 扫描范围: `.qoder/reports/`(Plan Review 在 `.qoder/reviews/`,由 Plan 管线管理)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 快速导航
|
|
10
|
+
|
|
11
|
+
| 类型 | 说明 | 入口 |
|
|
12
|
+
|------|------|------|
|
|
13
|
+
| combined-report | 综合代码审查报告 | [code-review-combined-report.md](./code-review-combined-report.md) |
|
|
14
|
+
| fix-verify | 修复验证对照报告 | [code-review-fix-verification-report.md](./code-review-fix-verification-report.md) |
|
|
15
|
+
| suggestions | 审查建议(历史) | [code-review-suggestions.md](./code-review-suggestions.md) |
|
|
16
|
+
| runtime-report | 运行时报告(按子系统) | [{{projectName}}-runtime-report/](./{{projectName}}-runtime-report/) |
|
|
17
|
+
| boundary | Runtime Report ↔ 静态 Report 边界 | [boundary-runtime-report.md](./boundary-runtime-report.md) |
|
|
18
|
+
| workflow | Report 工作流 | [REPORT-WORKFLOW.md](./REPORT-WORKFLOW.md) |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 修复概览
|
|
23
|
+
|
|
24
|
+
| 状态 | 数量 |
|
|
25
|
+
|------|:----:|
|
|
26
|
+
| ✅ 已修复 | 34 |
|
|
27
|
+
| ⚠️ 部分修复 | 7 |
|
|
28
|
+
| ❌ 仍存在 | 34 |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Report 文件
|
|
33
|
+
|
|
34
|
+
| 日期 | 类型 | 文件 | 标题 |
|
|
35
|
+
|------|------|------|------|
|
|
36
|
+
| 2026-07-01 | `issue-draft` | [runtime-issue-20260622-01.md](./runtime-issue-20260622-01.md) | RUNTIME-20260622-01 |
|
|
37
|
+
| 2026-07-01 | `issue-draft` | [runtime-issue-20260624-01.md](./runtime-issue-20260624-01.md) | RUNTIME-20260624-01 |
|
|
38
|
+
| 2026-07-01 | `runtime-gateway` | [{{projectName}}-runtime-report/gateway.md](./{{projectName}}-runtime-report/gateway.md) | {{projectName}} 运行时报告 — gateway |
|
|
39
|
+
| 2026-06-29 | `combined-report` | [code-review-combined-report.md](./code-review-combined-report.md) | {{projectName}} 项目代码审查综合报告 |
|
|
40
|
+
| 2026-06-30 | `suggestions` | [code-review-suggestions.md](./code-review-suggestions.md) | {{projectName}} 项目代码审查建议 |
|
|
41
|
+
| 2026-06-30(第十一次验证,修正 #20a) | `fix-verify` | [code-review-fix-verification-report.md](./code-review-fix-verification-report.md) | {{projectName}} Code Review 修复验证对照报告 |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 运行时报告(按子系统分类)
|
|
46
|
+
|
|
47
|
+
> `{{projectName}}-runtime-report/{subsystem}.md`,每份报告对应一个子系统。
|
|
48
|
+
> 由各子系统自动追加,去重后每条 Finding 对应一条记录。
|
|
49
|
+
|
|
50
|
+
| 日期 | 子系统 | 文件 | 标题 |
|
|
51
|
+
|------|--------|------|------|
|
|
52
|
+
| 2026-07-01 | `gateway` | [{{projectName}}-runtime-report/gateway.md](./{{projectName}}-runtime-report/gateway.md) | {{projectName}} 运行时报告 — gateway |
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
*索引由 `scripts/gen-report-index.sh` 自动生成,勿手动编辑*
|
|
57
|
+
*最后更新: 2026-07-01 11:41:22*
|