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
DeepSeek Harness 的辩论插件:/debate 人工命令发起一场正反对抗辩论,双方由立场锁定的 subagent 逐轮交锋,可选五段式中立评审;Web 端为每场辩论渲染专属卡片。
前提:宿主 profile 的 bundle 组合提供全部 peer 依赖(@deepseek-ai/dsh-base 即可覆盖)。
# 在 deepseek-harness checkout(或任意 dsh 安装位置)内
pnpm dsh plugin --profile debate add /path/to/dsh-debate-plugin
pnpm dsh --profile debate --dump-config # 应出现 "# == dsh-debate-plugin" 配置层
pnpm build 后产物立即生效,无需重新安装prepare 脚本(tsdown 构建 lib/index.js 与 lib/client.js),devDependencies 随安装就位从命令菜单选择 /debate(或输入 /debate <辩题> 后发送):
/debate [--rounds N] [--no-judge] <辩题>
--rounds N 逻辑轮数(每轮正反各一次发言),2-12,默认 3
--no-judge 跳过评审环节
示例:
/debate 人工智能将取代程序员
/debate --rounds 2 --no-judge 远程办公利大于弊
运行中 Web 卡片显示"进行中"并每 1 秒轮询增量;辩手的本地 subagent 输出会以流式文本展示,并通过 MarkdownText 渲染 Markdown。完成后展示辩题、轮次流(正方 / 反方 · 开篇立论 / 驳论 / 结辩)与评审面板。运行中的辩论可从卡片中止;失败时记录错误并以失败态展示。
schemastery 字段(写入 profile 配置):
| 字段 | 类型 | 默认 | 说明 |
|---|---|---|---|
provider |
string | spawn |
正反辩手与评审 subagent 使用的 provider 名 |
dataDir |
string | ~/.dsh-debate-plugin/debates.jsonl |
辩论记录 JSONL 文件路径 |
首版走完全独立路线(B 路线):外部插件的自定义 session 事件尚无法进入 harness 的持久事件词汇表,因此辩论数据不落会话日志,全部住在插件自己的存储里。
graph LR
U["/debate 命令"] --> C["command.ts 解析"]
C --> E["engine.ts DebateService"]
E --> S1["subagent 正方"]
E --> S2["subagent 反方"]
E --> S3["subagent 评审"]
E --> ST["store.ts JSONL last-wins"]
C -->|admission CommandResult| SL["session log command/run + command/done"]
W["client DebateCard"] -->|RPC getByCommand| E
SL -->|CommandNode fold| W
lib/index.js):手动解析参数并立即 admission → 后台逐轮 ctx.subagents.start;本地子会话的 assistant/chunk / assistant/message 事件折叠为节流的 live 快照,写入 JSONL。DebateService extends TypertRemoteService,暴露 list / get / getByCommand 读方法和 cancel 控制方法lib/client.js):手写 Remote 贡献(全严格 zod codec)经 $mount 挂载,嵌套 consumer plugin(inject remote.debate)认领 conversation.chat.commandview slot 的 debate key,把通用命令卡升级为辩论卡;轮询传输失败时保留最后快照window.__ModuleLoader__.load 工厂包裹、平台模块 external(冻结模块表)、CSS Modules 经 lightningcss 内联并自注入 <style data-plugin>/debate 才能看到卡片;回放历史会话时卡片按 commandId 重新拉取记录MISSING_CREDENTIAL 退出;web 模式凭证惰性校验,辩论在第一个辩手 subagent 处失败并落失败记录@deepseek-ai/dsh-* 发布不完整(web-app 依赖链 404):开发联调需本地 checkout(见下节);运行时 peer 一律由宿主 profile 提供--rounds 被 clamp 到 [2, 12];中止经 abort 信号传播,已完成轮次保留在记录里pnpm typecheck # scripts/patch-dts.mjs 物化 @deepseek-ai/* 类型 + tsc
pnpm test # vitest:engine / store / prompts / command / client 五组
pnpm build # tsdown:lib/index.js + lib/client.js
scripts/patch-dts.mjs 从同级目录的 deepseek-harness checkout 把消费到的 @deepseek-ai/* 包物化进 node_modules(声明文件里的 .ts 相对后缀重写为 .js);无 checkout 时安静跳过,外部贡献者可正常 install/build@deepseek-ai/*(pnpm-workspace.yaml 里 autoInstallPeers: false)pnpm dsh plugin --profile debate add <本仓库路径> 后,在 checkout 里 pnpm dsh --profile debate(web,默认 http://127.0.0.1:3080)或 headless 一次性任务MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。