@danhachuel/thunderbolt 0.5.67 → 0.5.69

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 +6 -11
  2. package/package.json +1 -1
package/app/main.py CHANGED
@@ -452,13 +452,9 @@ def _render_notification_toast_cycle() -> None:
452
452
  _save_notification_toast_seen_ids(seen_ids)
453
453
 
454
454
 
455
- if hasattr(st, "fragment"):
456
- @st.fragment(run_every=NOTIFICATION_TOAST_INTERVAL)
457
- def render_global_notification_toasts() -> None:
458
- _render_notification_toast_cycle()
459
- else:
460
- def render_global_notification_toasts() -> None:
461
- _render_notification_toast_cycle()
455
+ def render_global_notification_toasts() -> None:
456
+ """Render notifications once per app run; never start a background timer."""
457
+ _render_notification_toast_cycle()
462
458
 
463
459
 
464
460
  def localized_tab_labels(labels: list[str], language: str | None = None) -> list[str]:
@@ -4630,9 +4626,8 @@ def _render_pipeline_worker_banner(worker_status: dict[str, Any], active_count:
4630
4626
  st.error(f"Último erro do worker: {worker_status['last_error']}")
4631
4627
 
4632
4628
 
4633
- @st.fragment(run_every=5.0)
4634
4629
  def _render_pipeline_progress_live() -> None:
4635
- """Poll the persisted pipeline state only while video tasks are active."""
4630
+ """Render pipeline state once; refresh occurs only after user interaction."""
4636
4631
  worker_status = load_pipeline_worker_status()
4637
4632
  tasks = read_json("tasks.json", [])
4638
4633
  active = [task for task in tasks if isinstance(task, dict) and str(task.get("state") or "") == "doing"]
@@ -6804,8 +6799,8 @@ def render_google_accounts(*, include_innertube: bool = True):
6804
6799
  st.rerun()
6805
6800
 
6806
6801
  st.divider()
6807
- st.subheader("Configuração global do YouTube")
6808
- st.caption("Estas credenciais pertencem à aplicação Google/YouTube e ficam separadas das restantes APIs do Thunderbolt.")
6802
+ st.subheader("Configuração Global: YouTube Data API v3 (API Key) + YouTube Analytics API (OAuth 2.0)")
6803
+ st.caption("1. YouTube Data API v3: Metadados públicos (títulos, views, likes) Via MCP integrado.\n\n2. YouTube Analytics API: Métricas internas (CTR, retenção, RPM, tráfego, demografia) Via OAuth 2.0")
6809
6804
  with st.form("google_global_api_settings_form"):
6810
6805
  google_api_cols = st.columns(2)
6811
6806
  with google_api_cols[0]:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danhachuel/thunderbolt",
3
- "version": "0.5.67",
3
+ "version": "0.5.69",
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",