deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
DSH Web GUI 的普通对话插件 —— 不用再为聊个天多开一个 App。
dsh-chat 在 DeepSeek Harness(DSH)Web GUI 的侧边栏里加一个「对话」入口: 不绑工作区、不带工具,就是一个纯粹的对话面板。你在 DSH 里已经配置好的 任何 provider / model 直接可用,流式输出,多会话历史自动保存。
我就是不想要开这么多个 app。
日常工作中,大量场景其实只是"普通对话":问个问题、查个概念、写段文案、 润色一段文字……这些不需要工作区,不需要工具调用,更不需要为它们单独打开 一个 ChatGPT 或 Claude 的 App。
于是想法很简单:
ctx.llm 模型路由——DSH 里能选的
模型,这里就能聊。多一个插件,少一个 App。 这就是 dsh-chat 存在的全部理由。
ctx.llm,所有已导入
的 provider / model 自动可用,支持切换,无需额外适配器或 API key。delta(正文)、reasoning
(思考过程)、usage(用量)实时展示。--dsw-* design tokens,
明暗主题自动适配。cordis.patch.yml + node_modules 软链
挂载,不改 DSH 源码,升级 DSH 不受影响。插件是双面(dual-face)结构,由同一个 npm 包提供宿主端与浏览器端:
┌────────────────────────── 浏览器 (Web GUI) ──────────────────────────┐
│ lib/client.js 侧边栏「对话」入口 + React 对话面板 │
│ (随 /plugins/dsh-chat/client.js 加载) │
└───────────────▲──────────────────────────────────────────────────────┘
│ fetch /api/dsh-chat/*(NDJSON 流式)
┌───────────────┴──────────────────────────────────────────────────────┐
│ lib/index.js 宿主端 Cordis 插件 (exports ".") │
│ 注册 /api/dsh-chat 路由族 │
│ 直接调用 ctx.llm.stream() 驱动模型 │
│ 会话历史持久化到 ~/.dsh/dsh-chat.json │
└──────────────────────────────────────────────────────────────────────┘
lib/index.js):纯 ESM,运行时只依赖 Node 内置模块;
llm 与 webServer 来自 Cordis 注入列表。负责模型目录、会话存储 CRUD、
流式对话与持久化。lib/client.js):自包含的 React 面板,通过模块加载器
注册,DOM 级注入侧边栏入口;样式骑在 DSH design tokens 上。dsh-chat 装进 DSH 的 node_modules(或其软链目录);dsh.profile.bundles 中列出本包,或在 profile 自己的
cordis.patch.yml 中插入插件行:- insert:
- id: chat
name: 'dsh-chat'
仓库根目录的 cordis.patch.yml 就是标准 bundle patch,可作为 profile
bundle 层(dsh.bundle.patch 清单字段)叠加到 dsh-base 之上。
Enter 发送,Shift+Enter 换行;所有路由仅限本机回环访问(loopback-only),部署在局域网时不会被外部访问。
| 方法 | 路径 | 说明 |
|---|---|---|
GET |
/api/dsh-chat/models |
列出所有 provider 及其模型目录 |
GET |
/api/dsh-chat/conversations |
会话摘要列表 |
GET |
/api/dsh-chat/conversations?id= |
单个会话完整内容(含消息) |
POST |
/api/dsh-chat/conversations |
新建会话(可选 title) |
PATCH |
/api/dsh-chat/conversations?id= |
重命名会话(title) |
DELETE |
/api/dsh-chat/conversations?id= |
删除会话 |
POST |
/api/dsh-chat/stream |
流式对话(NDJSON 帧:meta / delta / reasoning / usage / done / error) |
~/.dsh/dsh-chat.json(0600 权限,
tmp + rename 原子写入);列表接口返回的是不含消息的摘要投影。localStorage
(dsh-chat.model、dsh-chat.titleModel)。.corrupt-<时间戳> 后从空会话开始,绝不静默覆盖原数据。/api/dsh-chat/* 路由都有 loopback trust fence:校验远端地址、
Host / Origin,仅允许本机回环访问,LAN 暴露的 DSH 部署不会把对话接口
和模型输出暴露到局域网。http:、https:、
mailto:、锚点与相对路径,javascript: 等危险协议一律拒绝。dsh-chat/
├── lib/
│ ├── index.js # 宿主端:路由族 + ctx.llm 流式 + 会话存储(~508 行)
│ └── client.js # 浏览器端:侧边栏入口 + React 对话面板(~1150 行)
├── cordis.patch.yml # bundle patch:向 profile 注册插件行
├── package.json # 双面导出:exports "."(宿主)/ "./client"(浏览器)
└── README.md
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。