🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

界面组件库 seekbuddy/dsh-ui

DeepSeek Harness
seekbuddy26 天前有提交已提供中文文档扫描:含敏感能力

补齐 DSH 缺失的卡片、分页与日期选择等 React 组件

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/10 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add seekbuddy/dsh-ui
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]!
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
数据截至 2026/11/05·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 26 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

⚠︎ 实装验证未通过(unknown · 2026/11/5) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)
查看扫描证据(共 28 处,展示前 19 条)
  • 读取本地文件
    build/build.mjs:17
    const typescriptBin = JSON.parse(readFileSync(typescriptPackagePath, 'utf8')).bin?.tsc
  • 读取本地文件
    build/build.mjs:23
    for (const entry of readdirSync(dir)) {
  • 读取本地文件
    build/build.mjs:25
    if (statSync(absolute).isDirectory()) out.push(...walk(absolute, base))
  • 读取本地文件
    build/build.mjs:35
    code: readFileSync(absolute),
  • 写入本地文件
    build/build.mjs:53
    mkdirSync(path.dirname(output), { recursive: true })
  • 写入本地文件
    build/build.mjs:54
    writeFileSync(output, moduleText)
  • 读取本地文件
    build/build.mjs:68
    const css = order.map((file) => readFileSync(path.join(srcDir, 'styles', file), 'utf8')).join('\n')
  • 写入本地文件
    build/build.mjs:69
    writeFileSync(path.join(distDir, 'tokens.css'), css)
  • 写入本地文件
    build/build.mjs:70
    writeFileSync(path.join(distDir, 'tokens.css.d.ts'), 'declare const css: string\nexport default css\n')
  • 读取本地文件
    build/build.mjs:76
    let css = readFileSync(source, 'utf8')
  • 写入本地文件
    build/build.mjs:83
    mkdirSync(outputFonts, { recursive: true })
  • 写入本地文件
    build/build.mjs:84
    for (const font of new Set(fonts)) copyFileSync(path.join(sourceFonts, font), path.join(outputFonts, font))
  • 删除本地文件递归
    build/build.mjs:219
    rmSync(distDir, { recursive: true, force: true })
  • 删除本地文件递归
    build/build.mjs:220
    rmSync(generatedDir, { recursive: true, force: true })
  • 执行外部命令来自配置/变量
    build/build.mjs:292
    execFileSync(process.execPath, [tscPath, '-p', 'tsconfig.build.json'], {
  • 删除本地文件递归
    build/build.mjs:304
    rmSync(generatedDir, { recursive: true, force: true })
  • 写入剪贴板
    src/clipboard.ts:11
    export async function writeClipboard(text: string): Promise<boolean> {
  • 写入剪贴板
    src/clipboard.ts:17
    await navigator.clipboard.writeText(text)
  • 写入剪贴板
    src/use-copy-feedback.ts:24
    void writeClipboard(text).then((ok) => {
扫描于 2026/11/4(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-util-code-language
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 补齐卡片分页组件
  • 提供日期时间选择器
  • 共用统一设计变量

README

由 DeepSeek 最新模型翻译生成
@seekbuddy/dsh-ui 基于 DeepSeek Harness(DSH)Web UI 设计系统的 React 组件库,用来搭建围绕 DSH 的产品页面:包含 DSH 的基础组件(--dsw- 设计 token、明暗主题、基础控件、图标、Markdown 与工具输出渲染器),以及 DSH 没有提供、基于同一套 token 构建的组件,如卡片、标签页、分页、全局提示、上传、日期时间选择。打包成普通 React 18 / 19 与 Next.js 应用可以直接使用的形式。 在线预览:所有组件都可以在 Storybook 里查看。 非官方项目。 本项目与 DeepSeek 无关联,未获其认可或赞助,不包含 DeepSeek 的品牌素材(标志与字标)。详见 THIRD_PARTY_NOTICES.md。 为什么有这个包 DSH 的 UI 基础组件(@deepseek-ai/dsh-client-ui-primitives)覆盖的是 DSH Web 壳自己的需要:对话、工具输出、菜单、对话框。围绕 DSH 做产品,还会有控制台、设置页、管理后台,这些页面需要 DSH 没有的组件:卡片、标签页、分页、日期时间输入、上传、全局提示。每个应用各写一套,外观会和 DSH 越走越远;直接加进基础组件的副本里,每次同步上游都要处理合并冲突。
展开完整文档(README 剩余 1 节)
@seekbuddy/dsh-ui

基于 DeepSeek Harness(DSH)Web UI 设计系统的 React 组件库,用来搭建围绕 DSH 的产品页面:包含 DSH 的基础组件(--dsw- 设计 token、明暗主题、基础控件、图标、Markdown 与工具输出渲染器),以及 DSH 没有提供、基于同一套 token 构建的组件,如卡片、标签页、分页、全局提示、上传、日期时间选择。打包成普通 React 18 / 19 与 Next.js 应用可以直接使用的形式。

在线预览:所有组件都可以在 Storybook 里查看。

非官方项目。 本项目与 DeepSeek 无关联,未获其认可或赞助,不包含 DeepSeek 的品牌素材(标志与字标)。详见 THIRD_PARTY_NOTICES.md。

为什么有这个包

DSH 的 UI 基础组件(@deepseek-ai/dsh-client-ui-primitives)覆盖的是 DSH Web 壳自己的需要:对话、工具输出、菜单、对话框。围绕 DSH 做产品,还会有控制台、设置页、管理后台,这些页面需要 DSH 没有的组件:卡片、标签页、分页、日期时间输入、上传、全局提示。每个应用各写一套,外观会和 DSH 越走越远;直接加进基础组件的副本里,每次同步上游都要处理合并冲突。

本包提供这些组件,同时让它们和 DSH 保持分离:

- 扩展组件(@seekbuddy/dsh-ui/seekbuddy)补上缺口。样式只用 DSH 的 token,遵守 DSH 的样式规则,和 DSH 控件放在一起看不出差别;需要 DSH 控件时通过公开入口复用,不重新实现。详见 docs/components。
- DSH 层是上游基础组件的副本,只做打包相关的修复,每一项都登记在 UPSTREAM.md,因此可以跟随上游 tag 同步。

为了让 DSH 层能在普通应用里使用,本包还解决了官方包在打包上的三个问题:

| 官方包 | @seekbuddy/dsh-ui |
| 单一根入口全量导出,Shiki 与 KaTeX 进首屏 | 拆分入口;构建期断言根入口不触达 Markdown、Shiki、KaTeX 与代码文件图标素材 |
| 主题 token 与主题切换在 Cordis 插件里 | 提供 tokens.css 与独立的 light / dark / system 主题运行时,附防闪烁的首屏脚本 |
| KaTeX 输出依赖浏览器 DOMParser 转换 | 服务端渲染安全的 KaTeX;用 React 18 SSR 与 Next.js 16 构建测试覆盖 |

安装

npm install @seekbuddy/dsh-ui

peer 依赖:react、react-dom ^18.2.0 || ^19.0.0。

快速开始

在应用入口导入一次全局 token 样式;只有渲染数学公式时才导入 katex.css。

import '@seekbuddy/dsh-ui/tokens.css'
import '@seekbuddy/dsh-ui/katex.css'

import { Button, Pill } from '@seekbuddy/dsh-ui'
import { MarkdownText } from '@seekbuddy/dsh-ui/markdown'
import { IconCheckOutlineRegular } from '@seekbuddy/dsh-ui/icons'
import { setThemePreference } from '@seekbuddy/dsh-ui/theme'

const labels = {
code: { copyLabel: 'Copy', copiedLabel: 'Copied' },
footnotes: 'Footnotes',
}

export function Example() {
return (

setThemePreference('dark')}>
<IconCheckOutlineRegular /> Dark theme

<Pill active>Enabled</Pill>
<MarkdownText text={'Formula: $x^2$'} labels={labels} />

)
}

组件样式是编译进 JS 的 CSS Modules,组件模块首次加载时注入 ,只注入一次。全局样式只有 tokens.css 与 katex.css。

组件内不含任何界面文案:所有可见文字与读屏文字都通过 props(通常是带类型的 labels 对象)传入,由应用自己做本地化。

公开入口

只从下列入口导入;dist/ 下的其他文件都是内部实现。

| 入口 | 内容 |
| @seekbuddy/dsh-ui | 轻量控件与工具:Button、Input、Pill、Tag、Switch、Checkbox、Menu、MenuSurface、Modal、Tooltip、Toast、HoverCard、SegmentedControl、SegmentedTabs、定位与模态 Hooks,以及 relativeTime、fileSizeText、rankByName 等工具函数 |
| @seekbuddy/dsh-ui/blocks | 工具输出渲染器 TerminalBlock、ReadBlock、DiffBlock、SearchBlock、WebBlock、JsonTree;文件 / 链接图标 FileTypeIcon、LinkIconRegular / LinkIconMedium;代码高亮 languageForPath、useCodeHighlighter(会加载 Shiki) |
| @seekbuddy/dsh-ui/markdown | MarkdownText、CodeBlock、JsonBlock、MarkdownDelegateProvider、extractMarkdownPlainText |
| @seekbuddy/dsh-ui/icons | 188 个 Icon(94 个图形 × Regular / Medium 两档描边)、PermissionIcon、ReferenceIcon、PluginArtwork、GuideArtwork |
| @seekbuddy/dsh-ui/theme | 主题状态、DOM 应用函数与 React Hooks |
| @seekbuddy/dsh-ui/theme/bootstrap | THEME_BOOTSTRAP_SCRIPT,不依赖 React 的首屏内联脚本 |
| @seekbuddy/dsh-ui/seekbuddy | 扩展组件(文档);整个入口是 Client Component |
| @seekbuddy/dsh-ui/seekbuddy/{card,empty,spinner,timeline} | 不含 Hook 的扩展组件,Next.js Server Component 可以引用 |
| @seekbuddy/dsh-ui/seekbuddy/tabs | Tabs;与从 /seekbuddy 引用等价 |
| @seekbuddy/dsh-ui/tokens.css | 八份 DSH 主题样式,按级联顺序拼接 |
| @seekbuddy/dsh-ui/katex.css | 只保留 woff2 字体的 KaTeX 样式 |

两层结构

| 层 | 源码位置 | 内容 |
| DSH 层 | src/ 中除 src/seekbuddy/ 以外的部分 | DSH Web UI 基础组件与主题样式的副本,随上游 tag 同步。本地改动逐条列在 UPSTREAM.md,其余与上游代码一致 |
| 扩展组件 | src/seekbuddy/ | DSH 没有提供、为本包编写的组件,样式只用 --dsw- token |

扩展组件:Card、Empty、Mark、MessageProvider + useMessage、Pagination(附纯函数 pageItems)、QrCode、Spinner、StatusBadge、Switch、Tabs、Timeline、Upload、DangerButton、SubtleButton,以及日期时间族 Calendar、DatePicker、DateRangePicker、TimePicker、DateField、DateRangeField、TimeField。每个组件的用法、示例和完整 API 见 docs/components。

扩展组件引用 DSH 组件时只走公开入口 @seekbuddy/dsh-ui,不用相对路径。因此打包器可以把这个入口别名到另一份 DSH 基础组件(例如 DSH Web 壳已经加载的那份),页面里每个控件只保留一份实现。从 /seekbuddy 只引一个组件不会带上其他组件:每个组件连同它的 CSS 各自构建成独立的 chunk。

主题

主题偏好是 light | dark | system,存在 localStorage 的 dsh-ui-primitives.theme-preference 键下(为兼容保留了本包旧名)。

import { initializeTheme, setThemePreference, useIsDark, useThemePreference } from '@seekbuddy/dsh-ui/theme'

initializeTheme()

initializeTheme() 恢复合法的已存值,非法或缺失时回退到 system;localStorage 不可用时仍会应用主题。主题通过 document.documentElement.style.colorScheme 和 body 上的 data-ds-dark-theme 属性生效。

服务端渲染的应用要在页面内容之前执行首屏脚本,避免已保存深色主题的页面先亮后暗。Next.js 写法:

import { THEME_BOOTSTRAP_SCRIPT } from '@seekbuddy/dsh-ui/theme/bootstrap'
import '@seekbuddy/dsh-ui/tokens.css'

export default function RootLayout({ children }: { children: React.ReactNode }) {
return (

<body>

{children}
</body>

)
}

THEME_BOOTSTRAP_SCRIPT 是本包的常量,不得替换成来自用户输入或配置的字符串。

设计 Token

自己的组件用语义 token 写样式,不写颜色字面量:

| 前缀 | 用途 |
| --dsw-alias- | 语义颜色:背景、文字、边框、交互与状态色;任何颜色首选 |
| --dsw-font- | 完整的字体角色,写成 font: var(--dsw-font-…) |
| --dsw-radius- | 圆角:xs 4、sm 8、md 12、lg 16、xl 20、panel 28 |
| --dsw-elevation- | 浮起表面(菜单、面板、对话框);阴影里已包含发丝描边 |
| --dsw-static- | alias 背后的原始色板;组件里不要直接用 |

要加品牌主题,保留 light / dark / system,在 body 上另设一个属性,并在 tokens.css 之后加载覆盖样式,成对重映射亮色与暗色的 --dsw-alias-*。属性要放在 body 上而不是页面容器上:Modal、Toast、ImageLightbox 通过 Portal 渲染到 body。

从 dsh-ui-primitives 迁移

本包此前以 dsh-ui-primitives 为名开发。

1. 把导入前缀 dsh-ui-primitives 换成 @seekbuddy/dsh-ui,各入口路径不变。
2. 删除了 BrandWordmark、FishLogo、FISH_LOGO_PATH、FISH_LOGO_VIEWBOX:它们绘制的是 DeepSeek 的品牌标志,本包不再分发。

开发

需要 Node.js 20.11+。

npm install
npm run verify # typecheck → unit tests → build → package contents → React 18 SSR → Next.js 16 build

test:package 打出真实的 npm tarball,校验全部导出、token 级联顺序与 KaTeX 字体 URL;test:react18 与 test:next16 把这个 tarball 装进测试应用。根入口触达 Markdown、Shiki 或 KaTeX,或扩展组件没走公开入口而打进了一份 DSH 组件时,构建直接失败。

storybook/ 是组件文档站,也是组件演示(Storybook 10),依赖独立安装,不进发布包:

npm run build # the site reads dist/tokens.css
cd storybook
bun install
bun run dev # http://localhost:9109
bun run check # typecheck + every public runtime export has a story

许可证

MIT。DSH 层是 DeepSeek 以 MIT 授权的代码;上游归属与依赖许可证见 THIRD_PARTY_NOTICES.md。
预览分享卡片长什么样 ↓seekbuddy/dsh-ui
分享 · DeepSeek Harness Hub
seekbuddy/dsh-ui

补齐 DSH 缺失的卡片、分页与日期选择等 React 组件

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部