DeepSeek Harness 插件

AhaCrazy/dsh-stock-quotes

Star 数 ★ 0 分类 UI 增强 收录于 2026-10-22

A 股 / 港股 / 美股与板块自选面板,带分时迷你走势图,并向 agent 提供 stock_quote 工具。

安装

# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)

dsh plugin --profile web add github:AhaCrazy/dsh-stock-quotes

装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。

README

中文 | English

一个 DeepSeek Harness 插件:在侧边栏数据面板里显示自选股实时行情,同时注册 stock_quote 工具,让 Agent 能在对话里直接回答"茅台现在多少钱"这类问题。

  • 面板:A 股 / 港股 / 美股自选股一张表 —— 最新价、涨跌额、涨跌幅、今开 / 最高 / 最低、成交额;15 秒自动刷新;右键菜单、拖拽排序、多选批量操作。
  • 工具:stock_quote 一次批量取回一只或多只行情(不带参数时用配置里的默认自选股)。
  • 外观中性:侧边栏默认叫「数据」、图标是普通表格样式,显示名称可配置 —— 看起来像通用数据视图,而不是行情软件。

行情来自公开接口的延时/快照数据,仅供查看,不构成任何投资建议,不用于交易决策。

环境要求

  • DeepSeek Harness(0.2.x,需要 plugin_manager 工具)
  • 无需 API key,无需安装额外依赖;Host 半不 import 包外任何模块

安装

git clone https://github.com/AhaCrazy/dsh-stock-quotes.git

然后在 DSH 会话里按绝对路径安装这个 bundle:

plugin_manager  action: install_bundle  target: <path-to>/dsh-stock-quotes

客户端模块加载后侧边栏会出现图标;没出现就刷新一次页面。stock_quote 会在下一次请求的工具清单里出现。

卸载:

plugin_manager  action: remove_bundle  target: dsh-stock-quotes

面板操作

操作 怎么做
添加 顶部输入代码或板块名 → 回车 / 点「添加」
删除 在任意一行上右键 → 菜单里选「删除」(没有每行右侧的 ✕ 按钮)
排序 拖行首的 ⠿ 手柄上下拖拽,落点会显示品牌色指示线;也可以用右键菜单的「上移 / 下移 / 置顶 / 置底」
多选 勾选每行最左侧复选框;表头复选框是全选 / 清空
批量操作 选中 ≥1 项后表格上方出现操作条:删除所选 / 置顶 / 置底 / 取消选择
右键菜单其余项 复制代码(多选时按行拼接)、全选、清除选择
曲线 工具栏「曲线」按钮开关每行的分时走势

右键菜单是感知选择范围的:右键的那一行若已在多选里,删除 / 移动 / 复制会作用于整个选中集合,菜单标题会带数量;否则只作用于该行。

自选股顺序与成员保存在浏览器 localStorage(键 dsh-stock-quotes/watchlist)。表格始终按自选股顺序渲染、行情按代码映射进对应行,所以拖动排序不会让"代码 ↔ 报价"错位。

曲线图

工具栏的「曲线」按钮控制每行是否显示当天的分时走势(迷你折线),状态存在 localStorage(dsh-stock-quotes/prefs 的 chart 字段),默认开启。

  • 数据来自东财分时接口,A 股 / 港股 / 美股 / 板块都支持;美股显示最近一个交易时段
  • 横轴是整个交易时段,不是把已有数据拉伸铺满:A 股 / 北交所 / 板块 240 分钟(09:30–11:30、13:00–15:00),港股 330 分钟(09:30–12:00、13:00–16:00),美股 390 分钟(北京时间 21:30–04:00)。所以 11:30 看盘时折线只画到一半,右边空白正是还没交易的部分;收盘后才会铺满整条
  • 每 60 秒刷新一次(不跟 15 秒的报价刷新同步,避免请求风暴)
  • 颜色跟随当日涨跌:红涨绿跌,平盘用中性色,和数值列一致
  • 关掉后不发起任何分时请求,只保留数值
  • 走势还没取到时该格留空,行内列不会错位
  • 悬停小图即可读数:鼠标移到某行的迷你线上会出现十字线,同时该行的「最新价 / 涨跌额 / 涨跌幅」临时变成指针所指那一分钟的值,第二行代码处显示该时刻(如 sh600519 · 11:30),移开即恢复

大图(点击行展开)

