npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

leek-box-cli

v0.5.2

Published

韭菜盒子, 终端股票自选股看板, 基于 Ink 构建的交互式 CLI 工具

Readme

leek-box-cli(韭菜盒子)

基于 Ink 的交互式终端自选股票看板, 支持 Linux, macOS 和 Windows.

npm version Downloads per Month Downloads per Year GitHub stars Node.js pnpm License: MIT

截图

自选股票看板

菜单与设置

自选股管理

股票详情

功能

  • 实时看板: 启动即展示自选股的现价, 涨跌幅, 涨跌额, 今开, 最高, 最低, 成交量, 成交额, 换手率和总市值; 默认每 5 秒刷新.
  • 行选择与详情: / 选择股票, enter 打开基础行情和趋势图; 数字键 1-6 切换分时, 五日, 日 K, 周 K, 月 K 和年 K.
  • 多周期行情: 分时与五日分钟走势每 30 秒刷新; 日 K, 周 K, 月 K 和年 K 每 5 分钟刷新.
  • 刷新控制: r 立即刷新; 在设置页以 500 ms 步进调整自动刷新间隔, 范围为 1-60 秒.
  • 自选股管理: 支持添加, 删除沪深北 A 股与 ETF; 股票代码可写为 600000, sh600000, 600000.SH 等形式.
  • 容错展示: 停牌, 部分行情缺失和刷新失败均有独立状态; 后续轮询成功后自动恢复.
  • 界面语言: 支持简体中文, 繁体中文和英文; 默认跟随系统语言, 也可在设置页固定. 切换后界面文案与行情单位立即生效, 例如 61.1万手 在英文下显示为 611.0K lots.

交互方式

  • esc: 打开菜单; 详情已打开时优先关闭详情, 菜单已打开时关闭菜单.
  • 菜单内使用 /, enter 或数字键选择页面.
  • 看板内使用 /, enter, r.
  • 设置页使用 / 选择配置, 使用 /enter 调整; d 恢复默认值.
  • 设置页的 界面语言自动 / 简体中文 / 繁體中文 / English 之间循环; 自动 表示跟随系统.
  • 股票详情内使用 1-6 切换 分时, 五日, 日 K, 周 K, 月 K, 年 K.
  • q: 没有菜单或详情浮层时退出; 浮层打开时不退出, 避免误触.
  • 状态栏右侧显示 Asia/Shanghai 时区的 YYYY-MM-DD HH:MM:SS.

语言检测顺序为 LC_ALL, LC_MESSAGES, LANG, 均为 C/POSIX 或无法识别时再使用 Node 的 Intl 系统区域; 仍然无法识别时使用简体中文. 例如 LANG=zh_TW.UTF-8 leek-box-cli 会以繁体启动, LANG=en_US.UTF-8 leek-box-cli 会以英文启动; 设置页里选定的语言优先于系统语言, leek-box-cli -h 的帮助文本也遵循已配置的语言.

环境要求

行情通过 Node.js 原生 fetch 获取, 无 curl 等外部运行工具依赖.

行情数据源

  • 实时行情: 腾讯行情接口 https://qt.gtimg.cn/q=..., GBK 编码, 无需鉴权.
  • 当日分时: 腾讯分时接口 https://web.ifzq.gtimg.cn/appstock/app/minute/query?code=....
  • 五日分时: 腾讯多日分时接口 https://web.ifzq.gtimg.cn/appstock/app/day/query?code=....
  • 日 K, 周 K, 月 K: 腾讯前复权 K 线接口 https://web.ifzq.gtimg.cn/appstock/app/fqkline/get?param=....
  • 年 K: 使用同一接口的后复权月 K, 在本地按年份聚合.
  • 数据实时性和可用性以接口实际返回为准, 仅用于个人展示用途.

安装与运行

全局安装 (推荐)

npm install -g leek-box-cli
# 或
pnpm add -g leek-box-cli
# 或
yarn global add leek-box-cli

之后即可在任意目录运行:

leek-box-cli

运行命令的机器需要 Node.js 22.19+ (或 24+).

