dsh-mnemon 0.2.14 → 0.2.15

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.
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  <p align="center"><strong>English</strong> · <a href="./README.zh-CN.md">简体中文</a></p>
4
4
 
5
5
  <p align="center">
6
- <img src="https://img.shields.io/badge/release-v0.2.14-5b5bd6" alt="release v0.2.14">
6
+ <img src="https://img.shields.io/badge/release-v0.2.15-5b5bd6" alt="release v0.2.15">
7
7
  <img src="https://img.shields.io/badge/memory-3%20tiers-087c5b" alt="three memory tiers">
8
8
  <img src="https://img.shields.io/badge/providers-9-c66a09" alt="nine providers">
9
9
  <img src="https://img.shields.io/badge/Node.js-%E2%89%A520-43853d" alt="Node.js 20 or newer">
@@ -14,21 +14,21 @@
14
14
  <p align="center">Three memory tiers · Nine long-term providers · One supervised workflow</p>
15
15
 
16
16
  <p align="center">
17
- <a href="https://github.com/omdsh-dev/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/media/dsh-mnemon-memory-system-demo.mp4">
18
- <img src="https://raw.githubusercontent.com/omdsh-dev/dsh-mnemon/9196fd9991676a6bd9a84d615fcd301eb52e872a/docs/assets/media/dsh-mnemon-memory-system-demo-poster.jpg" alt="dsh-mnemon v0.2.0 live multi-memory snapshot and observable provider surfaces" width="1180">
17
+ <a href="https://github.com/Grivn/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/media/dsh-mnemon-memory-system-demo.mp4">
18
+ <img src="https://raw.githubusercontent.com/Grivn/dsh-mnemon/9196fd9991676a6bd9a84d615fcd301eb52e872a/docs/assets/media/dsh-mnemon-memory-system-demo-poster.jpg" alt="dsh-mnemon v0.2.0 live multi-memory snapshot and observable provider surfaces" width="1180">
19
19
  </a>
20
20
  </p>
21
21
 
22
22
  <p align="center">
23
23
  <a href="./docs/en/capabilities.md"><strong>Explore the capability map</strong></a> ·
24
24
  <a href="./docs/en/getting-started.md">Start in five minutes</a> ·
25
- <a href="./docs/en/releases/v0.2.14.md">Read the v0.2.14 notes</a> ·
26
- <a href="https://github.com/omdsh-dev/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/media/dsh-mnemon-memory-system-demo.mp4">Watch the widescreen demo</a>
25
+ <a href="./docs/en/releases/v0.2.15.md">Read the v0.2.15 notes</a> ·
26
+ <a href="https://github.com/Grivn/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/media/dsh-mnemon-memory-system-demo.mp4">Watch the widescreen demo</a>
27
27
  </p>
28
28
 
29
29
  `dsh-mnemon` gives DSH one memory control plane without forcing every kind of knowledge into one database. Runtime Memory keeps compact context available every turn. Project Documents preserve complete narratives. Memory Spaces retrieve durable evidence on demand and can use **Mnemon, OpenViking, Honcho, Mem0, Hindsight, Holographic, RetainDB, ByteRover, or Supermemory**.
30
30
 