迷你线只够看趋势。点任意一行,表格上方会展开这个标的的大图;再点该行或点右上角 × 收起。

  • 左右两侧 Y 轴刻度 + 网格线 + 昨收虚线
  • 时间轴按各自的交易时段:A 股 09:30 / 10:30 / 11:30·13:00 / 14:00 / 15:00;港股、美股同理会标注自己的时段
  • 悬停十字线:竖线 + 圆点定位到最近的一分钟,图下方一行读出「时间 · 价格 · 相对昨收 ±% · 均价 · 成交量」
  • 顶部显示名称、当前价、当日最高 / 最低
  • 1日 / 5日 切换:5 日模式按交易日分段、横轴标日期,不画均价线
  • 1 日模式额外画一条均价线(灰色虚线)

设置

全部在 设置 → 插件 → 「数据面板」 这一张卡片里,改完立即生效:

设置 说明
显示名称 侧边栏文案、面板标题、提示信息共用一个名称,默认「数据」。自动去首尾空白、忽略多余空格、限 24 字
刷新间隔 5 / 10 / 15 / 30 / 60 秒;连续失败时自动退避(最长 2 分钟),成功后恢复
涨跌配色 红涨绿跌(A 股习惯)或绿涨红跌(国际习惯),数值与曲线一起切换
显示的列 开盘 / 最高 / 最低 / 成交额可关掉;名称、最新价、涨跌额、涨跌幅、走势列常驻
异动提醒阈值 当日涨跌幅绝对值超过该百分比时,面板顶部提示;0 = 关闭
自选股导入 / 导出 文本框里的 JSON({"version":1,"symbols":[...]} 或纯字符串数组),可跨机器搬运

设置存在 localStorage(键 dsh-stock-quotes/prefs)。

排序:点「名称 / 最新价 / 涨跌额 / 涨跌幅 / 成交额」表头可排序(降序 → 升序 → 取消)。排序是只读视图,拖动排序前需先取消排序(会提示)。

键盘:Tab 聚焦到某行,Enter / 空格 展开大图,Esc 收起。

支持的代码写法

市场 写法 例子
上交所 6 位代码、sh 前缀、.SH/.SS 后缀 600519、sh600519、600519.SH、688981、900901
深交所 6 位代码、sz 前缀、.SZ 后缀 000001、sz000001、000001.SZ、300750
北交所 6 位代码、bj 前缀、.BJ 后缀 430047、830799、920001
港股 1–5 位数字、hk 前缀、.HK 后缀 00700、700、hk00700、00700.HK
美股 字母代码、us 前缀、.US/.O/.N 后缀 AAPL、usAAPL、AAPL.US、BRK.B(自动在 NASDAQ / NYSE / AMEX 之间匹配)
原始 secid 市场.代码 1.600519、116.00700

裸 6 位代码有歧义时:两个市场都会试,先命中的胜出。所以 000300(沪深300,只有沪市有)会自动落到 1.000300;而 000001 两个市场都有,默认按深市(平安银行)解析 —— 想要上证指数就写 sh000001 或 000001.SH。显式写了前缀/后缀就不再回退,写错市场会如实报「未找到」。

板块(行业 / 概念)

东财板块走同一个行情接口,面板里可以直接加:

写法 例子
东财板块码 BK1036(半导体)、BK0891(国产芯片)
板块名称(仅面板) 直接输入 半导体、白酒、存储芯片,按东财板块名精确匹配,否则唯一包含匹配
原始 secid 90.BK1036

三点须知:

  1. 同花顺的板块代码(88xxxx,例如 881121)是同花顺私有编码,公开接口没有映射,加不进去 —— 把它换成名称或东财代码即可:881121 就是「半导体」,输入 半导体 或 BK1036。
  2. 两家的板块成分股与权重不同,点位和涨跌幅会有差异(同一时刻实测:东财半导体 +3.47%,同花顺 +3.25%)。要跟同花顺完全一致是做不到的。
  3. 名称解析只在面板里做;stock_quote 工具请直接传 BK1036。

搜索(按名称添加)

不确定代码也没关系——在输入框里打字就会弹出建议(名称 + 规范代码),点一下即可加入自选:

输入 建议
茅台 贵州茅台 sh600519
半导体 半导体 BK1036(另有 半导体材料 BK1325 等)
BK13 半导体材料 BK1325
600519 直接添加(精确代码优先,不需要点选)

