dsh-web-search-ddg
aooyoo
Zero-token DuckDuckGo search provider for the DeepSeek Harness (DSH) web seam — local headless browser, no API key, no m…
PROJECT TOPICS
PROJECT README
简体中文 | English
一个 DeepSeek Harness 插件:在 设置 → 技能管理 页面展示 DSH 当前可用的 agent skill 目录。它直接读取宿主 ctx.skills 注册表,并合并各 agent preset 作用域下的技能,不需要手动维护列表。

.dsh / 项目 .agents / 自定义 / 用户 .dsh / 用户 .agents / 内置 / 运行时)、提供方、模型/用户调用策略,以及该技能出现在哪些 preset 作用域。whenToUse、文件路径、资源目录、metadata、完整的 SKILL.md 正文。--dsw-alias-* 主题变量;扁平卡片、1px 细边框、8–10px 圆角、无阴影。说明:当前版本是只读管理界面。DSH 的 skill 注册表由各提供方(主要是
dsh-skill-filesystem)拥有,注册表本身不提供删除/禁用已有技能的能力;因此本插件聚焦于浏览、检索、查看正文和定位文件。
从 GitHub 安装:
dsh plugin --profile web add github:zhangzheng25/dsh-skills-manager
或从本地目录安装:
dsh plugin --profile web add E:\path\to\dsh-skills-manager
dsh plugin 会在 profile 目录中转发给 pnpm 安装,并自动调和 dsh.profile.bundles;包内 dsh.bundle.patch(cordis.patch.yml)把插件行插入宿主组合,dsh.client.platform: "web" 让 web 外壳加载 client/bundle.js。
安装后重启 DSH,打开 设置 → 技能管理 即可看到页面。
┌────────────────────────── Host(Node.js)──────────────────────────┐
│ src/index.js │
│ • ctx.get('skills') ← 读取 DSH skill 注册表 │
│ • skills.snapshot({ cwd }) ← 读取全局层技能 │
│ • skills.snapshot({ cwd, scope }) ← 逐个 agent preset 读取并合并 │
│ (cwd 传 process.cwd(),让 filesystem 提供方扫描项目根; │
│ 用户/自定义/内置根始终会被扫描) │
│ • skills.get(name, { cwd, scope })← 按需加载完整 SKILL.md 正文 │
│ • webServer.register('/skills-manager/snapshot') │
│ • webServer.register('/skills-manager/skill?name=…') │
└─────────────────────────────────────────────────────────────────────┘
│ fetch('/skills-manager/snapshot')
│ fetch('/skills-manager/skill?name=…')
▼
┌────────────────────────── Client(浏览器)─────────────────────────┐
│ client/bundle.js — 手工构建的 web bundle,符合 client-modules 协议 │
│ (window.__ModuleLoader__.load) │
│ • slots.inject('settings.section') → 设置页「技能管理」 │
│ • 指标卡 + 搜索 + 过滤 + 技能列表 + 卡片内联详情面板 │
│ • 30 秒轮询、手动刷新、复制正文/路径 │
└─────────────────────────────────────────────────────────────────────┘
ctx.skills.snapshot({ cwd }) 返回全局层 SkillSummary[] 与 complete 标志;随后对每个可用 agent preset 调用 ctx.skills.snapshot({ cwd, scope }),按技能名合并去重。ctx.skills.get(name, { cwd }) 优先查全局层,查不到再按 preset 作用域逐个查找,返回 SkillDefinition(含 content / path / metadata / resourceBase)。cwd 取宿主进程的 process.cwd();dsh-skill-filesystem 会据此查找最近的 .git 祖先并扫描 <projectRoot>/.dsh/skills 与 <projectRoot>/.agents/skills,同时始终扫描用户/自定义/内置根。ctx.agentPresets.standingKeyFor(preset.id) 获取每个 preset 的 standing scope key,再以该 scope 读取技能目录,因此 web profile 中由 agent preset 挂载的 skill-filesystem 也能被看到。settings.section 注册项只支持 id / order / label,设置页左侧导航图标由 dsh-client-ui-settings-general 硬编码;非内置 id 统一显示齿轮图标。已调研 conversation.view 主界面 tab 方案,但当前版本选择只保留设置页入口,等待官方后续开放图标配置或更合适的扩展点。npm run check # node --check 两个文件(语法检查,无测试)
Client bundle 为手工编写以匹配 client-modules bundle 协议,无需构建步骤。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。