🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

行情终端 linhut/dsh-stock-terminal

DeepSeek 客户端
linhut50 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

在 Web 界面盯盘自选股并管理持仓盈亏

34.3/100
综合分
7
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/linhut/dsh-stock-terminal.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
生态插件
可安装,未声明 dsh 能力
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 50 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/25) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-stock-terminal(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=18.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/25 17:10:22

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 73 处,展示前 38 条)
  • 发起网络请求
    lib/index.js:240
    const response = await fetch(url, { signal: timeoutSignal(FETCH_TIMEOUT_MS) });
  • 发起网络请求
    lib/index.js:259
    const response = await fetch(`${endpoint}?symbols=${encodeURIComponent(JSON.stringify(symbols))}`, { signal: timeoutSignal(FETCH_TIMEOUT_MS) });
  • 发起网络请求
    lib/index.js:297
    const latestResponse = await fetch(latestUrl, { signal: timeoutSignal(FETCH_TIMEOUT_MS) });
  • 发起网络请求
    lib/index.js:310
    const prevResponse = await fetch(prevUrl, { signal: timeoutSignal(6000) });
  • 发起网络请求
    lib/index.js:494
    const promise = fetch(`${SUGGEST_ENDPOINT}${encodeURIComponent(key)}`, { signal: timeoutSignal(FETCH_TIMEOUT_MS) })
  • 发起网络请求
    lib/index.js:554
    const response = await fetch(url, { signal: timeoutSignal(FETCH_TIMEOUT_MS) });
  • 发起网络请求
    lib/client.js:185
    const response = await fetch(`${endpoint}?symbols=${encodeURIComponent(JSON.stringify(symbols))}`, { signal: timeoutSignal(timeoutMs) });
  • 发起网络请求
    lib/client.js:206
    const latestResponse = await fetch(`${endpoint}/latest?base=${base}&symbols=${symbols}`, { signal: timeoutSignal(8e3) });
  • 发起网络请求
    lib/client.js:215
    const prevResponse = await fetch(`${endpoint}/${isoDaysAgo(date, back)}?base=${base}&symbols=${symbols}`, { signal: timeoutSignal(6e3) });
  • 发起网络请求
    lib/client.js:254
    const response = await fetch(`${STOCK_API_BASE}/quotes?symbols=${encodeURIComponent(list.join(","))}`, { signal: timeoutSignal(timeoutMs) });
  • 发起网络请求
    lib/client.js:291
    const response = await fetch(`${STOCK_API_BASE}/kline?symbol=${encodeURIComponent(symbol)}&count=${count}&period=${period}`, { signal: timeoutSignal(t
  • 发起网络请求
    lib/client.js:511
    const response = await fetch("/plugins/dsh-stock/api/minute?symbol=" + encodeURIComponent(symbol), { signal: controller.signal });
  • 读取本地文件
    tools/verify-pack.mjs:48
    const ok = existsSync(p) && statSync(p).isFile();
  • 读取本地文件
    tools/verify-pack.mjs:48
    const ok = existsSync(p) && statSync(p).isFile();
  • 读取本地文件
    tools/verify-pack.mjs:55
    if (!existsSync(p)) continue;
  • 读取本地文件
    tools/verify-pack.mjs:57
    const parsed = JSON.parse(readFileSync(p, "utf8"));
  • 读取本地文件
    tools/verify-pack.mjs:67
    if (!existsSync(p)) continue;
  • 执行外部命令来自配置/变量
    tools/verify-pack.mjs:68
    const result = spawnSync(process.execPath, ["--check", p], { encoding: "utf8" });
  • 读取本地文件
    tools/verify-pack.mjs:74
    const pkg = JSON.parse(readFileSync(join(ROOT, "package.json"), "utf8"));
  • 读取本地文件
    tools/check-dsh-compliance.mjs:74
    return readFileSync(p, "utf8");
  • 读取本地文件
    tools/check-dsh-compliance.mjs:84
    if (!existsSync(dir)) return -1;
  • 读取本地文件
    tools/check-dsh-compliance.mjs:86
    for (const name of readdirSync(dir)) {
  • 读取本地文件
    tools/check-dsh-compliance.mjs:90
    try { isDir = statSync(p).isDirectory(); } catch { continue; }
  • 读取本地文件
    tools/check-dsh-compliance.mjs:136
    if (bundleOk && !existsSync(join(ROOT, bundle.patch))) {
  • 读取本地文件
    tools/check-dsh-compliance.mjs:154
    for (const f of ["lib/index.js", "lib/client.js"]) if (existsSync(join(ROOT, f))) {
  • 写入本地文件
    tools/check-dsh-compliance.mjs:403
    writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + "\n", "utf8");
  • 写入本地文件
    tools/check-dsh-compliance.mjs:421
    writeFileSync(skinPath, JSON.stringify(skinJson, null, 2) + "\n", "utf8");
  • 写入本地文件
    tools/check-dsh-compliance.mjs:430
    writeFileSync(shotsPath, JSON.stringify(["assets/" + candidates[0]], null, 2) + "\n", "utf8");
  • 读取本地文件
    tools/install-local.mjs:55
    try { names = readdirSync(dir); } catch { return out; }
  • 读取本地文件
    tools/install-local.mjs:61
    try { isDir = statSync(p).isDirectory(); } catch { continue; }
  • 读取本地文件
    tools/install-local.mjs:63
    else out.push({ rel, size: statSync(p).size });
  • 读取本地文件
    tools/install-local.mjs:69
    const missing = REQUIRED.filter((f) => !existsSync(join(SRC, f)));
  • 读取本地文件
    tools/install-local.mjs:82
    if (!existsSync(p)) continue;
  • 读取本地文件
    tools/install-local.mjs:83
    if (statSync(p).isDirectory()) {
  • 写入本地文件
    tools/install-local.mjs:124
    writeFileSync(HOME_PATCH, text, "utf8");
  • 删除本地文件递归
    tools/install-local.mjs:130
    rmSync(DEST, { recursive: true, force: true });
  • 写入本地文件
    tools/install-local.mjs:144
    writeFileSync(HOME_PATCH, kept.join("\n").trim() + "\n", "utf8");
  • 写入本地文件
    tools/install-local.mjs:164
    mkdirSync(DEST, { recursive: true });
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

1 张 · 点击查看大图

功能亮点

  • 实时行情面板
  • 自选跑马灯
  • 持仓盈亏管理

股市行情皮肤+功能插件:DSH Web GUI 全局交易终端视觉 + 实时行情面板(A股/港股/美股/加密/外汇),自选跑马灯、首字母模糊搜索、持仓盈亏管理

README

由 DeepSeek 最新模型翻译生成
📈 dsh-stock-terminal · 股市行情皮肤 + 功能插件 DSH Web GUI(DeepSeek Harness)行情皮肤与功能插件:全局交易终端视觉 + 实时行情面板。 自选跑马灯、首字母模糊搜索、持仓盈亏管理,A股 / 港股 / 美股 / 指数 / 加密 / 外汇一站式盯盘。 License Platform Version CI awesome-dsh-plugin ✨ 功能亮点 | 能力 | 说明 | | 🎨 交易终端皮肤 | 顶栏 K 线品牌图标 + 标题 + 持仓摘要芯片 + 设置齿轮 + 仿终端窗口按钮;红涨绿跌(亮/暗双主题完整 CSS 变量切换);自定义 K 线 favicon 和页面标题 | | 📢 实时行情跑马灯 | 自选列表无缝循环滚动,hover 暂停;点击任一品种弹出个股 K 线图(日K/周K/月K 可切换) |
展开完整文档(README 剩余 1 节)
📈 dsh-stock-terminal · 股市行情皮肤 + 功能插件

DSH Web GUI(DeepSeek Harness)行情皮肤与功能插件:全局交易终端视觉 + 实时行情面板。
自选跑马灯、首字母模糊搜索、持仓盈亏管理,A股 / 港股 / 美股 / 指数 / 加密 / 外汇一站式盯盘。

License
Platform
Version
CI
awesome-dsh-plugin

✨ 功能亮点

| 能力 | 说明 |
| 🎨 交易终端皮肤 | 顶栏 K 线品牌图标 + 标题 + 持仓摘要芯片 + 设置齿轮 + 仿终端窗口按钮;红涨绿跌(亮/暗双主题完整 CSS 变量切换);自定义 K 线 favicon 和页面标题 |
| 📢 实时行情跑马灯 | 自选列表无缝循环滚动,hover 暂停;点击任一品种弹出个股 K 线图(日K/周K/月K 可切换) |
| 📈 个股 K 线弹窗 | 日K / 周K / 月K 一键切换;鼠标滚轮缩放(锚点缩放,20~200 根)+ 拖拽平移查看历史/近期;十字光标(hover 竖线+横线 + OHLC 浮层 + 价格轴/日期轴联动标注);蜡烛图 + MA5/MA10 均线 + 成交量幅图 + 价格/日期轴 + 网格 + 区间涨跌统计;Esc/遮罩/✕ 关闭;窗口 resize 自适应重绘;A股/港股/指数走腾讯前复权,美股腾讯不足时回退 Yahoo,加密货币走 Binance;服务端 60s 缓存 + 在途去重 |
| 🧭 自选列表 | 增删 / ↑↓ 排序 / 移除;拼音首字母 + 代码 + 名称模糊搜索联想(如 gzmt → 贵州茅台、600519、茅台),内置 130+ 品种词典 + 在线 API 兜底,键盘 ↑↓ Enter Esc 操作 |
| 💼 持仓管理 | 模糊搜索添加持仓(与自选同款联想体验);代码 + 数量 + 成本价 → 现价 / 市值 / 浮动盈亏 / 盈亏率,底部汇总总市值 / 总盈亏 / 总盈亏率;编辑 / 删除持仓 |
| 🔔 持仓盯盘提醒 | 每个持仓可设「盯盘高价 / 盯盘低价」(≥高价触发涨提醒、≤低价触发跌提醒),一次预警后标记已触发可手动重置重新武装;持仓行🔔快捷设置 + 表单字段双入口;状态栏实时显示激活盯盘数;触发时页面 Toast + 浏览器桌面通知(Notification API)双重提醒,首次设置时自动请求授权 |
| 🏷 标题栏持仓摘要 | 持仓个股名称 + 涨跌幅按标题栏宽度自适应显示,超宽时自动收起为「等 N 只」+ 总盈亏芯片;窗口 resize 重新适配 |
| 📏 伸缩条 | 拖动面板顶部伸缩条调整面板高度(替代 CSS resize 右下角把手),高度持久化到 localStorage |
| ⏱ 交易时段 | 状态栏实时显示 A股 / 港股 / 美股 盘中·午休·盘前·休市,每分钟自动刷新(Intl.DateTimeFormat 按 Asia/Shanghai、Asia/Hong_Kong、America/New_York 判定) |
| 📊 指数快照 | 状态栏中部实时快照:上证 / 深成 / 创业板 / 恒指 / 道指 / 纳指 |
| 🔔 状态栏总盈亏 | 状态栏右侧显示持仓总盈亏 / 总盈亏率,随行情实时更新 |
| ⚙ 三入口设置 | 状态栏「行情」按钮 + 标题栏齿轮 + 面板内「设置」页签;DSH 系统设置侧边栏出现独立「股市行情」分区(可管理刷新间隔 / 跑马灯开关 / 自选 / 持仓) |
| 🔄 刷新间隔可调 | 15 / 30 / 60 秒可调(系统设置卡与面板内设置同步),页面隐藏时暂停轮询、回到前台立即刷新 |
| 🗃 数据持久化 | 自选 / 持仓 / 面板高度 / 刷新间隔 / 跑马灯开关 全部存浏览器 localStorage,重开不丢 |
| 🌙 亮暗双主题 | 完整跟随 DSH 深色/浅色主题,全套 CSS 变量切换,跑马灯 / K 线 / 面板 / 状态栏所有元素适配 |
| 🛡 故障容错 | 全部数据源失败 toast 一次性提示并自动重试;代理失败自动降级浏览器直连;宿主 apply 全部 try/catch 容错,模块零第三方依赖,坏也只影响自身功能,不影响 DSH 本体 |

📦 安装

本插件为 DSH Web GUI 外部插件,支持以下三种安装方式。

方式一:CLI 一键安装(推荐 ⭐)

DSH 自带 dsh plugin 命令(对 pnpm 的封装),会自动完成依赖安装 + bundle 注册:

dsh plugin --profile web add github:linhut/dsh-stock-terminal

执行后你会看到类似输出:

dependencies:
+ @linxin666/dsh-client-ui-skin-stock github:linhut/dsh-stock-terminal
使用 pnpm v11.22.0 在 8.3 秒内完成

它自动做了三件事:

1. 安装依赖 → 写入 ~/.dsh/profiles/web/package.json 的 dependencies
2. 注册 bundle → 把 @linxin666/dsh-client-ui-skin-stock 追加进 dsh.profile.bundles(与 dsh-web-ui-all、modlens 同队列)
3. 文件就位 → node_modules/@linxin666/dsh-client-ui-skin-stock/ 下 lib/skin.json/patch 齐全

然后重启 dsh web 使 bundle 加载生效:

找到当前 dsh web 进程 PID 杀掉后重新启动重启:dsh web(或 node /lib/bin.js web)

常见问题
- 提示 allowBuilds / Ignored build scripts → 把 @linxin666/dsh-client-ui-skin-stock 加入 ~/.dsh/profiles/web/pnpm-workspace.yaml 的 allowBuilds 列表后重跑该命令
- dsh plugin 命令不存在 → DSH 版本过旧,升级至 0.1.0-rc.6 或更新
- 已安装过旧版本想更新 → dsh plugin --profile web update @linxin666/dsh-client-ui-skin-stock

方式二:手动安装

适合离线环境 / 二次开发调试:

① 编辑 ~/.dsh/cordis.patch.yml(home 层补丁,只写这一处,勿在多层重复写同一 id):

- insert:
- id: ui-skin-stock
name: '@linxin666/dsh-client-ui-skin-stock'

② 把仓库复制到 profile 的 node_modules:

git clone https://github.com/linhut/dsh-stock-terminal.git \
~/.dsh/profiles/web/node_modules/@linxin666/dsh-client-ui-skin-stock

③ 重启 dsh web(见方式一的重启说明),刷新浏览器即可。

方式三:插件市场安装

DSH 官方插件市场(dsh-market)的插件目录来自 awesome-dsh-plugin 精选列表(线上 https://awesome-dsh-plugin.com/plugins.json 实时生成)。

本插件已提交收录 PR #1766,合并后(通常 1 天内)即可在 设置 → 插件市场 搜索 stock 一键安装。

⚠️ 注意(2026-08-19):@linxin666/dsh-client-ui-skin-stock 已从 npm registry 下架(E404)。
方式一 / 方式三 不再可用(install 会失败并可能损坏依赖树);请改用方式四 本地安装,或使用方式二手动安装。

方式四:本地一键安装(推荐 ⭐ 2026-08-19 起)

包已下架后,推荐使用仓库内置的本地安装脚本——完全绕过 npm registry,直接文件拷贝 + 写入 patch,绝不触发 install(避免上次事故的依赖树残缺问题):

node tools/install-local.mjs

脚本自动完成:

1. 校验源目录完整性(lib/client.js / lib/index.js / skin.json / package.json / screenshots.json / assets/screenshot.png 必须齐全)
2. 拷贝文件(lib / skin.json / package.json / cordis.patch.yml / screenshots.json / assets)到 ~/.dsh/profiles/web/node_modules/@linxin666/dsh-client-ui-skin-stock/
3. 写入 patch到 ~/.dsh/cordis.patch.yml(幂等,重复运行不产生重复条目)
4. 校验安装副本:逐文件对比源目录与目标目录的文件名 + 字节数

参数:

指定 profile
node tools/install-local.mjs --profile C:\Users\xxx\.dsh\profiles\web

卸载(删除文件与 patch 条目,保留浏览器本地数据)
node tools/install-local.mjs --dispose

首次接线后需重启 dsh web 生效;之后更新文件无需重启(刷新浏览器即可)。

安装后

1. 重启 dsh web(杀进程重新启动,或 Ctrl+C 后重跑启动命令)
2. 刷新浏览器(Ctrl+F5 硬刷新清除缓存)
3. 应看到股市主题的标题栏,底部状态栏出现「行情」按钮
4. 点击「行情」打开面板 → 添加自选股开始使用

卸载

CLI 方式安装的
dsh plugin --profile web remove @linxin666/dsh-client-ui-skin-stock

手动方式安装的,删除 home 补丁行编辑 ~/.dsh/cordis.patch.yml,删掉 ui-skin-stock 那一块 insert,保存

重启 dsh web 生效

卸载不影响 DSH 本体运行。宿主 apply 全部 try/catch 容错,模块零第三方依赖,坏也只影响自身功能。
回退到旧版本:dsh plugin --profile web install @linxin666/dsh-client-ui-skin-stock@ 或手动切换 git tag。

🎯 数据源与符号语法

| 语法 | 示例 | 含义 | 数据源 |
| sh + 6 位 | sh600519 贵州茅台 | 沪市 A 股 / 上证指数 | 腾讯行情 |
| sz + 6 位 | sz000001 平安银行 · sz399001 深证成指 | 深市 | 腾讯行情 |
| hk + 5 位 | hk00700 腾讯控股 · hkHSI 恒生指数 | 港股 / 恒指 | 腾讯行情 |
| us + 代码 | usAAPL 苹果 · usDJI 道指 · usIXIC 纳指 | 美股 / 美指 | 腾讯行情 |
| 大写组合 | BTCUSDT ETHUSDT… | 加密货币(24h) | Binance |
| AAA/BBB | USD/CNY | 外汇(美元等基准) | Frankfurter |

数据由宿主端聚合代理统一拉取(/plugins/dsh-stock/api/quotes,GBK 解码、超时降级),浏览器零 CORS;代理不可用时自动降级为浏览器直连。

🔍 搜索联想

支持以下方式模糊匹配(取前 8 条):

- 拼音首字母:gzmt → 贵州茅台、csbm → 常山北明、zsyh → 招商银行
- 代码:600519、000158、AAPL、BTC…
- 名称:茅台、苹果、比亚迪…(中英文子串)

内置 130+ 常用品种词典秒出结果;词典未收录的品种自动走在线兜底——宿主代理新浪股票建议 API(/plugins/dsh-stock/api/suggest,GBK 解码、300ms 防抖),任意 A股 / 港股 / 美股 / 指数输入代码、简称或拼音首字母即可联想。

键盘 ↑↓ 选择、Enter 添加、Esc 关闭。

📁 项目结构

dsh-stock-terminal/
├── lib/
│ ├── index.js # 宿主端:行情聚合代理 /plugins/dsh-stock/api/quotes + /suggest + /kline │ └── client.js # 浏览器端:皮肤 chrome + 行情面板(自选/持仓/设置)+ K 线弹窗 + 系统设置卡 ├── skin.json # 皮肤注册元数据(id: stock,wiring: ui-skin-stock) ├── package.json # DSH 插件包清单(dsh.client / dsh.bundle 元数据) ├── cordis.patch.yml # 插件接线 ├── assets/ │ └── screenshot.png ├── screenshots.json # dsh-market 截图声明(指向 assets/screenshot.png) ├── tools/ │ ├── install-local.mjs # 本地一键安装(绕过 npm registry) │ ├── check-dsh-compliance.mjs # DSH 规范合规检查(见下方「合规检查」) │ └── verify-pack.mjs # prepare/verify 产物自检(语法 + 白名单) ├── .github/workflows/ci.yml # CI:合规 + 自检 + 单测 + pack dry-run ├── CHANGELOG.md # 版本变更记录(Keep a Changelog 格式) └── README.md

仓库只同步必要性源代码与发布文件;tests/ 与依赖锁文件仅留在本地开发环境(.gitignore 排除),不纳入版本库。

⚙️ 集成方式

两种接线机制

| 方式 | 注册位置 | 适用场景 |
| profile bundle(CLI 安装自动) | ~/.dsh/profiles/web/package.json → dsh.profile.bundles | 推荐;与 dsh-web-ui-all、modlens 同队列 |
| home patch(手动安装) | ~/.dsh/cordis.patch.yml → insert | 离线 / 二次开发 |

⚠️ 重要注意事项

- 切勿把同一 insert 同时写进 profile patch 与 home patch —— 两层叠加会产生重复 loader entry id,触发 DSH fail-loud 启动保护(曾因此导致 web 无法启动)
- 皮肤中心(dsh-client-ui-skin-center)可识别本皮肤(skin.json 位于 node_modules/@linxin666/ 下);其切换皮肤时可能将本行视为 legacy 皮肤行移除,重加该行即可(CLI 方式装的 bundle 不受此影响)
- DSH 系统设置侧边栏出现独立「股市行情」分区 —— 可管理刷新间隔、自选列表、持仓信息,与面板内数据双向同步(同一份 localStorage 读写)

🛠 技术要点

- 红涨绿跌配色:up #e02e3d / dark #f23645,down #089981,平灰;深色主题整套 CSS 变量切换
- Intl.DateTimeFormat 按 Asia/Shanghai、Asia/Hong_Kong、America/New_York 实时判定交易时段
- 数据轮询 30s(可调 15/30/60s),ctx.effect 一次性收回所有 DOM / 定时器
- 客户端形态:window.__ModuleLoader__.load({ id, factory }),exports.apply + exports.inject(slots / settingsScope),设置卡走 slots.inject("settings.section")
- Canvas 蜡烛图绘制:日K/周K/月K 自适应、MA5/MA10 均线、成交量幅图、网格+价格+日期轴

🛡 可靠性设计
- 宿主端短 TTL 缓存 + 在途请求去重:quotes 5s / suggest 30s / kline 60s 缓存,并发同参数请求共享同一次上游拉取(上限 128 条防无界增长)
- 符号规范化:SH600519 等大写市场前缀自动转小写(外汇对 USD/CNY 保持原样)
- 轮询调度:setTimeout 链式调度(上一次完成再排下一次)+ 在途请求守卫;页面隐藏时暂停轮询,回到前台立即刷新
- 跑马灯不闪跳:行情刷新只原地更新数字,不重建 DOM,动画位置不被重置
- 联想防竞态:搜索建议加序号计数器,慢的旧请求不会覆盖新输入的结果
- 故障降级提示:全部数据源失败时 toast 一次性提示并自动重试;代理失败自动降级浏览器直连
- 设置双向即时生效:系统设置卡修改刷新间隔/跑马灯后,面板轮询与跑马灯立即重排(自定义事件同步)
- K 线周期自适应:服务端原生支持 day/week/month(腾讯 fqkline / Binance / Yahoo);客户端聚合 fallback 确保不重启也能用
- 最新 DSH API 兼容:服务器设置接入采用 ctx.inject(["settings"]) + ctx.settings.installSection(dsh-settings ≥ 0.1.0-rc.x 官方新 API,已移除的 installSettingsSection/settingsNamespace 不再使用);客户端设置卡走 slots + settingsScope 服务,两侧均为当前官方接线
- DSH 规范合规:官方 harness 运行时包按规则声明(@deepseek-ai/schemastery 进 dependencies、客户端 react 进 peerDependencies),皮肤元数据与 bundle 接线一致(skin.json bundleWired: true),文本文件一律 UTF-8 无 BOM(显式 readFileSync(path, "utf8"),规避 Windows 默认 GBK 解码乱码)
- 防御式边界:quotes 最多 200 个符号、kline count 20–320、suggest key 1–50、分时点数上限 480;全部路由同源护栏(跨站 403)+ 8s 超时 + 失败独立降级

✅ 合规检查

按最新 DSH 要求与规则(awesome-dsh-plugin 收录审核 Checklist + DeepSeek Harness 官方文档 + skin-center 接线规则)自动校验插件元数据与内部逻辑:

npm run check:compliance # 等价 node tools/check-dsh-compliance.mjs
node tools/check-dsh-compliance.mjs --fix # 自动修复可修复项
node tools/check-dsh-compliance.mjs --quiet # 只输出 FAIL

检查项(21 项,逐项独立上报,失败退出码 1):

| 检查项 | 依据 |
| pkg.manifest / pkg.bundle-patch-exists | dsh.bundle.patch 必须声明且指向存在的文件(只声明 dsh.client 不可安装) |
| pkg.client | 带 UI 时 platform 应为 web |
| pkg.imports | 静态扫描 lib/.js 的 import/require(react 子路径归并),未声明依赖会被报出 |
| pkg.peer-deps:harness | 官方 harness 运行时包(@deepseek-ai/dsh-)必须 peerDependencies 且范围带显式预发布分支 |
| pkg.peer-deps:react | 客户端 bundle require("react") → peerDependencies 须声明 react(skin-center 约定) |
| pkg.client-inject | 客户端 exports.inject 服务(slots/settingsScope)与 dsh.client.inject 提供方 bundle 两侧一致 |
| pkg.prepare | prepare 脚本存在(git 源安装不构建 → 必须有自检;本仓库为 verify-pack.mjs) |
| pkg.files-cover-screenshots | files 白名单覆盖 screenshots.json 引用(发布包自洽) |
| pkg.settings-api-current | 服务器 settings 必须用 ctx.inject(["settings"]) + installSection(旧 API 已移除) |
| pkg.config-schema | 服务器导出 export const Config(cordis.yml 组合配置入口) |
| patch.format / patch.unique-id | cordis.patch.yml 结构与 id 规范(ui-skin-)、无重复 id |
| skin.json.meta / skin.bundleWired | id/package/wiring.id 正则(skin-center 规则)与 bundle 接线一致性 |
| screenshots.json | 市场截图声明:1-8 张、相对路径不出目录 |
| encoding.utf8-no-bom | 文本文件(含 SKILL.md 若存在)必须 UTF-8 无 BOM |
| sync.symbol-rules | 前后端符号分类/规范化规则一致(公共约定两侧同源) |
| input.key-trim | suggest key 校验 min/max 基于同一 trim 后的值 |
| input.minute-symbol | minute 路由与 kline 一致校验 classifySymbol(防御式公共约定) |
| ci.present | .github/workflows CI 存在(收录 Checklist:CI 证明真实可调用) |

自检与测试

npm run verify # 产物自检(prepare 等价):必备文件 + JSON 可解析 + node --check 语法 + 白名单自洽
npm test # 开发期本地单测(tests/ 不纳入版本库,见「项目结构」说明)

各脚本读取文件一律显式 utf8,不依赖 Windows 默认编码;检查工具用 fatal 模式 TextDecoder 校验 UTF-8 合法性,防止 GBK 解码乱码导致误判。

🧩 标签 / Topics

dsh-plugin · deepseek-harness · web-ui · skin · stock · 行情 · 跑马灯 ·自选股 · 持仓 · K线 · trading-terminal · ticker

📄 License

Apache-2.0

由 linhut 维护,已提交 awesome-dsh-plugin 收录。*
预览分享卡片长什么样 ↓linhut/dsh-stock-terminal
分享 · DeepSeek Harness Hub
linhut/dsh-stock-terminal

在 Web 界面盯盘自选股并管理持仓盈亏

回到顶部