Files
mesalogo b9186a616c fix: retain historical events in the story spiral
Render every selected review event, including events without current story membership, and label current grouping without inventing historical assignments. Keep history selection inside the central canvas heading, use shared camera controls, and fit the default scene within the viewport.

Validation: 46 focused tests, synthetic and read-only portable-data Electron checks, Node/Agent/Web typechecks, targeted ESLint, and diff checks passed. All 21 reported events remain represented at wide and narrow widths; no live data writes or model calls.

Release note: Historical story spirals now retain unassigned events. Review history sits inside the canvas column, and camera controls have consistent spacing and framing.
2026-10-04 21:09:32 +08:00

6.8 KiB
Raw Permalink Blame History

故事线模型改造设计

状态:2026-10-02 已确认的目标设计。第 1 步(共享时间线、事件起止与密度、跨项目开关)、第 2 步(故事归属与用户调整)、第 3 步(时间螺旋视图)、第 4 步(经验抽取)和第 5 步(心跳故事建议、MCP 故事与经验查询、工作回顾按故事组织)已实现,见实施进度。本文定义监督回顾如何产出下一版故事线(时间螺旋、分层故事木片、经验 W),是 3D 故事线图谱概念 的数据来源合同。现有回顾流程见回顾分块调度设计,现有图谱工具见 Story Graph MCP 设计。

1. 结构总览

层 含义 来源
全局(根) 整条时间螺旋本身,即用户的全部经历;不是一片木片 所有来源
项目木片 按会话所属项目划分;无项目归属的内容进入“未归属项目” 会话归属,确定性,不调用模型
跨项目故事 同时涉及多个项目或不属于任何项目的长期事情,例如长期偏好、学习方向 故事归属阶段
功能木片 项目内的长期功能或主题 故事归属阶段
子线索 事件量足够大的功能再拆分;小功能不拆 故事归属阶段
经验 W 从故事中形成、可复用到其他故事的经验,默认是全局对象 经验抽取阶段

全局不作为单独的“全局记忆”重复处理:它是根视图,读取同一套事件、故事和经验。查看某个项目时,只是以该项目为过滤条件。

2. 已确认的决定

编号 决定
SL-1 层级为 全局 › 项目 › 功能 › 子线索;子线索仅在功能事件量达到阈值时出现,阈值可在设置中调整
SL-2 跨项目或无项目的长期事情,作为全局根下的“跨项目故事”,与项目木片并列
SL-3 每个事件只归属一个主故事,可另外关联其他故事;关联不影响木片的长度和密度统计
SL-4 经验自动生成即可供 Agent 读取,不设确认门槛;标记“自动归纳”,用户可以编辑、合并、删除
SL-5 用户对故事和经验的调整(改名、合并、拆分、移动事件、编辑、删除)受保护,后续回顾不覆盖;删除的对象不会因同一证据再次生成
SL-6 注意力密度按来源统计:时段内的消息轮次与正文量,不由模型判断;只表示投入集中程度
SL-7 每个来源版本只提取一次,项目与全局共用提取结果和增量进度
SL-8 设置提供“跨项目关联”,默认关闭。关闭时新内容只关联本项目已有的知识;开启后可关联其他项目中的同一件事,跨项目故事也只在开启时生成

3. 回顾流程改造

采集来源(按来源版本增量)
  ↓
批次提取:事件带开始/结束时间(取原始消息时间)、来源引用
  ↓
故事归属(新增,不读原文)
  · 项目:按会话归属确定
  · 功能/子线索/跨项目:召回候选故事 → 一次模型调用判断归入已有、新建或暂不归类
  ↓
经验抽取(新增,低频,不读原文)
  · 规则挑候选:有明确结果的决定、多个故事中重复出现的做法、说明原做法问题的修订
  · 有候选时一次模型调用:经验内容、形成依据、适用条件、边界
  · 记录后续应用及结果
  ↓
导航摘要 → 发布

规则:

  • 故事跨回顾保持同一身份,沿用实体候选编号机制;长时间无事件的故事能被接回,不新建。
  • 故事状态(进行中、已结束)必须有内容依据;长期无事件只标“暂无进展”,不推断结束。
  • 允许“暂不归类”,不为凑层级强行归组;暂不归类的事件在项目下以淡色木片显示。
  • 经验的每条依据必须对应到具体事件和来源,否则不保存;没有候选时不调用模型。
  • 新增阶段失败时,已发布的提取结果和处理进度保留,可单独重试该阶段。

4. 用户调整

图谱是可编辑的结果,不需要逐条审批:

  • 故事:改名、合并、拆分、调整层级、把事件移到其他故事。
  • 经验:编辑内容与适用条件、合并重复、删除。
  • 入口位于故事线图谱的详情面板与 3D 视图选中对象的详情中,共用同一组操作。
  • 每次调整可撤销,并记录在活动记录的修改记录中。

5. 展示与使用

  • 故事线图谱新增 3D 视图,与现有平铺视图并列,几何、时间尺度、聚合规则沿用 3D 概念;Three.js 仅在打开 3D 视图时加载,WebGL 不可用时使用平铺视图。
  • 结果级图谱与聚合图谱都返回 attention。结果级查询按该结果保存的范围及时间区间统计当前消息,螺旋使用同一时间窗口。当前故事成员与结果事件按精确 ID 求交,点的名称与时间取所选结果记录。没有当前主故事归属的事件也进入螺旋,按来源确定的 project_id 归入显式未归属分组;分组仅用于显示,不持久化为功能故事。重提取后的不同 ID 不通过名称、时间或当前成员反推历史归属,所选事件集合不扩大。界面明确标注当前分组口径,历史故事成员快照仍不可用。
  • MCP 增加按故事、按经验查询;经验返回时附“自动归纳 / 用户编辑”标记和依据。
  • 心跳建议增加“故事长期无进展”和“已有经验可能适用于当前故事”。两者都由规则选出:前者按设置的天数判断,只提示不改状态;后者要求共享不过于通用的实体。每次心跳各最多 3 条,排在未决事项之前。
  • 工作回顾按故事组织:推进了哪些故事、新出现哪些故事、形成或应用了哪些经验。

6. 存储

新增故事表(含层级与父故事)、事件与故事的归属/关联、经验表、经验依据与应用记录、用户调整记录;对应一次数据库升级。已有回顾结果在升级后按新流程重建,原始来源不变。

7. 实施顺序与验收

步骤 内容 验收(真实数据副本 + .env.deepseek.local 中的 DeepSeek)
1 统一时间线(SL-7)、事件时间跨度与密度(SL-6) 重叠回顾不产生重复事件;项目与全局不重复处理同一来源
2 故事归属与用户调整(SL-1~SL-3、SL-5) 多次增量回顾后故事不碎片化;间断后的事件接回原故事;调整不被覆盖
3 3D 视图接入真实数据 长期数据下时间尺度与聚合正常
4 经验抽取(SL-4) 每条经验依据可追溯到原文;无候选时零额外调用
5 MCP、心跳建议、工作回顾页 Agent 能按故事接手工作、按经验给出建议