@danhachuel/thunderbolt 0.2.30 → 0.2.31

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.
@@ -2,7 +2,7 @@
2
2
 
3
3
  Este manual descreve a instalação local da UI Thunderbolt, baseada no MoneyPrinterTurbo, utilizando o pacote npm `@danhachuel/thunderbolt`. O fluxo recomendado instala automaticamente o ambiente Python, as dependências da aplicação, as dependências do MoneyPrinterTurbo, o Streamlit e o suporte FFmpeg através de `imageio-ffmpeg`.
4
4
 
5
- > **Versão deste manual:** 0.2.30
5
+ > **Versão deste manual:** 0.2.31
6
6
  > **Pacote npm:** `@danhachuel/thunderbolt`
7
7
  > **Porta padrão da UI:** `localhost:3030`
8
8
  > **Repositório:** [github.com/DanHachuel/thunderbolt](https://github.com/DanHachuel/thunderbolt)
@@ -100,13 +100,13 @@ Execute:
100
100
  Windows PowerShell ou MobaXterm:
101
101
 
102
102
  ```powershell
103
- npx.cmd --yes @danhachuel/thunderbolt@0.2.30 install
103
+ npx.cmd --yes @danhachuel/thunderbolt@0.2.31 install
104
104
  ```
105
105
 
106
106
  Linux/macOS:
107
107
 
108
108
  ```bash
109
- npx --yes @danhachuel/thunderbolt@0.2.30 install
109
+ npx --yes @danhachuel/thunderbolt@0.2.31 install
110
110
  ```
111
111
 
112
112
  A instalação normal é **segura para actualizações**: preserva `storage`, Blueprints, Brandings, configurações e artefactos do utilizador. Remove apenas `.venv`, o clone técnico do MoneyPrinterTurbo e dependências que serão recriadas. Uma pasta antiga sem dados do utilizador, como `C:\Users\<utilizador>\AppData\Local\hermes` da tentativa incompleta, pode ser removida; uma pasta antiga que contenha Blueprints, Brandings ou storage é preservada e apenas avisada no terminal. Feche processos Python, Node, Streamlit e MobaXterm que estejam a usar as pastas antes de executar.
@@ -384,7 +384,7 @@ Ao abrir a página, o Thunderbolt prepara automaticamente os dados públicos atr
384
384
 
385
385
  Os parâmetros da UI são número de clusters entre 2 e 10, suporte mínimo entre 0,01 e 0,50, país, engagement, intervalo de datas e tags. O núcleo normaliza os dados, calcula engagement, aplica filtros, faz transformação logarítmica e standardização, executa K-Means e calcula itemsets/regras com FP-Growth. A análise inicial é automática; o botão **Analisar Nichos** recalcula os resultados depois de alterar os filtros. Os resultados são DataFrames de clusters, itemsets frequentes, regras de associação e dados analisados; o gráfico de dispersão é criado nativamente com Plotly.
386
386
 
387
- As dependências adicionais — `scikit-learn`, `mlxtend`, `plotly`, `seaborn`, `matplotlib` e `kagglehub` — são instaladas pelo procedimento normal de `npx`. Em instalações existentes, execute novamente `npx.cmd --yes @danhachuel/thunderbolt@0.2.30 install`; o instalador detecta e reutiliza o que já estiver válido.
387
+ As dependências adicionais — `scikit-learn`, `mlxtend`, `plotly`, `seaborn`, `matplotlib` e `kagglehub` — são instaladas pelo procedimento normal de `npx`. Em instalações existentes, execute novamente `npx.cmd --yes @danhachuel/thunderbolt@0.2.31 install`; o instalador detecta e reutiliza o que já estiver válido.
388
388
 
389
389
  ## Pipeline: Criação de Vídeos, Criação de Músicas e Automação
390
390
 
package/README.md CHANGED
@@ -26,7 +26,7 @@ A primeira versão implementa a camada UI independente com:
26
26
 
27
27
  Os adaptadores do MoneyPrinterTurbo e de publicação nas plataformas são ligados pelas configurações locais e pelos pontos de integração em `integrations/`. A UI não inventa dados quando um serviço externo ou credencial não está disponível.
28
28
 
29
- ## Navegação da UI 0.2.30
29
+ ## Navegação da UI 0.2.31
30
30
 
31
31
  A barra lateral mantém apenas os cinco níveis principais, nesta ordem: **Início**, **Pipeline**, **Automação**, **Niche Finder** e **Configurações**. **Pipeline** é expansível e contém **Criação de Vídeos**, **Criação de Músicas**, **Upload** e **Limpador de Metadados**. **Configurações** é expansível e contém **Canais**, **Blueprints**, **MCP** e **Configurações Técnicas**. O Início reúne o dashboard e as filas do Pipeline, sem botões de acções rápidas.
32
32
 
@@ -109,9 +109,9 @@ thunderbolt
109
109
  No Windows PowerShell, se `npx` for bloqueado por `npx.ps1`, use directamente `npx.cmd`:
110
110
 
111
111
  ```powershell
112
- npx.cmd --yes @danhachuel/thunderbolt@0.2.30 install
113
- npx.cmd --yes @danhachuel/thunderbolt@0.2.30 doctor
114
- npx.cmd --yes @danhachuel/thunderbolt@0.2.30
112
+ npx.cmd --yes @danhachuel/thunderbolt@0.2.31 install
113
+ npx.cmd --yes @danhachuel/thunderbolt@0.2.31 doctor
114
+ npx.cmd --yes @danhachuel/thunderbolt@0.2.31
115
115
  ```
116
116
 
117
117
  Como alternativa, pode permitir scripts para o seu utilizador:
@@ -135,7 +135,7 @@ A página **Niche Finder** integra a lógica do projecto open source [johanfortu
135
135
 
136
136
  A interface apresenta directamente os parâmetros da busca: número de clusters entre 2 e 10, suporte mínimo entre 0,01 e 0,50, país, categoria de engagement, intervalo de datas e tags. A análise inicial é executada automaticamente e **Analisar Nichos** permite recalcular os resultados depois de alterar os filtros. O núcleo aplica normalização, filtros, `log1p`, `StandardScaler`, K-Means e FP-Growth. Os resultados aparecem em DataFrames para clusters, itemsets frequentes, regras de associação e dados analisados, acompanhados por uma visualização Plotly nativa e pesquisa de palavras nos clusters.
137
137
 
138
- As dependências adicionais são instaladas pelo fluxo normal do pacote: `scikit-learn`, `mlxtend`, `plotly`, `seaborn`, `matplotlib` e `kagglehub`. Em instalações existentes, execute novamente `npx.cmd --yes @danhachuel/thunderbolt@0.2.30 install`; o instalador detecta e reutiliza componentes já válidos.
138
+ As dependências adicionais são instaladas pelo fluxo normal do pacote: `scikit-learn`, `mlxtend`, `plotly`, `seaborn`, `matplotlib` e `kagglehub`. Em instalações existentes, execute novamente `npx.cmd --yes @danhachuel/thunderbolt@0.2.31 install`; o instalador detecta e reutiliza componentes já válidos.
139
139
 
140
140
  ## Armazenamento local
141
141
 
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import shutil
4
+ import tempfile
4
5
  from pathlib import Path
5
6
 
6
7
  import pandas as pd
@@ -61,26 +62,50 @@ def _copy_csv(source: Path, destination: Path) -> Path:
61
62
  return destination
62
63
 
63
64
 
65
+ def _has_usable_cached_dataset() -> bool:
66
+ """Check only the header so a valid multi-gigabyte cache is not read twice."""
67
+ if not DEFAULT_DATASET_PATH.exists() or DEFAULT_DATASET_PATH.stat().st_size <= 0:
68
+ return False
69
+ try:
70
+ columns = set(pd.read_csv(DEFAULT_DATASET_PATH, nrows=0).columns)
71
+ except (OSError, UnicodeDecodeError, pd.errors.ParserError, pd.errors.EmptyDataError):
72
+ return False
73
+ return set(REQUIRED_COLUMNS).issubset(columns)
74
+
75
+
64
76
  def _download_with_kagglehub() -> Path | None:
65
77
  if kagglehub is None:
66
78
  return None
67
- data_dir = ensure_data_dir()
68
- try:
69
- downloaded = kagglehub.dataset_download(DEFAULT_DATASET_SLUG, output_dir=str(data_dir))
70
- except TypeError:
71
- downloaded = kagglehub.dataset_download(DEFAULT_DATASET_SLUG)
72
- except Exception as exc: # pragma: no cover - depends on network/provider state
73
- raise DatasetError(f"O Thunderbolt não conseguiu preparar os dados automáticos: {exc}") from exc
74
- source = _find_csv(Path(downloaded))
75
- if source is None:
76
- raise DatasetError("A preparação automática terminou sem encontrar dados compatíveis.")
77
- return _copy_csv(source, DEFAULT_DATASET_PATH)
79
+ ensure_data_dir()
80
+ # KaggleHub rejects a non-empty output_dir on Windows. Use a new temporary
81
+ # directory for every download, then copy only the validated CSV into the
82
+ # persistent Thunderbolt cache. This also isolates partial downloads.
83
+ with tempfile.TemporaryDirectory(prefix=".niche-kaggle-", dir=str(DATA_DIR.parent)) as temporary_root:
84
+ temporary_path = Path(temporary_root)
85
+ try:
86
+ try:
87
+ downloaded = kagglehub.dataset_download(
88
+ DEFAULT_DATASET_SLUG,
89
+ output_dir=str(temporary_path),
90
+ force_download=True,
91
+ )
92
+ except TypeError: # compatibility with older KaggleHub releases
93
+ downloaded = kagglehub.dataset_download(
94
+ DEFAULT_DATASET_SLUG,
95
+ output_dir=str(temporary_path),
96
+ )
97
+ except Exception as exc: # pragma: no cover - depends on network/provider state
98
+ raise DatasetError(f"O Thunderbolt não conseguiu preparar os dados automáticos: {exc}") from exc
99
+ source = _find_csv(Path(downloaded))
100
+ if source is None:
101
+ raise DatasetError("A preparação automática terminou sem encontrar dados compatíveis.")
102
+ return _copy_csv(source, DEFAULT_DATASET_PATH)
78
103
 
79
104
 
80
105
  def download_kaggle_dataset() -> Path:
81
106
  """Prepare and cache the public Niche-Finder dataset without user interaction."""
82
107
  ensure_data_dir()
83
- if DEFAULT_DATASET_PATH.exists() and DEFAULT_DATASET_PATH.stat().st_size > 0:
108
+ if _has_usable_cached_dataset():
84
109
  return DEFAULT_DATASET_PATH
85
110
  if kagglehub is None:
86
111
  raise DatasetError("O componente automático de dados não está disponível nesta instalação.")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danhachuel/thunderbolt",
3
- "version": "0.2.30",
3
+ "version": "0.2.31",
4
4
  "description": "Thunderbolt — interface local para operação de canais faceless e motor MoneyPrinterTurbo",
5
5
  "main": "scripts/cli.mjs",
6
6
  "type": "module",