huluTable:DeepSeek Harness Web 里的免后端在线表格插件

前言

用 DSH 做开发或日常使用时,常有一类躲不开的活:管理一批结构化数据——任务清单、测试用例、客户记录、台账。常见的做法是开一个 Excel 文件来回导,或者自建数据库加页面,两条路都不轻。huluTable 走了第三条路:它是一个 DeepSeek Harness Web 客户端插件,安装后在侧边栏底部出现一个 “Tables” 入口,点开是全视口的表格工作区;所有数据直接存放在浏览器的 IndexedDB 里,不需要数据库,也不需要服务端,开箱即用。

DSH 的理念是「一切皆插件」,huluTable 是这一思路在 Web 客户端侧的一个具体落地。

这是什么

huluTable(npm 包名 dsh-hulutable-plugin,MIT 许可证,由 huluwocom 维护,当前发布版本 v0.1)是一个 DeepSeek Harness bundle:一个携带补丁配置层(dsh.bundle.patch)的 npm 包。

有一处实现细节值得说明:dsh-web-app 自带一行内置的 ui-hulutable,指向 monorepo workspace 包;这个 bundle 的 cordis.patch.yml 会禁用该内置行,并插入一个独立行(补丁无法重命名行,所以采用 disable + insert 的方式)。安装后生效的是独立版本,而不是 monorepo 内置的那份。

关于命名:GitHub 仓库是 huluwocom/hulutable-dsh-plugin,安装命令里写作 github:huluwocom/HuluTable,npm 包名是 dsh-hulutable-plugin,本文统一称 huluTable。

核心功能

表格库与备份

表格库支持列表、搜索、标签、星标;可新建空白表,也可以从 6 个模板创建:Customer CRM、Projects、Finance ledger、Attendance、To-dos、Inventory。表支持重命名、复制、删除;删除进入回收站,保留 30 天后过期。表格库首页提供一键 JSON 备份/恢复。

网格编辑

  • 虚拟滚动,10k+ 行数据流畅渲染;
  • 双击单元格编辑,拖选或 Shift 扩展选区;
  • 复制粘贴兼容 Excel 的 TSV 格式;
  • 拖拽填充柄可递增、递减、按序列或复制填充;
  • 撤销/重做是增量级(delta)的,只记录变化的单元格与结构,与表格大小无关;
  • 长按拖拽可重排行/列;行、列支持复制、剪切、粘贴和右键菜单。

所有改动都可撤销。

列类型、校验与条件格式

  • 18 种列类型;
  • 列设置面板:必填、默认值、宽度、冻结、隐藏、描述;
  • 格式校验:手机号、邮箱、URL、数字、长度、正则;
  • 下拉选项支持背景色,支持级联选择(map / source 两种模式)与单击即选的下拉选择器;
  • 列边缘拖拽调宽,冻结列按位置生效,重排行列后冻结跟随;
  • 条件格式:按行/列范围配置规则(等于、区间、包含等)上色,在列设置里管理。

筛选、排序与统计

  • 表头筛选:文本、数字、多选下拉、颜色;
  • 排序支持多级(Shift 叠加),筛选条件支持 AND/OR 组合,可一键清空;
  • 底部统计栏:求和、平均、最大、最小、计数;
  • 每列可设目标进度条,表头显示 chip,另有目标面板(goals panel)。

公式

fx 公式栏内置 30+ 函数(SUM、AVERAGE、IF、CONCAT、TODAY、ROUND 等),支持单元格与区间引用,修改后自动重算,且只有公式单元格参与重算。公式栏提供模板快捷插入。

视图

同一张表可在四种视图间切换:

  • Grid:网格编辑视图;
  • Kanban:看板,按某个下拉列分组,拖动卡片即可推进(可当 CRM 漏斗用);
  • Calendar:日历,按日期列展示月视图,可跳到最早日期;
  • Chart:图表,支持柱状、饼图、漏斗。

视图支持新建、复制、重命名、删除,并绑定各自的列。

导入导出

  • 导出 .xlsx / .csv,可选整表或当前筛选行;
  • 导入时自动做表头检测和类型推断,先预览再确认,可选择新建表或追加到现有表。

编辑历史与备注

每个单元格保留最近 5 条编辑历史,悬停即可查看;单元格可加备注(角标 + 弹层,支持添加、编辑、删除)。

易用性

界面提供中英文切换;空表有引导;表头吸顶;横向滚动时行号和冻结列保持固定。

性能与数据

  • 虚拟滚动只渲染可见窗口(±4 行/列的 overscan),滚动经 rAF 节流,单元格用 React.memo 缓存;
  • IndexedDB 写入做了防抖(500ms,pagehide 时立即写入);存储不可用(如隐私模式)时降级为内存模式;
  • 首次加载约 1.6MB(含 SheetJS,gzip 后约 400KB),之后走浏览器缓存。

安装与启用

