dsh-mnemon 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/README.md +103 -129
  2. package/README.zh-CN.md +173 -0
  3. package/SECURITY.md +2 -2
  4. package/docs/README.md +4 -4
  5. package/docs/assets/diagrams/en/memory-system-flow.png +0 -0
  6. package/docs/assets/diagrams/zh-CN/memory-system-flow.png +0 -0
  7. package/docs/assets/media/dsh-mnemon-memory-system-demo-poster.jpg +0 -0
  8. package/docs/assets/media/dsh-mnemon-memory-system-demo.gif +0 -0
  9. package/docs/assets/media/dsh-mnemon-memory-system-demo.mp4 +0 -0
  10. package/docs/assets/screenshots/conversation-memory-jump.png +0 -0
  11. package/docs/assets/screenshots/conversation-save-dialog.png +0 -0
  12. package/docs/assets/screenshots/conversation-turn-memory.png +0 -0
  13. package/docs/assets/screenshots/document-create-dialog.png +0 -0
  14. package/docs/assets/screenshots/documents-markdown.png +0 -0
  15. package/docs/assets/screenshots/entities-context.png +0 -0
  16. package/docs/assets/screenshots/memory-content.png +0 -0
  17. package/docs/assets/screenshots/overview-memory-graph.png +0 -0
  18. package/docs/assets/screenshots/recall-agent-answer.png +0 -0
  19. package/docs/assets/screenshots/remember-dialog.png +0 -0
  20. package/docs/assets/screenshots/runtime-memory-add.png +0 -0
  21. package/docs/assets/screenshots/runtime-memory.png +0 -0
  22. package/docs/assets/screenshots/settings-memory-system.png +0 -0
  23. package/docs/assets/screenshots/status-overview.png +0 -0
  24. package/docs/assets/screenshots/version-check.png +0 -0
  25. package/docs/en/README.md +40 -32
  26. package/docs/en/architecture.md +6 -2
  27. package/docs/en/configuration.md +15 -6
  28. package/docs/en/development.md +24 -4
  29. package/docs/en/getting-started.md +77 -87
  30. package/docs/en/interfaces.md +98 -90
  31. package/docs/en/operations.md +103 -93
  32. package/docs/en/project-overview.md +90 -194
  33. package/docs/en/storage-model.md +6 -0
  34. package/docs/en/ui-guide.md +156 -0
  35. package/docs/zh-CN/README.md +37 -29
  36. package/docs/zh-CN/architecture.md +6 -2
  37. package/docs/zh-CN/configuration.md +15 -6
  38. package/docs/zh-CN/development.md +24 -4
  39. package/docs/zh-CN/getting-started.md +70 -80
  40. package/docs/zh-CN/interfaces.md +84 -76
  41. package/docs/zh-CN/operations.md +96 -86
  42. package/docs/zh-CN/project-overview.md +86 -190
  43. package/docs/zh-CN/storage-model.md +6 -0
  44. package/docs/zh-CN/ui-guide.md +160 -0
  45. package/lib/client.js +2354 -1944
  46. package/lib/client.js.map +1 -1
  47. package/lib/index.js +446 -39
  48. package/lib/types/channels.d.ts +4 -0
  49. package/lib/types/channels.d.ts.map +1 -0
  50. package/lib/types/channels.js +4 -0
  51. package/lib/types/channels.js.map +1 -0
  52. package/lib/types/client/MnemonSaveAction.d.ts.map +1 -1
  53. package/lib/types/client/MnemonSaveAction.js +4 -55
  54. package/lib/types/client/MnemonSaveAction.js.map +1 -1
  55. package/lib/types/client/MnemonSettingsCard.d.ts.map +1 -1
  56. package/lib/types/client/MnemonSettingsCard.js +4 -5
  57. package/lib/types/client/MnemonSettingsCard.js.map +1 -1
  58. package/lib/types/client/MnemonTurnTail.d.ts +3 -0
  59. package/lib/types/client/MnemonTurnTail.d.ts.map +1 -1
  60. package/lib/types/client/MnemonTurnTail.js +15 -3
  61. package/lib/types/client/MnemonTurnTail.js.map +1 -1
  62. package/lib/types/client/MnemonView.d.ts +4 -0
  63. package/lib/types/client/MnemonView.d.ts.map +1 -1
  64. package/lib/types/client/MnemonView.js +424 -97
  65. package/lib/types/client/MnemonView.js.map +1 -1
  66. package/lib/types/client/MnemonViewAppearance.d.ts +21 -0
  67. package/lib/types/client/MnemonViewAppearance.d.ts.map +1 -0
  68. package/lib/types/client/MnemonViewAppearance.js +67 -0
  69. package/lib/types/client/MnemonViewAppearance.js.map +1 -0
  70. package/lib/types/client/anchor.d.ts +1 -1
  71. package/lib/types/client/anchor.js +1 -1
  72. package/lib/types/client/api.d.ts +4 -0
  73. package/lib/types/client/api.d.ts.map +1 -1
  74. package/lib/types/client/api.js +10 -1
  75. package/lib/types/client/api.js.map +1 -1
  76. package/lib/types/client/index.d.ts.map +1 -1
  77. package/lib/types/client/index.js +22 -25
  78. package/lib/types/client/index.js.map +1 -1
  79. package/lib/types/client/locales.d.ts +126 -294
  80. package/lib/types/client/locales.d.ts.map +1 -1
  81. package/lib/types/client/locales.js +140 -308
  82. package/lib/types/client/locales.js.map +1 -1
  83. package/lib/types/client/settings.d.ts +1 -1
  84. package/lib/types/client/settings.d.ts.map +1 -1
  85. package/lib/types/client/settings.js +1 -1
  86. package/lib/types/client/settings.js.map +1 -1
  87. package/lib/types/client/sidebar-entry.d.ts +1 -1
  88. package/lib/types/client/sidebar-entry.d.ts.map +1 -1
  89. package/lib/types/client/sidebar-entry.js +3 -1
  90. package/lib/types/client/sidebar-entry.js.map +1 -1
  91. package/lib/types/client/workspace-mount.d.ts.map +1 -1
  92. package/lib/types/client/workspace-mount.js +8 -5
  93. package/lib/types/client/workspace-mount.js.map +1 -1
  94. package/lib/types/config.d.ts +1 -3
  95. package/lib/types/config.d.ts.map +1 -1
  96. package/lib/types/config.js +10 -12
  97. package/lib/types/config.js.map +1 -1
  98. package/lib/types/index.d.ts +2 -1
  99. package/lib/types/index.d.ts.map +1 -1
  100. package/lib/types/index.js +2 -1
  101. package/lib/types/index.js.map +1 -1
  102. package/lib/types/lifecycle.js +3 -3
  103. package/lib/types/lifecycle.js.map +1 -1
  104. package/lib/types/memory-bodies.d.ts +1 -0
  105. package/lib/types/memory-bodies.d.ts.map +1 -1
  106. package/lib/types/memory-bodies.js +7 -0
  107. package/lib/types/memory-bodies.js.map +1 -1
  108. package/lib/types/rpc.d.ts +5 -7
  109. package/lib/types/rpc.d.ts.map +1 -1
  110. package/lib/types/rpc.js +28 -8
  111. package/lib/types/rpc.js.map +1 -1
  112. package/lib/types/service.d.ts +2 -0
  113. package/lib/types/service.d.ts.map +1 -1
  114. package/lib/types/service.js +4 -0
  115. package/lib/types/service.js.map +1 -1
  116. package/lib/types/settings.d.ts.map +1 -1
  117. package/lib/types/settings.js +1 -2
  118. package/lib/types/settings.js.map +1 -1
  119. package/lib/types/version-updates.d.ts +61 -0
  120. package/lib/types/version-updates.d.ts.map +1 -0
  121. package/lib/types/version-updates.js +377 -0
  122. package/lib/types/version-updates.js.map +1 -0
  123. package/package.json +23 -8
  124. package/README.en.md +0 -199
  125. package/docs/zh-CN/assets/screenshots/conversation-recall.png +0 -0
  126. package/docs/zh-CN/assets/screenshots/conversation-writeback.png +0 -0
  127. package/docs/zh-CN/assets/screenshots/documents-markdown.png +0 -0
  128. package/docs/zh-CN/assets/screenshots/entities-context.png +0 -0
  129. package/docs/zh-CN/assets/screenshots/memory-content.png +0 -0
  130. package/docs/zh-CN/assets/screenshots/overview-memory-graph.png +0 -0
  131. package/docs/zh-CN/assets/screenshots/recall-agent-answer.png +0 -0
  132. package/docs/zh-CN/assets/screenshots/runtime-memory.png +0 -0
  133. package/lib/types/client/MnemonToolviews.d.ts +0 -19
  134. package/lib/types/client/MnemonToolviews.d.ts.map +0 -1
  135. package/lib/types/client/MnemonToolviews.js +0 -172
  136. package/lib/types/client/MnemonToolviews.js.map +0 -1
  137. /package/docs/{en/assets → assets/diagrams/en}/project-architecture.svg +0 -0
  138. /package/docs/{zh-CN/assets → assets/diagrams/zh-CN}/project-architecture.svg +0 -0
