dsh-ai-nav: Add an AI navigation wall to the DSH sidebar

Introduction

After equipping a model with a toolchain, a common issue is link quality. If you ask, “Do you have something to build a knowledge base?”, the model will likely recall a domain name from memory, write it up convincingly, but opening it results in a 404 or someone else’s site. Keeping the same batch of AI sites in the browser bookmarks bar takes longer to browse than to ask once.

naturalth2012/dsh-ai-nav targets this problem: it maintains a directory of verified AI websites, turns the entry point into a full wall of tiles in the sidebar, and hands the index over to the model as a tool. Below, I introduce its positioning, page capabilities, tools for the model, and installation/self-check methods.

What is it

A DSH plugin maintained by naturalth2012. After installation, an extra icon appears in the sidebar; clicking it opens the index page: a search box at the top and 95 entries across eight categories below. The purpose is stated bluntly—don’t keep flipping through the same batch of AI sites in your browser bookmarks anymore.

It solves two things at once: first, it provides a categorized entry point for humans; second, it gives the model a directory of real URLs, ensuring “what is found is a clickable address, not a link fabricated from memory.” The README explicitly states this is an “entry index,” not a “service promise”: whether it opens depends on the local network; overseas sites are usually not directly connectable in mainland China. This is a network reachability issue, not a broken link.

The positioning in package.json is dsh-ai-nav, version 1.0.0, license MIT, author naturalth2012.

What the page provides

The README lists the page areas in a table; here is an item-by-item explanation.

As you type in the search box, local candidates are provided. Matches include names, aliases, pinyin abbreviations, and domains; pressing Enter searches via the chosen engine. Next to candidates, there is “Site Search” (站内搜), which queries the site’s own search parameters. Sites without query parameters only offer “Open,” and search still uses the selected engine.

“Don’t know which to use” is scenario-based recommendation: describe a need in one sentence (e.g., “build a knowledge base for internal Q&A for the team”), and it recommends a complementary set based on the scenario, explaining why for each.

Pinning and Recent Access: A star appears when hovering over a tile; clicking pins or unpins it. Recent access automatically tracks the last 8, and repeated clicks on the same tile only keep one entry.

The categorized tile wall covers eight categories: Chat Assistants, AI Search & Deep Research, Knowledge Base & Notes, Coding & Agents, Images & Audio/Video, Office & Documents, Models & Communities, Learning & Resources, totaling 95 entries.

Add Site and Import Bookmarks: Manually add one, or select a browser-exported bookmarks HTML file (drag and drop is also supported), and known sites are automatically categorized.

Site icons go through the host’s same-origin proxy /plugins/ai-nav/favicon; the page itself does not connect directly to third parties. Icon parsing is divided into three steps; it stops if any step succeeds: first, try the site’s standard addresses (/favicon.ico, /apple-touch-icon.png, /favicon.png); second, try the root domain (e.g., chat.deepseek.com falls back to deepseek.com); finally, read the <link rel="icon"> declared in the page’s <head>.

The response body is judged as an image based on the first byte, because modern sites often return icons as application/octet-stream, and when an icon is missing, they often return 200 text/html. Checking only headers at either end would be wrong. Results are cached for 24 hours by domain; domains without icons are not retried within 20 minutes. If unavailable, a letter square colored by the domain is drawn.

Tools for the model

The plugin exposes six tools to the host; the README lists their uses as follows:

Tool Usage
ai_nav_search Search directory by keyword, alias, or domain; return real URL, category, tags, and self-deployability
ai_nav_recommend Recommend combinations based on a sentence of requirement; can limit to domestic direct access, only self-deployable, or prioritize free
ai_nav_browse Browse categories and entries without keywords
ai_nav_sites Manage custom sites and pins (list / add / remove / pin)
ai_nav_import Import bookmarks file (provide content or local path)
ai_nav_open Parse a sentence into an address to open: if it looks like a URL, open it; if it matches the directory, open the site; otherwise, search

Two rules for directory quality

The README lists these two as the baseline for directory maintenance, written here because they determine whether this index is worth relying on.

  1. Every url is an officially verified entry that can be opened—having a 404 on a navigation site is worse than not listing it at all.
  2. Only provide the q site search template if the site actually supports query parameters. Guessing a template results in a broken results page, which is the most annoying flaw of old-fashioned navigation sites.

Installation and enabling

