Summary
@openviking/dsh-memory-plugin (0.2.1) registers a tools/pre-execute guard that blocks DeepSeek Harness filesystem/shell tools from receiving viking URIs. The guard scans the entire tool-arguments object, so a local write/edit whose content merely mentions a viking URI (e.g. documentation text like "viking://user/default/") is denied with:
viking:// URIs are OpenViking virtual paths, not local filesystem paths. Use mcp__openviking__write instead.
Repro
- Install the plugin into a DSH web profile.
- Call the local
write tool with file_path = any normal local path and content containing the substring "viking://..." (e.g. "viking://user/default/").
- The write is denied; no file is created.
Control: same call without "viking://" in the content succeeds.
Root cause
shared/uri-guard.mjs -> findVikingUri(args):
- checks path-like keys (
filePath, file_path, path, uri, target_uri, pattern) - good;
- then falls back to
findVikingUriInValue(args), which recursively scans every argument value, including content (write), new_string (edit), command (bash), pattern (grep).
The regex then matches the URI inside the file content, and the guard denies the call.
Suggested fix
Scan only path-like keys and drop the whole-args fallback (or gate the fallback behind a config flag). The intent - blocking a viking URI as a path argument - is fully preserved by the keys loop.
Environment
- dsh 0.1.0-rc.7 (profile: web), plugin 0.2.1
- Windows 11
Summary
@openviking/dsh-memory-plugin(0.2.1) registers atools/pre-executeguard that blocks DeepSeek Harness filesystem/shell tools from receiving viking URIs. The guard scans the entire tool-arguments object, so a localwrite/editwhose content merely mentions a viking URI (e.g. documentation text like "viking://user/default/") is denied with:Repro
writetool withfile_path= any normal local path andcontentcontaining the substring "viking://..." (e.g. "viking://user/default/").Control: same call without "viking://" in the content succeeds.
Root cause
shared/uri-guard.mjs->findVikingUri(args):filePath,file_path,path,uri,target_uri,pattern) - good;findVikingUriInValue(args), which recursively scans every argument value, includingcontent(write),new_string(edit),command(bash),pattern(grep).The regex then matches the URI inside the file content, and the guard denies the call.
Suggested fix
Scan only path-like keys and drop the whole-args fallback (or gate the fallback behind a config flag). The intent - blocking a viking URI as a path argument - is fully preserved by the keys loop.
Environment