@@ -2,34 +2,20 @@
2
2
 
3
3
  **简体中文** | [English](../en/interfaces.md) | [文档中心](./README.md)
4
4
 
5
- ## Web 工作台
5
+ 本页是集成参考。日常使用请先看 [Sidebar 与对话交互指南](./ui-guide.md)。
6
6
 
7
- `displayMode=sidebar`(默认)通过左侧栏打开独立工作台,`displayMode=buildin` 通过原有 DSH `conversation.view` 内嵌标签页打开同一功能界面。两种形态由设置页实时切换且不会同时挂载。主要 Web 界面跟随 DSH 全局语言和明暗主题。顶部导航分为三组,组间以分隔线呈现:「状态」独立成第一组;「运行时、记忆体、档案」对应三层存储;「沉淀、检索、实体、内容」为读写工具。默认进入「状态」页。
7
+ ## 用户界面入口
8
8
 
9
- | 页面 | 用途 | 调用边界 |
10
- |---|---|---|
11
- | 状态 | CLI、运行时热记忆、存储域、记忆体、Documents、生命周期和 worker 诊断 | 聚合读取 |
12
- | 运行时 | 查看和维护 USER / MEMORY 热记忆及容量 | 普通 mutation 确定性;容量维护可启动 worker |
13
- | 记忆体 | 记忆体目录、激活开关与元信息编辑、多空间实时图谱、节点检查 | 确定性 RPC 读取;开关与元信息编辑为写 RPC |
14
- | 档案 | 搜索、阅读、创建、更新、归档 Documents | 搜索/编辑走控制层;归档启动 worker |
15
- | 沉淀 | 让记忆 worker 选择范围、查重并写入;支持高级约束 | `spawn` 语义写入 |
16
- | 检索 | smart / keyword / basic 直连召回;可选证据限定 Agent 答案 | 直接服务读取;Agent 答案使用无工具 worker |
17
- | 实体 | 高频实体和实体相关上下文 | 直接服务读取 |
18
- | 内容 | 无 recall 副作用地浏览已激活记忆体、复制、克隆或软删除 | 图谱读取;删除走 worker |
19
-
20
- 图谱每 15 秒同步一次,也可以手动刷新。自然布局、均匀重置、拖拽和键盘微调只影响客户端展示,不修改 Mnemon 数据。
21
-
22
- ### 对话内交互
23
-
24
- 记忆系统在对话流内以三个 DSH 原生槽位呈现,全部为纯增量注册,不替换任何官方渲染:
25
-
26
- | 槽位 | 呈现 | 数据与交互 |
27
- |---|---|---|
28
- | `tool.call.toolview`(按工具名 keyed) | 每个 `mnemon_*` 工具调用渲染为记忆风格卡片行:状态点、Mnemon 标、召回/沉淀标题与工具专属摘要;悬停出现「在记忆视图中打开」与「查看轨迹」 | 摘要从调用参数与已定稿结果 JSON 提取(recall/document-search 显示命中数、status 显示引擎健康、bodies 显示目录统计等);展开显示参数与结果原文;跳转经 `mnemon:anchor` 事件通道落到记忆视图对应页(带查询 seed) |
29
- | `conversation.chat.turnTail`(chain) | 回合尾动作行上方一行「本回合记忆 · 召回 N · 沉淀 M · 档案检索 K」;展开列出具体工具名,并可跳到状态页 | 通过只读 RPC `turn-activity` 从宿主持久会话日志按 turn 统计 `mnemon_*` 调用;chain `select` 拒绝未完成回合,无记忆活动的回合不渲染任何内容 |
30
- | `conversation.chat.assistant-actions`(list,id `mnemon-save`) | 已定稿助手回复动作区(反馈按钮旁)的「存入记忆」按钮;点击展开候选面板 | 面板经只读 RPC `assistant-message` 按 messageId 提取消息文本为可编辑候选;提交走既有写 RPC `supervise`(受监督写回:记忆子 Agent 判断、查重、选择记忆体),显示子 Agent 回执;只读部署提前禁用并提示 |
9
+ | 入口 | 默认 | 说明 |
10
+ |---|---:|---|
11
+ | Sidebar | 是 | 左侧栏独立“记忆系统”工作台;状态、运行时、记忆体、档案四个一级标签 |
12
+ | Buildin | 否 | 原有 `conversation.view` 内嵌标签页,保留既有视觉 |
13
+ | 本回合记忆 | 是 | 已完成回合的记忆工具摘要;展开后按工具名跳到对应页面 |
14
+ | 存入记忆 | 是 | 已定稿助手回复旁的操作;确认后调用监督写入 |
15
+ | `/mnemon` | — | 对话命令入口 |
16
+ | 模型工具 | — | Root Agent 的结构化读写入口 |
31
17
 
