English | 中文
Where: your own message while it waits: just after you press Send, or while it waits in the queue for a Bot that is busy.
What you see: DeepSeek Harness draws the "@" part of that message as a file reference, with a file icon. In these cases it also cuts the name:
| You type | Shown while waiting |
|---|---|
@New Bot please check (a name with a space) |
a file "New", then "Bot please check" |
@Anvil你看下 (no space after the name) |
a file "Anvil你看下" |
@Anvil,帮我查 (punctuation after the name) |
a file "Anvil,帮我查" |
What is not affected: who answers. DS Bot reads "@Name" by its own rule, so the Bot you named is called. When the message is sent, it shows the Bot's mark and name as usual.
Tip: put a space after the name (@Anvil 你看下). Then a name without a space shows as the Bot while it waits, too.
Why: DeepSeek Harness draws these waiting rows itself and reads "@" up to the next space. A plugin cannot change how they are drawn yet.
Where: DSH Web (or Desktop) starts, but DS Bot is not there. The log has this line:
dsh: disabling profile plugin row "bot": its declared peer dependencies cannot be validated: Cannot read properties of undefined (reading 'startsWith')
Installing another version of DS Bot does not help.
Why: before it loads a plugin, DeepSeek Harness checks each plugin row of the profile. This message means a row has the id bot but no package name. DS Bot adds its own row with the name ds-bot, so the row without a name most likely comes from a file in the profile folder, such as an override - id: bot in cordis.patch.yml that no longer matches DS Bot's row. We could not reproduce this, so we do not know yet how such a row is left behind.
What to do: the profile folder is ~/.dsh/profiles/web/ (Windows: C:\Users\<user>\.dsh\profiles\web\), or profiles/web/ in DSH_HOME when it is set. For Desktop, use profiles/desktop/ instead.
- Quit DSH.
- Open
cordis.patch.ymlin the profile folder. Look for a row withid: botthat has noname: ds-botline, and remove that row. Keep a copy of the file first. - Check that
package.jsonin the same folder listsds-botunderdependencies. If it does not, add DS Bot again:npx @deepseek-ai/dsh@0.2.2-rc.1 plugin --profile web add ds-bot. - Start DSH again.
To see where the row comes from, run npx @deepseek-ai/dsh@0.2.2-rc.1 --profile web --dump-config. It prints every plugin row with the file that supplied it. If you report the problem, copy only the rows with id: bot and the file names; leave out keys and paths you do not want to share.
Deleting the whole profile folder also fixes it, but it removes the profile's other plugins and its settings, such as models. The Bot team is in ~/.dsh/bot/ and is not affected either way.
Where: every session, Bot chats and normal Agent chats alike, after you turn off the web-search-auto row in the sidebar's Plugins page or with disabled: true in the profile's cordis.patch.yml. Each web_search call returns:
Error: configured web provider "auto" is not registered
The error code is WEB_PROVIDER_CONFIGURED_MISSING.
Why: DS Bot's cordis.patch.yml sets the web row's searchProvider to auto whether or not the web-search-auto row is on, and DeepSeek Harness does not fall back to another provider when the one it names is missing.
What to do: the profile folder is the same as in the entry above.
-
Quit DSH.
-
Open
cordis.patch.ymlin the profile folder. Next to the row that turns offweb-search-auto, add awebrow that names another search provider. This row replaces the whole config of thewebrow, so keepfetchProviderin it:- id: web-search-auto name: ds-bot/web-search disabled: true - id: web name: '@deepseek-ai/dsh-web' config: searchProvider: deepseek-official fetchProvider: http
-
Start DSH again.
To check the result, run npx @deepseek-ai/dsh@0.2.2-rc.1 --profile web --dump-config and look at the web row. Another plugin can also set the search provider while DSH runs, after the profile patch. If you turn such a plugin off later, check this setting again.
See also Web search in the plugin README and issue #128.
Where: on a Linux system whose glibc is older than 2.28 (CentOS 7 ships glibc 2.17), the desktop AppImage or deb, or a host-installed dsh web, fails at start. The loader reports a missing glibc version, for example:
libghostty-vt.so: GLIBC_2.27 not found
Why: DeepSeek Harness ships native libraries, including libghostty-vt.so, built against newer glibc symbols than CentOS 7 provides. DS Bot is a plugin and cannot rebuild DSH's libraries, so there is no glibc-2.17 build to install. Check your version with ldd --version.
What to do: run the Docker image instead — the container has its own, newer glibc, so the host's glibc no longer decides. See docker/: build or pull the image, publish the port, and open the UI from any browser on the LAN. Keep these points in mind:
- The container brings its own DSH and its own native libraries. Do not copy or mount the host's
libghostty-vt.sointo the container — mixing them breaks it. - The container needs a Docker (or Podman) new enough to run a Debian Bookworm image. CentOS 7's stock kernel and Docker are old; if Docker itself fails, Podman or a newer Docker engine is the route. This exact combination is untested — the image itself is covered by CI on a modern host.
- Data lives in the mounted data directory (
/data), not your real~/.dsh; the container never reads or writes it. - Stop with
docker compose down(ordocker stop), which flushes sessions cleanly.