@mcptoolshop/registry-stats 2.3.0 → 3.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,57 +28,60 @@
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. 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
-
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** | Aplicação web com tecnologia Astro e assistente de IA Pulse (reconhecimento de voz, pesquisa na web, tela cheia, conectores de dados do GitHub), seis gráficos interativos, atualização em tempo real, exportação de relatórios (PDF / JSONL / Markdown) e um guia de ajuda em abas. Reconstruída semanalmente por CI; atualizável sob demanda. |
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 em abas** — Abas "Início", "Análise", "Ranking" e "Ajuda".
51
+ - **Assistente de IA Pulse** — Assistente conversacional alimentado por Ollama, com síntese de voz em tempo real (o assistente fala enquanto o modelo de linguagem gera a resposta, com 4 vozes disponíveis através de [mcp-voice-soundboard](https://github.com/mcp-tool-shop-org/mcp-voice-soundboard)), pesquisa na web (Wikipedia + SearXNG opcional), reprodução automática, modo de tela cheia, conector de dados de organizações do GitHub, seletor de modelo e memória de conversação.
52
+ - **Visão geral executiva** — pontuação de saúde (0–100), índice de diversidade, variação semanal, número total de downloads em todos os repositórios.
53
+ - **Seis gráficos interativos** — tendência de 30 dias (agregação / por repositório / top-5), participação no repositório (área polar), risco do portfólio (histograma + Gini e P90), top 10 em ascensão, rastreador de velocidade com gráficos de linha, e mapa de calor de 30 dias com detecção de picos (>2σ).
54
+ - **Motor de crescimento inteligente** — corrige distorções de pequenas amostras com um limite mínimo, um limite percentual e uma fórmula de velocidade amortecida.
55
+ - **Informações acionáveis** — recomendações geradas automaticamente e alertas para pacotes com desempenho decrescente.
56
+ - **Painel Pulse** — visualização dividida de pacotes estabelecidos (≥ 50 downloads/semana) e pacotes emergentes e novos, com gráficos de linha de 7 dias, variações absolutas e percentuais, contexto de referência e um resumo executivo em uma linha.
57
+ - **Atualização em tempo real** — busca sob demanda dos dados das APIs do npm e PyPI, com indicador de progresso; os resultados são armazenados em cache na sessionStorage (TTL de 5 minutos), para que a troca de abas seja instantânea.
58
+ - **Exportação de relatórios** — menu suspenso próximo ao botão de atualização, oferecendo três formatos: **PDF Executivo** (via jsPDF), **JSONL do Modelo de Linguagem** (registros formatados para ingestão por IA) e **Markdown para Desenvolvedores** (tabelas GFM).
59
+ - **Ranking** — 132 pacotes classificados por downloads semanais, com gráficos de linha de 30 dias e indicadores de tendência inteligentes.
60
+ - **Página de configuração** — editor de portfólio com validação, seção de sincronização de repositórios e visão geral do pipeline.
61
+ - **Aba de ajuda** guia amigável que cobre todas as abas, conceitos-chave, dicas para o assistente de IA, pipeline de dados e links úteis.
62
+ - **Tema claro / escuro** — segue a preferência do sistema.
63
+
64
+ Os dados são coletados no momento da compilação e reconstruídos semanalmente por meio de CI (segundas-feiras às 06:00 UTC). A atualização em tempo real busca os dados mais recentes diretamente das APIs dos registros. Configure os pacotes a serem monitorados em `site/src/data/packages.json` (132 pacotes em 5 registros).
65
+
66
+ ## Aplicativo para Desktop
67
+
68
+ Um aplicativo nativo para Windows que encapsula o painel em um shell WebView2 local:
69
+
70
+ - **Funciona offline** — inclui HTML/CSS/JS empacotados; funciona sem internet.
71
+ - **Atualização em tempo real** — busca o arquivo `stats.json` do GitHub Pages sob demanda.
72
+ - **Exportação para CSV** exporte os dados da tabela de classificação com um clique.
73
+ - **Empacotado como MSIX** — construído e assinado no CI via `desktop-ci.yml`.
74
+
75
+ O código-fonte do aplicativo para desktop está localizado em `desktop/`. Construído com .NET 10 MAUI, direcionado para WinUI 3.
76
+
77
+ ## Instalação
78
+
76
79
  ```bash
77
80
  npm install @mcptoolshop/registry-stats
78
81
  ```
79
-
80
- ## Interface de Linha de Comando (CLI)
81
-
82
+
83
+ ## Interface de Linha de Comando (CLI)
84
+
82
85
  ```bash
83
86
  # Query a single registry
84
87
  registry-stats express -r npm
@@ -116,11 +119,11 @@ registry-stats express -r npm --range 2025-01-01:2025-06-30 --format chart
116
119
  # Start a REST API server
117
120
  registry-stats serve --port 3000
118
121
  ```
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
-
122
+
123
+ ## Arquivo de Configuração
124
+
125
+ Crie um arquivo `registry-stats.config.json` na raiz do seu projeto (ou execute `registry-stats --init`):
126
+
124
127
  ```json
125
128
  {
126
129
  "registries": ["npm", "pypi", "nuget", "vscode", "docker"],
@@ -139,11 +142,11 @@ Crie um arquivo `registry-stats.config.json` na raiz do seu projeto (ou execute
139
142
  "concurrency": 5
140
143
  }
141
144
  ```
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
-
145
+
146
+ 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.
147
+
148
+ A configuração também está disponível programaticamente:
149
+
147
150
  ```typescript
148
151
  import { loadConfig, defaultConfig, starterConfig } from '@mcptoolshop/registry-stats';
149
152
 
@@ -151,9 +154,9 @@ const config = loadConfig(); // finds nearest config file, or null
151
154
  const defaults = defaultConfig(); // returns default Config object
152
155
  const template = starterConfig(); // returns starter JSON string
153
156
  ```
154
-
155
- ## API Programática
156
-
157
+
158
+ ## API Programática
159
+
157
160
  ```typescript
158
161
  import { stats, calc, createCache } from '@mcptoolshop/registry-stats';
159
162
 
@@ -194,41 +197,41 @@ const cache = createCache();
194
197
  await stats('npm', 'express', { cache }); // fetches
195
198
  await stats('npm', 'express', { cache }); // cache hit
196
199
  ```
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
-
200
+
201
+ ## Suporte a Registros
202
+
203
+ | Registro | Formato do pacote | Séries temporais | Dados disponíveis |
204
+ |----------|---------------|-------------|----------------|
205
+ | `npm` | `express`, `@scope/pkg` | Sim (549 dias) | último dia, última semana, último mês |
206
+ | `pypi` | `requests` | Sim (180 dias) | último dia, última semana, último mês, total |
207
+ | `nuget` | `Newtonsoft.Json` | No | total |
208
+ | `vscode` | `publisher.extension` | No | total (instalações), avaliação, tendências |
209
+ | `docker` | `namespace/repo` | No | total (downloads), estrelas |
210
+
211
+ ## Confiabilidade Integrada
212
+
213
+ - Tentativa automática com retrocesso exponencial em caso de erros 429/5xx
214
+ - Respeita os cabeçalhos `Retry-After`
215
+ - Limitação de concorrência para solicitações em lote
216
+ - Cache TTL opcional (plugável — utilize seu próprio backend Redis/arquivo através da interface `StatsCache`)
217
+
218
+ ## Servidor de API REST
219
+
220
+ Execute como um microserviço ou incorpore em seu próprio servidor:
221
+
219
222
  ```bash
220
223
  registry-stats serve --port 3000
221
224
  ```
222
-
225
+
223
226
  ```
224
227
  GET /stats/:package # all registries
225
228
  GET /stats/:registry/:package # single registry
226
229
  GET /compare/:package?registries=npm,pypi
227
230
  GET /range/:registry/:package?start=YYYY-MM-DD&end=YYYY-MM-DD&format=json|csv|chart
228
231
  ```
229
-
230
- Uso programático para servidores personalizados ou sem servidor:
231
-
232
+
233
+ Uso programático para servidores personalizados ou sem servidor:
234
+
232
235
  ```typescript
233
236
  import { createHandler, serve } from '@mcptoolshop/registry-stats';
234
237
 
@@ -240,9 +243,9 @@ import { createServer } from 'node:http';
240
243
  const handler = createHandler();
241
244
  createServer(handler).listen(3000);
242
245
  ```
243
-
244
- ## Registros Personalizados
245
-
246
+
247
+ ## Registros Personalizados
248
+
246
249
  ```typescript
247
250
  import { registerProvider, type RegistryProvider } from '@mcptoolshop/registry-stats';
248
251
 
@@ -263,9 +266,9 @@ const cargo: RegistryProvider = {
263
266
  registerProvider(cargo);
264
267
  await stats('cargo', 'serde');
265
268
  ```
266
-
267
- ## Estrutura do Repositório
268
-
269
+
270
+ ## Estrutura do Repositório
271
+
269
272
  ```
270
273
  registry-stats/
271
274
  ├── src/ # TypeScript engine (published to npm)
@@ -273,9 +276,9 @@ registry-stats/
273
276
  ├── desktop/ # WinUI 3 desktop app (.NET 10 MAUI)
274
277
  └── test/ # Library tests (vitest)
275
278
  ```
276
-
277
- ## Desenvolvimento
278
-
279
+
280
+ ## Desenvolvimento
281
+
279
282
  ```bash
280
283
  # Engine
281
284
  npm install && npm run build && npm test
@@ -286,36 +289,36 @@ npm run site:dev
286
289
  # Dashboard (production build)
287
290
  npm run site:build
288
291
  ```
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
-
292
+
293
+ ## Segurança e Escopo de Dados
294
+
295
+ | Aspecto | Detalhe |
296
+ |--------|--------|
297
+ | **Data touched** | Estatísticas de download públicas do npm, PyPI, NuGet, VS Code Marketplace, Docker Hub. Cache na memória (opcional). |
298
+ | **Data NOT touched** | Sem telemetria. Sem análises. Sem armazenamento de credenciais. Sem dados do usuário. Sem gravações de arquivos. |
299
+ | **Permissions** | Leitura: APIs públicas de registros via HTTPS. Escrita: apenas stdout/stderr. |
300
+ | **Network** | Saída HTTPS para APIs públicas de registros. Servidor REST local opcional. |
301
+ | **Telemetry** | Nenhum dado coletado ou enviado. |
302
+
303
+ Consulte [SECURITY.md](SECURITY.md) para relatar vulnerabilidades.
304
+
305
+ ## Tabela de Pontuação
306
+
307
+ | Categoria | Pontuação |
308
+ |----------|-------|
309
+ | A. Segurança | 10 |
310
+ | B. Tratamento de Erros | 10 |
311
+ | C. Documentação para Operadores | 10 |
312
+ | D. Higiene de Distribuição | 10 |
313
+ | E. Identidade (suave) | 10 |
314
+ | **Overall** | **50/50** |
315
+
316
+ > Auditoria completa: [SHIP_GATE.md](SHIP_GATE.md) · [SCORECARD.md](SCORECARD.md)
317
+
318
+ ## Licença
319
+
320
+ MIT
321
+
319
322
  ---
320
-
321
- Criado por <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>
323
+
324
+ Criado por <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>