32
- `turn-activity`、`assistant-message` 为新增只读端点,与既有端点共用同一 Host 通道与错误语义。对话内交互的渲染扩展面契约与后续「正文内联记忆高亮」方案见 Mnemon 档案「dsh-mnemon 对话内记忆交互侦察」。
18
+ Sidebar 与 Buildin 实时互斥挂载,共享功能、数据和 Host 服务。对话内两个入口可在 `mnemon-ui` 设置中分别关闭。
33
19
 
34
20
  ## 模型工具
35
21
 
@@ -37,37 +23,37 @@
37
23
 
38
24
  | 工具 | 用途 | Root Agent 路径 |
39
25
  |---|---|---|
40
- | `mnemon_memory_bodies` | 读取 Memory Space 目录和统计 | 直接服务 |
41
- | `mnemon_recall` | 从一个或多个 active spaces 召回 | `spawn` recall worker |
42
- | `mnemon_related` | 从已知 ID 遍历关系 | `spawn` related worker;root 路径固定请求两跳 |
43
- | `mnemon_status` | CLI、配置和 active spaces 聚合状态 | 直接服务 |
44
- | `mnemon_document_search` | 确定性搜索受管 Documents | 直接 Documents 控制层 |
26
+ | `mnemon_status` | CLI、配置、存储与目录聚合状态 | 直接服务 |
27
+ | `mnemon_memory_bodies` | 读取记忆体目录与统计 | 直接服务 |
28
+ | `mnemon_recall` | 从一个或多个 active 记忆体召回 | `spawn` recall worker |
29
+ | `mnemon_related` | 从已知 ID 遍历关系 | `spawn` related worker;Root 默认两跳 |
30
+ | `mnemon_document_search` | 确定性搜索受管档案 | Documents 控制层 |
45
31
 
46
- 这里的“只读”表示不修改受管正文或长期语义内容。`mnemon_document_search` 命中后仍会更新 `lastAccessedAt` 并重写 Document index,用于 LRU 排序。
32
+ “只读”表示不修改受管正文或长期语义内容。`mnemon_document_search` 命中后仍会更新 `lastAccessedAt`,用于 LRU 排序,因此功能只读不等于磁盘只读。
47
33
 
48
34
  ### `writeEnabled=true` 时的工具
49
35
 
50
36
  | 工具 | 用途 | Root Agent 路径 |
51
37
  |---|---|---|
52
- | `mnemon_runtime_memory` | `add` / `replace` / `remove` 热记忆 | 确定性控制层;add 溢出时 worker |
53
- | `mnemon_document_manage` | 创建、更新或归档 Document | 创建/更新确定性;归档 worker |
54
- | `mnemon_remember` | 长期沉淀一条洞察 | `spawn` write worker |
38
+ | `mnemon_runtime_memory` | `add` / `replace` / `remove` 热记忆 | 确定性控制;add 溢出时可能启动 worker |
39
+ | `mnemon_document_manage` | 创建、更新或归档档案 | 创建/更新确定性;归档使用 worker |
40
+ | `mnemon_remember` | 沉淀一条长期洞察 | `spawn` write worker |
55
41
  | `mnemon_link` | 建立 typed relationship | `spawn` write worker |
56
42
  | `mnemon_forget` | 按精确 ID 软删除 | `spawn` write worker |
57
- | `mnemon_memory_body_create` | 创建独立 Memory Space | `spawn` write worker |
58
- | `mnemon_memory_body_update` | 更新名称、description、active | `spawn` write worker |
43
+ | `mnemon_memory_body_create` | 创建独立记忆体 | `spawn` write worker |
44
+ | `mnemon_memory_body_update` | 更新名称、说明或 active | `spawn` write worker |
59
45
  | `mnemon_memory_body_merge` | 非破坏性导入合并 | `spawn` write worker |
