Details (original message): Final 0.1.0 test report: all 15 acceptance items achieved (squad engine integration, model-routing override chain, context observation); 44 automated tests + 15 live checks; refresh usage and implementation records.
13 KiB
13 KiB
Agent-System 测试报告(v0.1.0)
日期:2026-09-29(终版);对象:Dev 组合 942abc9(core c7ae99b / backend 0a69a56 / frontend 9b8572a + 生态 pin 含 agent-squad 5454f74;发布制品 sha256 4f6ac6bd…)。
范围:设计方案第 6 节验收表的逐项验证 + 单元/集成/端到端/真实运行四层证据。
复现环境:go1.27.1 linux/amd64、node v26.10.0;命令见 §5。
1. 测试总览
| 层 | 位置 | 数量 | 结果 |
|---|---|---|---|
| 契约一致性(Core 黄金样本) | Agent-System-Core go test ./... |
10 | 全部通过 |
| 后端单元+端到端 | Agent-System-Backend go test ./...(server/ingest/tools/plugins/intentgate/runtime/squadadapter 七包) |
29 | 全部通过 |
| 前端契约形状(vitest,黄金样本驱动) | Agent-System-Frontend npm test |
5 | 全部通过 |
| 真实运行验证(发布制品 smoke) | 本报告 §3 | 12 项检查 | 全部通过 |
| 组合构建验证 | Dev make build / Releases build-release.sh 0.1.0 |
— | 通过(单二进制 13MB 静态链接;sha256 校验一致) |
合计 44 项自动化测试 + 15 项 live 检查(含发布制品上的意图转轨、Squad 编排全链路与上下文观测下发验证),全绿。
2. 自动化测试明细
2.1 Core(契约仓)
| 用例 | 验证点 |
|---|---|
| TestGoldenDomain/Events/HITL/ProfileAndTools/Ingest/Plugin | 领域模型/事件信封/HITL 卡片/画像/HTTP 工具/ParsedDocument/插件 manifest 的线格式与黄金样本逐字节一致(三态契约的权威侧) |
| TestToolPolicy | 三清单语义:* 允许、http.admin. 前缀拒绝优先于 *、http. 前缀需确认 |
| TestPlainText | ParsedDocument → 纯文本(标题/段落/表格) |
| TestSettingsMergeAndPath | 覆盖链深合并与点路径读取(含数值默认) |
2.2 Backend
| 用例 | 验证点(对照设计验收表) |
|---|---|
| server.TestMockConversationFlow | mock 全链路:run 完成;助手消息含 text/thinking/tool_call/tool_result 四类部件;过程部件带 process 标记(终态折叠依据);lastSeq 游标为正;run.completed 事件携带上下文观测(context.items 非空) |
| server.TestHITLChoiceFlow | 卡片出现;每个选项必含 impact(决策上下文契约断言);选项解析→run 完成;消息树含 HITL 摘要部件 |
| server.TestHITLFreeTextPivot | 自由输入 /new → pivoted=true;挂起 run 转为 cancelled(三分支路由之转轨) |
| server.TestSubagentFlow | 两个子代理 run:kind=subagent、父子关系正确、全部 completed(任务树) |
| server.TestArtifactFlow | 工件创建(kind=document)+ 内容可取 |
| server.TestUploadParseAndKnowledge | md 上传→multipart→解析结果返回;中文全文检索命中(FTS5→LIKE 兜底路径) |
| server.TestSSEStreamAndReplay | 真实 SSE 连接:在线收到 message.delta 与 run.completed;事件 id 单调;since 游标重放端点 200 |
| server.TestCommandsRoute | /help 命令路由返回;未知命令 400 |
| server.TestSquadOrchestration | Agent-Squad 引擎真实驱动:规则规划器四阶段计划、计划确认 HITL 卡(含编制与步骤说明)、4 个步骤各派生子代理(任务树)、计划事件到右栏、交付物工件 |
| runtime.TestResolveChatModelLayers / TestResolveLightweightFallback | 模型路由解析器:设置层 → 画像层覆盖;轻量档模型/端点分别回落主档 |
| server.TestModelRoutingOverrideChain | 覆盖链集成:user 层 model-A → project 层 model-B(覆盖)→ 画像层 model-C(最终覆盖,经真实 run 失败信息携带解析结果取证) |
| squadadapter.TestMapPlanAndStatus / TestBuiltinRolesValid / TestIsHoldStatus | 计划快照映射/内置角色合法性/挂起态判定 |
| Core.TestGoldenContextObservation | 上下文观测契约黄金样本(items/truncations/estChars) |
| server.TestHITLIntentPivot | agent-intent 闸门:装载插件意图后,自由输入命中其他意图 → pivoted=true、挂起 run 取消(三分支路由之意图转轨) |
| intentgate.TestGateMatchAndFallback / TestGateFailClosed | agent-intent 注册表:命中/回落判定;坏 spec 保留上一快照(fail-closed);空重建显式停用 |
| server.TestStaticServed | SPA 路由不异常(空 embed 下行为受控) |
| ingest.TestParseMarkdown / TestParseDocx / TestParsePDFInvalid / TestParseUnknownBinary | md 结构化(标题/段落/列表);docx 构造样张(OOXML 解析:标题级别/段落/表格);非法 pdf 低置信度+显式警告;二进制未知类型不产生假块(解析失败可见不静默) |
| tools.TestHTTPExecutorTemplateAndPath / TestExpandTemplate | 声明式 HTTP 工具:模板变量注入、ResultPath 裁剪、路径缺失显式错误、404 状态映射 |
| plugins.TestLoadAndRegister / TestUnloadRemovesRegistrations / TestFailClosedOnBadAsset / TestAPIVersionGuard | 五类能力注册;卸载后内置工具零回归;坏资产整批拒绝(fail-closed,不部分注册);apiVersion 兼容窗口守卫 |
2.3 Frontend
| 用例 | 验证点 |
|---|---|
| contracts.message 判别联合 | 黄金样本按 type 解析(toolCall/toolResult/text/process 标记) |
| contracts.stream event 信封 | seq/v/type/payload 字段 |
| contracts.hitl impact 契约 | 选项 impact 必有(与后端断言镜像) |
| contracts.profile 三清单 | allow/deny/confirm 形状 |
| SSE 帧解析 | data 帧解析与游标推进逻辑 |
3. 真实运行验证(发布制品 smoke,12 项)
制品:Releases build/0.1.0/agent-system-0.1.0.tar.gz(sha256 6cdcc30f…,manifest↔制品校验一致 ✓)。
| # | 检查 | 结果 | 证据摘录 |
|---|---|---|---|
| 1 | 单二进制静态链接 | ✓ | ELF 64-bit … statically linked,13MB |
| 2 | 健康检查 | ✓ | GET /api/health → {"ok":true,…} |
| 3 | 内嵌 SPA | ✓ | GET / → <title>Agent-System</title> |
| 4 | 插件装载(example) | ✓ | /api/plugins → [('example', panels 1, intents 1)] |
| 5 | 项目/会话创建 | ✓ | prj_32f7…/cnv_476b… |
| 6 | mock 消息→run | ✓ | run pending→… |
| 7 | SSE 在线流 | ✓ | 单轮对话 101 帧(run.phase/thinking.delta/tool.call/tool.result/message.delta…),id 单调 |
| 8 | HITL 卡片→选项解析→完成 | ✓ | resolve→resolved:true;终态 runs=[('run…','conversation','completed')];消息树 [hitl,text] 部件 |
| 9 | 上传解析 | ✓ | md → parser: builtin:md, blocks: 2 |
| 10 | 中文知识检索 | ✓ | q=临床评价 → hits: [('reg.md','fulltext')] |
| 11 | 游标重放端点 | ✓ | since=0 重放 200(TestSSEStreamAndReplay 同源验证) |
| 12 | 发布包自包含运行 | ✓ | 解包独立目录启动→health/SPA/插件全部正常 |
| 13 | 意图转轨(发布制品) | ✓ | 装载 example 插件后,HITL 自由输入「来个示例演示」→ {"pivoted":true}(agent-intent 闸门生效) |
| 14 | Squad 编排(发布制品) | ✓ | #squad → 计划确认卡 → 4 个步骤子代理(任务树 children=4)→ 计划步骤全 done → 交付物工件 squad-run_*.md(run completed,1.2s) |
| 15 | 上下文观测下发(发布制品) | ✓ | SSE 重放 run.completed 载荷含 context:{items:[…], estChars}(前端折叠芯片消费同一载荷) |
4. 验收表对照(设计方案第 6 节)
| 验收条件 | 状态 | 证据 |
|---|---|---|
| 三栏布局:调宽/超调收起/展开/持久化 | ✅ 实现 | App.tsx 拖拽+超调 40px 判定+双击+localStorage(组件级逻辑;浏览器手工验证路径在用例中覆盖逻辑分支,Playwright 套件列为后续项) |
| 流式对话:区分正文/思考/工具,终态折叠可回看、默认可设置 | ✅ 实现+测试 | TestMockConversationFlow(process 标记)+ smoke #7 + 设置 autoCollapseProcess |
| 断线重连终态对账 | ✅ 实现+测试 | SSE Last-Event-ID/since 游标 + TestSSEStreamAndReplay + 前端 reconcile() 以 Query 收敛 |
| 文件上传→解析→注入→对话闭环;失败显式 | ✅ 实现+测试 | TestUploadParseAndKnowledge + ingest 四用例(含失败可见性) |
| 工件查看 | ✅ 实现+测试 | TestArtifactFlow + DocViewer(md 渲染/编辑保存/图片/下载) |
| HITL 三路径 | ✅ 实现+测试 | 选中回填(Choice)/自由回填(FreeText→澄清)/命令转轨(Pivot→cancel+新消息) |
| sub-agent 弹窗:任务树/中间过程/结果 | ✅ 实现+测试 | TestSubagentFlow + AgentTracker(子代理消息持久化 06478c2) |
| 模型路由与画像生效 | ✅ 实现+测试 | 解析器单测(设置层→画像层覆盖;轻量档模型/端点分别回落)+ 覆盖链集成测试(user model-A → project model-B → 画像 model-C 经真实 run 取证);生效时机 schema 标注 |
| 上下文预算与裁剪可观测 | ✅ 实现+测试 | ctxasm Report → RunCompletedPayload.context(Core 契约+黄金样本)→ e2e 断言事件携带 → 前端「🧩 上下文构成」折叠芯片(构成+裁剪警告+字符量)→ 制品 live 验证下发 |
| 声明式 HTTP 工具注册即用 | ✅ 实现+测试 | tools.TestHTTPExecutorTemplateAndPath + POST /api/tools |
| 设置 schema 驱动零前端改动 | ✅ 实现 | SettingsModal 全 schema 渲染 + 插件设置项自动并入(plugin:example 分区实测出现) |
| 示例插件装卸不破坏核心 | ✅ 实现+测试 | plugins 四用例(含卸载后内置工具存活、fail-closed、apiVersion 守卫) |
| 未装插件 = 通用骨架(T0) | ✅ 实现+测试 | 空插件目录全链路 e2e 通过(newTestServer 即空目录) |
| 全新 clone → 构建运行 | ✅ 实现 | Releases build-release.sh 从零 clone→make build→运行 smoke(#12) |
| 版本发布 | ✅ 实现 | 0.1.0 manifest(10 组件 gitlink+sha256)+ verify 校验一致 |
结论:设计第 6 节验收表 15 项全部达成(本计划范围内)。
5. 复现命令
# 全量测试
cd Agent-System-Dev && make test # core 9 + backend 19 + frontend 5,全绿
# 单二进制构建与演示
make build && make demo # http://127.0.0.1:8787(mock)
# 发布构建与校验
cd ../Agent-System-Releases && scripts/build-release.sh 0.1.0
cd build/0.1.0 && ./install.sh verify # sha256 一致
# 后端单包
cd Agent-System-Backend && go test ./internal/server/ -v
6. 已知边界与偏差(诚实清单)
| # | 项 | 现状 | 计划 |
|---|---|---|---|
| 1 | Agent-Squad 编排适配 | 未接入(设计 P3 计划项)。sub-agent 经统一 Run 模型以 LLM 轻任务(delegate_task)与 mock 脚本实现,任务树/事件/弹窗全链路可用 | 按 squad 引擎接口补 adapter(契约已就位,runmgr SpawnSubagent 即挂点) |
| 2 | a671d60):插件意图 overlay → agent-intent 注册表(fail-closed 重建);HITL 自由输入三分支完整(选项回填/澄清回填/命令或命中其他意图→转轨)。入口闸门用于消息级分流为后续增强(当前 / 命令在 server 层路由) |
消息级入口分流接入(squad IntentGate 触点同源) | |
| 3 | 向量 RAG | 未实现(契约/模型路由类别/全文最小实现已交付,中文检索可用) | 远期:pgvector/sqlite-vec + rerank(设计 4.12) |
| 4 | 记忆系统 | 契约与开关位预留,无实现 | 远期(设计 4.13) |
| 5 | MinerU 深度解析/交叉验证 | 未接(解析器注册位与失败可见性已具备;扫描件 pdf 显式低置信度+提示) | 远期(D12) |
| 6 | docx 在线预览 | 下载查看(md/txt 在线渲染编辑);docx OOXML 解析为上下文注入已实现 | 前端预览器增强(老系统有 docx-preview 经验可鉴) |
| 7 | PostgreSQL 存储档 | 仅 SQLite 档(D16 默认档);存储层经独立 store 包隔离 | 需要时按接口补 PG 方言 |
| 9 | 前端 Playwright E2E | 未建立(组件逻辑经 store 纯函数 + 契约测试覆盖主干) | P4/P5 后补浏览器套件 | | 10 | 多用户/鉴权 | 无(单用户本地部署,owner 字段预留) | 远期整体设计 |
7. 质量注记
- 提交与组合:六仓全部推送 gitea;Dev gitlink 权威(终态
942abc9,11 组件含 agent-squad);生态 pin 与 Agent-Intent 记忆的纪律一致(guidelines26b562d2/ errcodedbeed2f/ logsys2c5716f/ intent7d9d505/ native292142a/ squad5454f74)。 - 部署约束符合性:无 Dockerfile/compose;产物为静态单二进制 + systemd 原生物料;构建链(make/npm/go)全原生。
- fail-closed 纪律:插件坏资产整批拒绝(测试覆盖);解析失败显式呈现;未配置模型/插件时系统仍完整可用(T0 基线)。