@danhachuel/thunderbolt 0.2.84 → 0.2.85

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.
@@ -353,7 +353,7 @@ Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
353
353
 
354
354
  ## 8. Configuração inicial da UI
355
355
 
356
- Na primeira execução, a barra lateral apresenta **Início**, **Niche Finder**, **Pipeline**, **Pipeline TikTok**, **Automação**, **Edição**, **AI Influencers** e **Configurações**. O menu expansível **Automação** contém a subaba **Automação Youtube**. O menu expansível **Edição** contém **Limpador de Metadados**, **Cortes** e **Editor Python**. O menu expansível **AI Influencers** contém **Personagens**, **Redes Sociais** e **Tutorial Meta**, nessa ordem. O **Tutorial Meta** apresenta o guia de configuração de Instagram e credenciais Meta para automações com n8n. O menu expansível **Niche Finder** contém **Niche Finder Kaggle** e **Niche Finder Apify**. A aba **Niche Finder Kaggle** mantém a análise do dataset Kaggle; **Niche Finder Apify** é uma segunda alternativa independente, com actor, dataset, parâmetros, credencial, execução e resultados próprios. O menu **Pipeline** contém **Criação de Vídeos**, **Criação de Músicas**, **Roteiros** e **Upload**. O menu **Configurações** contém **Canais Youtube**, **Blueprints Youtube**, **MCP**, **Contas Google**, **Configuração API** e **Notificações**. Abra **Configurações > Contas Google** para gerir contas Google/YouTube, cartões, documentos de Upload directo, `sessionInfo`, `INNERTUBE_API_KEY`, contas adicionais e a configuração global do YouTube. Abra **Configurações > Configuração API** para configurar as restantes API Keys, providers, modelos, serviços e o **Teste de vozes**. A página **Configurações > Notificações** está reservada para futuros eventos locais. Para YouTube, preencha primeiro o par **OAuth Client ID + OAuth Client Secret** em **Contas Google** se pretende autorizar uploads. A **YouTube Data API Key** é uma credencial Google Cloud diferente e fica em **Contas Google**, apenas para o método oficial de métricas; Client ID + Client Secret não formam uma API Key.
356
+ Na primeira execução, a barra lateral apresenta **Início**, **Niche Finder**, **Pipeline**, **Pipeline TikTok**, **Automação**, **Edição**, **AI Influencers** e **Configurações**. O menu expansível **Automação** contém a subaba **Automação Youtube**. O menu expansível **Edição** contém **Limpador de Metadados**, **Cortes** e **Editor Python**. O menu expansível **AI Influencers** contém **Personagens**, **Redes Sociais**, **Tutorial Meta** e **Tutorial Supabase**, nessa ordem. O **Tutorial Meta** apresenta o guia de configuração de Instagram e credenciais Meta para automações com n8n. O **Tutorial Supabase** apresenta o guia para criar as tabelas `plans` e `posts` e o bucket `instagram-images`, incluindo a ligação para a fonte original no GitHub; as duas frases promocionais da comunidade foram omitidas. O menu expansível **Niche Finder** contém **Niche Finder Kaggle** e **Niche Finder Apify**. A aba **Niche Finder Kaggle** mantém a análise do dataset Kaggle; **Niche Finder Apify** é uma segunda alternativa independente, com actor, dataset, parâmetros, credencial, execução e resultados próprios. O menu **Pipeline** contém **Criação de Vídeos**, **Criação de Músicas**, **Roteiros** e **Upload**. O menu **Configurações** contém **Canais Youtube**, **Blueprints Youtube**, **MCP**, **Contas Google**, **Configuração API** e **Notificações**. Abra **Configurações > Contas Google** para gerir contas Google/YouTube, cartões, documentos de Upload directo, `sessionInfo`, `INNERTUBE_API_KEY`, contas adicionais e a configuração global do YouTube. Abra **Configurações > Configuração API** para configurar as restantes API Keys, providers, modelos, serviços e o **Teste de vozes**. A página **Configurações > Notificações** está reservada para futuros eventos locais. Para YouTube, preencha primeiro o par **OAuth Client ID + OAuth Client Secret** em **Contas Google** se pretende autorizar uploads. A **YouTube Data API Key** é uma credencial Google Cloud diferente e fica em **Contas Google**, apenas para o método oficial de métricas; Client ID + Client Secret não formam uma API Key.
357
357
 
