Files
mesalogo d80d42b032 feat(storage): move desktop SQLite ownership into a storage utility process
Main no longer opens desktop business SQLite. A single utility-process
storage owner holds the Assistant, Knowledge, attachment, document-result,
remote-binding and native model-ledger databases and runs whole domain
transactions; Main and Runtime callers use explicit async domain operations.

- Remove the Main readWithFallback path and the supervision worker's
  separate business write connection; manifests are scanned read-only and
  committed by the sole writer.
- Remote events are ACKed only after commit; process loss reports
  unconfirmed writes instead of replaying them.
- Use native utilityProcess messaging with one in-flight bound (32) and
  ordered waiting instead of capacity rejection and retries.
- Start the storage process before the window so startup overlaps.
- Keep short tool output in memory and store full output once in owned
  storage; paging, branching, restart and deletion reuse that copy.
- Put required runtime launch files under goodbuddy-prefixed owned temp
  directories and reclaim confirmed stale ones; stop writing duplicate
  parsed.md.
- Add lint guards for SQLite ownership and architecture, concurrency
  acceptance fixtures, and maintenance/architecture documentation.

Validation: typecheck and lint pass. Alternating baseline (edf019aa) vs
candidate runs show no regression on single-session, C01, C02, C04 and a
5-minute C06; Main p99 drops from ~21 ms to ~16.7 ms under concurrency.
Fresh portable copy (1.75M events) upgrade content unchanged; real-model
output paging passes with 4 external requests. Full npm test runs had
1-9 different timing-sensitive failures per run that pass when rerun.
Not covered: C03 review publication, C07 source body, app-level C05.
2026-10-06 15:40:18 +08:00

11 KiB
Raw Permalink Blame History

监督者应用产品设计

日期:2026-09-23。状态:工作回顾、图谱、活动和设置已接入;其余目标能力以实施进度为准。

本文定义监督者应用的定位、功能边界与知识库关系。会话监督 PRD继续负责对执行过程的观察、证据与介入边界;本文将该能力纳入更完整的工作回顾应用。

产品定位

监督者是持续关注指定工作范围的智能 Agent。用户可以主动要求回顾,也可以通过智能心跳定期唤醒它。它根据可见记录判断是否需要反馈、整理阶段或更新知识关联,没有值得反馈的变化时保持安静。

名称 职责
监督者 应用名称,负责观察、回顾和解释工作进展
智能心跳 按计划触发增量回顾,并按配置的介入方式生成建议;不单独读取原文或生成报告(FR-S12)
监督反馈 会话右侧的阶段回顾、问题提示与证据入口
故事线图谱(Story Graph) 呈现事件、知识实体及其随时间发展的关系

FR-S1:将现有智能心跳入口整合、升级为监督者,不增加另一个平级重复应用。当前通过应用中心管理;未来应用市场提供同一应用的发现与启用入口。市场建设不应成为监督者落地的前置条件。

应用默认关闭,用户显式启用后才接受新的回顾工作;关闭时保留计划和历史。默认值、已保存选择、自动运行条件及在途运行边界由应用启停与执行统一定义。

FR-S2:应用包含“工作回顾 / 故事线图谱 / 自动监督 / 活动记录 / 设置”五个主视图。工作回顾提供统一监督结果阅读、历史选择和手动新回顾,结果显示自身范围与日期;自动监督集中展示计划状态、范围、周期及下次执行时间,以及运行概览、指标、趋势、自动监督报告、待处理记忆与行动建议和心跳审计,创建和编辑使用同一份 Modal 表单;活动记录展示统一实际执行、进度、详情及结果入口,支持按计划 ID 筛选;设置管理模型选择、超时、并发、分页、分批及单次响应容量,分类页签见 UI 设计。计划保存失败保留草稿,关闭未保存修改须确认;编辑已暂停计划保持暂停,创建须显式保存并启用。原有运行记录及应用、存储标识保留。

当前设置支持监督整理模型超时及监督模型并发数。并发设置不限制普通聊天,也不保证避免上游限流;排队不消耗模型阶段时限,降低并发不打断在途请求。取值、生效规则及历史报告设置的保留边界由模型阶段调度定义。

FR-S13:监督者的“设置 → 模型”可选择跟随应用默认文本模型或已有文本模型连接,复用连接及其凭据。回顾执行中修改设置不切换模型;生效时点、继续和重试规则见监督者模型选择。

FR-S10:活动同时覆盖手动监督回顾、定时心跳及用户立即运行的心跳。每条记录显示触发方式、范围、开始与结束时间、运行状态、失败原因和已有结果入口。同一次心跳的报告和下游监督回顾合为一条活动,报告保存成功不能掩盖下游仍在运行、暂停或失败。活动读取不调用模型,关闭应用后不查询活动。新批次运行支持暂停及继续,保留成功批次;人工修改的时间序列审计尚未实现,历史缺失不得猜测补齐。

FR-S2:分页只控制数据库读取批量,不能限制最终处理范围。当前已开放来源页大小、每批正文/消息上限;这些配置在新建回顾时保存,继续沿用。单次响应容量按当前设置生效。回顾持续处理至完成,不按累计运行时长自动暂停。当前字段和未来高级参数的边界见生产接线,交互见 UI 设计。完整覆盖、来源校验与事实保留不作为可关闭选项。

范围与触发

FR-S3:首次启用时选择项目、会话及可用来源,生成前显示范围和时间区间。应用启用不等于默认观察全部内容。已有心跳的 Global、单项目和多项目范围语义由智能心跳 PRD定义,统一应用时保留。

