# LambdAgentPaaS 全面审计报告（2026-06-11）

> 范围：功能测试（两套 pytest 套件 + 真实启动冒烟测试）、性能基准、bug 修复、功能清单、改进建议。
> 上一次审计：docs/AUDIT_2026-06-05.md。

---

## 1. 测试结果

| 套件 | 修复前 | 修复后 |
|---|---|---|
| `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）全部通过。

## 2. 本次修复的 bug（已验证）

### BUG-A（真实产品 bug）`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 个内置研究包正常自动安装。

### BUG-B（测试隔离 bug）机器级 `~/.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()`。

### BUG-C（内置包政策违规）multi-reviewer 包声明 `network: true`
- 内置研究包政策为 local-first（`permissions.network` 管工具层网络如 WebFetch，不管 LLM provider 调用）；参照包 top-journal-reviewer 同样走云端 LLM 却正确声明 `false`。
- 修复：manifest 改为 `network: false` 并修正注释。

### BUG-D（静默回退）ConversationLam 创建失败无任何日志
- `fromconfig/compiler.py` 捕获所有异常后静默回退到无状态旧 Lam —— provider 配错（key/模型名）的表象变成"agent 每轮失忆"，极难排查。
- 修复：回退前打 `logging.warning`（含 agent 名、模型名、异常）。

### BUG-E（测试过时）persona 测试期望 🐑，源码自 release-v1 起为 lambda 🐂
- 修复：更新断言为 🐂。

### 环境修复（非代码）
- 安装缺失的 dev 依赖 `pytest-asyncio`（pyproject 已声明），解锁 8 个 `test_authenticate.py` 用例（audit #34 的鉴权链路覆盖此前全部没在跑）。
- 顺带修好本机 pip：anaconda 的 pyodbc 元数据版本号 `4.0.0-unsupported` 不合 PEP440，导致 `pip install` 一律崩溃；已改为 `4.0.0+unsupported`。

## 3. 性能基准（2.6 GHz Intel Mac，单进程）

| 路径 | 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）。

## 4. 已实现功能清单（审计盘点）

### lambdagent 核心库（566 测试）
- **演算内核**：6 个核心项（Lam/Compose/If/Loop/Pair+Fst+Snd/Tool）+ 多智能体构造（GroupChat/AsyncPar/Handoff/Route/Guard/Memory）
- **类型系统**：LamType + Json Schema 结构类型 + 子类型（T-Compose 编译期组合检查）
- **效应系统**：PURE/LLM/IO/STATE 格 + serial/parallel/iterate 组合 + 自动推断（DESIGN-07 全构造覆盖）
- **成本分级**：CostGrade（probability/tokens/latency/money/p_fatal）+ grade_serial/parallel/iterate/guard + validate_cost 交叉验证（DESIGN-08）
- **Provider**：Anthropic、OpenAI、Ollama、DashScope/Qwen、DeepSeek、Moonshot、Zhipu、Claude Code（8 家）；统一 chat_typed 接口、usage 累积、CJK 字符上限兜底
- **ConversationLam**：带窗口管理的有状态会话（80k token / 200k 字符双上限）
- **fromconfig 编译器**：simple/react/chain/router/parallel + guard/memory/subAgents/hooks/MCP 策略；安全特性 S04/S05/S16/S17/SEC-02
- **内置工具**：11 模块（code/file/knowledge/web/qa/shell/wiki/task/terminal/permission/registry），ValidatedTool 参数别名规范化

### agentpaas 平台层（255 测试）
- **API**：约 70 个端点 —— agent CRUD+版本+回滚、同步/SSE 流式执行、run 取消、workspace 浏览/下载、三层记忆（core/recall/archival）、知识库（索引/wiki/BM25 搜索/流式 QA）、AgentPack 安装/卸载、provider 管理、模板、租户/配额/计费、trace/工具审计、静态分析（lint/type-check/cost）、A2A 发现
- **引擎**：sandbox（资源限制+run workspace 永久留存+manifest 修改清单）、pipeline（产物 Gate：受限规则 DSL + LLM judge + write-ahead 状态 + 契约校验）、instance（模板/实例分离）、queue（内存/Redis）、retry+熔断、compile cache、三层记忆存储
- **安全**：PBKDF2 API key、租户隔离、RBAC、滑动窗口限流（/cancel 永不限流）、路径穿越防护、CORS 白名单、安全响应头、loopback-gated setup
- **部署模式**：desktop（自动 bootstrap + 内置包）/ lab / paas 三模式
- **WebUI**：12 页面（向导/仪表盘/agent 管理/聊天含 ReAct 可视化与 Lambda Trace/知识库/包管理/provider 配置）

## 5. 改进建议（带优先级，待确认后实现）

### P0（正确性/安全，建议立即做）
1. **`_rate_store` 加锁**：`app.py` 限流字典多线程无保护，GIL 下大体安全但清理/插入存在竞态；加 `threading.Lock` 成本极低。
2. **错误前缀判定改结构化**：`agents.py` 用正则 `\[[A-Z0-9_-]*(ERROR|TIMEOUT)\]` 从输出文本判 run 失败 —— LLM 输出里出现同样字样会误判。建议执行层返回结构化 status 而非靠文本。
3. **traces.py:76 的 HIGH-risk 工具确认 TODO**：`/tools/{tool}/confirm` 端点存在但未接真正的 ToolGateway 确认机制，SEC-12/30 闭环缺最后一段。

### P1（功能完整性）
4. **multi-reviewer 注册为内置包**：加进 `BUILTIN_PACK_IDS`（包已通过 manifest 校验和 5-agent 编译测试，本次已修权限声明）。
5. **estimate_cost 认识 ConversationLam**：pipeline 成本预估中 stage 主 agent 算 0（已知 v1.1 残留），cost soundness 论文叙事也需要这个补齐。
6. **孤儿 run 的 SSE 通知**：启动清扫只改 DB 状态，前端正在看的 run 不会收到终止事件；补一个 reaper → 前端的状态推送或前端轮询兜底。
7. **Pydantic v2 弃用清理**：`errors.py` 的 `.dict()` → `.model_dump()`，`on_event` → lifespan（两处 DeprecationWarning，V3 会断）。

### P2（性能/工程质量）
8. **build_change_manifest 跳过非 git 目录**：先快速判断 `.git` 是否存在再起子进程，或缓存 repo-root 探测；多 stage pipeline 下每 stage 省约 50ms。
9. **CI 加 dev 依赖检查**：本次 8 个鉴权测试因缺 pytest-asyncio 静默没跑——CI 里 `pip install -e .[dev]` 并对 "collected N" 数做下限断言，防测试静默蒸发。
10. **FIX-10 循环引用报错带路径**：子智能体循环检测只报深度超限，不报 A→B→C→A 链路。

### P3（产品方向，可后排）
11. **pipeline P2/P3 残留**：human gate 的 YIELD+resume 语义、崩溃孤儿确定性恢复、真 regex timeout。
12. **simple agent token=0**：跨 provider 既有限制，usage 透传补齐。

---

## 6. 改进项实现记录（用户确认 P0+P1+P2 后，同日完成）

全部 ①–⑩ 已实现并回归（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 节全部改进均已通过全量回归。*
