返回目錄

dsh-xueqiu

編輯精選維護狀態: 活躍

wanderer-yk/dsh-xueqiu

雪球 mini 行情面板 — DeepSeek Harness 免登入 A股/港美股即時行情、K線、分時、熱榜、7x24快訊。可拖拽懸浮面板,交易時段智慧重新整理。

前往 GitHub
$ dsh plugin add dsh-xueqiu

安裝

dsh 沒有統一的安裝指令 —— 把該外掛 README(見下方)中的設定行加入你的 profile / patch 設定,然後重啟即可。

查看安裝教學

8

星數

1

Fork

JavaScript

語言

MIT

授權條款

2026-08-14

建立於

2026-10-23

最近推送

README

dsh-xueqiu · 雪球 mini 行情面板

DeepSeek Harness 上的雪球行情面板:免登录查看 A股/港股/美股实时行情、K线、分时、热榜、搜索、7×24 快讯与热议用户。面板嵌入输入框上方不遮挡对话,常驻行情区域显示四大指数与自选股涨跌,交易时段智能刷新。

npm version npm downloads GitHub stars License dsh-plugin

中文 | English

功能 · 截图 · 安装 · 使用 · 稳定性 · 质量与测试 · FAQ · 更新日志

🆚 与同类行情插件

能力 dsh-xueqiu 股票皮肤类插件
面板形态 嵌入输入框上方,不遮挡对话 全局换肤/状态栏
K线/分时 KLineChart 引擎蜡烛图/分时面积图+均线+十字光标,7 档周期 部分有
热榜/快讯/KOL 全有 多数无
数据源 雪球(社区数据:帖子/热议用户独有) 腾讯/Yahoo 等
请求防护 闸门+看门狗+缓存+自愈+隐藏暂停 一般仅缓存
常驻行情区域 四大指数+12 自选两列平铺,⤡ 调宽 多为纯状态栏
主题 跟随 DSH 明暗 需整体换肤

✨ 功能

功能 说明
📊 实时行情 大盘指数(上证/深证/创业板/科创50)+ 自选股列表,涨红跌绿,表头点击排序
🕯️ K线图 基于 KLineChart v10 引擎(canvas 渲染,内置主题适配):蜡烛图 + 独立成交量窗格 + MA 均线 + 十字光标 legend,5分/15分/30分/60分/日K/周K/月K 7 档切换;滚轮缩放 + 拖拽平移,右拖触底自动加载更早历史(500 根/次,已实测连续加载至 3400+ 根)
⏱️ 分时图 面积价格线(涨跌色)+ 均价线 + 昨收基准虚线,十字光标 tooltip 查任意分钟 价/均价/涨跌
🔥 热榜 雪球热门榜,A股/美股/港股/全球 切换
🔍 搜索 搜股票(一键加自选/看详情)、搜帖子
📰 快讯 7×24 实时快讯,重要新闻高亮
👥 热议用户 个股热门 KOL(粉丝数/认证标识)
💼 自选股 本地持久化,增删随点随改;可选登录后直接使用雪球云端自选股
👤 可选登录 粘贴浏览器 Cookie 即可登录(借鉴 xueqiu-cli 手动模式):登录后自动拉取云端自选股,加/删自选尽力同步到云端;Cookie 仅存本机 ~/.dsh 工作区文件,不上传任何第三方
🧲 嵌入式面板 完整面板停靠在输入框上方(官方 conversation.input.dock 槽位),随页面布局流动,不遮挡对话记录
🏷️ 行情区域 常驻悬浮区域:头部一行 logo/盘中状态,四大指数两列(上证/深证/创业/科创50)+ 自选前 12 只两列平铺;点击开合面板,拖动调整位置(记忆),右下角 ⤡ 手柄调宽度 120–480px(双击复位 320),宽度/位置持久化
📏 面板高度可调 拖动面板底边调整高度(160px–85% 视口,双击复位),高度持久化记忆
⌨️ Esc 收起 Esc 先关个股详情,再收起面板;点行情区域或底部指数条重新展开
🛡️ 请求防护 并发 2 + 100ms 最小间隔对齐网页端行为;30s 看门狗强制释放悬挂请求防管线冻结;Cookie 失效/风控自动重播种重试;限频指数退避;页面隐藏自动暂停全部轮询(回前台立即恢复)
🗂️ 渐进详情 个股详情报价+K线先上屏,分时/财务/KOL 到达后增量合并,不用等齐
⏱️ 智能刷新 盘中 20s 刷新行情,收盘自动放慢,降低被风控概率
🕐 交易时段 面板头常驻显示 A 股/港股/美股 盘中·午休·盘前·休市(本地时区推算,不含节假日),行情区域显示精确 A 股时段
🌗 主题自适应 跟随 DSH 明暗主题
🤖 Agent 工具 对话内直接问行情:xueqiu_quote(实时行情)、xueqiu_kline(K线)、xueqiu_search(搜股票)、xueqiu_hot(热榜)、xueqiu_news(7×24 快讯)、xueqiu_kol(个股热议大V)——模型直接调用,无需翻网页
🃏 工具调用卡片 xueqiu_quote 渲染为红涨绿跌行情表、xueqiu_kline 为迷你蜡烛图、xueqiu_hot 为热榜排名列表、xueqiu_news 为快讯时间线(重要快讯高亮),对话流内直接看结果

所有数据来自雪球公开接口(访问首页获取匿名 cookie + 浏览器 UA/Referer),无需登录。

📸 截图

嵌入式主面板:停靠在输入框上方,指数卡 + 自选股行情 + 四个功能页签:

主面板

个股详情:16 项行情数据 + K线蜡烛图(成交量柱 / MA5-10-20 均线 / 十字光标)+ 财务指标 + 热议用户:

个股详情

迷你行情区域:四大指数 + 自选 12 只两列平铺,⤡ 手柄调宽度,点击开合面板,可拖动:

迷你行情区域

Agent 工具调用卡片(对话内直接问行情,结果渲染为专属卡片而非 JSON):

xueqiu_quote 行情表 xueqiu_kline 蜡烛图
quote kline
xueqiu_hot 热榜 xueqiu_news 快讯时间线
hot news

