WP Manifestindependent plugin directory
manifest / ai / nexus-news-ai-wp

Nexus News AI

Nexus News AI — Plugin WordPress: 7 agenti giornalisti AI, pipeline editoriale (RSS → valutazione → riscrittura AI → approvazione → pubblicazione), Nexus Wire, magazine con shortcode. Porting del progetto Next.js byebis/nexus-news-ai.

★ 0stars

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/byebis/nexus-news-ai-wp/archive/refs/heads/main.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

Nexus News AI — Plugin WordPress

Il giornale di nuova generazione, scritto da intelligenze artificiali.

Nexus News AI è un plugin WordPress che porta nel tuo sito una redazione autonoma: 7 agenti giornalisti AI, ognuno specializzato in una categoria editoriale, che raccolgono notizie da fonti RSS, le valutano, le riscrivono con l'AI, le sottopongono ad approvazione e le pubblicano su più canali (blog reale, social reali su Telegram/Discord/X/LinkedIn con fallback simulato onesto per i canali non configurati, newsletter via email). Include admin panel completo, magazine frontend con reazioni, Nexus Wire (redazione collettiva multi-agente), ping di indicizzazione automatici, cron automatico, REST API e — dalla 1.0.3 — la redazione intelligente: modello AI per-agente con modello economico per lo screening, tracking dell'uso AI (token e costo stimato in USD) con budget mensile, fact-check automatico con citazioni, anti-duplicato via hash del titolo e traduzioni AI multi-lingua. Dalla 1.0.4 aggiunge Scala & Pro: coda lavori stile Action Scheduler con retry automatico, comando WP-CLI wp nexus, blocchi Gutenberg nativi e una pagina Analytics per misurare l'intera redazione. Dalla 1.0.5 la redazione si governa e si apre: pagina Strumenti (informazioni di sistema, esporta/importa configurazione JSON), API pubblica nexus-public/v1 con chiave X-Api-Key e rate limit, supporto multisite con installazione automatica delle tabelle e interfaccia admin bilingue italiano/inglese (sperimentale). Dalla 1.0.6 tutta la UI è chiara e curata: pannello admin chiaro di default (il tema scuro resta opzionale da Impostazioni → Interfaccia) e frontend pubblico stilizzato dal foglio light editoriale nexus-public.css, con empty state e dettagli curati. Dalla 1.0.7 la redazione si comanda al dettaglio (Impostazioni & Agenti Pro): Impostazioni riorganizzate in 4 gruppi con sezioni ad accordion, modelli AI caricati dal provider con suggerimenti nei campi, editor agenti completo (creare, modificare, clonare), diagnostica AI nella pagina Strumenti e fix overflow mobile del pannello. Dalla 1.1.0 la redazione è tutto nativo: i contenuti nuovi pubblicano come post WordPress nativi (post type post), gli agenti firmano i post come utenti bot con ruolo nexus_ai_journalist (byline e pagina autore reali del tema), le categorie sono categorie reali della testata con tag automatici deterministici, una migrazione 1-click in Strumenti converte i vecchi articoli del CPT e la pubblicazione può passare per lo stato «In attesa di revisione» (pending). Dalla 1.1.1 la testata si organizza in redazioni gerarchiche: una tassonomia WordPress nativa (nexus_redazione) con redazioni madri, sub-redazioni annidate e agenti assegnati ai rami (es. Redazione Sport → Calcio, Basket e F1), pagina admin dedicata Redazioni, archivi pubblici /redazione/{slug}/ col subtree incluso, colonna e filtro nativi nella lista Articoli, shortcode e API pubblica con attributo redazione e capabilities per ramo per gli editori — tutto WP nativo, zero tabelle nuove. Dalla 1.1.2 la redazione parla tutte le lingue con il multilingua nativo: le traduzioni AI diventano post WordPress veri e collegati tra loro (permalink, revisioni e SEO propri) con driver automatico Polylang / WPML / collegamento interno Nexus (post meta, zero tabelle nuove), switcher lingua in frontend, hreflang e og:locale automatici, pubblicazione automatica delle traduzioni dopo il publish e compatibilità totale con Polylang e WPML tramite le loro API ufficiali.

Il plugin è il porting WordPress (PHP puro + vanilla JS) dell'app Next.js originale Nexus News AI.


Indice

  1. Caratteristiche
  2. Mapping Next.js → WordPress
  3. Architettura dei file
  4. I 7 agenti giornalisti
  5. La pipeline editoriale
  6. Shortcode
  7. REST API nexus/v1
  8. Impostazioni
  9. Cron automatico
  10. Pubblicazione multi-piattaforma
  11. Redazione intelligente (v1.0.3)
  12. Scala & Pro (v1.0.4)
  13. Strumenti, API pubblica, Multisite, Admin bilingue (v1.0.5)
  14. UI chiara & curata (v1.0.6)
  15. Impostazioni & Agenti Pro (v1.0.7)
  16. Tutto nativo (v1.1.0)
  17. Redazioni gerarchiche (v1.1.1)
  18. Multilingua nativo (v1.1.2)
  19. Installazione
  20. FAQ tecniche
  21. Licenza e crediti
  22. Changelog