60
46
 
61
- worker 内调用同名工具时直接到服务层,不再委派。
47
+ worker 内调用同名工具时直接进入服务层,不再递归委派。
62
48
 
63
49
  ## 工具准入建议
64
50
 
65
- - 热记忆:用户明确偏好、稳定项目约定、环境事实和高频经验。
66
- - Document:形成完整结构和理由的设计、调查、流程或交接。
67
- - 长期 Memory Space:明确要求跨任务保留,或适合图关系和深召回的稳定洞察。
68
- - 跳过:问题、猜测、临时进度、完成日志、原始输出、秘密、可轻易重新发现的仓库事实。
51
+ - **运行时**:明确偏好、稳定项目约定、环境事实和高频经验。
52
+ - **档案**:具有完整结构和理由的设计、调查、流程、复盘或交接。
53
+ - **记忆体**:需要跨任务保留,或适合图关系与深召回的稳定事实、决策和洞察。
54
+ - **跳过**:问题、猜测、临时进度、完成日志、原始输出、秘密和可轻易从仓库重新发现的普通事实。
69
55
 
70
- `mnemon_forget` 是破坏性语义操作,只有用户明确要求或内容已被验证错误/过时时才应执行。
56
+ `mnemon_forget` 是破坏性语义操作;只有用户明确要求,或内容已确认错误 / 过时时才应执行。
71
57
 
72
58
  ## `/mnemon` 命令
73
59
 
@@ -81,17 +67,32 @@ worker 内调用同名工具时直接到服务层,不再委派。
81
67
  ```
82
68
 
83
69
  - 空 `/mnemon` 等价于 `status`。
84
- - `status` 确定性读取,不启动模型。
85
- - `recall`、`related`、`remember` 和 `forget` 使用命令所在 live Agent 作为 worker parent。
70
+ - `status` 是确定性读取,不启动模型。
71
+ - `recall`、`related`、`remember`、`forget` 使用命令所在 live Agent 作为 worker parent。
86
72
  - 命令 recall 最多返回 10 条。
87
- - `forget` 参数必须是一个不含空格的精确 ID。
88
- - 当前命令帮助和结果主要为中文,尚未跟随 Web locale。
73
+ - `forget` 必须接收一个不含空格的精确 ID。
89
74
 
90
- ## RPC 通道
75
+ ## 对话内交互契约
76
+
77
+ | DSH 槽位 | 注册 | 行为 |
78
+ |---|---|---|
79
+ | `conversation.chat.turnTail` | chain | 通过 `turn-activity` 汇总完成回合中的 `mnemon_*` 调用;无活动或未完成回合不渲染 |
80
+ | `conversation.chat.assistant-actions` | list,`id=mnemon-save` | 通过 `assistant-message` 读取已定稿文本;只在用户确认后调用 `supervise` |
81
+
82
+ 两者都是增量注册,不替换 DSH 官方渲染。`assistant-message` 读取的候选可编辑,长回复会按界面上限截取;写入结果以记忆子 Agent 回执为准。
83
+
84
+ ## 工作区路由
85
+
86
+ 工作台请求携带 `sessionId` 和可选 `workspaceId`。Host 只接受 `workspaceRegistry` 已登记的 ID:
91
87
 
92
- RPC 是 DSH Host 与本插件 Web client 的内部桥,不是承诺稳定的外部 HTTP API。
88
+ - 确定性读取与人工维护可以路由到 `workspaceId` 选择的查看根;
89
+ - Agent、工具、命令和生命周期仍按 `sessionId` 对应 Agent cwd 路由;
90
+ - `status.workspaceContext` 返回 selected / effective roots 与 `aligned`;
91
+ - 需要 Agent 的操作在未对齐时拒绝。
93
92
 
94
- 工作台数据请求会携带 `sessionId` 和可选的 `workspaceId`。Host 只接受 `workspaceRegistry` 中已登记的工作区 ID:确定性读取与人工维护路由到 `workspaceId` 指向的查看根,而 Agent、工具和生命周期继续按 `sessionId` 对应 Agent 的 cwd 路由。`status.workspaceContext` 返回两条根目录和 `aligned` 状态;需要 Agent 写入的操作在未对齐时被拒绝。
93
+ ## RPC 通道
94
+
95
+ RPC 是 DSH Host 与插件客户端之间的内部桥,不是稳定外部 HTTP API。
95
96
 
96
97
  ### 读通道
97
98
 
@@ -102,18 +103,15 @@ authority: trusted-host
102
103
 
103
104
  | Endpoint | 行为 |
104
105
  |---|---|
105
- | `runtime-memory` | Runtime 快照 |
106
- | `status` | 服务、生命周期、Documents 和存储域聚合状态 |
107
- | `documents` | Document 目录快照 |
108
- | `document` | 读取一份 Document |
109
- | `document-search` | 确定性搜索,命中会更新 LRU 元数据 |
110
- | `graph` | 聚合 active Memory Spaces 图谱 |
111
- | `bodies` | Memory Space 目录 |
112
- | `list` | 内容列表 |
113
- | `entities` | 实体统计或实体相关上下文 |
114
- | `search` | 直接 Mnemon 检索 |
115
- | `agent-search` | 直接检索后做证据限定回答 |
116
- | `related` | 直接关系遍历 |
106
+ | `status` | 服务、版本、生命周期、档案与存储上下文聚合状态 |
107
+ | `versions` | 检查 Mnemon 与 dsh-mnemon 当前 / 最新版本和安装来源 |
108
+ | `runtime-memory` | 运行时快照 |
109
+ | `documents` / `document` / `document-search` | 档案目录、正文与确定性搜索 |
110
+ | `graph` / `bodies` | active 多空间图谱与记忆体目录 |
111
+ | `list` / `entities` | 内容列表与实体聚合 |
112
+ | `search` / `agent-search` / `related` | 直接检索、证据回答与关系遍历 |
113
+ | `turn-activities` / `turn-activity` | 会话或单回合的记忆工具活动 |
114
+ | `assistant-message` | 按 messageId 读取已定稿助手文本 |
117
115
 
118
116
  ### 写通道
119
117
 
@@ -125,25 +123,40 @@ authority: loopback
125
123
  | Endpoint | 行为 |
126
124
  |---|---|
127
125
  | `runtime-memory` | 热记忆 mutation |
128
- | `supervise` | 工作台候选交给记忆 worker |
126
+ | `supervise` | 把候选交给记忆 worker |
129
127
  | `document` | create / update / archive |
130
- | `remember` | 带可选高级约束的语义写入 |
131
- | `link` | 建立关系 |
132
- | `forget` | 软删除 |
133
- | `body-create` | 创建 Memory Space |
134
- | `body-update` | 更新元数据或 active |
128
+ | `remember` / `link` / `forget` | 长期语义写入、关系与软删除 |
129
+ | `body-create` / `body-update` / `body-delete` | 记忆体创建、编辑与确认后的物理删除 |
130
+ | `version-update` | 更新明确组件;Host 固定命令与参数 |
131
+
132
+ `writeEnabled=false` 时通道仍稳定注册,但所有 mutation 在 Host 边界拒绝。
133
+
134
+ ### 备份通道
135
+
136
+ ```text
137
+ channel: /dsh-mnemon-pack
138
+ authority: loopback
139
+ ```
140
+
141
+ | Endpoint | 行为 |
142
+ |---|---|
143
+ | `target` | 当前有效根与范围 |
144
+ | `export` | 导出完整、带 manifest 与 SHA-256 校验的 ZIP |
145
+ | `inspect` | 解析并校验待导入 ZIP,返回组件与占用预览 |
146
+ | `import` | 把 ZIP 安全合并到当前有效根;只读模式拒绝 |
135
147
 
136
- `writeEnabled=false` 时写通道保持稳定注册,但所有 mutation 都会在 Host 边界拒绝。
148
+ 备份包含私有记忆,因此整个通道保持 loopback-only。
137
149
 
138
150
  ### 设置通道
139
151
 
140
152
  ```text
