dsh-xueqiu 1.22.13 → 1.22.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.en.md +9 -9
- package/README.md +13 -8
- package/package.json +4 -4
package/LICENSE
CHANGED
package/README.en.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/dsh-xueqiu)
|
|
6
6
|
[](https://www.npmjs.com/package/dsh-xueqiu)
|
|
7
|
-
[](https://github.com/wanderer-yk/dsh-xueqiu/stargazers)
|
|
8
8
|
[](./LICENSE)
|
|
9
9
|
[](#install)
|
|
10
10
|
|
|
@@ -42,25 +42,25 @@ All data comes from Xueqiu public web endpoints (anonymous cookie seeded by visi
|
|
|
42
42
|
|
|
43
43
|
**Docked panel** — above the composer, index cards + watchlist + four tabs:
|
|
44
44
|
|
|
45
|
-

|
|
46
46
|
|
|
47
47
|
**Stock detail** — 16 quote stats + candlestick (volume / MA5-10-20 / crosshair) + financials + trending users:
|
|
48
48
|
|
|
49
|
-

|
|
50
50
|
|
|
51
51
|
**Mini market region** — four indices + 12 watchlist quotes in two columns, ⤡ grip resizes width, click to toggle, draggable:
|
|
52
52
|
|
|
53
|
-

|
|
54
54
|
|
|
55
55
|
**Agent toolview cards** — ask about markets right in the conversation; results render as purpose-built cards instead of raw JSON:
|
|
56
56
|
|
|
57
57
|
| `xueqiu_quote` table | `xueqiu_kline` candles |
|
|
58
58
|
| --- | --- |
|
|
59
|
-
|  |  |
|
|
60
60
|
|
|
61
61
|
| `xueqiu_hot` hot list | `xueqiu_news` timeline |
|
|
62
62
|
| --- | --- |
|
|
63
|
-
|  |  |
|
|
64
64
|
|
|
65
65
|
## Install
|
|
66
66
|
|
|
@@ -71,7 +71,7 @@ All data comes from Xueqiu public web endpoints (anonymous cookie seeded by visi
|
|
|
71
71
|
dsh plugin --profile web add dsh-xueqiu
|
|
72
72
|
|
|
73
73
|
# or from GitHub source
|
|
74
|
-
dsh plugin --profile web add github:
|
|
74
|
+
dsh plugin --profile web add github:wanderer-yk/dsh-xueqiu
|
|
75
75
|
|
|
76
76
|
# or a local checkout
|
|
77
77
|
dsh plugin --profile web add ./dsh-xueqiu
|
|
@@ -131,11 +131,11 @@ The data layer is defended in depth — safe to leave open for hours:
|
|
|
131
131
|
|
|
132
132
|
- This is **not** an official Xueqiu product. "雪球/Xueqiu" is a trademark of Xueqiu Inc., referenced here only as the data source.
|
|
133
133
|
- Data comes from public web endpoints for **study and research** only; **not investment advice**. Do not hammer the endpoints; respect the site's terms.
|
|
134
|
-
- Endpoints may change at any time and break features — [issues](https://github.com/
|
|
134
|
+
- Endpoints may change at any time and break features — [issues](https://github.com/wanderer-yk/dsh-xueqiu/issues) and PRs welcome.
|
|
135
135
|
|
|
136
136
|
## Changelog
|
|
137
137
|
|
|
138
|
-
- **1.22.13** (2026-08-26) — **A-share volume overstated 100× + dead watchlist entries vanish + kline period whitelist**. ① Xueqiu's `volume` field is in **shares** for every market (proven by `amount/volume ≈ price` across quote/kline/minute and A/HK/US/ETF/index), yet `fmtVol` formatted it as lots: Moutai's 1.45M shares rendered as "145.05万手" (truth: 1.45万手). Now market-aware: CN symbols (SH/SZ/BJ, incl. ETF/index/BSE) divide by 100 into 手; HK/US stay in shares. `qa/vol-units.mjs` (26 cases: fmtVol extracted from client source and evaluated standalone + host period whitelist) wired into check:fast. ② Batch quote silently drops invalid/delisted symbols — adding SH999999 reported success but the row never appeared anywhere. Placeholder rows now render (`--` everywhere, name falls back to the symbol, still deletable) and the price-flash logic is null-immune. ③ Unknown kline periods (a model slipping in `1h`) got 200 + 0 rows from upstream with no error; a host-side whitelist now falls back to `day`. ④ Tool descriptions now note `volume is in shares (A-share 1 手 = 100 shares)` to prevent model-side unit mistakes.
|
|
138
|
+
- **1.22.13** (2026-08-26) — **A-share volume overstated 100× + dead watchlist entries vanish + kline period whitelist**. ① Xueqiu's `volume` field is in **shares** for every market (proven by `amount/volume ≈ price` across quote/kline/minute and A/HK/US/ETF/index), yet `fmtVol` formatted it as lots: Moutai's 1.45M shares rendered as "145.05万手" (truth: 1.45万手). Now market-aware: CN symbols (SH/SZ/BJ, incl. ETF/index/BSE) divide by 100 into 手; HK/US stay in shares. `qa/vol-units.mjs` (26 cases: fmtVol extracted from client source and evaluated standalone + host period whitelist) wired into check:fast. ② Batch quote silently drops invalid/delisted symbols — adding SH999999 reported success but the row never appeared anywhere. Placeholder rows now render (`--` everywhere, name falls back to the symbol, still deletable) and the price-flash logic is null-immune. ③ Unknown kline periods (a model slipping in `1h`) got 200 + 0 rows from upstream with no error; a host-side whitelist now falls back to `day`. ④ Tool descriptions now note `volume is in shares (A-share 1 手 = 100 shares)` to prevent model-side unit mistakes. ⑤ CI lunch-break/afternoon bomb (extension of the 1.22.11 fix): the live minute-count floor extrapolated linearly from 9:30, but A-shares break for lunch (11:30-13:00, minute points frozen at ~121) and the afternoon accumulates from 13:00 — an 11:44 CI run saw 121 real points vs a floor of 132. Now two-segment session-aware (morning linear / lunch fixed 118 / afternoon 121+linear capped 238 / outside 200), verified by a full 1440-minute boundary simulation.
|
|
139
139
|
- **1.22.12** (2026-08-26) — **State files no longer drift with the startup directory + drag-direction label fix + drag cursor feedback + `::1` whitelist dead code**. ① Watchlist/login/UI state used to live wherever `dsh web` was started (cwd = workspace root) — starting from another directory meant a whole new personality. State now prefers `$DSH_HOME/dsh-xueqiu/` (auto-created); a startup probe falls back transparently to the legacy workspace behavior when the sandbox denies absolute-path writes outside the workspace (zero regression); reads fall back to the legacy workspace file when the stable one is missing, so existing data migrates seamlessly on first save (legacy files left untouched). `qa/state-paths.mjs` (11 cases, wired into check:fast) covers stable/migration/fallback/first-run. Note: host-side change takes effect after the next `dsh web` restart; migration happens on the first write after that. ② The chart hint "drag left to load earlier" had the direction backwards since 1.22.0 — klinecharts' `scroll(drag delta)` is content-follows-hand: dragging **right** surfaces earlier history at the left edge and auto-fetches at the boundary; dragging left heads toward "now" and leaves right-side blank. Corrected in 6 client spots + 3 README spots after a user report and engine-source verification. ③ New drag cursor feedback (user suggestion): `grab` on hover, `grabbing` while pressed, with a window-level mouseup fallback; listeners unified in `klcSetup` for both K-line and minute charts. ④ Bare-IPv6 `::1` Host header whitelist branch was unreachable — the port-strip regex `/:\d+$/` ate the trailing `:1`; now `/^(.*[^:]):\d+$/`, and the former xfail fence case flipped to expecting 200.
|
|
140
140
|
- **1.22.11** (2026-08-26) — **`open=true` was never persisted — panel state lost on every reload** (sibling of the 1.22.10 fix). `ui.set({open:true})` fires before the panel component's subscription exists (it is established on mount), so nothing ever re-triggered saveUi. The open flip now triggers persistence directly inside `ui.set`. Verified end-to-end: open panel → host `open:true` → reload → panel restored. Also: a CI time-zone bomb — the live minute-count assertion hardcoded `>30`, guaranteed red for CI runs triggered 9:30-10:01 Beijing time (only a dozen points right after open); now adaptive to the session time.
|
|
141
141
|
- **1.22.10** (2026-08-25) — **Five fixes from a full QA sweep (host persistence regression, period-switch UX, light-theme readability, theme reactivity, hydration race) + 4 new offline test suites**. ① Panel open/close state stopped surviving reload — a 1.22.8 regression where `open: s.open !== false` in `ui.get` was swallowed by the previous line's trailing comment; caught by the new 254-case edge suite (test kept red until fixed). ② Switching the K-line period wiped the entire detail (quote/minute/finance/KOL) and refetched all 5 endpoints — the period pills row vanished for 100-300ms and human-speed clicking dropped taps; now a period switch clears only chart data and issues 1 request, keeping pills and quote interactive (300ms full-sequence 11/11 taps land; 130ms machine-gun final state correct). ③ Light-theme chart text was near-unreadable — `cssVarColor` read theme tokens on `<html>` while the GUI defines them on `<body>`, so both themes always rendered the hardcoded `#8a8f98` fallback (1.8:1 on white); now reads body first: light legend/axis use the real token `#61666b` (~5.8:1). ④ Charts didn't restyle on theme flips — the GUI follows the OS color scheme without mutating DOM attributes, so the MutationObserver never fired; added a `matchMedia('(prefers-color-scheme)')` change listener. ⑤ Clicking the panel open right after page load got clobbered by late hydration; hydrate now skips `open`/`tab` fields the user already touched. Plus: KlineChart gates on `hasRows` (empty-mount safety, same pattern as the minute chart). New test assets wired into scripts: `qa/edge.mjs` (254 black-box cases), `qa/fence.mjs` (18 same-origin fence cases incl. one `::1` dead-code xfail marker), `qa/regress-v1228.mjs` (21), `qa/persist-upgrade.mjs` (16, includes a real state-file upgrade drill); `check:fast` stays seconds-level (1.8s).
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/dsh-xueqiu)
|
|
6
6
|
[](https://www.npmjs.com/package/dsh-xueqiu)
|
|
7
|
-
[](https://github.com/wanderer-yk/dsh-xueqiu/stargazers)
|
|
8
8
|
[](./LICENSE)
|
|
9
9
|
[](#-安装)
|
|
10
10
|
|
|
@@ -55,25 +55,25 @@
|
|
|
55
55
|
|
|
56
56
|
**嵌入式主面板**:停靠在输入框上方,指数卡 + 自选股行情 + 四个功能页签:
|
|
57
57
|
|
|
58
|
-

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

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

|
|
67
67
|
|
|
68
68
|
**Agent 工具调用卡片**(对话内直接问行情,结果渲染为专属卡片而非 JSON):
|
|
69
69
|
|
|
70
70
|
| `xueqiu_quote` 行情表 | `xueqiu_kline` 蜡烛图 |
|
|
71
71
|
| --- | --- |
|
|
72
|
-
|  |  |
|
|
73
73
|
|
|
74
74
|
| `xueqiu_hot` 热榜 | `xueqiu_news` 快讯时间线 |
|
|
75
75
|
| --- | --- |
|
|
76
|
-
|  |  |
|
|
77
77
|
|
|
78
78
|
## 📦 安装
|
|
79
79
|
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
dsh plugin --profile web add dsh-xueqiu
|
|
85
85
|
|
|
86
86
|
# 或 GitHub 源(git 安装会直接从源码构建)
|
|
87
|
-
dsh plugin --profile web add github:
|
|
87
|
+
dsh plugin --profile web add github:wanderer-yk/dsh-xueqiu
|
|
88
88
|
|
|
89
89
|
# 或本地目录
|
|
90
90
|
dsh plugin --profile web add ./dsh-xueqiu
|
|
@@ -186,14 +186,19 @@ dsh-xueqiu/
|
|
|
186
186
|
|
|
187
187
|
- 本项目**非雪球官方**产品,与雪球网/雪球公司无关;"雪球"为雪球公司商标,此处仅作数据来源描述。
|
|
188
188
|
- 数据来自雪球公开 Web 接口,仅供**学习与研究**,**不构成任何投资建议**;请勿高频请求,遵守目标网站条款。
|
|
189
|
-
- 接口可能随时变更导致功能失效,欢迎提 [Issue](https://github.com/
|
|
189
|
+
- 接口可能随时变更导致功能失效,欢迎提 [Issue](https://github.com/wanderer-yk/dsh-xueqiu/issues) / PR。
|
|
190
190
|
|
|
191
191
|
## 📋 更新日志
|
|
192
192
|
|
|
193
|
+
- **1.22.14**(2026-09-03)
|
|
194
|
+
- 变更:**仓库迁移至 `wanderer-yk`**。GitHub 账号更名后全量同步:README / README.en / package.json / LICENSE 中的仓库链接、徽章、图片外链、安装命令全部从 `kangjinghang/dsh-xueqiu` 更新为 `wanderer-yk/dsh-xueqiu`;git 全部历史提交与标签署名经 `git filter-repo` 重写为 noreply 身份,历史文件内容同步清洗。
|
|
195
|
+
- 修复:`static-smoke.sh` 查找 dsh 二进制时硬编码机器特定绝对路径,改为 `$HOME` 展开(可移植性 + 去隐私泄露)。
|
|
196
|
+
- 功能零变更;发布本版主要目的为刷新 npm 侧 homepage / 仓库地址 / readme 元数据。
|
|
193
197
|
- **1.22.13**(2026-08-26)
|
|
194
198
|
- 修复:**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 周期白名单)。
|
|
195
199
|
- 修复:**自选"死条目"凭空消失**。批量行情会整只丢弃无效/退市代码——添加 SH999999 提示成功,但列表里永远看不到,无任何反馈。现在补占位行(现价/涨跌全 `--`,名称回退显示代码,仍可删除/查详情),价格闪烁逻辑对 null 现价免疫。
|
|
196
200
|
- 修复:**kline 垃圾周期静默空数据**。上游对未知 `period`(如模型手滑传 `1h`)返回 200+0 根;host 侧加白名单兜底为 `day`。
|
|
201
|
+
- 修复:**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 分钟边界模拟通过。
|
|
197
202
|
- 工具描述补充 `volume 单位为股(A股 1手=100股)`,防模型侧误读换算。
|
|
198
203
|
- **1.22.12**(2026-08-26)
|
|
199
204
|
- 修复:**状态文件跟启动目录漂移**。自选/登录/界面状态原先落在 dsh web 的启动目录(cwd=工作区根)——换目录启动就"换一套状态"。现在优先写 `$DSH_HOME/dsh-xueqiu/`(稳定目录,writeText 自动建目录);沙箱策略拒绝工作区外绝对路径写入时探测失败,透明回退旧工作区行为(零回归);读取时稳定文件缺失则回读旧工作区文件,存量数据无缝迁移(首次保存落到稳定目录,旧文件不删)。`qa/state-paths.mjs` 11 例覆盖四种模式(稳定/迁移/回退/首启)。注意:host 侧改动需重启 dsh web 生效,迁移发生在重启后首次写入。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-xueqiu",
|
|
3
|
-
"version": "1.22.
|
|
3
|
+
"version": "1.22.14",
|
|
4
4
|
"description": "雪球 mini 行情面板 — DeepSeek Harness 免登录 A股/港美股实时行情、K线(蜡烛/成交量/均线)、分时图、热榜、搜索、7x24 快讯、热议用户。嵌入式面板 + 可拖拽行情徽标,内置请求节流、TTL 缓存与 Cookie 自动续期。",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"dsh",
|
|
@@ -16,12 +16,12 @@
|
|
|
16
16
|
"license": "MIT",
|
|
17
17
|
"repository": {
|
|
18
18
|
"type": "git",
|
|
19
|
-
"url": "git+https://github.com/
|
|
19
|
+
"url": "git+https://github.com/wanderer-yk/dsh-xueqiu.git"
|
|
20
20
|
},
|
|
21
21
|
"bugs": {
|
|
22
|
-
"url": "https://github.com/
|
|
22
|
+
"url": "https://github.com/wanderer-yk/dsh-xueqiu/issues"
|
|
23
23
|
},
|
|
24
|
-
"homepage": "https://github.com/
|
|
24
|
+
"homepage": "https://github.com/wanderer-yk/dsh-xueqiu#readme",
|
|
25
25
|
"type": "module",
|
|
26
26
|
"main": "src/index.js",
|
|
27
27
|
"exports": {
|