📦 安装

方式一:标准 bundle 插件(推荐)

# npm 包
dsh plugin --profile web add dsh-xueqiu

# 或 GitHub 源(git 安装会直接从源码构建)
dsh plugin --profile web add github:wanderer-yk/dsh-xueqiu

# 或本地目录
dsh plugin --profile web add ./dsh-xueqiu

添加后重启一次 dsh web(插件行发现按启动缓存),之后刷新页面即可看到面板。

方式二:动态插件(已实测)

本仓库 dynamic/ 目录提供已实测可用的动态 Cordis 插件源码(host.js + client.js)。在任意 DSH 会话中让 Agent 加载即可:

请读取本仓库 dynamic/host.js 与 dynamic/client.js 两个文件,
用 cordis_define(kind: new)定义插件:
  code.host 填入 host.js 的内容,code.client 填入 client.js 的内容,
  然后 cordis_run 启动它。

🎛️ 使用

  • 面板停靠在输入框上方:与对话同列流动,不遮挡任何消息;收起 — 或 Esc 收起。
  • 右下角行情区域常驻显示四大指数 + 自选前 12 只(两列平铺);点击开合面板,拖动调整位置(记忆位置),⤡ 手柄横向调宽(120–480px,双击复位)。
  • 输入框下方的指数条点击也可展开面板。
  • 点击自选股、指数卡或热榜行 → 个股详情:16 项行情数据 + K线/分时切换(悬停图表看十字光标详情)+ 财务指标(ROE/毛利率/净利同比等)+ 热议用户。
  • 面板高度:拖动面板底边的手柄上下调整(160px ~ 85% 视口高度),双击手柄复位;高度会被记忆。
  • 登录雪球(可选):点面板右上「👤 登录」,按提示从浏览器复制 Cookie 整行粘贴即可。登录后自选股切换为你的雪球云端自选股(云端为准,10 分钟自动同步);「同步云端自选」可随时手动拉取;加/删自选双端同步(portfolio/stock/add.json / cancel.json)。Cookie 只保存在本机,退出登录即清除。
  • 刷新频率:盘中行情 20s、内容 60s;收盘后自动降为 60s / 3min。

🔧 稳定性设计

数据层内置多层防护,长时间挂机也不会卡死:

  • 请求闸门:并发上限 2、请求间最小间隔 100ms,模拟网页端节奏,降低风控概率。
  • 30s 看门狗:单个请求悬挂超 30s 即强制释放调度槽并报错,不会冻结后续所有请求。
  • TTL 缓存 + in-flight 去重:相同 URL 短时间窗内直接命中缓存,并发重复请求共享同一 Promise。
  • 匿名 Cookie 落盘复用:播种成功的匿名 token 持久化到 $DSH_HOME/dsh-xueqiu/,进程重启/新会话免播种直接复用(2026-10 实测部分网络 IP 被雪球边缘节点拦截、播种拿不到 token——活进程靠内存 cookie 存活而冷启动即死的教训);文件 cookie 失效时自动重播种自愈。
  • Cookie 自愈:匿名 cookie 失效(错误码 400016)或被风控返回空响应时,自动重新访问雪球播种新 cookie 再重试(种子请求带浏览器导航头收窄指纹差异)。
  • seed_blocked 快速失败:播种链被边缘拦截且上游明确拒绝(400016)时不再空转重试,直接报出可操作指引(粘贴浏览器 Cookie 登录解锁),debug RPC 的环形事件流(最近 50 条播种/重试/落盘事件)可一键看现场。
  • 限频退避:遇到"请求频繁"按 2s→4s 指数退避后重试。
  • 渐进渲染:详情页报价 + K线先行上屏,分时/财务/KOL 异步到达后增量合并。

🧪 质量与测试

平台要求:macOS / Linux / Windows。macOS/Linux 走 POSIX shell curl;Windows 走 DSH 的 PowerShell 层显式调用 curl.exe(Win10+ 自带),引号语义天然兼容,已在 GitHub Actions windows-latest 上真连雪球全量验证(含匿名 Cookie 播种链路)。

三套互补的自动化测试,每次发版前全部通过(最近一次实测 2026-08-20,macOS + dsh web 3080 端口):

套件 覆盖 实测结果
scripts/static-smoke.sh 静态安装 7 道门禁(tarball 解包 → cordis 组合 → bundle 注册 → RPC 起活) ✅ 7/7
scripts/feature-matrix.py 20 个 RPC 动作 × 正常/边界/非法/降级 × 未登录/已登录/Cookie过期 三环境 ✅ 54–56 项断言全过 / 每环境
scripts/browser-interact.sh 真实鼠标交互:徽章拖动/⤡调宽/双击复位/面板开合/四个页签数据/越界恢复钳制 ✅ 全过

热缓存性能实测(数据已在 TTL 窗口内,即用户连续操作时的体验):

kline       日K 120 根      1–12 ms
quote       3 只行情批量      1 ms
quoteDetail 个股详情         1 ms
search      搜索"茅台"        2 ms
finance     财务指标          2 ms

首次冷请求(需访问雪球取数)典型耗时 100–700ms,全部经请求闸门(并发 2)排队。复现方式:装好插件后 python3 scripts/feature-matrix.py --base http://127.0.0.1:3080 --mode logged。

📁 目录结构

dsh-xueqiu/
├── src/
│   ├── index.js          # Host 插件(curl 数据层 + connection RPC)
│   └── client/index.js   # Client 插件(嵌入式面板 + 常驻行情区域 UI)
├── dynamic/
│   ├── host.js           # 动态插件版 Host(已实测)
│   └── client.js         # 动态插件版 Client(已实测)
├── package.json          # bundle 声明(dsh.bundle / dsh.client)
└── cordis.patch.yml      # bundle 层插入

❓ FAQ

Q: 安装后面板不出现? 按安装说明重启一次 dsh web(插件行按启动缓存发现),再硬刷新页面(Ctrl/Cmd+Shift+R)。仍无面板时看右下角有无行情区域——区域在则点它展开。

