dsh-openviking-enhance
OpenViking in the DSH web GUI: a Studio panel, a per-session memory-commit status pill with its commit timeline, and a right-sidebar tab showing what the current session retrieves.
Install
dsh plugin --profile web add dsh-openviking-enhance
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
dsh-openviking-enhance
[English](README.md) | 中文
v0.2.3 · [更新记录](CHANGELOG.md)
把本地 OpenViking 记忆服务接进 DeepSeek Harness
(DSH)的 Web 界面:左侧边栏多一个 OpenViking Studio 面板,输入框下方多一个
commit 状态胶囊,随时能看到每次提交对本会话记忆做了什么。
不需要给 DSH 或 OpenViking 插件打补丁——它就是一个普通的 DSH bundle。
功能
在 DSH 里用 OpenViking Studio。 左侧边栏最后一行点开,主区域直接加载
OpenViking 服务自带的 Studio 界面,浏览记忆、会话、检索都不用离开 DSH 或另开浏览器。
每个会话的 commit 状态。 OpenViking 是按「提交(commit)」写入记忆的:会话的
对话轮次累积到 token 阈值(或会话结束)时归档一次,并抽取其中的记忆。输入框下方的
胶囊告诉你当前会话处在哪一步:
胶囊 · 含义
OV · 未提交 · 本会话还没有内容被提交
OV · 12.3k/20k · 正在累积,接近提交阈值
OV · 抽取中… · 正在归档并抽取记忆
OV · 3 次提交 · 已提交 3 次
OV · 抽取失败 · 最新一次提交已归档,但记忆抽取失败
OV · 已取消 · 最新一次提交在抽取记忆前被取消
OV · 不可用 · 连不上本地 OpenViking 服务
点开胶囊可以看到:
- 时间线:最近 3 次提交分别发生在什么时候、抽取成功还是失败、各新增/更新/删除了多少条记忆
(其余一次点击展开);
- 点某一次提交,列出它具体改了哪些记忆,含
viking://路径; - 抽取失败的时间,以及服务端给出的原因。比最新提交更早的失败仍会列在这里,但不会改变胶囊状态。
面板和胶囊都只读——本插件不会向 OpenViking 提交、写入或删除任何东西。
这个会话检索到了什么。 右侧边栏多一个「记忆召回」tab:显示当前会话会被
OpenViking 拉进上下文的记忆——检索用的那句话(默认是本会话最近一次提问,也可以自己输入)、
三个来源(记忆 / 资源 / 技能)里每条命中的分数(按高低从红到橙到绿分级)、文件名、
类型(entity、event 等)与摘要——完整 viking:// 路径悬停可见,点开任意一条可看全文——
以及服务端给出的检索计划。从右侧边栏的 + 引导页打开,和该栏本身一样是按会话的。
Studio 面板、打开它的侧边栏行,以及输入框下方的提交状态胶囊。
前置条件
DSH · 0.2.0-rc.2 或更新(desktop / web profile 均可;已在 0.2.1-rc.3 实测)
OpenViking · 需要一个本地服务,实测 0.5.1.1。Studio 由同一端口的 /studio/ 提供
记忆插件 · 建议装 @openviking/dsh-memory-plugin——会话提交由它完成。不装也能用,只是看不到提交阈值进度
安装
从 Plugins 页安装(Add plugin → 填包名或 tarball),或:
# 从 npm 装 dsh plugin --profile desktop add dsh-openviking-enhance # 或从最新 release 装预构建 tarball dsh plugin --profile desktop add https://github.com/A2chitect/dsh-openviking-enhance/releases/latest/download/dsh-openviking-enhance.tgz
直接用 Git 地址安装会被 pnpm 拒绝(这个包声明了构建脚本,pnpm 在得到允许前一律不放行),
所以源码目录要打成 tarball 再装——客户端半部分是预构建产物,源码安装等于装了个没东西可加载的壳:
pnpm pack && dsh plugin --profile desktop add ./dsh-openviking-enhance-<版本>.tgz
安装后重启一次 DSH 应用(宿主部分在启动时加载)。卸载:
dsh plugin --profile desktop remove dsh-openviking-enhance
配置
默认值适配标准本地环境,开箱无需配置。要改的话,打开侧边栏的 Plugins 页,找到本插件,
点它那一行的 Configure:表单包含下表的全部字段,地址旁边有 检测 按钮可以在保存前先试连,
每个字段还有 默认 按钮——它是清除覆盖、恢复继承,而不是写入一个空值。
同样的设置也仍然可以手写在 profile 的 patch 文件
(~/.dsh/profiles/desktop/cordis.patch.yml)里 openviking-enhance 这一行下面:
- id: openviking-enhance
name: 'dsh-openviking-enhance'
config:
endpoint: http://127.0.0.1:1933
字段 · 默认值 · 说明
endpoint · 读 ~/.openviking/ovcli.conf,否则 http://127.0.0.1:1933 · OpenViking 地址
apiKey · 读 ovcli.conf · 仅在服务端开启鉴权时需要
account / user · default / default · 读取记忆所用的身份
studioPath · /studio/ · Studio 在该地址下的路径
cacheTtlMs · 2500 · 状态结果的缓存时长
recallCacheTtlMs · 15000 · 单次检索结果的缓存时长
showSidebarEntry · true · 界面开关:左侧边栏里的 OpenViking 入口
showCommitStatus · true · 界面开关:输入框下方的提交状态胶囊
showRecallPanel · true · 界面开关:右侧边栏的「记忆召回」tab
三个界面开关分别控制这三个入口,保存后立即生效——界面会当场挂载或卸载对应入口,
不需要重载窗口或重启应用。Configure 表单本身永远不会被隐藏,所以关掉的入口随时可以
在这里重新打开。隐藏左侧入口会一并卸载 Studio 页面(重新打开后重新加载);隐藏召回 tab
后不再提供该页,已打开的召回页会在回到对话时自动收起(若它在后台分屏里、不是激活页,
则需要手动关闭——框架没有提供枚举标签页的接口)。
常见问题
侧边栏没有 OpenViking 行,或输入框下方没有胶囊。
先看插件自己的开关(Plugins → 本插件 → Configure → 「界面」):某个入口可能被关掉了,
而且三个开关互相独立。否则是客户端部分没加载:重载窗口(⌘R)即可,仍然没有就重启应用。
我把 OpenViking 行 / 胶囊 / 召回 tab 关掉了,想找回来。
打开 Plugins → dsh-openviking-enhance → 它那一行的 Configure,把开关打开再保存。
即使三个入口全都隐藏,这个配置表单也始终可用。
面板提示连不上 OpenViking。
先起服务并直接验证:curl http://127.0.0.1:1933/health。面板会显示它尝试的地址,
endpoint 不是默认值时这个信息很有用。
胶囊显示「抽取失败」。
归档成功了,但 OpenViking 没能把它变成记忆——那部分记忆不在你的库里。点开胶囊看
服务端返回的原因,通常是 ~/.openviking/ov.conf 里抽取所用模型的问题。
胶囊显示 token 数而不是提交次数。
说明没装 @openviking/dsh-memory-plugin,插件无从得知提交阈值。提交本身照常发生,
只是少了进度分母。
时间线只有 3 条。
这是默认值,点「显示全部」展开。
右侧边栏里没有召回 tab。
该 tab 从右侧边栏自己的 + 引导页进入,且需要重载窗口后才会出现(客户端部分是页面加载时
取用的文件)。若 DSH 低于 0.2.0-rc.2,它没有右侧边栏可供挂载:这一行会被跳过,
Studio 面板和胶囊照常工作。
改了代码但界面没变化。
两半的加载方式不同:客户端部分重载窗口即可,宿主部分必须重启应用。
说明
- 本插件自身的界面文字跟随应用语言:内置中英两套文案,读取 DSH 设置的语言,
切换应用语言即切换本插件的文案;其他语言退回英文。
- OpenViking 会定期清理 commit 任务记录,所以失败列表只覆盖最近的提交;归档文件
本身是永久的。
- 插件的内部接口只接受本机 loopback 且来自 DSH 窗口自身来源的请求。
开发
pnpm install pnpm run build # lib/index.js(宿主)+ lib/client.js(浏览器) pnpm test # 类型检查、构建、发布要求核对、单测、冒烟 pnpm run watch # 改动后自动重建
冒烟脚本不需要开界面就能打印提交时间线;OpenViking 没在跑时它会跳过实时数据部分
(SMOKE_REQUIRE_SERVER=1 可让跳过变成失败)。各部分的实现细节见源码注释。
版本号写在 package.json,每次发布在 git 里打 vX.Y.Z 标签;0.x 期间内部实现
仍可能调整。每个版本包含什么见 [CHANGELOG.md](CHANGELOG.md),发版步骤和必须在界面里
过一遍的验收清单见 [RELEASING.md](RELEASING.md)。
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::4,最后更新 2026-11-04