dsh-limitup-widget:在 DeepSeek Harness 里常驻 A 股涨停直播浮窗

前言

在 DeepSeek Harness(DSH)里做智能体或日常工作时,侧边栏、对话区和工具面板往往已经占满视线。若还想盯 A 股盘面——涨停家数、炸板率、连板高度、热门题材——要么反复切到浏览器里的行情页,要么自己写脚本定时刷接口。前者打断工作流,后者还要处理浏览器跨域、混合内容,以及桌面端 dsh-app:// 下相对地址打不开外链等问题。

dsh-limitup-widget(维护者 LusJourney,分类为客户端)把一张深色小卡片挂在 DSH 的 frame 级浮动层(shell.overlay)上:数据经 Host 同源前缀 /limitup-widget 反代到本机 Python 看板后端,卡片可拖动、收起、关闭后从侧栏恢复。下面介绍它的组成、能力与安装配置要点。

插件定位

本插件对应仓库 LusJourney/dsh-limitup-widget,npm 包名 dsh-limitup-widget(当前资料版本 0.2.1,许可证 MIT)。安装一个包即同时启用两半:

半 职责
Client(lib/client.js) 浏览器端模块,在 shell.overlay 注册 limitup-widget,轮询并渲染卡片
Host(lib/index.js) 在 DSH webServer 上挂 /limitup-widget 路由,反代本地后端;可选探活与自动拉起 Python 进程
后端(仓库 dashboard/,不随 npm 包分发) Flask + akshare,默认 http://127.0.0.1:8000

