范围:功能测试(两套 pytest 套件 + 真实启动冒烟测试)、性能基准、bug 修复、功能清单、改进建议。 上一次审计:docs/AUDIT_2026-06-05.md。
| 套件 | 修复前 | 修复后 |
|---|---|---|
tests/(agentpaas 平台层) |
244 通过 / 11 失败 / 1 跳过 | 255 通过 / 1 跳过 |
lambdagent/tests/(核心库) |
565 通过 / 1 失败 | 566 通过 |
真实启动冒烟测试(uvicorn 起服务、临时 data dir):/health、/setup/health、/.well-known/agent.json、POST /setup/bootstrap、agent 创建/列表、内置包自动安装、限流(未鉴权 10/min 后 429)全部通过。
AGENTPAAS_TESTING=0 被当成"测试模式开启"api/app.py 用 os.getenv("AGENTPAAS_TESTING") 真值判断,字符串 "0" 非空为真 → desktop 启动跳过 auto-bootstrap 和内置包安装,且限流被关闭。config.py 新增 is_testing() 单一事实来源(只认 1/true/yes),app.py 两处改用它。AGENTPAAS_TESTING=0 启动后 3 个内置研究包正常自动安装。~/.agentpaas/.env 泄漏进测试进程config.py import 时无条件加载开发者的 ~/.agentpaas/.env(PORT=8067、DATA_DIR)和 providers.json(真实 API key!),导致 test_config_defaults、test_set_data_dir_persists_and_requires_restart 在本机失败,且真实密钥进入测试环境。AGENTPAAS_TESTING 开启时跳过 _load_dotenv() 和 _load_providers_json()。network: truepermissions.network 管工具层网络如 WebFetch,不管 LLM provider 调用);参照包 top-journal-reviewer 同样走云端 LLM 却正确声明 false。network: false 并修正注释。fromconfig/compiler.py 捕获所有异常后静默回退到无状态旧 Lam —— provider 配错(key/模型名)的表象变成"agent 每轮失忆",极难排查。logging.warning(含 agent 名、模型名、异常)。pytest-asyncio(pyproject 已声明),解锁 8 个 test_authenticate.py 用例(audit #34 的鉴权链路覆盖此前全部没在跑)。4.0.0-unsupported 不合 PEP440,导致 pip install 一律崩溃;已改为 4.0.0+unsupported。| 路径 | p50 | p95 | 评价 |
|---|---|---|---|
| import lambdagent | 137ms | — | 正常 |
| import agentpaas.api.app | 440ms | — | 正常(FastAPI + 路由) |
| from_config(simple yml) | 0.5ms | 0.7ms | 优 |
| from_config(审稿67 react yml,含子智能体) | 5.7ms | 6.3ms | 优 |
| CompileCache 命中 | ~0ms | — | 优 |
| pipeline rule-gate 求值(has/contains/regex) | 0.06ms | 0.09ms | 优 |
| create_run_workspace | 0.6ms | 0.8ms | 优 |
| build_change_manifest(21 文件) | 58ms | 63ms | ⚠ 偏慢:开销在 git 子进程(rev-parse/status/diff),文件扫描本身 <1ms。每 run 一次可接受;多 stage pipeline 会乘 stage 数 |
| GET /health(进程内 TestClient) | 6.4ms | 7.2ms | 可接受(含中间件链) |
| estimate_cost(静态折叠) | 0.01ms | — | 优 |
| 真实服务吞吐(uvicorn 单 worker,50 并发×400 请求 /health) | — | — | 156 req/s,p50 315ms(排队延迟)。desktop 单用户场景足够 |
结论:无性能瓶颈级问题;编译、gate、成本折叠都在亚毫秒级。唯一值得优化的是 manifest 的 git 子进程开销(P2)。
_rate_store 加锁:app.py 限流字典多线程无保护,GIL 下大体安全但清理/插入存在竞态;加 threading.Lock 成本极低。agents.py 用正则 \[[A-Z0-9_-]*(ERROR|TIMEOUT)\] 从输出文本判 run 失败 —— LLM 输出里出现同样字样会误判。建议执行层返回结构化 status 而非靠文本。/tools/{tool}/confirm 端点存在但未接真正的 ToolGateway 确认机制,SEC-12/30 闭环缺最后一段。BUILTIN_PACK_IDS(包已通过 manifest 校验和 5-agent 编译测试,本次已修权限声明)。errors.py 的 .dict() → .model_dump(),on_event → lifespan(两处 DeprecationWarning,V3 会断)。.git 是否存在再起子进程,或缓存 repo-root 探测;多 stage pipeline 下每 stage 省约 50ms。pip install -e .[dev] 并对 "collected N" 数做下限断言,防测试静默蒸发。全部 ①–⑩ 已实现并回归(tests/ 255 通过 + lambdagent 566 通过 + webui tsc/build 0 错误):
| # | 实现 | 关键文件 |
|---|---|---|
| ① | _rate_store 加 threading.Lock,清理/检查/追加原子化 |
api/app.py |
| ② | 结构化失败判定:Context.provider_errors 通道(extend 共享引用、fork+merge_trace 汇回)→ ConversationLam 两处 ProviderError 捕获时 record_provider_error() → _execute_agent 透出 trace_info["provider_errors"] → 边界判定泛化 [XXX_ERROR] 正则须有结构化佐证才判失败([MCP_*] 纯文本通道单独保留)。LLM 正常输出以错误字样开头不再误判 |
lambdagent/core.py, conversation.py, agents.py |
| ③ | SEC-12/30 闭环:新建 engine/confirmations.py 登记处(threading.Event 阻塞等待、5 分钟超时拒绝、fail-closed);_execute_agent 注入 _confirm_callback(编译器原生支持)并推 confirm_required SSE 事件;traces.py 实现 GET/POST /{run_id}/confirm(带租户校验,body {"approved": bool}) |
engine/confirmations.py, agents.py, traces.py |
| ④ | research.multi-reviewer 加入 BUILTIN_PACK_IDS,desktop 启动自动安装 |
engine/builtin_packs.py |
| ⑤ | estimate_cost 加 ConversationLam 分支(懒 import 防循环依赖),按 model 计费。验证:simple term 0 → 800 tokens |
lambdagent/cost_grade.py |
| ⑥ | Chat.tsx 流结束无终态事件 / 网络异常时,拉 GET /traces/{run_id} 真实终态结束气泡(原来气泡永远 streaming) |
webui/src/pages/Chat.tsx |
| ⑦ | .dict()→model_dump();on_event("startup")→lifespan |
api/errors.py, api/app.py |
| ⑧ | manifest 先文件系统探测 .git 再起 git 子进程:非 git 目录 58ms→1.5ms |
engine/sandbox.py |
| ⑨ | CI 跑两套套件 + collected 数下限(tests/≥240、lambdagent≥540),防测试静默蒸发;补跑 lambdagent/tests/(此前 566 个测试不在 CI!) | .github/workflows/ci.yml |
| ⑩ | FIX-10 修复:原 _depth 形参在递归点从未传递(死代码)。改 thread-local 编译栈报完整链路;另加运行期懒编译子智能体的在飞栈环检测([SubAgent cycle detected: A → B → A]) |
lambdagent/fromconfig/compiler.py |
审计人:Claude(Fable 5)。第 1-5 节修复 + 第 6 节全部改进均已通过全量回归。