# @blueriverlhr/dsh-better-webui-context-archive 上下文归档(host + client):agent 完成 goal 前可调用 `compress_context`,把之前的 会话上下文压缩为**描述 + 指向全文的链接**。全文存进**会话自己的目录** (`/context-archive/`),随会话一起存、一起删(archive 彻底删除会话时 rm -rf 整个会话目录,全文一并清除——"processed together")。 - **模型工具 `compress_context`**:参数 `description`(必填)、`title`、`scope` (`before-current` 默认 / `recent`)、`recent_messages`。执行时: 1. 校验本会话开关(默认开;关掉则明确拒绝); 2. 选压缩范围(默认当前轮之前全部;`recent` 只压当前轮之前最近 N 条,保留更早历史), 边界不劈开 tool-call/result 对(用官方 `toolPairingBalancedBefore/After`); 3. 把范围原文写进 `/context-archive/.jsonl`(原始事件,无损)+ `.md`(可读转录),并在 `index.json` 登记; 4. 用官方 compaction checkpoint 事件序列(`compaction/start` → `compaction/summary` → 替换 `user/message`(含描述 + `dsh-context://` 链接)→ `compaction/end`) 把表面替换为摘要节点——**模型可见上下文真正缩小**,原始日志仍保留全部事件; 5. 返回 `{ archive_id, link, description, shadowed }`。 - **RPC 通道 `/better-webui-context`**(`ping` / `listBySession` / `listAll` / `read` / `setEnabled` / `purge`):设置页列表与开关后端。 - **设置页「上下文归档」**(`settings.section`,order 35):列出每个有归档(或已关闭) 的会话、描述、时间、`dsh-context://` 链接,「打开」读取并展示全文转录。 数据不再是一次性快照:挂载、页面重新可见(`visibilitychange`)两条路径都会重取 (页头「刷新」按钮按用户裁决 2026-08-28 移除);宿主与客户端各自对 live+persistence 重叠的会话去重(每会话恰一张卡)。 - **composer 工具行开关**(`conversation.input.left`,order 1,紧挨「超参配置」按钮): 每会话开关,控制该会话是否允许 `compress_context`。状态存 `/context-archive/state.json`(默认开,随会话一起删)。 **状态一眼可辨**(不靠悬停):开启 = 品牌色图标 + 右上角绿色成功圆点; 关闭 = 灰化图标加对角斜杠划线;加载中为中性灰、无任何标记。 jsdom 冒烟测试(tests/smoke.mjs)锁定三态与点击乐观切换。 - 服务依赖(硬):`connection`、`sessions`、`sessionPersistence`、`tools` - wire 版本:`WIRE_VERSION = 1`(host)与 `WIRE = 1`(client)必须一致 - 独立安装:把 `@blueriverlhr/dsh-better-webui-context-archive` 加进 `dsh.profile.bundles` 并声明依赖(见根 README「按需安装」)。 设计讨论与任务拆解见 [docs/discussion/context-archive-2026-08-27.md](../../docs/discussion/context-archive-2026-08-27.md) 与 [docs/task/01-context-archive.md](../../docs/task/01-context-archive.md)。