358
358
  | Configuração | Finalidade |
359
359
  |---|---|
package/README.md CHANGED
@@ -54,9 +54,9 @@ No topo da área principal da aplicação existe o menu nativo de idioma no padr
54
54
 
55
55
  ## Navegação da UI 0.2.84
56
56
 
57
- A barra lateral mantém os níveis principais, nesta ordem: **Início**, **Niche Finder**, **Pipeline**, **Pipeline TikTok**, **Automação**, **Edição**, **AI Influencers** e **Configurações**. **Pipeline** é expansível e contém **Criação de Vídeos**, **Criação de Músicas**, **Roteiros** e **Upload**. **Automação** também é expansível e contém **Automação Youtube**. **Edição** é expansível e contém **Limpador de Metadados**, **Cortes**, **Editor Python** e **Download Mídia**, nessa ordem. **AI Influencers** é expansível e contém **Personagens**, **Redes Sociais** e **Tutorial Meta**, nessa ordem. **Niche Finder** é expansível e contém **Niche Finder Kaggle** e **Niche Finder Apify**. **Configurações** é expansível e contém **Canais Youtube**, **Blueprints Youtube**, **MCP**, **Contas Google**, **Configuração API** e **Notificações**. O Início reúne o dashboard e as filas do Pipeline, sem botões de acções rápidas.
57
+ A barra lateral mantém os níveis principais, nesta ordem: **Início**, **Niche Finder**, **Pipeline**, **Pipeline TikTok**, **Automação**, **Edição**, **AI Influencers** e **Configurações**. **Pipeline** é expansível e contém **Criação de Vídeos**, **Criação de Músicas**, **Roteiros** e **Upload**. **Automação** também é expansível e contém **Automação Youtube**. **Edição** é expansível e contém **Limpador de Metadados**, **Cortes**, **Editor Python** e **Download Mídia**, nessa ordem. **AI Influencers** é expansível e contém **Personagens**, **Redes Sociais**, **Tutorial Meta** e **Tutorial Supabase**, nessa ordem. **Niche Finder** é expansível e contém **Niche Finder Kaggle** e **Niche Finder Apify**. **Configurações** é expansível e contém **Canais Youtube**, **Blueprints Youtube**, **MCP**, **Contas Google**, **Configuração API** e **Notificações**. O Início reúne o dashboard e as filas do Pipeline, sem botões de acções rápidas.
58
58
 
59
- Todas as subabas internas também são localizadas pelo helper nativo de tabs: **Blueprints/Brandings**, **Pesquisa pública/Cadastro manual/Contas cadastradas**, **Upload/Biblioteca**, **Importar do YouTube/Canais em lote gmail/Cadastro manual**, **Criar vídeo/Vídeos**, **Novo roteiro/letra/Histórico guardado**, as três abas de análise de clusters, as quatro abas de cortes, **Vídeos/Código Python**, as quatro opções de Upload, **API Keys/Teste de vozes**, **Serviços e modelos/Fontes de materiais** e **Client MCP/Servidor MCP/Skill**. As chaves técnicas e a ordem funcional permanecem inalteradas.
59
+ A subaba **Tutorial Supabase** apresenta o guia de criação das tabelas `plans` e `posts` e do bucket `instagram-images`, com ligação para a fonte original no GitHub. As duas frases promocionais da comunidade foram omitidas. Todas as subabas internas também são localizadas pelo helper nativo de tabs: **Blueprints/Brandings**, **Pesquisa pública/Cadastro manual/Contas cadastradas**, **Upload/Biblioteca**, **Importar do YouTube/Canais em lote gmail/Cadastro manual**, **Criar vídeo/Vídeos**, **Novo roteiro/letra/Histórico guardado**, as três abas de análise de clusters, as quatro abas de cortes, **Vídeos/Código Python**, as quatro opções de Upload, **API Keys/Teste de vozes**, **Serviços e modelos/Fontes de materiais** e **Client MCP/Servidor MCP/Skill**. As chaves técnicas e a ordem funcional permanecem inalteradas.
60
60
 