FR-S4:支持手动回顾,并复用已有定时检查机制。自动报告和监督回顾分别只处理所选范围、回顾窗口内新增、修订或尚未处理的来源片段;没有待处理输入时跳过模型及结果生成。失败输入保留重试资格,预算遗漏不得记为已处理。手动回顾重新整理所选历史区间。具体规则见自动增量与手动重看。事件触发和阶段自动判定仍待设计。

回顾默认增量“回顾”默认增量,与心跳整理一致;重看历史改为“更多”中的显式“重新整理”。心跳不再先生成独立报告,同一来源版本在一次触发中只读取一次。规则见心跳职责与介入。

FR-S12(已实现,主动介入除外):智能心跳的职责限定为定时触发增量回顾和按计划配置介入。介入方式为“仅更新记忆”“生成建议”(默认);会话级“主动介入”后续交付,当前不显示。建议只根据本次图谱变化产生,附来源依据,替代旧心跳报告、记忆建议和行动建议;无变化不调用模型,有变化而无建议候选时不发起建议调用。验收见 US-S32、US-S33。

FR-S5:会话右侧在跟随模式下展示当前会话的监督反馈;固定到 Conversation、Task 或 Experiment 时保持所选目标并显示其名称,切换聊天不改变监督目标。跨会话总结在完整应用中展示。反馈包含结论、来源和“在图谱中查看”定位入口。用户主动选择“发到当前会话”才加入聊天消息,同一结果不重复触发侧栏和全局通知。

FR-S6:监督者可提出整理与修改建议;已有会话监督的观察边界继续生效。自动更新图谱不能静默覆盖用户修改的描述、已确认的关系或已有知识库正文。取消整理后保留上次结果;失败说明受影响范围并允许重试,部分结果不得显示为完整回顾。

FR-S4、FR-S6、FR-S10 的验收要求:完整分页处理冻结范围内的入选来源;叶子事实和来源完整保留,摘要用于导航。用户主动暂停或失败后保留成功批次与位置,重启后继续,不重复计算仍有效的成功批次;未读完或汇总未成功不能标完成。该续跑要求已进入生产接线,当前实现、实测范围与剩余差异见回顾分块调度。

与知识库的关系

FR-S7:知识库管理资料、索引、检索和可复用知识;监督者管理工作事件、阶段总结与演变关系。故事线图谱共用现有来源,引用知识库对象,不复制一套资料正文,也不取代已有知识库图谱。

一个知识实体可以关联多份资料,一份资料也可支撑多个实体。图谱的关系与阶段记录由监督者维护,原始内容由所属会话、笔记或知识库维护。新增功能的概念实体与现有图谱实体是否共用标识,需结合现有模型制定技术方案。

FR-S8:本地知识库提供双向定位:资料详情可进入相关故事线图谱,图谱详情可返回资料及引用位置。已有本地条目显示“打开知识库条目”;新归纳提供“新建条目”或“补充已有条目”,先预览内容和引用再保存。外部引用沿用现有能力,打开已保存的有界片段及可用定位信息,不承诺重新打开远端原文;缺少位置时明确提示。外部知识库保持只读;不得因图谱整合而增加对 Dify、FastGPT、RAGFlow 的写入或批量同步。

FR-S9:来源事实、自动归纳、待核对关联和用户确认内容分别标注。移除关联不删除原文,纠正操作可撤销。来源失效时显示不可用状态;回放历史时使用当时已有的归纳与依据,无法恢复旧版原文时明确提示,不能以当前版本冒充历史内容。

未发布回顾遇到用户删除会话时,跳过该会话来源并继续其他会话,明确显示省略数;无剩余来源时结束且不生成空报告。已发布历史的保留规则不变。具体失效与覆盖语义见会话删除规则,验收见 US-S35。

落地范围

FR-S11(D1 已实现,D2/D3 待实现):监督者以时态 Story Graph 为主要产出,统一用户侧工作记忆概念并保留已确认偏好与已有数据。Agent 在继续工作、查询此前决定及其修订时,按需使用只读的 story_graph_search、story_graph_get_context、story_graph_read_source,读取范围、时间、演变、覆盖及可引用来源;工具不调用模型或触发回顾,监督者关闭时不暴露且拒绝调用。本地和远程 Runtime 共用读取语义。后续目标为同一来源版本提取一次并跨 scope 复用叶子事实;当前精确 scope 独立处理及 memory 读取继续保留。as_of 仅在历史重建能力具备后另行交付。合同与过渡阶段由专项设计定义,验收见 US-S28 至 US-S31;本轮没有数据迁移。

触发、整理与结果共享规则,以及整体架构和图谱对象关系见逻辑设计。

FR-S11 的会话控制:输入区对话设置在知识库上方提供“使用故事图谱”,每个会话默认开启并独立保存。仅在监督者应用启用时显示,应用关闭时完全隐藏。关闭会话开关后,本地及远程 Agent 不再获得图谱工具,已有能力会话调用也被拒绝;开启仅允许 Agent 自主决定是否调用 MCP,不注入图谱上下文或触发回顾。验收见 US-S30。

首个完整流程为:启用监督者、选择范围、生成回顾、进入图谱、核对来源、携带选定上下文继续讨论。知识库双向定位与内容补充随后接入同一流程。图谱关系辅助检索需单独验证效果,不作为首版默认检索策略。

当前工作回顾和图谱读取生产结果,活动展示实际执行与无变化检查、暂停和继续入口,自动监督设置复用已有计划。完整图谱回放及应用市场尚未实现,验收证据见实施进度。

具体 UI 与验收见UI 设计和User Stories。图谱对象与操作由故事线图谱设计定义。已实现的实体身份和增量处理方式见技术设计,来源旧版本能力仍受原应用限制。