31
- Mnemon remains the official, prioritized native engine. The third tier is replaceable; the first two keep the same storage, workspace, and interaction model regardless of provider.
31
+ [Mnemon](https://github.com/mnemon-dev/mnemon) remains the official, prioritized native engine. The third tier is replaceable; the first two keep the same storage, workspace, and interaction model regardless of provider.
32
32
 
33
33
  ## Understand the scope in 30 seconds
34
34
 
@@ -52,21 +52,21 @@ The tiers are not copies. A useful rule is: **every-turn context goes to Runtime
52
52
  | **Archive Document** | A task Agent creates a searchable cold reference before the Host moves the original | Supervised move |
53
53
  | **Turn memory** | Expands exact recall, write, and Document-search activity; each item navigates to its source | Read-only |
54
54
 
55
- These tasks do not reuse or consume the main conversation history. By default they follow DSH's new-session model route; **Settings → Memory System → Background task Agent** can select a dedicated Provider and model.
55
+ These tasks do not reuse or consume the main conversation history. By default they follow DSH's new-session model route; **Settings → Memory System → Background task Agent** can select a dedicated Provider and model. That fixed route applies to every Mnemon subagent delegation (idle checkpoint review, recall, write, answer, provider placement, memory migration, USER compaction, document archive, and metadata maintenance). With DSH 0.1.1-rc.2, the first-party `deepseek-official/deepseek-v4-flash-vision-exp` route appears with an **Image input** label. Mnemon background jobs still send text-only prompts; multimodal conversation messages keep their DSH attachment references through lifecycle processing, and raw image bytes are never copied into memory.
56
56
 
57
57
  ## One Memory Space workflow, nine providers
58
58
 
59
59
  | Provider | Shape | Best fit |
60
60
  |---|---|---|
61
- | **Mnemon** | Official native local CLI + SQLite | Exact writes, entities, typed relationships, local-first sharing |
62
- | **OpenViking** | HTTP + `viking://` | Resource trees and asynchronous extraction |
63
- | **Honcho** | HTTP workspace / peers | Team and Agent-peer conclusions |
64
- | **Mem0** | Platform or self-hosted HTTP | Existing user / Agent memory |
65
- | **Hindsight** | HTTP memory bank | Banks, entities, provider-native graph |
66
- | **Holographic** | Local structured fact files | Auditable facts, trust scores, local entities |
67
- | **RetainDB** | HTTP project / user | Project- and user-scoped profiles |
68
- | **ByteRover** | Local `brv` CLI | Code knowledge trees and curate workflows |
69
- | **Supermemory** | HTTP container | Document ingestion and container sharing |
61
+ | **[Mnemon](https://github.com/mnemon-dev/mnemon)** | Official native local CLI + SQLite | Exact writes, entities, typed relationships, local-first sharing |
62
+ | **[OpenViking](https://github.com/volcengine/OpenViking)** | HTTP + `viking://` | Resource trees and asynchronous extraction |
63
+ | **[Honcho](https://github.com/plastic-labs/honcho)** | HTTP workspace / peers | Team and Agent-peer conclusions |
64
+ | **[Mem0](https://github.com/mem0ai/mem0)** | Platform or self-hosted HTTP | Existing user / Agent memory |
65
+ | **[Hindsight](https://github.com/vectorize-io/hindsight)** | HTTP memory bank | Banks, entities, provider-native graph |
66
+ | **[Holographic](https://github.com/NousResearch/hermes-agent/tree/main/plugins/memory/holographic)** | Local structured fact files | Auditable facts, trust scores, local entities |
67
+ | **[RetainDB](https://github.com/RetainDB/RetainDB)** | HTTP project / user | Project- and user-scoped profiles |
68
+ | **[ByteRover](https://github.com/campfirein/byterover-cli)** | Local `brv` CLI | Code knowledge trees and curate workflows |
69
+ | **[Supermemory](https://github.com/supermemoryai/supermemory)** | HTTP container | Document ingestion and container sharing |
70
70
 
71
71
  Provider capability differences stay visible. dsh-mnemon never invents graph edges, deletion semantics, or enumerable content for an engine that does not provide them. **Settings owns reusable Provider services; Memory Spaces owns concrete instances, activation, scope, and metadata.** External Providers are off by default.
72
72
 
@@ -76,9 +76,9 @@ See the [provider capability and deployment matrix](./docs/en/memory-providers.m
76
76
 
77
77
  The following roughly 55-second capture comes from a live 1600×900 DSH WebUI. It deliberately pauses on full-page scrolling, page transitions, Provider cards, dialogs, button-state changes, and a completed read-only Agent Query. Destructive confirmations are deliberately not submitted.
78
78
 
79
- ![Full dsh-mnemon v0.2.0 WebUI walkthrough with scrolling and button interactions](https://raw.githubusercontent.com/omdsh-dev/dsh-mnemon/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/media/dsh-mnemon-memory-system-demo.gif)
79
+ ![Full dsh-mnemon v0.2.0 WebUI walkthrough with scrolling and button interactions](https://raw.githubusercontent.com/Grivn/dsh-mnemon/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/media/dsh-mnemon-memory-system-demo.gif)
80
80
 
81
- [Watch the 1600×900 MP4](https://github.com/omdsh-dev/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/media/dsh-mnemon-memory-system-demo.mp4) · [Open the page-by-page UI guide](./docs/en/ui-guide.md)
81
+ [Watch the 1600×900 MP4](https://github.com/Grivn/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/media/dsh-mnemon-memory-system-demo.mp4) · [Open the page-by-page UI guide](./docs/en/ui-guide.md)
82
82
 
83
83
  ## Start in five minutes
84
84
 
@@ -98,7 +98,14 @@ mnemon --version
98
98
 
99
99
  Windows users can install the official v0.2.3-or-newer release ZIP. The expected installation path and checksum procedure are in [Getting Started](./docs/en/getting-started.md#2-install-mnemon).
100
100
 
101
- ### 2. Install the DSH plugin
101
+ ### 2. Install DSH and the plugin
102
+
103
+ This release is verified against DSH 0.1.1-rc.2, whose complete profiles require Node.js `^22.19.0 || >=24.0.0`; Node 20 lacks host primitives used by rc.2. The dsh-mnemon package itself retains Node.js 20 compatibility for older compatible DSH hosts. DSH rc.2 is published on npm's `latest` and `next` tags; use the exact version below for a reproducible installation:
104
+
105
+ ```sh
106
+ npm install -g @deepseek-ai/dsh@0.1.1-rc.2
107
+ dsh --version
108
+ ```
102
109
 
103
110
  ```sh
104
111
  dsh plugin --profile web add dsh-mnemon
@@ -135,7 +142,7 @@ The primary tab order is intentionally stable: **Status, Runtime, Documents, Mem
135
142
 
136
143
  | Supervised distillation | Bounded Agent query |
137
144
  |---|---|
138
- | [![Edit a candidate before dispatching an independent task Agent](https://raw.githubusercontent.com/omdsh-dev/dsh-mnemon/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/remember-dialog.png)](https://github.com/omdsh-dev/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/remember-dialog.png) | [![Read-only Agent answer grounded in bounded multi-provider evidence](https://raw.githubusercontent.com/omdsh-dev/dsh-mnemon/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/recall-agent-answer.png)](https://github.com/omdsh-dev/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/recall-agent-answer.png) |
145
+ | [![Edit a candidate before dispatching an independent task Agent](https://raw.githubusercontent.com/Grivn/dsh-mnemon/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/remember-dialog.png)](https://github.com/Grivn/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/remember-dialog.png) | [![Read-only Agent answer grounded in bounded multi-provider evidence](https://raw.githubusercontent.com/Grivn/dsh-mnemon/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/recall-agent-answer.png)](https://github.com/Grivn/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/recall-agent-answer.png) |
139
146
 
140
147
  The workbench makes the task boundary explicit before dispatch and keeps the returned answer beside its evidence scope. Conversation-native Turn memory and Save to memory remain enabled by default and can be changed independently under **Settings → Memory System → Conversation interface**.
141
148
 
@@ -143,7 +150,7 @@ The workbench makes the task boundary explicit before dispatch and keeps the ret
143
150
 
144
151
  | Create explicitly | Route future distillation intelligently |
145
152
  |---|---|
146
- | [![Choose a Provider while creating a Memory Space](https://raw.githubusercontent.com/omdsh-dev/dsh-mnemon/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/memory-space-create-dialog.png)](https://github.com/omdsh-dev/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/memory-space-create-dialog.png) | [![Choose manual or smart Provider placement](https://raw.githubusercontent.com/omdsh-dev/dsh-mnemon/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/distillation-strategy.png)](https://github.com/omdsh-dev/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/distillation-strategy.png) |
153
+ | [![Choose a Provider while creating a Memory Space](https://raw.githubusercontent.com/Grivn/dsh-mnemon/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/memory-space-create-dialog.png)](https://github.com/Grivn/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/memory-space-create-dialog.png) | [![Choose manual or smart Provider placement](https://raw.githubusercontent.com/Grivn/dsh-mnemon/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/distillation-strategy.png)](https://github.com/Grivn/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/distillation-strategy.png) |
147
154
 
148
155
  Manual creation always asks the user to choose. Smart selection is a distillation policy: hard rules define the eligible set, then an optional prompt guides the Agent only when several candidates remain.
149
156
 
@@ -190,7 +197,7 @@ See [Operations, security, and troubleshooting](./docs/en/operations.md) for bac
190
197
  | Configure scope, routing, and model selection | [Configuration](./docs/en/configuration.md) |
191
198
  | Back up, update, or troubleshoot | [Operations](./docs/en/operations.md) |
192
199
  | Integrate tools, commands, or RPC | [Interface reference](./docs/en/interfaces.md) |
193
- | Review the release | [v0.2.14 release notes](./docs/en/releases/v0.2.14.md) |
200
+ | Review the release | [v0.2.15 release notes](./docs/en/releases/v0.2.15.md) |
194
201
 
195
202
  See the [documentation hub](./docs/en/README.md) for the full map.
196
203
 
package/README.zh-CN.md CHANGED
@@ -3,7 +3,7 @@
3
3
  <p align="center"><a href="./README.md">English</a> · <strong>简体中文</strong></p>
4
4
 
5
5
  <p align="center">
6
- <img src="https://img.shields.io/badge/release-v0.2.14-5b5bd6" alt="发布版本 v0.2.14">
6
+ <img src="https://img.shields.io/badge/release-v0.2.15-5b5bd6" alt="发布版本 v0.2.15">
7
7
  <img src="https://img.shields.io/badge/%E8%AE%B0%E5%BF%86-3%20%E5%B1%82-087c5b" alt="三层记忆">
8
8
  <img src="https://img.shields.io/badge/Provider-9-c66a09" alt="九种 Provider">
9
9
  <img src="https://img.shields.io/badge/Node.js-%E2%89%A520-43853d" alt="Node.js 20 或更新版本">
@@ -14,21 +14,21 @@
14
14
  <p align="center">三层记忆 · 九种长期记忆 Provider · 一套受监督工作流</p>
15
15
 
16
16
  <p align="center">
17
- <a href="https://github.com/omdsh-dev/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/media/dsh-mnemon-memory-system-demo.mp4">
18
- <img src="https://raw.githubusercontent.com/omdsh-dev/dsh-mnemon/9196fd9991676a6bd9a84d615fcd301eb52e872a/docs/assets/media/dsh-mnemon-memory-system-demo-poster.jpg" alt="dsh-mnemon v0.2.0 多记忆体实时快照与 Provider 可观察范围" width="1180">
17
+ <a href="https://github.com/Grivn/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/media/dsh-mnemon-memory-system-demo.mp4">
18
+ <img src="https://raw.githubusercontent.com/Grivn/dsh-mnemon/9196fd9991676a6bd9a84d615fcd301eb52e872a/docs/assets/media/dsh-mnemon-memory-system-demo-poster.jpg" alt="dsh-mnemon v0.2.0 多记忆体实时快照与 Provider 可观察范围" width="1180">
19
19
  </a>
20
20
  </p>
21
21
 
22
22
  <p align="center">
23
23
  <a href="./docs/zh-CN/capabilities.md"><strong>先看能力地图</strong></a> ·
24
24
  <a href="./docs/zh-CN/getting-started.md">5 分钟开始</a> ·
25
- <a href="./docs/zh-CN/releases/v0.2.14.md">v0.2.14 升级说明</a> ·
26
- <a href="https://github.com/omdsh-dev/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/media/dsh-mnemon-memory-system-demo.mp4">观看宽屏实机演示</a>
25
+ <a href="./docs/zh-CN/releases/v0.2.15.md">v0.2.15 升级说明</a> ·
26
+ <a href="https://github.com/Grivn/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/media/dsh-mnemon-memory-system-demo.mp4">观看宽屏实机演示</a>
27
27
  </p>
28
28
 
29
29
  `dsh-mnemon` 为 DSH 提供统一的记忆控制面,但不要求所有知识进入同一种数据库。运行时记忆让紧凑上下文每轮可用;项目档案保留完整叙事;记忆体按需召回长期证据,底层可选择 **Mnemon、OpenViking、Honcho、Mem0、Hindsight、Holographic、RetainDB、ByteRover 或 Supermemory**。
30
30
 
31
- Mnemon 仍是官方优先的原生引擎。可以替换的是第三层;无论选择哪个 Provider,前两层的存储、工作区和交互心智保持不变。
31
+ [Mnemon](https://github.com/mnemon-dev/mnemon) 仍是官方优先的原生引擎。可以替换的是第三层;无论选择哪个 Provider,前两层的存储、工作区和交互心智保持不变。
32
32
 
33
33
  ## 30 秒理解能力边界
34
34
 
@@ -52,21 +52,21 @@ Mnemon 仍是官方优先的原生引擎。可以替换的是第三层;无论
52
52
  | **归档档案** | 任务 Agent 先建立可检索冷引用,Host 验证后移动原文 | 受监督迁移 |
53
53
  | **本回合记忆** | 展开本轮召回、写入和档案检索;点击条目精确跳转 | 只读 |
54
54
 
55
- 这些任务不会复用或挤占主对话历史。默认跟随 DSH 新建会话时的模型路由;也可以在**设置 → 记忆系统 → 后台任务 Agent**单独指定 Provider 与模型。
55
+ 这些任务不会复用或挤占主对话历史。默认跟随 DSH 新建会话时的模型路由;也可以在**设置 → 记忆系统 → 后台任务 Agent**单独指定 Provider 与模型。该固定路由同时作用于 coordinator 派发的所有子代理委托(空闲复盘、召回、写入、问答、Provider 选择、记忆迁移、USER 压缩、档案归档、元信息维护)。在 DSH 0.1.1-rc.2 中,第一方 `deepseek-official/deepseek-v4-flash-vision-exp` 路由会标记为**图片输入**。Mnemon 后台任务目前仍只发送文本 Prompt;多模态对话消息在生命周期处理中保留 DSH attachment 引用,不会把原始图片字节复制到记忆。
56
56
 
57
57
  ## 一套记忆体工作流,九种 Provider
58
58
 
59
59
  | Provider | 形态 | 适合场景 |
60
60
  |---|---|---|
61
- | **Mnemon** | 官方原生,本地 CLI + SQLite | 精确写入、实体、类型关系、本地优先共享 |
62
- | **OpenViking** | HTTP + `viking://` | 资源树与异步提炼 |
63
- | **Honcho** | HTTP workspace / peers | 团队与 Agent peer conclusions |
64
- | **Mem0** | Platform 或自托管 HTTP | 已有用户 / Agent 记忆 |
65
- | **Hindsight** | HTTP memory bank | bank、实体与 Provider 原生图谱 |
66
- | **Holographic** | 本地结构化事实文件 | 可审计事实、信任评分、本地实体 |
67
- | **RetainDB** | HTTP project / user | 项目与用户双作用域画像 |
68
- | **ByteRover** | 本地 `brv` CLI | 代码知识树与 curate 流程 |
69
- | **Supermemory** | HTTP container | 文档摄取与容器级共享 |
61
+ | **[Mnemon](https://github.com/mnemon-dev/mnemon)** | 官方原生,本地 CLI + SQLite | 精确写入、实体、类型关系、本地优先共享 |
62
+ | **[OpenViking](https://github.com/volcengine/OpenViking)** | HTTP + `viking://` | 资源树与异步提炼 |
63
+ | **[Honcho](https://github.com/plastic-labs/honcho)** | HTTP workspace / peers | 团队与 Agent peer conclusions |
64
+ | **[Mem0](https://github.com/mem0ai/mem0)** | Platform 或自托管 HTTP | 已有用户 / Agent 记忆 |
65
+ | **[Hindsight](https://github.com/vectorize-io/hindsight)** | HTTP memory bank | bank、实体与 Provider 原生图谱 |
66
+ | **[Holographic](https://github.com/NousResearch/hermes-agent/tree/main/plugins/memory/holographic)** | 本地结构化事实文件 | 可审计事实、信任评分、本地实体 |
67
+ | **[RetainDB](https://github.com/RetainDB/RetainDB)** | HTTP project / user | 项目与用户双作用域画像 |
68
+ | **[ByteRover](https://github.com/campfirein/byterover-cli)** | 本地 `brv` CLI | 代码知识树与 curate 流程 |
69
+ | **[Supermemory](https://github.com/supermemoryai/supermemory)** | HTTP container | 文档摄取与容器级共享 |
70
70
 
71
71
  Provider 能力差异会如实展示:引擎没有图谱边、删除语义或可枚举内容时,dsh-mnemon 不会伪造。**设置页管理可复用的 Provider 服务;记忆体页管理具体实例、激活、作用域与元信息。**三方 Provider 默认关闭。
72
72
 
@@ -76,9 +76,9 @@ Provider 能力差异会如实展示:引擎没有图谱边、删除语义或
76
76
 
77
77
  下面约 55 秒的素材来自真实的 1600×900 DSH WebUI:在完整上下滑动、页面切换、Provider 卡片、弹窗、按钮状态变化和 Agent 答案上都保留了更清晰的停留,并包含一次真正完成的只读 Agent 查询。可能改变数据的确认按钮都没有提交。
78
78
 
79
- ![dsh-mnemon v0.2.0 完整 WebUI:上下滚动与按钮交互](https://raw.githubusercontent.com/omdsh-dev/dsh-mnemon/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/media/dsh-mnemon-memory-system-demo.gif)
79
+ ![dsh-mnemon v0.2.0 完整 WebUI:上下滚动与按钮交互](https://raw.githubusercontent.com/Grivn/dsh-mnemon/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/media/dsh-mnemon-memory-system-demo.gif)
80
80
 
81
- [观看 1600×900 MP4](https://github.com/omdsh-dev/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/media/dsh-mnemon-memory-system-demo.mp4) · [按页面查看交互指南](./docs/zh-CN/ui-guide.md)
81
+ [观看 1600×900 MP4](https://github.com/Grivn/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/media/dsh-mnemon-memory-system-demo.mp4) · [按页面查看交互指南](./docs/zh-CN/ui-guide.md)
82
82
 
83
83
  ## 5 分钟开始使用
84
84
 
@@ -98,7 +98,14 @@ mnemon --version
98
98
 
99
99
  Windows 推荐安装 v0.2.3 或更高版本的官方 ZIP;标准安装目录与 checksum 步骤见[快速开始](./docs/zh-CN/getting-started.md#2-安装-mnemon)。
100
100
 
101
- ### 2. 安装 DSH 插件
101
+ ### 2. 安装 DSH 与插件
102
+
103
+ 本版本已验证 DSH 0.1.1-rc.2;其完整 profile 需要 Node.js `^22.19.0 || >=24.0.0`,Node 20 缺少 rc.2 使用的宿主原语。dsh-mnemon 包本身仍为较旧且兼容的 DSH Host 保留 Node.js 20 支持。DSH rc.2 已发布到 npm 的 `latest` 与 `next` 标签;为了可复现安装,下面显式指定版本:
104
+
105
+ ```sh
106
+ npm install -g @deepseek-ai/dsh@0.1.1-rc.2
107
+ dsh --version
108
+ ```
102
109
 
103
110
  ```sh
104
111
  dsh plugin --profile web add dsh-mnemon
@@ -135,7 +142,7 @@ dsh plugin --profile headless add "link:/absolute/path/to/dsh-mnemon"
135
142
 
136
143
  | 受监督沉淀 | 有界 Agent 查询 |
137
144
  |---|---|
138
- | [![编辑候选内容后再调度独立任务 Agent](https://raw.githubusercontent.com/omdsh-dev/dsh-mnemon/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/remember-dialog.png)](https://github.com/omdsh-dev/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/remember-dialog.png) | [![基于多 Provider 有界证据完成只读 Agent 查询](https://raw.githubusercontent.com/omdsh-dev/dsh-mnemon/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/recall-agent-answer.png)](https://github.com/omdsh-dev/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/recall-agent-answer.png) |
145
+ | [![编辑候选内容后再调度独立任务 Agent](https://raw.githubusercontent.com/Grivn/dsh-mnemon/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/remember-dialog.png)](https://github.com/Grivn/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/remember-dialog.png) | [![基于多 Provider 有界证据完成只读 Agent 查询](https://raw.githubusercontent.com/Grivn/dsh-mnemon/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/recall-agent-answer.png)](https://github.com/Grivn/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/recall-agent-answer.png) |
139
146
 
140
147
  工作台会在调度前明确展示任务边界,并把返回答案与本次证据范围放在一起。对话内的“本回合记忆”和“存入记忆”仍默认开启,可在**设置 → 记忆系统 → 对话界面**分别关闭。
141
148
 
@@ -143,7 +150,7 @@ dsh plugin --profile headless add "link:/absolute/path/to/dsh-mnemon"
143
150
 
144
151
  | 明确选择底层 | 智能路由后续沉淀 |
145
152
  |---|---|
146
- | [![创建记忆体时明确选择 Provider](https://raw.githubusercontent.com/omdsh-dev/dsh-mnemon/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/memory-space-create-dialog.png)](https://github.com/omdsh-dev/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/memory-space-create-dialog.png) | [![在人工指定与智能选择之间配置沉淀策略](https://raw.githubusercontent.com/omdsh-dev/dsh-mnemon/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/distillation-strategy.png)](https://github.com/omdsh-dev/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/distillation-strategy.png) |
153
+ | [![创建记忆体时明确选择 Provider](https://raw.githubusercontent.com/Grivn/dsh-mnemon/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/memory-space-create-dialog.png)](https://github.com/Grivn/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/memory-space-create-dialog.png) | [![在人工指定与智能选择之间配置沉淀策略](https://raw.githubusercontent.com/Grivn/dsh-mnemon/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/distillation-strategy.png)](https://github.com/Grivn/dsh-mnemon/blob/e6ca446e45bdd17991f3c7c98560456de465282b/docs/assets/screenshots/distillation-strategy.png) |
147
154
 
148
155
  手动创建记忆体始终由用户明确选择。智能选择属于“沉淀策略”:硬规则定义候选范围,策略 Prompt 只在多个候选都合格时帮助任务 Agent 决策。
149
156
 
@@ -190,7 +197,7 @@ dsh plugin --profile headless add "link:/absolute/path/to/dsh-mnemon"
190
197
  | 配置范围、路由与模型 | [配置参考](./docs/zh-CN/configuration.md) |
191
198
  | 备份、更新或排障 | [运维指南](./docs/zh-CN/operations.md) |
192
199
  | 接入工具、命令或 RPC | [接口参考](./docs/zh-CN/interfaces.md) |
193
- | 查看本次升级 | [v0.2.14 发布说明](./docs/zh-CN/releases/v0.2.14.md) |
200
+ | 查看本次升级 | [v0.2.15 发布说明](./docs/zh-CN/releases/v0.2.15.md) |
194
201
 
195
202
  完整目录见[文档中心](./docs/zh-CN/README.md)。
196
203
 
package/lib/client.js CHANGED
@@ -1155,18 +1155,19 @@ window.__ModuleLoader__.load({
1155
1155
  "config.providerLoadFailed": "读取 Provider 配置失败:{error}",
1156
1156
  "config.retryProviders": "重试",
1157
1157
  "config.taskAgentTitle": "后台任务 Agent",
1158
- "config.taskAgentDescription": "AI 元信息、Agent 查询、记忆沉淀和档案归档使用无会话历史的独立任务 Agent;这里只调整这些后台任务的模型路由。",
1158
+ "config.taskAgentDescription": "AI 元信息、Agent 查询、记忆沉淀、档案归档以及空闲复盘等子代理委托共用模型路由;这里只调整这些后台任务的模型,不影响主对话。",
1159
1159
  "config.taskAgentModeAria": "后台任务 Agent 模型路由",
1160
1160
  "config.taskAgentInherit": "跟随主链路",
1161
1161
  "config.taskAgentInheritHint": "使用 DSH 新会话默认模型",
1162
1162
  "config.taskAgentFixed": "指定模型 Provider",
1163
- "config.taskAgentFixedHint": "为 Mnemon 后台任务固定路由",
1163
+ "config.taskAgentFixedHint": "为 Mnemon 后台任务 Agent 以及子代理委托固定路由",
1164
1164
  "config.taskAgentProvider": "模型 Provider",
1165
1165
  "config.taskAgentProviderHint": "选择 DSH 已配置的模型服务",
1166
1166
  "config.taskAgentModel": "模型",
1167
1167
  "config.taskAgentModelHint": "选择该 Provider 下的完整模型路由",
1168
1168
  "config.taskAgentChooseProvider": "选择 Provider",
1169
1169
  "config.taskAgentChooseModel": "选择模型",
1170
+ "config.taskAgentImageInput": "图片输入",
1170
1171
  "config.taskAgentEffective": "当前将使用",
1171
1172
  "config.taskAgentLoading": "正在读取模型目录",
1172
1173
  "config.taskAgentUnavailable": "尚无可用的 Provider / Model 路由",
@@ -2012,18 +2013,19 @@ window.__ModuleLoader__.load({
2012
2013
  "config.providerLoadFailed": "Could not load provider configurations: {error}",
2013
2014
  "config.retryProviders": "Retry",
2014
2015
  "config.taskAgentTitle": "Background task Agent",
2015
- "config.taskAgentDescription": "AI metadata, Agent Query, memory distillation, and document archiving use clean independent task Agents. This setting changes only their model route.",
2016
+ "config.taskAgentDescription": "AI metadata, Agent Query, memory distillation, document archiving, and the idle checkpoint review subagent share one model route. This setting changes only their model route and does not affect the main conversation.",
2016
2017
  "config.taskAgentModeAria": "Background task Agent model route",
2017
2018
  "config.taskAgentInherit": "Follow the main route",
2018
2019
  "config.taskAgentInheritHint": "Use the DSH new-session default model",
2019
2020
  "config.taskAgentFixed": "Choose model provider",
2020
- "config.taskAgentFixedHint": "Pin Mnemon background tasks to one route",
2021
+ "config.taskAgentFixedHint": "Pin Mnemon background task Agents and subagent delegations to one route",
2021
2022
  "config.taskAgentProvider": "Model provider",
2022
2023
  "config.taskAgentProviderHint": "Choose a model service configured in DSH",
2023
2024
  "config.taskAgentModel": "Model",
2024
2025
  "config.taskAgentModelHint": "Choose a complete model route from that provider",
2025
2026
  "config.taskAgentChooseProvider": "Choose provider",
2026
2027
  "config.taskAgentChooseModel": "Choose model",
2028
+ "config.taskAgentImageInput": "Image input",
2027
2029
  "config.taskAgentEffective": "Will currently use",
2028
2030
  "config.taskAgentLoading": "Loading model directory",
2029
2031
  "config.taskAgentUnavailable": "No Provider / Model route is currently available",
@@ -3742,9 +3744,9 @@ window.__ModuleLoader__.load({
3742
3744
  value: props.draft.taskAgentModel,
3743
3745
  children: props.draft.taskAgentModel
3744
3746
  }),
3745
- (group?.models ?? []).map((model) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
3747
+ (group?.models ?? []).map((model) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("option", {
3746
3748
  value: model.id,
3747
- children: model.name
3749
+ children: [model.name, model.inputModalities?.includes("image") === true ? ` · ${props.t("config.taskAgentImageInput")}` : ""]
3748
3750
  }, model.id))
3749
3751
  ]
3750
3752
  })] })]
@@ -11721,7 +11723,7 @@ window.__ModuleLoader__.load({
11721
11723
  };
11722
11724
  //#endregion
11723
11725
  //#region \0dsh-mnemon-css:/home/runner/work/dsh-mnemon/dsh-mnemon/src/client/MnemonWorkspace.module.css.mjs
11724
- const css = "[data-pane=conversation]{position:relative}[data-dsh-mnemon-view]{z-index:60;background:var(--dsw-alias-bg-overlay,var(--dsw-alias-bg-base));min-width:0;min-height:0;display:none;position:absolute;inset:0;overflow:hidden}.NS3bAW_panelView{isolation:isolate}html[data-dsh-mnemon-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-dsh-mnemon-view]{display:block}html[data-dsh-mnemon-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-pane=conversation]>:not([data-dsh-mnemon-view]),html[data-dsh-mnemon-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [class*=centerCol]>:not([data-dsh-mnemon-view]){display:none!important}.NS3bAW_entry{width:100%;height:32px;color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;background:0 0;border:none;border-radius:8px;align-items:center;gap:8px;padding:0 12px;font-size:13px;display:flex}.NS3bAW_entry:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-sidebar-nav-item-hover)}.NS3bAW_entry[data-active]{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-sidebar-nav-item-active);font-weight:600}.NS3bAW_entryIcon{flex:none;justify-content:center;align-items:center;display:inline-flex}.NS3bAW_entryLabel{text-overflow:ellipsis;overflow:hidden}[data-dsh-frame][data-sidebar-collapsed] .NS3bAW_entry{justify-content:center;width:100%;padding:0}[data-dsh-frame][data-sidebar-collapsed] .NS3bAW_entryLabel{display:none}";
11726
+ const css = "[data-pane=conversation],.NS3bAW_dshDesktopConversationSurface{position:relative}[data-dsh-mnemon-view]{z-index:60;background:var(--dsw-alias-bg-overlay,var(--dsw-alias-bg-base));min-width:0;min-height:0;display:none;position:absolute;inset:0;overflow:hidden}.NS3bAW_panelView{isolation:isolate}html[data-dsh-mnemon-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-dsh-mnemon-view]{display:block}html[data-dsh-mnemon-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [data-pane=conversation]>:not([data-dsh-mnemon-view]),html[data-dsh-mnemon-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) [class*=centerCol]>:not([data-dsh-mnemon-view]),html[data-dsh-mnemon-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) .NS3bAW_dshDesktopConversationSurface>:not([data-dsh-mnemon-view]){display:none!important}.NS3bAW_entry{width:100%;height:32px;color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;background:0 0;border:none;border-radius:8px;align-items:center;gap:8px;padding:0 12px;font-size:13px;display:flex}.NS3bAW_entry:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-sidebar-nav-item-hover)}.NS3bAW_entry[data-active]{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-sidebar-nav-item-active);font-weight:600}.NS3bAW_entryIcon{flex:none;justify-content:center;align-items:center;display:inline-flex}.NS3bAW_entryLabel{text-overflow:ellipsis;overflow:hidden}[data-dsh-frame][data-sidebar-collapsed] .NS3bAW_entry{justify-content:center;width:100%;padding:0}[data-dsh-frame][data-sidebar-collapsed] .NS3bAW_entryLabel{display:none}";
11725
11727
  const tagId = "dsh-mnemon/src/client/MnemonWorkspace.module.css";
11726
11728
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
11727
11729
  const tag = document.createElement("style");
@@ -11731,6 +11733,7 @@ window.__ModuleLoader__.load({
11731
11733
  document.head.appendChild(tag);
11732
11734
  }
11733
11735
  var MnemonWorkspace_module_css_default = {
11736
+ "dshDesktopConversationSurface": "NS3bAW_dshDesktopConversationSurface",
11734
11737
  "entry": "NS3bAW_entry",
11735
11738
  "entryIcon": "NS3bAW_entryIcon",
11736
11739
  "entryLabel": "NS3bAW_entryLabel",
@@ -11740,7 +11743,7 @@ window.__ModuleLoader__.load({
11740
11743
  //#region src/client/sidebar-entry.ts
11741
11744
  const FAMILY_SELECTOR = "[data-dsh-taskboard-entry], [data-dsh-ssh-entry], [data-dsh-mnemon-entry]";
11742
11745
  function sidebarRoot() {
11743
- const column = document.querySelector("[data-pane=\"sidebar\"], [class*=\"sidebarCol\"]");
11746
+ const column = document.querySelector("[data-pane=\"sidebar\"], [class*=\"sidebarCol\"], .dshDesktopUpstreamSidebar");
11744
11747
  if (column === null) return void 0;
11745
11748
  return column.querySelector("[class*=\"logoRow\"]")?.parentElement ?? column.firstElementChild;
11746
11749
  }
@@ -11891,7 +11894,7 @@ window.__ModuleLoader__.load({
11891
11894
  };
11892
11895
  //#endregion
11893
11896
  //#region src/client/workspace-mount.tsx
11894
- const CONVERSATION_COLUMN_SELECTOR = "[data-pane=\"conversation\"], [class*=\"centerCol\"]";
11897
+ const CONVERSATION_COLUMN_SELECTOR = "[data-pane=\"conversation\"], [class*=\"centerCol\"], .dshDesktopConversationSurface";
11895
11898
  const ACTIVE_ATTR = "data-dsh-mnemon-active";
11896
11899
  const TASKBOARD_ACTIVE_ATTR = "data-dsh-taskboard-active";
11897
11900
  const SSH_ACTIVE_ATTR = "data-dsh-ssh-active";
package/lib/index.js CHANGED
@@ -7817,6 +7817,7 @@ var MnemonSubagentCoordinator = class {
7817
7817
  runtimeMemoryOrSource;
7818
7818
  documents;
7819
7819
  resultRuntime;
7820
+ taskAgentModelResolver;
7820
7821
  counters = {
7821
7822
  recalls: 0,
7822
7823
  writes: 0,
@@ -7831,11 +7832,12 @@ var MnemonSubagentCoordinator = class {
7831
7832
  };
7832
7833
  runtimeQueue = Promise.resolve();
7833
7834
  documentQueue = Promise.resolve();
7834
- constructor(subagents, runtimeMemoryOrSource, documents, resultRuntime) {
7835
+ constructor(subagents, runtimeMemoryOrSource, documents, resultRuntime, taskAgentModelResolver) {
7835
7836
  this.subagents = subagents;
7836
7837
  this.runtimeMemoryOrSource = runtimeMemoryOrSource;
7837
7838
  this.documents = documents;
7838
7839
  this.resultRuntime = resultRuntime;
7840
+ this.taskAgentModelResolver = taskAgentModelResolver;
7839
7841
  }
7840
7842
  snapshot() {
7841
7843
  return { ...this.counters };
@@ -7907,22 +7909,21 @@ Traversal depth: 2`;
7907
7909
  if (!Array.isArray(value.updates)) throw new Error("metadata subagent returned no updates");
7908
7910
  const allowed = new Set(selected);
7909
7911
  const seen = /* @__PURE__ */ new Set();
7910
- const updates = value.updates.map((entry) => {
7912
+ const updates = [];
7913
+ for (const entry of value.updates) {
7911
7914
  const item = object$2(entry);
7912
7915
  const memoryBodyId = typeof item.memoryBodyId === "string" ? item.memoryBodyId.trim() : "";
7913
7916
  const title = typeof item.title === "string" ? item.title.trim() : "";
7914
7917
  const description = typeof item.description === "string" ? item.description.trim() : "";
7915
7918
  if (!allowed.has(memoryBodyId) || seen.has(memoryBodyId)) throw new Error("metadata subagent returned an unexpected or duplicate Memory Space");
7916
- if (title.length < 2 || title.length > 48) throw new Error(`metadata title for ${memoryBodyId} must contain 2 through 48 characters`);
7917
- if (description.length < 12 || description.length > 200) throw new Error(`metadata description for ${memoryBodyId} must contain 12 through 200 characters`);
7918
7919
  seen.add(memoryBodyId);
7919
- return {
7920
+ if (title.length < 2 || title.length > 48 || description.length < 12 || description.length > 200) continue;
7921
+ updates.push({
7920
7922
  memoryBodyId,
7921
7923
  title,
7922
7924
  description
7923
- };
7924
- });
7925
- if (seen.size !== allowed.size) throw new Error("metadata subagent omitted a selected Memory Space");
7925
+ });
7926
+ }
7926
7927
  return {
7927
7928
  delegated: true,
7928
7929
  runId,
@@ -8282,6 +8283,14 @@ ${runtimeSnapshotContext("user", targetEntries)}`;
8282
8283
  const completionPersona = `${persona}
8283
8284
 
8284
8285
  Completion protocol: call \`${resultToolName}\` exactly once with the final result matching its parameter schema. This is the only completion channel for this run. Do not finish with a plain-text answer.`;
8286
+ const perOpMaxTokens = operation === "migration" ? 16384 : operation === "compaction" || operation === "document-archive" ? 8192 : operation === "metadata-maintenance" ? 4096 : void 0;
8287
+ const fixed = this.taskAgentModelResolver?.();
8288
+ const baseAgentOptions = perOpMaxTokens === void 0 ? void 0 : { maxTokens: perOpMaxTokens };
8289
+ const resolvedAgentOptions = fixed === void 0 ? baseAgentOptions : {
8290
+ ...baseAgentOptions ?? {},
8291
+ provider: fixed.provider,
8292
+ model: fixed.model
8293
+ };
8285
8294
  run = await this.subagents.start(provider, {
8286
8295
  label,
8287
8296
  prompt: [{
@@ -8290,7 +8299,7 @@ Completion protocol: call \`${resultToolName}\` exactly once with the final resu
8290
8299
  }],
8291
8300
  parent,
8292
8301
  signal,
8293
- ...operation === "migration" ? { agentOptions: { maxTokens: 16384 } } : operation === "compaction" || operation === "document-archive" ? { agentOptions: { maxTokens: 8192 } } : operation === "metadata-maintenance" ? { agentOptions: { maxTokens: 4096 } } : {},
8302
+ ...resolvedAgentOptions === void 0 ? {} : { agentOptions: resolvedAgentOptions },
8294
8303
  maxDepth: 1,
8295
8304
  toolFilter: { allow: [...tools, resultToolName] },
8296
8305
  persona: completionPersona
@@ -8545,7 +8554,7 @@ function memoryToolCalls(events, turn) {
8545
8554
  return events.filter((event) => event.type === "tool/call" && (turn === void 0 || eventTurn(event) === turn) && typeof event.data.name === "string" && event.data.name.startsWith("mnemon_")).length;
8546
8555
  }
8547
8556
  function textLength(messages) {
8548
- return messages.filter((message) => message.source.kind === "user").map((message) => message.content.map((block) => block.text).join("\n").trim().length).reduce((total, length) => total + length, 0);
8557
+ return messages.filter((message) => message.source.kind === "user").map((message) => message.content.filter((block) => block.type === "text" && "text" in block && typeof block.text === "string").map((block) => block.text).join("\n").trim().length).reduce((total, length) => total + length, 0);
8549
8558
  }
8550
8559
  function completedToolActivity(events, turn) {
8551
8560
  return {
@@ -8890,7 +8899,8 @@ var MnemonLifecycle = class {
8890
8899
  models: models.map((model) => ({
8891
8900
  id: model.id,
8892
8901
  name: model.name,
8893
- ...model.description === void 0 ? {} : { description: model.description }
8902
+ ...model.description === void 0 ? {} : { description: model.description },
8903
+ ...model.inputModalities === void 0 ? {} : { inputModalities: [...model.inputModalities] }
8894
8904
  }))
8895
8905
  }
8896
8906
  };
@@ -10017,7 +10027,7 @@ function createWriteHandler(input, lifecycle, runtimeMemory, versions) {
10017
10027
  if (!body.active || body.providerEnabled === false) throw new Error(`metadata maintenance requires an active Memory Space: ${id}`);
10018
10028
  }
10019
10029
  const maintained = await lifecycle.maintainMetadata(String(payload.sessionId ?? ""), memoryBodyIds, selectedWorkspace?.path);
10020
- service.updateBodyMetadata(maintained.updates);
10030
+ if (maintained.updates.length > 0) service.updateBodyMetadata(maintained.updates);
10021
10031
  return success$1(maintained);
10022
10032
  }
10023
10033
  case "body-reconnect": return success$1(await service.reconnectBody(String(payload.memoryBodyId ?? "")));
@@ -10873,7 +10883,17 @@ function apply(rawContext, config = {}) {
10873
10883
  base: resolveInteractionConfig(resolved.conversationInteraction),
10874
10884
  applies: "live"
10875
10885
  });
10876
- const coordinator = new MnemonSubagentCoordinator(ctx.subagents, runtime, void 0, ctx);
10886
+ const coordinator = new MnemonSubagentCoordinator(ctx.subagents, runtime, void 0, ctx, () => {
10887
+ const taskAgentModel = runtime.config.taskAgentModel;
10888
+ if (taskAgentModel.mode !== "fixed") return void 0;
10889
+ const provider = taskAgentModel.provider?.trim();
10890
+ const model = taskAgentModel.model?.trim();
10891
+ if (provider === void 0 || provider === "" || model === void 0 || model === "") return void 0;
10892
+ return {
10893
+ provider,
10894
+ model
10895
+ };
10896
+ });
10877
10897
  const lifecycle = new MnemonLifecycle(ctx, coordinator, runtime.config, runtime);
10878
10898
  ctx.effect(() => lifecycle.start(), "dsh-mnemon.lifecycle-root()");
10879
10899
  registerTools(ctx, runtime, coordinator);
@@ -13,7 +13,7 @@ declare module '@deepseek-ai/dsh-client-ui-slots' {
13
13
  mnemon: MnemonKey;
14
14
  }
15
15
  }
16
- /** DSH 0.1.0-rc.8 client context plus the two injected feature services. */
16
+ /** DSH 0.1.1-rc.2 client context plus the two injected feature services. */
17
17
  export type MnemonClientContext = ClientContext & {
18
18
  connection: ConnectionHandle;
19
19
  locale: LocaleRuntime;
@@ -765,6 +765,7 @@ export declare const zh: {
765
765
  'config.taskAgentModelHint': string;
766
766
  'config.taskAgentChooseProvider': string;
767
767
  'config.taskAgentChooseModel': string;
768
+ 'config.taskAgentImageInput': string;
768
769
  'config.taskAgentEffective': string;
769
770
  'config.taskAgentLoading': string;
770
771
  'config.taskAgentUnavailable': string;
@@ -1623,6 +1624,7 @@ export declare const en: {
1623
1624
  'config.taskAgentModelHint': string;
1624
1625
  'config.taskAgentChooseProvider': string;
1625
1626
  'config.taskAgentChooseModel': string;
1627
+ 'config.taskAgentImageInput': string;
1626
1628
  'config.taskAgentEffective': string;
1627
1629
  'config.taskAgentLoading': string;
1628
1630
  'config.taskAgentUnavailable': string;
@@ -86,13 +86,35 @@ export interface HostMessageSource {
86
86
  form?: string;
87
87
  summary?: string;
88
88
  }
89
+ /** Minimum shape shared by DSH content blocks, including merge-added blocks. */
90
+ export interface HostOpaqueContentBlock {
91
+ type: string;
92
+ /** Present on text-like blocks; omitted by images and other merge-added blocks. */
93
+ text?: string;
94
+ }
95
+ export interface HostTextContentBlock extends HostOpaqueContentBlock {
96
+ type: 'text';
97
+ text: string;
98
+ }
99
+ /** Durable image metadata used by the DSH 0.1.1 prerelease line. */
100
+ export interface HostImageAttachmentRef {
101
+ attachmentId: string;
102
+ mediaType: 'image/png' | 'image/jpeg' | 'image/webp' | 'image/gif';
103
+ bytes: number;
104
+ width: number;
105
+ height: number;
106
+ name?: string;
107
+ }
108
+ export interface HostImageContentBlock extends HostOpaqueContentBlock {
109
+ type: 'image';
110
+ attachment: HostImageAttachmentRef;
111
+ }
112
+ /** User content is open to DSH/plugin blocks while documenting first-party text and image shapes. */
113
+ export type HostUserContentBlock = HostTextContentBlock | HostImageContentBlock | HostOpaqueContentBlock;
89
114
  export interface HostUserMessage {
90
115
  id: string;
91
116
  role: 'user';
92
- content: Array<{
93
- type: 'text';
94
- text: string;
95
- }>;
117
+ content: HostUserContentBlock[];
96
118
  source: HostMessageSource;
97
119
  }
98
120
  export interface HostSessionEvent {
@@ -174,7 +196,7 @@ export interface HostSubagentResult {
174
196
  [key: string]: unknown;
175
197
  }>;
176
198
  structured?: unknown;
177
- /** DSH rc.8 provider-authored failure detail, including for remote children. */
199
+ /** DSH rc.8+ provider-authored failure detail, including for remote children. */
178
200
  diagnostic?: string;
179
201
  stopReason: string;
180
202
  }
@@ -227,6 +249,8 @@ export interface HostLlmService {
227
249
  id: string;
228
250
  name: string;
229
251
  description?: string;
252
+ /** Absent means unknown; an explicit list declares the accepted request modalities. */
253
+ inputModalities?: readonly string[];
230
254
  }>>;
231
255
  }
232
256
  export interface HostContextShape {
@@ -132,6 +132,8 @@ export interface TaskAgentModelCatalogModel {
132
132
  id: string;
133
133
  name: string;
134
134
  description?: string;
135
+ /** DSH's merge-extensible model modality ids; absent means capability is unknown. */
136
+ inputModalities?: string[];
135
137
  }
136
138
  export interface TaskAgentModelCatalogGroup {
137
139
  id: string;
@@ -74,10 +74,14 @@ export declare class MnemonSubagentCoordinator {
74
74
  private readonly runtimeMemoryOrSource?;
75
75
  private readonly documents?;
76
76
  private readonly resultRuntime?;
77
+ private readonly taskAgentModelResolver?;
77
78
  private readonly counters;
78
79
  private runtimeQueue;
79
80
  private documentQueue;
80
- constructor(subagents: HostSubagentsService, runtimeMemoryOrSource?: (RuntimeMemoryController | AgentRuntimeSource) | undefined, documents?: DocumentManager | undefined, resultRuntime?: HostResultToolRuntime | undefined);
81
+ constructor(subagents: HostSubagentsService, runtimeMemoryOrSource?: (RuntimeMemoryController | AgentRuntimeSource) | undefined, documents?: DocumentManager | undefined, resultRuntime?: HostResultToolRuntime | undefined, taskAgentModelResolver?: (() => {
82
+ provider: string;
83
+ model: string;
84
+ } | undefined) | undefined);
81
85
  snapshot(): SubagentCounters;
82
86
  documentsSnapshot(parent: HostAgent): import("./documents.ts").DocumentSnapshot;
83
87
  documentGet(parent: HostAgent, id: string): DocumentView;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-mnemon",
3
- "version": "0.2.14",
3
+ "version": "0.2.15",
4
4
  "description": "Three-tier memory control plane for DeepSeek Harness: persistent runtime context, searchable project documents, pluggable long-term memory, smart routing, supervised agent workflows, WebUI, and headless tools.",
5
5
  "keywords": [
6
6
  "deepseek-harness",
@@ -36,11 +36,11 @@
36
36
  ],
37
37
  "repository": {
38
38
  "type": "git",
39
- "url": "git+https://github.com/omdsh-dev/dsh-mnemon.git"
39
+ "url": "git+https://github.com/Grivn/dsh-mnemon.git"
40
40
  },
41
- "homepage": "https://github.com/omdsh-dev/dsh-mnemon#readme",
41
+ "homepage": "https://github.com/Grivn/dsh-mnemon#readme",
42
42
  "bugs": {
43
- "url": "https://github.com/omdsh-dev/dsh-mnemon/issues"
43
+ "url": "https://github.com/Grivn/dsh-mnemon/issues"
44
44
  },
45
45
  "license": "MIT",
46
46
  "publishConfig": {
@@ -105,23 +105,23 @@
105
105
  "schemastery": "^3.18.0"
106
106
  },
107
107
  "peerDependencies": {
108
- "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6",
108
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6 || ^0.1.1-rc.1",
109
109
  "react": "^18.2.0",
110
110
  "react-dom": "^18.2.0"
111
111
  },
112
112
  "devDependencies": {
113
113
  "@arethetypeswrong/cli": "^0.18.5",
114
114
  "@deepseek-ai/cordis": "^4.0.1",
115
- "@deepseek-ai/dsh": "0.1.0-rc.8",
116
- "@deepseek-ai/dsh-client-connection": "0.1.0-rc.8",
117
- "@deepseek-ai/dsh-client-locale": "0.1.0-rc.8",
118
- "@deepseek-ai/dsh-client-runtime": "0.1.0-rc.8",
119
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.0-rc.8",
120
- "@deepseek-ai/dsh-client-ui-primitives": "0.1.0-rc.8",
121
- "@deepseek-ai/dsh-client-ui-settings": "0.1.0-rc.8",
122
- "@deepseek-ai/dsh-client-ui-slots": "0.1.0-rc.8",
123
- "@deepseek-ai/dsh-client-ui-tool": "0.1.0-rc.8",
124
- "@deepseek-ai/dsh-system-prompt": "0.1.0-rc.8",
115
+ "@deepseek-ai/dsh": "0.1.1-rc.2",
116
+ "@deepseek-ai/dsh-client-connection": "0.1.1-rc.2",
117
+ "@deepseek-ai/dsh-client-locale": "0.1.1-rc.2",
118
+ "@deepseek-ai/dsh-client-runtime": "0.1.1-rc.2",
119
+ "@deepseek-ai/dsh-client-ui-conversation": "0.1.1-rc.2",
120
+ "@deepseek-ai/dsh-client-ui-primitives": "0.1.1-rc.2",
121
+ "@deepseek-ai/dsh-client-ui-settings": "0.1.1-rc.2",
122
+ "@deepseek-ai/dsh-client-ui-slots": "0.1.1-rc.2",
123
+ "@deepseek-ai/dsh-client-ui-tool": "0.1.1-rc.2",
124
+ "@deepseek-ai/dsh-system-prompt": "0.1.1-rc.2",
125
125
  "@testing-library/react": "^16.3.0",
126
126
  "@types/node": "^22.0.0",
127
127
  "@types/react": "^18.3.0",