61
61
  Dentro de **Configurações > Contas Google**, a UI contém os cartões expansíveis de contas Google/YouTube, `sessionInfo`, documentos de Upload directo, `INNERTUBE_API_KEY`, o formulário **Adicionar outra conta Gmail** e a configuração global do YouTube (OAuth Client ID, OAuth Client Secret e YouTube Data API Key). A página **Configuração API** contém as restantes credenciais, providers, modelos, serviços, Nano Banana, TikTok e Postiz.
62
62
 
package/app/main.py CHANGED
@@ -3797,6 +3797,23 @@ def render_models_ai_tutorial():
3797
3797
  return
3798
3798
  st.markdown(tutorial_content, unsafe_allow_html=True)
3799
3799
 
3800
+ def render_supabase_tutorial():
3801
+ tutorial_url = "https://github.com/gyoridavid/ai_agents_az/blob/main/episode_8/guide-supabase.md"
3802
+ tutorial_path = ROOT / "seed" / "references" / "guide-supabase.md"
3803
+ ui_language = current_ui_language()
3804
+ st.title(ui_text("Tutorial Supabase", ui_language))
3805
+ st.caption(ui_text("Guia de configuração do Supabase para automações com n8n.", ui_language))
3806
+ st.markdown(f"[Abrir fonte original no GitHub]({tutorial_url})")
3807
+ try:
3808
+ tutorial_content = tutorial_path.read_text(encoding="utf-8").strip()
3809
+ except OSError:
3810
+ tutorial_content = ""
3811
+ if not tutorial_content:
3812
+ st.error("O conteúdo local do tutorial não está disponível. Consulte a fonte original no GitHub.")
3813
+ return
3814
+ st.markdown(tutorial_content, unsafe_allow_html=True)
3815
+
3816
+
3800
3817
  def render_mcp():
3801
3818
  st.title("MCP")
3802
3819
  st.caption("Clientes externos, servidor MCP do Thunderbolt e a skill local ficam separados para evitar confundir funções diferentes.")
@@ -4085,6 +4102,7 @@ def main():
4085
4102
  ("Personagens", ":material/person:", "Personagens"),
4086
4103
  ("Redes Sociais", ":material/share:", "Redes Sociais"),
4087
4104
  ("Tutorial Meta", ":material/menu_book:", "Tutorial Meta"),
4105
+ ("Tutorial Supabase", ":material/storage:", "Tutorial Supabase"),
4088
4106
  ]