Neither the README nor package.json provides a standalone installation command (e.g., dsh plugin add ... form). This article does not concatenate commands. You must read the source code to confirm behavior first, then load the plugin according to the host’s method.

The plugin’s entry declaration is in the dsh field of package.json:

"dsh": {
  "bundle": { "patch": "./cordis.patch.yml" },
  "client": {
    "platform": "web",
    "immediately": true,
    "inject": ["@deepseek-ai/dsh-client-ui-conversation"]
  }
}

bundle.patch points to ./cordis.patch.yml, which is the host-side patch entry. Configuration items are written in this file:

- insert:
    - id: ai-nav
      name: 'dsh-ai-nav'
      config:
        engine: metaso      # Default search engine id (metaso / baidu / bing / google / perplexity …)
        showSelfHost: true  # Whether to show "self-deployable" entries
        favicons: true      # Whether to enable icon proxy (turn off to use all letter squares)

The engine selected in the page is saved to user data, taking precedence over the default value here.

It should be noted that the plugin runs with the permissions of the current DSH process. Before installing, check the source code and license. The license is MIT, and the repository address is https://github.com/naturalth2012/dsh-ai-nav.

Data location and write safety

Custom sites, pins, recent access, and engine selection are stored at $DSH_PROFILE_DIR/ai-nav/data.json, falling back to $DSH_HOME/ai-nav, and further falling back to ~/.dsh/ai-nav. Writing uses “temp file + rename”; corrupted files are treated as “no data” and won’t prevent the page from opening.

All stored links go through safeUrl() during write and read: only http(s): is accepted; javascript:, data:, and file: are all rejected.

Offline self-check

node scripts/selfcheck.mjs

Covers 138 pure function checks (directory integrity, alias vocabulary, sorting, URL guessing, bookmark parsing, recommendation, stored URL gating, icon candidate order and first-byte sniffing). No internet connection, no browser. Worth running after modifying catalog.js.

Code structure

The file list from the README is as follows:

File Content
index.js Host side: directory assembly, same-origin routing, six tools, network part of icon proxy
icon.js Icon strategy (pure functions): candidate order, first-byte sniffing, <link rel="icon"> parsing, caching and concurrency gating
catalog.js Eight categories, twelve search engines, all built-in entries (pure data)
search.js Normalization, tokenization, sorting, URL guessing, bookmark parsing, categorization
recommend.js Scenario rules and recommendations (specificity weights prioritizing long words)
store.js Writable state: custom sites, pins, recent, settings
client.js Browser side: sidebar.panellist icon + main panel
scripts/selfcheck.mjs Offline self-check

Known boundaries

These boundaries come directly from the README, which is written specifically and is worth copying verbatim.

The directory is a manually maintained real entry point, not scraped; after a site redesign, individual links may need updating, which is done by modifying catalog.js. Site search only covers a few sites that actually support query parameters; for the rest, pressing Enter uses the search engine.

Recommendation is a rule engine, not a model call: it is explainable, testable offline, but does not understand expressions beyond the keyword list. The “max two per category” in recommendations is down-weighting, not filtering. Similar items after the second place are discounted based on the gap from the first place. Therefore, “write docs, make PPTs, organize meeting minutes” can return WPS AI, WorkBuddy, Feishu, Tencent Docs, and Tongyi Lingwu, rather than letting a 17-point chat assistant squeeze out an 83-point office tool.

The icon proxy limits each domain to 4 seconds and 96 KiB, follows at most one redirect, and rejects internal network addresses. It fetches 5 domains concurrently, merging requests for the same domain. If unavailable, it falls back to letter squares; the ratio of success depends on the local network; blocked sites are always squares.

Use cases

Suitable for two types of people. Those building DSH applications need a categorized, verified AI site index; it costs less to maintain than a custom bookmark list and provides a reliable query object for the model. Those interacting with models can use “recommended combinations” and “open address with one sentence” as ready-to-use capabilities without writing their own rules.

Not suitable as a means to access overseas sites: blocked sites’ icons and links will fail; the index itself does not solve network reachability.

Conclusion

The value of dsh-ai-nav lies not in the number of entries, but in “every link is verified” and “what is given to the model is a real URL.” If you are already using DSH and frequently use multiple AI sites, it is worth installing and trying.

Directory page: https://www.skillhub.cn/plugins/naturalth2012/dsh-ai-nav
GitHub: https://github.com/naturalth2012/dsh-ai-nav

The plugin runs with the permissions of the current DSH process. Before installing, please check the source code and MIT license.

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye