Repository navigation
Releases: byebis/nexus-news-ai-wp
Release list
v1.1.18.1 — Luce (1shot-ui-kit + Suite Bridge)
🎨 Luce — v1.1.18.1 adotta il kit UI condiviso della Byebis 1Shot Suite: 1shot-ui-kit v2.0 «light» (solo CSS, zero JS) + Byebis Suite Bridge.
Novità
- Kit UI condiviso: la testa di pagina admin si armonizza (titolo con accento + sottotitolo) e bottoni/card ereditano raggi, bordi e transizioni coerenti con gli altri plugin Byebis. L'adozione è prudente: guardie
class_existssu ogni punto di integrazione, il plugin funziona anche se il kit manca. - Suite strip sulla Dashboard: gli altri plugin Byebis installati e attivi (1ShotWP, 1Shot Visibility, Keeper AI) si riconoscono a un colpo d'occhio con badge di versione e link diretto al loro pannello; badge onesto «Inactive» per quelli non presenti.
- Zero costi di performance: nessun JavaScript nuovo, nessuna chiamata REST/nonce/localize extra; CSS con cache-busting automatico (versione da filemtime), caricato SOLO sulle pagine del plugin.
Nota upgrade
Aggiornamento cosmetico + integrazione: nessuna migrazione di schema, nessun setting nuovo. Tutte le fix della 1.1.18 «Recupero e Segreti» restano incluse (reaper run fantasma, social solo su pubblicato, SSRF chiuso, segreti protetti, rate limit admin).
Installazione
Scarica nexus-news-ai-v1.1.18.1.zip → Plugin → Aggiungi nuovo → Carica plugin (sostituisce la 1.1.18).
v1.1.18 — Recupero e Segreti
🛡️ Recupero e Segreti — v1.1.18 nasce dall'audit completo su TUTTO il codice (9 agenti in parallelo, ~75.000 righe analizzate, 150 finding): chiuso 1 critico, 17 alti, i medi prioritari (blocco B) e gli interventi di scala (blocco C).
Il critico chiuso
Run fantasma → stallo permanente: se un run di un agente crashava o andava in timeout, la riga di telemetria restava «running» per sempre, l'articolo veniva escluso dai giri successivi e l'agente restava bloccato in errore. Ora: reaper che chiude le run fantasma (>30 min), TTL sul blocco di riresume (gli articoli tornano riprendibili) e auto-riattivazione degli agenti in errore con backoff 30 min — la redazione si riprende da sola dopo un outage AI transiente.
Le novità principali
- Social solo su articolo pubblicato: Telegram/X/Discord/LinkedIn partono SOLO quando il post WordPress è in stato «pubblicato» (prima una bozza veniva comunque diffusa). Log onesto per piattaforma sui salti.
- SSRF chiuso su tutte le vie: redirect disabilitati sui fetch esterni (prima un 30x aggirava la guardia verso IP interni/metadata cloud), limiti di dimensione risposta, guardia IPv6 riparata (era codice morto:
::1non rilevato), pinning IP anti-DNS-rebinding via cURL, guard estesa ai modelli provider custom. - Segreti protetti: refresh token Google mai più in chiaro senza openssl (fail-closed + notice admin, token legacy ri-cifrati appena possibile); token/chiavi social e AI non viaggiano più nell'attributo
valuedei form;wp nexus settings getmaschera i segreti (--revealper mostrarli);indexnow_keymascherato; import JSON passa dalla stessa sanitizzazione completa del PUT. - AI più onesta: i contenuti troncati per max_tokens NON vengono più salvati come completi né bloccano la traduzione per sempre; il tentativo extra ×1.5 non sostituisce più una risposta buona con una peggiore; timeout proporzionale ai max_tokens (fino a 300s) + budget temporale totale anti-retry-storm.
- Amministrazione protetta: rate limit + lock sui pulsanti costosi (run pipeline/Wire, process coda, test AI/strumenti/fonti: 1 esecuzione concorrente, min 15s, 429 onesto); citazioni AI con scheme validati (addio
javascript:); «Salva modello» non resta più bloccato; status provider grigio quando il test non è disponibile. - Scala: ricerca articoli con indice FULLTEXT quando il DB lo supporta (schema v9, fallback LIKE automatico) + paginazione ricerca finalmente allineata; retention automatica (telemetria 30g, revisioni 10/articolo, dead letter 30g); digest newsletter con cursor/resume a batch; upsert Search Console a chunk (~6 query invece di ~3000); cap agli shortcode pubblici.
- Wire con lock per tema + run row + heartbeat: niente più doppio Wire parallelo (doppio costo AI / duplicati).
Nota upgrade
Dopo l'aggiornamento lo schema passa v8 → v9 (solo indice FULLTEXT, nessuna colonna/tabella nuova: su DB che non lo supportano resta la ricerca LIKE, zero errori). I form delle chiavi ora mostrano «•••• salvata — compila per sostituire»: il campo vuoto NON cancella il valore salvato.
Installazione
Scarica nexus-news-ai-v1.1.18.zip → Plugin → Aggiungi nuovo → Carica plugin (sostituisce la 1.1.17).
v1.1.17 — Pong Onesto
🏓 Pong Onesto — fix del test di generazione segnalato su OpenRouter: modelli trovati, ma «risposta vuota» e «troncata per max_tokens» su TUTTI i modelli. Tre cause vere trovate e chiuse.
Cosa non andava
- Test di generazione con
max_tokens: 8(v1.1.16): i modelli reasoning — oggi la maggior parte dei:freesu OpenRouter — bruciano intero il budget di token nel ragionamento PRIMA di emettere contenuto →contentvuoto +finish_reason=length→ falso «risposta vuota» su qualunque modello. - La UI ignorava l'esito della generazione: il pannello provider mostrava verde «Connesso: N modelli» anche quando la mini completion falliva (il dato vero finiva solo nel log attività).
- Errore «vuoto» non azionabile: nessuna distinzione tra token esauriti e vuoto vero, nessun retry, grammatica «aumento max_tokens».
Cosa cambia
- Test provider: mini chat completion con
max_tokens 1024(costo ~zero, spazio per reasoning + risposta). Se resta vuoto il motore ritenta UNA volta conmax_tokens ×2(cap 8000) prima di fallire. - Stato provider onesto: verde SOLO se anche la generazione risponde — «Generazione OK (modello, ms)», con nota «risposta troncata» se il testo resta mozzato; rosso con l'errore del motore se fallisce; avviso se il modello impostato non è nell'elenco del provider.
- Errori «vuoto» chiari: «max_tokens esauriti prima del contenuto (tipico dei modelli reasoning). Aumenta max_tokens e riprova.» oppure «(finish_reason=stop). Riprova; se persiste, prova un altro modello.» + dettaglio «solo ragionamento (N caratteri)» quando il modello popola
reasoning/reasoning_content(OpenRouter/DeepSeek). - Il retry «vuoto+length» vale anche per la generazione vera (rewrite/translate/digest e fasi JSON): meno runfallite sui modelli reasoning, nessun cambio di costo quando tutto va bene.
- i18n IT/EN completa (pattern retrocompatibili con le righe attività già in database).
Nota pratica OpenRouter
Con i modelli :free reasoning lascia max_tokens alto (di default 2000, auto-bump ×1.5/×2 fino a 8000): per articoli lunghi scegli modelli non-reasoning o accetta il bump automatico. Il messaggio «troncata per max_tokens» ora dice esattamente cosa fare.
Installazione
Scarica nexus-news-ai-v1.1.17.zip → Plugin → Aggiungi nuovo → Carica plugin (sostituisce la 1.1.16, nessuna migration: schema resta v8). Dopo l'aggiornamento rifai il Test sul provider: ora il verde significa davvero che il modello risponde.
v1.1.16 — Agenti Viventi
👁️ Agenti Viventi — indagine sul campo (4 investigatori, file:riga) + 6 package di fix: ogni run di ogni agente è registrata, l'orario è SEMPRE quello di WordPress, le fasi del Wire sono reali, il wizard dichiara dove finiscono gli articoli.
Agenti visibili — telemetria run completa
- Nuova tabella
nexus_agent_runs(schema v8 idempotente): ogni run registra inizio/fine/durata, passi (raccolta → valutazione → riscrittura → pubblicazione), candidati, articoli creati, fonti ok/err e ultimo errore — via try/finally: nessuna run resta aperta - Drawer «Cosa sta facendo» sulla card di ogni agente: step runtime live, ultime run, checklist «Perché non vedi articoli?» (fonti assenti, cap giornaliero, chiave di ricerca mancante, cron non partito, destinazione, budget) e attività per-agente (endpoint già esistente, ora collegato alla UI)
- Stato errore vivo sull'agente (run fallita → errore, primo successo → attivo; pausa utente rispettata) + health per-agente; errori fonte attribuiti all'agente (prima anonimi)
Orologio onesto — solo l'ora di WordPress
- Tutti i timestamp REST viaggiano con l'offset del sito (
wp_timezone): addio «2 ore fa» su un agente appena creato quando WordPress è su UTC e il browser no — il browser mostra sempre l'ora impostata in WordPress, su qualsiasi dispositivo - 2 finestre orarie corrette (digest, briefing) che confrontavano UTC con l'orario di sito; dedup e news-sitemap verificate: non erano bug (UTC vs UTC)
- Test provider AI con generazione vera: mini chat completion reale oltre all'elenco modelli + avviso se il modello configurato non esiste nel provider
Wire reale — niente più animazioni
- Le fasi del Nexus Wire non sono più un copione su timer 15s: l'interfaccia mostra gli step runtime veri di ogni agente (poll /live), con spinner onesto se non c'è ancora nulla
Wizard onesto — «Dove finiscono gli articoli»
- Scelta esplicita: Solo Nexus (approvazione) / Bozze WordPress / Pubblica direttamente → modalità agente +
post_status+ post nativi, con indicazione di dove vedere il risultato - Fonti RSS di esempio non più pre-selezionate; passo finale «Prossimi passi»; ogni pannello ha errore reale + Riprova (mai skeleton eterni)
- Coda Lavori: args leggibili (agente/articolo) e dead-letter con filtro e contatore
Sotto il cofano
- Endpoint
agents/{id}/diagnostics(gates, cron, run, errori, verdict a codici localizzati IT/EN); health per-agente; uninstall allineato alla 13ª tabella; i18n IT+EN completo per tutte le nuove stringhe
Installazione
Scarica nexus-news-ai-v1.1.16.zip → Plugin → Aggiungi nuovo → Carica plugin. La migration schema v8 (tabella agent_runs) parte da sola al primo caricamento ed è idempotente.
v1.1.15 — Perfezione Maniacale
🧹 Perfezione Maniacale — zero feature nuove, solo profondità: 6 auditor paralleli su ~19.000 righe, 12 difetti P1 + 25 P2 + 29 P3 chiusi, protocollo di verifica a 7 gate tutto verde.
Affidabilità
- Coda lavori alla perfezione: reset con NULL su DATETIME (dead-letter di nuovo raggiungibile su MySQL moderno), heartbeat dei job vivi (zero riaccodamenti di job ancora in esecuzione → zero doppio costo AI), esiti
ok=falseora in retry+backoff+dead-letter, setting «tentativi massimi» finalmente letto, lock atomici, mutex per-articolo sulla pubblicazione (zero doppie pubblicazioni social), budget di tempo per il giro cron - Contenuto completo risvegliato: Readability + dispatcher fonti ora davvero caricati (erano dead code alla radice), guardia anti-binario corretta, circuit breaker sui feed RSS morti
Sicurezza
- Token Google in AES-256-GCM (retrocompatibile) + rinnovo senza corse; download immagini senza redirect (bypass SSRF chiuso); token MCP per-agente non più in GET /agents; errori di rete redattati (niente URL con token)
Performance
- Lista REST senza LONGTEXT (payload 10-50× più leggero); sitemap immagini/video cachiate + pre-carico attachment (da 2.000-4.000 query/hit Googlebot a O(1)); indici created_at/published_at/views (schema v7); stats() aggregata; settings in cache di request; upsert GSC/GA4 a lotti da 100; read_time dalla colonna; cache 3s sul pannello live; observer i18n sui soli nodi nuovi
Compat & ciclo di vita
- Uninstall multisite-aware (tutti i blog, 12 tabelle, fallback allineato); cron calendario spento alla disattivazione; zero meta duplicate con Yoast/RankMath (JSON-LD NewsArticle resta); traduzioni non più orfane alla cancellazione del sorgente; template single sovrascrivibile dal tema; niente flush fantasma al primo boot; Tested up to 6.8
Integrazioni
- Retry singolo su 429/5xx per i 4 canali social (mai dopo l'id remoto: zero doppi post); X con conteggio CJK ponderato; GSC/GA4 retry + re-refresh su 401; digest con log onesto; Telegram senza message_id = fallimento dichiarato; contratto AI engine implementato (retry ×1.5 +
truncated, RETRY_SLEEP_MAX, Retry-After data)
UI & i18n
- ARIA calendario conforme, toast annunciati, CSS pubblico 100% a token, scope=col, break 782px; i18n impermeabile: 2 compositi ripristinati + 53 voci EN + 4 pattern nuovi (536 pattern tutti compilanti, test funzionali 17/17)
Installazione
Scarica nexus-news-ai-v1.1.15.zip → Plugin → Aggiungi nuovo → Carica plugin. La migration schema v7 (indici) parte da sola al primo caricamento ed è idempotente.
v1.1.14 — La redazione impara e si organizza
🚀 La redazione impara e si organizza — 6 agenti in parallelo + glue. Il cerchio misura → impara → agisci si chiude.
Nuovo (6 moduli)
- 🧙 Wizard Google guidato — nuova pagina «Google»: verifica LIVE della property Search Console prima di salvarla (lista property 1-click, errori 403/404/token spiegati), stato onesto della sync e bottone «Sincronizza ora»
- 🔎 Opportunità di ricerca — il sync GSC importa ora le query di ricerca (nuova tabella, migration automatica); in Analytics la sezione separa titoli da migliorare (impression alte, CTR basso) e argomenti mancanti (query senza pagina) con azione 1-click «Assegna a un agente» che crea il lavoro nella coda esistente
- 🩺 Health check redazione — cron orario su 5 fronti: feed RSS fermi, lavori bloccati, budget AI, WP-Cron ferma, token Google scaduto; card in Dashboard + notifiche solo sui problemi NUOVI
- 📅 Calendario editoriale — mese degli articoli programmati/in attesa, slot orari globali e per agente (override), riallineamento automatico dei fuori-slot, suggerimento orari dalle pubblicazioni reali
- ✉️ Digest settimanale potenziato — top performance (metriche reali), uso AI (chiamate/token/costo), errori della settimana; preferenze con anteprima email
- 🎯 SEO pack — sitemap immagini
/nexus-images.xml, video sitemap/nexus-videos.xml(embed YouTube reali), JSON-LD NewsArticle completo + Twitter Card
i18n
- Copertura EN dei 6 moduli: 191 voci esatte + 20 pattern compositi numerici, in cima alla lista (i compositi corrono prima dei frammenti generici pre-esistenti)
Codice
- 4 moduli self-registranti nuovi (wizard, health, opportunità, calendario); digest caricato da newsletter, video sitemap da news sitemap; nessuna API pubblica esistente cambiata; migration DB automatica al bump di versione
Installazione
Scarica nexus-news-ai-v1.1.14.zip → Plugin → Aggiungi nuovo → Carica plugin. La migrazione della tabella query parte da sola al primo caricamento.
v1.1.13.1 — Insight performance + zero conferme native
✨ Polish release — la redazione mostra i propri numeri e dice addio agli ultimi dialoghi nativi. 4 agenti in parallelo + glue.
Nuovo
- Card "Insight performance" in Analytics: top 5 articoli per click (GSC) con impressioni, CTR, posizione media e viste (GA4), totali con trend vs periodo precedente (↑↓ e delta %), selettore periodo 7/30/90gg funziona anche senza JS. Stati onesti: Google non connesso → CTA alle Impostazioni; sync non ancora arrivato → messaggio chiaro, niente zeri inventati
UI
- Zero
window.confirmnativi nel pannello: scollega provider, re-check capo redattore, avvio testata, annulla lavoro, pulizia coda, rigenerazione chiave API — tutti sul pattern conferma-inline con ponte pubblico riutilizzabile (NexusAdminUi)
i18n
- Copertura EN completa delle stringhe 1.1.13 (29 voci + 2 pattern correttivi — il toast di fine wizard usciva misto IT/EN per un conflitto d'ordine tra pattern, corretto)
- Etichette conferma nuove: «Sì, genera» «Sì, annulla» «Sì, verifica»
Codice
- 6 copie private di helper settings/lowercase consolidate sull'helper pubblico (comportamento identico)
Installazione
Scarica nexus-news-ai-v1.1.13.1.zip → Plugin → Aggiungi nuovo → Carica plugin.
v1.1.13 — Ottimizzazione di tutto (sicurezza, efficienza, UI)
⚡ Ottimizzazione di tutto — nessuna feature nuova: tutto ciò che esiste funziona meglio. 6 agenti in parallelo, 8 commit, zero conflitti (1 agente = 1 set di file).
Sicurezza pipeline
- Score AI non parsato = revisione umana: una risposta AI illeggibile non pubblica più da sola (prima valeva 70 e poteva auto-approvarsi); ora vale 0 e va in attesa con log onesto
- Mutex sul cron tick: tick sovrapposti non raddoppiano più il costo AI
- Resume per-articolo con lock + esclusioni anti-starvation in SQL
Efficienza
- GA4 batched: ~51 richieste HTTP → max 4 a giro (le metriche non vengono più tagliate dal budget)
- Evergreen: query con finestra su metric_date, niente più full-scan settimanale
- Retention automatica: log oltre 90gg e metriche oltre 365gg cancellati a batch (schema v5), transient scaduti ripuliti
- Disinstallazione completata: token OAuth Google e opzioni moduli ora rimossi davvero
Notifiche
- Eventi con chiave strutturata (non più matching testuale fragile)
- Chat Telegram ops dedicata: gli errori non finiscono più nel canale pubblico dei lettori
- Rate limit configurabile
Scala
- Limiti dedup/interlink configurabili in Impostazioni → Sistema → «Limiti e scala» + avviso onesto (1/giorno) quando il confronto viene troncato — il dedup non smette più di lavorare in silenzio
UI
- Dirty-guard «modifiche non salvate» nelle Impostazioni (prima si perdevano in silenzio cambiando tab)
- Badge connessioni in vista (Google / Telegram / Provider AI)
- Tab AI in sub-tab (Provider | Generazione | Moduli AI), un solo handler accordion
- Wizard non chiudibile durante la creazione agenti, conferme inline uniformi, focus trap nei modali, polling in pausa a tab nascosta
- CSS/JS inline di Analytics/Strumenti/Lavori estratti in file versionati con palette unificata sui token
Installazione
Scarica nexus-news-ai-v1.1.13.zip → Plugin → Aggiungi nuovo → Carica plugin (l'upgrade esegue automaticamente lo schema v5).
v1.1.12 — Redazione che impara (feedback loop Google)
🧠 Redazione che impara — il feedback loop Google: la redazione AI ora misura il traffico reale e impara da esso.
Novità
- Google OAuth 2.0 (Search Console + GA4): connessione da Impostazioni → Sistema, scopes readonly, token cifrato AES-256-CBC
- Sync metriche giornaliero: click/impression/posizione/views per-pagina reali → tabella
nexus_metrics(schema v4), attribuzione GSC via path permalink, mai righe replicate - Learning: briefing performance (top fonti/categorie + consigli) iniettato nei prompt di raccolta/valutazione → gli agenti preferiscono ciò che porta traffico
- Dedup semantico: simhash 64-bit + Hamming — i candidati troppo simili vengono scartati PRIMA dell'insert
- Link interni: blocco «Leggi anche» automatico (max 3, scoring keyword+categoria)
- Google News sitemap:
nexus-news-sitemap.xml(≤48h, max 1000) + ping + robots - Evergreen: refresh settimanale dei pillar via AI con prompt protettivo (fail = contenuto intatto)
- Notifiche: webhook Slack-compatibile + Telegram (errori / attese / pubblicati), rate limit 10/h
- UI: nuove sezioni impostazioni per tutti i moduli, segreti mascherati in REST, 61 stringhe IT/EN
Sicurezza
Token Google mai in log/REST · deattivazione pulita dei 3 nuovi cron · try/catch totale: nessun modulo nuovo può bloccare raccolta o pubblicazione
Installazione
Scarica nexus-news-ai-v1.1.12.zip → Plugin → Aggiungi nuovo → Carica plugin.
v1.1.10.1 — Fix audit: SSRF, i18n, uninstall
🔧 v1.1.10.1 — Fix dall'audit (sicurezza, i18n, pulizia)
Patch di manutenzione costruita sui risultati dell'audit approfondito della 1.1.10. Nessuna nuova feature: quattro chiusure chirurgiche.
🔒 Sicurezza — SSRF chiuso
- Il fetch del fact-check (testo della fonte originale) passa ora dalla guardia centralizzata
assert_safe_url()(DNS + blocco IP privati/riservati), fail-closed. Dalla 1.1.10 ilsource_urlpuò arrivare da adapter multi-tipo (web, search, MCP) e da contenuti non fidati: la verifica esplicita è doverosa.
🌍 i18n — 64 stringhe coperte
- Tutte le stringhe nuove della 1.1.10 (provider custom, login web OAuth, model picker, strumenti/fonti per agente, editor fonti redazioni, messaggi REST) hanno ora la traduzione inglese nel dizionario
- 7 pattern nuovi per i messaggi REST compositi concatenati con variabili (chiave/URL base mancante, provider sconosciuto, errore HTTP…), con i più specifici prima dei generici
🧹 Fix
- Cosmetico: il messaggio della guardia endpoint AI mostrava letteralmente «l\u2019endpoint» (escape finito in una stringa single-quoted) → ora «l'endpoint»
- Uninstall completo: pulizia di 7 famiglie transient (cache feed, fact-check fonti con cooldown/fallimenti, rate limit REST, cache full-content Readability, lock traduzioni, rate limit OAuth, circuit breaker provider) + 4 transients singoli (prezzi AI live, conteggio CPT legacy, featured viste, token Reddit) — tutti con TTL, ora la cancellazione lascia l'installazione davvero pulita
- User-Agent Reddit ora usa
NEXUS_VERSIONinvece di una versione hardcodata
Verifiche: php_sanity 63 file 0 issues · sintassi OK su tutti i file toccati · i18n diff vs 1.1.9 = 0 stringhe nuove scoperte · fetch_source_text ora GUARDED nello script SSRF dell'audit · md5 zip verificato byte-per-byte.
Commit: vedi tag v1.1.10.1 — 🚆 Tutto ciò che WordPress fa nativo, lo usiamo; il resto lo costruiamo meglio.