release: prepare Desktop 0.13.12 and Agent 0.13.3
Cross-platform packages / Validate source (push) Canceled after 0s
Cross-platform packages / Authorize desktop packaging (push) Canceled after 0s
Cross-platform packages / linux arm64 (push) Canceled after 0s
Cross-platform packages / macos arm64 (push) Canceled after 0s
Cross-platform packages / windows arm64 (push) Canceled after 0s
Cross-platform packages / linux x64 (push) Canceled after 0s
Cross-platform packages / macos x64 (push) Canceled after 0s
Cross-platform packages / windows x64 (push) Canceled after 0s
Cross-platform packages / Publish GitHub and OSS release (push) Canceled after 0s
GoodBuddy Agents / Validate Agent source (push) Canceled after 0s
GoodBuddy Agents / Build darwin arm64 Agent (push) Canceled after 0s
GoodBuddy Agents / Build linux arm64 Agent (push) Canceled after 0s
GoodBuddy Agents / Build linux x64 Agent (push) Canceled after 0s

Complete the pending Supervisor changes with opt-in execution, incremental automatic reviews, and activity history. Preserve saved preferences and plans, skip model calls for unchanged input, and keep full replay and cancellation limitations explicit.

Update both release versions, bilingual notes, feature matrices, migration fixtures, and validation evidence. Clear stale browser errors after a successful close retry. Focused validation passed 690 tests across 35 files, plus notes verification, typecheck, and lint; full CI and native release acceptance remain pending. No local production build or packaging was run.

