WP Manifestindependent plugin directory
manifest / ai / ai-faq-generator

AI FAQ Generator releases

Lekka wtyczka WordPress: generowanie sekcji FAQ przez AI (Gemini) + dane strukturalne JSON-LD FAQPage (Schema.org)

by mtsle · github.com/mtsle/ai-faq-generator · website

0stars
0forks

Install

The author publishes release zips, so WP-CLI can install straight from GitHub:

wp plugin install https://github.com/mtsle/ai-faq-generator/releases/download/ai-news-portal-v1.1.0/ai-news-portal.zip

Readme

AI FAQ Generator + AI News Portal

Dwie niezależne wtyczki WordPress w jednym repozytorium. Pierwsza odpowiada gościom na pytania wyłącznie treścią ich własnej strony. Druga prowadzi portal wiedzy, który zasila się sam z kanałów RSS. Obie korzystają z modeli Gemini na kluczu właściciela witryny (BYOK) i obie da się z witryny usunąć bez śladu.

Ten plik jest jednocześnie README całego repozytorium i dokumentacją wtyczki 1.

[!IMPORTANT] Korzeń repozytorium jest katalogiem wtyczki 1, a wtyczka 2 leży w podfolderze. To nie jest bałagan, tylko wymuszenie WordPressa: skaner wtyczek schodzi tylko dwa poziomy w głąb wp-content/plugins/, więc plik główny musi leżeć najwyżej jeden katalog niżej. Na żywą instalację celują junctiony dokładnie w te ścieżki, dlatego przenoszenie katalogów wtyczek albo zmiana ich nazw psuje żywą stronę i testy.

Spis treści

Stan

