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

@unieai/uad-machine-metrics

v0.1.21

Published

What a machine is doing right now: processor, memory, disk, and accelerators

Readme

@unieai/uad-machine-metrics

English | 中文

一个 session 所跑的那台机器此刻在做什么:处理器、内存、磁盘,以及各家厂商工具愿意报告的加速器。

一个服务,一个方法

ctx.machineMetrics.sample(signal) 透过 ctx.subprocess 跑一条 shell 命令,再解析拿回来的东西。这里不推送、不轮询,一次调用之后除了「算百分比所需的那一份读数」什么都不留。

走 ctx.subprocess,而不是走 Node。 os.cpus() 与 /proc 读的是调用它们的那个进程,也就是永远是这台电脑。一个人把 session 指向一台 GPU 主机、却盯着自己笔电的仪表,读到的是一个和真话长得一模一样的谎。subprocess 这道缝正是 execution-router 已经对准了「他挑的那台机器」的那一道,所以远端读数与本机读数是同一条代码路径,而本套件从头到尾不需要知道「机器」这回事。

一条命令,而不是五条。 每一次读取都是一趟往返;如果处理器、内存、磁盘与加速器分开问,一台 30 ms 链路上的机器每轮要花掉四分之一秒。这条命令把每一段都放在 @dsh: 标记后面输出,由解析器切开。

每一段都有保护。 一台没有 /proc、没有 nvidia-smi、也没有 npu-smi 的机器跑的是同一条命令,只是那几段输出为空。所以这条命令在一个裸容器上和在一台 GPU 主机上都以 0 结束,而传到调用端的失败讲的是连线,而不是缺了某个工具。

没量到的就是没有

每一个字段都是可选的,读不到的那个回来是 undefined——绝不是 0。给一个没人量过的读数画一条 0% 的仪表,是一个会让人照着做决定的谎:它说这台机器闲着,而这跟「没量」是两回事。

这条规则决定了好几个细节:

  • 一台机器的第一次采样不报处理器百分比。 /proc/stat 是累计值,所以百分比是两次读数之差。服务保留上一次再相减,这正是 top 的做法;另一条路是让命令在机器上睡一秒,每一轮都睡,把连线开着什么也不做。
  • 计数器没有前进、或者倒退了,就什么都不报,而不是除以零或报出负数——两次轮询落在同一个时钟节拍里,以及两次轮询之间机器重开机了。
  • world 换掉了,差值就作废。 拿一台机器的计数器去减另一台的,会得出一个数字,而那个数字没有意义;所以路由移动之后的读数从头开始。
  • 内存读的是 MemAvailable 而不是 MemFree。 空闲内存不含页面快取,所以一台健康的 Linux 机器只剩个位数,用它做出来的仪表读起来永远是满的。

可携性,以及它到哪里为止

df -Pk 是 GNU 与 BSD 唯一有共识的 df 形式。Mach 那条路(hw.memsize 加 vm_stat)涵盖 macOS 的内存;macOS 的处理器百分比则根本不读,因为要问它就得让 top 把每个进程完整采样一次,所以一台 Mac 报的是核心数与负载平均,没有百分比。

GPU 读的是 nvidia-smi 的 CSV。NPU 没有对应的东西,所以这里读的是实际会被人接上的那两种形式——Ascend 的 npu-smi info 表格,以及 Rockchip 的 /sys/kernel/debug/rknpu/load——其余一律报告「没有 NPU」,而这也正是一台真的没有 NPU 的机器给出的答案。

Model Experience

无,因为此套件不注册任何 tool、prompt、schema 或 context:它回答的是一条给人看的界面用的宿主路由,任何读数都不会进到模型请求里。

KV Cache effect

无。这里不贡献任何 prompt 片段、工具定义或 context 条目。

Known Limitations and Deferred Work

  • Mac 不报处理器百分比。 Mach 那条路没有一个这条命令能便宜读到的累计计数器;top -l 2 会把每个进程采样两次、要花一秒才回答。Mac 的核心数与负载平均照读,界面上就是少画一条。
  • 只读 NVIDIA 的 GPU。 AMD(rocm-smi)、Intel(xpu-smi)与 Apple 自家 GPU 各有各的工具与输出;要加就是一段命令加一个解析器,之所以没有,是因为还没有人拿那些硬件跑过这套东西。
  • NPU 只涵盖两家,而且都是靠比对文字。 这里认得的是 Ascend 的表格与 Rockchip 的 debugfs 行。厂商改一个栏位名,结果会变成「没有 NPU」而不是一个错的数字——这是刻意选的失败方式,但它仍然是一个没有人被告知的失败。
  • 读数没有历史。 每次采样讲的是此刻;想画趋势线的界面得自己留,这里除了算差值所需的那一份处理器读数之外什么都不保存。
  • 磁盘只有一个文件系统。 就是设定的那个路径所在的那一个——预设是 harness 自己的工作目录。工作横跨好几个挂载点的机器,报的是被问到的那一个,而界面没有办法问另一个。