Bundle
dsh-capability-discovery
A DSH Bundle that registers a multi-source capability discovery and risk inspection Skill.
- Source
- 444136347
- stars
- 3 stars
- License
- Apache-2.0
- Updated
- Updated 4 days ago
Readme
# dsh-capability-discovery
**Multi-source capability discovery, ranking, and heuristic risk inspection for DeepSeek Harness.**
`dsh-capability-discovery` is the **DSH Bundle** used for installation and loading. It registers the user-facing **`capability-discovery` Skill**, which finds useful DSH plugins, Agent Skills, MCP servers, profiles, agents, and related ecosystem projects without depending on a single directory.
> Independent community project. Not affiliated with or endorsed by DeepSeek.
[中文说明](./README.zh-CN.md) · [Architecture](./docs/architecture.md) · [Data sources](./docs/sources.md) · [Publishing](./docs/publishing.md) · [Contributing](./CONTRIBUTING.md) · [Security](./SECURITY.md) · [Changelog](./CHANGELOG.md)
## Why
The DeepSeek Harness ecosystem is distributed across GitHub topics, curated lists, and community registries. A human can browse all of them manually, but an Agent needs a smaller interface:
1. search multiple sources;
2. normalize and deduplicate the same repository;
3. rank results by task relevance, source agreement, activity, and lightweight popularity signals;
4. inspect the selected repository for known risk patterns;
5. let the user decide what to install.
This project focuses on that discovery layer.
## Architecture
```mermaid
flowchart TD
Q[User task] --> D[Discovery]
D --> G[GitHub dsh-plugin topic]
D --> A1[awesome-dsh-plugins]
D --> A2[awesome-deepseek-harness]
D --> A3[awesome-dsh-plugin registry]
G --> N[Normalize + deduplicate]
A1 --> N
A2 --> N
A3 --> N
N --> R[Rank]
R --> C[Top candidates]
C --> I[Heuristic risk inspection]
I --> U[User decision]
```
A source failure does not fail the entire search. The response includes `sourceErrors` so partial coverage stays visible.
## Quick start
Requires Node.js 20 or newer.
### CLI from a local clone
```bash
git clone https://github.com/444136347/dsh-capability-discovery.git
cd dsh-capability-discovery
npm test
node cli/dsh-capability.mjs sources
node cli/dsh-capability.mjs search ppt slides --limit 5
node cli/dsh-capability.mjs search memory --type skill --json
node cli/dsh-capability.mjs inspect owner/repo
```
If the package is later published to npm, the same CLI can be exposed as `dsh-capability`.
## Use in DeepSeek Harness
The two names serve different roles:
| Name | Role |
|---|---|
| `dsh-capability-discovery` | DSH Bundle package installed into a profile |
| `capability-discovery` | Skill invoked inside a session |
The official CLI uses `dsh plugin` as the profile's external package-management entry point, so Bundles are installed through that subcommand; it does not mean the user-facing capability is a Web UI plugin. See the official [Bundle publishing tutorial](https://deepseek-harness.github.io/deepseek-harness/develop/basic/publish/) and [reference](https://deepseek-harness.github.io/deepseek-harness/reference/).
### 1. Install the Bundle
Pin a published tag or commit rather than following a moving branch. The current public release is `v0.1.2`:
```bash
npx -y @deepseek-ai/dsh plugin --profile web add \
'github:444136347/dsh-capability-discovery#v0.1.2'
```
Current DSH releases add the package to `dependencies` and keep
`dsh.profile.bundles` in sync automatically. Verify the composed profile before booting:
```bash
npx -y @deepseek-ai/dsh --profile web --dump-config \
| grep -n -C 4 -E 'dsh-capability-discovery|capability-discovery'
```
The output should contain the `# == dsh-capability-discovery` Bundle layer and the `dsh-capability-discovery` Loader entry. Profiles are independent: installing into `web` does not install the Bundle into `headless` or another profile.
### 2. Restart DSH
If DSH is already running, stop and restart the same profile after installing or upgrading the Bundle:
```bash
npx -y @deepseek-ai/dsh web
```
Refreshing the browser or creating a new session does not make an old process reload the Bundle set. At runtime, DSH only watches the profile-level `${DSH_HOME:-$HOME/.dsh}/profiles/<profile>/cordis.patch.yml` and home-level `${DSH_HOME:-$HOME/.dsh}/cordis.patch.yml` user patch files; changes to installed packages, `dsh.profile.bundles`, and a Bundle's own patch take effect on the next process start.
### 3. Invoke the Skill
In a new Web session, type `/cap` and pick `capability-discovery` from the `/` Skill menu, or send the full gesture directly:
```text
/capability-discovery Find up to three DSH plugins or Skills for creating presentation slides. Do not install anything.
```
The `/capability-discovery` gesture deterministically loads the Skill instructions before handling the rest of the task. Natural-language requests may also let the model select the Skill, but the explicit gesture is the clearest first verification after installation.
The default answer is compact Markdown: a direct conclusion, a table with at most three candidates, then source coverage and a no-installation status. The Skill combines related English terms into one search and may retry once with a different query only when the first search has no relevant candidates. Full source tables, commands, and diagnostics are shown only when explicitly requested; chat responses do not generate HTML by default.
More examples:
```text
/capability-discovery Find MCP management capabilities and disclose failed sources. Do not install anything.
/capability-discovery Search only for Skills that process Office files and compare the top three.
/capability-discovery Inspect STARDUSTLC666/dsh-ppt for risk. Do not install it.
```
The Bundle does not add a standalone Web UI page, settings card, or sidebar entry, but its Skill appears in the Web input's `/` menu.
### 4. Use the headless profile
Install the Bundle separately into `headless`, then invoke it in a one-shot task:
```bash
npx -y @deepseek-ai/dsh plugin --profile headless add \
'github:444136347/dsh-capability-discovery#v0.1.2'
npx -y @deepseek-ai/dsh --profile headless \
'/capability-discovery Find DSH capabilities for creating slides. Do not install anything.'
```
### 5. Troubleshoot a missing Skill
1. Confirm installation and startup use the same profile, such as `web`.
2. Run the `--dump-config` command above and verify the Bundle layer and Loader entry.
3. Stop the old DSH process and restart it; a browser refresh is not enough.
4. Create a session, type `/cap`, and verify that `capability-discovery` appears.
5. Bypass Skill loading and test the same CLI directly:
```bash
cd "${DSH_HOME:-$HOME/.dsh}/profiles/web"
pnpm exec dsh-capability search ppt --json
```
If the CLI works but the `/` menu does not contain the Skill, investigate the profile, Bundle composition, and process restart. If the CLI also fails, inspect `sourceErrors` and the network/proxy diagnostics.
Only for a legacy profile that already has the dependency but is missing the Bundle entry, run:
```bash
cd "${DSH_HOME:-$HOME/.dsh}/profiles/web"
pnpm exec dsh-capability setup --profile web
```
## CLI
### Search
```bash
dsh-capability search <keywords...> [--limit 10] [--type plugin|skill|mcp|profile|agent|orchestrator|ui|runtime|workflow] [--json]
```
`--type mcp` is a strict MCP Server filter. It keeps candidates whose name or description explicitly identifies a server; MCP management consoles, clients, bridges, and other integrations remain under their actual capability type. A broad search can expose their `mcpRole` as `server`, `client`, `manager`, `bridge`, or `unknown`.
The result includes:
- `score`: ranking score for the current query;
- `sources`: independent indexes that surfaced the repository;
- `type`: plugin / skill / MCP / profile / agent / runtime / UI / workflow when known;
- `mcpRole`: MCP server / client / manager / bridge / unknown when MCP-related evidence is present;
- GitHub metadata such as stars, license, and recent activity when a source provides it;
- `sourceErrors`: sources that failed during this search.
### Inspect
```bash
dsh-capability inspect owner/repo [--json]
```
The inspector samples repository files and reports heuristic signals for:
- package lifecycle scripts;
- subprocess execution;
- credential- or environment-related access;
- network access;
- filesystem mutation;
- instruction-layer prompt-injection or exfiltration-like wording;
- dependency surface.
**This is not a security guarantee.** Static heuristics miss novel behavior, generated code, dependency behavior, runtime-loaded content, and files outside the scan sample.
The GitHub API automatically uses `GITHUB_TOKEN` or `GH_TOKEN` when either environment variable is set. A token increases the API rate limit and allows inspection of repositories that token can access; never paste a token into a command argument or commit it to the repository.
### List sources
```bash
dsh-capability sources --json
```
### Legacy profile repair
```bash
dsh-capability setup [--profile web] [--json]
```
This command only repairs an older profile where the package is already installed but missing from `dsh.profile.bundles`. Current DSH plugin commands maintain that list automatically. The repair command does not install packages or start DSH.
## Network reliability
- Network failures and HTTP `429`, `502`, `503`, and `504` responses are retried twice with exponential backoff.
- A valid `Retry-After` response header takes precedence over the default delay.
- Permanent HTTP responses such as `400`, `401`, `403`, and `404` are returned immediately without retrying.
- The three static Awesome List/Registry sources use a best-effort five-minute disk cache. GitHub keyword search remains live and is not cached.
- A source that still fails is preserved in `sourceErrors`; successful sources continue to contribute results.
The cache defaults to the operating system's temporary directory. Set `CAPABILITY_DISCOVERY_CACHE_DIR` to use a different directory. The variable intentionally does not use DSH's reserved `DSH_*` namespace, so it remains available to the Skill's CLI subprocess.
When DSH must use an HTTP proxy, make sure `HTTP_PROXY`/`HTTPS_PROXY` contain valid URLs. For Node.js fetch to honor those variables in supported Node.js releases, start DSH with `NODE_USE_ENV_PROXY=1`. Do not place proxy credentials in logs or issue reports.
## Ranking
v0.1 uses a deliberately simple, explainable score:
- task relevance has the largest weight;
- multiple independent sources add confidence;
- recent repository activity adds a freshness signal;
- stars add only a limited popularity signal;
- curated-list presence adds a small bonus.
The score is a recommendation aid, not a quality certificate.
## Capability types
| Type | v0.1 |
|---|---|
| DSH Plugin | Supported |
| Agent Skill | Supported |
| MCP Server | Strict metadata-evidence classification with `--type mcp` |
| Profile / Patch | Experimental classification |
| Agent / Orchestrator / Runtime / UI | Experimental classification |
## Data-source policy
No third-party repository data is bundled into this package. Public metadata is fetched at runtime from the configured sources; static catalogs may be retained in the five-minute temporary cache described above. See [docs/sources.md](./docs/sources.md).
If a source changes format or becomes unavailable, the other sources continue to work and the failure is surfaced to the caller.
## Project status
The current release is `v0.1.2`. It keeps the project focused on a small, auditable core without a database, hosted backend, account system, marketplace UI, or automatic installation workflow.
## Development
```bash
npm test
npm run check
npm pack --dry-run
```
The project uses Node's built-in test runner and has no runtime npm dependencies.
## License
Apache License 2.0. See [LICENSE](./LICENSE).
## Acknowledgements
This project queries or indexes public ecosystem metadata from community-maintained sources. Their data and repository contents remain governed by their respective terms. No source code from those projects is copied into this repository.
Install
dsh plugin --profile web add github:444136347/dsh-capability-discovery
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-capability-discovery from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.