feat: finalize latest v0.97.0 updates

This commit is contained in:
coso
2026-03-27 19:22:46 +08:00
parent b06c4a0408
commit 91dc5dd1ca
64 changed files with 9744 additions and 2399 deletions
+3 -1
View File
@@ -194,7 +194,7 @@ npm run verify:local
- **运行时证据导出主链**:继续收敛到 `agent_runtime_export_evidence_pack`,用于把 runtime / timeline / artifacts 打包成最小问题证据
- **运行时 replay 样本主链**:继续收敛到 `agent_runtime_export_replay_case`,复用 handoff bundle + evidence pack 生成 `input / expected / grader / evidence-links`
- **运行时外部分析交接主链**:继续收敛到 `agent_runtime_export_analysis_handoff`,复用 handoff bundle + evidence pack + replay case 生成 `analysis-brief.md / analysis-context.json / copy_prompt`,供外部 Claude Code / Codex 直接诊断与最小修复;当前 GUI 入口位于 `HarnessStatusPanel`
- **运行时人工审核记录主链**:继续收敛到 `agent_runtime_export_review_decision_template`,复用 `analysis handoff` 生成 `review-decision.md / review-decision.json`,把开发者的接受 / 延后 / 拒绝与回归要求回挂到工作区;当前 GUI 入口位于 `HarnessStatusPanel`
- **运行时人工审核记录主链**:继续收敛到 `agent_runtime_export_review_decision_template` + `agent_runtime_save_review_decision`;前者复用 `analysis handoff` 生成 `review-decision.md / review-decision.json` 模板,后者把开发者的接受 / 延后 / 拒绝与回归要求回写到同一份工作区制品;当前 GUI 入口位于 `HarnessStatusPanel`
- **会话主题上下文主链**:`getSession` 返回的 `execution_runtime.recent_theme / recent_session_mode` 负责承接最近一次运行态主题上下文;当前端已命中同一 steady-state theme/workbench mode 时,不应继续每回合重复携带 `harness.theme / harness.session_mode`
- **会话运行阶段上下文主链**:`getSession` 返回的 `execution_runtime.recent_gate_key / recent_run_title` 负责承接最近一次 Theme Workbench 运行阶段上下文;当前端已命中同一 steady-state gate/run 时,不应继续每回合重复携带 `harness.gate_key / harness.run_title`
- **会话内容上下文主链**:`getSession` 返回的 `execution_runtime.recent_content_id` 负责承接最近一次运行态 `content_id`;当前端已命中同一 steady-state 内容时,不应继续每回合重复携带 `harness.content_id`
@@ -233,3 +233,5 @@ npm run verify:local
- `docs/aiprompts/governance.md`
- `docs/aiprompts/quality-workflow.md`
- `docs/aiprompts/credential-pool.md`
- `src/lib/governance/agentCommandCatalog.json`
- `src/lib/governance/legacySurfaceCatalog.json`
+2 -1
View File
@@ -132,10 +132,11 @@ npm run test:contracts
- 扫描已被判定为 `deprecated` / `dead-candidate` 的前端入口
- 检查旧 Tauri 命令是否仍被限制在指定 API 网关
- 找出已经零引用、可进入删除候选的兼容壳
- 规则事实源优先看 `src/lib/governance/legacySurfaceCatalog.json`
- `test:contracts`
- 检查前端 `safeInvoke(...)` / `invoke(...)` 的实际调用
- 检查 Rust `tauri::generate_handler!` 的实际注册
- 检查 `agentCommandCatalog` 中的治理口径
- 检查 `src/lib/governance/agentCommandCatalog.json` 中的命令治理口径
- 检查 `mockPriorityCommands` 与 `defaultMocks` 是否同步
原则只有一句:
+18 -5
View File
@@ -182,14 +182,27 @@ npm run test:contracts
- `input / expected / grader / evidence-links` 文件列表出现
- replay 区块能显示 handoff / evidence 的关联根路径
- 打开目录后工作区内确实生成 `.lime/harness/sessions/<session_id>/replay`
8. 如果这轮继续开发外部分析交接,再点击 `导出分析交接` 与 `一键复制给 AI`,确认:
8. 如果这轮继续开发 replay -> eval 主链,再点击 `复制回归命令`,确认:
- 剪贴板内容同时包含 `npm run harness:eval:promote -- ...`、`npm run harness:eval` 与 `npm run harness:eval:trend`
- promote 命令里的 `session-id / slug / title` 已自动带出,不需要手工补参数
- 该入口只是复制仓库已有主命令,不是 Lime 内部自动 promotion
9. 如果这轮继续开发外部分析交接,再点击 `导出分析交接` 与 `一键复制给 AI`,确认:
- `analysis-brief.md / analysis-context.json` 文件列表出现
- 复制内容直接来自后端 `copy_prompt`,不需要前端再手写 prompt
- analysis 区块能显示 handoff / evidence / replay 的关联目录
9. 如果这轮继续开发人工审核记录,再点击 `导出人工审核记录`,确认:
- `review-decision.md / review-decision.json` 文件列表出现
- 区块能显示默认状态、审核清单与关联 analysis 文件
- 打开目录后工作区内确实生成 `.lime/harness/sessions/<session_id>/review`
10. 如果这轮继续开发人工审核记录,再点击 `导出人工审核记录`,确认:
- `review-decision.md / review-decision.json` 文件列表出现
- 区块能显示当前状态、审核清单与关联 analysis 文件
- 打开目录后工作区内确实生成 `.lime/harness/sessions/<session_id>/review`
11. 如果这轮继续开发人工审核保存闭环,再点击 `填写人工审核结果`,至少填写:
- `决策状态`
- `决策摘要`
- `审核人`
- `风险等级`
12. 保存后确认:
- 区块里的“当前人工审核结论”立即刷新为最新状态、审核人和摘要
- `review-decision.md / review-decision.json` 仍然保持同一目录,不会新开平级目录
- 如页面桥接到了真实后端,重新点击 `导出人工审核记录` 后,已保存结论不会被刷回 `pending_review`
### 话题内容上下文恢复验证
+2 -2
View File
@@ -216,9 +216,9 @@ npm run bridge:health -- --timeout-ms 120000
- 切换到新的 Theme Workbench gate 或运行标题、但 runtime 尚未同步时,前端仍会保留显式 `gate_key / run_title`
- 如果这次改动影响浏览器工作台里的站点采集链路,例如推荐区、资料自动选择、`report_hint` 展示、`lime_site_recommend`,或“优先写回当前 `content_id` 而不是新建资源文档”的主线收敛,除了契约检查,还应补对应 `*.test.tsx` 回归并执行 `verify:gui-smoke`。
- 如果这次改动影响浏览器资料 / 环境预设的真实来源,还应补一次浏览器模式实测,确认控制台不再出现 `[Mock] invoke: list_browser_profiles_cmd` 或 `[Mock] invoke: list_browser_environment_presets_cmd`。
- 如果这次改动影响 `agent_runtime_export_handoff_bundle`、`agent_runtime_export_evidence_pack`、`agent_runtime_export_analysis_handoff`、`agent_runtime_export_review_decision_template` 或 `agent_runtime_export_replay_case` 这条 Harness 导出主链,除了契约检查,还应至少补:
- 如果这次改动影响 `agent_runtime_export_handoff_bundle`、`agent_runtime_export_evidence_pack`、`agent_runtime_export_analysis_handoff`、`agent_runtime_export_review_decision_template`、`agent_runtime_save_review_decision` 或 `agent_runtime_export_replay_case` 这条 Harness 导出 / 审核主链,除了契约检查,还应至少补:
- `src/lib/api/agent.test.ts` 一类的网关回归,确认仍走统一 `agent_runtime_*` 主命令
- `HarnessStatusPanel.test.tsx` 一类的 UI 回归,确认导出入口、状态与制品展示正常
- `HarnessStatusPanel.test.tsx` 一类的 UI 回归,确认导出入口、保存弹窗、状态与制品展示正常
- 受影响 Rust 服务 / 命令的定向测试,确认 `.lime/harness/sessions/<session_id>/...` 一类制品仍能生成
## CI 事实源
-2
View File
@@ -1,7 +1,5 @@
# Lime 设置页面重构设计
> 参考 LobeHub 的设置架构,为 Lime 设计现代化的设置界面
## 一、设计目标
1. **分类清晰**:将设置项按功能分组,便于用户快速定位
+15 -1
View File
@@ -102,10 +102,12 @@ npm run verify:local:full
npm run bridge:health -- --timeout-ms 120000
```
### 运行首条自包含 smoke
### 运行自包含 smoke
```bash
npm run smoke:workspace-ready
npm run smoke:browser-runtime
npm run smoke:site-adapters
```
### 运行 Harness eval 摘要
@@ -126,6 +128,18 @@ npm run harness:eval:promote -- --session-id "session-123" --slug "pending-reque
npm run harness:eval:trend
```
### 记录 Harness eval 历史窗口
```bash
node scripts/harness-eval-runner.mjs --record-history-dir "./artifacts/history" --history-retain 30
```
### 运行 Harness cleanup / slop 报告
```bash
npm run harness:cleanup-report
```
### 当前浏览器续测入口
当前仓库的浏览器模式 E2E / 续测文档分两层:
+6 -2
View File
@@ -10,7 +10,9 @@
- `npm run tauri:dev:headless`:当前浏览器模式启动入口
- `npm run bridge:health -- --timeout-ms 120000`:当前 DevBridge 就绪检查入口
- `npm run test:bridge`:当前浏览器桥接最小自动校验入口
- `npm run smoke:workspace-ready`:当前首条自包含 smoke,覆盖 DevBridge 就绪与默认 workspace 基础链路
- `npm run smoke:workspace-ready`:当前自包含 smoke,覆盖 DevBridge 就绪与默认 workspace 基础链路
- `npm run smoke:browser-runtime`:当前自包含 smoke,覆盖 browser runtime 的启动、状态读取、最小动作与审计关联键
- `npm run smoke:site-adapters`:当前自包含 smoke,覆盖站点适配器目录状态、列表、推荐与检索主链
### supplement
@@ -90,6 +92,8 @@ npm run bridge:health -- --timeout-ms 120000
| 等待 Bridge 就绪 | `npm run bridge:health -- --timeout-ms 120000` | current | 当前标准健康检查 |
| 校验桥接基础能力 | `npm run test:bridge` | current | `safeInvoke` / mock / tauri-mock 最小自动校验 |
| Workspace 自包含 smoke | `npm run smoke:workspace-ready` | current | 验证 DevBridge、默认 workspace、路径回查链路 |
| Browser Runtime smoke | `npm run smoke:browser-runtime` | current | 验证 browser runtime 最短主链与审计关联键 |
| Site Adapter smoke | `npm run smoke:site-adapters` | current | 验证站点适配器目录、推荐与检索最短主链 |
| 校验跨层命令契约 | `npm run test:contracts` | current | 检查前端命令、Rust 注册、catalog、mock 集合漂移 |
| 浏览器续测细则 | `docs/aiprompts/playwright-e2e.md` | current | Playwright MCP 唯一详细事实源 |
| 专项 bridge 排障 | `npm run bridge:e2e` | supplement | 适合排障,不是统一门禁 |
@@ -112,7 +116,7 @@ npm run bridge:health -- --timeout-ms 120000
- 假设 `tauri-driver` 仍是推荐路径
- 假设浏览器 E2E 已进入 CI 标准门禁
当前浏览器主链路 smoke 仍属于后续建设项,详见 `docs/test/testing-strategy-2026.md`。
当前浏览器最小 smoke 基线已经具备;后续是否继续补 terminal / server / 专项 smoke,以 `docs/test/testing-strategy-2026.md` 的剩余优先级为准。
## 7. 给后续 Agent 的交接要求
+42 -7
View File
@@ -17,6 +17,7 @@ Lime 当前不直接把“真实模型重放平台”一次做完,而是先固
- `grader.md`
- `evidence-links.json`
其中 `input.json` 继续承载 `classification.suiteTags` 与 `classification.failureModes`。
如果样本已经完成人工审核,还可以额外挂载可选的 `review-decision.json` / `review-decision.md`,但它不是 replay case 的必填件。
3. **固定摘要出口**
由 `scripts/harness-eval-runner.mjs` 统一产出 JSON / Markdown 摘要,后续 nightly 与趋势报表都从这里接。
@@ -86,10 +87,16 @@ Lime 当前不直接把“真实模型重放平台”一次做完,而是先固
1. 读取 manifest
2. 解析固定 fixture 与工作区自动发现 case
3. 校验 replay case 最小四件套与关键 JSON 字段
4. 输出统一 JSON / Markdown 摘要,并聚合 `suite tag / failure mode` 分布
4. 输出统一 JSON / Markdown 摘要,并聚合 `suite tag / failure mode / review decision status / risk level` 分布
当前它**不直接执行真实模型重放**,而是先把“样本是否可评估、摘要是否可归档”工程化。
如果 case 根目录内存在 `review-decision.json`,或者工作区 replay 同级 `../review/review-decision.json` 已存在,runner 会把它识别为同一条会话的可选人工审核增强信息,并写入:
- `reviewDecisionRecordedCount`
- `reviewDecisionStatuses`
- `reviewRiskLevels`
这符合 Lime 当前阶段的约束:
- 先复用现有 `handoff bundle + evidence pack + replay export`
@@ -115,12 +122,13 @@ node scripts/harness-replay-promote.mjs \
--slug "pending-request-runtime"
```
这个命令会做四件事:
这个命令会做五件事:
1. 读取 replay 最小四件套。
2. 把工作区绝对路径脱敏成稳定占位路径,避免把本机路径直接写进仓库。
3. 把样本复制到 `docs/test/harness-fixtures/replay/<slug>/`。
4. 把 case 回写到 `repo-promoted-replays` suite,成为 nightly 与 trend 的 current 样本。
3. 如果同会话 `review/` 目录里已经有 `review-decision.json/md`,一起复制并脱敏到目标 fixture。
4. 把样本复制到 `docs/test/harness-fixtures/replay/<slug>/`,并把人工审核摘要回写到 manifest case。
5. 把 case 回写到 `repo-promoted-replays` suite,成为 nightly 与 trend 的 current 样本。
默认原则:
@@ -128,12 +136,24 @@ node scripts/harness-replay-promote.mjs \
- promotion 之后,样本不再只是“本机能看到”,而是仓库 current 主线的一部分。
- 仓库沉淀样本仍然复用原来的 handoff / evidence 形状,不另造 schema。
如果当前已经在 Lime 工作台里导出了 Replay 样本,也可以直接在 `HarnessStatusPanel` 的 Replay 区块点击:
- `复制回归命令`
它会一次性复制三条现成命令:
1. `npm run harness:eval:promote -- ...`
2. `npm run harness:eval`
3. `npm run harness:eval:trend`
这样做的目的不是把 promotion 内建进 Lime,而是把仓库已有的 current 主命令直接挂到工作台,避免用户还要自己重新拼 `session-id / slug / title`,并且在 promotion 后立刻补上统一 trend 入口。
## Trend Report 做什么
`scripts/harness-eval-trend-report.mjs` 当前负责三件事:
1. 读取一个或多个 `harness eval summary` JSON
2. 生成 baseline / latest 对比、suite 级 delta,以及 `suite tag / failure mode` 聚合变化
2. 生成 baseline / latest 对比、suite 级 delta,以及 `suite tag / failure mode / review decision status / risk level` 聚合变化
3. 输出 JSON / Markdown 趋势报告
如果没有显式提供输入,它会先调用 `harness-eval-runner` 生成当前 summary,再把它当作第一条 trend seed。
@@ -148,6 +168,10 @@ node scripts/harness-replay-promote.mjs \
当前 nightly 还会恢复并追加 `artifacts/history/*.json` 历史窗口,用于让 trend 不只停留在单次 seed。
在当前仓库主链里,nightly 还会基于 trend + doc freshness + governance report 继续生成 `harness-cleanup-report.json/md`,让回归样本、人工审核状态和治理建议进入同一份 nightly artifact。
从 `2026-03-27` 起,这个历史窗口不再依赖 workflow 里的 `cp / ls / xargs` 拼接,而是直接由 `scripts/harness-eval-runner.mjs --record-history-dir` 负责写入和裁剪,保证本地与 nightly 走同一条跨平台主链。
## 常用命令
```bash
@@ -171,6 +195,11 @@ node scripts/harness-eval-runner.mjs \
--output-json "./tmp/harness-eval-summary.json" \
--output-markdown "./tmp/harness-eval-summary.md"
# 记录本地 history window,供 trend / cleanup 复用
node scripts/harness-eval-runner.mjs \
--record-history-dir "./artifacts/history" \
--history-retain 30
# 从历史 summary 目录生成趋势报告
node scripts/harness-eval-trend-report.mjs \
--history-dir "./artifacts/history" \
@@ -188,6 +217,7 @@ Runner 摘要至少回答下面这些问题:
- 哪些 case JSON 字段不完整
- 哪些 case 属于什么 suite tag / failure mode
- 哪些 case 默认需要人工复核
- 哪些 case 已经记录人工审核状态与风险等级
- 工作区 replay 是否已经开始形成增量样本
如果摘要回答不了这些问题,就说明 runner 还不算进入 current 主链。
@@ -197,6 +227,7 @@ Trend 报告至少还要回答:
- baseline 和 latest 之间,ready / invalid / pending request 有没有变化
- 哪些 suite 在 latest 里变差了
- 哪些 failure mode / suite tag 在 latest 里增长或退化了
- 哪些人工审核状态 / 风险等级在 latest 里新增、减少或发生迁移
- 当前只有 trend seed,还是已经开始形成真正的历史窗口
## 与其他事实源的关系
@@ -207,16 +238,20 @@ Trend 报告至少还要回答:
| [testing-strategy-2026.md](testing-strategy-2026.md) | 解释为什么 eval 工程化排在 smoke 之后 |
| [../tech/harness/implementation-blueprint.md](../tech/harness/implementation-blueprint.md) | 解释 `P3-2 Eval runner` 在 Harness 主线中的位置 |
| [../tech/harness/tooling-roadmap.md](../tech/harness/tooling-roadmap.md) | 解释 runner、nightly、trend 的后续工具面 |
| [../tech/harness/entropy-governance-workflow.md](../tech/harness/entropy-governance-workflow.md) | 解释 trend 怎样回挂到 cleanup / governance 建议 |
| `scripts/harness-eval-runner.mjs` | 当前唯一的 runner 入口 |
| `scripts/harness-eval-trend-report.mjs` | 当前 trend 聚合与 nightly 趋势出口 |
| `scripts/report-generated-slop.mjs` | 当前 cleanup/slop 聚合与治理建议入口 |
| `scripts/check-doc-freshness.mjs` | 当前 Harness 文档保鲜检查入口 |
| [../../.github/workflows/harness-nightly.yml](../../.github/workflows/harness-nightly.yml) | 当前 nightly summary / trend / cleanup artifact 主入口 |
| [harness-evals.manifest.json](harness-evals.manifest.json) | 当前任务集与 suite 机可读事实源 |
## 下一刀
`P3-6` 做完之后,下一刀优先级建议固定为:
1. 把分类聚合直接挂到熵治理清单,形成 replay 驱动 cleanup 主线
2. 继续补 observability 证据字段,让 grader 能消费更多 request / timeline / artifact 关联
1. 把 cleanup report 接入更稳定的历史窗口,避免长期停留在 trend seed
2. 继续补 observability 证据字段,让 grader 和 cleanup report 都能消费更多 request / timeline / artifact 关联
3. 逐步提高 repo current 样本质量,而不是只增加数量
4. 再考虑是否引入真实模型执行或 transcript grading
+18 -18
View File
@@ -40,31 +40,21 @@
- 旧权限表面治理护栏已经补齐:`src/lib/governance/legacyToolPermissionGuard.test.ts` + `npm run governance:legacy-report`
- 跨层命令契约检查基础版已经落地:`npm run test:contracts` 已进入 `scripts/local-ci.mjs`
- 命令契约延期例外已经收口:`agent_terminal_command_response`、`agent_term_scrollback_response` 已退出 `runtimeGatewayCommands`,改为 `dead-candidate` 治理监控
- 首条自包含 smoke 已落地:`npm run smoke:workspace-ready` 可自动校验 DevBridge 就绪、默认 workspace 获取、目录修复与路径回查
- 自包含 smoke 最小基线已落地:`npm run smoke:workspace-ready`、`npm run smoke:browser-runtime`、`npm run smoke:site-adapters` 都无需人工准备,且 `npm run verify:gui-smoke` 已默认串联这三条主链 smoke
- 测试文档事实源已经收口:`docs/test/README.md`、`docs/test/e2e-tests.md`、`docs/aiprompts/playwright-e2e.md` 已按“索引 / 总览 / 详细事实源”分层
## 3. 当前仍未解决的问题优先级
| 优先级 | 事项 | 为什么重要 | 当前证据 | 完成定义 |
| ------ | ------------------------- | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| P0 | 自包含 smoke 仍然不足 | 单测很多,但主链路仍缺少无需人工准备的自动回归 | 目前仅有 `smoke:workspace-ready` 属于自包含 smoke;`smoke:social-workbench` 仍依赖已有 session,`bridge:e2e` 更像排障脚本 | 至少补齐 3 条无需人工准备的 smoke;当前已完成 1 条,仍需补 server / terminal / browser runtime 等 2 条以上 |
| P1 | Agent eval 仍未完全工程化 | 价值高,但建立在前面基础门禁稳定之后 | 已补 `docs/test/harness-evals.md`、`harness-evals.manifest.json`、`scripts/harness-eval-runner.mjs`、`scripts/harness-eval-trend-report.mjs` 与 nightly 摘要 / trend 骨架,但真实执行与更多高价值样本仍缺 | 形成稳定任务集、可增长 replay 样本、grader、nightly 输出与趋势指标 |
| P1 | Agent eval 仍未完全工程化 | 价值高,且当前最缺的是把证据沉淀成长期回归资产 | 已补 `docs/test/harness-evals.md`、`harness-evals.manifest.json`、`scripts/harness-eval-runner.mjs`、`scripts/harness-eval-trend-report.mjs` 与 nightly 摘要 / trend 骨架,但真实执行与更多高价值样本仍缺 | 形成稳定任务集、可增长 replay 样本、grader、nightly 输出与趋势指标 |
| P2 | terminal / server 自包含 smoke 仍可继续扩面 | 最小 GUI smoke 基线已具备,但更细分主链仍缺专项守卫 | 当前 `workspace-ready / browser-runtime / site-adapters` 已覆盖 GUI 最小主链;`smoke:social-workbench` 仍依赖已有 session,terminal / server 还没有各自独立的自包含 smoke 入口 | 如后续需要继续扩面,应补 terminal 或 server 的独立 smoke,而不是继续把现有 3 条 current smoke 算成缺口 |
## 4. 建议执行顺序
### 第 1 步:把 smoke 升级为自包含场景
### 第 1 步:把 Agent eval 工程化
先只挑 3 条最高价值场景,不要贪多:
1. 应用启动 + workspace 可创建 / 打开
2. server 基础链路可自动打通
3. terminal 或 browser runtime 至少有一条基础链路可自动打通
验收标准是“本地和 CI 都能重复执行”,而不是“方便人工排障”。
### 第 2 步:把 Agent eval 工程化
这一步放在最后,不是因为不重要,而是它依赖前面的基础设施稳定:
现在可以把它提到第一优先级,因为前面的最小 GUI smoke 基线已经具备:
- 有稳定门禁
- 有稳定契约检查
@@ -82,11 +72,21 @@
- 更多真实高价值 replay 样本
- 更长窗口的趋势报表
### 第 2 步:按需继续扩自包含 smoke 覆盖面
如果后续还要补 smoke,不要重复把 `workspace-ready / browser-runtime / site-adapters` 记成“未完成”。
下一轮更合理的扩面方向是:
1. terminal 基础链路
2. server 基础链路
3. 仍依赖人工前置状态的专项 smoke 去人工化
## 5. 当前建议
如果只看投入产出比,当前最值得先做的两刀是:
1. 把 smoke 升级为自包含场景
2. 把 Agent eval 工程化
1. 把 Agent eval 工程化
2. 如需继续补 smoke,优先做 terminal / server 专项自包含场景
这两步做完之后,再继续往 nightly 与趋势报表收口,收益会更高。
这两步做完之后,再继续往 nightly、趋势报表与 replay promotion 收口,收益会更高。