Release note: Enable Supervisor to review work, trace story graphs, and inspect manual or automatic activity without repeating model calls for unchanged input. Desktop 0.13.12 and Agent 0.13.3 also prepare idle remote Runtime cleanup and retirement of replaced Agents; update Desktop before the Host environment. Database upgrades require a pre-upgrade backup for rollback.
This commit is contained in:
mesalogo
2026-09-23 18:20:23 +08:00
parent 83a48a4079
commit bf8ece0590
74 changed files with 2524 additions and 412 deletions
@@ -4,6 +4,10 @@
## 文档导航
主页面包含工作回顾、故事线图谱、活动和设置。活动读取实际手动回顾及心跳执行,合并展示同一次心跳的报告与监督回顾阶段;状态规则、历史缺失和保留期限见[活动记录](./logic-design.md#活动记录)。
自动心跳报告和监督回顾已接入按来源版本及正文位置的增量处理,无变化时跳过模型。手动历史回顾继续重新整理所选区间;进度、失败重试和删除边界见[自动增量与手动重看](./logic-design.md#自动增量与手动重看)。
| 文档 | 权威职责 |
| --- | --- |
| [会话监督 PRD](./prd.md) | 监督目标、证据、介入方式和产品验收 |
@@ -111,8 +111,20 @@ flowchart LR
外圈时间轴呈现事件及阶段标记,内部平铺实体;时间到实体的连线对应事件关联,实体间连线对应知识关系。时间轴上的同日聚合点只负责显示密集事件,不形成新的知识实体。
## 应用启停与执行
以下规则对应 FR-S1、FR-S4、FR-S5 和 US-S14,适用于监督者与智能心跳共用的 `heartbeat` 应用。
- 新安装及设置缺失 `heartbeatEnabled` 时按 `false` 处理;已明确保存的 `true`、`false` 均保留。
- 关闭应用后不领取新的定时心跳运行,拒绝新的手动心跳和监督回顾请求,也不启动心跳完成后的自动监督回顾。侧栏不挂载监督面板,不发起该面板的查询。
- 启用应用后,只有已保存且启用的心跳计划才参与自动调度;没有此类计划时不产生自动工作。启动或启用应用不自动创建、补种或启用计划,用户仍可主动发起回顾。
- 关闭前已经领取并在执行的运行可以完成并保存结果,关闭应用不强制取消;若完成时应用已关闭,不再追加自动监督回顾。已有计划的 `enabled`、历史结果及导航偏好保留。
- 应用开关不影响普通任务的现有定时调度。取消常驻只改变导航入口,不改变应用启用或计划状态。
## 状态与处理规则
下表包含目标规则;当前活动执行状态以本节后的“活动记录”为准,取消及部分完成尚未接入。
| 规则 | 条件或状态 | 处理与用户可见结果 | 需求与场景 |
| --- | --- | --- | --- |
| L1 范围 | 手动或定时触发 | 按本次所选范围、时间和输入预算收集证据;启用应用不扩大来源范围 | FR-S3、S4;US-S01 |
@@ -126,7 +138,25 @@ flowchart LR
| L9 继续 | 用户选择继续讨论 | 预览并确认上下文后进入会话;新内容在后续整理时纳入,不立即作为已确认知识 | FR-S3、S5;US-S11 |
| L10 展示 | 改变布局或输入方式 | 保留范围、回放时刻及选择;图形和文字列表访问相同对象与来源 | FR-G2、G5、G6;US-S15 |
整理运行状态与内容确认状态分开:一次运行成功不意味着所有自动归纳均已被用户确认。运行从待处理进入整理中,再结束为成功、无新变化、部分完成、失败或已取消;重试作为新一次整理显示,不能将失败运行改称成功。具体运行标识与现有心跳状态如何映射留待技术设计。
整理运行状态与内容确认状态分开:一次运行成功不意味着自动归纳已经得到用户确认。手动重试创建新运行;心跳继续沿用原有运行领取和重试规则。
## 活动记录
对应 FR-S10、US-S26。监督运行在收集证据之前保存 `running`,结果事务成功后转为 `completed`;收集、模型、校验或保存失败转为 `failed`,保留错误及结束时间。重开应用将没有完成的监督运行标为失败,旧成功结果保持可读。
心跳活动按真实运行 ID 关联下游监督。报告阶段使用 `claimed / completed / failed / skipped / no_change`,活动将 `claimed` 显示为运行中。报告已结束而投影尚在执行时,整条活动仍为运行中;任一阶段失败,整条活动显示失败。两阶段都没有新输入时显示“无变化(未调用模型)”;任一阶段保存新结果且没有失败时显示完成。没有下游运行记录时明确显示“无执行记录”。
旧监督成功记录继续显示;旧心跳与监督之间未保存关联时分别呈现,不用时间接近猜测关系。旧心跳未保存的执行范围显示不可用,不从当前计划反推。此前未保存的手动运行与失败无法恢复。心跳报告沿用计划的历史保留和删除规则;监督结果独立保留,原心跳被清理后仍可读取监督记录。活动不是永久审计库。
当前活动没有 `cancelled` 或 `partial` 状态,也不提供取消按钮。实体和关系修改只有当前状态及结果内容,没有按时间追加的人工修改记录。
### 自动增量与手动重看
自动心跳报告和下游监督分别记录已成功处理的来源版本及正文位置。首次自动运行只读取计划范围和回顾窗口内的来源;后续运行在同样边界内处理新增、修订或上次预算未覆盖的片段。项目列表顺序不改变自动进度;不同项目集合和 Global 分开处理。失败、未送入模型或结果事务未提交的输入保留待处理状态。
两个阶段都在调用模型前检查输入。没有待处理来源时记录 `no_change`,保留旧报告和图谱,不产生新结果或重复事件。心跳报告无变化仍进入受应用开关控制的下游检查,允许监督阶段重试之前的失败。已确认记忆、已有实体说明及最近摘要仅作为背景,不单独触发自动模型调用。
工作回顾的手动操作重新整理所选区间,沿用有界历史收集,不读取或推进自动进度。设置中的“立即运行”重新生成心跳报告,其下游监督仍按自动进度处理。删除报告或计划不重置来源进度;重看历史、删除报告和重建图谱是不同操作。当前没有清空或重建图谱功能。
规则冲突时,先满足所选范围与既有观察边界,再保留用户修订和来源事实,最后应用自动归纳和展示策略。新增证据与已确认结论冲突时显示待核对差异,不能自动断言旧观点失效。
@@ -134,6 +164,6 @@ flowchart LR
本设计覆盖触发、证据输入、静默检查、正常整理、取消与失败、跨视图共享结果、用户纠正、知识库写入及历史回放。它补充产品逻辑,不代表接口、持久化或迁移方案已经完成。
仍待产品决策:停用应用时计划及运行中任务的处理方式、事件触发与阶段识别条件、反馈频率与静默判定、实体合并与拆分的交互、时间轴比例和集中度含义。既有入口偏好、计划与运行记录的保留要求见 FR-S1、S2 和 US-S14。
仍待产品决策:事件触发与阶段识别条件、反馈频率与静默判定、实体合并与拆分的交互、时间轴比例和集中度含义。应用启停按[应用启停与执行](#应用启停与执行)处理;既有入口偏好、计划与运行记录的保留要求见 FR-S1、S2 和 US-S14。
技术设计需确认现有实体标识能否复用、来源定位与历史版本可用性、增量整理和并发运行如何避免重复结果、已有心跳计划如何兼容。按照现有能力选择最小实现,不预设新的历史快照、恢复框架或独立知识存储。
来源旧版本和完整历史回放仍受原应用的保存能力限制。增量进度与同 scope 实体 ID 复用的实现见[技术设计](./technical-design.md#自动增量收集)。
@@ -13,7 +13,7 @@
## 1. 背景
2026-09-16 产品归属更新:本 PRD 继续定义会话监督能力。统一应用命名为“监督者”,整合智能心跳入口、工作回顾和故事线图谱,目标定位与知识库分工见[监督者应用产品设计](./supervisor-prd.md)。该整合尚未实现,不改变本文既有证据和介入边界。
本 PRD 继续定义会话监督能力。统一应用“监督者”已整合智能心跳入口、工作回顾、故事线图谱、活动与设置;实际能力及执行记录要求见[监督者应用产品设计](./supervisor-prd.md)。本文其余执行观察与介入目标仍按各节范围实施。
GoodBuddy 的魔法笔记已经提供一种有价值的交互:用户持续写作,AI 在右侧以长评、建议和
警告进行评论,用户可以选择综合、扩展、润色、质疑或发散方向。该能力是内容分析,不是
@@ -254,7 +254,7 @@ type SupervisorDecision = {
### 13.1 工作栏监督栏目评论流
监督是助手工作栏中固定且始终可访问的栏目,不是只在聊天页面出现的附属面板。栏目默认
监督应用启用后,助手工作栏提供监督栏目;关闭时不挂载或查询监督面板,见[应用启停与执行](./logic-design.md#应用启停与执行)。栏目默认
跟随当前会话,用户也可以固定到其他普通 Conversation、Task 或 Experiment。
切换页面不会改变固定目标;目标失效时必须显示修复状态,不能静默回到当前会话。
@@ -8,13 +8,13 @@
- 共享监督者契约已接入 Main 服务,模型请求包含系统指令;证据总字符预算为 48,000,输出仍限制为 100KB,并校验本次证据集内的来源引用、输出局部实体 ID 和关系端点。手动回顾当前收集会话、任务、消息已有的知识引用和已确认记忆;记忆使用 `memory` 来源类型。
- SQLite schema 43 包含监督运行、结果、来源、故事线、事件、实体、实体关联和关系表,并保存每次结果的实体与关系内容。来源保存本地 library/document/chunk 或外部 locator 元数据;持久化与升级规则见[技术设计](./technical-design.md)。
- 监督者入口现在只有一个页面页头和三项顶层页签:工作回顾、故事线图谱、设置。原有计划、概览、建议、历史和审计内容保留在设置页内部;手动运行仍通过 Supervisor 通道,未绑定自动计划时也可用。
- 监督者入口只有一个页面页头和四项顶层页签:工作回顾、故事线图谱、活动、设置。原有计划、概览、建议及报告内容保留在设置页内部;手动运行仍通过 Supervisor 通道,未绑定自动计划时也可用。
- 工作回顾显示结果自身冻结的 scope/time range。故事线视图使用真实数据库结果,外围事件按实际时间逆时针排列并保留缺口,事件实体连线和来源过滤来自 Main 查询投影,图形不可用时仍可通过事件/实体/关系列表操作。
- `HeartbeatService` 在定时或手动心跳成功落库后调用同一个 `SupervisorService`,按心跳范围和回顾窗口自动保存监督结果;投影失败不会改写已经成功的心跳状态。
- 监督图谱提供 Main/Preload IPC 的来源读取、实体确认/修订/撤销和关系确认/移除;关系移除保存 `revoked` 状态,不删除来源,后续自动 run 不恢复相同身份的关系。
- 右侧助手栏已读取监督反馈,支持来源查看、继续讨论预览与确认发送,以及本地知识库实体写入预览和确认提交。
- 本地会话来源可按会话 ID 和发生时间读取上下文;没有当前会话时,继续讨论操作明确禁用。
- 应用中心已增加监督者开关,继续复用 `heartbeat` 导航 ID;关闭后已打开页面显示关闭状态并禁用工作区操作,不删除既有心跳计划或历史数据。导航显示同时遵守 enabled 和 pinned 语义。
- 应用中心已增加监督者开关,继续复用 `heartbeat` 导航 ID;关闭后已打开页面显示关闭状态并禁用工作区操作,不删除既有心跳计划或历史数据。导航显示同时遵守 enabled 和 pinned 语义。默认值及执行边界以[应用启停与执行](./logic-design.md#应用启停与执行)为准。
## 验证证据
@@ -72,10 +72,45 @@
- 本轮涉及的 10 个 TS/TSX 文件定向 ESLint 通过,0 error、0 warning。`npx tsc --noEmit -p tsconfig.node.json` 与 `npx tsc --noEmit -p tsconfig.web.json` 各一次有效源码检查通过;此前附加 `--incremental false` 的启动因 composite 配置报 TS6379,未执行源码检查。`git diff --check` 通过,仅有现有行尾提示。
- 未运行 App 整文件、全量测试、全量 lint、Agent typecheck、Electron 或真实模型请求;模型调用为 0。此次仅修改桌面 Renderer 导航和异步展示,不影响 Agent/远程 Runtime。保留全部其他 dirty 改动,未提交。
### 2026-09-23 自动监督设置
- 对应 US-S22 至 US-S24:监督者设置直接显示完整自动监督配置,运行概览、建议、报告与记录保留为次要面板。界面统一中英文命名,保留内部 heartbeat 标识和已有内容。无计划时明确显示仅支持手动回顾,填写草稿不触发保存或运行。
- 核对共享 recurrence 合同及实际调度器后,仅展示已支持的每日、每周指定时间;页面明确说明不支持分钟间隔。编辑保留原时区和暂停状态,计划列表显示范围、周期、时区、回顾窗口与保留期限,继续提供编辑、暂停、恢复、运行及确认删除。
- 已核对 App、Preload、Main 和 HeartbeatService 的既有 CRUD 接线,本轮未修改调度器或创建默认计划。保留工作区原有默认关闭及 Main 启用检查改动。
- 定向测试:`HeartbeatCenter.test.tsx` 23 项、`application-settings-store.test.ts` 50 项通过;`heartbeat-recurrence.test.ts`、`heartbeat-service.test.ts`、`heartbeat-database.test.ts` 合计 17 项通过;`ipc.test.ts -t 'heartbeat enabled gates'` 4 项通过、128 项未运行。覆盖中英文直接入口、每日/每周提交、多项目、无效窗口、失败保留草稿、时区及暂停状态、各项计划操作,以及默认关闭、无计划不运行和启停行为。首轮整文件运行发现原有顶层图谱测试未清理 DOM,补充文件级 cleanup 后通过。
- `tests/supervisor-layout.electron.test.ts` 通过:生产 React 组件的自动监督设置在 1440、1024、390px 和浅深主题下测量无横向溢出,周频表单全部控件边界可达,默认配置页及未配置说明存在。该测试使用隔离 fixture;未将其表述为真实模型或用户数据库端到端验收。
- `npm run typecheck` 通过;本轮 9 个 TS/TSX 文件及 Electron driver 的定向 ESLint 通过。按要求未运行全量测试,真实模型调用 0 次;没有 Agent 或远程 Runtime 改动,未提交或推送。
### 2026-09-23 活动页签
- 对应 FR-S10、US-S26:schema 45 复用运行表保存监督开始、完成和失败,并按真实心跳 ID 合并报告和下游监督。手动失败、报告完成但下游运行中/失败、回调失败、应用重开后的未完成记录均有真实 SQLite 测试。没有新的执行引擎或取消协议。
- 类型化活动 IPC/Preload 已接入生产页面;关闭应用不查询,页签或路由离开停止刷新并忽略迟到响应。每页 50 条,串行轮询,读取失败可重试。历史结果通过 resultId 定位,保留现有自动监督设置。
- `npx vitest run src/main/assistant/supervision-activity.test.ts src/main/assistant/supervisor-service.test.ts src/main/assistant/heartbeat-service.test.ts src/preload/supervision-activity.test.ts src/renderer/src/SupervisorActivity.test.tsx src/renderer/src/HeartbeatCenter.test.tsx src/renderer/src/SupervisorWorkspace.test.tsx`:7 个文件、58 项通过。
- `npx vitest run src/main/assistant/supervision-activity.test.ts src/main/assistant/heartbeat-database.test.ts src/main/assistant/supervision-history.test.ts`:3 个文件、14 项通过,包含 schema 44 升级及重开保留。
- `npx vitest run src/main/ipc.test.ts -t 'supervision|heartbeat enabled gates'`:8 项通过、124 项未运行。新增活动查询首次运行暴露 UNION 排序列缺少别名,修正后真实 SQLite 和 IPC 均通过。
- `npx vitest run tests/supervisor-layout.electron.test.ts`:1 项通过,新增活动页 1440、1024、390px 浅深主题测量,长错误、元数据和操作无横向溢出,短窗口页签保持高度。测试使用生产组件和隔离 fixture,没有读取用户库。
- `npm run typecheck` 通过;定向 ESLint 通过。未跑全量测试或真实模型,模型调用 0 次。没有修改 Agent/远程 Runtime;工作区其他改动保留,未提交或推送。
- App 定向命令 `npx vitest run src/renderer/src/App.test.tsx -t 'Supervisor|graph navigation'`:5 项通过、281 项未运行。刷新互斥及焦点收尾后,`SupervisorActivity.test.tsx`、`HeartbeatCenter.test.tsx`、`supervisor-service.test.ts` 合计 31 项通过;22 个相关 TS/TSX/MJS 文件的定向 ESLint 为 0 error、0 warning。
- 结束时间收尾:手动心跳使用真实报告完成时间,下游失败单独记录结束时间。`npx vitest run src/main/assistant/supervision-activity.test.ts src/main/assistant/heartbeat-service.test.ts src/main/assistant/heartbeat-database.test.ts src/main/assistant/supervision-history.test.ts`:4 个文件、21 项通过,新增受控时钟用例区分 10:00 开始、10:02 报告完成、10:03 下游失败。随后 Node typecheck 和这 3 个改动源码/测试文件的 ESLint 通过。
- 已存在的手动失败无法补回;旧心跳没有冻结范围和关联 ID,保留缺失提示。心跳仍按原保留期限清理,监督结果独立保存。取消和人工修改时间序列审计未实现;`no_change` 的后续接入见下节。
### 其他边界
- 来源读取对本地会话可精确定位到会话和时间;本地知识引用通过现有 `KnowledgeService` 解析文档/分块,失效时显示不可用;外部引用只使用已保存 locator,不调用远端全库。
- 继续讨论和知识库写入使用现有本地会话队列与知识库实体接口,并要求先预览、再由用户确认提交。侧栏已支持结果直达图谱,尚无可编辑的上下文预览。
- 关系移除保留撤销状态及原始来源;界面没有提供恢复入口。
- 候选集最多 100 个实体,复用依赖模型显式选择;不会自动合并历史重复实体或跨 scope 合并。结果级历史内容已保存,事件滑块仍不重建逐事件的实体演变。Experiment、完整图谱回放、`no_change`/取消状态尚未贯通生产链路。
- 候选集最多 100 个实体,复用依赖模型显式选择;不会自动合并历史重复实体或跨 scope 合并。结果级历史内容已保存,事件滑块仍不重建逐事件的实体演变。Experiment、完整图谱回放和取消状态尚未贯通生产链路。
## 2026-09-23 自动增量验证
对应 FR-S4、FR-S10、US-S27。自动心跳报告与下游监督均已接入来源版本和处理位置;无变化跳过模型并保存 `no_change`。消息修订、任务状态、知识引用变化分别参与增量判定,已确认记忆只作背景。实现、预算和删除语义见[自动增量收集](./technical-design.md#自动增量收集)。
- schema 46 增加最小来源进度与消息版本,扩展已有心跳状态 CHECK。来源片段进度与对应结果原子保存,模型或事务失败不推进。未送入模型的来源及正文余段保留待处理资格。
- `incremental-review.test.ts` 使用真实 SQLite 和生产服务,覆盖重开数据库、重复零调用、消息修订后复用实体 ID、105 个长来源分批读完、模型及结果事务失败、任务状态、范围排序、记忆背景、知识引用、报告保存失败和 schema 45 有数据升级。
- 真实模型使用已有加密默认文本配置,经 `RuntimeSettingsStore` 和 Electron `safeStorage` 读取隔离副本,生产 `createDefaultModelRuntime`、`HeartbeatService`、`SupervisorService` 和 SQLite 执行。`tests/incremental-review-live.electron.test.ts` 于本日通过:首次自动运行 2 次 HTTP 请求,重复自动运行 0 次,修改消息后的监督回顾 1 次,再次监督检查 0 次,总计 **3 次真实文本请求**。工具与附件均为 0。
- 真实输出通过结构、来源及实体引用校验,修改后的 Atlas 实体至少复用一个原持久化 ID;无变化检查前后图谱相同。测试检查原设置字节未变、外键与数据库完整性。隔离数据库、配置快照和加密 Local State 随测试目录删除,未改用户计划或数据库。
- 实时测试命令:设置 `GB_REVIEW_LIVE_SETTINGS` 为已有运行时配置路径后,执行 `npx vitest run tests/incremental-review-live.electron.test.ts`。无该环境变量时跳过;每次测试最多 3 个真实请求,不记录凭据。
- 最终聚焦验证:10 个服务、SQLite、Preload 和 Renderer 测试文件共 76 项通过;`npx vitest run src/main/ipc.test.ts -t 'supervision|heartbeat|application enable'` 另有 9 项通过,124 项按过滤条件跳过。`npm run typecheck`(Node、Agent、Web)和本次改动的 19 个 TypeScript 文件 scoped ESLint 均通过。
真实测试覆盖来源较短的单次自动回顾、重复检查及修改后的实体复用。长正文和大量来源预算由确定性 SQLite 回归验证;没有执行全量测试或真实用户数据库升级。事件驱动、清空或重建图谱和语义近似去重不在本次实现范围。
- 知识正文条目与监督实体仍是两个模型,当前不会把监督实体当作知识正文条目。
@@ -1,6 +1,6 @@
# 监督者应用产品设计
日期:2026-09-16。状态:目标设计已确认,尚未接入产品。
日期:2026-09-23。状态:工作回顾、图谱、活动和设置已接入;其余目标能力以[实施进度](./progress.md)为准。
本文定义监督者应用的定位、功能边界与知识库关系。[会话监督 PRD](./prd.md)继续负责对执行过程的观察、证据与介入边界;本文将该能力纳入更完整的工作回顾应用。
@@ -17,13 +17,17 @@
FR-S1:将现有智能心跳入口整合、升级为监督者,不增加另一个平级重复应用。当前通过应用中心管理;未来应用市场提供同一应用的发现与启用入口。市场建设不应成为监督者落地的前置条件。
FR-S2:应用包含“工作回顾”和“故事线图谱”两个主视图。设置管理关注范围、心跳计划、整理时机和反馈方式。原有计划、运行记录及用户启用、常驻偏好应保留;具体标识映射与数据迁移由后续技术设计确定,本轮不更名生产页面或存储字段。
应用默认关闭,用户显式启用后才接受新的回顾工作;关闭时保留计划和历史。默认值、已保存选择、自动运行条件及在途运行边界由[应用启停与执行](./logic-design.md#应用启停与执行)统一定义。
FR-S2:应用包含“工作回顾 / 故事线图谱 / 活动 / 设置”四个主视图。设置管理自动监督计划,活动展示实际执行及结果入口。原有计划、运行记录及用户启用、常驻偏好保留,继续使用既有应用和存储标识。
FR-S10:活动同时覆盖手动监督回顾、定时心跳及用户立即运行的心跳。每条记录显示触发方式、范围、开始与结束时间、运行状态、失败原因和已有结果入口。同一次心跳的报告和下游监督回顾合为一条活动,报告保存成功不能掩盖下游仍在运行或失败。自动输入没有变化时显示“无变化(未调用模型)”。活动读取不调用模型,关闭应用后不查询活动。当前不提供监督取消或人工修改的时间序列审计;历史缺失不得猜测补齐。
## 范围与触发
FR-S3:首次启用时选择项目、会话及可用来源,生成前显示范围和时间区间。应用启用不等于默认观察全部内容。已有心跳的 Global、单项目和多项目范围语义由[智能心跳 PRD](../smart-heartbeat/prd.md)定义,统一应用时保留。
FR-S4:支持手动回顾,并复用已有定时检查机制。每次整理只处理所选范围内的有界输入;无新增有效信息时不重复发送反馈。事件触发、阶段自动判定和增量整理策略尚待设计,不因 Agent 定位而默认获得工具执行能力。
FR-S4:支持手动回顾,并复用已有定时检查机制。自动报告和监督回顾分别只处理所选范围、回顾窗口内新增、修订或尚未处理的来源片段;没有待处理输入时跳过模型及结果生成。失败输入保留重试资格,预算遗漏不得记为已处理。手动回顾重新整理所选历史区间。具体规则见[自动增量与手动重看](./logic-design.md#自动增量与手动重看)。事件触发和阶段自动判定仍待设计。
FR-S5:会话右侧在跟随模式下展示当前会话的监督反馈;固定到 Conversation、Task 或 Experiment 时保持所选目标并显示其名称,切换聊天不改变监督目标。跨会话总结在完整应用中展示。反馈包含结论、来源和“在图谱中查看”定位入口。用户主动选择“发到当前会话”才加入聊天消息,同一结果不重复触发侧栏和全局通知。
@@ -45,6 +49,6 @@ FR-S9:来源事实、自动归纳、待核对关联和用户确认内容分别
首个完整流程为:启用监督者、选择范围、生成回顾、进入图谱、核对来源、携带选定上下文继续讨论。知识库双向定位与内容补充随后接入同一流程。图谱关系辅助检索需单独验证效果,不作为首版默认检索策略。
当前智能心跳已有计划和手动运行能力;会话监督仍在设计中;故事线图谱只有模拟数据 Demo;应用市场尚未实现。本文不构成这些目标能力已交付的证据。
当前工作回顾和图谱读取生产结果,活动展示实际执行与无变化检查,自动监督设置复用已有计划。完整图谱回放、用户取消及应用市场尚未实现,验收证据见[实施进度](./progress.md)。
具体 UI 与验收见[UI 设计](./ui-design.md)和[User Stories](./user-stories.md)。图谱对象与操作由[故事线图谱设计](../story-graph/prd.md)定义。技术设计仍需确定实体标识、来源定位、历史版本能力、计划兼容及增量整理方式。
具体 UI 与验收见[UI 设计](./ui-design.md)和[User Stories](./user-stories.md)。图谱对象与操作由[故事线图谱设计](../story-graph/prd.md)定义。已实现的实体身份和增量处理方式见[技术设计](./technical-design.md),来源旧版本能力仍受原应用限制。
@@ -4,12 +4,12 @@
| 项目 | 内容 |
| --- | --- |
| 状态 | 已接入结果定位、目标过滤及同 scope 候选身份复用;完整历史回放、无变化状态和取消语义仍未完成 |
| 状态 | 已接入自动增量、无变化状态、结果定位、目标过滤及同 scope 候选身份复用;完整历史回放和取消语义仍未完成 |
| 日期 | 2026-09-20 |
| 产品设计 | [监督者应用产品设计](./supervisor-prd.md) |
| 行为规则 | [监督者逻辑设计](./logic-design.md) |
| 界面设计 | [监督者 UI 设计](./ui-design.md) |
| 实施进度 | 共享契约、`SupervisorService`、SQLite schema 43、Preload IPC、定时投影、工作回顾、结果图谱、来源读取、实体/关系状态操作、会话继续讨论、知识库预览写入和目标侧栏已接入 |
| 实施进度 | 共享契约、`SupervisorService`、SQLite schema 46、Preload IPC、定时投影、工作回顾、活动、结果图谱、来源读取、实体/关系状态操作、会话继续讨论、知识库预览写入和目标侧栏已接入 |
本文回答如何在现有 GoodBuddy 桌面端中实现监督者。它不改变产品范围,也不把模拟 Demo 当作生产数据模型。
@@ -31,10 +31,32 @@ schema 43 在结果上增加 `graph_snapshot_json`,保存当次实体名称、
继续讨论入队时,无附件请求省略 `serializedContexts`;请求未指定 Runtime 时使用会话保存的选择。知识库预览与提交均检查目标库存在且为本地可写库,更新实体还检查其实际所属库。侧栏确认框展示 Main 返回的实体字段、目标库和来源正文,取消或写入失败后可以重新预览。
监督者 collector 将 UI 请求的 `timeRange` 原样传入 `buildHeartbeatInput` 的可选明确区间参数,查询时归一化为 UTC,不再换算成至少一小时。消息按 `from <= created_at <= to` 在 LIMIT 前过滤,会话也在 LIMIT 前检查存在区间内消息;所选项目复用现有存在且 active 的校验。任务在创建时间或完成时间落入闭区间时收集,证据时间优先使用区间内完成时间,否则使用创建时间;任务状态明确为当前状态,不还原区间结束时的状态。未传明确区间的普通 Heartbeat 保留原来的回顾窗口与下界查询行为。
手动监督 collector 将 UI 请求的 `timeRange` 原样传入 `buildHeartbeatInput` 的可选明确区间参数,查询时归一化为 UTC。消息按 `from <= created_at <= to` 在 LIMIT 前过滤,会话也在 LIMIT 前检查存在区间内消息;所选项目复用现有存在且 active 的校验。任务在创建时间或完成时间落入闭区间时收集,证据时间优先使用区间内完成时间,否则使用创建时间;任务状态为当前状态。手动心跳保留原有收集行为;自动运行使用下节的增量查询。
已确认记忆作为当前背景收集,不受事件时间区间筛选;`occurredAt` 使用数据库 `updated_at`,locator 保存真实创建、更新时间及 `current-background` 标识。模型指令禁止将当前记忆内容推断成历史时点的内容或区间事件。记忆没有历史内容快照;本次修复不增加历史还原能力,也不追溯修正已有监督结果。既有会话、消息、任务及总证据预算继续生效,严格时间筛选不代表区间内所有记录都会进入摘要。
## 自动增量收集
对应 FR-S4、FR-S10 和 US-S27,行为定义见[自动增量与手动重看](./logic-design.md#自动增量与手动重看)。schema 46 在现有数据库增加 `review_checkpoints`,主键为阶段、规范化 scope 和来源标识,保存版本指纹、已处理位置和来源长度。来源标识区分消息 ID、任务 ID 和消息内知识引用位置,不使用消息时间戳作为身份。
消息正文写入时由 SQLite trigger 更新轻量 `review_revision`;范围、标题、角色和时间共同参与版本指纹。任务标题、状态、创建和完成时间,以及知识引用内容或定位变化分别使对应来源待处理。工具执行元数据更新不会把未修改的消息正文再次标为新增。删除来源时清理其进度。原始消息不复制到进度表;自动查询先排除已处理版本,再读取待处理片段,不重新载入每个会话的历史正文。
查询按来源时间和 ID 排序,在过滤之后取最多 100 个来源,每个来源每轮读取后续最多 2,000 个 Unicode 字符。自动心跳新证据正文预算为 12,000 个 JS 字符,监督为 44,000;最多四条各 500 字符的已确认记忆和最近 2,000 字符摘要提供背景,监督仍执行 100 条及 48,000 字符证据上限。自动路径取消“只取最新 20 个会话、每会话最新 20 条”的预筛选,预算遗漏和长正文剩余部分留到后续检查。已超出下一次滚动窗口的来源不会自动扩大范围读取。
只有实际送入模型、通过结果校验且成功落库的完整片段推进位置。心跳报告及其进度、监督结果及其进度分别在各自 SQLite 事务提交。监督服务串行执行,后续自动请求在前次保存后重新收集。报告成功而监督失败时,下一次自动检查跳过已成功的报告输入,但重试监督输入;无变化不创建报告、来源或图谱事件。
已有同 scope 故事线的 scope 表示和实体 ID 保留;比较项目集合时忽略排序。模型接收最近摘要和同 scope 最多 100 个未撤销实体的 ID、名称、说明,显式返回 `persistedId` 才复用。不同范围不合并,已有重复实体不自动修复。知识引用继续以独立来源保存 locator;当前记忆和旧摘要不作为新事件。
迁移在事务中扩展心跳计划及运行表的状态 CHECK,保留列、索引、ID、计划、报告与引用;消息版本列使用默认值,无需遍历或重写旧正文。进度初始为空,首次自动运行从配置窗口开始。报告保留期限覆盖 `no_change` 运行,但不删除来源进度;删除报告不触发重新消费。
## 活动读取与执行持久化
对应 FR-S10、US-S26。schema 45 在既有 `supervision_runs` 增加可空 `heartbeat_run_id` 和唯一索引,在 `heartbeat_runs` 增加执行范围、下游投影状态、错误及结束时间字段。迁移保留原记录,不补造旧关联。监督服务通过 store 的 start/fail 接线记录执行,保存结果事务更新同一 run;不增加调度器。心跳在执行前记录冻结范围和投影进度,报告事务仍保持原有含义,下游失败单独保存。手动心跳在生产路径使用实际结束时间,活动等待下游结束后才显示整次执行的结束时间。
`supervision:activity` 沿用可信 sender 与 Zod 输入校验,接受 `limit`(1 至 100,默认 50)和 `offset`(0 至 100000)。应用未启用时返回空列表且不访问活动表。SQL 合并心跳及未关联的监督记录,关联查询使用运行 ID;返回状态、阶段、范围、时间、错误、摘要和 resultId,不调用模型。保留规则和历史缺失见[活动记录](./logic-design.md#活动记录)。
Preload 暴露类型化 `supervision.activity()`。`overview({ resultId })` 支持按 ID 读取历史回顾,供活动跳转使用。Renderer 只在活动页签和 heartbeat 路由同时激活时串行定时读取,每次有界分页;effect 清理撤销定时器并使旧响应失效。App 关闭应用时卸载页面;读取没有执行副作用。该改动位于桌面 Main/Renderer,未修改 Agent 或远程 Runtime 协议。
## 1. 总体方案
监督者作为 Main 进程中的一个领域服务,复用现有智能心跳的计划、运行领取、租约、重试和有界模型调用。图谱是监督者整理结果的查询视图,知识库继续拥有资料正文、索引和检索。
@@ -76,6 +98,10 @@ flowchart LR
## 2. 运行路径
应用启停遵守[逻辑规则](./logic-design.md#应用启停与执行)。`ApplicationSettingsStore` 对新设置及缺失的 `heartbeatEnabled` 使用 `false`,保留显式布尔值。Main 在心跳 tick 调用 `processDue()` 前、`heartbeatsRunNow` 与 `supervisionRun` IPC 入口、心跳完成后的监督回顾回调中读取已保存设置,只有值为 `true` 才继续。此检查不取消已领取运行,也不改变普通任务调度链路。Renderer 由 App 将同一启用状态传入 `RightAssistantSidebar`,控制监督面板挂载。
设置默认选中既有 `plans` 面板,直接渲染 `HeartbeatSettings`,沿用 App → Preload → Main 的计划 CRUD 接线。`heartbeatRecurrenceSchema` 与 `computeNextHeartbeatRun` 仅支持 daily/weekly;本轮不增加分钟间隔合同或调度分支。编辑草稿保存已有 `timezone` 和 `enabled`,新建仅在显式提交时使用本机时区创建启用计划。UI 命名统一为自动监督,内部 ID、翻译键、数据库及 IPC 名称保留。
手动回顾和心跳回顾必须经过同一个 `SupervisorService.run()`,只在触发来源上区分。这样可以保证两者使用相同的范围校验、输入预算、输出契约、结果状态和来源处理。
```mermaid
@@ -94,16 +120,16 @@ sequenceDiagram
S->>M: 结构化整理请求,禁止工具
M-->>S: validated result
S->>D: 事务写入 result、events、entities、relations、references
D-->>S: completed / no-change / partial
D-->>S: completed
S-->>R: 状态和定位信息
```
运行状态与内容确认状态分开保存:
- 运行状态:`pending`、`claimed`、`completed`、`no_change`、`partial`、`failed`、`cancelled`。
- 当前监督运行状态:`running`、`completed`、`failed`、`no_change`。心跳及合并活动的映射见[活动记录](./logic-design.md#活动记录)。
- 内容状态:来源事实、自动归纳、待核对、用户确认、用户修订、已移除关系。
- 运行成功只表示模型结果已按契约保存,不表示所有实体和关系已经被用户确认。
- 失败或取消保留上次成功结果;部分结果必须带覆盖范围和遗漏原因。
- 失败保留上次成功结果;取消和部分完成仍未接入生产状态。
## 3. 数据模型
@@ -157,8 +183,8 @@ erDiagram
| 通道 | 用途 |
| --- | --- |
| `supervision:overview` | 工作回顾、运行状态、未解决事项和最近结果 |
| `supervision:run` | 手动开始一次整理,返回运行 ID |
| `supervision:cancel` | 取消当前运行 |
| `supervision:run` | 手动开始一次整理,完成后返回包含 runId 的结果 |
| `supervision:activity` | 有界读取真实执行和阶段状态 |
| `supervision:graph` | 按故事线、时间区间和回放时刻分页读取图谱 |
| `supervision:object` | 读取事件、实体、关系及来源详情 |
| `supervision:confirm` | 确认、修订或移除自动关系和实体变化 |
@@ -175,7 +201,7 @@ IPC 返回图谱查询结果时使用分页和有界字段;详情中的来源
- 监督者模型调用固定为 `ask` 语义,输入来自 `EvidenceCollector` 的有界快照,工具授权始终拒绝。
- `Global`、Project、多项目和固定 Conversation/Task/Experiment 目标在 Main 冻结;模型不能生成或改变范围。
- 每个来源引用必须属于本次冻结范围,跨范围引用、伪造项目 ID 和不存在的来源 ID 直接使结果失败。
- 心跳运行沿用现有 `heartbeat_runs` 的领取、租约、重试和取消机制;监督者运行 ID 与心跳运行 ID 建立一对一关联,不复制另一套调度状态。
- 心跳运行沿用现有 `heartbeat_runs` 的领取、租约和重试机制;新增监督运行按心跳运行 ID 关联,活动据此合并阶段。没有新增取消协议。
- 同一配置同时触发手动和定时运行时,沿用现有幂等键和运行领取规则;已完成结果不能重复写入。
- 用户确认或修订后的实体、关系不被后续整理静默覆盖;新证据以补充或冲突待核对状态写入。
- 外部知识库只读。图谱可以引用保存到本地的外部片段和定位信息,不调用远端写入、不承诺打开远端原文。
@@ -241,5 +267,5 @@ IPC 返回图谱查询结果时使用分页和有界字段;详情中的来源
- 实体与关系 revoke 保存状态;界面没有 undo 或恢复入口。
- 跨 run identity 依赖同 scope 候选 UUID 的显式引用,不自动合并历史重复实体;模型漏选候选时会创建新身份。
- 结果图谱使用真实事件实体连线,侧栏已按固定目标过滤并支持结果直达图谱;逐事件状态回放和 Experiment 尚未实现。
- `no_change`、用户取消及其旧结果保留尚未贯通监督运行的生产状态链路。
- 用户取消及其旧结果保留尚未贯通监督运行的生产状态链路;自动 `no_change` 见[自动增量收集](#自动增量收集)。
- 监督知识实体与知识库正文条目仍是不同对象,知识正文只能通过现有条目定位和预览接口处理。
@@ -4,9 +4,25 @@
## 应用入口
应用中心中的智能心跳入口升级为“监督者”,沿用既有启用、常驻与排序能力。未来应用市场使用同一应用身份。用户停用自动心跳时仍可手动回顾;停用应用时明确说明关联自动计划的处理,既有结果仍保留。停用与运行中任务的具体行为需在逻辑设计中确定。
应用中心中的智能心跳入口升级为“监督者”,沿用既有启用、常驻与排序能力。未来应用市场使用同一应用身份。应用已启用时,停用单条自动心跳计划仍可手动回顾;关闭应用后,已打开页面显示关闭状态并禁用工作区操作。默认值及运行边界见[应用启停与执行](./logic-design.md#应用启停与执行)。
当前应用页使用共享 PageTabs 展示“工作回顾 / 故事线图谱 / 设置”。设置保留自动唤醒概览、建议、报告与记录、计划配置。整个页面只有一个一级标题;监督者 bridge 不可用时显示明确错误,设置仍可访问,不回退到旧心跳概览。
当前应用页使用共享 PageTabs 展示“工作回顾 / 故事线图谱 / 活动 / 设置”。打开设置直接显示“自动监督”配置;同级次要页签为“运行概览 / 待处理建议 / 报告与记录”。整个页面只有一个一级标题;监督者 bridge 不可用时显示明确错误,设置仍可访问,不回退到旧心跳概览。
## 活动
对应 FR-S10、US-S26。活动按开始时间倒序,每页 50 条,提供较新/更早记录和刷新。列表保留触发方式、执行范围、开始/结束时间、实际状态、阶段状态、错误及已保存摘要。没有结果时不显示结果按钮;有监督结果时可分别进入该结果的工作回顾和故事线图谱,焦点移到目标页签。超过最近 20 条的结果仍按 ID 读取,不能回退最新结果。
加载、空记录和读取失败分开显示;读取失败保留已显示记录并提供就地重试。活动页面激活时,存在运行中记录则在上次读取结束 2 秒后刷新,否则 10 秒后刷新;每次最多一个请求。切换顶层页签、离开监督者或关闭应用后停止定时器,迟到响应不更新界面。错误后等待用户重试,不持续重发失败查询。
列表使用共享表面、边框、状态颜色和按钮。元数据按可用宽度换行,窄窗口保留字段标签、范围、时间和结果操作;长错误换行。状态同时使用文字。无变化显示“无变化(未调用模型)”,没有新结果跳转;阶段分别显示,旧回顾仍可从历史打开。修改审计缺失常显,不提供取消操作。
## 自动监督设置
对应 US-S22 至 US-S24。表单直接展示名称、项目范围、每日或每周频率、指定时间、回顾窗口(1 至 720 小时)和历史保留(1 至 365 天);每周显示星期选择。时区常显,新建使用本机时区,编辑保留计划原时区。当前调度不支持分钟间隔,限制在表单上方常显。
无计划时显示“尚未配置自动监督,目前仅支持手动回顾”;全部暂停时另行说明。加载或首次读取失败不显示未配置状态。打开设置、填写字段、启用应用均不创建计划,只有点击“保存并启用计划”才提交创建。已有计划显示范围、周期、时区、回顾窗口、保留期限和启停状态,保留编辑、暂停、恢复、立即运行和确认删除;暂停时不显示待执行的下次时间。
界面及可访问名称统一使用“自动监督 / 回顾”,保留内部 heartbeat 标识及已有计划名称、报告正文。表单继续使用共享控件和容器响应式布局,建议及审计无需先进入即可配置计划。
## 工作回顾
@@ -14,10 +30,12 @@
选择历史结果后,图谱读取该结果的成员和内容,标题显示其回顾区间和生成时间。切换时清空旧图谱和详情并显示加载状态,迟到请求不得替换新选择。确认、修订和移除反馈更新当前所选结果,后续自动回顾不改写旧结果。
手动“回顾当前进展”是主要操作,生成中禁用重复提交并显示进行中文案。失败保留上次结果与本次请求范围,提供重试。取消、无变化结果与部分来源遗漏的专门状态仍属于目标设计,未在当前界面承诺。
手动“回顾当前进展”是主要操作,生成中禁用重复提交并显示进行中文案。范围说明明确此操作会重新整理所选区间内已回顾的来源,自动监督只处理新增或修改片段;删除报告不会重置自动进度或重建图谱。失败保留上次结果与本次请求范围,提供重试。取消和部分来源遗漏的专门状态仍属于目标设计。
## 会话侧栏
仅在应用已启用时挂载监督面板及固定目标控件;关闭或设置尚未加载时不挂载,也不发起面板查询。任务列表仍按原规则显示。
右侧通用助手工作栏中的监督卡片展示“监督反馈”,沿用现有[工作栏设计](../assistant-workbar/prd.md)的布局和执行边界。当前支持 Conversation/Task:有选中任务时跟随任务,否则跟随会话;“固定监督目标”保存当前目标,切换聊天后保持,取消固定恢复跟随。卡片显示目标、结果真实范围、回顾区间和摘要,可刷新并查看匹配来源;无目标或无匹配结果显示空态。Experiment 尚未接入。
有匹配结果时提供“在图谱中查看”,打开现有监督者页面的图谱页签并读取该结果;无匹配结果不显示入口。按钮保留原生键盘操作,进入后焦点落在图谱页签,继续使用共享 PageTabs 的方向键导航。固定目标不因跳转改变;再次点击相同或不同结果均重新定位,包括页面缓存后再次进入。结果不可用时显示错误并重试原 ID,不展示默认最新结果。
@@ -43,7 +43,7 @@
### US-S14 从应用中心进入唯一的监督者
**状态:待实现,沿用已实现的智能心跳应用入口。**
**状态:应用入口与启停已接入,完整验证范围见[实施进度](./progress.md)。**
作为用户,我希望监督者只有一个稳定入口,不需要在智能心跳、任务中心和设置中心之间寻找重复配置。
@@ -51,9 +51,14 @@
| Given | When | Then |
| --- | --- | --- |
| 用户打开应用中心 | 选择智能心跳入口 | 进入监督者统一页面,未来显示为监督者名称 |
| 用户打开应用中心 | 启用应用后选择智能心跳入口 | 进入监督者统一页面,未来显示为监督者名称 |
| 用户已有智能心跳计划 | 应用入口升级 | 计划、运行记录、报告、建议和启用偏好仍可访问 |
| 用户打开任务中心或设置中心 | 查找心跳配置 | 不出现第二套计划 CRUD;需要时只提供进入监督者的链接 |
| 新安装或设置缺失应用启用值 | 启动应用 | 监督者关闭;已有显式开启或关闭选择保留 |
| 应用已启用但没有已保存且启用的计划 | 等待自动调度 | 不自动创建计划或运行回顾 |
| 已有心跳运行被领取并正在执行 | 关闭应用 | 该运行可完成并保存;不再接受新运行或追加自动监督回顾,侧栏不挂载或查询监督面板;普通任务定时调度不变 |
以上启停验收遵守[应用启停与执行](./logic-design.md#应用启停与执行)。
**界面行为**
@@ -82,7 +87,7 @@
- 计划卡片显示 Global 或完整项目摘要;项目过多时显示数量并保留可访问的完整名称。
- 当前项目切换不会重新解释计划卡片的范围。
### US-S22 管理心跳计划
### US-S22 配置自动监督
**状态:已实现。**
@@ -92,8 +97,11 @@
| Given | When | Then |
| --- | --- | --- |
| 用户进入心跳计划 | 创建计划 | 表单要求名称、范围、每日/每周规则、本地时间、时区、回顾窗口和保留期限 |
| 用户打开监督者设置 | 查看默认内容 | 直接显示自动监督表单,包含名称、项目范围、每日/每周频率、指定时间、时区、回顾窗口和保留期限;说明不支持分钟间隔 |
| 应用已启用但没有计划 | 打开设置或填写字段 | 显示“尚未配置自动监督,目前仅支持手动回顾”,不自动保存、创建计划或发起运行 |
| 用户完成配置 | 点击保存并启用计划 | 保存明确选择的频率、时间、范围和期限,参与既有调度 |
| 用户编辑已有计划 | 修改字段并保存 | 计划卡片显示新配置、下次运行和上次状态 |
| 已有计划暂停且时区与本机不同 | 编辑并保存 | 保留已暂停状态及原时区,不隐式恢复或改变执行时间 |
| 用户开始编辑 | 点击取消编辑 | 草稿丢弃,恢复编辑前的计划值 |
| 保存失败 | 提交表单 | 草稿保留,错误就地显示,用户可以修正后重试 |
@@ -102,7 +110,7 @@
- 表单标签始终可见,不能用 placeholder 代替。
- 每次操作期间禁用重复提交和相互冲突的按钮。
- 周期选择为 weekly 时才显示星期字段。
- 时间以用户本地时区保存并展示;范围和状态不能只依赖颜色。
- 新建使用本机时区,编辑保留原计划时区,表单与计划摘要常显时区;范围和状态不能只依赖颜色。
### US-S23 暂停、恢复或立即运行计划
@@ -508,6 +516,36 @@
- 权限不足、来源不可用和没有新内容使用不同状态。
- 监督者的 Agent 身份不自动获得工具执行、批准或切换 Execute 的能力。
## 活动记录
### US-S26 查看实际执行活动
对应 FR-S10,当前已接入。
| Given | When | Then |
| --- | --- | --- |
| 用户手动开始监督回顾 | 打开活动 | 显示冻结范围、开始时间和运行中状态;失败保留错误,成功提供结果入口 |
| 定时或立即运行心跳已保存报告 | 下游监督仍在运行或失败 | 一条活动分别显示阶段状态,整体不能显示完成 |
| 活动包含较早的成功结果 | 点击查看回顾或在图谱中查看 | 打开该 resultId,超过最近结果列表仍正确定位 |
| 活动读取失败 | 点击重试 | 保留可用记录并重新读取,不调用模型 |
| 活动有在途请求 | 离开页签、页面或关闭应用 | 停止后续刷新,迟到响应不更新界面;关闭后不查询活动 |
| 旧记录缺少范围或运行关联 | 查看活动 | 明确显示缺失,不根据当前计划或相近时间推断 |
取消和人工修改时间序列审计不属于当前已实现范围;实际状态及保留规则见[活动记录](./logic-design.md#活动记录)。
### US-S27 自动增量与历史重看
对应 FR-S4、FR-S10。
| Given | When | Then |
| --- | --- | --- |
| 自动报告和监督已成功处理窗口内来源 | 同范围再次自动检查且来源未修改 | 两阶段均不调用模型,活动显示无变化,不新增报告和图谱事件 |
| 消息正文、知识引用或任务状态有修改 | 再次自动检查 | 只处理修改版本及未读片段,结合已有摘要和实体说明,允许复用已有实体 ID |
| 来源多于单次预算或正文较长 | 一次结果成功保存后再次检查 | 继续处理窗口内遗漏或剩余片段,已送入且保存成功的部分不重复处理 |
| 模型、校验或保存失败 | 再次检查相同输入 | 失败阶段仍可重试;已成功的另一个阶段不重复付费 |
| 来源已经自动处理 | 用户手动回顾所选区间 | 重新整理有界历史,保留自动进度;删除报告不等同重看或重建 |
| 只有已确认记忆或背景摘要变化 | 自动检查 | 背景不单独触发模型调用 |
## 验收优先级与依赖
首个可用版本应先打通以下路径:
@@ -516,11 +554,11 @@
建议实施顺序:
1. 保持现有智能心跳四个页签、计划 CRUD、范围校验、报告和审计行为不回归。
1. 设置默认显示自动监督配置,保留运行概览、建议、报告和审计面板,以及计划 CRUD 与范围校验。
2. 增加监督者统一的工作回顾和共享结果模型。
3. 接入最小故事线图谱:时间事件、知识实体、实体变化、来源和时间回放。
4. 接入文字列表、窄屏和键盘操作,以及失败、取消和部分来源状态。
5. 接入来源双向定位、继续讨论预览和本地知识库新建/补充。
6. 最后接入侧栏监督反馈、增量整理和自动静默判定。
6. 侧栏监督反馈和自动增量已接入;事件驱动及语义层面的主动反馈判定仍待实现。
详细状态规则见[逻辑设计](./logic-design.md),页面结构和共享组件见[UI 设计](./ui-design.md),现有智能心跳的已实现范围见[智能心跳 PRD](../smart-heartbeat/prd.md)。