141
153
  channel: /dsh-mnemon-settings
142
154
  authority: loopback
155
+ namespaces: mnemon, mnemon-ui
143
156
  endpoints: get, mutate
144
157
  ```
145
158
 
146
- mutation 使用 settings revision 防止覆盖并发编辑。
159
+ mutation 使用 settings revision 防止覆盖并发编辑。`mnemon` 管理 Host / 存储设置;`mnemon-ui` 管理 `turnBar` 与 `saveAction`。
147
160
 
148
161
  ## npm 导出
149
162
 
@@ -161,13 +174,8 @@ MnemonSubagentCoordinator
161
174
  MnemonLifecycle
162
175
  ```
163
176
 
164
- `dsh-mnemon/client` 用于 DSH client bundle 的 `apply` 与 `inject`。`MnemonClient` 和 RPC endpoint 当前属于内部实现,不应当作稳定公共 SDK。
177
+ `dsh-mnemon/client` 导出 DSH client bundle 的 `apply` 与 `inject`。客户端实现类与 RPC endpoint 目前均属于内部实现,不应当作稳定公共 SDK。
165
178
 
166
179
  ## 国际化范围
167
180
 
168
- Web 词典保持中文/英文键一一对应,品牌名、工具名和配置键不翻译。尚未完整国际化的表面包括:
169
-
170
- - `/mnemon` 命令输出;
171
- - 模型工具展示卡标题;
172
- - 部分 Host 校验和诊断错误;
173
- - 兼容发现旧 Store 时写入的默认名称和说明。
181
+ 主要 Sidebar / Buildin 工作台、设置与对话内入口支持中文和英文,并跟随 DSH locale 实时切换。品牌名、工具名和配置键不翻译。`/mnemon` 命令、模型工具卡、部分 Host 错误与兼容元数据尚未完全国际化。
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## 健康检查
6
6
 
7
- 先检查二进制,再检查插件聚合状态:
7
+ 先检查二进制,再查看工作台“状态”:
8
8
 
9
9
  ```sh
10
10
  command -v mnemon
@@ -15,142 +15,152 @@ mnemon --version
15
15
  /mnemon status
16
16
  ```
17
17
 
18
- `mnemon status` 会打开有效 Store,上游 CLI 可能初始化默认数据或执行迁移;它不是完全无副作用的只读探测。插件状态页还会检查 active Memory Spaces、Documents、生命周期和 subagent 计数。
18
+ [![状态页:组件版本、三层数据与实际存储目录](../assets/screenshots/status-overview.png)](../assets/screenshots/status-overview.png)
19
19
 
20
- ## 安全边界
20
+ 状态页显示 Mnemon / dsh-mnemon 版本、Runtime、Memory Spaces、Documents 和当前实际目录。`mnemon status` 会打开有效 Store,上游 CLI 可能初始化数据或执行迁移,因此不是完全无副作用的只读探测。
21
21
 
22
- ### 进程
22
+ ## 版本检查与更新
23
23
 
24
- - `spawn(command, args, { shell: false })`,不拼接 shell 命令。
25
- - stdout + stderr 默认合计限制 2 MiB。
26
- - 每次 CLI 调用受 `timeoutMs` 和 AbortSignal 控制。
27
- - 超时或取消先发送 `SIGTERM`,1.5 秒后仍未退出则发送 `SIGKILL`。
28
- - 一个 `MnemonRunner` 内的 CLI 调用串行,避免同一进程内并发迁移导致 SQLite 锁冲突。
24
+ 状态页的“检查版本”打开“检查与更新版本”面板:
29
25
 
