feat: add supervisor workspace and traceable story graph
Extend the existing heartbeat workspace with scoped work reviews, result-specific story graphs, source inspection, and pinned conversation or task feedback. Connect confirmed continuation and local knowledge entity previews through the desktop APIs, and preserve result history and user corrections in schema 43. Include focused regression tests, an isolated visual fixture, and implementation evidence. Full event-by-event replay, Experiment targets, no-change handling, and cancellation remain incomplete; this commit does not claim complete feature acceptance. Existing automatic plans remain active when the application entry is disabled. Release note: Review work progress in the Supervisor workspace, trace graph events to saved sources, and open a matching review from pinned conversation or task feedback.
This commit is contained in:
@@ -107,6 +107,8 @@ Runtime
|
||||
使用门槛:
|
||||
|
||||
- 监督默认选择当前会话,用户可以改选其他 Conversation、Task 或实验对象。
|
||||
|
||||
当前监督卡片已支持 Conversation/Task 跟随与固定,绑定保存在 tasks 实例的 `targetRef`;绑定只影响监督卡片,任务列表继续跟随当前项目。实现范围与验证见[监督者进度](../conversation-supervision/progress.md)。实验对象仍属后续工作。
|
||||
- Runtime 默认跟随当前会话或 Task;执行事件可以查看,但 Job/Run 不作为独立选择对象。
|
||||
- 终端创建时固定到当前项目执行空间,由项目配置自动决定本机或托管 SSH;没有当前项目时
|
||||
使用本机 Home。
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 监督者与会话监督
|
||||
|
||||
监督者的目标设计统一工作回顾、会话监督与故事线图谱,以智能心跳作为定时唤醒机制。计划将已有智能心跳入口升级为监督者,避免新增重复应用。当前会话监督尚在设计中,图谱仅有模拟原型,统一应用尚未接入产品。
|
||||
监督者统一工作回顾、会话监督与故事线图谱,以智能心跳作为定时唤醒机制。现有智能心跳页面承载监督者工作回顾入口,手动回顾、定时结果投影、来源原文、实体/关系确认、继续讨论、知识库预览提交和侧栏反馈已经接入。历史回顾定位到对应结果图谱;侧栏按会话或任务查询,并支持固定目标。同 scope 的跨 run 实体复用依赖 Main 提供的候选 UUID,具体规则和验证边界见[实施进度](./progress.md)。
|
||||
|
||||
## 文档导航
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
| [UI 设计](./ui-design.md) | 应用导航、工作回顾、侧栏反馈及页面状态 |
|
||||
| [User Stories](./user-stories.md) | 监督者与故事线图谱的用户操作和验收场景 |
|
||||
| [技术设计](./technical-design.md) | Main/Renderer 分层、数据模型、IPC、安全边界和实施顺序 |
|
||||
| [实施进度](./progress.md) | 已验证实现、验证证据和当前边界 |
|
||||
| [故事线图谱设计](../story-graph/prd.md) | 图谱对象、环绕时间轴与实体交互 |
|
||||
|
||||
统一应用尚未接入产品,实施状态仍以代码和后续进度文档为准。逻辑待定项见[逻辑设计](./logic-design.md),实施边界与阶段见[技术设计](./technical-design.md)。现有心跳行为见[智能心跳](../smart-heartbeat/README.md),原型范围见[Story Graph 演示](../story-graph/README.md)。
|
||||
实施状态以代码和[实施进度](./progress.md)为准。逻辑待定项见[逻辑设计](./logic-design.md),架构边界见[技术设计](./technical-design.md)。现有心跳行为见[智能心跳](../smart-heartbeat/README.md),原型范围见[Story Graph 演示](../story-graph/README.md)。
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 监督者逻辑设计
|
||||
|
||||
日期:2026-09-16。状态:目标设计,尚未接入产品。图中的连线表示逻辑依赖与数据流,不代表已实现的调用接口或数据库结构。
|
||||
日期:2026-09-23。状态:部分规则已接入产品,验证范围见[实施进度](./progress.md)。图中的连线表示逻辑依赖与数据流,不代表所有目标接口均已实现。
|
||||
|
||||
本文承接[监督者产品设计](./supervisor-prd.md)、[故事线图谱设计](../story-graph/prd.md)和[User Stories](./user-stories.md),定义触发、整理、展示与用户后续操作之间的关系。既有会话监督的证据和介入边界继续由[会话监督 PRD](./prd.md)约束。
|
||||
|
||||
@@ -71,6 +71,8 @@ flowchart TB
|
||||
|
||||
工作回顾、监督反馈和图谱引用同一次整理的结论与来源。展示可以裁剪为阶段摘要、会话卡片或图形,但不能分别维护相互矛盾的结论。一次整理可以没有图谱变更,也可以有整理结果但无需主动通知。
|
||||
|
||||
结果定位以结果 ID 为准。历史选择不能回退到其他项目的最新图谱;侧栏需同时匹配目标来源和范围,没有匹配结果时显示空态。固定目标失效时保留目标并显示读取错误,用户可取消固定。跨 run 仅允许引用同 scope 的 Main 候选实体,模型局部 ID 和同名均不构成身份。每次结果保留当次描述,自动更新不得改写已确认字段或其他结果;人工修改仅更新当前对象与明确选定的结果。
|
||||
|
||||
应用维护来源正文;监督者维护其产生的阶段总结、事件关联、实体描述与关系。图谱是这些对象的视图。图中“纠正”只更新整理内容或关系,修改来源正文仍需进入对应应用的编辑流程。
|
||||
|
||||
## 图谱对象关系
|
||||
@@ -119,7 +121,7 @@ flowchart LR
|
||||
| L4 失败 | 取消、失败或部分来源不可用 | 保留上次成功结果;显示当前运行状态、已覆盖与遗漏范围,支持重试;部分结果不标为完整 | FR-S6;US-S12 |
|
||||
| L5 纠正 | 用户修改描述或确认关系 | 后续自动整理提出补充或修订建议,不静默覆盖用户内容;移除关系可撤销且不删除来源 | FR-S6、S9、FR-G4;US-S06、S10 |
|
||||
| L6 历史 | 选择过去时刻或时间区间 | 使用当时已有的事件与认识;来源旧版不可恢复时提示,不以当前原文冒充旧版 | FR-S9、FR-G3、G5;US-S05、S07、S13 |
|
||||
| L7 目标 | 侧栏跟随或固定 | 跟随时显示当前会话,固定时保持所选目标;切换聊天不改变固定目标 | FR-S5;US-S02 |
|
||||
| L7 目标 | 侧栏跟随或固定 | 跟随时显示当前会话,固定时保持所选目标;切换聊天不改变固定目标 | FR-S5;US-S25 |
|
||||
| L8 沉淀 | 用户选择写入知识库 | 先预览并确认,再新建或补充本地条目;已有条目提供打开入口,外部引用保持只读 | FR-S7、S8;US-S08、S09 |
|
||||
| L9 继续 | 用户选择继续讨论 | 预览并确认上下文后进入会话;新内容在后续整理时纳入,不立即作为已确认知识 | FR-S3、S5;US-S11 |
|
||||
| L10 展示 | 改变布局或输入方式 | 保留范围、回放时刻及选择;图形和文字列表访问相同对象与来源 | FR-G2、G5、G6;US-S15 |
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
# 监督者实施进度
|
||||
|
||||
日期:2026-09-23。
|
||||
|
||||
当前记录以已验证生产行为为准。监督者尚未覆盖全部 user stories。
|
||||
|
||||
## 已验证
|
||||
|
||||
- 共享监督者契约已接入 Main 服务,模型请求包含系统指令;证据总字符预算为 48,000,输出仍限制为 100KB,并校验本次证据集内的来源引用、输出局部实体 ID 和关系端点。手动回顾当前收集会话、任务、消息已有的知识引用和已确认记忆;记忆使用 `memory` 来源类型。
|
||||
- SQLite schema 43 包含监督运行、结果、来源、故事线、事件、实体、实体关联和关系表,并保存每次结果的实体与关系内容。来源保存本地 library/document/chunk 或外部 locator 元数据;持久化与升级规则见[技术设计](./technical-design.md)。
|
||||
- 监督者入口现在只有一个页面页头和三项顶层页签:工作回顾、故事线图谱、设置。原有计划、概览、建议、历史和审计内容保留在设置页内部;手动运行仍通过 Supervisor 通道,未绑定自动计划时也可用。
|
||||
- 工作回顾显示结果自身冻结的 scope/time range。故事线视图使用真实数据库结果,外围事件按实际时间逆时针排列并保留缺口,事件实体连线和来源过滤来自 Main 查询投影,图形不可用时仍可通过事件/实体/关系列表操作。
|
||||
- `HeartbeatService` 在定时或手动心跳成功落库后调用同一个 `SupervisorService`,按心跳范围和回顾窗口自动保存监督结果;投影失败不会改写已经成功的心跳状态。
|
||||
- 监督图谱提供 Main/Preload IPC 的来源读取、实体确认/修订/撤销和关系确认/移除;关系移除保存 `revoked` 状态,不删除来源,后续自动 run 不恢复相同身份的关系。
|
||||
- 右侧助手栏已读取监督反馈,支持来源查看、继续讨论预览与确认发送,以及本地知识库实体写入预览和确认提交。
|
||||
- 本地会话来源可按会话 ID 和发生时间读取上下文;没有当前会话时,继续讨论操作明确禁用。
|
||||
- 应用中心已增加监督者开关,继续复用 `heartbeat` 导航 ID;关闭后已打开页面显示关闭状态并禁用工作区操作,不删除既有心跳计划或历史数据。导航显示同时遵守 enabled 和 pinned 语义。
|
||||
|
||||
## 验证证据
|
||||
|
||||
- `npx vitest run src/renderer/src/SupervisorWorkspace.test.tsx src/renderer/src/HeartbeatCenter.test.tsx`:17 个测试通过,覆盖统一页签、无计划手动回顾、加载状态、图谱真实连线与来源过滤。
|
||||
- `npx vitest run src/main/assistant/supervisor-service.test.ts src/main/assistant/assistant-database.test.ts src/main/application-settings-store.test.ts src/renderer/src/ApplicationCenter.test.tsx`:166 个测试通过。
|
||||
- `npm run typecheck`:通过。
|
||||
- `npm run lint`:通过。
|
||||
- `git diff --check`:通过;仅有现有文件的行尾转换提示。
|
||||
|
||||
### 2026-09-23 页面与视觉验证
|
||||
|
||||
- 生产页面按 [UI 设计](./ui-design.md) 使用三栏工作台、真实实体名称、逆时针事件环、实际关联连线、选中强调与来源详情。颜色复用现有图谱令牌,未修改全局主题。密集数据按批显示,列表保留全部返回记录;事件浏览不还原历史实体状态。
|
||||
- 设置只保留一个一级标题,缺少监督者 bridge 不再回退旧概览;无计划手动回顾、项目/时间范围、来源关联过滤均有组件回归。来源异步读取期间切换事件时,迟到正文不会出现在无关联事件下。
|
||||
- `npx vitest run tests/supervisor-layout.electron.test.ts src/renderer/src/SupervisorWorkspace.test.tsx src/renderer/src/HeartbeatCenter.test.tsx src/main/assistant/supervisor-service.test.ts src/main/assistant/assistant-database.test.ts`:134 项通过。Main 测试使用隔离数据库和注入摘要器;视觉入口渲染生产 React 组件,未读取真实用户数据或调用付费模型。
|
||||
- Electron 实测 1440、1024、390px 与浅深主题,页面、壳层和内容容器均无横向溢出;1440px 三栏实测为 216 / 863 / 280px。窄屏画布内部滚动保留可读字号,缩放后 SVG 文字不低于 11px;另验证 9 个容器临界宽度、长标题、80 个同时间事件、40 个实体、来源详情、设置表单、加载/空/错误/缺 bridge 状态。
|
||||
- 截图与 `measurements.json` 输出到本次指定的临时目录 `opencode/supervisor-visual`。代表文件为 `selected-source-1440.png`、`light-1024.png`、`light-390.png`、`dark-1440.png`、`dense-selected.png`、`selected-source-390.png`、`settings-plans-390.png`。可复用的验证和交互预览入口见 UI 设计末段。
|
||||
- 全量 `npm test`:416 个文件通过、9 个跳过、1 个失败;4902 项通过、67 项跳过、1 项失败。失败为 `local-runtime-reuse.test.ts` 的十项目 OpenCode 压缩断言(`compacted: false`),单独复跑该文件的 2 项均通过。本次未改动 Runtime 实现,未将这次全量运行记为全绿。
|
||||
- 页面收尾后重新执行 `npm run typecheck`、`npm run lint` 通过。App 已在上述全量测试中通过;一次包含 App 的额外定向命令超过终端 120 秒限制,随后缩小到上述 5 个相关文件完成验证。
|
||||
|
||||
## 当前边界
|
||||
|
||||
### 2026-09-23 Main 与侧栏定向修复
|
||||
|
||||
- 已修复:继续讨论不再把数组写入要求字符串的 `serializedContexts`;请求省略 Runtime 时复用会话选择。真实 SQLite 入队后,生产队列解析器成功派发请求。
|
||||
- 已修复:每次结果独立分配实体和来源 UUID,映射事件、关系、实体变化及来源引用。两次重叠 run 和跨项目相同模型 ID 均有 SQLite 回归,用户修订的名称和说明保留,所有结果均可读取自己的来源及 locator。schema 41 升级并重复打开后保留旧记录和确认状态。
|
||||
- 已修复:知识库预览与提交均检查本地库及实体所属库;侧栏确认框展示实际返回内容,取消与写入失败后可重新预览。测试覆盖真实本地实体读写,外部只读及提交前归属变化由注入状态验证。
|
||||
- 定向验证:`npx vitest run src/main/assistant/assistant-database.test.ts src/main/ipc.test.ts src/renderer/src/RightAssistantSidebar.resize.test.tsx src/main/assistant/supervisor-service.test.ts -t 'supervision|shares bounded evidence'`,4 个文件中选中的 9 项通过,其余 289 项未运行。本轮未运行全量测试、typecheck、lint 或真实模型请求;前文历史验证不能代替本轮验证。
|
||||
- 当时未修复的双边时间范围及记忆背景语义已由下节定向修复覆盖。跨 run 实体识别由本轮候选身份实现补齐;旧实现已经覆盖或忽略的历史内容无法从现有记录自动还原。
|
||||
|
||||
### 2026-09-23 第 4 问题:双边时间范围
|
||||
|
||||
- 已接通真实 `supervisionRun` IPC handler → collector → SQLite → 摘要输入 → 结果保存。监督者显式传递请求时间区间,不再扩大到一小时;消息与会话在 LIMIT 前按闭区间筛选,任务按创建或完成时间筛选。所选项目复用存在且 active 的检查;普通 Heartbeat 不传明确区间时仍使用原下界行为。
|
||||
- 记忆证据使用真实 `updated_at`,locator 保留 `created_at`/`updated_at` 并标明当前背景;摘要指令禁止据此推断历史内容。任务的当前状态也不作为历史状态快照。实现规则与剩余容量边界见[技术设计](./technical-design.md)。
|
||||
- 定向验证:`npx vitest run src/main/ipc.test.ts src/main/assistant/heartbeat-database.test.ts -t 'collects supervision within the exact UI timeRange|builds one bounded snapshot across only the selected projects'`,2 个文件中选中的 3 项通过,133 项未运行。两项新 IPC 测试分别覆盖 global/projects:15 分钟精确范围与端点、25 条区间后消息及 21 个区间后会话不挤掉区间消息、旧任务期间完成、期内创建但期后完成的任务选用创建时间、记忆非采集时刻、archived 项目拒绝。已有 Heartbeat 项目快照用例通过。
|
||||
- 首两次定向运行因新增测试 fixture 缺少 `description`、消息 `state` 失败,补齐实际契约后通过。本轮所改 tracked 文件的 `git diff --check` 通过,仅有行尾转换提示。验证使用真实隔离 SQLite 与生产 IPC/collector,模型 Runtime 为测试替身;未运行 UI/Electron、全量测试、typecheck 或 lint,真实模型调用为 0。未改 Renderer/CSS、数据库 schema、远端 Agent/Runtime,不涉及独立远程执行逻辑;未提交。
|
||||
|
||||
### 2026-09-23 结果定位、目标过滤与候选身份
|
||||
|
||||
- 对应 US-S02、US-S05、US-S10、US-S13、US-S25:overview 返回稳定结果/故事线 ID;Main 校验 graph 请求归属,并按结果读取当次事件、对象与来源。历史选择和图谱共享结果定位,请求序号阻止迟到响应覆盖新选择。
|
||||
- 侧栏 overview 通过类型化 Conversation/Task 目标查询;SQLite 在 LIMIT 前同时校验匹配来源和项目范围。无匹配结果不展示全局第一条。卡片展示结果范围和时间区间,目标切换清空来源与预览并忽略旧请求。
|
||||
- tasks 工作栏实例新增可持久化的会话/任务监督绑定;固定、切换聊天、取消固定均连接到实际卡片查询,任务列表仍使用原项目范围。继续讨论预览展示真实发送目标,回调显式传会话 ID,Main 复用该会话配置。固定任务找不到关联会话时不启用发送。
|
||||
- 模型只能用 `persistedId` 引用 Main 提供的同 scope 候选 UUID;服务与保存事务分别校验。未显式引用候选的实体和所有来源继续分配新 UUID。SQLite 回归覆盖重复 run 复用、不同项目拒绝、裸模型 ID 不合并、确认/修订字段及关系理由保护、移除关系后不自动恢复。
|
||||
- schema 43 升级保存现有可定位的结果成员,后续 run 不改写旧结果内容;测试从 schema 42 升级并重复打开,比较历史图谱与来源,包括没有直接来源引用、但两端实体归属明确的关系。已有 schema 41 保留数据用例继续通过。缺失归属、曾被覆盖的描述仍无法重建。
|
||||
- 定向测试共覆盖 32 个不同用例,最终均通过。主命令为 `npx vitest run src/main/assistant/supervision-history.test.ts src/main/assistant/assistant-database.test.ts src/main/assistant/supervisor-service.test.ts src/main/ipc.test.ts src/renderer/src/SupervisorWorkspace.test.tsx src/renderer/src/SupervisionCard.test.tsx src/renderer/src/RightAssistantSidebar.resize.test.tsx src/renderer/src/HeartbeatCenter.test.tsx -t '[sS]upervis'`:29 项通过,2 项失败来自新增同步 IPC 拒绝断言误用 `.rejects`。修正后仅复跑 `src/main/ipc.test.ts src/shared/workbar-contracts.test.ts -t '[sS]upervis'`,5 项通过,包含新增工作栏绑定契约用例。期间修正了旧侧栏 fixture 缺少目标、迁移比较未忽略成员顺序和图谱按钮查询歧义。
|
||||
- 收尾增加同来源但项目范围不匹配的过滤断言,以及无直接来源引用的关系迁移断言;仅复跑 `src/main/assistant/supervision-history.test.ts src/main/assistant/assistant-database.test.ts -t supervision`,5 项通过,其余 103 项未运行。
|
||||
- `npm run typecheck` 运行一次,通过。对本轮涉及的 TS/TSX 执行一次定向 ESLint,0 error、1 条 ref 清理 warning;调整后仅复查该文件及新增契约测试,迁移收尾只复查数据库与对应测试,均为 0 error、0 warning。未重复检查整个 App。`git diff --check` 通过,仅有现有行尾转换提示。
|
||||
- 本轮未跑全量测试或 App 整文件,未启动 Electron 或调用真实模型;模型请求数为 0。验证包含生产 IPC/collector 与真实隔离 SQLite,以及真实 React 组件的异步交互测试,不能据此声称已完成真实模型或完整桌面端到端验收。未修改 Agent/远程执行协议或 Runtime 生命周期;此次改动在桌面 Main 的监督者输入、存储和查询层生效。全部 dirty 改动保留,未提交。
|
||||
|
||||
### 2026-09-23 侧栏结果直达图谱
|
||||
|
||||
- 对应 US-S25:SupervisionCard 有匹配结果时提供中英文“在图谱中查看 / View in graph”原生按钮。App 通过显式回调接收 resultId,遵守现有离页检查并打开 heartbeat 路由,向 HeartbeatCenter / SupervisorWorkspace 传递类型化导航请求;没有新增页面或 window 事件。沿用 schema 43 与现有 graph IPC,未改 Main、Preload 或存储。
|
||||
- 图谱页签、键盘焦点和历史结果选择共用现有页面状态;同一结果再次点击、不同结果切换及 keepalive 再进入均重新定位,固定监督目标保持。导航切换立即清空旧图谱和详情;overview、graph、来源及操作的迟到响应不会改写新选择。overview 没有返回指定结果时仍按该 ID 请求图谱;失败可重试原 ID,不回退默认最新结果。
|
||||
- 新增 7 个定向用例,最终均通过。首轮命令:`npx vitest run src/renderer/src/SupervisionCard.test.tsx src/renderer/src/SupervisorWorkspace.test.tsx src/renderer/src/HeartbeatCenter.test.tsx src/renderer/src/App.test.tsx -t 'graph navigation'`,3 项通过、2 项因测试使用旧文案失败。修正为实际“工作栏”“历史结果”文案并补充两项竞态测试后,仅运行 `src/renderer/src/SupervisorWorkspace.test.tsx src/renderer/src/App.test.tsx -t 'graph navigation'`,5 项通过、296 项未运行。请求状态收尾后仅复跑 SupervisorWorkspace 的同一筛选,4 项通过、11 项未运行。
|
||||
- 测试覆盖真实 React 组件与 App 路由接线:首次只请求侧栏结果、固定目标、同结果重复点击、不同结果、keepalive 页面实例不变、历史选择同步、页签方向键及焦点、中英文/空态入口、旧 overview/graph/来源迟到、指定 ID 不在 overview 和失败重试。IPC 在这些 UI 测试中为替身,未声称真实桌面端到端验收。
|
||||
- 本轮涉及的 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 改动,未提交。
|
||||
|
||||
### 其他边界
|
||||
|
||||
- 来源读取对本地会话可精确定位到会话和时间;本地知识引用通过现有 `KnowledgeService` 解析文档/分块,失效时显示不可用;外部引用只使用已保存 locator,不调用远端全库。
|
||||
- 继续讨论和知识库写入使用现有本地会话队列与知识库实体接口,并要求先预览、再由用户确认提交。侧栏已支持结果直达图谱,尚无可编辑的上下文预览。
|
||||
- 关系移除保留撤销状态及原始来源;界面没有提供恢复入口。
|
||||
- 候选集最多 100 个实体,复用依赖模型显式选择;不会自动合并历史重复实体或跨 scope 合并。结果级历史内容已保存,事件滑块仍不重建逐事件的实体演变。Experiment、完整图谱回放、`no_change`/取消状态尚未贯通生产链路。
|
||||
- 知识正文条目与监督实体仍是两个模型,当前不会把监督实体当作知识正文条目。
|
||||
@@ -4,15 +4,37 @@
|
||||
|
||||
| 项目 | 内容 |
|
||||
| --- | --- |
|
||||
| 状态 | 目标技术设计,尚未实现 |
|
||||
| 状态 | 已接入结果定位、目标过滤及同 scope 候选身份复用;完整历史回放、无变化状态和取消语义仍未完成 |
|
||||
| 日期 | 2026-09-20 |
|
||||
| 产品设计 | [监督者应用产品设计](./supervisor-prd.md) |
|
||||
| 行为规则 | [监督者逻辑设计](./logic-design.md) |
|
||||
| 界面设计 | [监督者 UI 设计](./ui-design.md) |
|
||||
| 实施进度 | 尚未建立,首个实现阶段完成后补充 |
|
||||
| 实施进度 | 共享契约、`SupervisorService`、SQLite schema 43、Preload IPC、定时投影、工作回顾、结果图谱、来源读取、实体/关系状态操作、会话继续讨论、知识库预览写入和目标侧栏已接入 |
|
||||
|
||||
本文回答如何在现有 GoodBuddy 桌面端中实现监督者。它不改变产品范围,也不把模拟 Demo 当作生产数据模型。
|
||||
|
||||
当前实现边界:`src/main/assistant/supervisor-service.ts` 接收冻结的范围和时间区间,通过现有 AssistantDatabase 取得有界会话、任务、消息已有知识引用和已确认记忆,调用 ask Runtime 的结构化摘要器,校验来源引用与实体关系后在 SQLite 事务中保存。消息引用中的本地 library/document/chunk 和外部 locator 元数据写入监督来源;source-context 对本地引用调用现有 `KnowledgeService` 解析。记忆使用独立的 `memory` 来源类型,外部引用不触发远端全库检索。
|
||||
|
||||
模型实体 `id` 只在单次输出内有效。Main 从同一 scope 的故事线提供最多 100 个未撤销实体候选,模型可用独立的 `persistedId` 引用其中一个 UUID。服务校验候选集成员和重复映射,保存事务再次按实体主键校验故事线归属及撤销状态。没有 `persistedId` 时分配新 UUID,不按名称或裸模型 ID 合并。来源仍按每次结果分配 UUID,保留原始 `source_id` 和 locator。
|
||||
|
||||
schema 42 为实体、实体变化和关系增加 `source_reference_ids_json`,保存映射后的来源 ID。升级只补列,旧记录、ID、确认状态及 locator 保留;此前未保存的引用使用空数组,已被覆盖或忽略的历史内容无法据此恢复。
|
||||
|
||||
schema 43 在结果上增加 `graph_snapshot_json`,保存当次实体名称、说明、确认状态、关系理由及本次来源引用。后续 run 只更新 `automatic` 的当前实体与关系,已确认、修订或移除状态受保护。历史结果读取自身内容;人工操作带 `resultId` 时先校验成员归属,在事务内更新当前对象及所选结果,其他结果不变。移除关系记录 `revoked`,防止后续相同端点和类型的自动关系恢复它。
|
||||
|
||||
升级从现有事件实体关联、实体变化和来源引用恢复结果成员,不猜测名称匹配;旧数据缺失的归属或已经覆盖的内容无法还原,原对象仍保留。新结果即使实体没有事件或来源,也会保存完整成员。结果内容与运行、事件、来源在同一事务提交。
|
||||
|
||||
`overview({ target? })` 返回稳定的 `id`、`storyLineId` 及来源 ID。指定 Conversation/Task 时,Main 读取目标实际项目,查询同时要求目标来源匹配、结果 scope 为 global 或包含该项目;LIMIT 在过滤之后。卡片展示结果真实范围,global 结果不会伪装成单会话摘要。`graph({ resultId, storyLineId? })` 校验二者归属,只返回该结果的事件、对象和来源;显式 ID 无效时不回退到最新结果。继续讨论按结果主键读取,并验证来源属于该结果。
|
||||
|
||||
工作回顾保存所选结果,切换或刷新使用请求序号忽略迟到图谱。侧栏按目标重建卡片,清空来源和预览,并忽略旧请求;工作栏 tasks 实例的 `targetRef` 可保存 conversation/task 固定目标,取消固定后恢复跟随当前选择。该绑定只控制监督卡片,不改变任务列表的项目范围。继续讨论预览显示实际目标名称和 ID,发送回调显式携带该会话 ID,由 Main 使用该会话的 Runtime 与项目。
|
||||
|
||||
侧栏通过 `onOpenSupervisionGraph(resultId)` 交给 App 导航;App 遵守现有离页检查,向 HeartbeatCenter / SupervisorWorkspace 传递类型化 `graphNavigation`,复用 `heartbeat` 路由及 keepalive 页面。每次点击创建新的导航请求,打开 graph 页签并更新历史选择共用的 resultId。overview 未包含该 ID 时仍直接请求其 graph;旧 overview、graph、来源和操作响应通过同一请求序号失效,不覆盖新结果。没有新增 window 事件、页面或持久化字段。
|
||||
|
||||
继续讨论入队时,无附件请求省略 `serializedContexts`;请求未指定 Runtime 时使用会话保存的选择。知识库预览与提交均检查目标库存在且为本地可写库,更新实体还检查其实际所属库。侧栏确认框展示 Main 返回的实体字段、目标库和来源正文,取消或写入失败后可以重新预览。
|
||||
|
||||
监督者 collector 将 UI 请求的 `timeRange` 原样传入 `buildHeartbeatInput` 的可选明确区间参数,查询时归一化为 UTC,不再换算成至少一小时。消息按 `from <= created_at <= to` 在 LIMIT 前过滤,会话也在 LIMIT 前检查存在区间内消息;所选项目复用现有存在且 active 的校验。任务在创建时间或完成时间落入闭区间时收集,证据时间优先使用区间内完成时间,否则使用创建时间;任务状态明确为当前状态,不还原区间结束时的状态。未传明确区间的普通 Heartbeat 保留原来的回顾窗口与下界查询行为。
|
||||
|
||||
已确认记忆作为当前背景收集,不受事件时间区间筛选;`occurredAt` 使用数据库 `updated_at`,locator 保存真实创建、更新时间及 `current-background` 标识。模型指令禁止将当前记忆内容推断成历史时点的内容或区间事件。记忆没有历史内容快照;本次修复不增加历史还原能力,也不追溯修正已有监督结果。既有会话、消息、任务及总证据预算继续生效,严格时间筛选不代表区间内所有记录都会进入摘要。
|
||||
|
||||
## 1. 总体方案
|
||||
|
||||
监督者作为 Main 进程中的一个领域服务,复用现有智能心跳的计划、运行领取、租约、重试和有界模型调用。图谱是监督者整理结果的查询视图,知识库继续拥有资料正文、索引和检索。
|
||||
@@ -107,7 +129,7 @@ erDiagram
|
||||
| 对象 | 关键字段 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `supervision_runs` | `id`, `trigger`, `scope_json`, `time_range_json`, `status`, `error`, `started_at`, `completed_at` | 一次手动或心跳整理;保存冻结范围,不从当前配置回推历史 |
|
||||
| `supervision_results` | `id`, `run_id`, `summary`, `change_digest`, `coverage_json` | 工作回顾、监督反馈和图谱共同读取的结果版本 |
|
||||
| `supervision_results` | `id`, `run_id`, `summary`, `change_digest`, `coverage_json`, `graph_snapshot_json` | 工作回顾、监督反馈和图谱共同读取的结果版本 |
|
||||
| `story_lines` | `id`, `scope_json`, `title`, `created_at`, `updated_at` | 用户选择的工作故事线,不等同于 Project |
|
||||
| `story_events` | `id`, `story_line_id`, `result_id`, `occurred_at`, `title`, `description`, `event_type`, `confidence` | 时间轴上的事件;同日聚合只在查询或 UI 层处理 |
|
||||
| `knowledge_entities` | `id`, `canonical_label`, `description`, `state`, `confirmation_state`, `updated_at` | 可被多条故事线引用的持续认识,不与知识库文档一一对应 |
|
||||
@@ -122,7 +144,7 @@ erDiagram
|
||||
- 关系对 `(from_entity_id, to_entity_id, relation_type)` 建唯一约束,允许同一实体对存在不同关系类型。
|
||||
- 删除故事线只删除其组织关系,不删除共享实体、来源或知识库资料;删除知识库资料后来源标为不可用。
|
||||
- 整理结果、实体变化、关系变化和来源引用在同一 SQLite 事务中提交,提交失败全部回滚。
|
||||
- 早期不建立完整内容快照或独立向量索引;历史能力只依赖已保存的整理结果和原来源可用性。
|
||||
- 只保存整理结果自身的对象内容与有界来源,不建立原会话、记忆或知识库的完整历史快照和独立向量索引。
|
||||
|
||||
模型输出使用版本化共享契约,至少包含 `events`、`entities`、`entityChanges`、`relations`、`summary`、`openItems` 和每项的 `sourceReferenceIds`。Main 必须做数量、字符、枚举、ID 所属范围和引用存在性校验,未知字段拒绝或按契约版本处理,不能直接把模型 JSON 写入数据库。
|
||||
|
||||
@@ -169,8 +191,8 @@ IPC 返回图谱查询结果时使用分页和有界字段;详情中的来源
|
||||
|
||||
### 阶段 B:接入证据引用和阶段回顾
|
||||
|
||||
- 实现 `EvidenceCollector`,先接入会话、任务和已有心跳输入;再接入魔法笔记与本地知识库引用。
|
||||
- 建立 `supervision_runs`、`supervision_results` 和 `source_references`,让回顾结果可定位来源。
|
||||
- 实现 `EvidenceCollector`,接入会话、任务、消息已有知识引用和记忆;魔法笔记仍未接入。
|
||||
- 建立 `supervision_runs`、`supervision_results` 和 `supervision_sources`,保存来源 locator,并通过 `KnowledgeService` 解析本地文档/分块。
|
||||
- 在现有智能心跳页面增加监督者工作回顾入口;不先改应用名称和导航 ID。
|
||||
|
||||
### 阶段 C:实现最小故事线图谱
|
||||
@@ -183,14 +205,14 @@ IPC 返回图谱查询结果时使用分页和有界字段;详情中的来源
|
||||
### 阶段 D:接入用户确认和知识库双向定位
|
||||
|
||||
- 增加关系确认、修订、撤销和实体拆分的最小交互。
|
||||
- 从知识库资料定位到图谱,从图谱返回本地资料及引用位置。
|
||||
- 从图谱返回本地会话资料及引用位置;知识库文档定位依赖来源中存在文档/分块元数据。
|
||||
- 新建或补充本地条目必须经过预览和确认;外部知识库保持只读。
|
||||
|
||||
### 阶段 E:侧栏反馈与增量整理
|
||||
|
||||
- 将结果摘要投影到跟随/固定目标侧栏。
|
||||
- 将结果摘要投影到现有右侧助手栏,并沿用当前会话生命周期。
|
||||
- 心跳只负责触发,监督者根据新证据决定有无变化和是否反馈。
|
||||
- 在运行去重、用户修订保护和来源失效提示稳定后,再评估事件唤醒与自动阶段识别。
|
||||
- 在运行去重、用户修订保护和来源失效提示稳定后,再评估更复杂的跨目标固定策略、事件唤醒和自动阶段识别。
|
||||
|
||||
## 7. 验证策略
|
||||
|
||||
@@ -213,3 +235,11 @@ IPC 返回图谱查询结果时使用分页和有界字段;详情中的来源
|
||||
- 无依据的实体自动合并、旧观点自动失效和静默覆盖用户确认。
|
||||
- 应用市场建设作为监督者开发前置依赖。
|
||||
- 在没有增量和去重证据前实现事件触发、自动阶段识别和全量后台重算。
|
||||
|
||||
## 当前剩余差距
|
||||
|
||||
- 实体与关系 revoke 保存状态;界面没有 undo 或恢复入口。
|
||||
- 跨 run identity 依赖同 scope 候选 UUID 的显式引用,不自动合并历史重复实体;模型漏选候选时会创建新身份。
|
||||
- 结果图谱使用真实事件实体连线,侧栏已按固定目标过滤并支持结果直达图谱;逐事件状态回放和 Experiment 尚未实现。
|
||||
- `no_change`、用户取消及其旧结果保留尚未贯通监督运行的生产状态链路。
|
||||
- 监督知识实体与知识库正文条目仍是不同对象,知识正文只能通过现有条目定位和预览接口处理。
|
||||
|
||||
@@ -6,22 +6,32 @@
|
||||
|
||||
应用中心中的智能心跳入口升级为“监督者”,沿用既有启用、常驻与排序能力。未来应用市场使用同一应用身份。用户停用自动心跳时仍可手动回顾;停用应用时明确说明关联自动计划的处理,既有结果仍保留。停用与运行中任务的具体行为需在逻辑设计中确定。
|
||||
|
||||
应用页使用共享 PageTabs 展示“工作回顾 / 故事线图谱”,右上角提供设置。设置包含关注范围、心跳计划和反馈方式,已有运行记录可从工作回顾进入,保留失败详情与手动运行入口。
|
||||
当前应用页使用共享 PageTabs 展示“工作回顾 / 故事线图谱 / 设置”。设置保留自动唤醒概览、建议、报告与记录、计划配置。整个页面只有一个一级标题;监督者 bridge 不可用时显示明确错误,设置仍可访问,不回退到旧心跳概览。
|
||||
|
||||
## 工作回顾
|
||||
|
||||
页面顶部持续显示项目或 Global 范围、来源选择与时间区间。首次使用引导用户选择来源并生成回顾。默认查看最近一次成功结果,包含阶段决定、变化与未解决事项;每项附来源和图谱定位入口。
|
||||
当前页面提供全局或单项目范围,以及 1、7、30 天时间区间选择。没有自动计划也能手动回顾;成功结果显示自身冻结的范围、时间和未解决事项,可选择历史结果或进入图谱。来源筛选由本次回顾范围和时间限制;图谱详情只列出所选事件的关联来源,实体或关系列出相关事件的来源。独立的来源类型选择器尚未实现。
|
||||
|
||||
手动“回顾当前进展”是主要操作。生成中显示进度与取消;空范围提供选择来源入口;有来源但没有有效变化时显示检查时间和“暂无新进展”。失败保留上次结果并标明时间,提供重试。部分来源不可用时列出遗漏范围。
|
||||
选择历史结果后,图谱读取该结果的成员和内容,标题显示其回顾区间和生成时间。切换时清空旧图谱和详情并显示加载状态,迟到请求不得替换新选择。确认、修订和移除反馈更新当前所选结果,后续自动回顾不改写旧结果。
|
||||
|
||||
手动“回顾当前进展”是主要操作,生成中禁用重复提交并显示进行中文案。失败保留上次结果与本次请求范围,提供重试。取消、无变化结果与部分来源遗漏的专门状态仍属于目标设计,未在当前界面承诺。
|
||||
|
||||
## 会话侧栏
|
||||
|
||||
右侧通用助手工作栏中的监督面板展示“监督反馈”,沿用现有[工作栏设计](../assistant-workbar/prd.md)的布局和执行边界。跟随模式对应当前会话;固定模式持续显示所选 Conversation、Task 或 Experiment,切换聊天不改变目标。反馈卡片显示所属目标、阶段、结论、未解决事项及来源。
|
||||
右侧通用助手工作栏中的监督卡片展示“监督反馈”,沿用现有[工作栏设计](../assistant-workbar/prd.md)的布局和执行边界。当前支持 Conversation/Task:有选中任务时跟随任务,否则跟随会话;“固定监督目标”保存当前目标,切换聊天后保持,取消固定恢复跟随。卡片显示目标、结果真实范围、回顾区间和摘要,可刷新并查看匹配来源;无目标或无匹配结果显示空态。Experiment 尚未接入。
|
||||
|
||||
“在图谱中查看”定位到对应阶段或节点;“继续讨论”先预览节点摘要和来源引用,允许用户移除不需要的内容,再进入会话。“发到当前会话”由用户主动触发。跨会话内容需显式显示范围,不能伪装成当前会话的观察。
|
||||
有匹配结果时提供“在图谱中查看”,打开现有监督者页面的图谱页签并读取该结果;无匹配结果不显示入口。按钮保留原生键盘操作,进入后焦点落在图谱页签,继续使用共享 PageTabs 的方向键导航。固定目标不因跳转改变;再次点击相同或不同结果均重新定位,包括页面缓存后再次进入。结果不可用时显示错误并重试原 ID,不展示默认最新结果。
|
||||
|
||||
当前“继续讨论”预览实际发送会话名称、ID 和上下文,确认后发送到该会话;固定任务使用其关联会话,无法确定发送会话时禁用。切换目标使旧来源请求和预览失效。编辑预览中的引用仍属后续工作。
|
||||
|
||||
## 故事线图谱
|
||||
|
||||
使用 master-detail 页面壳层,左侧选择故事线,中间浏览图谱,右侧按选中对象切换详情。平铺和圆形视图使用共享 SegmentedControl;同级页面导航仍使用 PageTabs。布局、连线与回放行为见[图谱设计](../story-graph/prd.md)。
|
||||
使用 `supervisor` 页面壳层,最大内容宽度为 `1440px`。当前生产图谱左侧为紧凑的事件、实体和关系列表,中间为 SVG 画布,右侧为详情与来源。桌面列宽为 `216px minmax(0, 1fr) 280px`,画布获得主要空间。外圈事件按发生时间排序后等距逆时针排列,不表示实际时间间隔;起止之间保留缺口和方向箭头。内部显示真实实体名称,实线仅连接实际事件与实体,虚线仅连接实际实体关系。
|
||||
|
||||
窄屏时故事列表收为选择入口,详情进入可返回的独立区域;保留文字事件列表作为图谱的替代入口。节点、连线与时间事件都可从列表选择,键盘焦点可见。颜色只辅助区分故事线,关系类型还需文字说明。缩放与平移不改变右侧当前选择。
|
||||
实体及其影响连线复用现有 `--graph-node-*-border` 令牌;颜色用于辅助辨认实体,不代表故事分类或确认状态。选中项加粗并突出连线,其余节点降低图形强调度但保留可读文字。详情分为名称与说明、图谱关联、确认操作和来源,来源正文按需读取。图例常显,读图说明可展开。
|
||||
|
||||
画布每批最多显示 8 个事件、6 个实体;同时间事件分开排布。列表保留全部返回记录和完整名称,选择实体会定位到真实关联事件所在批次,选择关系会优先显示两端实体。滑块明确命名“事件浏览”,只切换当前事件,不还原实体历史状态,也不宣称完整历史回放。当前接口返回单条故事线,不复制 Demo 中的三条模拟故事。后续视图规划见[图谱设计](../story-graph/prd.md)。
|
||||
|
||||
按实际内容容器宽度响应:不超过 `1190px` 时变为 `184px` 列表加画布,详情移到下方;不超过 `860px` 时变为单列,画布优先,列表限制高度并独立滚动。SVG 最小宽度为 `660px`,窄屏只在画布内部横向滚动,页面本身不横向溢出。范围、时间和操作可换行。节点、关系与事件均可从列表选择,画布节点支持 Enter、Space 和可见焦点。加载、无数据、读取失败和服务不可用各自呈现,错误提供可行的恢复说明或重试入口。
|
||||
|
||||
隔离视觉验证使用 `tests/support/supervisor-layout-regression.tsx` 渲染生产 React 组件;所有输入标为模拟 fixture,不读取用户数据库或调用模型。`tests/supervisor-layout.electron.test.ts` 启动 Vite 与 Electron,通过 `executeJavaScript` 测量布局、`capturePage` 截图,覆盖 1440、1024、390px、浅深主题、长名称、密集事件和异常状态。可通过 `GOODBUDDY_SUPERVISOR_ARTIFACTS` 保留截图;交互预览入口为 `node tests/support/supervisor-preview.mjs`。
|
||||
|
||||
@@ -1,21 +1,526 @@
|
||||
# 监督者 User Stories
|
||||
|
||||
日期:2026-09-16。以下为目标验收场景,尚未接入生产验证。需求编号引用[监督者产品设计](./supervisor-prd.md)与[故事线图谱设计](../story-graph/prd.md)。
|
||||
日期:2026-09-22。本文定义监督者从应用入口到故事线图谱的用户场景、界面行为和验收条件。
|
||||
|
||||
| 编号 | 用户故事 | Given / When / Then | 需求 |
|
||||
| --- | --- | --- | --- |
|
||||
| US-S01 | 启用后知道监督者关注哪些工作 | 给定未配置的新用户;当从应用中心启用并选择项目、来源和时间;则生成前显示范围,未选来源不被自动纳入 | FR-S1、S3 |
|
||||
| US-S02 | 隔几天回来能继续上次工作 | 给定已有阶段记录;当打开工作回顾;则看到已有决定、未解决事项和来源,并可定位图谱 | FR-S2、S5 |
|
||||
| US-S03 | 自动检查不过度打扰 | 给定已启用心跳计划;当一次检查没有有效新变化;则记录检查结果,不重复推送旧反馈 | FR-S4、S5 |
|
||||
| US-S04 | 查看某个事件影响了哪些认识 | 给定时间点含多个事件;当展开并选择一个事件;则相关实体与连线高亮,详情提供事件原文位置 | FR-G2 |
|
||||
| US-S05 | 追溯同一个知识实体的多次变化 | 给定实体先后被提出、补充和修订;当选择该实体;则同时看到多个时间点及其关系,不复制为多个同名实体 | FR-G1、G3 |
|
||||
| US-S06 | 知道不同故事为什么有关 | 给定跨故事关联;当选择连接线;则展示关联类型、理由和两端依据,可确认、纠正或移除 | FR-S9、FR-G4 |
|
||||
| US-S07 | 复盘一段时间 | 给定已有过程记录;当选择时间区间;则总结只覆盖该范围,展示决定、变化和未解决事项;回放不使用未来结论 | FR-S9、FR-G5 |
|
||||
| US-S08 | 回到知识库核对依据 | 给定知识实体引用已有资料;当点击相关资料;则本地资料打开原条目及位置,且支持返回图谱;外部引用打开已保存片段与可用定位信息,缺少位置时提示 | FR-S7、S8 |
|
||||
| US-S09 | 补充知识而不重复保存 | 给定候选归纳与已有本地条目;当选择补充并确认预览;则修改原条目并保留引用;外部只读资料不提供写回操作 | FR-S8 |
|
||||
| US-S10 | 纠正错误关系 | 给定自动归纳有误;当修改或移除关系;则原文保留,可撤销,后续自动整理不静默覆盖用户修改 | FR-S6、S9 |
|
||||
| US-S11 | 带着已有认识继续讨论 | 给定选中的知识实体;当预览并确认摘要与来源;则会话携带所选上下文,后续内容可纳入下一次整理 | FR-S3、S5 |
|
||||
| US-S12 | 生成失败后仍能使用旧结果 | 给定已有成功回顾;当新一次整理失败或取消;则旧结果仍可访问,失败或部分完成状态明确,可重试 | FR-S6 |
|
||||
| US-S13 | 来源变化后不会误读历史 | 给定来源已更新或失效;当回放旧阶段并打开引用;则显示可用的历史依据,缺失旧版本时提示,不能将最新版称作当时原文 | FR-S9 |
|
||||
| US-S14 | 升级入口后原计划仍可管理 | 给定已有心跳计划和启用偏好;当应用升级为监督者;则保持计划、运行记录与偏好,不出现第二个重复应用入口 | FR-S1、S2 |
|
||||
| US-S15 | 在窄屏或仅用键盘时查看图谱 | 给定无法方便点击图形的用户;当使用事件与节点列表选择对象;则能查看相同详情、关系与来源,并返回原选择位置 | FR-G6 |
|
||||
当前代码已经交付智能心跳页面和运行链路;监督者工作回顾、故事线图谱、会话侧栏反馈和知识库双向定位仍是目标设计。因此每条故事标注了当前状态:
|
||||
|
||||
- **已实现**:当前生产界面或 Main/Preload 链路已有可验证行为。
|
||||
- **待实现**:产品目标,不能用现有智能心跳页面或 Story Graph Demo 代替验收。
|
||||
- **沿用**:已有能力在监督者统一入口中必须继续保留。
|
||||
|
||||
## 用户角色
|
||||
|
||||
| 角色 | 目标 |
|
||||
| --- | --- |
|
||||
| 工作使用者 | 回到工作现场,理解进展、决定和未解决事项,并继续工作 |
|
||||
| 知识整理者 | 核对来源,修正自动归纳,把可靠认识补充到知识库 |
|
||||
| 监督者配置者 | 决定观察范围、运行时间和反馈方式 |
|
||||
| 受限访问者 | 只能看到已授权范围内的会话、任务、笔记和知识库引用 |
|
||||
|
||||
## 入口与范围
|
||||
|
||||
### US-S01 启用后知道监督者观察什么
|
||||
|
||||
**状态:待实现。**
|
||||
|
||||
作为工作使用者,我希望在第一次使用监督者时明确它将观察哪些内容,避免启用应用后默认读取全部工作。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 用户第一次打开监督者 | 选择 Global 或一个、多个 Project,并选择可用来源和时间区间 | 页面在生成前显示完整范围、来源和时间区间 |
|
||||
| 用户没有选择来源 | 点击生成回顾 | 不开始整理,显示选择来源的入口和原因 |
|
||||
| 当前项目已打开 | 打开范围选择 | 当前项目可以作为建议值,但不能覆盖已保存范围 |
|
||||
| 用户切换当前项目 | 返回监督者 | 已保存的范围不改变 |
|
||||
|
||||
**界面行为**
|
||||
|
||||
- 首次状态显示“选择关注范围”,不显示看似已有的空回顾。
|
||||
- 范围摘要持续显示在页面标题或范围徽标中。
|
||||
- Global、指定项目和来源选择使用持久标签;不能只用颜色表示范围。
|
||||
- 生成按钮在范围未完成时禁用,并把错误关联到对应字段。
|
||||
|
||||
### US-S14 从应用中心进入唯一的监督者
|
||||
|
||||
**状态:待实现,沿用已实现的智能心跳应用入口。**
|
||||
|
||||
作为用户,我希望监督者只有一个稳定入口,不需要在智能心跳、任务中心和设置中心之间寻找重复配置。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 用户打开应用中心 | 选择智能心跳入口 | 进入监督者统一页面,未来显示为监督者名称 |
|
||||
| 用户已有智能心跳计划 | 应用入口升级 | 计划、运行记录、报告、建议和启用偏好仍可访问 |
|
||||
| 用户打开任务中心或设置中心 | 查找心跳配置 | 不出现第二套计划 CRUD;需要时只提供进入监督者的链接 |
|
||||
|
||||
**界面行为**
|
||||
|
||||
- 应用身份、排序和常驻行为保持一致,不能生成第二个平级应用。
|
||||
- 迁移期间如果仍显示“智能心跳”,页面应明确说明它是监督者的自动唤醒能力。
|
||||
- 旧数据为空时进入有意义的首次配置状态,而不是报错。
|
||||
|
||||
### US-S21 选择一个或多个项目作为观察范围
|
||||
|
||||
**状态:已实现。**
|
||||
|
||||
作为监督者配置者,我希望心跳计划明确属于 Global 或选定项目。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 用户编辑心跳计划 | 选择 Global | 计划显示 Global,不能同时选择项目 |
|
||||
| 用户选择指定项目 | 勾选一个或多个活动项目并保存 | 计划保存为一份多项目计划,不为每个项目复制 Run 或报告 |
|
||||
| 用户没有勾选项目 | 尝试保存指定项目计划 | 保存按钮不可用或显示字段错误 |
|
||||
| 项目已归档或删除 | 查看或保存旧计划 | 显示不可用项目;不能默默扩大或改写范围 |
|
||||
|
||||
**界面行为**
|
||||
|
||||
- 使用分段控件选择 Global/指定项目,项目使用 Checkbox。
|
||||
- 计划卡片显示 Global 或完整项目摘要;项目过多时显示数量并保留可访问的完整名称。
|
||||
- 当前项目切换不会重新解释计划卡片的范围。
|
||||
|
||||
### US-S22 管理心跳计划
|
||||
|
||||
**状态:已实现。**
|
||||
|
||||
作为监督者配置者,我希望配置回顾时间、周期、回顾窗口和保留期限。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 用户进入心跳计划 | 创建计划 | 表单要求名称、范围、每日/每周规则、本地时间、时区、回顾窗口和保留期限 |
|
||||
| 用户编辑已有计划 | 修改字段并保存 | 计划卡片显示新配置、下次运行和上次状态 |
|
||||
| 用户开始编辑 | 点击取消编辑 | 草稿丢弃,恢复编辑前的计划值 |
|
||||
| 保存失败 | 提交表单 | 草稿保留,错误就地显示,用户可以修正后重试 |
|
||||
|
||||
**界面行为**
|
||||
|
||||
- 表单标签始终可见,不能用 placeholder 代替。
|
||||
- 每次操作期间禁用重复提交和相互冲突的按钮。
|
||||
- 周期选择为 weekly 时才显示星期字段。
|
||||
- 时间以用户本地时区保存并展示;范围和状态不能只依赖颜色。
|
||||
|
||||
### US-S23 暂停、恢复或立即运行计划
|
||||
|
||||
**状态:已实现。**
|
||||
|
||||
作为用户,我希望临时暂停自动回顾,也能随时手动运行一次。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 计划正在运行 | 点击暂停 | 计划停止下一次自动运行,已有历史和结果保留 |
|
||||
| 计划已暂停 | 点击恢复 | 计划恢复并显示下一次运行时间 |
|
||||
| 计划可运行 | 点击立即运行 | 创建一条标记为手动触发的 Run,并在完成后刷新结果 |
|
||||
| Run 正在执行 | 再次点击运行或暂停 | 禁止重复操作,按钮显示进行中状态 |
|
||||
|
||||
## 工作回顾和监督反馈
|
||||
|
||||
### US-S02 隔几天回来能继续上次工作
|
||||
|
||||
**状态:待实现;当前智能心跳的运行概览和最新报告是可复用基础。**
|
||||
|
||||
作为工作使用者,我希望打开监督者就知道上次形成了什么决定、哪些内容改变、还有什么没有解决。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 已有成功的阶段回顾 | 打开工作回顾 | 默认显示最近成功结果、覆盖范围和生成时间 |
|
||||
| 回顾包含决定、变化和未解决事项 | 点击其中一项 | 展开依据,并提供“在图谱中查看”入口 |
|
||||
| 没有成功回顾 | 打开工作回顾 | 显示首次生成入口,不伪装成已有总结 |
|
||||
|
||||
**界面行为**
|
||||
|
||||
- 页面顶部固定显示当前范围、来源和时间区间。
|
||||
- 工作回顾是监督者的主视图之一,与故事线图谱使用 PageTabs 切换。
|
||||
- 内容卡片显示“自动归纳”“待核对”或“用户确认”等状态。
|
||||
- 点击图谱入口时带入当前阶段、实体或事件的定位,不打开无选择的全局图谱。
|
||||
|
||||
### US-S24 手动回顾当前进展
|
||||
|
||||
**状态:待实现;当前智能心跳已有“立即运行一次心跳”。**
|
||||
|
||||
作为工作使用者,我希望主动检查当前范围,而不必等待下一次计划运行。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 范围有效且有来源 | 点击“回顾当前进展” | 页面显示整理中状态、进度说明和取消操作 |
|
||||
| 整理完成并有新变化 | 返回结果 | 工作回顾、监督反馈和图谱引用同一次结果 |
|
||||
| 没有有效新变化 | 整理完成 | 显示检查时间和“暂无新进展”,不重复推送旧内容 |
|
||||
| 用户点击取消 | 整理仍在运行 | 显示已取消,保留上一次成功结果 |
|
||||
|
||||
**界面行为**
|
||||
|
||||
- 运行按钮在整理期间禁用,取消后可以重试。
|
||||
- “无新进展”与“失败”使用不同状态和文案。
|
||||
- 结果必须显示本次冻结的范围,不能因用户后来切换项目而改变解释。
|
||||
|
||||
### US-S03 自动检查不过度打扰
|
||||
|
||||
**状态:待实现;当前智能心跳已实现计划运行、静默之外的私有结果保存和运行审计。**
|
||||
|
||||
作为用户,我希望定时检查有变化时才打扰我,没有新信息时保持安静。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 计划到期 | 智能心跳唤醒监督者 | 监督者只读取冻结范围内的有界内容 |
|
||||
| 没有有效新变化 | 运行完成 | 保存检查记录,不发送重复侧栏反馈或全局通知 |
|
||||
| 有新的阶段认识 | 运行完成 | 更新工作回顾和图谱,并按反馈设置显示监督反馈 |
|
||||
| 运行失败 | 运行结束 | 显示失败状态和重试入口,不把失败当作成功回顾 |
|
||||
|
||||
**界面行为**
|
||||
|
||||
- 心跳负责唤醒,监督者负责判断是否需要反馈。
|
||||
- 自动结果不在系统通知中暴露私人正文;用户在应用内查看详情。
|
||||
- 同一结果不能同时作为重复的侧栏卡片和全局通知推送。
|
||||
|
||||
### US-S25 查看和处理监督反馈
|
||||
|
||||
**状态:Conversation/Task 过滤、固定/跟随、来源、确认发送和侧栏结果直达图谱已接入;Experiment 仍待实现。验证见[进度](./progress.md)。**
|
||||
|
||||
作为工作使用者,我希望在当前会话旁边看到与当前工作有关的简短反馈,并能进入完整回顾。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 监督栏处于跟随模式 | 用户切换会话或任务 | 面板只显示包含该目标来源且范围匹配的结果,同时标出结果真实范围;无结果显示空态 |
|
||||
| 旧目标请求仍在读取 | 用户切换目标 | 旧摘要、来源和预览不出现在新目标下 |
|
||||
| 监督栏固定到 Conversation、Task 或 Experiment | 用户切换聊天 | 面板继续显示固定目标,并显示目标名称 |
|
||||
| 反馈卡片有来源 | 点击“查看依据” | 展开来源摘要和可用定位信息 |
|
||||
| 用户点击“在图谱中查看” | 进入图谱 | 图谱定位到反馈对应阶段或实体 |
|
||||
| 用户点击“发到当前会话” | 确认发送 | 才将反馈作为消息加入会话;默认不自动发言 |
|
||||
|
||||
**界面行为**
|
||||
|
||||
- 卡片显示目标、阶段、结论、未解决事项和来源。
|
||||
- 跨会话总结明确显示覆盖范围,不能伪装成当前会话观察。
|
||||
- 固定/跟随模式沿用通用助手工作栏的选择和返回行为。
|
||||
|
||||
## 故事线图谱
|
||||
|
||||
### US-S04 从时间事件查看发生了什么
|
||||
|
||||
**状态:待实现;当前 Demo 仅有模拟数据。**
|
||||
|
||||
作为工作使用者,我希望知道某个时间点发生了什么,以及它影响了哪些认识。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 图谱显示多个时间事件 | 点击外圈时间点 | 相关知识实体和实际连线高亮,其余内容降低显著度 |
|
||||
| 同一天事件过密 | 点击聚合点 | 显示事件数量和事件列表,可选择具体事件 |
|
||||
| 用户选择具体事件 | 查看右侧详情 | 显示事件摘要、所属故事、发生时间、影响实体和来源入口 |
|
||||
| 来源可用 | 点击来源 | 打开所属会话、笔记或知识库条目的对应位置 |
|
||||
|
||||
**界面行为**
|
||||
|
||||
- 外圈时间轴从起点到终点逆时针排列,持续显示方向和当前时间范围。
|
||||
- 外圈保留缺口,不能让用户误以为时间循环。
|
||||
- 时间到实体的连线表示事件影响实体;它与实体之间的知识关系使用不同文字说明。
|
||||
|
||||
### US-S05 追溯同一个知识实体的变化
|
||||
|
||||
**状态:待实现。**
|
||||
|
||||
作为知识整理者,我希望看到一个认识如何被提出、补充、验证或修订。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 一个知识实体关联多个时间事件 | 点击内部实体 | 多个时间点和连线高亮,右侧先显示当前理解 |
|
||||
| 事件类型分别为提出、补充、验证或修订 | 展开演变 | 每次变化显示类型、时间、摘要和依据 |
|
||||
| 新方案只是增加选择 | 查看演变 | 旧方案不被自动标记为失效 |
|
||||
| 正在回放过去时刻 | 查看实体 | 只显示截至该时刻已形成的理解,不泄漏未来结论 |
|
||||
|
||||
**界面行为**
|
||||
|
||||
- 一个实体只显示一个稳定节点,不能把每次变化复制成同名节点。
|
||||
- 用户能从当前理解切换到演变列表和来源列表。
|
||||
- 用户确认过的描述和关系显示确认状态,自动新增内容显示待核对状态。
|
||||
|
||||
### US-S06 查看知识关系为什么成立
|
||||
|
||||
**状态:待实现。**
|
||||
|
||||
作为知识整理者,我希望知道两个实体为什么被连接,而不是只看到一条线。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 图谱存在实体间关系 | 点击关系线 | 右侧显示关系类型、关联理由、确认状态和两端依据 |
|
||||
| 关系由系统推测 | 查看关系详情 | 明确标记“待核对” |
|
||||
| 用户确认关系 | 点击确认 | 关系进入用户确认状态,并保留确认操作记录 |
|
||||
| 用户认为关系错误 | 修改类型或移除 | 图谱更新,原始来源不删除,移除可撤销 |
|
||||
|
||||
**界面行为**
|
||||
|
||||
- 关系类型必须有文字名称,颜色只能辅助区分。
|
||||
- 时间到实体的关系和跨故事实体关系在详情中分别说明。
|
||||
- 后续自动整理只能提出补充或修订建议,不能静默覆盖用户确认内容。
|
||||
|
||||
### US-S10 纠正错误关系而不删除来源
|
||||
|
||||
**状态:待实现。**
|
||||
|
||||
作为知识整理者,我希望修正系统错误合并的概念或错误关系,同时保留原始记录和撤销能力。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 自动归纳把两个概念错误连接 | 在关系详情中选择修改或移除 | 图谱立即反映修正,并显示待保存或已保存状态 |
|
||||
| 用户移除一条关系 | 查看来源或知识库 | 原始来源和知识库正文仍然存在 |
|
||||
| 用户完成修正 | 后续自动整理 | 系统可以提出新的证据或差异,但不能静默恢复被移除关系 |
|
||||
| 用户点击撤销 | 修正仍可撤销 | 关系恢复到修正前状态,来源不发生变化 |
|
||||
|
||||
**界面行为**
|
||||
|
||||
- 破坏性关系操作使用明确确认,并说明只改变图谱组织。
|
||||
- 用户修改、系统归纳和来源事实显示不同状态。
|
||||
- 修正失败时保留当前详情和未提交意图,不能显示为已保存。
|
||||
|
||||
### US-S07 按时间段查看阶段总结
|
||||
|
||||
**状态:待实现。**
|
||||
|
||||
作为工作使用者,我希望复盘一段过程,而不是逐条翻阅原始记录。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 图谱有多个事件 | 拖选起止时间或使用时间范围控件 | 页面显示选中范围和阶段总结入口 |
|
||||
| 用户打开阶段总结 | 查看结果 | 总结只覆盖该范围,分别列出决定、变化和未解决事项 |
|
||||
| 用户拖动回放控制 | 回到过去时刻 | 图谱只显示当时已经发生的事件和已经形成的认识 |
|
||||
| 用户切换圆形/平铺 | 保留当前范围 | 回放时刻、选择和范围继续保留 |
|
||||
|
||||
**界面行为**
|
||||
|
||||
- 平铺环绕视图是默认图谱视图;圆形视图用于观察故事聚合。
|
||||
- 回放状态必须持续显示“截至某时刻”,避免误读当前结论。
|
||||
- 时间轴密集时先聚合数量,展开后才能选择单个事件。
|
||||
|
||||
### US-S15 在列表、窄屏和键盘中完成同样操作
|
||||
|
||||
**状态:待实现。**
|
||||
|
||||
作为无法方便操作图形的用户,我希望通过文字列表和键盘完成相同的查看和追溯任务。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 用户使用窄屏 | 打开故事线图谱 | 故事列表收为选择入口,详情进入可返回的独立区域 |
|
||||
| 用户不使用鼠标 | 用 Tab、方向键和 Enter 选择对象 | 能选择时间事件、实体和关系,并查看相同详情 |
|
||||
| 用户缩放或平移图谱 | 返回详情或列表 | 当前选择不丢失 |
|
||||
| 图形无法加载 | 使用文字列表 | 仍能浏览对象、关系、来源和回到知识库的入口 |
|
||||
|
||||
**界面行为**
|
||||
|
||||
- 焦点始终可见,弹出详情关闭后返回触发它的控件。
|
||||
- 文字列表和图形共享同一选择状态,不维护两份内容。
|
||||
- 缩放、平移和颜色不能成为获取信息的唯一方式。
|
||||
|
||||
## 来源与知识库
|
||||
|
||||
### US-S08 回到来源核对依据
|
||||
|
||||
**状态:待实现,沿用现有知识库的本地条目和外部片段边界。**
|
||||
|
||||
作为知识整理者,我希望从总结或图谱回到原始依据。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 引用的是本地知识库条目 | 点击来源 | 打开原条目及引用位置,并可返回图谱 |
|
||||
| 引用的是会话或魔法笔记 | 点击来源 | 打开所属内容,并显示可用的消息、条目或位置 |
|
||||
| 引用的是外部知识库片段 | 点击来源 | 打开已保存的有界片段和可用定位信息 |
|
||||
| 原来源已失效或没有位置 | 点击来源 | 明确显示不可用或缺少定位,不伪造远端原文跳转 |
|
||||
|
||||
### US-S09 把新认识整理进本地知识库
|
||||
|
||||
**状态:待实现。**
|
||||
|
||||
作为知识整理者,我希望把可靠的新认识放入现有知识库,而不是建立第二份正文存储。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 候选归纳尚无对应条目 | 选择“新建条目” | 显示正文预览、来源和目标位置,确认后才保存 |
|
||||
| 已有本地条目可以补充 | 选择“补充已有条目” | 显示新增内容与原内容的差异,确认后修改原条目 |
|
||||
| 用户查看的是外部只读资料 | 查找写入操作 | 不显示写回或远端同步按钮 |
|
||||
| 同一内容已被保存 | 再次整理 | 提示已有条目,避免重复创建 |
|
||||
|
||||
**界面行为**
|
||||
|
||||
- 图谱保存实体、关系和来源定位,不复制知识库正文。
|
||||
- 保存失败保留编辑预览,不能把候选显示为已写入。
|
||||
- 现有资料使用“打开知识库条目”,已有条目不显示“存入知识库”。
|
||||
|
||||
## 建议、任务与继续工作
|
||||
|
||||
### US-S16 审核心跳产生的记忆建议
|
||||
|
||||
**状态:已实现,沿用智能心跳页面。**
|
||||
|
||||
作为知识整理者,我希望逐条确认或忽略记忆候选。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 存在待确认记忆 | 打开待处理建议 | 显示类型、内容、置信度和显著性 |
|
||||
| 内容较长 | 点击展开 | 显示完整内容,再次点击可以收起 |
|
||||
| 用户确认 | 点击确认记忆 | 状态变为已确认,计数和指标更新 |
|
||||
| 用户不接受 | 点击忽略 | 候选不再作为待处理项,不改写来源 |
|
||||
|
||||
### US-S17 处理后续任务建议
|
||||
|
||||
**状态:已实现,沿用智能心跳页面。**
|
||||
|
||||
作为工作使用者,我希望把回顾产生的行动建议带入对话或标记完成。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 存在未完成的后续任务 | 点击“带入对话处理” | 将任务交给当前会话处理入口,不自动执行工具 |
|
||||
| 用户完成任务 | 点击标记完成 | 任务状态更新,行动转化指标刷新 |
|
||||
| 用户不再需要任务 | 点击忽略建议 | 任务标记为取消或不再待处理 |
|
||||
| 任务已经完成或取消 | 再次打开建议 | 不显示需要处理的操作按钮 |
|
||||
|
||||
### US-S11 带着上下文继续讨论
|
||||
|
||||
**状态:待实现。**
|
||||
|
||||
作为工作使用者,我希望围绕已有知识继续讨论,而不用重新交代背景。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 用户选中知识实体或阶段总结 | 点击“继续讨论” | 显示将携带的摘要、时间范围和来源列表 |
|
||||
| 用户移除部分上下文并确认 | 进入会话 | 会话只携带剩余上下文,并明确来自监督者 |
|
||||
| 新讨论产生内容 | 下一次整理 | 新内容可以关联到原实体或提出待核对的新关系 |
|
||||
| 用户没有确认上下文 | 关闭预览 | 不创建会话消息,也不改变图谱确认状态 |
|
||||
|
||||
## 历史、失败与权限
|
||||
|
||||
### US-S18 查看报告和运行审计
|
||||
|
||||
**状态:已实现。**
|
||||
|
||||
作为监督者配置者,我希望区分报告内容和产生报告的运行记录。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 已有报告 | 打开报告与记录 | 按时间显示摘要、亮点和建议数量 |
|
||||
| 用户点击展开报告 | 展开一项 | 显示完整摘要和亮点,可再次收起 |
|
||||
| 用户查看运行记录 | 打开审计列表 | 显示手动/计划触发、时间、状态、尝试次数和错误 |
|
||||
| 记录超过首屏数量 | 点击加载更多 | 追加历史,不替换当前已展开内容 |
|
||||
|
||||
**界面行为**
|
||||
|
||||
- 报告和 Run 审计是两个可区分的区域。
|
||||
- `claimed`、完成、失败和跳过使用文字和图标共同表达。
|
||||
- 失败信息直接显示在对应 Run 下,不能用空报告代替。
|
||||
|
||||
### US-S19 加载、刷新和首次空状态可区分
|
||||
|
||||
**状态:已实现;监督者页面必须沿用。**
|
||||
|
||||
作为用户,我希望知道页面是在加载、真的没有数据,还是读取失败。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 页面首次读取尚未完成 | 打开页面 | 显示加载状态和忙碌语义,不显示创建按钮造成误导 |
|
||||
| 首次读取失败 | 页面返回错误 | 显示错误原因和重试按钮 |
|
||||
| 已有数据显示但刷新失败 | 点击刷新后失败 | 保留旧数据,同时显示刷新失败提示和重试入口 |
|
||||
| 读取成功但没有数据 | 完成加载 | 显示首次配置或生成回顾的空状态 |
|
||||
|
||||
### US-S12 新一次失败不覆盖旧结果
|
||||
|
||||
**状态:待实现;当前智能心跳已有失败 Run 保留历史结果的基础行为。**
|
||||
|
||||
作为工作使用者,我希望一次模型、来源或网络失败不会抹掉上一次可用回顾。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 已有成功回顾 | 新一次整理失败 | 旧回顾继续可读,新运行显示失败原因和覆盖范围 |
|
||||
| 新一次整理被取消 | 用户查看工作回顾 | 显示已取消,不把部分内容标成完整回顾 |
|
||||
| 只有部分来源可用 | 整理完成 | 显示已覆盖和遗漏范围,结果标记为部分完成 |
|
||||
| 用户点击重试 | 重新运行 | 创建新的运行记录,不把旧失败记录改写为成功 |
|
||||
|
||||
### US-S13 历史回放不冒充当前来源
|
||||
|
||||
**状态:待实现。**
|
||||
|
||||
作为知识整理者,我希望回看过去时看到当时的认识,知道原始来源是否已经变化。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 来源后来被修改 | 回放旧阶段 | 仍显示当时保存的归纳和可用历史依据 |
|
||||
| 旧版原文无法恢复 | 点击来源 | 明确提示历史版本不可用,并显示当前可用信息的时间,不称其为旧原文 |
|
||||
| 当前结论与过去不同 | 回放过去 | 不把当前结论注入过去的图谱或阶段总结 |
|
||||
|
||||
### US-S20 遵守范围和访问边界
|
||||
|
||||
**状态:已实现于智能心跳输入与工具禁用边界;监督者目标行为待实现。**
|
||||
|
||||
作为受限访问者,我希望监督者只处理授权范围内的内容。
|
||||
|
||||
**Given / When / Then**
|
||||
|
||||
| Given | When | Then |
|
||||
| --- | --- | --- |
|
||||
| 计划是 Global | 运行回顾 | 只读取允许访问的有界会话、任务和 Global 已确认记忆 |
|
||||
| 计划绑定项目 | 运行回顾 | 只读取选中项目内容及允许共享的 Global 记忆 |
|
||||
| 模型尝试调用工具 | 整理期间 | 调用被拒绝,运行失败原因可审计 |
|
||||
| 模型输出项目外的记忆或任务 | 校验输出 | 结果被拒绝,不写入越权内容 |
|
||||
|
||||
**界面行为**
|
||||
|
||||
- 页面显示本次运行的冻结范围。
|
||||
- 权限不足、来源不可用和没有新内容使用不同状态。
|
||||
- 监督者的 Agent 身份不自动获得工具执行、批准或切换 Execute 的能力。
|
||||
|
||||
## 验收优先级与依赖
|
||||
|
||||
首个可用版本应先打通以下路径:
|
||||
|
||||
> 应用入口 → 选择范围 → 手动回顾 → 工作回顾 → 选择知识实体 → 查看多个时间事件 → 打开来源 → 预览并继续讨论
|
||||
|
||||
建议实施顺序:
|
||||
|
||||
1. 保持现有智能心跳四个页签、计划 CRUD、范围校验、报告和审计行为不回归。
|
||||
2. 增加监督者统一的工作回顾和共享结果模型。
|
||||
3. 接入最小故事线图谱:时间事件、知识实体、实体变化、来源和时间回放。
|
||||
4. 接入文字列表、窄屏和键盘操作,以及失败、取消和部分来源状态。
|
||||
5. 接入来源双向定位、继续讨论预览和本地知识库新建/补充。
|
||||
6. 最后接入侧栏监督反馈、增量整理和自动静默判定。
|
||||
|
||||
详细状态规则见[逻辑设计](./logic-design.md),页面结构和共享组件见[UI 设计](./ui-design.md),现有智能心跳的已实现范围见[智能心跳 PRD](../smart-heartbeat/prd.md)。
|
||||
|
||||
Reference in New Issue
Block a user