也可以免安装直接运行一次:

npx leek-box-cli
# 或
pnpm dlx leek-box-cli

从源码运行

pnpm install

# 开发模式
pnpm dev

# 构建并运行
pnpm build
pnpm preview

也可以通过子命令指定初始页面:

leek-box-cli               # 自选股票看板
leek-box-cli stock-list    # 同上
leek-box-cli stock-add     # 添加自选股
leek-box-cli stock-remove  # 删除自选股
leek-box-cli settings      # 设置界面语言, 主题与请求参数
leek-box-cli -v            # 查看版本
leek-box-cli -h            # 查看帮助

设置与自选股存储

设置与自选股一起保存在 $XDG_CONFIG_HOME/leek-box-cli/settings.json; 未设置 XDG_CONFIG_HOME 时, Linux 和 macOS 使用 ~/.config/leek-box-cli/settings.json, Windows 使用 %APPDATA%\leek-box-cli\settings.json.

Windows 兼容说明: 读取配置时会自动去除记事本等编辑器写入的 UTF-8 BOM, 因此手动编辑 settings.json 后不会因 BOM 导致解析失败.

文件结构为:

{
  "language": "auto",
  "theme": {
    "preset": "classic",
    "trendColorMode": "red-up",
    "borderStyle": "round"
  },
  "request": {
    "timeoutMs": 8000,
    "minimumDurationMs": 0,
    "quotePollIntervalMs": 5000,
    "minuteChartPollIntervalMs": 30000,
    "klinePollIntervalMs": 300000
  },
  "stocks": [
    {
      "code": "sh600000",
      "name": "浦发银行",
      "addedAt": "2026-08-20T00:00:00.000Z"
    }
  ]
}

程序每次刷新看板都会重新读取文件, 因此合法的外部编辑会在下一轮刷新生效. 读取时会校验 language, theme, request 以及每只股票的 code, name, addedAt 和重复代码; 写入使用进程间锁与临时文件原子替换, 避免并发读改写丢失和半截 JSON.

language 取值为 auto, zh-hans, zh-hanten; 该字段与 theme.trendColorMode 一样可以省略, 省略时按 auto 处理.

开发脚本

| 命令 | 说明 | | ----------------- | ------------------------------ | | pnpm dev | 使用 tsx 运行源码 | | pnpm build | 使用 Vite 构建 dist/main.mjs | | pnpm preview | 运行构建产物 | | pnpm mock | 写入示例自选股, --reset 覆盖 | | pnpm test | 使用 Vitest 运行测试 | | pnpm typecheck | TypeScript 类型检查 | | pnpm lint | Lint 并自动修复 | | pnpm lint:check | 仅检查 Lint | | pnpm fmt | 格式化代码 | | pnpm fmt:check | 检查格式 | | pnpm release | 交互式发布 (递增版本 + tag) |

发布

发布通过 pnpm release 完成, 这是基于 Ink 的交互式命令, 负责递增版本, 创建 release commit 和 tag:

pnpm release

执行流程:

  1. 校验 package.json 无未提交改动, 并读取当前版本.
  2. 选择发布类型: patch (0.0.x), minor (0.x.0) 或 major (x.0.0); 使用 / + enter, 或直接按 1/2/3.
  3. 自动更新 package.jsonversion, 创建提交 chore(release): vX.Y.Z 和标签 vX.Y.Z (仅本地).
  4. 选择是否推送到远端: 默认为 否, 仅保留本地, 防止误推送; 选择 会把当前分支和标签一并推送到 origin.

若此处未推送, 之后可手动推送:

git push && git push origin vX.Y.Z

推送 v* 标签会触发 GitHub Actions (.github/workflows/release.yml): 校验标签与 package.json 版本一致, 依次执行 fmt:check, lint:check, typecheck, testbuild, 创建 GitHub Release, 并在仓库配置了 NPM_TOKEN 时发布到 npm.

技术栈

  • TypeScript / ESM
  • Ink 7 + React 19
  • Zustand 5
  • meow
  • Vite
  • oxlint / oxfmt
  • Vitest