@mcptoolshop/registry-stats 2.0.0 → 2.1.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.pt-BR.md CHANGED
@@ -1,15 +1,15 @@
1
- <p align="center">
2
- <a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</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.md">English</a>
3
- </p>
4
-
1
+ <p align="center">
2
+ <a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</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.md">English</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> &middot;
23
23
  <a href="#desktop-app">Desktop App</a> &middot;
@@ -28,53 +28,57 @@
28
28
  <a href="#config-file">Config</a> &middot;
29
29
  <a href="#license">License</a>
30
30
  </p>
31
-
31
+
32
32
  ---
33
-
34
- Você publica no npm, PyPI, NuGet, na loja do VS Code e no Docker Hub. Atualmente, responder à pergunta "como estão indo meus pacotes?" significa verificar cinco sites diferentes. **registry-stats** é a plataforma completa: um motor TypeScript (CLI + API + servidor REST), um painel web interativo e um aplicativo nativo para Windows — tudo em um único repositório.
35
-
36
- Sem dependências de tempo de execução. Utiliza a função nativa `fetch()`. Node 18+.
37
-
38
- ## O que está incluído
39
-
40
- | Camada | O que ele faz |
41
- |-------|-------------|
42
- | **Engine** | Biblioteca TypeScript + CLI + servidor REST. Consulte cinco registros com uma única interface. Publicado no npm como `@mcptoolshop/registry-stats`. |
43
- | **Dashboard** | Aplicativo web alimentado por Astro. Capturas de tela executivas, análise de crescimento, saúde dos dados, tabela de classificação com gráficos. Reconstruído semanalmente pelo CI. |
44
- | **Desktop** | Aplicativo nativo para Windows, construído com WinUI 3 + WebView2. Inclui o painel offline e busca as estatísticas em tempo real sob demanda. |
45
-
46
- ## Painel
47
-
48
- Um painel de estatísticas que se atualiza automaticamente está disponível em [`/dashboard/`](https://mcp-tool-shop-org.github.io/registry-stats/dashboard/).
49
-
50
- - **Captura de tela executiva** — narrativa semanal em uma frase: registro principal, pacote principal, maior crescimento, concentração do portfólio, confiabilidade dos dados.
51
- - **Análise de crescimento** — pacotes com maior e menor crescimento, e pacotes recém-ativados (npm nos últimos 7 dias vs. os 7 dias anteriores).
52
- - **Saúde dos dados** — cobertura por registro, selos de confiabilidade (ok / parcial / ausente), detalhes de erros expandíveis.
53
- - **Deltas de captura de tela** acompanhamento semanal para registros que mostram apenas dados cumulativos (Docker, VS Code, NuGet).
54
- - **Tabela de classificação** — todos os pacotes classificados por downloads semanais, com gráficos de 30 dias para cada linha.
55
- - **Tema claro/escuro** — segue a preferência do sistema.
56
-
57
- Os dados são buscados durante a compilação e reconstruídos semanalmente pelo CI (segundas-feiras às 06:00 UTC). Configure os pacotes a serem monitorados em `site/src/data/packages.json`.
58
-
59
- ## Aplicativo para Desktop
60
-
61
- Um aplicativo nativo para Windows que encapsula o painel em um shell WebView2 local:
62
-
63
- - **Funciona offline** — inclui HTML/CSS/JS empacotados; funciona sem internet.
64
- - **Atualização em tempo real** — busca o arquivo `stats.json` do GitHub Pages sob demanda.
65
- - **Exportação para CSV** exporte os dados da tabela de classificação com um clique.
66
- - **Empacotado como MSIX** — construído e assinado no CI via `desktop-ci.yml`.
67
-
68
- O código-fonte do aplicativo para desktop está localizado em `desktop/`. Construído com .NET 10 MAUI, direcionado para WinUI 3.
69
-
70
- ## Instalação
71
-
33
+
34
+ Você publica no npm, PyPI, NuGet, na loja do VS Code e no Docker Hub. Atualmente, responder à pergunta "como estão indo meus pacotes?" significa verificar cinco sites diferentes. **registry-stats** é a plataforma completa: um motor TypeScript (CLI + API + servidor REST), um painel web interativo e um aplicativo nativo para Windows — tudo em um único repositório.
35
+
36
+ Sem dependências de tempo de execução. Utiliza a função nativa `fetch()`. Node 18+.
37
+
38
+ ## O que está incluído
39
+
40
+ | Camada | O que ele faz |
41
+ |-------|-------------|
42
+ | **Engine** | Biblioteca TypeScript + CLI + servidor REST. Consulte cinco registros com uma única interface. Publicado no npm como `@mcptoolshop/registry-stats`. |
43
+ | **Dashboard** | Aplicativo web alimentado por Astro. Assistente de chat com IA, seis gráficos interativos, motor de crescimento inteligente e guia de ajuda com abas. Reconstruído semanalmente pelo CI. |
44
+ | **Desktop** | Aplicativo nativo para Windows, construído com WinUI 3 + WebView2. Inclui o painel offline e busca as estatísticas em tempo real sob demanda. |
45
+
46
+ ## Painel
47
+
48
+ Um painel de estatísticas que se atualiza automaticamente está disponível em [`/dashboard/`](https://mcp-tool-shop-org.github.io/registry-stats/dashboard/).
49
+
50
+ - **Interface com abas** — Abas Home, Analytics, Leaderboard e Help
51
+ - **Assistente de chat com IA** — Registry Assistant alimentado por Ollama com contexto RAG, respostas em streaming, seletor de modelos e memória de conversação
52
+ - **Resumo executivo** — pontuação de saúde (0–100), índice de diversidade, variação semanal, downloads totais de todos os registros
53
+ - **Seis gráficos interativos** — tendência de 30 dias (vista agregada / por registro / top 5), participação do registro (área polar), risco do portfólio (histograma + Gini & P90), top 10 momentum, rastreador de velocidade com sparklines e mapa de calor de 30 dias com detecção de picos (>2σ)
54
+ - **Motor de crescimento inteligente** — lida com a distorção de denominadores pequenos com limite base, teto de porcentagem e fórmula de velocidade amortecida
55
+ - **Insights acionáveis** — recomendações autogeradas e alertas de atenção para pacotes em declínio
56
+ - **Tabela de classificação** — todos os pacotes classificados por downloads semanais com sparklines de 30 dias e badges de tendência inteligentes
57
+ - **Página de configuração** editor de portfólio com validação, seção registry-sync e visão geral do pipeline
58
+ - **Aba de ajuda** — guia amigável cobrindo cada aba, conceitos-chave, dicas do assistente de IA, pipeline de dados e links úteis
59
+ - **Tema claro/escuro** — segue a preferência do sistema
60
+
61
+ Os dados são buscados durante a compilação e reconstruídos semanalmente pelo CI (segundas-feiras às 06:00 UTC). Configure os pacotes a serem monitorados em `site/src/data/packages.json`.
62
+
63
+ ## Aplicativo para Desktop
64
+
65
+ Um aplicativo nativo para Windows que encapsula o painel em um shell WebView2 local:
66
+
67
+ - **Funciona offline** — inclui HTML/CSS/JS empacotados; funciona sem internet.
68
+ - **Atualização em tempo real** busca o arquivo `stats.json` do GitHub Pages sob demanda.
69
+ - **Exportação para CSV** — exporte os dados da tabela de classificação com um clique.
70
+ - **Empacotado como MSIX** — construído e assinado no CI via `desktop-ci.yml`.
71
+
72
+ O código-fonte do aplicativo para desktop está localizado em `desktop/`. Construído com .NET 10 MAUI, direcionado para WinUI 3.
73
+
74
+ ## Instalação
75
+
72
76
  ```bash
73
77
  npm install @mcptoolshop/registry-stats
74
78
  ```
75
-
76
- ## Interface de Linha de Comando (CLI)
77
-
79
+
80
+ ## Interface de Linha de Comando (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
- ## Arquivo de Configuração
117
-
118
- Crie um arquivo `registry-stats.config.json` na raiz do seu projeto (ou execute `registry-stats --init`):
119
-
119
+
120
+ ## Arquivo de Configuração
121
+
122
+ Crie um arquivo `registry-stats.config.json` na raiz do seu projeto (ou execute `registry-stats --init`):
123
+
120
124
  ```json
121
125
  {
122
126
  "registries": ["npm", "pypi", "nuget", "vscode", "docker"],
@@ -135,11 +139,11 @@ Crie um arquivo `registry-stats.config.json` na raiz do seu projeto (ou execute
135
139
  "concurrency": 5
136
140
  }
137
141
  ```
138
-
139
- Execute `registry-stats` sem argumentos para obter as estatísticas de todos os pacotes configurados. A CLI procura o arquivo de configuração a partir do diretório atual.
140
-
141
- A configuração também está disponível programaticamente:
142
-
142
+
143
+ Execute `registry-stats` sem argumentos para obter as estatísticas de todos os pacotes configurados. A CLI procura o arquivo de configuração a partir do diretório atual.
144
+
145
+ A configuração também está disponível programaticamente:
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 Programática
152
-
154
+
155
+ ## API Programática
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
- ## Suporte a Registros
195
-
196
- | Registro | Formato do pacote | Séries temporais | Dados disponíveis |
197
- |----------|---------------|-------------|----------------|
198
- | `npm` | `express`, `@scope/pkg` | Sim (549 dias) | último dia, última semana, último mês |
199
- | `pypi` | `requests` | Sim (180 dias) | último dia, última semana, último mês, total |
200
- | `nuget` | `Newtonsoft.Json` | No | total |
201
- | `vscode` | `publisher.extension` | No | total (instalações), avaliação, tendências |
202
- | `docker` | `namespace/repo` | No | total (downloads), estrelas |
203
-
204
- ## Confiabilidade Integrada
205
-
206
- - Tentativa automática com retrocesso exponencial em caso de erros 429/5xx
207
- - Respeita os cabeçalhos `Retry-After`
208
- - Limitação de concorrência para solicitações em lote
209
- - Cache TTL opcional (plugável — utilize seu próprio backend Redis/arquivo através da interface `StatsCache`)
210
-
211
- ## Servidor de API REST
212
-
213
- Execute como um microserviço ou incorpore em seu próprio servidor:
214
-
197
+
198
+ ## Suporte a Registros
199
+
200
+ | Registro | Formato do pacote | Séries temporais | Dados disponíveis |
201
+ |----------|---------------|-------------|----------------|
202
+ | `npm` | `express`, `@scope/pkg` | Sim (549 dias) | último dia, última semana, último mês |
203
+ | `pypi` | `requests` | Sim (180 dias) | último dia, última semana, último mês, total |
204
+ | `nuget` | `Newtonsoft.Json` | No | total |
205
+ | `vscode` | `publisher.extension` | No | total (instalações), avaliação, tendências |
206
+ | `docker` | `namespace/repo` | No | total (downloads), estrelas |
207
+
208
+ ## Confiabilidade Integrada
209
+
210
+ - Tentativa automática com retrocesso exponencial em caso de erros 429/5xx
211
+ - Respeita os cabeçalhos `Retry-After`
212
+ - Limitação de concorrência para solicitações em lote
213
+ - Cache TTL opcional (plugável — utilize seu próprio backend Redis/arquivo através da interface `StatsCache`)
214
+
215
+ ## Servidor de API REST
216
+
217
+ Execute como um microserviço ou incorpore em seu próprio servidor:
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
- Uso programático para servidores personalizados ou sem servidor:
227
-
229
+
230
+ Uso programático para servidores personalizados ou sem servidor:
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
- ## Registros Personalizados
241
-
243
+
244
+ ## Registros Personalizados
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
- ## Estrutura do Repositório
264
-
266
+
267
+ ## Estrutura do Repositório
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
- ## Desenvolvimento
274
-
276
+
277
+ ## Desenvolvimento
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
- ## Segurança e Escopo de Dados
287
-
288
- | Aspecto | Detalhe |
289
- |--------|--------|
290
- | **Data touched** | Estatísticas de download públicas do npm, PyPI, NuGet, VS Code Marketplace, Docker Hub. Cache na memória (opcional). |
291
- | **Data NOT touched** | Sem telemetria. Sem análises. Sem armazenamento de credenciais. Sem dados do usuário. Sem gravações de arquivos. |
292
- | **Permissions** | Leitura: APIs públicas de registros via HTTPS. Escrita: apenas stdout/stderr. |
293
- | **Network** | Saída HTTPS para APIs públicas de registros. Servidor REST local opcional. |
294
- | **Telemetry** | Nenhum dado coletado ou enviado. |
295
-
296
- Consulte [SECURITY.md](SECURITY.md) para relatar vulnerabilidades.
297
-
298
- ## Tabela de Pontuação
299
-
300
- | Categoria | Pontuação |
301
- |----------|-------|
302
- | A. Segurança | 10 |
303
- | B. Tratamento de Erros | 10 |
304
- | C. Documentação para Operadores | 10 |
305
- | D. Higiene de Distribuição | 10 |
306
- | E. Identidade (suave) | 10 |
307
- | **Overall** | **50/50** |
308
-
309
- > Auditoria completa: [SHIP_GATE.md](SHIP_GATE.md) · [SCORECARD.md](SCORECARD.md)
310
-
311
- ## Licença
312
-
313
- MIT
314
-
289
+
290
+ ## Segurança e Escopo de Dados
291
+
292
+ | Aspecto | Detalhe |
293
+ |--------|--------|
294
+ | **Data touched** | Estatísticas de download públicas do npm, PyPI, NuGet, VS Code Marketplace, Docker Hub. Cache na memória (opcional). |
295
+ | **Data NOT touched** | Sem telemetria. Sem análises. Sem armazenamento de credenciais. Sem dados do usuário. Sem gravações de arquivos. |
296
+ | **Permissions** | Leitura: APIs públicas de registros via HTTPS. Escrita: apenas stdout/stderr. |
297
+ | **Network** | Saída HTTPS para APIs públicas de registros. Servidor REST local opcional. |
298
+ | **Telemetry** | Nenhum dado coletado ou enviado. |
299
+
300
+ Consulte [SECURITY.md](SECURITY.md) para relatar vulnerabilidades.
301
+
302
+ ## Tabela de Pontuação
303
+
304
+ | Categoria | Pontuação |
305
+ |----------|-------|
306
+ | A. Segurança | 10 |
307
+ | B. Tratamento de Erros | 10 |
308
+ | C. Documentação para Operadores | 10 |
309
+ | D. Higiene de Distribuição | 10 |
310
+ | E. Identidade (suave) | 10 |
311
+ | **Overall** | **50/50** |
312
+
313
+ > Auditoria completa: [SHIP_GATE.md](SHIP_GATE.md) · [SCORECARD.md](SCORECARD.md)
314
+
315
+ ## Licença
316
+
317
+ MIT
318
+
315
319
  ---
316
-
317
- Criado por <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>
320
+
321
+ Criado por <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>