Wtyczka Folder Wersja WordPress PHP Tagi wydań README
AI FAQ Generator korzeń repo 1.1.0 ≥ 6.4 ≥ 8.0 v0.1.0v1.0.0 (historyczne, bez prefiksu); od 1.1.0 prefiks aifaq-, czyli aifaq-v1.1.0 ten dokument (od sekcji „Dokumentacja wtyczki 1")
AI News Portal ai-news-portal/ 1.1.0 ≥ 6.5 ≥ 8.1 ai-news-portal-v0.1.0ai-news-portal-v1.1.0 ai-news-portal/README.md

Obie wtyczki są testowane do WordPressa 7.0.2. Obie są na licencji GPLv2 — wyłącznie wersja druga, bez klauzuli „or later"; pełny tekst w LICENSE.

Wersja 1.1.0 to wydanie po audycie całości obu wtyczek. Co audyt znalazł i co z tego naprawiono, opisuje katalog audyt/.

Co robi każda wtyczka

AI FAQ Generator (wtyczka 1)

Indeksuje treść witryny, dzieli ją na fragmenty i liczy dla nich embeddingi. Gość pyta, wtyczka szuka pasujących fragmentów i odpowiada tylko wtedy, gdy pokrycie w treści jest wystarczające — poza tematem odmawia zamiast zmyślać. Do tego narzędzie dla właściciela, które układa gotowe zestawy pytań i odpowiedzi.

Element Konkret
Podstrona dla gościa /faqgenerator
Przestrzeń REST aifaq/v1 — 15 tras
Tabele w bazie 5: knowledge, qa_log, cache, faq, generations (z przedrostkiem witryny)
Dane strukturalne jeden węzeł JSON-LD WebApplication
Model Gemini, klucz właściciela witryny

AI News Portal (wtyczka 2)

Pobiera wpisy z kanałów RSS, odsiewa je słowami wykluczającymi, sprawdza duplikaty, przepisuje materiał modelem i publikuje w Centrum Wiedzy. Przebieg chodzi sam, pod atomowym zamkiem, żeby dwa równoległe uruchomienia nie opublikowały tego samego dwa razy.

Element Konkret
Front /centrum-wiedzy/
Zadanie cykliczne ainp_tick
Tabele w bazie 1: ainp_items (z przedrostkiem witryny)
Kokpit własny ekran z akcjami pod nonce i uprawnieniem
Model Gemini, klucz właściciela witryny

Gdzie co leży

.                              wtyczka 1 — korzeń repo
  ai-faq-generator.php         plik główny, stałe AIFAQ_*
  uninstall.php                sprzątanie bez śladu (cała sieć witryn)
  readme.txt                   readme w formacie WordPressa
  src/                         83 pliki — kod wtyczki 1
    Admin/     18              kokpit, ustawienia, metabox
    Index/     11              indeksowanie: chunker, batcher, crawl
    Rest/       9              trasy aifaq/v1
    Data/       8              schemat i repozytoria
    PublicUi/   7              front gościa, nagłówki bezpieczeństwa
    Core/       6              cykl życia, ustawienia, router
    Rag/        6              potok pytania gościa
    App/        5              powłoka aplikacji
    Providers/  4              warstwa modelu (BYOK)
    Faq/        3              publikacja par FAQ
    Http/       3              transport HTTP
    Seo/        2              JSON-LD
  tests/                       63 zestawy + tests/load/ (14 skryptów obciążeniowych)
  assets/                      15 plików — JS, CSS i puste index.php blokujące listowanie
  instrukcje/                  47 plików — 5 PDF-ów, źródła HTML, schematy, zrzuty
  audyt/                       14 plików — opis audytu, raport, dokumentacja zderzana z kodem
  .github/                     workflow „Testy" + CI-owe kopie obu runnerów

ai-news-portal/                wtyczka 2 — 135 plików
  ai-news-portal.php           plik główny, stałe AINP_*
  uninstall.php                własne sprzątanie
  src/         19              15 klas + 4 szablony frontu
  tests/       30              29 zestawów
  instrukcje/  60              5 PDF-ów i ich źródła
  assets/      21

Rozdzielność wtyczek

Wtyczki są w pełni rozdzielne: osobne przestrzenie stałych (AIFAQ_* i AINP_*), osobne uninstall.php, LICENSE, readme.txt i tests/, zero wspólnego kodu. AI News Portal „nie ma żadnej zależności od drugiej wtyczki z tej samej paczki, nie dzieli z nią kodu, opcji ani tabel" (jego README).

[!NOTE] Ta rozdzielność nie jest deklaracją, tylko warunkiem przebiegu testów. Zestaw tests/uninstall-guard-test.php zderza każdy literał z uninstall.php wtyczki 1 z prawdziwymi kluczami wtyczki 2 własnym matcherem LIKE. Napis ainp nie musiałby się w kodzie pojawić, żeby dane drugiej wtyczki zniknęły — strażnik szuka skutku, nie słowa.

Instalacja — każda wtyczka osobno

Wtyczka 1 — AI FAQ Generator. Do wp-content/plugins/ai-faq-generator/ trafia zawartość korzenia repo. Czystą paczkę bez wtyczki 2 daje git archive z tagu wydania wtyczki 1 — drzewo tagu v1.0.0 nie zawiera folderu ai-news-portal/:

git archive v1.0.0 --prefix=ai-faq-generator/ -o ai-faq-generator.zip

Wtyczka 2 — AI News Portal. Do wp-content/plugins/ai-news-portal/ trafia sam folder ai-news-portal/ z repo. Archiwum zachowuje prefiks ścieżki, więc ZIP rozpakowuje się od razu we właściwy katalog:

git archive ai-news-portal-v1.0.0 ai-news-portal -o ai-news-portal.zip

[!TIP] Sklonowanie całego repo prosto do plugins/ uaktywni tylko wtyczkę 1 — ai-news-portal/ai-news-portal.php leży wtedy trzeci poziom pod plugins/, poza zasięgiem skanera WordPressa. Wtyczka 2 wymaga własnego katalogu albo junctiona wskazującego na ai-news-portal/.

Gotowe paczki ZIP wiszą przy wydaniach: https://github.com/mtsle/ai-faq-generator/releases. Katalogi instrukcje/ nie wchodzą do paczek instalacyjnych — klient dostaje PDF-y osobno, obok pliku .zip.

Praca w repozytorium

Potrzebny jest tylko PHP CLI z rozszerzeniem mbstring. Testy nie wymagają bazy danych, sieci ani zainstalowanego WordPressa — zamiast nich chodzą atrapy.

bash .github/ci/testy-wtyczka1.sh
bash .github/ci/testy-wtyczka2.sh

Oba runnery biorą interpreter ze zmiennej PHP i domyślnie wołają php z PATH:

PHP=/sciezka/do/php bash .github/ci/testy-wtyczka1.sh

Zasady pracy, konwencje commitów, wersjonowanie i wymagania wobec nowych testów opisuje osobny dokument: CONTRIBUTING.md.

Testy i strażnicy

Wtyczka 1 Wtyczka 2
Zestawy 63 w 57 segmentach 29 w 15 segmentach
Asercje nieliczone globalnie 2306, liczone co do jednej
Kryterium zaliczenia kod wyjścia zestawu kod wyjścia oraz dokładna liczba asercji

Różnica w kryteriach jest historyczna i celowa. Runner wtyczki 2 nie zalicza segmentu, jeśli liczba wykonanych asercji nie zgadza się z zadeklarowaną — test, który po cichu przestał cokolwiek sprawdzać, dalej świeciłby na zielono, a tak przewraca przebieg.

Segmenty wtyczki 2 są ułożone według architektury, więc czyta się je jak mapę kodu:

Segment Czego dotyczy
S1 Cykl życia instalacji Plugin.php, plik główny
S2 Wejście sieciowe Http.php
S3 Kanały i parsowanie Feed.php
S4 Tożsamość pozycji i duplikaty Dedup.php
S5 Bramki treści Filter.php, Article.php
S6 Model i kontrakt odpowiedzi Gemini.php, Validator.php
S7 Publikacja idempotentna Publisher.php
S8 Orkiestracja przebiegu i zamek Runner.php
S9 Automatyzacja czasowa cron ainp_tick
S10 Kokpit: akcje, nonce, uprawnienia Admin.php, Admin_Screen.php
S11 Ustawienia i klucz API Settings.php
S12 Front Centrum Wiedzy Portal.php, szablony
S13 Nagłówki bezpieczeństwa Security.php
S14 Usuwanie bez śladu uninstall.php
S15 Zgodność dokumentacji z kodem README.md + readme.txt

Segmenty wtyczki 1 są ułożone według kroków budowy (K3K23), bo powstawały razem z produktem. Pełna lista jest w .github/ci/testy-wtyczka1.sh.

Strażnicy strukturalni

Osobna kategoria zestawów nie sprawdza zachowania, tylko pilnuje własności całego kodu — tego, co łatwo cofnąć jedną porządkującą zmianą i czego zwykły test nie zauważy.

Strażnik Czego pilnuje
uninstall-guard-test.php Kompletności sprzątania: każdy klucz, który kod zapisuje, musi być kasowany. Najdłuższy czas życia danych tymczasowych jest wyliczany ze źródeł, a nie przepisany z komentarza. Osobne ramię pilnuje, że wtyczka 1 nie rusza danych wtyczki 2.
wersja-spojnosc-test.php Numer wersji ma cztery źródła (nagłówek, stała, Stable tag, changelog) i wszystkie muszą podawać to samo. Do tego: źródła instrukcji nie mogą zawierać numeru wersji wpisanego w treść — ma go podstawiać builder z nagłówka.
krok21-csp-inline-guard-test.php Zero atrybutów onclick= i style= w plikach panelu właściciela. Polityka CSP nie ma unsafe-inline, a nonce chroni tylko znaczniki `

Read the full README on GitHub →

Releases

TagPublishedAssetDownloads
ai-news-portal-v1.1.0 Sep 9, 2026 ai-news-portal.zip 0
aifaq-v1.1.0 Sep 9, 2026 ai-faq-generator.zip 0
ai-news-portal-v1.0.0 Aug 23, 2026 ai-news-portal.zip 0
ai-news-portal-v0.7.0 Aug 16, 2026
ai-news-portal-v0.6.0 Aug 9, 2026
ai-news-portal-v0.5.0 Aug 9, 2026
ai-news-portal-v0.4.0 Aug 7, 2026
ai-news-portal-v0.3.0 Aug 6, 2026
ai-news-portal-v0.2.0 Aug 6, 2026
ai-news-portal-v0.1.0 Aug 5, 2026
v1.0.0 Aug 4, 2026
v0.34.0 Aug 3, 2026
v0.33.0 Jul 28, 2026
v0.32.0 Jul 28, 2026
v0.31.0 Jul 28, 2026
v0.30.0 Jul 28, 2026
v0.29.0 Jul 26, 2026
v0.28.0 Jul 26, 2026
v0.27.0 Jul 26, 2026
v0.26.0 Jul 26, 2026
v0.25.0 Jul 26, 2026
v0.24.0 Jul 25, 2026
v0.23.0 Jul 22, 2026
v0.22.0 Jul 20, 2026
v0.21.1 Jul 19, 2026