@danhachuel/thunderbolt 0.2.98 → 0.2.99

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.
Files changed (2) hide show
  1. package/app/main.py +8 -8
  2. package/package.json +1 -1
package/app/main.py CHANGED
@@ -3579,7 +3579,7 @@ def render_settings():
3579
3579
  st.subheader("API Keys")
3580
3580
  port = st.number_input("Porta Streamlit", 1, 65535, int(settings.get("port", 3030)))
3581
3581
  moneyprinter_path = st.text_input("Pasta do motor de vídeo", settings.get("moneyprinter_path", ""), key="settings_moneyprinter_path")
3582
- with st.expander("Niche Finder — execução remota no Kaggle", expanded=True):
3582
+ with st.expander("Niche Finder — execução remota no Kaggle", expanded=False):
3583
3583
  st.caption("O dataset permanece no Kaggle. O Thunderbolt usa estas credenciais apenas para publicar/executar a kernel e obter os resultados pequenos da análise.")
3584
3584
  kaggle_cols = st.columns(3)
3585
3585
  with kaggle_cols[0]:
@@ -3589,7 +3589,7 @@ def render_settings():
3589
3589
  with kaggle_cols[2]:
3590
3590
  kaggle_kernel_slug = text_setting("Slug da kernel", "kaggle_kernel_slug", help_text="Identificador da kernel remota, por exemplo thunderbolt-niche-finder.")
3591
3591
 
3592
- with st.expander("Niche Finder — execução através da Apify", expanded=True):
3592
+ with st.expander("Niche Finder — execução através da Apify", expanded=False):
3593
3593
  st.caption("O token fica guardado apenas no storage local. A aba Niche Finder Apify só usa este serviço depois de clicar no botão de pesquisa.")
3594
3594
  apify_cols = st.columns(4)
3595
3595
  with apify_cols[0]:
@@ -3601,7 +3601,7 @@ def render_settings():
3601
3601
  with apify_cols[3]:
3602
3602
  apify_run_timeout = st.number_input("Limite da execução (s)", min_value=30, max_value=7200, value=int(settings.get("apify_run_timeout_seconds", 900)), step=30)
3603
3603
 
3604
- with st.expander("Nano Banana — geração de thumbnails", expanded=True):
3604
+ with st.expander("Nano Banana — geração de thumbnails", expanded=False):
3605
3605
  st.caption("A Nano Banana gera a imagem final das thumbnails a partir da variante escolhida. A chave é guardada apenas no storage local e é distinta da chave do Gemini usado como LLM textual.")
3606
3606
  nano_cols = st.columns(2)
3607
3607
  with nano_cols[0]:
@@ -3611,7 +3611,7 @@ def render_settings():
3611
3611
  gemini_image_aspect_ratio = st.selectbox("Proporção da thumbnail", ["16:9", "9:16", "1:1", "4:5"], index=["16:9", "9:16", "1:1", "4:5"].index(str(settings.get("gemini_image_aspect_ratio") or "16:9")) if str(settings.get("gemini_image_aspect_ratio") or "16:9") in {"16:9", "9:16", "1:1", "4:5"} else 0)
3612
3612
  gemini_image_size = st.selectbox("Tamanho da imagem", ["1K", "2K", "4K"], index=["1K", "2K", "4K"].index(str(settings.get("gemini_image_size") or "1K")) if str(settings.get("gemini_image_size") or "1K") in {"1K", "2K", "4K"} else 0)
3613
3613
 
3614
- with st.expander("LLM — providers e modelos", expanded=True):
3614
+ with st.expander("LLM — providers e modelos", expanded=False):
3615
3615
  provider_options = ["openai", "moonshot", "shengsuanyun", "gemini", "deepseek", "qwen", "azure", "volcengine", "grok", "minimax", "mimo", "cloudflare", "modelscope", "aihubmix", "aimlapi", "evolink", "ollama", "oneapi", "litellm", "groq", "pollinations"]
3616
3616
  current_llm_provider = str(settings.get("llm_provider") or DEFAULT_LLM_PROVIDER).strip().lower()
3617
3617
  llm_provider = st.selectbox("LLM provider", provider_options, index=provider_options.index(current_llm_provider) if current_llm_provider in provider_options else 0)
@@ -3667,7 +3667,7 @@ def render_settings():
3667
3667
  with cols[2]:
3668
3668
  settings[f"{prefix}_model_name"] = text_setting("Model", f"{prefix}_model_name")
3669
3669
 
3670
- with st.expander("Voz, TTS e música — Azure Speech, restantes serviços e Suno", expanded=True):
3670
+ with st.expander("Voz, TTS e música — Azure Speech, restantes serviços e Suno", expanded=False):
3671
3671
  cols = st.columns(2)
3672
3672
  with cols[0]:
3673
3673
  azure_speech_key = text_setting("Azure Speech key", "azure_speech_key", secret=True)
@@ -3690,19 +3690,19 @@ def render_settings():
3690
3690
  suno_api_base_url = text_setting("Suno API Base URL", "suno_api_base_url", help_text="Use o endpoint compatível fornecido pelo seu acesso Suno; não é inventado pelo Thunderbolt.")
3691
3691
  suno_api_endpoint = text_setting("Suno API endpoint", "suno_api_endpoint", help_text="Ex.: /api/generate")
3692
3692
 
3693
- with st.expander("TikTok for Developers — Client ID e Client Secret", expanded=True):
3693
+ with st.expander("TikTok for Developers — Client ID e Client Secret", expanded=False):
3694
3694
  st.caption("Apenas as credenciais da aplicação ficam nesta UI. Redirect URI, scopes, autorização e tokens são geridos no TikTok for Developers Playground.")
3695
3695
  tiktok_client_key = text_setting("TikTok Client ID", "tiktok_client_key", secret=True)
3696
3696
  tiktok_client_secret = text_setting("TikTok Client Secret", "tiktok_client_secret", secret=True)
3697
3697
 
3698
- with st.expander("Publicação através do Upload-Post"):
3698
+ with st.expander("Publicação através do Upload-Post", expanded=False):
3699
3699
  upload_post_enabled = st.checkbox("Activar Upload-Post", bool(settings.get("upload_post_enabled", False)))
3700
3700
  upload_post_api_key = text_setting("Upload-Post API key", "upload_post_api_key", secret=True)
3701
3701
  upload_post_username = text_setting("Upload-Post username", "upload_post_username")
3702
3702
  upload_post_platforms = text_setting("Plataformas Upload-Post", "upload_post_platforms")
3703
3703
  upload_post_auto_upload = st.checkbox("Publicar automaticamente após gerar", bool(settings.get("upload_post_auto_upload", False)))
3704
3704
 
3705
- with st.expander("Postiz — API key, integração e MCP", expanded=True):
3705
+ with st.expander("Postiz — API key, integração e MCP", expanded=False):
3706
3706
  st.caption("O Thunderbolt é o cliente. A API key é enviada exclusivamente ao servidor Postiz configurado; não é colocada em URLs, logs ou repositório.")
3707
3707
  postiz_enabled = st.checkbox("Activar Postiz como fallback final", bool(settings.get("postiz_enabled", False)))
3708
3708
  postiz_mode = st.selectbox("Modo de ligação", ["api", "mcp"], index=0 if settings.get("postiz_mode", "api") != "mcp" else 1, help="API é o modo determinístico de upload. MCP fica disponível para uma ligação compatível com Streamable HTTP.")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danhachuel/thunderbolt",
3
- "version": "0.2.98",
3
+ "version": "0.2.99",
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",