插件本体不采集、不上传用户数据:浏览器只请求同源 /limitup-widget/api/*,Host 只访问配置的 backendUrl 与本机 Python 进程。

环境要求(资料原文):DSH >=0.2.0-rc.2 <0.3.0(桌面或 Web profile),Node.js ≥ 20;后端需 Python ≥ 3.9(推荐 3.10+)及可访问东方财富数据源的网络(akshare 免费接口,无需 API key)。

核心功能

浮动卡片展示

  • 状态:盘中 / 午休 / 收盘等状态点与文案,数据日 MM-DD;非当前交易日可显示「回退」标签。
  • 三大数字:涨停、炸板、跌停家数;次级指标含炸板率、连板高度、昨日涨停均溢价。
  • 热门题材 Top5:题材名 × 涨停家数、最早首封时间;概念映射未完成时后端可按「所属行业」兜底并标注「行业」。
  • 自选股:名称、代码、最新价、涨跌幅;涨停显示红色「涨停」徽章。
  • 页脚:最后刷新时间、刷新、跳转完整看板、收起。

交互与持久化

拖动位置写入 localStorage 的 limitup.widget.pos;收起为小胶囊(limitup.widget.collapsed)。关闭整卡后浮层无残留,左侧边栏底部「涨停」可恢复;关闭状态仅在当前页面生命周期内有效,刷新或重启 DSH 后卡片会重新出现。自选股代码(逗号或空格分隔的 6 位代码)保存在 limitup.watchlist,与看板页面共用同一 key。

轮询间隔由 Host 的 /limitup-widget/api/config 下发,默认交易时段 60s、其余 300s;页面隐藏时暂停,回到前台立即补拉。页脚「刷新」触发 GET /api/refresh,后端强制刷新一次(资料注明可能耗时约 30s)。

Host 同源代理

浏览器只认 /limitup-widget 前缀,避免 CORS。常用路由包括:/limitup-widget/api/config、/limitup-widget/api/snapshot(12s 超时)、/limitup-widget/api/refresh(45s 超时)、/limitup-widget/api/health(6s 超时);根路径 /limitup-widget/ 可 302 到完整看板。后端不可达时返回 502 并限频重试。

可选 后端自动拉起:加载时探活 backendUrl/api/health;若失败且 autostart 为 true 且 script 非空,则用 pythonBin 执行 script 拉起后端(环境含 HOST=127.0.0.1、PORT 取自 backendUrl、TZ=Asia/Shanghai)。插件仅在自己拉起的进程上于卸载时终止;已在运行的后端不会被杀掉。

安装与启用

安装插件

桌面版 profile 建议通过 设置 → 插件 搜索 dsh-limitup-widget 安装;也可用 CLI(资料原文):

dsh plugin add dsh-limitup-widget
dsh plugin --profile web add dsh-limitup-widget

npm 不可用时,资料还提供:

dsh plugin --profile web add github:LusJourney/dsh-limitup-widget

DSH 0.2.1+ 可在 插件 → Discover → Index sources 添加
https://cdn.jsdelivr.net/npm/dsh-plugin-catalog/index.json 后搜索安装。

安装后重启 DSH,右下角应出现「涨停直播」卡片;Host 日志可见 [limitup-widget] host plugin loaded。

准备后端

后端源码在 GitHub 仓库的 dashboard/,需单独准备。资料推荐先手动跑通:

cd dsh-limitup-widget/dashboard
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python app.py

默认监听 http://127.0.0.1:8000。验证:

curl -s http://127.0.0.1:8000/api/health

期望 {"ok":true,...}。

若希望 DSH 启动时自动拉起后端,在 profile 的 cordis.patch.yml 中覆盖同 id 配置(须写全量 config 字段),将 pythonBin 指向 venv 内 Python 绝对路径,script 指向 dashboard/app.py 绝对路径;默认包内 script 为空时只探活、不拉起。

典型配置

在 profile 的 cordis.patch.yml 追加(示例来自 README,路径请改为本机绝对路径):

- id: limitup-widget
  name: dsh-limitup-widget
  config:
    backendUrl: http://127.0.0.1:8000
    autostart: true
    pythonBin: /absolute/path/to/dashboard/.venv/bin/python
    script: /absolute/path/to/dashboard/app.py
    startupTimeoutMs: 45000
    pollTradingMs: 60000
    pollIdleMs: 300000
字段 默认 说明
backendUrl http://127.0.0.1:8000 后端根地址;自动拉起时 PORT 取自 URL 端口
autostart true 探活失败且 script 非空时是否拉起
pythonBin python3 拉起后端用的解释器(建议 venv 绝对路径)
script '' app.py 绝对路径;空则只探活
startupTimeoutMs 45000 拉起后等待健康的超时(毫秒)
pollTradingMs 60000 交易时段客户端轮询间隔
pollIdleMs 300000 非交易时段轮询间隔

卡片内可输入自选股代码并保存;「完整看板」用绝对 http 地址在系统浏览器打开后端页面(桌面端相对地址会被静默拒绝,弹窗被拦时会复制地址并提示)。

适用场景与注意

适合在 DSH 桌面或 Web UI 中需要不离开工作区即可扫一眼涨停生态的开发者或盯盘用户:家数、炸板率、题材与自选同屏,完整看板仍可在浏览器打开。

注意事项:

  1. 插件以当前 DSH 进程权限运行,安装与启用前宜阅读仓库源码与 MIT 许可证,确认同源代理与可选子进程拉起行为可接受。
  2. npm pack 产物不含 dashboard/,后端需从 GitHub 获取并自行维护依赖与网络可达性。
  3. 社区目录 SkillHub 插件页 与 GitHub 为独立索引,与 DeepSeek / 幻方无官方从属关系;DSH 生态奉行「一切皆插件」,本件归类为客户端(含 Web 端 Host 代理)。

常见故障:卡片不出现则确认 profile 已安装并重启;「后端未连接」则检查 curl 健康检查与 pythonBin/script 路径;关闭后从侧栏底部「涨停」恢复。

结尾

经过上面的步骤,你可以在 Harness 浮动层常驻 A 股涨停直播卡片,由 Host 同源转发衔接本机 akshare 看板,并按需选手动或自动拉起后端。

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

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

小夜