30
- 串行队列不替代跨 DSH 进程协调;多个 Host 同时访问同一 Mnemon Store 时仍依赖 Mnemon/SQLite 自身的并发语义。
26
+ [![检查与更新 Mnemon CLI 和 dsh-mnemon](../assets/screenshots/version-check.png)](../assets/screenshots/version-check.png)
31
27
 
32
- ### 文件
28
+ - **Mnemon CLI**:本地版本来自 `mnemon --version`,最新版本来自 Mnemon GitHub Releases。
29
+ - **dsh-mnemon**:运行版本来自当前插件包,最新版本来自 npm registry。
33
30
 
34
- - Runtime 和 Documents 都有进程内队列及跨实例 lock file。
35
- - 等待锁默认最多 5 秒;锁超过 30 秒才被视为 stale。
36
- - 写入使用临时文件和 rename。
37
- - Runtime 用 revision 阻止过期压缩覆盖并发修改。
38
- - Document 归档用数字 revision 阻止移动已被更新的 active 原文。
39
- - `sourcePaths` 不能逃出发起会话工作区,也不能指向受管 Documents 目录。
31
+ 检查只读,不会自动安装。只有发现更高版本并安全识别安装来源时才显示“更新”:Mnemon 支持 Homebrew Cask / Formula 与 `go install`;dsh-mnemon 支持当前 DSH Profile 中由 pnpm 管理的 npm 安装。`link:` / `file:` 开发版本与无法识别的手工安装只显示说明,避免覆盖源码。
40
32
 
41
- ### Web
33
+ 更新命令由 Host 固定选择:浏览器不能传入命令或参数,执行禁用 shell,并限制时间与输出。更新完成后界面自动重新检查两个组件并刷新状态。Mnemon CLI 从下一次调用起生效;dsh-mnemon 仍需重启 `dsh web` 才能加载新插件代码。
42
34
 
43
- - 读 RPC:`trusted-host`。
44
- - 记忆写 RPC:`loopback`。
45
- - 设置 RPC:`loopback`。
46
- - WebUI 不直接读取 SQLite 或启动进程。
35
+ ## 备份与恢复
47
36
 
48
- ### 模型
37
+ ### 推荐:设置页 ZIP
49
38
 
50
- - worker 使用 persona、工具白名单、结构化输出和 `maxDepth: 1`。
51
- - 用户查询、候选内容、Document 正文和历史记忆均按不可信数据处理。
52
- - 证据回答 worker 无 Mnemon 工具,只能使用 Host 提供的命中内容。
39
+ “设置 → 记忆系统 → 备份与迁移”针对**当前有效根**工作:
53
40
 
54
- 这些边界不等于秘密扫描器。当前还没有确定性的凭据/秘密检测;不要向热记忆、Documents 或 Memory Spaces 提交密钥、token、私钥和原始敏感日志。
41
+ - **导出 ZIP**:包含 Runtime、Documents 和全部 Memory Spaces;
42
+ - **导入 ZIP**:先预检,再合并到当前有效根;
43
+ - 包内包含 `manifest.json`、SHA-256 清单和三类数据摘要;
44
+ - 导出与导入持有组件锁,Memory Space 仍有未 checkpoint 的 WAL 时会拒绝;
45
+ - 导入检查路径、数量、压缩 / 展开大小、JSON schema、Document 哈希、registry 与 SQLite 头;
46
+ - 合并先写 staging,再替换目标组件;提交失败会恢复导入前目录。
55
47
 
56
- ### 安全问题报告
48
+ 当前 UI 只提供安全合并,不做“覆盖一切”:
49
+
50
+ - Runtime 按目标与内容去重;
51
+ - 相同 Document ID + 相同内容跳过,ID 冲突且内容不同则生成新 ID;
52
+ - 相同 Memory Space ID + 相同数据库跳过,内容不同则生成新 ID。
53
+
54
+ 导入受 `writeEnabled` 控制,只读部署会拒绝。ZIP 包含私有记忆,应像源代码与凭据备份一样加密、限制访问并验证恢复。
57
55
 
58
- 发现安全漏洞请按 [SECURITY.md](../../SECURITY.md) 的渠道私下报告(GitHub Security Advisories 或维护者邮箱),不要开公开 issue。范围内的典型问题包括:数据丢失、路径穿越、锁与 revision 检查绕过、子 Agent 隔离破坏、WebUI 对记忆内容的注入。
56
+ ### 恢复演练
59
57
 
60
- ## 备份
58
+ 1. 先选择一个隔离的 `custom` 目录并保存。
59
+ 2. 确认设置页显示的“当前目录 ZIP”正是隔离根。
60
+ 3. 选择备份,阅读预检摘要后执行导入。
61
+ 4. 在状态页检查 Runtime、Documents、Memory Spaces 与目录。
62
+ 5. 用一个聚焦查询验证直接检索,再阅读一份档案。
63
+ 6. 验证无误后再决定是否切换正式范围。
61
64
 
62
- 三层数据共用 `storageRoot`,一致备份应覆盖整个根,而不是只复制 `mnemon.db`:
65
+ 不要在没有备份时把恢复直接指向唯一生产根。
66
+
67
+ ### 文件系统级快照
68
+
69
+ 需要保留预留 `state` 或做离线完整快照时,可以停止所有使用该根的 DSH / Mnemon 进程后复制:
63
70
 
64
71
  ```text
65
72
  <storageRoot>/runtime
66
73
  <storageRoot>/documents
67
74
  <storageRoot>/data
68
- <storageRoot>/state # when present
75
+ <storageRoot>/state # 若存在;不在内置 ZIP 的三类数据组件中
69
76
  ```
70
77
 
71
- 推荐过程:
78
+ 复制完成后生成文件清单或校验和,并在隔离路径演练恢复。不要在多个进程仍写入时把普通目录复制当作一致快照。
72
79
 
