chore: validate the live catalog, and stop committing a copy of it (#545) (#557)

* chore: validate the live catalog, and stop committing a copy of it (#545)

@Icstick asked why `data/registry-snapshot.json` was eleven days behind
the catalog and how to request a refresh. The answer turned out to be
that nothing depends on it being fresh, and that the file's main effect
was to mislead.

What it was not:

- Not what the market reads. The bundled fallback was removed on purpose
  (see loadRegistry: for a catalog, stale is not a degraded answer, it is
  a wrong one). A build-site.yml comment still called it "the plugin's
  runtime fallback"; that was left over.
- Not shipped. `data/` is not in package.json `files`.
- Not what the site serves. The site build downloads its own copy into a
  checkout it throws away.

What it was: a 2.1MB file that gated merges on an 11-day-old copy of data
this repository does not own — 2452 entries against 3408 live — while
looking enough like the source of truth that people tried to add plugins
to it. The CI guard refusing hand edits exists because that had already
happened.

So the gate now reads what users actually get: validate-registry fetches
the live catalog, prefers a local file when one is present (offline runs
still work by dropping one in), and SKIPS with a notice when the origin
is unreachable — failing unrelated PRs on someone else's outage is how a
gate gets ignored.

The guard stays, retargeted: adding the file back is now the mistake it
was always trying to prevent.

One test read the snapshot as a corpus, cross-checking pluginSlug against
the site builder's slugOf so two plugins can never share a comment
thread. It now reads a committed corpus of every URL SHAPE the catalog
publishes — 108 of them across 3408 entries, sampled with real URLs, 24KB
instead of 2.1MB. Whether the catalog only ever publishes those shapes is
gated where it belongs: against the live catalog, by validate-registry's
E5.

@Icstick's three plugins were already visible in the market; verified
against the catalog package the market actually reads.

* ci: let the catalog-copy guard tell an addition from a removal

The guard fired on the PR that deletes the file it was written to
protect: it matched any diff touching that path, and a removal is a diff.
--diff-filter=AM narrows it to what it actually means — adding the file
back, or editing it in place.
This commit is contained in:
fkysly
2026-09-08 23:16:10 +08:00
committed by GitHub
parent 1664caec99
commit 88c8ce33ad
7 changed files with 422 additions and 41165 deletions
+5 -4
View File
@@ -41,10 +41,11 @@ jobs:
node-version: 24
- run: npm install
# Both snapshots come from awesome-dsh-plugin, which owns the list. The
# registry copy in the repo is the plugin's runtime fallback and is
# deliberately left alone by anything that commits; here it is only a
# build input, refreshed in a checkout that is thrown away.
# Both come from awesome-dsh-plugin, which owns the list, and both are
# build inputs only — fetched into a checkout that is thrown away and
# never committed. The market itself reads the live catalog; the
# bundled fallback it used to have was removed on purpose, because for
# a catalog stale is not a degraded answer but a wrong one.
- name: Fetch catalog
run: |
curl -sfL --retry 3 --retry-delay 5 \
+8 -4
View File
@@ -21,16 +21,20 @@ jobs:
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 0 }
- name: Refuse a hand-edited catalog snapshot
- name: Refuse a committed catalog copy
env:
BASE: ${{ github.event.pull_request.base.sha }}
HEAD: ${{ github.event.pull_request.head.sha }}
run: |
if git diff --name-only "$BASE" "$HEAD" | grep -qx 'data/registry-snapshot.json'; then
echo "::error file=data/registry-snapshot.json::This file is a snapshot downloaded from awesome-dsh-plugin.com, not the plugin catalog. An entry added here is overwritten by the next refresh (Build site runs daily), so the plugin would never show up in the market. Add it to https://github.com/awesome-dsh-plugin/awesome-dsh-plugin instead — the snapshot then picks it up on its own. Genuinely refreshing the snapshot? Label the PR 'snapshot-refresh'."
# --diff-filter=AM: adding or editing the file is the mistake.
# Removing it is not, and a guard that cannot tell those apart
# blocks its own retirement — which is how this one first fired,
# on the PR deleting the file it was written to protect.
if git diff --name-only --diff-filter=AM "$BASE" "$HEAD" | grep -qx 'data/registry-snapshot.json'; then
echo "::error file=data/registry-snapshot.json::This repository does not carry a copy of the plugin catalog any more (#545). The market reads the live catalog, the site build downloads its own, and the merge gate validates the live one — so a file added here is read by nothing and goes stale immediately, while looking enough like the source of truth to mislead the next person. To list a plugin, add it to https://github.com/awesome-dsh-plugin/awesome-dsh-plugin."
exit 1
fi
echo "snapshot untouched"
echo "no committed catalog copy"
check:
strategy:
+5
View File
@@ -9,3 +9,8 @@ data/readmes-snapshot.json
# Generated when a local build enables sourcemaps; never committed (#533).
client/*.map
# Catalog copies: downloaded when needed, never committed (#545). The site
# build fetches its own into a throwaway checkout, and the market reads the
# live catalog.
data/registry-snapshot.json
File diff suppressed because it is too large Load Diff
+52 -14
View File
@@ -2,9 +2,9 @@
/**
* Registry data gate — P1-8 in IMPROVEMENT-PLAN.md ("目录数据治理").
*
* Offline, dependency-free validation of data/registry-snapshot.json, the
* curated plugin catalog the market serves. It catches the defects that would
* otherwise reach users as a broken install or an ambiguous entry:
* Dependency-free validation of the curated plugin catalog the market serves.
* It catches the defects that would otherwise reach users as a broken install
* or an ambiguous entry:
*
* E1 required string fields present and non-empty
* E2 description carries both non-empty "en" and "zh" (the market is bilingual)
@@ -32,7 +32,49 @@
import fs from 'node:fs'
import { fileURLToPath } from 'node:url'
const SNAPSHOT = fileURLToPath(new URL('../data/registry-snapshot.json', import.meta.url))
/**
* Where the catalog is read from, live first.
*
* It used to be a committed `data/registry-snapshot.json`, and that copy went
* eleven days stale without anyone noticing — because nothing depends on it
* being fresh: the site build downloads its own copy into a throwaway
* checkout, and the market has read the live catalog since the bundled
* fallback was deliberately removed (see loadRegistry: for a catalog, stale
* is not a degraded answer, it is a wrong one).
*
* So the only thing the committed file did was gate merges on an old copy of
* data this repository does not own, while looking enough like the source of
* truth that people tried to add plugins to it (#545 by @Icstick, and the
* CI guard that exists because it had happened before).
*
* Now the gate reads what users actually get. A local file still wins when
* present, so an offline run works by dropping one in.
*/
const CATALOG_URL = process.env.DSHM_REGISTRY_URL ?? 'https://awesome-dsh-plugin.com/plugins.json'
const LOCAL = fileURLToPath(new URL('../data/registry-snapshot.json', import.meta.url))
/** The catalog and where it came from, or null when neither source answers. */
async function loadCatalog() {
if (fs.existsSync(LOCAL)) {
try {
return { raw: JSON.parse(fs.readFileSync(LOCAL, 'utf8')), from: LOCAL }
} catch (e) {
console.error(`validate-registry: cannot read ${LOCAL}: ${e.message}`)
process.exit(1)
}
}
try {
const response = await fetch(CATALOG_URL, { signal: AbortSignal.timeout(30_000) })
if (!response.ok) throw new Error(`HTTP ${response.status}`)
return { raw: await response.json(), from: CATALOG_URL }
} catch (e) {
// Not a failure: an origin that cannot be reached has not said anything
// about the catalog, and failing every unrelated PR on someone else's
// outage would teach people to ignore this gate.
console.log(`validate-registry: skipped — ${CATALOG_URL} unreachable (${e.message})`)
return null
}
}
// npm package-name syntax (scoped or simple), lowercased per npm rules.
const NPM_NAME_RE = /^(?:@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/
@@ -64,17 +106,13 @@ function fail(errors, entry, code, msg) {
errors.push({ entry: entry && entry.name ? entry.name : '<unknown>', code, msg })
}
function main() {
async function main() {
const errors = []
const warnings = []
let raw
try {
raw = JSON.parse(fs.readFileSync(SNAPSHOT, 'utf8'))
} catch (e) {
console.error(`validate-registry: cannot read ${SNAPSHOT}: ${e.message}`)
process.exit(1)
}
const loaded = await loadCatalog()
if (loaded === null) return
const { raw, from } = loaded
const plugins = raw && raw.plugins
if (!Array.isArray(plugins)) {
@@ -256,7 +294,7 @@ function main() {
const stars0 = plugins.filter((p) => p.stars === 0).length
// Report
const rel = SNAPSHOT.replace(/\\/g, '/').replace(/.*dsh-market\//, 'dsh-market/')
const rel = from.replace(/\\/g, '/').replace(/.*dsh-market\//, 'dsh-market/')
console.log(`validate-registry: ${rel}`)
console.log(
` plugins: ${plugins.length} | categories: ${categories.size} | ` +
@@ -279,4 +317,4 @@ function main() {
console.log('\n registry ok ✓')
}
main()
await main()
+13 -3
View File
@@ -42,7 +42,7 @@ describe('pluginSlug', () => {
expect(pluginSlug('https://github.com/o/r/tree/master/p')).toBe(pluginSlug('https://github.com/o/r/tree/main/p'))
})
it('agrees with the site builder over the whole real catalog', () => {
it('agrees with the site builder over every URL shape the catalog publishes', () => {
// The builder is plain node ESM with side effects at import time, so its
// slugOf is lifted out by source rather than imported. If that function is
// reworded this test fails loudly, which is the point.
@@ -52,8 +52,18 @@ describe('pluginSlug', () => {
// eslint-disable-next-line no-new-func
const slugOf = new Function('p', body![1]!) as (p: { url: string }) => string
const snap = JSON.parse(readFileSync(fileURLToPath(new URL('data/registry-snapshot.json', root)), 'utf8'))
const plugins: { url: string }[] = snap.plugins ?? []
// A shape corpus rather than a copy of the catalog. The committed
// catalog snapshot this used to read was removed (#545): nothing else
// depended on it, it went eleven days stale without anyone noticing, and
// it looked enough like the source of truth that people tried to add
// plugins to it. What this test actually needs is every URL SHAPE that
// occurs, which is 108 of them across 3408 entries — sampled with real
// URLs so a shape nobody anticipated is still a real example, and small
// enough to read. Whether the live catalog only ever publishes these
// shapes is gated separately, against the live catalog, by
// scripts/validate-registry.mjs (E5).
const corpus = JSON.parse(readFileSync(fileURLToPath(new URL('tests/fixtures/catalog-url-shapes.json', root)), 'utf8')) as { urls: string[] }
const plugins: { url: string }[] = corpus.urls.map(url => ({ url }))
expect(plugins.length).toBeGreaterThan(100)
const disagree = plugins.filter(p => slugOf(p) !== pluginSlug(p.url)).map(p => p.url)
+339
View File
@@ -0,0 +1,339 @@
{
"note": "distinct URL shapes from the live catalog; see tests/client/comments.client.spec.ts",
"source": "https://awesome-dsh-plugin.com/plugins.json",
"captured": "2026-09-08",
"shapes": 108,
"urls": [
"https://github.com/00080000/dsh-project-memory",
"https://github.com/01Virex/dsh-status-rotator",
"https://github.com/01men/ybkk-AIOS",
"https://github.com/02Muller25/dsh-api-balance",
"https://github.com/030611/dsh-telemetry-redactor",
"https://github.com/030611/dsh-verification-receipt",
"https://github.com/030611/qiushi-dsh-evidence-audit",
"https://github.com/0QwQ0/dsh-discord-richpresence",
"https://github.com/0nt-one/dsh-neo-skin",
"https://github.com/0nt-one/dsh-voice-input",
"https://github.com/0xsline/dsh-spotlight",
"https://github.com/1010n111/dsh-about",
"https://github.com/1070296335-create/dph-taskboard",
"https://github.com/11zld22/dsh-model-info-fill",
"https://github.com/1264459640/dsh-trellis",
"https://github.com/1321928757/dsh-mysql",
"https://github.com/173787247/dsh-wsl-ssh-agent",
"https://github.com/1741505640/capmap-skills/tree/main/dsh-capmap-viz",
"https://github.com/1985899182/dsh-harness-chat-control",
"https://github.com/1HelloMan1/dsh-usage-dashboard-plus",
"https://github.com/1na-ko/dsh-hdc-bridge",
"https://github.com/2008924/dsh-progress-viz/tree/main/plugin",
"https://github.com/23swccp/dsh-undo/tree/master/packages/bundle-rollback",
"https://github.com/240xu/dsh-websearch",
"https://github.com/240xu/tech-lead-skill/tree/main/packages/dsh-tech-lead",
"https://github.com/263311487-ux/dsh-verify",
"https://github.com/2nd1st/dsh-plugin-open-app",
"https://github.com/314857493/dsh-vision/tree/main/packages/vision-route",
"https://github.com/314857493/dsh-vision/tree/main/packages/vision-tool",
"https://github.com/3361805598-gif/dsh-md-annotator",
"https://github.com/3361805598-gif/dsh-usage-analytics",
"https://github.com/398894496-arch/runtime36",
"https://github.com/534119219/dsh-messaging/tree/main/packages/messaging-core",
"https://github.com/777-Zen/dsh-capability-index",
"https://github.com/7dgroup-ai/dsh-skill-7d-code-reviewer",
"https://github.com/7dgroup-ai/dsh-skill-7d-git-commit",
"https://github.com/988hj7tczd-oss/dsh-asciinema",
"https://github.com/988hj7tczd-oss/dsh-dep-vuln-scan",
"https://github.com/988hj7tczd-oss/dsh-lsp-packs/tree/main/dsh-lsp-cpp",
"https://github.com/988hj7tczd-oss/dsh-lsp-packs/tree/main/dsh-lsp-csharp",
"https://github.com/988hj7tczd-oss/dsh-lsp-packs/tree/main/dsh-lsp-go",
"https://github.com/988hj7tczd-oss/dsh-lsp-packs/tree/main/dsh-lsp-java",
"https://github.com/988hj7tczd-oss/dsh-lsp-packs/tree/main/dsh-lsp-kotlin",
"https://github.com/988hj7tczd-oss/dsh-lsp-packs/tree/main/dsh-lsp-lua",
"https://github.com/988hj7tczd-oss/dsh-receipts",
"https://github.com/988hj7tczd-oss/harness-desktop/tree/main/plugins/harness-memory",
"https://github.com/988hj7tczd-oss/harness-github",
"https://github.com/ADWMC/helm-d/tree/main/packages/helmd",
"https://github.com/AI-Galaxy-GPU/dsh-sound",
"https://github.com/AKS1st/dock",
"https://github.com/AgentDebugX/AgentDebugX/tree/main/integrations/dsh-agentdebugx",
"https://github.com/Akimiya-z/codex-guard/tree/main/dsh",
"https://github.com/Alnita-M/dsh-Almost_Full_Access",
"https://github.com/AmethystLuna/logicprobe",
"https://github.com/Andiii208/gzhflow",
"https://github.com/Angel2518975237/deepseek-harness-hello-kitty-suite",
"https://github.com/AngelosZou/graphlint/tree/main/integrations/dsh",
"https://github.com/Ankali-Aylina/code-rag/tree/main/plugins/dsh-code-rag-index-panel",
"https://github.com/Anna-la/dsh-simplify",
"https://github.com/Asif2BD/JARVIS-Mission-Control-DeepSeek/tree/main/integrations/deepseek-harness/dsh-plugin-mission-control",
"https://github.com/Awesome-AI-Pedia/Awesome-DSH-Pet",
"https://github.com/Baiiduu/dsh-semgrep-sast/tree/main/packages/bundle",
"https://github.com/BigBlueBaby/codex2dsh",
"https://github.com/BillyChen123/qdd",
"https://github.com/BitDG/dsh-plugins/tree/main/plugins/music-player",
"https://github.com/BitDG/dsh-plugins/tree/main/plugins/reference-library",
"https://github.com/Blackman99/codsh/tree/main/packages/bundle",
"https://github.com/Blank-not-black/dsh-Remote/tree/main/packages/plugin",
"https://github.com/BolunHan/cc-monitor/tree/main/dsh-cc-monitor",
"https://github.com/CAI-MH/dsh-feishu-task-recorder",
"https://github.com/CH4ACKO3/dsh-render-engine/tree/main/packages/code-render",
"https://github.com/CHplus0/dsh-learning-mode/tree/main/plugin",
"https://github.com/CREAIT-nl/dsh-plugins/tree/main/gen-limit",
"https://github.com/CREAIT-nl/dsh-plugins/tree/main/hookkit",
"https://github.com/CREAIT-nl/dsh-plugins/tree/main/research-mode",
"https://github.com/CREAIT-nl/dsh-plugins/tree/main/tailnet-gateway",
"https://github.com/CREAIT-nl/dsh-plugins/tree/main/think-level",
"https://github.com/CREAIT-nl/dsh-plugins/tree/main/to-english",
"https://github.com/CREAIT-nl/dsh-plugins/tree/main/tool-disclosure",
"https://github.com/CREAIT-nl/dsh-plugins/tree/main/web-search-searxng",
"https://github.com/Ceelog/dsh-plugins/tree/main/src/plugins/dsh-plugin-scheduled-tasks",
"https://github.com/Ceelog/dsh-plugins/tree/main/src/plugins/dsh-plugin-setting-mcp",
"https://github.com/CeilCelia/dsh-eli-mode/tree/main/packages/eli-mode",
"https://github.com/Cerbur/clutch-dsh/tree/main/packages/clutch-dsh-fireworks",
"https://github.com/Cerbur/clutch-dsh/tree/main/packages/clutch-dsh-title",
"https://github.com/Cerbur/clutch-dsh/tree/main/packages/clutch-dsh-worktree",
"https://github.com/Ch0uHuaZ1/DeepSeek-Harness-Desktop/tree/main/packages/desktop-launcher-plugin",
"https://github.com/Cheeserackery/deepseek-time/tree/master/adapters/dsh",
"https://github.com/ChenYiming-aaa/dsh-ui-ux-pro-max",
"https://github.com/CheshireJCat/blender",
"https://github.com/Chu-Xin-r/wanjiqi-meme",
"https://github.com/Co-Engram/Co-Engram/tree/main/packages/dsh-plugin",
"https://github.com/Coprexist/AIsChat/tree/main/dsh-aischat",
"https://github.com/Crayonnan/dsh-math-modeling-skills-Gatecraft-",
"https://github.com/CypherNaught-0x/DSH-Subagent-Model-Router",
"https://github.com/DaLongggggg/dsh-skill-manager/tree/master/plugin",
"https://github.com/DamonKoy/dsh-plugins/tree/main/packages/dsh-approve-for-me",
"https://github.com/DamonKoy/dsh-plugins/tree/main/packages/dsh-mcp-client-v2",
"https://github.com/DamonKoy/dsh-plugins/tree/main/packages/dsh-secret-redactor",
"https://github.com/DamonKoy/dsh-plugins/tree/main/packages/dsh-system-proxy",
"https://github.com/DamonKoy/dsh-plugins/tree/main/packages/dsh-usage-cost",
"https://github.com/DamonKoy/dsh-web-ui/tree/main/packages/dsh-aionui-panel",
"https://github.com/DamonKoy/dsh-web-ui/tree/main/packages/dsh-git-graph",
"https://github.com/DamonKoy/dsh-web-ui/tree/main/packages/dsh-liangshen",
"https://github.com/DamonKoy/dsh-web-ui/tree/main/packages/dsh-live-stats",
"https://github.com/DamonKoy/dsh-web-ui/tree/main/packages/dsh-pet",
"https://github.com/DamonKoy/dsh-web-ui/tree/main/packages/dsh-remote-web-ui",
"https://github.com/DamonKoy/dsh-web-ui/tree/main/packages/dsh-ssh",
"https://github.com/DamonKoy/dsh-web-ui/tree/main/packages/dsh-task-board",
"https://github.com/DamonKoy/dsh-web-ui/tree/main/packages/dsh-tool-describe-image",
"https://github.com/DamonKoy/dsh-web-ui/tree/main/packages/dsh-web-ui-settings",
"https://github.com/Dayi-Z/memoripo",
"https://github.com/Devin-AXIS/deepseek-design/tree/main/packages/deepseek-idesign",
"https://github.com/Devin-AXIS/deepseek-design/tree/main/packages/deepseek-ivideo",
"https://github.com/Edge-HH/GrokBot_in_DeepseekHerness",
"https://github.com/EdwinDigital/dsh-web-search-microsoft-webiq",
"https://github.com/EthanYoQ/AI-Novel-Writer/tree/master/plugins/dsh-ai-novel-writer",
"https://github.com/EugeneVl/dsh_session_folders",
"https://github.com/Eve-146T/DSH-CODEX-SUBSCRIPTION-POOL",
"https://github.com/FTShare-Lab/dsh_kline",
"https://github.com/FishBottle7/opencode2dsh/tree/master/packages/plugin",
"https://github.com/Floating-Dreaming/dsh-minimax-usage/tree/main/trusted-plugin",
"https://github.com/GGBond2424648901/deep-whale-day-night-theme",
"https://github.com/GLFzr/dsh-drop-file-to-path",
"https://github.com/GOU-GEE/deepseek-vision/tree/main/plugins/dsh-plugin-deepseek-vision",
"https://github.com/GuoMonth/dsh-deskwork/tree/senguo-query-v0.1.0-alpha.1/plugins/senguo-query",
"https://github.com/Hilbert-beinghappy/seektty",
"https://github.com/Huang-zhishi/dsh-plugin-call-trace",
"https://github.com/Hudson-Junior-Wang/dsh-search-switcher",
"https://github.com/Islulua/dsh-code-navigator/tree/main/packages/code-navigator",
"https://github.com/J0ss077/dsh-always-require-tools-approval",
"https://github.com/JW53222/faultseed/tree/main/adapters/dsh",
"https://github.com/Jayden-X-L/forkprobe",
"https://github.com/Jesse-njx/dsh-cowork/tree/main/packages/dsh",
"https://github.com/Jesse-njx/dsh-plugin-manager/tree/main/packages/cli",
"https://github.com/JochenYang/dsh-remote/tree/main/dsh-remote",
"https://github.com/Johnny-xuan/dsh-paste-to-path",
"https://github.com/Jonah-Wu23/dsh-gungnir/tree/main/packages/dsh-plugin",
"https://github.com/Kevin-McIsaac/dsh-workspace-git-badge/tree/main/dsh-git-badge",
"https://github.com/KongChengZhi/dsh-pixel-studio/tree/main/dsh-cli-anything-aseprite",
"https://github.com/KongFangXun/sofagent/tree/main/engine/dsh-plugins/cordis-plugin-sofagent-audit",
"https://github.com/LL-cmyk-so/dsh-balance-widget",
"https://github.com/Lenonss/DSH_VsCodeMode",
"https://github.com/Leo-Ayh-Oday/dsh-orcana/tree/main/packages/dsh-bundle",
"https://github.com/Liu-Bot24/dsh-trace-insight/tree/main/packages/standard",
"https://github.com/Liu-ZA-81/dsh-theme-firefly",
"https://github.com/LoveDoLove/Project-Memory-Agent/tree/main/dsh-plugin",
"https://github.com/Lum1104/dsh-browser/tree/main/packages/browser/bridge-browser",
"https://github.com/MEMZ-JZY/DSH-Claude-Style-Reasoning-Slider",
"https://github.com/Mengshang-spec/dsh-third-party-api-balance-wallet",
"https://github.com/MoonCoder-HAPPY/SpecWorkflow",
"https://github.com/N9-Developer-Empowerment/DSH-Vibeify/tree/main/plugins/dsh-vibeify-experience",
"https://github.com/NattoCB/dsh-web-search-session-follow",
"https://github.com/Neumannzc/dsh-archive-manager/tree/main/plugin",
"https://github.com/Nicercz007-cloud/schedule",
"https://github.com/No-PRM/dsh-explorer/tree/main/dsh-plugins/dsh-explorer",
"https://github.com/Octo-o-o-o/dsh-plugin-deploy",
"https://github.com/Q00/ouroboros/tree/main/integrations/dsh-plugin",
"https://github.com/Qinling-Melon-Farmers/dsh-memoir",
"https://github.com/ReachGa0/dsh-desktop/tree/main/plugin",
"https://github.com/Ricketts-Guo/dsh-off-peak-message/tree/main/dsh-offpeak-send",
"https://github.com/SIMON-WORLD/dsh-toolkit/tree/main/packages/dsh-at-file",
"https://github.com/SISCHOI/daruma/tree/main/packages/dsh-daruma",
"https://github.com/Signalight/codex-to-dsh-pet/tree/main/packages/dsh-codex-pet",
"https://github.com/Small-tailqwq/dsh-deep-whale/tree/main/maid-atelier",
"https://github.com/SoDaZilla-zzz/dsh-liquid-glass-balance-card",
"https://github.com/T-Markus-Liang/dsh-webmcp",
"https://github.com/TZHR-invest/dsh-plugins/tree/main/packages/dsh-lan-access",
"https://github.com/TZHR-invest/dsh-plugins/tree/main/packages/dsh-mobile-ui",
"https://github.com/TZHR-invest/dsh-plugins/tree/main/packages/dsh-vision",
"https://github.com/TZHR-invest/dsh-plugins/tree/main/packages/dsh-web-search-metaso",
"https://github.com/Tencent/BrowserSkill/tree/main/packages/dsh-plugin-browserskill",
"https://github.com/Tencent/WeKnora/tree/main/packages/dsh-weknora",
"https://github.com/TianYa-DAO/dsh-wallpaper-engine/tree/main/packages/dsh-wallpaper-engine",
"https://github.com/Tianbuyu-wwx/dsh-hermes-link/tree/main/packages/dsh-hermes-link",
"https://github.com/Tlyer233/dsh-vscode-review/tree/main/dsh-review",
"https://github.com/Top-Celestial-Company-Ltd/dsh-dros-vajraclaw",
"https://github.com/TryDing-T/dsh-Plugin--ChineseChess",
"https://github.com/V-dev-388/dsh-usage-meter",
"https://github.com/Vesna-Strivozha/DSH-LLM-wiki-plugin/tree/main/packages/dsh-llm-wiki",
"https://github.com/Vladimir-Human/humanizer-ru/tree/main/dsh",
"https://github.com/Vladimir-Human/ru-marketplace-mcp/tree/main/dsh",
"https://github.com/WMXS-A/dsh-utility-plugins/tree/main/packages/dsh-skill-cheatsheet",
"https://github.com/Winter-And-You-Gone/dsh-deep-verbs",
"https://github.com/Winter-And-You-Gone/dsh-turn-fold",
"https://github.com/Yang-wudi/dsh-kun-like-pet/tree/main/packages/kunpet-dsh",
"https://github.com/Yisan0429/dsh-itranslation/tree/main/packages/itranslation/bundle",
"https://github.com/Yu-tao-Li/dsh-computer-use-win",
"https://github.com/Yu-tao-Li/dsh-read-image-view",
"https://github.com/Yu-tao-Li/dsh-reference-checker",
"https://github.com/ZiFan1117/bazidiy/tree/main/packages/ontology",
"https://github.com/ZichengGurrr/dsh-window/tree/main/kit",
"https://github.com/ZichengGurrr/dsh-window/tree/main/plugin",
"https://github.com/ZihaoVistonWang/Stata-AI-Skill/tree/main/dsh-plugin",
"https://github.com/agentscope-ai/ReMe/tree/main/typescript",
"https://github.com/ai-fu-cn/dsh-plugin-memos-code-retrospect",
"https://github.com/alexfengrui/dsh-client-ui-skin-real-madrid",
"https://github.com/alvinunreal/openpets/tree/main/packages/dsh",
"https://github.com/ankye/dsh_use_browser/tree/main/packages/use-browser",
"https://github.com/ayahunter/dsh-trail/tree/main/packages/bundle",
"https://github.com/balue8246-maker/dsDragPasteALL",
"https://github.com/baosfeng/my-dsh-plugins/tree/main/plugins/dsh-think-zh-expand",
"https://github.com/beiyege-01/dsh-voice-ai-girlfriend-plugin",
"https://github.com/boe1900/owndsh/tree/main/plugin/packages/bundle",
"https://github.com/bpc-oss/chrome-faithful/tree/main/packages/dsh-plugin-chrome-faithful",
"https://github.com/btspoony/mstar-harness/tree/main/packages/dsh",
"https://github.com/cerebrixos-org/tuning-engines-cli/tree/main/packages/tuningengines-dsh-plugin",
"https://github.com/chenxiachan/thoughtdag/tree/main/dsh",
"https://github.com/chumingjun/dsh-harness-one/tree/main/dsh-plugins/dsh-ccpg-one",
"https://github.com/code-newbie-1/dsh-wallpaper",
"https://github.com/crTnT/dsh-plugin-suite/tree/main/dsh-plugin-center",
"https://github.com/crTnT/dsh-plugin-suite/tree/main/dsh-plugin-updater",
"https://github.com/cyrus123456/dsh-johari-cognition-quadrant-dialog-composer",
"https://github.com/daixin315/dsh-xiaoshuang/tree/master/packages/plugin",
"https://github.com/dff652/deepseek-harness-community-plugins/tree/main/packages/dsh-agent-mail",
"https://github.com/dff652/deepseek-harness-community-plugins/tree/main/packages/dsh-ai-asset-hub",
"https://github.com/dingminhua/dsh-sub-cli/tree/main/plugin",
"https://github.com/dingminhua/dsh-subagent-default-model/tree/main/plugin",
"https://github.com/dsboylw/LazyNoobsCockloft/tree/main/dsh-session-notes",
"https://github.com/dsh-blue/blue/tree/master/packages/bundle/blue",
"https://github.com/du-u-uck/DSH-Transparent-UI-Plugin",
"https://github.com/duhu2000/dsh-form-fill-agent/tree/main/packages/dsh-form-fill-agent",
"https://github.com/fxylabs/superself/tree/main/apps/dsh-plugin",
"https://github.com/geml-spec/geml/tree/main/integrations/dsh-plugin",
"https://github.com/guihui2538/Every-token-you-spend-comes-back-as-a-waifu.",
"https://github.com/haoyu-qi/dsh-zentao/tree/main/packages/bundle/zentao",
"https://github.com/hccccc01333/dsh-excel-chat/tree/master/bundle",
"https://github.com/helllo-shijie/motor-hospital-plugins/tree/main/plugins/motor-case-kb",
"https://github.com/helllo-shijie/motor-hospital-plugins/tree/main/plugins/motor-cost-quote",
"https://github.com/huangruiteng/loopx/tree/main/packages/dsh-loopx-plugin",
"https://github.com/hust-open-atom-club/oh-dsh",
"https://github.com/hyzyn/dsh-plugin-kit/tree/main/packages/codegraph",
"https://github.com/hyzyn/dsh-plugin-kit/tree/main/packages/profile",
"https://github.com/hyzyn/dsh-plugin-kit/tree/main/packages/rss",
"https://github.com/hyzyn/dsh-plugin-kit/tree/main/packages/search",
"https://github.com/hyzyn/dsh-plugin-kit/tree/main/packages/tty",
"https://github.com/icetomoyo/dsh_workflow",
"https://github.com/icodesign/orbis/tree/main/packages/orbis-remote-dsh",
"https://github.com/ijry/DeepSeek-Harness-Desktop-Ultra/tree/main/plugins/dsh-plugin-canvas",
"https://github.com/ijry/DeepSeek-Harness-Desktop-Ultra/tree/main/plugins/dsh-plugin-mobile-bridge",
"https://github.com/ijry/DeepSeek-Harness-Desktop-Ultra/tree/main/plugins/dsh-plugin-repopanel",
"https://github.com/ijry/DeepSeek-Harness-Desktop-Ultra/tree/main/plugins/dsh-plugin-taskboard",
"https://github.com/inclusionAI/Avernet/tree/dev/src/bcs/crates/plugins/deepseek-harness-channel-bcn",
"https://github.com/iqingyoung/search2chart-mcp/tree/main/dsh",
"https://github.com/jiang12345-code/dsh-multi-role-debate/tree/main/dsh-multi-role-debate",
"https://github.com/jinguanghai/deepseek-harness-forge-plugins/tree/main/plugins/evidence-first",
"https://github.com/jinguanghai/deepseek-harness-forge-plugins/tree/main/plugins/forge-gates",
"https://github.com/jinguanghai/deepseek-harness-forge-plugins/tree/main/plugins/forge-memory",
"https://github.com/jinguanghai/deepseek-harness-forge-plugins/tree/main/plugins/forge-tcm",
"https://github.com/jyao-SUSE-power-group/dsh-provider-rate-limit",
"https://github.com/kaiwangleo/xiwen/tree/master/plugins/dsh-xiwen",
"https://github.com/kanchengw/dsh-assembly.resume",
"https://github.com/kaziii/dsh-github-connector/tree/main/packages/github/github",
"https://github.com/kevenliu3/dhs-plugins/tree/main/dsh-session-monitor",
"https://github.com/kongshan-zhuyu/dsh-balance-quota/tree/main/packages/dsh-balance",
"https://github.com/kouyichi/dsh-plugins/tree/main/dsh-a2a",
"https://github.com/kouyichi/dsh-plugins/tree/main/dsh-guard",
"https://github.com/kouyichi/dsh-plugins/tree/main/dsh-learn",
"https://github.com/kouyichi/dsh-plugins/tree/main/dsh-meter",
"https://github.com/kp-z/dsh-dev-git-graph/tree/main/packages/dsh-dev-git-graph",
"https://github.com/linhay/harmony-next.skills",
"https://github.com/lkh081231/screenshot-feedback-hook-mcp/tree/main/dsh-plugin",
"https://github.com/lsz-asd/dsh-chameleon/tree/main/bundle",
"https://github.com/luokai-demo/dsh-plugins/tree/main/plugins/dsh-balance-plugin",
"https://github.com/lxp731/agents-plugins/tree/main/dsh-service-control",
"https://github.com/lxp731/agents-plugins/tree/main/task-complete-notify-for-dsh",
"https://github.com/magian1127/deepseek-harness-zh_pro",
"https://github.com/magian1127/deepseek-harness-zhipu_plan_tools",
"https://github.com/margbug01/dsh-ma-plugins/tree/main/dsh-handoff",
"https://github.com/margbug01/dsh-ma-plugins/tree/main/dsh-librarian",
"https://github.com/margbug01/dsh-ma-plugins/tree/main/dsh-oracle",
"https://github.com/miuzel/dsh-graph/tree/main/dsh-graph-host",
"https://github.com/moonquake2004/dsh-doctor/tree/main/plugin",
"https://github.com/nickhelion/dsh-plugins/tree/main/packages/qwen-token-plan-cn-responses",
"https://github.com/nyantused-cpun/folio/tree/main/plugins/folio-events",
"https://github.com/nyantused-cpun/folio/tree/main/plugins/folio-tools",
"https://github.com/oh-my-engine/dsh-plugin-oh-my-engine",
"https://github.com/openma-ai/Martty/tree/main/npm",
"https://github.com/pavangupta352/stalegreen/tree/main/dsh-plugin-stalegreen",
"https://github.com/pgmi-builds/better-dsh/tree/main/dashr",
"https://github.com/ph4310822/dsh-edex-jarvis-ui/tree/main/packages/bundle",
"https://github.com/ph4310822/dsh-edex-xry-ui/tree/main/packages/bundle",
"https://github.com/pingg02/dsh-plugins/tree/main/dsh-desktop-entry",
"https://github.com/pwping/moyu_games",
"https://github.com/qixin-ai-data/dsh-qixin-insight-mcp-oauth",
"https://github.com/que3sui/dsh-darwin/tree/main/packages/forge",
"https://github.com/s3yf1337/dsh-desktop/tree/main/bundle",
"https://github.com/sakthiveltofficial/dsh-git-plugins/tree/main/packages/git/bundle",
"https://github.com/sensedeal/cue-skills/tree/main/dsh/cue-omni-reader-guard",
"https://github.com/severin-ye/uagent-sync/tree/master/packages/dsh",
"https://github.com/shendeguize/AgentSideCar/tree/main/plugin",
"https://github.com/shinjiyu/holdem/tree/main/dsh-plugin",
"https://github.com/songoao25/dsh-bottom-info-bar/tree/main/plugin",
"https://github.com/stephenlzc/dsh-swarm-panel/tree/main/dsh-swarm-plugin",
"https://github.com/strukto-ai/mirage/tree/main/typescript/packages/dsh",
"https://github.com/sunzhentao/dsh--prompt--enhance",
"https://github.com/taptap/instant-games-open-mcp/tree/main/packages/dsh-maker",
"https://github.com/text2future/flowix/tree/main/dsh-flowix-memory",
"https://github.com/tinqiao-oss/clawtouch-mcp/tree/master/adapters/dsh/plugin",
"https://github.com/tinqiao-oss/engramory/tree/master/adapters/dsh/plugin",
"https://github.com/tnnevol/fn-os-apps/tree/main/plugins/dsh-codex-auth-plugin",
"https://github.com/tong-io/tongflow/tree/main/packages/dsh-tongflow",
"https://github.com/tt-a1i/archify/tree/main/integrations/deepseek-harness",
"https://github.com/v587d/capital-generation/tree/master/dsh-plugin",
"https://github.com/vectorize-io/hindsight/tree/main/hindsight-integrations/coding-agents",
"https://github.com/vegetable-kun/DSH_Plugin_Taffy",
"https://github.com/vlln/plugin-registry/tree/main/packages/plugin/console",
"https://github.com/volcengine/OpenViking/tree/main/examples/dsh-memory-plugin",
"https://github.com/volcengine/ark-cli/tree/main/dsh-plugins/ark-managed-agents",
"https://github.com/volcengine/ark-cli/tree/main/dsh-plugins/ark-plan-api",
"https://github.com/whyihaveyou/dsh-suite/tree/main/packages/plugins/plugin-manager",
"https://github.com/whyihaveyou/dsh-suite/tree/main/packages/plugins/plugin-notify",
"https://github.com/whyihaveyou/dsh-suite/tree/main/packages/plugins/plugin-session-export",
"https://github.com/whyihaveyou/dsh-suite/tree/main/packages/plugins/plugin-team-board",
"https://github.com/wikkd/dsh-remote-access-web/tree/main/packages/bundle/remote-access-web",
"https://github.com/william-jin-cmu/dsh-evolve",
"https://github.com/wingsky-1/dsh-plugin-hub/tree/main/packages/dsh-gzip",
"https://github.com/wingsky-1/dsh-plugin-hub/tree/main/packages/dsh-notifier",
"https://github.com/wingsky-1/dsh-plugin-hub/tree/main/packages/dsh-web-file-preview",
"https://github.com/wulun811/LiuHe/tree/master/malong/dsh/bundle",
"https://github.com/wxj783428795/dsh-plugins/tree/main/dsh-theme-black-hole",
"https://github.com/xi-zhao/OpenQuantum/tree/main/packages/openquantum-web-branding",
"https://github.com/xinchen03/minta/tree/main/dsh-plugin",
"https://github.com/yu-wenchao/dsh-opencode-free-models/tree/master/plugin/dsh-opencode-free-models",
"https://github.com/yunxiiQwQ/dsh-maid-whale-webUI/tree/main/maid-whale-webui",
"https://github.com/zdx8637-gitdog/dshmobile/tree/main/plugins",
"https://github.com/zhaoolee/notes/tree/main/dsh-plugin",
"https://github.com/zhu1090093659/dsh-web/tree/main/packages/dsh-remote-web-ui",
"https://github.com/zjsthmjialin/commercial-ui-ux-codex-skill/tree/main/dsh-commercial-ui-ux",
"https://github.com/zjsthmjialin/inspiration-deck-workshop/tree/master/dsh-inspiration-deck-workshop",
"https://github.com/zjsthmjialin/pdf-background-gray-codex-skill/tree/main/dsh-pdf-background-gray"
]
}