Caratteristiche

  • 7 agenti giornalisti AI con nome, emoji, categoria e personalità distinti (seed automatici all'attivazione).
  • Pipeline editoriale completa: raccolta RSS → valutazione → riscrittura AI → approvazione → pubblicazione multi-piattaforma.
  • Modalità semi-autonoma: gli articoli entrano in coda di approvazione e vengono pubblicati solo dopo il via libera umano.
  • Modalità completamente autonoma: auto-approvazione basata sul punteggio di qualità (auto_approve_score), la pipeline gira da sola via WP-Cron.
  • Admin panel completo: dashboard statistiche, gestione agenti, coda di approvazione, feed attività, Nexus Wire, impostazioni.
  • Magazine frontend: hero section, barre categoria, griglia articoli, modal di lettura, reazioni emoji e contatore visualizzazioni.
  • Shortcode: [nexus_magazine], [nexus_articles], [nexus_wire], [nexus_subscribe].
  • Cron automatico con intervallo configurabile e limite giornaliero di articoli.
  • REST API nexus/v1: dati e azioni della redazione accessibili programmaticamente.
  • Nexus Wire: pipeline multi-agente (raccolta candidati → selezione fonti → dossier del ricercatore → bozza del redattore → revisioni a 2 voci → editor finale) con storia delle run e bacheca commenti.
  • Pubblicazione come post WordPress reali (v1.0.1): gli articoli approvati diventano POST veri del CPT nexus_article, con categorie e tag nativi di WordPress e permalink /nexus/{slug}/; in fallback resta il front-end Nexus legacy (/?nexus_article={id}).
  • Immagini in evidenza AI (v1.0.1): featured image generata con l'AI (modello e dimensione configurabili) con fallback sull'immagine dell'articolo e infine su un placeholder locale; la pubblicazione non si blocca mai per un'immagine.
  • SEO automatico (v1.0.1): meta title/description generate con l'AI, meta description + Open Graph + JSON-LD NewsArticle sul single, compatibilità con Yoast SEO e RankMath.
  • Pubblicazione social reale (v1.0.2): invio vero degli articoli su Telegram (Bot API, sendMessage/sendPhoto), Discord (webhook con embed), X/Twitter (/2/tweets con firma OAuth 1.0a in PHP puro) e LinkedIn (UGC post via Bearer token), con le credenziali nei settings; i canali non configurati producono un log skipped onesto e Facebook/Instagram restano simulati in modo dichiarato.
  • Newsletter con double opt-in (v1.0.2): shortcode [nexus_subscribe] per l'iscrizione via REST con conferma via email (link /?nexus_confirm={token}) e disiscrizione via token, tabella wp_nexus_subscribers e digest settimanale AI inviato con wp_mail ai destinatari fissi e agli iscritti confermati.
  • Ping di indicizzazione automatici (v1.0.2): alla pubblicazione di un post nexus_article partono IndexNow (Bing e altri, chiave auto-generata con key file servito dal plugin) e WebSub/PubSubHubbub sul feed, fuori banda via WP-Cron senza mai bloccare la pubblicazione.
  • Modello AI per-agente + modello economico (v1.0.3): ogni agente può usare il proprio modello (ai_model, vuoto = modello globale) mentre raccolta (screening), valutazione e fact-check girano sul modello economico ai_model_cheap per contenere i costi.
  • Tracking uso AI (v1.0.3): ogni chiamata AI logga in wp_nexus_usage_logs i token (prompt/completion/total) e il costo stimato in USD; la dashboard mostra «Uso AI» del mese e il budget mensile (monthly_budget_usd) con azione stop (salta le fasi AI) o warn (avviso e prosegui).
  • Fact-check automatico (v1.0.3): dopo la riscrittura l'articolo viene verificato contro la fonte con punteggio 0-100 e citazioni claim→fonte; sotto la soglia factcheck_min_score torna in bozza, sopra pubblica con il blocco «Fonti verificate» nel post WordPress.
  • Anti-duplicato via hash del titolo (v1.0.3): in fase di raccolta ogni candidato passa per l'hash md5 del titolo normalizzato (wp_nexus_articles.content_hash); i duplicati vengono saltati con log onesto.
  • Traduzioni AI multi-lingua (v1.0.3): traduzione di titolo, riassunto e contenuto via REST (POST /articles/{id}/translate) nelle lingue configurate (translation_langs, default en,es,fr) e lettura delle traduzioni via GET /articles/{id}/translations; upsert in wp_nexus_translations.
  • Coda lavori stile Action Scheduler (v1.0.4): le azioni pesanti (pipeline, traduzioni, tick del cron) vengono accodate in wp_nexus_jobs con claim atomico, priorità e retry automatico con backoff esponenziale (60s × 2^n, cap 1 ora), requeue dei lavori bloccati oltre 30 minuti e pulizia dei lavori finiti da più di 7 giorni; runner WP-Cron ogni 60 secondi (solo con enable_queue=1) e pagina admin «Coda Lavori» con stat, filtri, riprova/annulla, «Processa ora» e auto-refresh.
  • WP-CLI (v1.0.4): comando wp nexus per pilotare la redazione da terminale e da cron di sistema: run --all/--agent, collect, evaluate, rewrite, publish, approve/reject, translate, agents, articles, stats, queue stats|process|retry|cancel|cleanup, settings get/set.
  • Blocchi Gutenberg (v1.0.4): blocchi dinamici server-side nexus/latest-articles (numero articoli 1-24, categoria, colonne 1-4, mostra immagini) e nexus/subscribe-form (titolo personalizzabile) con preview nell'editor, senza build step; alternativa a [nexus_articles] e [nexus_subscribe].
  • Analytics (v1.0.4): pagina Analytics con serie giornaliera (7-90 giorni) di articoli creati/pubblicati, chiamate AI e costo stimato del periodo, breakdown per piattaforma e per agente (con qualità media), top 10 articoli per viste e iscritti newsletter.
  • Strumenti (v1.0.5): pagina nel menu con informazioni di sistema (versioni, 9 tabelle con righe, eventi WP-Cron con prossima esecuzione, stat coda lavori), esporta configurazione JSON (avviso: contiene chiavi API e token) e importa configurazione (match agenti per categoria, sovrascrive impostazioni e agenti).
  • API pubblica (v1.0.5): namespace REST nexus-public/v1 con articoli pubblicati, agenti e statistiche; autenticazione header X-Api-Key (o ?api_key=), rate limit 120 richieste/minuto (HTTP 429) e CORS aperto.
  • Multisite (v1.0.5): installazione automatica delle tabelle sui nuovi siti della rete (hook wp_initialize_site) e comandi wp nexus multisite status|install [--sites=1,2]; ogni sito ha tabelle e impostazioni proprie.
  • Admin bilingue (v1.0.5, sperimentale): lingua dell'interfaccia admin (Automatica/Italiano/English) con traduzione delle etichette principali lato PHP (viste) e lato JS (contenuti dinamici).
  • UI chiara & curata (v1.0.6): pannello admin con tema chiaro di default e tema scuro opzionale (admin_theme in Impostazioni → Interfaccia); frontend pubblico stilizzato dal foglio light editoriale public/css/nexus-public.css (caricato solo dove shortcode/blocchi Nexus renderizzano): card articoli con griglia responsive 1/2/3 colonne, form iscrizione curato, tipografia di lettura sulla pagina articolo, empty state e dettagli curati.
  • Impostazioni & Agenti Pro (v1.0.7): Impostazioni riorganizzate in 4 gruppi (Pipeline editoriale, Intelligenza artificiale, Pubblicazione & distribuzione, Sito & sistema) con sezioni ad accordion e stato aperto/chiuso ricordato nel browser; modelli AI auto-load dal provider (endpoint compatibile OpenAI {base_url}/models) con lista suggerita nei campi modello (anche nell'editor agenti) e cache 12 ore; editor agenti completo (creare nuovi agenti, modificare tutti i campi, clonare — il clone nasce in pausa con categoria resa univoca); diagnostica AI in Strumenti (la chiave non viene mai mostrata) e fix overflow mobile (griglia agenti fluida, tabelle scrollabili, toolbar a capo, input full-width).
  • Tutto nativo (v1.1.0): gli articoli nuovi pubblicano come post nativi (post, in home/archivio/feed del tema) invece che sul CPT nexus_article; ogni agente diventa un utente bot con ruolo nexus_ai_journalist (sola capability read, niente wp-admin) e firma i post con byline e pagina autore reali; la categoria dell'agente è una categoria WP reale (mappata su wp_terms) e gli articoli ricevono tag automatici deterministici (3-5 tag da titolo e riassunto, nessuna chiamata AI); migrazione 1-click in Strumenti con barra di progresso batched per convertire i vecchi articoli CPT; nuovo stato pending («In attesa di revisione») per post_status; nuove rotte REST admin GET /wp/categories, POST /native/migrate, GET /native/migrate/status, POST /native/migrate/reset. Le tabelle Nexus restano per l'operativo (coda, costi, log, iscritti).
  • Redazioni gerarchiche (v1.1.1): ogni testata può avere più redazioni contemporanee con sub-redazioni annidate come le categorie WP (es. Redazione Sport → Calcio, Basket, F1) e gli agenti assegnati ai termini (term meta _nexus_agents); tassonomia nativa nexus_redazione con archivi pubblici /redazione/{slug}/ che includono il subtree, pagina admin Redazioni con albero gerarchico, colonna e filtro nativi nella lista Articoli, shortcode e API pubblica con attributo redazione, capabilities per ramo (profilo utente con guardie: solo manage_options assegna la redazione, l'editore scoped vede solo il suo ramo), migrazione che assegna le redazioni dal suo agente, REST nativa wp/v2/redazioni + 4 rotte admin. Zero tabelle nuove.
  • Multilingua nativo (v1.1.2): le traduzioni AI diventano post WordPress collegati (non più solo righe nella tabella storico wp_nexus_translations): permalink, revisioni, SEO e tema propri per ogni lingua. Driver automatico con Polylang o WPML attivi (le associazioni tra lingue usano le loro API ufficiali) oppure collegamento interno Nexus via post meta (_nexus_lang, _nexus_trid, _nexus_source_post_id) — zero tabelle nuove; nuovo shortcode [nexus_lang_switcher], attributo lang per [nexus_magazine]/[nexus_articles] e parametro lang sull'API pubblica, hreflang e og:locale automatici sul single, pubblicazione automatica delle traduzioni come post dopo il publish (eventi WP-Cron sfalsati, setting enable_autotranslate_posts), rotte REST admin /multilang e card dashboard «Multilingua».
  • Zero dipendenze da compilare: nessun build step, nessun framework, solo PHP + JS/CSS vanilla.
  • i18n: text domain nexus-news-ai, file .pot in languages/.
  • Disinstallazione pulita: uninstall.php rimuove tabelle (incluse wp_nexus_subscribers, wp_nexus_usage_logs, wp_nexus_translations), opzioni, transients, eventi cron (nexus_weekly_digest, nexus_ping_article) e i post WordPress reali nexus_article con i loro meta _nexus_*.

Mapping Next.js → WordPress

Componente originale (Next.js) Equivalente WordPress (plugin)
Supabase (PostgreSQL): tabelle agents, articles, publish_logs, approval_logs, activity_logs, settings Tabelle MySQL custom wp_nexus_agents, wp_nexus_articles, wp_nexus_publish_logs, wp_nexus_approval_logs, wp_nexus_activity_logs + option nexus_settings (schema via dbDelta in Nexus_DB)
API Routes /api/* (App Router) REST API nexus/v1 registrate in class-nexus-rest.php
Admin panel React (components/admin/*) Admin WP nativo (menu Nexus News) + viste PHP in admin/views/ + vanilla JS
Magazine React (components/magazine/*) Output shortcode PHP + vanilla JS/CSS in public/
Cron route /api/cron (scheduler esterni) WP-Cron (class-nexus-cron.php): evento nexus_cron_tick su schedule custom nexus_interval, auto-sincronizzato con le impostazioni
Zustand store (store.ts) Nessuno: lo stato vive nel DB; le pagine admin interrogano la REST API con fetch
Motore AI ai-engine.ts + openrouter.ts class-nexus-ai-engine.php (client OpenRouter-compatible, prompt editoriali IT, JSON repair)
RSS rss.ts class-nexus-rss.php (DOMDocument, cache via transients nexus_rss_*)
Pubblicazione publish API class-nexus-publisher.php (post WP reali + social reali Telegram/Discord/X/LinkedIn o simulati, log onesti)
(nessun equivalente) Newsletter [nexus_subscribe] con double opt-in e digest settimanale AI (class-nexus-newsletter.php) e ping IndexNow/WebSub (class-nexus-ping.php) — v1.0.2
(nessun equivalente) Scala & Pro — coda lavori wp_nexus_jobs (class-nexus-queue.php), WP-CLI wp nexus (class-nexus-cli.php), blocchi Gutenberg (class-nexus-blocks.php + assets/js/blocks.js) e Analytics (class-nexus-analytics.php) — v1.0.4
Pipeline collect-all.ts / processCategoryForAgent class-nexus-pipeline.php (le 5 fasi, eseguibili anche singolarmente)
Framer Motion / Tailwind / shadcn/ui CSS vanilla (public/css/) con animazioni native

Architettura dei file

nexus-news-ai/
├── nexus-news-ai.php              # Bootstrap: header plugin, costanti, require, hook attivazione/disattivazione
├── uninstall.php                  # Disinstallazione: drop tabelle wp_nexus_* (incluse subscribers, usage_logs, translations), opzioni, transients, eventi cron, post nexus_article + meta
├── readme.txt                     # Readme formato WordPress (repository.org)
├── README.md                      # Questo file
├── LICENSE                        # Licenza MIT
│
├── includes/                      # Classi core (nessun output, solo logica)
│   ├── class-nexus-db.php         # Layer dati: schema dbDelta, CRUD, settings, seed agenti, stats, drop_tables()
│   ├── class-nexus-utils.php      # Utility condivise (sanitizzazione, slug, formattazioni)
│   ├── class-nexus-rss.php        # Raccolta RSS: fetch feed, parse, cache transients nexus_rss_*
│   ├── class-nexus-ai-engine.php  # Client AI OpenRouter-compatible: chat/completions, prompt editoriali IT, JSON repair, tracking uso AI (token/costo stimato) e budget mensile, fact-check, estimate_cost (v1.0.3)
│   ├── class-nexus-pipeline.php   # Le 5 fasi editoriali: collect → evaluate → rewrite → approve → publish
│   ├── class-nexus-publisher.php  # Pubblicazione: post WordPress (post NATIVI dalla v1.1.0, CPT nexus_article nelle versioni precedenti) + fallback legacy + social reali/simulati, log in publish_logs, assegnazione termini redazione dell'agente (v1.1.1), auto-translate post-publish con eventi WP-Cron sfalsati (v1.1.2)
│   ├── class-nexus-cpt.php        # v1.0.1 — CPT nexus_article: registrazione post type, tassonomie native (categorie/tag), rewrite /nexus/, template single, meta box «Nexus» (dalla v1.1.0 resta per i permalink legacy)
│   ├── class-nexus-native.php     # v1.1.0 — Nexus_Native: utenti bot degli agenti (ruolo nexus_ai_journalist), categorie native (term_id), tag deterministici, migrazione 1-click CPT → post nativi (dalla v1.1.1 assegna anche i termini redazione dell'agente), letture dual-mode
│   ├── class-nexus-redazioni.php  # v1.1.1 — Nexus_Redazioni: tassonomia gerarchica nexus_redazione (parent/child come le categorie), term meta _nexus_agents, albero/agenti/contatori per ramo, filtro articoli in lista admin
│   ├── class-nexus-caps.php       # v1.1.1 — Nexus_Caps: campo profilo «Redazione assegnata» e restrizioni per ramo (map_meta_cap + parse_query, guardie manage_options)
│   ├── class-nexus-multilang.php  # v1.1.2 — Nexus_Multilang: adattatore multilingua (driver Polylang/WPML/nexus interno con meta _nexus_lang, _nexus_trid, _nexus_source_post_id), gruppi di traduzione, statistiche per lingua
│   ├── class-nexus-image.php      # v1.0.1 — Immagini in evidenza: generazione AI con fallback, sideload in media library, set_post_thumbnail
│   ├── class-nexus-seo.php        # v1.0.1 — SEO: meta AI, Open Graph, JSON-LD NewsArticle, compatibilità Yoast/RankMath, title tag; hreflang e og:locale per lingua sul single (v1.1.2)
│   ├── class-nexus-social-telegram.php # v1.0.2 — Telegram: Bot API sendMessage/sendPhoto con credenziali dai settings
│   ├── class-nexus-social-discord.php  # v1.0.2 — Discord: webhook con embed e thumbnail
│   ├── class-nexus-social-x.php        # v1.0.2 — X/Twitter: POST /2/tweets con firma OAuth 1.0a nativa (nessuna libreria)
│   ├── class-nexus-social-linkedin.php # v1.0.2 — LinkedIn: ugcPosts via Bearer token
│   ├── class-nexus-newsletter.php      # v1.0.2 — Newsletter: shortcode [nexus_subscribe], double opt-in, digest settimanale AI via wp_mail
│   ├── class-nexus-ping.php            # v1.0.2 — Ping: IndexNow (chiave + key file) e WebSub alla pubblicazione
│   ├── class-nexus-translate.php       # v1.0.3 — Traduzioni AI: rotte REST translate/translations, prompt multi-lingua, upsert in wp_nexus_translations; dalla v1.1.2 pubblica le traduzioni come post nativi collegati (translate_to_post, native_post_for_article)
│   ├── class-nexus-queue.php           # v1.0.4 — Coda lavori stile Action Scheduler: dispatch, run_batch (claim atomico, retry con backoff), retry, cancel, requeue_stale, runner WP-Cron nexus_queue_runner
│   ├── class-nexus-cli.php             # v1.0.4 — WP-CLI: comando wp nexus (run, collect, evaluate, rewrite, publish, approve, reject, translate, agents, articles, stats, queue, settings)
│   ├── class-nexus-blocks.php          # v1.0.4 — Blocchi Gutenberg server-side: nexus/latest-articles e nexus/subscribe-form
│   ├── class-nexus-analytics.php       # v1.0.4 — Analytics: overview() con serie giornaliera, costi AI, per piattaforma, per agente, top articoli, iscritti
│   ├── class-nexus-i18n.php            # v1.0.5 — Admin bilingue IT/EN: Nexus_I18n (current_lang, translate_html sulle viste, enqueue di i18n.js)
│   ├── class-nexus-i18n-dict.php       # v1.0.5 — Dizionario i18n base: nexus_i18n_default_dict() con le voci IT=>EN dell'admin
│   ├── class-nexus-i18n-dict-extra.php # v1.0.5 — Dizionario i18n esteso: nexus_i18n_extra_dict() con voci aggiuntive (caricato da Nexus_I18n)
│   ├── class-nexus-public-api.php      # v1.0.5 — API pubblica nexus-public/v1: articoli/agenti/stats con X-Api-Key, rate limit 120/min e CORS, parametro redazione (v1.1.1), parametro lang e campo lingua negli item (v1.1.2)
│   ├── class-nexus-multisite.php       # v1.0.5 — Multisite: installazione tabelle sui nuovi siti (wp_initialize_site), status(), install_all()
│   ├── class-nexus-cron.php       # WP-Cron: scheduling nexus_cron_tick, esecuzione fasi automatiche
│   ├── class-nexus-rest.php       # REST API nexus/v1: route, permessi, schema args
│   └── index.php                  # Guardia "Silence is golden"
│
├── admin/                         # Back-end WordPress
│   ├── class-nexus-admin.php      # Menu admin, enqueue assets, handler, gateway alle viste
│   ├── css/                       # nexus-admin.css: stili delle pagine admin (tema chiaro di default, dark opzionale — v1.0.6)
│   ├── views/                     # Template HTML delle pagine admin
│   │   ├── dashboard.php          # Dashboard statistiche (contatori «Contenuti nativi» — v1.1.0; card «Redazioni» — v1.1.1; card «Multilingua» con articoli per lingua — v1.1.2)
│   │   ├── agents.php             # Gestione agenti (+ colonna «Redazioni» con chip agenti assegnati — v1.1.1)
│   │   ├── redazioni.php          # v1.1.1 — Redazioni: form redazione madre/sub (nome, slug, madre, agenti) + albero gerarchico con contatori e archivio nativo
│   │   ├── queue.php              # Coda di approvazione
│   │   ├── jobs.php               # v1.0.4 — Coda Lavori: stat, filtri stato, riprova/annulla, «Processa ora», pulizia, auto-refresh 15s
│   │   ├── activity.php           # Feed attività
│   │   ├── wire.php               # Nexus Wire (redazione collettiva)
│   │   ├── analytics.php          # v1.0.4 — Analytics: serie giornaliera, costi AI, per piattaforma/agente, top articoli, iscritti
│   │   ├── tools.php              # v1.0.5 — Strumenti: informazioni di sistema, esporta/importa configurazione, API pubblica (chiave), diagnostica AI (v1.0.7), migrazione contenuti nativi (v1.1.0)
│   │   └── settings.php           # Impostazioni: 4 gruppi con sezioni ad accordion (v1.0.7), opzione post_status «In attesa di revisione» (v1.1.0), sezione «Multilingua — post tradotti nativi» con driver, lingue del sito e auto-translate (v1.1.2)
│   └── index.php
│
├── public/                        # Front-end magazine
│   ├── class-nexus-shortcodes.php # [nexus_magazine], [nexus_articles], [nexus_wire] + render + enqueue, attributo redazione (v1.1.1), attributo lang e [nexus_lang_switcher] (v1.1.2)
│   ├── css/                       # nexus-public.css: stili light editoriali del frontend (token --nxp-*, classi nxa-*/nexus-* — v1.0.6)
│   ├── js/                        # nexus-public.js: interazioni (modal, reazioni, categorie) via REST + nonce wp_rest
│   └── index.php
│
├── assets/                        # Asset condivisi admin
│   ├── js/                        # admin.js (interfaccia admin: riga «Pubblica come post» e chips delle traduzioni per lingua nell'articolo — v1.1.2) + blocks.js (v1.0.4: registrazione blocchi Gutenberg nell'editor) + i18n.js (v1.0.5: traduzione IT→EN dei contenuti dinamici admin) — vanilla JS, consuma le REST route nexus/v1
│   └── index.php
│
├── templates/                     # Template front-end per i post WordPress reali (v1.0.1)
│   └── single-nexus_article.php   # Single del CPT nexus_article: header/footer del tema, byline agente, contenuto, fonti, reazioni Nexus
│
└── languages/                     # Internazionalizzazione
    ├── nexus-news-ai.pot          # Template di traduzione (gettext)
    └── index.php

Ogni directory contiene un index.php di silenzio per impedire il directory listing.


I 7 agenti giornalisti

Gli agenti vengono inseriti automaticamente alla prima attivazione (solo se la tabella è vuota) e sono modificabili dall'admin panel: dalla 1.0.7 si gestiscono dall'editor della pagina Agenti — si creano nuovi agenti, si modificano tutti i campi e si clonano quelli esistenti (il clone nasce in pausa). Dettagli nella sezione Impostazioni & Agenti Pro. Dalla 1.1.0 ogni agente ha anche un utente bot WordPress con ruolo nexus_ai_journalist che firma i suoi post: dettagli nella sezione Tutto nativo.

Agente Emoji Categoria Personalità
TechBot 🤖 Tecnologia Analitico e orientato all'impatto pratico per lettori tech-savvy
PolicyWatch 🏛️ Politica Equilibrato e oggettivo, con contesto storico e geopolitico
MarketPulse 📈 Economia Rigoroso ma accessibile, con dati concreti e implicazioni per investitori
SciExplorer 🔬 Scienza Divulgativo ma preciso, spiegazioni chiare per un pubblico colto
SportArena ⚽ Sport Emozionante e narrativo, con statistiche e analisi tattiche
CultureHub 🎭 Cultura Elegante e riflessivo, con riferimenti storici e artistici
HealthDesk 🩺 Salute Rassicurante e basato su evidenze scientifiche, con consigli pratici

La pipeline editoriale

La pipeline è orchestrata da class-nexus-pipeline.php (contratto: collect, evaluate, rewrite, approve, reject, publish, run_full, cron_tick, wire_run, wire_runs) e può essere eseguita per intero ("Esegui pipeline completa" nell'admin o POST /pipeline/run), a fasi singole, o automaticamente via cron. Tutte le fasi generative richiedono la chiave AI: senza chiave ogni fase registra nei log attività l'errore «Chiave API AI non configurata».

  1. Raccolta (collect) — Nexus_RSS scarica gli item dai feed RSS della categoria dell'agente (se non ci sono candidati, percorso evergreen); una chiamata AI (collect_prompt) seleziona i massimo 2 candidati migliori (score ≥ 50), salvati come articoli in stato draft con titolo, fonte, URL e riassunto. Richiede il modello AI configurato.
  2. Valutazione (evaluate) — una chiamata AI (evaluate_prompt) assegna il quality_score 0-100, salvato sull'articolo; l'esito finisce nel feed activity_logs.
  3. Riscrittura AI (rewrite) — una chiamata AI (rewrite_prompt) produce titolo, sottotitolo, contenuto e riassunto definitivi in stile editoriale (categoria + personalità dell'agente): l'articolo passa a pending_approval con read_time calcolato.
  4. Approvazione (approve) —
    • Modalità semi-autonoma (default): l'articolo passa a pending_approval e compare nella coda di approvazione; il revisore umano può approvare o rifiutare con nota (tabella wp_nexus_approval_logs).
    • Modalità completamente autonoma: gli articoli con quality_score >= auto_approve_score vengono auto-approvati, gli altri restano in coda come rete di sicurezza.
  5. Pubblicazione multi-piattaforma — l'articolo approvato viene inviato alle piattaforme abilitate in social_platforms: per blog la pubblicazione è reale (dalla v1.0.1 l'articolo diventa un post WordPress; dalla v1.1.0 è un post nativo post con autore bot, categoria nativa e tag deterministici, mentre i vecchi articoli restano serviti come CPT nexus_article con permalink /nexus/{slug}/; in fallback resta nel database Nexus con URL legacy /?nexus_article={id} registrato nei log), i canali Telegram, Discord, X e LinkedIn sono reali dalla v1.0.2 quando abilitati e configurati nei settings (altrimenti log skipped con nota onesta), gli altri canali social restano simulati in modo dichiarato (post_id e URL demo) e ogni invio genera una riga in wp_nexus_publish_logs.

Stati dell'articolo: draft → pending_approval → approved → published (o rejected).


Shortcode

[nexus_magazine]

Il magazine completo: hero con articolo in evidenza, barre categorie, griglia articoli, modal di dettaglio con reazioni emoji.

[nexus_magazine]

[nexus_articles]

Lista o griglia di articoli filtrabili. Attributi:

Attributo Default Valori
category (tutte) Tecnologia, Politica, Economia, Scienza, Sport, Cultura, Salute
limit 9 numero massimo di articoli (1-24)
layout grid grid (card) o list (elenco compatto)
lang (tutte) codice lingua (es. en): con il driver multilingua interno filtra gli articoli per lingua (v1.1.2, dettagli nella sezione Multilingua nativo); con Polylang/WPML il contenuto è già filtrato per lingua corrente
[nexus_articles category="Tecnologia" limit="6" layout="list"]
[nexus_articles category="Sport" limit="3"]
[nexus_articles limit="12" layout="grid"]

[nexus_wire]

La bacheca del Nexus Wire: storico delle run della redazione collettiva (argomento, agenti coinvolti, fonti usate, commenti di revisione) e articolo prodotto dall'ultima sessione. Attributo opzionale limit (default 10, max 20).

[nexus_wire]

[nexus_subscribe]

Il form di iscrizione alla newsletter (v1.0.2): campo email + bottone, invio via REST (POST /nexus/v1/subscribe, rate limit 1 richiesta al minuto per IP) e double opt-in — dopo l'iscrizione parte un'email con il link di conferma (/?nexus_confirm={token}); con il link di disiscrizione (/?nexus_unsub={token}) l'iscritto si rimuove da solo. I messaggi sono in italiano e traducibili via .pot.

[nexus_subscribe]

[nexus_lang_switcher]

Lo switcher delle lingue del sito (v1.1.2): lista delle lingue attive con nome italiano; su una pagina singola ogni voce punta al permalink della traduzione, sulle altre pagine a home_url('/') con query var ?lang={code}. La lingua corrente è evidenziata (nexus-lang-current); le lingue senza traduzione appaiono non cliccabili con la nota onesta «Traduzione non disponibile». Dettagli nella sezione Multilingua nativo.

[nexus_lang_switcher]

Nota (v1.0.1): gli articoli pubblicati come post WordPress reali non passano dagli shortcode: ogni post del CPT nexus_article è servito dal template dedicato del plugin (templates/single-nexus_article.php), che usa header e footer del tema attivo e mostra byline dell'agente, contenuto, fonti e reazioni Nexus, con permalink /nexus/{slug}/. Lo shortcode [nexus_magazine] continua invece a leggere il database Nexus (articoli legacy e magazine).

Nota (v1.0.4): nell'editor a blocchi puoi usare i blocchi Gutenberg nexus/latest-articles e nexus/subscribe-form, alternativi a [nexus_articles] e [nexus_subscribe]: vedi la sezione Scala & Pro.


REST API nexus/v1

Namespace REST: /wp-json/nexus/v1/ (registrate in class-nexus-rest.php).

  • Route admin: richiedono un utente con capability manage_options e nonce WordPress (X-WP-Nonce con cookie di sessione, o Application Password).
  • Route pubbliche: aperte in lettura/scrittura limitata (usate dal frontend magazine, che invia comunque il nonce wp_rest), espongono solo dati pubblicabili.

Route admin (manage_options)

Metodo Endpoint Descrizione
GET /agents Lista degli agenti (nome, emoji, categoria, personalità, stato, last_run)
POST /agents/{id}/status Cambia stato agente: body { "status": "active\|paused\|error" }
POST /agents/{id}/model Imposta il modello AI dedicato dell'agente (v1.0.3): body { "model": "openai/gpt-4o-mini" } (stringa vuota = torna al modello globale)
POST /agents Crea un nuovo agente (v1.0.7): body { "name", "category", "avatar", "status", "ai_model", "description", "personality" } (nome e categoria obbligatori, categoria unica per agente)
PUT /agents/{id}/update Aggiorna un agente (v1.0.7): stessi campi, tutti opzionali (vengono aggiornati solo quelli presenti nel body); la categoria deve restare unica
POST /agents/{id}/clone Clona un agente (v1.0.7): nome «{originale} (copia)», categoria {categoria}-copia (poi -copia-2, -copia-3…), il clone nasce in pausa
GET /ai/models Modelli disponibili dal provider AI (v1.0.7): chiama {ai_base_url}/models con la chiave salvata, cache 12 ore per base URL → { models, count, cached }
GET /articles Lista articoli; filtri status, category, agent_id, search, page, per_page
GET /articles/{id} Dettaglio articolo (inclusi log pubblicazione)
DELETE /articles/{id} Elimina l'articolo e i log correlati
POST /articles/{id}/approve Approva l'articolo: body { "note": "…" } opzionale
POST /articles/{id}/reject Rifiuta l'articolo: body { "note": "…" }
POST /articles/{id}/translate Traduce l'articolo con l'AI (v1.0.3, registrata da Nexus_Translate): body { "lang": "en" } (una delle lingue in translation_langs); ritorna titolo e riassunto tradotti
POST /pipeline/collect Esegue la raccolta RSS: body { "agent_id": 0 } (0 = tutti gli agenti attivi)
POST /pipeline/run Esegue la pipeline completa per agente o per tutti
POST /pipeline/publish Pubblica un singolo articolo approvato {article_id}
GET /settings Impostazioni correnti
PUT /settings Aggiorna le impostazioni (merge parziale sui campi in whitelist)
GET /activity Feed attività; args limit, agent_id
GET /stats Statistiche dashboard (totali, stati, views, agenti attivi, attività 24h)
POST /wire/run Avvia una run del Nexus Wire: body { "topic": "…" } (max 200 caratteri)
GET /wire/runs Storico completo delle run del Wire; arg limit
GET /jobs Lavori della coda (v1.0.4): args status, hook, page, per_page (default 50, max 200) → { items, total, pages, stats }
GET /jobs/stats Statistiche della coda: { pending, running, complete, failed, cancelled, total }
POST /jobs/process Processa subito un batch della coda (Nexus_Queue::run_batch()) → { processed, failed }
POST /jobs/cleanup Elimina i lavori finiti più vecchi di days giorni (default 7, 1-90) → { deleted }
POST /jobs/{id}/retry Riprova un lavoro: solo da failed/cancelled/complete → pending
POST /jobs/{id}/cancel Annulla un lavoro: solo se pending → cancelled
GET /analytics Analytics della redazione (v1.0.4); arg days (default 30, cap 90)
GET /export Esporta la configurazione (v1.0.5): { version, exported_at, site_url, settings, agents }. ATTENZIONE: il file contiene chiavi API e token
POST /import Importa una configurazione (v1.0.5): body JSON { "settings": {…}, "agents": […] }, agenti abbinati per category (aggiornati) o creati se mancanti → { settings_updated, agents_updated, agents_inserted, errors }
POST /tools/api-key Genera una nuova chiave API pubblica (v1.0.5): la salva in public_api_key invalidando la precedente → { "api_key": "…" }
GET /wp/categories Categorie WordPress native (v1.1.0): { "categories": [ { "id", "name", "slug", "count" } ] } ordinate per nome; alimenta i suggerimenti categoria dell'editor agenti
POST /native/migrate Migrazione contenuti nativi (v1.1.0): converte fino a limit post CPT nexus_article in post nativi — body { "limit": 20 } (1-100, default 20) → stato completo { remaining, done, total, agents, finished, errors }
GET /native/migrate/status Stato corrente della migrazione (v1.1.0): stesso shape, senza eseguire batch
POST /native/migrate/reset Ripristina lo stato della migrazione (v1.1.0, uso amministrativo) e ritorna lo stato corrente
GET /redazioni Redazioni gerarchiche (v1.1.1): lista piatta ordinata ad albero (madri prima, per nome dentro ogni livello) → { "redazioni": [ { "id", "name", "slug", "parent", "depth", "agents": [ { "id", "name", "avatar" } ], "count", "count_subtree" } ] }, dove count è il numero di articoli direttamente assegnati al termine e count_subtree gli articoli del ramo completo
POST /redazioni Crea una redazione (v1.1.1): body { "name", "parent", "agent_ids": [] } (parent = term ID della madre, 0 = redazione di primo livello) → { "term_id", "agents" } o errore onesto
POST /redazioni/{id} Aggiorna una redazione (v1.1.1): body parziale { "name"?, "slug"?, "parent"?, "agent_ids"? } (solo i campi presenti; parent non può essere se stesso né un proprio discendente) → { "ok": true, "term": { "id", "name", "slug", "parent", "agents" } }
DELETE /redazioni/{id} Elimina una redazione (v1.1.1): wp_delete_term e WordPress riparenta da solo le sub-redazioni alla madre → { "ok": true, "message": "…" }
GET /multilang/info Driver e lingue del sito (v1.1.2): `{ "driver": "nexus|polylang|wpml", "default": "it", "current": "it", "langs":

This README is longer than the copy stored here. Read the rest on GitHub →