73
- 1. 停止 DSH Host 和其他写入同一根的进程。
74
- 2. 记录当前插件、DSH 和 `mnemon --version`。
75
- 3. 复制整个根到新的、带时间戳的目录。
76
- 4. 对备份执行文件清单或校验和。
77
- 5. 在隔离路径中完成恢复演练后再依赖它。
80
+ ## 切换存储范围
78
81
 
79
- 项目当前没有内置一致快照、导出或恢复命令;运行中直接复制可能捕获跨文件不一致状态。
82
+ 保存 `global` / `workspace` / `custom` 后,Host 先初始化新运行图,再原子切换;页面自动重新读取,但**不会迁移数据**:
80
83
 
81
- ## 恢复
84
+ ```text
85
+ 旧范围 -- 保存设置 --> 新的空目录或既有目录
82
86
 
83
- 1. 停止所有使用目标根的 DSH/Mnemon 进程。
84
- 2. 保留现有根的第二份副本,不要直接覆盖唯一数据。
85
- 3. 把完整备份恢复到一个新目录。
86
- 4. 先用 `storageScope=custom` 指向新目录。
87
- 5. 启动并检查 Runtime 投影、Document index、Memory Space 目录和 recall。
88
- 6. 验证后再决定是否替换原根。
87
+ 不自动复制
88
+ 不自动合并
89
+ 不自动删除
90
+ ```
89
91
 
90
- `USER.md` / `MEMORY.md` 损坏时,控制层可从有效的 `memories.json` 修复;损坏的 JSON、Document index 或 SQLite 不存在自动通用修复流程。
92
+ 推荐迁移流程:在旧范围导出 ZIP → 切换到新范围并确认显示目录 → 导入 ZIP → 验证。工作区模式下先确认查看工作区与会话执行工作区是否是预期目标。
91
93
 
92
- ## 切换存储范围
94
+ ## 安全边界
93
95
 
94
- 插件不会自动迁移数据:
96
+ ### 进程
95
97
 
96
- ```text
97
- old scope -- change setting + save --> new empty or existing scope
98
+ - CLI 使用 `spawn(command, args, { shell: false })`,不拼接 shell。
99
+ - stdout + stderr 默认合计限制 2 MiB。
100
+ - 每次调用受 `timeoutMs` 与 AbortSignal 控制;取消先 `SIGTERM`,1.5 秒后 `SIGKILL`。
101
+ - 单个 Runner 内调用串行;跨 DSH 进程仍依赖 Mnemon / SQLite 并发语义。
98
102
 
99
- no implicit copy
100
- no implicit merge
101
- no implicit delete
102
- ```
103
+ ### 文件
104
+
105
+ - Runtime、Documents 和 Pack 操作使用进程内队列或组件锁。
106
+ - lock 默认等待 5 秒,超过 30 秒才视为 stale。
107
+ - 写入使用临时文件、staging 与 rename。
108
+ - Runtime revision 阻止过期压缩覆盖;Document revision 阻止移动已更新原文。
109
+ - `sourcePaths` 不能逃出发起会话工作区,也不能指向受管 Documents 目录。
110
+
111
+ ### Web 与模型
112
+
113
+ - 读 RPC 为 `trusted-host`;写、设置与备份 RPC 为 `loopback`。
114
+ - WebUI 不直接读取 SQLite、启动进程或指定任意更新命令。
115
+ - worker 使用 persona、工具白名单、结构化输出与 `maxDepth: 1`。
116
+ - 查询、候选、档案正文与历史记忆全部按不可信数据处理。
103
117
 
104
- 需要迁移时,停止写入后复制完整根。合并两套根不能靠目录覆盖,因为 JSON index、registry 和多个数据库都可能冲突;应在备份上设计显式合并方案。
118
+ 这些边界不是秘密扫描器。当前没有确定性的凭据检测;不要提交密钥、token、私钥和原始敏感日志。
119
+
120
+ ### 安全问题报告
121
+
122
+ 按 [SECURITY.md](../../SECURITY.md) 私下报告漏洞,不要创建公开 issue。数据丢失、路径穿越、锁 / revision 绕过、子 Agent 隔离破坏和 WebUI 记忆内容注入都在范围内。
105
123
 
106
124
  ## 故障排查
107
125
 
108
126
  | 现象 | 检查与处理 |
109
127
  |---|---|
110
128
  | Mnemon 不可用 | 运行 `command -v mnemon`、`mnemon --version`;设置 `MNEMON_CLI_PATH` 或 `cliPath` 后重启 |