4089
4107
  settings_items = [
4090
4108
  ("Canais Youtube", ":material/ondemand_video:", "Canais Youtube"),
@@ -4192,6 +4210,7 @@ def main():
4192
4210
  "Download Mídia": render_media_download,
4193
4211
  "AI Influencers": lambda: render_edit_placeholder("AI Influencers", "Seleccione uma das abas AI Influencers no menu expansível."),
4194
4212
  "Tutorial Meta": render_models_ai_tutorial,
4213
+ "Tutorial Supabase": render_supabase_tutorial,
4195
4214
  "Personagens": lambda: render_edit_placeholder("Personagens", "Área reservada para a futura funcionalidade de personagens."),
4196
4215
  "Redes Sociais": lambda: render_edit_placeholder("Redes Sociais", "Área reservada para a futura funcionalidade de redes sociais."),
4197
4216
  "Upload": render_upload,
@@ -100,7 +100,7 @@ _CORE_UI_TEXT_KEYS = (
100
100
  "Início", "Niche Finder", "Pipeline", "Pipeline TikTok", "Automação", "Edição", "AI Influencers", "Configurações",
101
101
  "Criação de Vídeos", "Criação de Músicas", "Roteiros", "Upload", "Prompts Master", "Contas TikTok", "Automação Youtube",
102
102
  "Niche Finder Kaggle", "Niche Finder Apify", "Limpador de Metadados", "Cortes", "Editor Python", "Download Mídia",
103
- "Personagens", "Redes Sociais", "Tutorial Meta", "Canais Youtube", "Blueprints Youtube", "MCP", "Contas Google",
103
+ "Personagens", "Redes Sociais", "Tutorial Meta", "Tutorial Supabase", "Canais Youtube", "Blueprints Youtube", "MCP", "Contas Google",
104
104
  "Configuração API", "Notificações", "Interface local para operação e automação de conteúdo faceless", "Canais", "activos",
105
105
  "Tarefas", "total registado", "A fazer", "na pipeline", "Em execução", "a decorrer", "Concluídos", "artefactos prontos",
106
106
  "Falhas", "requerem atenção", "Filas locais e dependências da cascata", "Niche", "Blueprints", "Brand", "Script", "Title",
@@ -183,6 +183,23 @@ for _language_code, _tab_translation in TAB_TRANSLATIONS.items():
183
183
  UI_TRANSLATIONS[_language_code].update(_tab_translation)
184
184
 
185
185
 
186
+ TUTORIAL_TRANSLATIONS: dict[str, dict[str, str]] = {
187
+ "pt": {"Tutorial Supabase": "Tutorial Supabase", "Guia de configuração do Supabase para automações com n8n.": "Guia de configuração do Supabase para automações com n8n."},
188
+ "en": {"Tutorial Supabase": "Supabase Tutorial", "Guia de configuração do Supabase para automações com n8n.": "Supabase setup guide for n8n automations."},
189
+ "zh": {"Tutorial Supabase": "Supabase 教程", "Guia de configuração do Supabase para automações com n8n.": "用于 n8n 自动化的 Supabase 配置指南。"},
190
+ "de": {"Tutorial Supabase": "Supabase-Tutorial", "Guia de configuração do Supabase para automações com n8n.": "Anleitung zur Supabase-Konfiguration für n8n-Automatisierungen."},
191
+ "vi": {"Tutorial Supabase": "Hướng dẫn Supabase", "Guia de configuração do Supabase para automações com n8n.": "Hướng dẫn cấu hình Supabase cho tự động hóa n8n."},
192
+ "tr": {"Tutorial Supabase": "Supabase Eğitimi", "Guia de configuração do Supabase para automações com n8n.": "n8n otomasyonları için Supabase yapılandırma rehberi."},
193
+ "ru": {"Tutorial Supabase": "Руководство Supabase", "Guia de configuração do Supabase para automações com n8n.": "Руководство по настройке Supabase для автоматизации n8n."},
194
+ "es": {"Tutorial Supabase": "Tutorial de Supabase", "Guia de configuração do Supabase para automações com n8n.": "Guía de configuración de Supabase para automatizaciones con n8n."},
195
+ "id": {"Tutorial Supabase": "Tutorial Supabase", "Guia de configuração do Supabase para automações com n8n.": "Panduan konfigurasi Supabase untuk otomatisasi n8n."},
196
+ "it": {"Tutorial Supabase": "Tutorial Supabase", "Guia de configuração do Supabase para automações com n8n.": "Guida alla configurazione di Supabase per le automazioni n8n."},
197
+ }
198
+
199
+ for _language_code, _tutorial_translation in TUTORIAL_TRANSLATIONS.items():
200
+ UI_TRANSLATIONS[_language_code].update(_tutorial_translation)
201
+
202
+
186
203
  def ui_text(value: str, language: Any = "pt") -> str:
187
204
  code = language_code(language)
188
205
  return UI_TRANSLATIONS.get(code, {}).get(value, value)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danhachuel/thunderbolt",
3
- "version": "0.2.84",
3
+ "version": "0.2.85",
4
4
  "description": "Thunderbolt — interface local para operação de canais faceless e motor MoneyPrinterTurbo",
5
5
  "license": "MIT",
6
6
  "main": "scripts/cli.mjs",
@@ -0,0 +1,61 @@
1
+ # Guia para criar e configurar uma conta Supabase
2
+
3
+ Este guia mostra como criar uma conta gratuita no Supabase e preparar as tabelas e o armazenamento necessários para utilizar a base de dados com automações n8n.
4
+
5
+ Comece por abrir o [Supabase](https://supabase.com/) e criar uma nova conta gratuita.
6
+
7
+ ## 1. Criar as tabelas da base de dados
8
+
9
+ Quando a conta estiver pronta, abra o `Table Editor`.
10
+
11
+ ![Table Editor](https://github.com/user-attachments/assets/03f22c7c-18d5-4de0-81e0-f4fcee127647)
12
+
13
+ Para criar uma tabela nova, clique no botão `New table`.
14
+
15
+ ![New table](https://github.com/user-attachments/assets/2a8e59f5-d20c-470e-abc8-c15966f438c1)
16
+
17
+ ### Criar a tabela `plans`
18
+
19
+ A tabela `plans` deve ter quatro campos:
20
+
21
+ 1. `id` (`int8`) — chave primária; utilize as definições predefinidas.
22
+ 2. `period_type` (`text`) — identifica os períodos. Os valores possíveis são `quarter`, `month` e `week`.
23
+ 3. `period_index` (`text`) — guarda o índice do período, por exemplo `2025-Q2` para o segundo trimestre de 2025.
24
+ 4. `plan_value` (`text`) — guarda o valor efectivo do plano para o período indicado.
25
+
26
+ ![Campos da tabela plans](https://github.com/user-attachments/assets/d308dd34-8fde-4cd4-8347-d2e97db1d648)
27
+
28
+ Quando terminar, clique em `Save`.
29
+
30
+ ### Criar a tabela `posts`
31
+
32
+ Crie a tabela `posts` com os seguintes campos:
33
+
34
+ 1. `id` (`int8`) — chave primária; utilize as definições predefinidas.
35
+ 2. `created_at` (`timestamp`) — valor predefinido `now()`.
36
+ 3. `post_summary` (`text`) — guarda o resumo de cada publicação para manter consistência entre publicações.
37
+ 4. `image_path` (`text`) — guarda o caminho da imagem gerada e carregada para o bucket do Supabase Storage.
38
+
39
+ ![Campos da tabela posts](https://github.com/user-attachments/assets/917d2556-eb3d-48a1-9095-65332882fd0c)
40
+
41
+ ## 2. Criar o bucket de Storage
42
+
43
+ No menu do Supabase, clique em `Storage`.
44
+
45
+ ![Menu Storage](https://github.com/user-attachments/assets/e7cbd532-b7bd-4404-a169-2965932be24e)
46
+
47
+ Clique em `New bucket`.
48
+
49
+ ![New bucket](https://github.com/user-attachments/assets/9deca74e-1798-4733-8593-0b5593857ab4)
50
+
51
+ Dê ao bucket o nome `instagram-images` ou outro nome compatível com as regras de nomenclatura. Guarde esse nome, porque será necessário configurá-lo no n8n.
52
+
53
+ ![Nome do bucket](https://github.com/user-attachments/assets/10cf6666-63bb-4404-a169-2965932be24e)
54
+
55
+ Depois, carregue a imagem de referência para o bucket usando o botão `Upload files`.
56
+
57
+ ![Upload files](https://github.com/user-attachments/assets/6cc83262-b92c-4f74-86c3-a45c9c0456f8)
58
+
59
+ A conta Supabase está pronta para ser utilizada pela automação.
60
+
61
+ Fonte original: [guide-supabase.md no GitHub](https://github.com/gyoridavid/ai_agents_az/blob/main/episode_8/guide-supabase.md)