前置要求:已安装 dsh CLI,且所用的 profile 包含 @deepseek-ai/dsh-web-app(web surface)。

方式一:本地 checkout(开发或试用)

dsh plugin --profile web add /path/to/HuluTable
dsh web                          # 打开 http://127.0.0.1:3080

第一条把本地目录作为插件加入 web profile,第二条启动 Web 客户端。

方式二:从 GitHub 安装(源码 + 自动构建)

dsh plugin --profile web add github:huluwocom/HuluTable

这个仓库的 prepare 脚本会直接从 src/ 构建 lib/(自包含转译,不做类型检查)。pnpm ≥10 默认拒绝运行 git 依赖的构建脚本,需要把 dsh 打印出的包键原样写入该 profile 的 pnpm-workspace.yaml

allowBuilds:
  dsh-hulutable-plugin: true

然后重新执行 add。建议固定 commit(github:you/HuluTable#<sha>),避免后续 push 静默改变实际运行的代码。

方式三:tarball(预构建,无需构建权限)

dsh plugin --profile web add ./releases/dsh-hulutable-plugin-0.1.0.tgz

releases/ 目录提供 pnpm pack 产物及对应的 SHA-256 校验和,也可以自己执行 pnpm pack 生成。

补充两点:等包发布到 npm 后,dsh plugin --profile web add dsh-hulutable-plugin 将与上述三种方式等效;无论哪种方式,安装后启动 dsh web,侧边栏底部即可看到 “Tables” 入口。

典型用法

1、启动 dsh web,打开 http://127.0.0.1:3080,在侧边栏底部点 “Tables” 进入表格库;
2、新建一张空白表,或从 6 个模板(Customer CRM、Projects、Finance ledger、Attendance、To-dos、Inventory)中选一个;
3、在网格里双击单元格录入,拖选区域后用填充柄复制或按序列填充,右键行/列调出菜单,填错了随时撤销;
4、数据成型后切换视图:按某个下拉列切到看板拖卡片,按日期列切到日历看月视图,或在图表视图里出柱状/饼图/漏斗;
5、需要与 Excel 互通时,导出 .xlsx / .csv(整表或当前筛选行),或导入 Excel 文件——插件会做表头检测、类型推断并给出预览,再决定新建表还是追加;
6、定期用表格库的一键 JSON 备份/恢复保全数据。

开发与测试

日常开发命令:

pnpm install            # 安装依赖,prepare 会自动执行构建(tsdown → lib/)
pnpm run build          # 构建 node 半边 + 浏览器半边(lib/index.js、lib/invariant.js、lib/client.js)
pnpm run watch          # 监听变更并重建
pnpm run pack           # 构建并打包 tarball 到 releases/

环境要求:Node >= 22.19.0,pnpm 11.7.0(对应 package.json 的 enginespackageManager 字段)。

类型检查与测试需要本地 SDK:@deepseek-ai/* 的 SDK 包尚未发布到 npm,运行时由 web shell 提供平台模块,因此类型检查和测试套件需要先链接一个本地的 deepseek-harness checkout:

pnpm link-sdk /path/to/deepseek-harness   # 写入 link: devDependencies 并执行 pnpm install
pnpm run typecheck                        # tsc --noEmit
pnpm run test                             # vitest(jsdom)
pnpm run coverage                         # 100% 覆盖率门槛
pnpm run lint                             # oxlint

构建本身(prepare / build)不需要 SDK:类型导入在转译时被擦除,跨插件的值导入会在构建期被纯度检查(purity gate)拒绝。

适用场景与注意事项

适合的用户:希望在 DSH Web 客户端内直接管理结构化数据、又不想为一张表部署数据库和服务端的人;需要与 Excel 文件互通的场景也在覆盖范围内。

使用前注意:

1、插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。huluTable 采用 MIT 许可证,源码公开在 GitHub;
2、数据存放在浏览器 IndexedDB,存储不可用(如隐私模式)时会降级为内存模式,建议用一键 JSON 备份/恢复做定期保全;
3、回收站条目保留 30 天,过期即清理;
4、从 GitHub 安装时建议固定 commit,避免远端更新静默改变运行内容;
5、pnpm ≥10 环境需在对应 profile 的 pnpm-workspace.yaml 配置 allowBuilds 后重新 add,见上文安装部分。

结尾

huluTable 把「一张能用的在线表格」做成了 DSH 的一个插件:不需要数据库和服务端,数据留在浏览器里,从模板建表、网格编辑、公式筛选到看板、日历与 Excel 导入导出,都在客户端内完成。如果你正在用 DSH Web 客户端,装上试一下的成本很低。

仓库地址:https://github.com/huluwocom/huluTable-dsh-plugin
社区目录页:https://www.skillhub.cn/plugins/huluwocom/huluTable-dsh-plugin (该目录为社区维护的独立站点,与 DeepSeek / 幻方无官方从属关系)

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