Q: 行情数据突然全空/报错? 雪球匿名 cookie 偶发被风控(错误码 400016 或空响应)。插件会自动重播种 cookie 并重试;播种成功的 cookie 会落盘,重启后免播种复用。若报 [seed_blocked] 匿名 Cookie 获取失败(雪球边缘风控拦截或网络不可达),说明当前出口 IP 被雪球边缘节点拦截(不是插件故障)——等 1–2 分钟再试,或在面板右上「登录」粘贴浏览器 Cookie 直接解锁全部数据。debug RPC 的 events 字段(最近 50 条播种/重试事件)可供排障。

Q: K线周期里分时下为什么没有周期按钮? 分时模式只展示当日分钟线,K线模式才有 7 档周期,属设计行为。

Q: 交易时段提示节假日准吗? 不准。时段按每周一至周五的固定钟点本地推算,不含法定节假日调休,仅供参考。

Q: 自选股和面板设置存在哪? 宿主本地稳定目录 $DSH_HOME/dsh-xueqiu/(默认 ~/.dsh/dsh-xueqiu/)下的 .xueqiu-watchlist.json / .xueqiu-ui-state.json / .xueqiu-login.json(登录)与 .xueqiu-anon.json(匿名 cookie 缓存,1.25.0 起),各带 .bak 损坏兜底;沙箱拒绝时透明回退工作区目录。与浏览器 localStorage 无关,换浏览器不丢,也不随 dsh web 启动目录漂移(v1.22.12 起的稳定目录行为)。

Q: 会不会影响 DSH 本体? 插件 UI 全部挂在官方槽位(conversation.input.dock / shell.overlay / conversation.composer.dock),卸载即完全消失,不改 DSH 源码。

⚠️ 免责声明

  • 本项目非雪球官方产品,与雪球网/雪球公司无关;"雪球"为雪球公司商标,此处仅作数据来源描述。
  • 数据来自雪球公开 Web 接口,仅供学习与研究,不构成任何投资建议;请勿高频请求,遵守目标网站条款。
  • 接口可能随时变更导致功能失效,欢迎提 Issue / PR。