排序规则:完全同名 → 名称前缀 → 名称包含 → 代码前缀。

建议数据来自仓库里的 data/securities.json(约 1.1 万条:A 股、指数、港股、行业/概念板块),面板从 jsDelivr / raw.githubusercontent 拉取一次并缓存一天。索引由脚本生成:

node scripts/build-index.mjs   # 需要能访问 push2.eastmoney.com

新股上市后重跑一次并提交即可。索引拉不到(离线、被墙)时,代码和板块名的添加方式仍然可用。

覆盖范围

数据源是东方财富的公开行情接口,能加什么取决于它的覆盖:

  • ✅ A 股、北交所、港股、美股、指数、ETF / LOF、可转债、B 股、板块(BKxxxx)
  • ❌ 已退市 / 已摘牌的代码(例如 110043)、场外基金净值、期货、期权、外汇
  • ❌ 中文个股名称搜索:暂时不支持(公开搜索接口没有 CORS 头,浏览器端拿不到),请用代码;板块名称是例外,见上

如果某个代码你在同花顺能看到却加不进去,可以带完整后缀试一次(600519.SH);还不行就是数据源没有这只票。

配置

cordis.patch.yml 里的 config.defaultSymbols 是 stock_quote 不带参数时使用的默认自选股:

- insert:
    - id: stock-quotes
      name: 'dsh-stock-quotes'
      config:
        defaultSymbols:
          - sh000001
          - sh600519
          - sz300750
          - hk00700
          - usAAPL

注意:面板自己的自选股存在浏览器里,与这份配置相互独立 —— 配置是给 Agent 查的,面板是给自己看的。

实现说明

文件 作用
package.json bundle 清单:dsh.bundle.patch 插入 Host 行,dsh.client 让 Web 端加载浏览器半
cordis.patch.yml Loader 补丁:插入 stock-quotes 行并给出默认自选股
index.js Host 半:以原生 ToolDefinition 注册 stock_quote(包外零依赖)
quotes.js 纯数据层:代码解析、批量取数、格式化
client.js 浏览器半:main 面板、plugins.bundle.config 设置卡、sidebar.panellist 图标
locale/{zh,en}.json 插件管理器卡片的标题与描述

改代码前值得知道的两条设计约束:

  • Host 半不能写裸 @deepseek-ai/... import。 工作区里的 bundle 是 link 进 profile 的,这些裸模块名解析不到,整行会 failed to import。所以它直接用原生 ToolDefinition。
  • 浏览器半不 import 任何 Harness 客户端包。 控件全部自己写、只用主题 token(--dsw-alias-*),这样跨 Harness 版本更稳。

测试

npm test
  • tests/quotes.test.mjs:代码解析、批量取数、格式化、取消;确定性的部分不联网,联网段不可达时自动跳过。
  • tests/render.test.mjs:工具定义与它渲染的文本——两位小数、正负号、缺失字段显示为「—」、退化输入不抛错。
  • tests/client.test.mjs:模拟模块加载器 / 语言服务 / slot 注册表 / React,断言注册了什么、组件渲染出什么,以及排序、移动和搜索打分的纯函数;另外逐条比对浏览器端与 Host 端的代码解析器,防止两份实现漂移。

Host 半的完整契约校验需要 DSH 安装目录里的包,因此没有放进本仓库。

  • tests/meta.test.mjs:发布一致性——版本号与代码里锁定的索引版本一致、CHANGELOG 有对应条目、files 覆盖必需产物、无运行时依赖、索引结构完整。

稳定性、数据来源与免责声明

  • 行情来自东方财富对外的公开接口(push2 / push2his),非官方、未授权、无 SLA:接口可能限流、改字段或停止服务。插件对 HTTP 错误做了退避与降级,但不能保证一直可用。
  • 搜索索引是仓库里生成的快照(data/securities.json),通过 CDN 按版本标签固定获取;新股上市后需要重新运行 node scripts/build-index.mjs 并发布。
  • 数据可能延迟、可能不准确。本插件仅供查看,不构成任何投资建议,不得用于交易决策。因使用本插件产生的任何损失由使用者自行承担。
  • 插件不收集、不上报任何数据;自选股与设置只存在浏览器 localStorage。

许可证

MIT —— 见 LICENSE。

内容来自项目 README(GitHub)↗

链接

同类插件

查看整个分类 →

社区评论

评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。