@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.
- package/MANUAL-INSTALACAO.md +1 -1
- package/README.md +2 -2
- package/app/main.py +19 -0
- package/hermes_ui/languages.py +18 -1
- package/package.json +1 -1
- package/seed/references/guide-supabase.md +61 -0
package/MANUAL-INSTALACAO.md
CHANGED
|
@@ -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
|
|
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
|
|
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,
|
package/hermes_ui/languages.py
CHANGED
|
@@ -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
|
@@ -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
|
+

|
|
12
|
+
|
|
13
|
+
Para criar uma tabela nova, clique no botão `New table`.
|
|
14
|
+
|
|
15
|
+

|
|
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
|
+

|
|
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
|
+

|
|
40
|
+
|
|
41
|
+
## 2. Criar o bucket de Storage
|
|
42
|
+
|
|
43
|
+
No menu do Supabase, clique em `Storage`.
|
|
44
|
+
|
|
45
|
+

|
|
46
|
+
|
|
47
|
+
Clique em `New bucket`.
|
|
48
|
+
|
|
49
|
+

|
|
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
|
+

|
|
54
|
+
|
|
55
|
+
Depois, carregue a imagem de referência para o bucket usando o botão `Upload files`.
|
|
56
|
+
|
|
57
|
+

|
|
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)
|