📋 更新日志

  • 1.25.0(2026-10-23)
    • 修复:匿名链路对冷启动的脆弱性(当日实测事故)——部分网络 IP 上两个种子 URL 均被雪球边缘节点(TencentEdgeOne)拦截(HTTP 5xx 不发 set-cookie),活进程靠内存 cookie 存活、重启即死板。三层加固:① 播种成功的匿名 cookie 落盘 $DSH_HOME/dsh-xueqiu/.xueqiu-anon.json,冷启动先读文件免播种(失效自动重播种自愈并覆盖);② 种子请求补浏览器导航头(Accept/Accept-Language/sec-fetch 系)+ --compressed 收窄指纹差异,单种子超时 12s→8s(最坏 2×10s+12s 不再撞穿 30s 看门狗);③ 播种失败 + 上游 400016 时快速失败为 [seed_blocked],文案直接引导"面板右上登录粘贴 Cookie",不再空转 3 轮上游请求循环报错。
    • 新增:qa/probe-seed.mjs 播种探针(候选 URL × 头组合实测 set-cookie 返回,扩容播种链的决策工具,不进 CI)。
    • 重构:client 传输层与样式注入改运行时接缝(typeof host / typeof styles 判定),gen-static.py 不再做 DYNAMIC_CALL/STATIC_CALL 整函数文本替换——每次改 call() 从此不必同步改生成器(锚点漂移即失败的一整类维护负担消失)。
    • 新增:client 纯逻辑层单测(qa/client-pure.mjs,61 断言)——格式化/交易时段/K线归一化 + makeIndexPoll/makeUiStore 工厂化(依赖全注入:in-flight 去重、订阅回放、隐藏门、5s 节流、open 即时落盘全可测);host 缓存工厂 makeCache 时钟注入(qa/cache.mjs,16 断言:TTL 过期/FIFO 淘汰/24h 清扫——unit.mjs 曾自认"伪造时间不好做"的盲区);传输接缝路由回归(qa/client-bundle.mjs,13 断言:生成物伪浏览器求值防 TDZ + 动态门面/普通函数/无 host 三环境分支路由——后者源自复审发现的接缝守卫缺陷:typeof host.call 对任何同名全局函数都为真,已加 !== Function.prototype.call 收紧)。三套件全部接入本地与 CI 关卡。
    • 加固:debug RPC 增加最近 50 条环形事件流(播种成败/重试类型/落盘失败,不含 cookie 值);watchlist.pull 复用同步结果消除双倍上游请求;冒烟数据关卡分级 SMOKE_LIVE=strict|warn(PR 路径上游拦截降级警告,结构关卡仍全 FAIL),CI 真连雪球的 live 步骤移至每日定时;xqIso(null) 不再渲染 1970-01-01;fmtFullDay/pad2 重复定义合并;契约测试 UA 改从 host.js 单一真源提取(曾 Chrome/126 vs /120 漂移);新增 test:offline 聚合脚本与 engines 字段;修复 static-smoke/browser-interact 对新版 dsh token 鉴权的适配缺口(CI 9 月起未跑 push 路径、dsh 升级引入 token 后,smoke 就绪探测裸 poll / 得 401 误报"实例未启动"——现对齐 e2e-boot 的双路径探测并全程携带鉴权;e2e 徽章检查由单次 sleep 8 改 6×5s 轮询 + 失败分层诊断)。
  • 1.24.1(2026-10-22)
    • 修复:面板关闭时拖动徽章的位置不落盘——onUp 提交 badgePos 后未调 saveUi,而落盘订阅者(DockPanel)仅在面板打开时挂载;徽章交互常态恰发生在面板关闭时,刷新后位置回退(对照:调宽手柄 onGripUp 一直有显式落盘)。现为拖拽松手后显式 saveUi()。
    • 修复:越屏位置的钳制修正不落盘——hydrate 钳制后的 ui.set 同样无人落盘,host 里永久残留越屏值(如 99999),每次加载重复钳制。现钳制确有修正时立即 saveUi()。
    • 两个 bug 均由浏览器 e2e 加强断言暴露(旧断言只查"badgePos 是对象",被 rpc 预设值骗过)。
  • 1.24.0(2026-10-22)
    • 功能:详情页盘中活性——详情打开期间不再是一次性快照:标的所属市场开市时报价每 20s、分时每 60s 增量刷新(只合并 quote/minute,不动 K线/财务/KOL)。A股标的开市状态取共享指数层的真实 market status(节假日感知,法定假日不空转);港美股退回本地时区推算。页面隐藏暂停、回前台立即补刷(5s 节流);跨开/收市边界自愈;轮询失败静默(面板级轮询已在报错,双写只会刷屏)。
    • 功能:K线最后一根 bar 盘中滚动——图表 loader 挂 subscribeBar 订阅(v10 原生流式通道:_addData(t,'update'),末根值演进 replace、新 bar 到点 push,不重置视图、保持拖拽/缩放位置,MA/VOL 自动重算)。20s 拉最新 5 根走 begin=now 零缓存路径(无 begin 的 kline 缓存 TTL 高达 5min,常规请求拿不到进行中的 bar);以图表缓冲末根为准值有变化才触发;开市门/隐藏暂停同详情活性。图表容器留 __xqLastBar/__xqTickInfo 诊断钩子(e2e/排障用,画布内容无法从 DOM 断言)。
    • 功能:分时图原地热更新——新数据经「改写 barsRef + chart.resetData()」走既有 loader 重新 init 加载(vendored v10 无 applyNewData/updateData,resetData 内部即 _processDataLoad("init")),不重建图表实例;涨跌色随最新价重算、笔数增长仍铺满宽度;签名守卫(笔数+末笔时间+昨收)防重复应用。
  • 1.23.1(2026-10-22)
    • 重构:XueqiuPanel 拆分——680 行巨石组件收敛为 ~160 行组合层,状态与取数按领域拆为 4 个 hook(useLogin / useWatchlistData / useHotNewsData / useDetailData),六个内联渲染函数(登录框/行情/详情/热榜/搜索/快讯)提升为真正的组件(稳定组件身份,经 el() 渲染);所有状态、竞态守卫与注释原样搬移,行为不变(8 套件 415 断言 + 浏览器 e2e 全绿)。
    • 修复:K线「加载更早」的 10 页配额此前不随换标/切周期重置——在一只标的上前插满 10 页后,切换其它标的/周期的前插会被永久卡死(配额计数现随 view/period effect 归零,与图表 remount 语义对齐)。
  • 1.23.0(2026-10-21)
    • 性能:指数轮询三合一——面板(20s)/徽章(30s)/指数条(30s) 对同一组 4 指数的独立轮询合并为单请求流(模块级共享层:20s 单定时器 + 订阅回放 + in-flight 去重 + 隐藏暂停/回前台 5s 节流刷新)。上游指数请求量降 2/3,多组件同屏时尤为明显;指数数据恒取最新缓存,慢响应覆盖竞态随之消失(mktSeq 只需守护自选链)。
  • 1.22.17(2026-10-21)
    • 加固:登录凭证文件写盘后自动 chmod 600(fs 无权限原语,借 shell 执行,失败不阻塞);actQuote 超量截断显式返回 truncated 计数。
    • 修复:fmtTime 兼容字符串时间戳、无效输入显示 --:--:--(此前 NaN:NaN:NaN);稳定目录探测失败不再永久缓存回退路径(磁盘满恢复后自动回到稳定目录);探针文件不再留时间戳数据。
    • 性能:四张工具卡(Quote/Kline/Hot/News)xqParseResult 包 useMemo,流式更新重渲染时跳过重复 JSON.parse。
    • 测试:CI 离线矩阵扩至全部 8 套件(此前 edge/fence/regress 等 346 断言仅本地跑);新增 chmod/truncated 用例(unit 61)。
  • 1.22.16(2026-10-21)
    • 修复:适配新版 DSH shell API(shell.run 移除导致所有请求报 shell.run is not a function、自选股不展示)。新增 runShell 兼容层:旧版走 run,新版走 execute+result()。
    • 修复:curl 命令注入防御——URL 单引号统一转义 %27(encodeURIComponent 不转义 ');kline symbol 剥除非白名单字符,剥除后为空立即返回空结果。
    • 修复:WAF 挑战页自愈——HTML 响应从致命 [parse] 改为 [waf] 可重试:仅首轮且匿名路径触发重播种(带 5s 冷却窗);播种成功判据收紧为拿到 xq_a_token,失败不再缓存废 cookie。
    • 修复:K线历史翻页步长——begin 按周期回退一个安全步长(实测上游 inclusive 语义;month 取 20 天,当月未收线 bar 与上一根 gap 可小至 21 天),防 forward:false 永久截断。
    • 修复:client RPC 15s 超时——静态版 AbortSignal.timeout + 老 WebView race 兜底 + res.ok/JSON 防护;动态版 host.call race 看门狗。
    • 修复:RPC dispatch 原型键绕过(action='constructor' 命中原型真值函数,改 hasOwnProperty 白名单);登录/自选加载竞态(迟到文件内容不再覆盖并发 logout/save/add);触屏 pointercancel 误触发面板开合;行情轮询竞态(mktSeq 三道守卫含 catch)。
    • 变更:gen-static 生成器升级为 call() 函数级替换(旧单行替换会使静态版看门狗失效)。
    • 安全:登录 Cookie 不再进进程 argv——经 stdin 以 -H @- 注入(ps 不可见、不落盘),值剥除换行防 header 注入。
    • 安全:状态文件 .bak 兜底——主文件写成功后写伴生 .bak,半截 JSON 损坏时读取侧自动回退,最坏丢"最后一次写"而非整份自选。
    • 修复:登录/注销时清空行情缓存(缓存 key 不含登录维度,旧数据 24h TTL 内不再跨身份泄漏);自选 200 上限前置拦截(不再静默截断丢尾巴);RPC actQuote symbols 钳制 50。
    • 修复(长运行):工具卡 K 线图离屏休眠(IntersectionObserver,回视口自动恢复)——会话消息不卸载,此前每张卡 ~3.4MB canvas 永久累积;K 线历史前插 5000 根封顶 + 前插结果不进缓存(零复用);news 文本 200 字截断 + 翻页 500 条上限;云同步失败也推进节流(cookie 过期后不再每天 ~1.3 万无效请求);注销落盘竞态哨兵(旧文件读回已注销身份)。
    • 修复(测试保真):mock shell 对齐真实 DSH v24.16 的 execute+result() 形态(生产必经分支此前零单测);login.status.path 在真实 fs(resolve 返回对象)下统一为可读字符串;补身份切换缓存失效三连/login.save 成功链路(含 .bak)/登录态 WAF 不播种/stdin+POST 形状共 9 条盲区测试。
  • 1.22.15(2026-09-03)
    • 变更:元数据脱敏补丁。更新日志措辞去除旧账号字样;npm 维护者信息刷新。功能零变更。
  • 1.22.14(2026-09-03)
    • 变更:仓库迁移至 wanderer-yk。GitHub 账号更名后全量同步:README / README.en / package.json / LICENSE 中的仓库链接、徽章、图片外链、安装命令全部更新为 wanderer-yk/dsh-xueqiu;git 全部历史提交与标签署名经 git filter-repo 重写为 noreply 身份,历史文件内容同步清洗。
    • 修复:static-smoke.sh 查找 dsh 二进制时硬编码机器特定绝对路径,改为 $HOME 展开(可移植性 + 去隐私泄露)。
    • 功能零变更;发布本版主要目的为刷新 npm 侧 homepage / 仓库地址 / readme 元数据。
  • 1.22.13(2026-08-26)
    • 修复:A 股成交量显示虚高 100 倍 + 港/美单位错。雪球 volume 字段全市场均为股(实证 amount/volume ≈ price,quote/kline/minute 三接口、A/港/美/ETF/指数一致),而 fmtVol 一律按"手"格式化:茅台 145 万股显示成"145.05万手"(实为 1.45 万手)。现按市场感知:A 股(SH/SZ/BJ 前缀,含 ETF/指数/北交所)÷100 换算成手,港/美维持股。qa/vol-units.mjs 26 例(从 client 源码提取 fmtVol 独立求值 + host 周期白名单)。
    • 修复:自选"死条目"凭空消失。批量行情会整只丢弃无效/退市代码——添加 SH999999 提示成功,但列表里永远看不到,无任何反馈。现在补占位行(现价/涨跌全 --,名称回退显示代码,仍可删除/查详情),价格闪烁逻辑对 null 现价免疫。
    • 修复:kline 垃圾周期静默空数据。上游对未知 period(如模型手滑传 1h)返回 200+0 根;host 侧加白名单兜底为 day。
    • 修复:CI 午休/午后时段必红(v1.22.11 修复的延伸)。live 分时点数下限按"9:30 至今分钟数"线性外推,但 A 股午休(11:30-13:00)分时停在 ~121 点、午后累计从 13:00 重算——11:44 触发的 CI 实际 121 点 vs 下限 132 必红。改为两段交易时段感知(早盘线性 / 午休恒 118 / 午后 121+线性封顶 238 / 盘外 200),全天 1440 分钟边界模拟通过。
    • 工具描述补充 volume 单位为股(A股 1手=100股),防模型侧误读换算。
  • 1.22.12(2026-08-26)
    • 修复:状态文件跟启动目录漂移。自选/登录/界面状态原先落在 dsh web 的启动目录(cwd=工作区根)——换目录启动就"换一套状态"。现在优先写 $DSH_HOME/dsh-xueqiu/(稳定目录,writeText 自动建目录);沙箱策略拒绝工作区外绝对路径写入时探测失败,透明回退旧工作区行为(零回归);读取时稳定文件缺失则回读旧工作区文件,存量数据无缝迁移(首次保存落到稳定目录,旧文件不删)。qa/state-paths.mjs 11 例覆盖四种模式(稳定/迁移/回退/首启)。注意:host 侧改动需重启 dsh web 生效,迁移发生在重启后首次写入。
    • 修复:K线交互提示文案方向写反(v1.22.0 起)。"左拖加载更早"实为右拖——klinecharts 源码 scroll(拖拽位移) 内容跟手:右拖=左缘涌出更早历史+触底自动加载;左拖是回最新方向、右边留白。用户指出后核对引擎源码确认,client 6 处 + README 3 处已正。
    • 新增:K线/分时拖拽光标反馈(用户建议)。悬停小手 grab、按住抓手 grabbing、松手复位(松手点在图外时 window mouseup 兜底);监听统一在 klcSetup 随 dispose 清理。
    • 修复:::1 裸 IPv6 回环白名单死代码。端口剥离正则 /:\d+$/ 会把裸 ::1 末尾 :1 误剥,改 /^(.*[^:]):\d+$/;fence.mjs 原 xfail 用例转正(两形态均 200)。
  • 1.22.11(2026-08-26)
    • 修复:打开面板的 open=true 从未落盘——刷新必丢(1.22.10 的姊妹问题)。ui.set({open:true}) 发生在面板组件订阅建立之前(订阅挂载后才生效),无人续触发时 saveUi 永不执行。open 翻转现在在 ui.set 内直接触发落盘。闭环实测:开面板 → host open:true → 刷新 → 面板自动恢复。
    • 修复:CI 时区炸弹。live 测试分时点数断言硬编码 >30,北京时间 9:30~10:01 触发的 CI 必红(开盘仅十几个点)。改按盘中时间自适应下限。
  • 1.22.10(2026-08-25)
    • 修复:刷新后面板开合状态不恢复(1.22.8 引入的回归)。ui.get 里 open: s.open !== false 被上一行的行尾注释吞掉,客户端 hydrate 永远拿不到该字段。254 例边界套件捕获(qa/edge.mjs 保持红用例直至修复)。
    • 修复:切 K 线周期闪整屏 + 连点丢按钮。周期在详情 effect 依赖里,切一次周期会把整个详情(报价/分时/财务/KOL)清空重拉 5 个接口——周期丸整排消失 100-300ms,真人节奏(300ms)连点会丢击。现在周期切换只清图表数据、只发 1 个 kline 请求,报价与周期丸全程可点(实测 300ms 全序列 11/11 命中、130ms 机枪档终态正确)。
    • 修复:浅色主题图表文字几乎不可读。cssVarColor 在 <html> 上读主题令牌,而 GUI 把令牌定义在 <body>——两主题都渲染硬编码回退 #8a8f98,白底对比度仅 ~1.8:1(WCAG AA 要 4.5:1)。改为先读 body:浅色下图例/轴文字用真实令牌 #61666b(~5.8:1)。
    • 修复:主题切换图表不跟着换色。GUI 跟随系统配色时 DOM 属性不变,MutationObserver 永不触发;补 matchMedia('(prefers-color-scheme)') change 监听,主题翻转即时重设图表样式。
    • 修复:页面刚加载就点开面板会被迟到的持久化打回。hydrate 回填 open/tab 前先检查用户是否已交互(touched 标记),水合不再覆盖用户刚做的选择。
    • 加固:KlineChart 空 rows 不建图(hasRows 门控,与分时 hasData 同款),配合周期切换的"先清后到"数据流。
    • 测试:新增 4 套离线资产并入 scripts——qa/edge.mjs(254 例黑盒边界)、qa/fence.mjs(同源栅栏 18 例,含 1 例 ::1 死代码 xfail 标记)、qa/regress-v1228.mjs(21 例)、qa/persist-upgrade.mjs(16 例,含真实状态文件升级演练)。check:fast 保持秒级(1.8s)。
  • 1.22.9(2026-08-25)
    • 新增:K线 OHLC 图例常显。showRule follow_cross → always:进详情即见最新一根 开高低收量,悬停时跟随十字光标那根(MA 彩色行仍悬停显示)。v1.22.3 改悬停触发是因为当时英文两行图例压蜡烛;v1.22.5 起已是紧凑中文单行(字号10),实测图例带 0 蜡烛像素、无遮挡。
  • 1.22.8(2026-08-25)
    • 修复:综合测试暴露的 4 类缺陷 + 6 项低危加固——/xq-rpc 同源栅栏收紧(Origin 必须存在且同源,浏览器同源 POST 必带 Origin,无 Origin 的 curl/跨进程直调一律 403);ui.get tab 白名单(损坏状态文件的非法 tab 回退 market);curl 失败错误不再回显 stderr(信息泄漏);空云结果也推进同步节流时间戳;云增删失败静默兜底;工具 execute 参数空值兜底 args || {};快讯无效 created_at 不再渲染 NaN 月NaN 日。
  • 1.22.7(2026-08-26)
    • 修复:切换股票后分时图压成直线(如看完茅台再看宁德时代)。registerIndicator('xq-minute') 全局只注册一次,其 calc 闭包捕获的是首次挂载实例的 baseRef——第二只股票的分时图复用了旧 calc,昨收基准仍是前一只股票的(宁德挂上茅台昨收 1304.66,y 轴被撑到 404~1229,而分时价格只在 378~388,曲线压成直线)。修复:每次挂载分时图用 overrideIndicator 重绑当前实例 baseRef 的新 calc。实测三股连环切换(茅台 1304.66 → 宁德 387.89 → 京东方 5.75),昨收均正确、价格波动 span 130~180px 饱满。
  • 1.22.6(2026-08-26)
    • 修复:分时悬停信息双份叠加(1.22.5 排查发现)。分时面积图"开=高=低=收"同值,canvas OHLC 图例纯冗余,且 xq-minute 指标图例(昨收/均价)与自定义 .xq-tip 重复显示两遍。分时模式现在彻底关闭 canvas 图例(蜡烛+指标),悬停只保留 .xq-tip。
    • 新增:K线悬停显示 MA 数值(1.22.0 以来 MA 值无处可看的补课)。指标图例改 follow_cross:悬停时蜡烛行(开高低收量)下方第二行彩色显示 MA5/10/30/60 数值(实测茅台 MA 行单行占宽 70%,不折行),与雪球一致。
  • 1.22.5(2026-08-26)
    • 修复:悬停 OHLC 图例折成两行压图(1.22.3 遗留)。follow_cross 后默认英文 time/open/high/low/close/volume 标题过长,悬停时图例在窄面板折两行盖住蜡烛。改为紧凑中文单行(开 高 低 收 量,字号 10)+ 隐藏 ticker 标题——实测悬停图例单行 10px 高、占宽 45%,不再折行。
  • 1.22.4(2026-08-26)
    • 修复:切分时整个面板崩溃消失(1.22.3 回归)。双击回最新的清理函数里用了 boxRef.current.removeEventListener,但 React 卸载组件时先清 ref 再跑 effect 清理,此时 boxRef.current 已是 null → 抛 TypeError → conversation.input.dock 槽位整体崩溃,只剩自选股小徽章且无法重开。改为 effect 内闭包捕获节点。回归:K线↔分时来回 4 轮 + 收起/徽章重开/再进详情,0 报错。
  • 1.22.3(2026-08-26)
    • 修复:K线 OHLC 图例常驻压蜡烛。KLineChart v10 默认 candle.tooltip.showRule: 'always' 把 time/open/high/low/close/volume 永久画在蜡烛区左上角(像素级实测 1394 个文字像素自 y=23 起覆盖蜡烛)。改为 follow_cross(十字光标悬停才显示,与雪球一致),此前只关了指标 tooltip 漏了蜡烛自身的。
    • 修复:"双击回最新"标签承诺无实现。图表下方文案写了"双击回最新"但代码没有 dblclick 处理(实测右拖加载 999 根后双击无反应)。现监听容器 dblclick → chart.scrollToRealTime()(实测可视区 132→430-500 回到最新)。
    • 细节:K线日期标签补年份(500 根日K时"08-26 ~ 08-24"像时间倒流,实际跨两年;现显示"2024-08-02 ~ 2026-08-25");详情页 hero 现价/涨跌额按现价实际小数位显示(港股 00700 此前 440.40 → 440.4)。
  • 1.22.2(2026-08-24)
    • 修复:K线均线 / 分时均价误落附图。KLineChart v10 的 createIndicator('MA') 默认给指标新开 pane——均线不在蜡烛主图上(主图被挤到 72px),分时均价/昨收也在独立附图。须传 { name, paneId: 'candle_pane' } 显式叠加到主图(pane id 从引擎源码确认)。修复后:K线主图 173px 蜡烛+MA5/10/30/60 叠加、附图仅成交量;分时只剩一张主图(分时曲线+均价+昨收全部叠加),与雪球布局一致。
    • 样式:详情页参考雪球重排版——顶部行情主标题(大号红/绿现价 + 涨跌额 + 涨跌幅,如 1304.66 +31.83 +2.50%);16 格 stat 卡片更轻盈(浅底/圆角/等宽数字/标签次要色);卡片标题左侧主题色强调条;K线/分时与周期按钮选中态改主题色 tint 填充;K线画布 264→300px;MA 均线和谐四色(蓝/橙/紫/青);关闭最高/最低点重复标注(消除窄图顶部杂乱数字)。
  • 1.22.1(2026-08-24)
    • chore:移除 peerDependencies 避免安装警告;静态冒烟脚本自动兜底本地 npx dsh(prepublishOnly 下找不到 dsh 命令)。
  • 1.22.0(2026-08-24)
    • 新增:K线/分时切换 KLineChart v10 引擎(canvas 渲染、内置明暗主题适配):蜡烛图 + 成交量 + MA 均线 + 十字光标,5分/15分/30分/60分/日K/周K/月K 7 档;滚轮缩放、拖拽平移、右拖触底自动加载更早历史(500 根/次);分时面积图(涨跌色)+ 均价线 + 昨收虚线。
  • 1.21.7(2025-08-24)
    • 修复:越屏钳制改为逐渲染执行。1.21.6 的"effect 依赖 badgePos + ResizeObserver"方案在 CI 慢环境仍漏过"渲染后才长高"的时序(数据异步到达→徽章长高→无重触发钳制)。现在 useLayoutEffect 每次渲染后钳制(数据到达必伴随重渲染,无时序死角;ui.set 仅在有变更时触发下一轮,收敛不循环)。CI 实测踩坑修复。
    • 新增:浏览器 E2E 进 CI(browser-e2e job)。此前这层(唯一抓到过钳制死代码真 bug 的测试)只在本机手动跑。scripts/e2e-ci-boot.sh 合成"已完成引导"的隔离 DSH 实例(settings 跳过 onboarding + workspace 表 + 含完整一轮对话的逐行 zstd 会话日志——踩坑记录:DSH 逐记录写日志,每 zstd 帧恰好一行;slug 规则 cwd 去首 /、余 /→-、两端包 --),agent-browser 跑全部 18 项断言。E2E 脚本兜底:全新实例无活动对话时先展开会话分组再点开一个会话(conversation.input.dock 槽需要对话视图)。
  • 1.21.6(2025-08-24)
    • 修复:徽章越屏钳制是死代码。挂载后的实测钳制 useEffect 依赖为 [],只在首帧跑一次——而 hydrate 异步恢复 badgePos 发生在其后,钳制永远空跑;DockGate 恢复时的估算宽度(badgeW 空时按 320)又偏小,实测 346px。后果:恢复越屏坐标后徽章右/下缘出屏,真实鼠标点击落空,面板打不开(热榜/快讯/搜索随之全空)。修复:effect 依赖加 badgePos(hydrate 后按实测尺寸再钳一次)+ ResizeObserver 监听徽章自身长高长宽再钳。浏览器回归连跑 3 轮 18 项全绿。
    • 测试:浏览器回归脚本修两处不稳定——① agent-browser dblclick 的两次点击间隔超出系统双击判定阈值(页面 dblclick 监听计数为 0),改派发 dblclick 事件;② 交互步骤前 rpc 固定徽章到视口中部再刷新,消除"上一轮遗留位置导致真实鼠标命中失败"的漂移。
  • 1.21.5(2025-08-24)
    • 测试:写失败契约 + cache stampede 冒烟(qa/contract.mjs 新增 C3:add 无效代码被拒或静默忽略且列表不变、cancel 不存在代码幂等零副作用、坏 Cookie 写被 400016 拒绝零副作用;qa/unit.mjs 新增 5 URL × 3 并发回源恰 5 次的 stampede 冒烟)。实测发现:上游对无效代码 add 返回 {data:true} 但列表不变(静默忽略)。
    • 修复:登录文件错位排障盲区。登录文件位置由运行时 workspaceRoot 决定(随会话变化),此前 login.status 不暴露路径,排障只能猜(曾误查 ~/. 而插件实际写入会话工作区)。现在 login.status 返回真实 path 与 savedAt;契约测试多候选探测(env → ~/. → cwd → 父目录)并打印命中的文件路径;Cookie 过期(400016)时哨兵直接提示"重新登录更新 XQ_COOKIE"而非误报接口变更。另:实测登录 Cookie 约 3 天过期,过期后需重跑插件登录并更新 secret。
  • 1.21.0(2025-08-21)
    • 新增:Windows 支持。DSH 在 Windows 上的 shell 层是 PowerShell(pwsh -Command),单引号字面量语义与 POSIX 一致——原先"cmd 引号不兼容"的障碍实际不存在。三处适配:① 显式调用 curl.exe(绕开 PS 5.1 中 curl = Invoke-WebRequest 别名,Win10+ 自带 curl.exe);② Cookie 播种的 -o /dev/null 在 Windows 换成 NUL;③ Cookie 请求头剥离引号字符防注入。测试桩 realShell 平台对齐(win32 走 pwsh,同 DSH win32 层)。CI 新增 windows-latest 任务:单测 + cookie 测试 + live.mjs 真连雪球(51 断言,含匿名播种链路)全绿。README 平台要求同步更正为 macOS / Linux / Windows。
  • 1.20.6(2025-08-21)
    • 测试:雪球云端自选接口契约测试进 CI(qa/contract.mjs,7 断言)——直连真实端点验证 portfolio/list.json / portfolio/stock/list.json / add.json / cancel.json 契约(含真实 add→cancel 往返后还原)。每日定时(UTC 21:00)用 XQ_COOKIE secret 真跑,雪球改接口时这里最先失败,防止 watch.json 类"虚构端点"事故重演;无 secret 时(push/PR)自动 skip,同一定时任务顺带跑 live.mjs(51 断言)。需在仓库 Settings → Secrets 配置 XQ_COOKIE(浏览器完整 Cookie 请求头,含 xq_a_token)。
  • 1.20.5(2025-08-21)
    • 修复:云端自选双写从未生效——此前调用的 watch.json 是不存在的端点(WAF 对未知路径统一 403,曾误判为"雪球封禁第三方写入")。真实端点是 portfolio/stock/add.json / cancel.json(POST form,symbols 参数)。已修正并经真实账号完整往返验证:插件加自选 → 云端 116 只 ✓ → 插件移除 → 云端还原 115 只 ✓。本地加/删自选恢复真正的双端同步,账号面板与 README 文案同步更正。
  • 1.20.4(2025-08-21)
    • 修复:host 内存缓存无淘汰——K 线 begin 参数按分钟取整使缓存 key 持续增长,长开实例会无界泄漏;现在写入时清理过期条目并设 200 条容量上限(写入即清,无后台任务)。
    • 修正:云端自选写入已被雪球风控封禁(读接口正常、写接口 openresty 403)——账号面板与 README 文案如实说明「云端为准:本地加/删会在下次同步时被云端覆盖,改自选请去雪球网页/App」。
    • 测试:看门狗 30s 超时路径单测(挂起请求精确 30s 释放、槽位归零);缓存淘汰单测(230 条→钳 200);云端同步真实往返 E2E;agent 工具真实会话 E2E(自然语言→选工具→卡片渲染→结构化回复,数据与直连一致)。
  • 1.20.3(2025-08-21)
    • 修复:徽标位置视口钳制——窗口缩小/分辨率变化后徽标不再滞留屏幕外;挂载时按真实渲染尺寸(含边框)钳制,resize 实时重钳制(浏览器实测 375px/320px 视口均不溢出)。
    • 加固:/xq-rpc 请求体 1MB 上限(超出 413),防失控本地进程 OOM。
    • 声明:README 明确平台要求 macOS / Linux(POSIX shell curl,Windows 暂不支持)。
    • 测试:完成浏览器级 UI 走查(徽标/面板 4 tab/搜索/详情/K线十字光标/登录三档错误路径)与动态分支协议验证,登录态备份-恢复全程无损。
  • 1.20.2(2025-08-21)
    • 修复:完整 QA 测试轮发现的 3 个缺陷——① login.status 在登录文件缺 uid/screenName 字段时不再返回空,回退到 JWT 解码值;② K 线查询无效代码的错误文案不再误导为「cookie 不完整」,明确提示检查代码格式;③ xueqiu_news 的 count 参数现在真正生效(上游固定每页 ~10 条并忽略 count,工具层用 max_id 自动翻页补足,最多 3 页)。
    • 新增:离线单测套件 qa/(mock shell,不发网络)并接入 GitHub Actions——覆盖调度节流/TTL 缓存/重试链/云端同步语义/cookie 双 URL 回退/命令注入防护等 40 项断言;另有本地 live 套件 qa/live.mjs 对真实 API 做 51 项数据正确性验证。
  • 1.20.1(2025-08-20)
    • 打磨:6 个 agent Tool 描述重写——每个工具的 description 扩展为结构化说明(何时使用 / 输入格式与示例 / 输出字段),并写明工具间的协作关系(不确定代码先 xueqiu_search、只要最新价别拉 K 线、热榜≠涨幅榜等边界)。纯文案改动,直接提升 agent 选工具与传参的准确率(对标 dsh-us-stocks 的描述深度)。
  • 1.20.0(2025-08-20)
    • 新增:登录态自选股自动同步(云端为准的双端统一)——打开面板/行情刷新时自动检查,距上次同步超过 10 分钟即在后台拉取云端自选并镜像到本地;你在雪球网页/App 上加删自选,插件端 10 分钟内自动跟随。节流时间戳持久化,多实例不重复拉取;接口异常静默失败不影响行情;云端返回空列表时不镜像(防误清空)。「同步云端自选」按钮保留,点击强制立即同步。
  • 1.19.1(2025-08-20)
    • 修复:匿名 cookie 播种改为双 URL 兜底链——优先 xueqiu.com/hq(无 WAF 挑战,直接发全套匿名 token),失败再回退首页。部分地区首页被阿里云 WAF JS 挑战接管后只发 acw_tc,导致匿名请求报 400016,此修复使播种不再依赖单一入口(感谢 @Lambenthan PR#2 的定位与验证)。
  • 1.19.0(2025-08-20)
    • 新增:K线滚轮缩放 + 拖拽平移——详情页K线默认显示尾部 120 根(缓冲 500 根),滚轮以鼠标位置为锚点缩放(20~全部),水平拖动平移看历史;拖到缓冲头部自动追加拉取更早 500 根(按时间戳去重合并,上限 3000 根);双击复位。图底标注 窗口/总数 根 与操作提示。
    • host:kline RPC 新增 begin 参数(毫秒时间戳),返回该根往前的历史,供平移分页(分钟取整保证缓存 key 稳定)。
  • 1.18.2(2025-08-20)
    • 修复:Agent 工具的时间戳用了 UTC(toISOString),快讯/K线时间比本地早 8 小时(18:14 显示成 10:14)。现按本地时区格式化。
  • 1.18.1(2025-08-20)
    • 新增:xueqiu_hot 热榜卡片(排名+名称+热度升降+现价涨跌)与 xueqiu_news 快讯卡片(时间线、mark=1 重要快讯高亮、列表内滚动)。
  • 1.18.0(2025-08-20)
    • 新增:Agent 工具调用卡片——xueqiu_quote 结果渲染为红涨绿跌行情表,xueqiu_kline 渲染为迷你蜡烛图(复用面板图表组件,头部含周期/根数/区间/区间涨跌),对话流内直接看图,不再是一坨 JSON。

前往 GitHub

廣告

DSH Plugins 是獨立的 DeepSeek Harness 外掛市集,與 DeepSeek 官方無關,也不代表官方背書。第三方外掛未經安全稽核,安裝前請審查原始碼。

每週取得最新的 DeepSeek Harness 外掛,絕不濫發。