111
- | 状态正常但召回为空 | 检查是否有 active Memory Space、当前 `storageScope`、工作台查看目录、会话实际生效目录和查询是否足够聚焦 |
112
- | 工作台提示目录未对齐 | 这是安全提示:工作台正在查看另一工作区,而 Agent 仍跟随当前会话;点击“对齐当前会话”或有意保留跨工作区查看 |
113
- | `memoryBodyId is required...` | active 数量不是恰好 1;让 worker 或调用方显式选择目标 |
114
- | `memory body is not active for reading` | 在记忆体页激活目标;写入 inactive 可以,但读取不行 |
115
- | subagent provider 错误 | 普通任务需要完整隔离能力;后台审查另需 `fork + inheritsParentContext` |
116
- | 设置保存后无变化 | 检查界面错误提示;所有选项应在保存成功后实时生效 |
117
- | custom 目录被拒绝 | 使用绝对路径、`~` 或 `~/...` |
118
- | Document 无 workspace | 会话必须对应 live root Agent,并在 session header 中带 cwd |
119
- | source path 被拒绝 | 路径必须留在会话工作区内,且不能引用托管 Documents 目录 |
120
- | Runtime replace 超容量 | 缩短 replacement 或先显式整理;当前自动维护只处理 add 溢出 |
121
- | CLI timeout | 增大 `timeoutMs`;大 Store 的状态和图谱导出可能超过 10 秒 |
122
- | lock timeout | 检查是否有另一个实例正在写;不要删除仍属于活跃进程的 lock |
123
- | invalid JSON / unexpected viz | CLI 输出协议可能不兼容;在隔离根中验证版本,不要继续写生产数据 |
124
- | 远程页面可以读但不能写 | 写 RPC 强制 loopback,这是权限设计 |
125
- | 左侧栏不显示“记忆系统” | 检查 `tabEnabled=true` 且 `displayMode=sidebar`;`buildin` 会显示在对话区标签页;本地 link 修改后先运行 `pnpm run build` 并重启 DSH profile |
126
- | 本地 link 不反映源码 | 先运行 `pnpm run build`,再重启 DSH profile |
129
+ | 左侧栏没有“记忆系统” | 检查 `tabEnabled=true`、`displayMode=sidebar`;Buildin 位于对话区;本地 link 先 `pnpm run build` 再重启 profile |
130
+ | 状态正常但召回为空 | 检查 active 记忆体、存储范围、查看目录、会话实际目录和查询是否足够聚焦 |
131
+ | 顶部提示目录未对齐 | 工作台正在查看另一个工作区;点击一键对齐,或有意保留只读查看;Agent-backed 操作在未对齐时拒绝 |
132
+ | 设置保存后无变化 | 查看保存错误;成功保存应实时切换并自动重新读取,不需要刷新 |
133
+ | 自定义目录被拒绝 | 使用绝对路径、`~` 或 `~/...` |
134
+ | `memoryBodyId is required...` | active 数量不是恰好 1;显式选择目标 |
135
+ | `memory body is not active for reading` | 在概览激活目标;写入 inactive 可以,读取不行 |
136
+ | Provider 错误 | 普通语义任务需要完整隔离能力;后台审查另需 `fork + inheritsParentContext` |
137
+ | Runtime replace 超容量 | 缩短 replacement 或先显式整理;自动维护只处理 add 溢出 |
138
+ | Document source path 被拒绝 | 路径必须在会话工作区内,且不能引用受管 Documents 目录 |
139
+ | CLI timeout | 增大 `timeoutMs`;大 Store 的状态与图谱可能超过 10 秒 |
140
+ | lock timeout | 检查其他写进程,不要删除仍属于活跃进程的 lock |
141
+ | ZIP 导出提示 WAL busy | 等待 Memory Space 写入完成并重试;不要绕过未 checkpoint WAL 检查 |
142
+ | ZIP 导入 checksum / schema 失败 | 备份损坏或格式不兼容;保留当前根,不要手工解压覆盖 |
143
+ | 更新按钮不出现 | 当前已是最新、远程检查失败,或安装来源是 link / 手工模式;按面板提示沿原方式更新 |
144
+ | 远程页面能读不能写 | 写、设置与备份 RPC 强制 loopback,这是权限设计 |
127
145
 
128
146
  ## 已知限制
129
147
 
130
148
  ### 功能只读不等于磁盘只读
131
149
 
132
- `writeEnabled=false` 禁用语义 mutation,但启动时仍可能创建/修复 Runtime 文件,Document 搜索会更新 `lastAccessedAt`,Mnemon 读取也可能触发上游 migration。不要在真正只读文件系统上假设它能无写运行。
150
+ `writeEnabled=false` 禁用语义 mutation 与 Pack 导入,但启动可能初始化 / 修复 Runtime 投影,Document 搜索更新 `lastAccessedAt`,Mnemon 读命令也可能迁移数据库。
133
151
 
134
152
  ### Documents 的共享范围
135
153
 
136
- `global` 和 `custom` 可能让多个工作区共享同一 Document index;记录没有独立 workspace ownership 字段。`sourcePaths` 仅在写入时相对发起会话 cwd 校验。
137
-
138
- ### 冷引用路径
139
-
140
- 当前 archive worker 的提示使用 `.mnemon/documents/archived/<filename>` 作为计划引用;在 global/custom scope 中实际文件位于 `<storageRoot>/documents/archived/<filename>`。定位原文时应以 `documents/index.json` 或 UI 展示的 `relativePath` 为准。这是待修复的路径表达差异。
154
+ `global` 与 `custom` 可能让多个工作区共享同一 Document index;记录没有独立 workspace ownership 字段。`sourcePaths` 只在写入时相对发起会话 cwd 校验。
141
155
 
142
156
  ### 跨系统事务
143
157
 
144
- “先索引、后移动”保护 active 原文,但不是跨 Mnemon SQLite 与文件系统的可回滚分布式事务。索引成功后若 revision 冲突,索引可能保留为重复引用;插件选择保留数据而不是回滚已完成的长期写入。
158
+ “先冷索引、后移动”保护 active 原文,但不是跨 Mnemon SQLite 与文件系统的可回滚分布式事务。索引后发生 revision 冲突时可能保留重复引用;系统选择保留数据。
145
159
 
146
160
  ### 后台水位
147
161
 
148
- 评分、最近 checkpoint 和重试状态没有持久化。Host 重启会清空尚未处理的活动;失败退避、熔断和人工重试入口也尚未实现。
149
-
150
- ### 版本矩阵
151
-
152
- 项目尚未声明正式的 DSH/Mnemon 支持矩阵和 schema migration 策略。升级必须先备份并在隔离根中验证。
162
+ 活动评分、最近 checkpoint 与重试状态未持久化;Host 重启会清空未处理活动。失败退避、熔断和人工重试入口尚未实现。
153
163
 
154
- ### 国际化
164
+ ### 版本与国际化
155
165
 
156
- 主要 Web 工作台为中英文双语,但命令、工具卡、兼容默认元数据和部分错误信息尚未完整国际化。
166
+ 尚无正式固定的 DSH / Mnemon 支持矩阵。主要 Web 界面为中英文双语,但命令、工具卡、兼容元数据和部分错误仍未完全国际化。