@mcptoolshop/registry-stats 2.0.0 → 2.2.0
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/README.es.md +134 -130
- package/README.fr.md +134 -130
- package/README.hi.md +134 -130
- package/README.it.md +134 -130
- package/README.ja.md +134 -130
- package/README.md +18 -11
- package/README.pt-BR.md +134 -130
- package/README.zh.md +134 -130
- package/package.json +2 -2
package/README.zh.md
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
<p align="center">
|
|
2
|
-
<a href="README.ja.md">日本語</a> | <a href="README.md">English</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
|
|
3
|
-
</p>
|
|
4
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="README.ja.md">日本語</a> | <a href="README.md">English</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
5
|
<p align="center">
|
|
6
6
|
<img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/registry-stats/readme.png" alt="registry-stats logo" width="400" />
|
|
7
7
|
</p>
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
<p align="center">
|
|
10
10
|
Five registries. One engine. Dashboard included.
|
|
11
11
|
</p>
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
<p align="center">
|
|
14
14
|
<a href="https://github.com/mcp-tool-shop-org/registry-stats/actions/workflows/pages.yml"><img src="https://github.com/mcp-tool-shop-org/registry-stats/actions/workflows/pages.yml/badge.svg" alt="CI"></a>
|
|
15
15
|
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="MIT License"></a>
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
<a href="https://mcp-tool-shop-org.github.io/registry-stats/dashboard/"><img src="https://img.shields.io/badge/Dashboard-live-green" alt="Dashboard"></a>
|
|
18
18
|
<a href="https://mcp-tool-shop-org.github.io/registry-stats/"><img src="https://img.shields.io/badge/Landing_Page-live-blue" alt="Landing Page"></a>
|
|
19
19
|
</p>
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
<p align="center">
|
|
22
22
|
<a href="#dashboard">Dashboard</a> ·
|
|
23
23
|
<a href="#desktop-app">Desktop App</a> ·
|
|
@@ -28,53 +28,57 @@
|
|
|
28
28
|
<a href="#config-file">Config</a> ·
|
|
29
29
|
<a href="#license">License</a>
|
|
30
30
|
</p>
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
---
|
|
33
|
-
|
|
34
|
-
您可以在 npm、PyPI、NuGet、VS Code Marketplace 以及 Docker Hub 上发布。目前,要了解“我的软件包表现如何?”,您需要查看五个不同的网站。**registry-stats** 是一个完整的平台:一个 TypeScript 引擎(命令行工具 + API + REST 服务器),一个实时 Web 控制面板,以及一个原生 Windows 桌面应用程序——所有这些都来自一个代码仓库。
|
|
35
|
-
|
|
36
|
-
没有运行时依赖。使用原生的 `fetch()` 方法。Node 18 或更高版本。
|
|
37
|
-
|
|
38
|
-
## 包含内容
|
|
39
|
-
|
|
40
|
-
| 层级 | 功能 |
|
|
41
|
-
|-------|-------------|
|
|
42
|
-
| **Engine** | TypeScript 库 + 命令行工具 + REST 服务器。使用一个界面查询五个注册中心。已在 npm 上发布为 `@mcptoolshop/registry-stats`。 |
|
|
43
|
-
| **Dashboard** | 基于 Astro 的 Web
|
|
44
|
-
| **Desktop** | 基于 WinUI 3 + WebView2 的原生 Windows 应用程序。将控制面板打包到本地,按需获取实时统计数据。 |
|
|
45
|
-
|
|
46
|
-
## 控制面板
|
|
47
|
-
|
|
48
|
-
一个自动更新的统计信息控制面板位于 [`/dashboard/`](https://mcp-tool-shop-org.github.io/registry-stats/dashboard/)。
|
|
49
|
-
|
|
50
|
-
-
|
|
51
|
-
-
|
|
52
|
-
-
|
|
53
|
-
-
|
|
54
|
-
-
|
|
55
|
-
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
33
|
+
|
|
34
|
+
您可以在 npm、PyPI、NuGet、VS Code Marketplace 以及 Docker Hub 上发布。目前,要了解“我的软件包表现如何?”,您需要查看五个不同的网站。**registry-stats** 是一个完整的平台:一个 TypeScript 引擎(命令行工具 + API + REST 服务器),一个实时 Web 控制面板,以及一个原生 Windows 桌面应用程序——所有这些都来自一个代码仓库。
|
|
35
|
+
|
|
36
|
+
没有运行时依赖。使用原生的 `fetch()` 方法。Node 18 或更高版本。
|
|
37
|
+
|
|
38
|
+
## 包含内容
|
|
39
|
+
|
|
40
|
+
| 层级 | 功能 |
|
|
41
|
+
|-------|-------------|
|
|
42
|
+
| **Engine** | TypeScript 库 + 命令行工具 + REST 服务器。使用一个界面查询五个注册中心。已在 npm 上发布为 `@mcptoolshop/registry-stats`。 |
|
|
43
|
+
| **Dashboard** | 基于 Astro 的 Web 应用程序。提供 AI 聊天助手、6 个交互式图表、智能增长引擎和带选项卡的帮助指南。每周通过 CI 自动重建。 |
|
|
44
|
+
| **Desktop** | 基于 WinUI 3 + WebView2 的原生 Windows 应用程序。将控制面板打包到本地,按需获取实时统计数据。 |
|
|
45
|
+
|
|
46
|
+
## 控制面板
|
|
47
|
+
|
|
48
|
+
一个自动更新的统计信息控制面板位于 [`/dashboard/`](https://mcp-tool-shop-org.github.io/registry-stats/dashboard/)。
|
|
49
|
+
|
|
50
|
+
- **选项卡界面** — Home、Analytics、Leaderboard 和 Help 选项卡
|
|
51
|
+
- **AI 聊天助手** — 基于 Ollama 的 Registry Assistant,支持 RAG 上下文注入、流式响应、模型选择器和对话记忆
|
|
52
|
+
- **执行摘要** — 健康分数(0–100)、多样性指数、周变化、所有注册中心的总下载量
|
|
53
|
+
- **6 个交互式图表** — 30 天趋势(汇总 / 按注册中心 / Top 5 切换)、注册中心份额(极坐标图)、组合风险(分布直方图 + Gini & P90)、Top 10 动量、带迷你图的速度追踪器、以及 30 天热力图(尖峰检测 >2σ)
|
|
54
|
+
- **智能增长引擎** — 处理小分母失真,提供基线阈值、百分比上限和阻尼速度公式
|
|
55
|
+
- **可操作洞察** — 自动生成的建议和下降软件包的注意警报
|
|
56
|
+
- **排行榜** — 所有软件包按周下载量排序,带有 30 天迷你图和智能趋势标记
|
|
57
|
+
- **设置页面** — 组合编辑器、验证功能、registry-sync 配套部分和管道概览
|
|
58
|
+
- **帮助选项卡** — 涵盖每个选项卡、关键概念、AI 助手使用技巧、数据管道和有用链接的友好指南
|
|
59
|
+
- **深色/浅色主题** — 根据系统偏好设置自动切换
|
|
60
|
+
|
|
61
|
+
数据在构建时获取,并每周通过 CI 自动重建(每周一 06:00 UTC)。在 `site/src/data/packages.json` 文件中配置要跟踪的软件包。
|
|
62
|
+
|
|
63
|
+
## 桌面应用程序
|
|
64
|
+
|
|
65
|
+
一个原生 Windows 应用程序,它将控制面板封装在一个本地 WebView2 容器中:
|
|
66
|
+
|
|
67
|
+
- **离线可用**:包含打包的 HTML/CSS/JS 文件;无需互联网连接即可使用。
|
|
68
|
+
- **实时刷新**:从 GitHub Pages 上的 `stats.json` 文件获取实时统计数据。
|
|
69
|
+
- **CSV 导出**:一键导出排行榜数据。
|
|
70
|
+
- **MSIX 软件包**:通过 `desktop-ci.yml` 在 CI 环境中构建和签名。
|
|
71
|
+
|
|
72
|
+
桌面应用程序的源代码位于 `desktop/` 目录中。使用 .NET 10 MAUI 构建,目标是 WinUI 3。
|
|
73
|
+
|
|
74
|
+
## 安装
|
|
75
|
+
|
|
72
76
|
```bash
|
|
73
77
|
npm install @mcptoolshop/registry-stats
|
|
74
78
|
```
|
|
75
|
-
|
|
76
|
-
## 命令行界面 (CLI)
|
|
77
|
-
|
|
79
|
+
|
|
80
|
+
## 命令行界面 (CLI)
|
|
81
|
+
|
|
78
82
|
```bash
|
|
79
83
|
# Query a single registry
|
|
80
84
|
registry-stats express -r npm
|
|
@@ -112,11 +116,11 @@ registry-stats express -r npm --range 2025-01-01:2025-06-30 --format chart
|
|
|
112
116
|
# Start a REST API server
|
|
113
117
|
registry-stats serve --port 3000
|
|
114
118
|
```
|
|
115
|
-
|
|
116
|
-
## 配置文件
|
|
117
|
-
|
|
118
|
-
在您的项目根目录下创建一个 `registry-stats.config.json` 文件(或者运行 `registry-stats --init` 命令):
|
|
119
|
-
|
|
119
|
+
|
|
120
|
+
## 配置文件
|
|
121
|
+
|
|
122
|
+
在您的项目根目录下创建一个 `registry-stats.config.json` 文件(或者运行 `registry-stats --init` 命令):
|
|
123
|
+
|
|
120
124
|
```json
|
|
121
125
|
{
|
|
122
126
|
"registries": ["npm", "pypi", "nuget", "vscode", "docker"],
|
|
@@ -135,11 +139,11 @@ registry-stats serve --port 3000
|
|
|
135
139
|
"concurrency": 5
|
|
136
140
|
}
|
|
137
141
|
```
|
|
138
|
-
|
|
139
|
-
运行 `registry-stats` 命令,不带任何参数,即可获取所有配置软件包的统计数据。命令行界面会从当前工作目录向上查找最近的配置文件。
|
|
140
|
-
|
|
141
|
-
配置文件也可以通过编程方式访问:
|
|
142
|
-
|
|
142
|
+
|
|
143
|
+
运行 `registry-stats` 命令,不带任何参数,即可获取所有配置软件包的统计数据。命令行界面会从当前工作目录向上查找最近的配置文件。
|
|
144
|
+
|
|
145
|
+
配置文件也可以通过编程方式访问:
|
|
146
|
+
|
|
143
147
|
```typescript
|
|
144
148
|
import { loadConfig, defaultConfig, starterConfig } from '@mcptoolshop/registry-stats';
|
|
145
149
|
|
|
@@ -147,9 +151,9 @@ const config = loadConfig(); // finds nearest config file, or null
|
|
|
147
151
|
const defaults = defaultConfig(); // returns default Config object
|
|
148
152
|
const template = starterConfig(); // returns starter JSON string
|
|
149
153
|
```
|
|
150
|
-
|
|
151
|
-
## 编程 API
|
|
152
|
-
|
|
154
|
+
|
|
155
|
+
## 编程 API
|
|
156
|
+
|
|
153
157
|
```typescript
|
|
154
158
|
import { stats, calc, createCache } from '@mcptoolshop/registry-stats';
|
|
155
159
|
|
|
@@ -190,41 +194,41 @@ const cache = createCache();
|
|
|
190
194
|
await stats('npm', 'express', { cache }); // fetches
|
|
191
195
|
await stats('npm', 'express', { cache }); // cache hit
|
|
192
196
|
```
|
|
193
|
-
|
|
194
|
-
## 仓库支持
|
|
195
|
-
|
|
196
|
-
| 仓库 | 软件包格式 | 时间序列 | 可用数据 |
|
|
197
|
-
|----------|---------------|-------------|----------------|
|
|
198
|
-
| `npm` | `express`, `@scope/pkg` | 是 (549 天) | 最近一天、最近一周、最近一个月 |
|
|
199
|
-
| `pypi` | `requests` | 是 (180 天) | 最近一天、最近一周、最近一个月、总数 |
|
|
200
|
-
| `nuget` | `Newtonsoft.Json` | No | 总数 |
|
|
201
|
-
| `vscode` | `publisher.extension` | No | 总数(安装量)、评分、趋势 |
|
|
202
|
-
| `docker` | `namespace/repo` | No | 总数(拉取次数)、星级 |
|
|
203
|
-
|
|
204
|
-
## 内置可靠性
|
|
205
|
-
|
|
206
|
-
- 自动重试,并在遇到 429/5xx 错误时采用指数退避策略
|
|
207
|
-
- 尊重 `Retry-After` 头部信息
|
|
208
|
-
- 批量请求的并发限制
|
|
209
|
-
- 可选的 TTL 缓存(可插拔,通过 `StatsCache` 接口,您可以自定义 Redis 或文件后端)
|
|
210
|
-
|
|
211
|
-
## REST API 服务器
|
|
212
|
-
|
|
213
|
-
可以作为微服务运行,也可以嵌入到您自己的服务器中:
|
|
214
|
-
|
|
197
|
+
|
|
198
|
+
## 仓库支持
|
|
199
|
+
|
|
200
|
+
| 仓库 | 软件包格式 | 时间序列 | 可用数据 |
|
|
201
|
+
|----------|---------------|-------------|----------------|
|
|
202
|
+
| `npm` | `express`, `@scope/pkg` | 是 (549 天) | 最近一天、最近一周、最近一个月 |
|
|
203
|
+
| `pypi` | `requests` | 是 (180 天) | 最近一天、最近一周、最近一个月、总数 |
|
|
204
|
+
| `nuget` | `Newtonsoft.Json` | No | 总数 |
|
|
205
|
+
| `vscode` | `publisher.extension` | No | 总数(安装量)、评分、趋势 |
|
|
206
|
+
| `docker` | `namespace/repo` | No | 总数(拉取次数)、星级 |
|
|
207
|
+
|
|
208
|
+
## 内置可靠性
|
|
209
|
+
|
|
210
|
+
- 自动重试,并在遇到 429/5xx 错误时采用指数退避策略
|
|
211
|
+
- 尊重 `Retry-After` 头部信息
|
|
212
|
+
- 批量请求的并发限制
|
|
213
|
+
- 可选的 TTL 缓存(可插拔,通过 `StatsCache` 接口,您可以自定义 Redis 或文件后端)
|
|
214
|
+
|
|
215
|
+
## REST API 服务器
|
|
216
|
+
|
|
217
|
+
可以作为微服务运行,也可以嵌入到您自己的服务器中:
|
|
218
|
+
|
|
215
219
|
```bash
|
|
216
220
|
registry-stats serve --port 3000
|
|
217
221
|
```
|
|
218
|
-
|
|
222
|
+
|
|
219
223
|
```
|
|
220
224
|
GET /stats/:package # all registries
|
|
221
225
|
GET /stats/:registry/:package # single registry
|
|
222
226
|
GET /compare/:package?registries=npm,pypi
|
|
223
227
|
GET /range/:registry/:package?start=YYYY-MM-DD&end=YYYY-MM-DD&format=json|csv|chart
|
|
224
228
|
```
|
|
225
|
-
|
|
226
|
-
用于自定义服务器或无服务器环境的编程用法:
|
|
227
|
-
|
|
229
|
+
|
|
230
|
+
用于自定义服务器或无服务器环境的编程用法:
|
|
231
|
+
|
|
228
232
|
```typescript
|
|
229
233
|
import { createHandler, serve } from '@mcptoolshop/registry-stats';
|
|
230
234
|
|
|
@@ -236,9 +240,9 @@ import { createServer } from 'node:http';
|
|
|
236
240
|
const handler = createHandler();
|
|
237
241
|
createServer(handler).listen(3000);
|
|
238
242
|
```
|
|
239
|
-
|
|
240
|
-
## 自定义仓库
|
|
241
|
-
|
|
243
|
+
|
|
244
|
+
## 自定义仓库
|
|
245
|
+
|
|
242
246
|
```typescript
|
|
243
247
|
import { registerProvider, type RegistryProvider } from '@mcptoolshop/registry-stats';
|
|
244
248
|
|
|
@@ -259,9 +263,9 @@ const cargo: RegistryProvider = {
|
|
|
259
263
|
registerProvider(cargo);
|
|
260
264
|
await stats('cargo', 'serde');
|
|
261
265
|
```
|
|
262
|
-
|
|
263
|
-
## 代码仓库结构
|
|
264
|
-
|
|
266
|
+
|
|
267
|
+
## 代码仓库结构
|
|
268
|
+
|
|
265
269
|
```
|
|
266
270
|
registry-stats/
|
|
267
271
|
├── src/ # TypeScript engine (published to npm)
|
|
@@ -269,9 +273,9 @@ registry-stats/
|
|
|
269
273
|
├── desktop/ # WinUI 3 desktop app (.NET 10 MAUI)
|
|
270
274
|
└── test/ # Library tests (vitest)
|
|
271
275
|
```
|
|
272
|
-
|
|
273
|
-
## 开发
|
|
274
|
-
|
|
276
|
+
|
|
277
|
+
## 开发
|
|
278
|
+
|
|
275
279
|
```bash
|
|
276
280
|
# Engine
|
|
277
281
|
npm install && npm run build && npm test
|
|
@@ -282,36 +286,36 @@ npm run site:dev
|
|
|
282
286
|
# Dashboard (production build)
|
|
283
287
|
npm run site:build
|
|
284
288
|
```
|
|
285
|
-
|
|
286
|
-
## 安全性和数据范围
|
|
287
|
-
|
|
288
|
-
| 方面 | 详细信息 |
|
|
289
|
-
|--------|--------|
|
|
290
|
-
| **Data touched** | 从 npm、PyPI、NuGet、VS Code Marketplace 和 Docker Hub 获取公开的下载统计数据。可选的内存缓存。 |
|
|
291
|
-
| **Data NOT touched** | 没有遥测。没有分析。没有凭证存储。没有用户数据。没有文件写入。 |
|
|
292
|
-
| **Permissions** | 读取:通过 HTTPS 的公开注册中心 API。写入:仅 stdout/stderr。 |
|
|
293
|
-
| **Network** | 向公开注册中心 API 的 HTTPS 出站连接。可选的本地 REST 服务器。 |
|
|
294
|
-
| **Telemetry** | 未收集或发送任何数据。 |
|
|
295
|
-
|
|
296
|
-
请参阅 [SECURITY.md](SECURITY.md) 以获取漏洞报告。
|
|
297
|
-
|
|
298
|
-
## 评分卡
|
|
299
|
-
|
|
300
|
-
| 类别 | 评分 |
|
|
301
|
-
|----------|-------|
|
|
302
|
-
| A. 安全性 | 10 |
|
|
303
|
-
| B. 错误处理 | 10 |
|
|
304
|
-
| C. 运维文档 | 10 |
|
|
305
|
-
| D. 发布规范 | 10 |
|
|
306
|
-
| E. 身份验证(软性) | 10 |
|
|
307
|
-
| **Overall** | **50/50** |
|
|
308
|
-
|
|
309
|
-
> 完整审计:[SHIP_GATE.md](SHIP_GATE.md) · [SCORECARD.md](SCORECARD.md)
|
|
310
|
-
|
|
311
|
-
## 许可证
|
|
312
|
-
|
|
313
|
-
MIT
|
|
314
|
-
|
|
289
|
+
|
|
290
|
+
## 安全性和数据范围
|
|
291
|
+
|
|
292
|
+
| 方面 | 详细信息 |
|
|
293
|
+
|--------|--------|
|
|
294
|
+
| **Data touched** | 从 npm、PyPI、NuGet、VS Code Marketplace 和 Docker Hub 获取公开的下载统计数据。可选的内存缓存。 |
|
|
295
|
+
| **Data NOT touched** | 没有遥测。没有分析。没有凭证存储。没有用户数据。没有文件写入。 |
|
|
296
|
+
| **Permissions** | 读取:通过 HTTPS 的公开注册中心 API。写入:仅 stdout/stderr。 |
|
|
297
|
+
| **Network** | 向公开注册中心 API 的 HTTPS 出站连接。可选的本地 REST 服务器。 |
|
|
298
|
+
| **Telemetry** | 未收集或发送任何数据。 |
|
|
299
|
+
|
|
300
|
+
请参阅 [SECURITY.md](SECURITY.md) 以获取漏洞报告。
|
|
301
|
+
|
|
302
|
+
## 评分卡
|
|
303
|
+
|
|
304
|
+
| 类别 | 评分 |
|
|
305
|
+
|----------|-------|
|
|
306
|
+
| A. 安全性 | 10 |
|
|
307
|
+
| B. 错误处理 | 10 |
|
|
308
|
+
| C. 运维文档 | 10 |
|
|
309
|
+
| D. 发布规范 | 10 |
|
|
310
|
+
| E. 身份验证(软性) | 10 |
|
|
311
|
+
| **Overall** | **50/50** |
|
|
312
|
+
|
|
313
|
+
> 完整审计:[SHIP_GATE.md](SHIP_GATE.md) · [SCORECARD.md](SCORECARD.md)
|
|
314
|
+
|
|
315
|
+
## 许可证
|
|
316
|
+
|
|
317
|
+
MIT
|
|
318
|
+
|
|
315
319
|
---
|
|
316
|
-
|
|
317
|
-
由 <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a> 构建。
|
|
320
|
+
|
|
321
|
+
由 <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a> 构建。
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mcptoolshop/registry-stats",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "Multi-registry download stats — engine, dashboard, and desktop app for npm, PyPI, NuGet, VS Code Marketplace, and Docker Hub",
|
|
3
|
+
"version": "2.2.0",
|
|
4
|
+
"description": "Multi-registry download stats — engine, AI-powered dashboard, and desktop app for npm, PyPI, NuGet, VS Code Marketplace, and Docker Hub",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
7
7
|
"module": "./dist/index.js",
|