@flashautomat/plugin-ai-employees-conversation-filter
v1.0.2
Published
Filters chat conversation history by selected AI employee/worker in NocoBase chat window.
Maintainers
Readme
AI Employees Conversation Filter
Plugin dla NocoBase 2.x, który filtruje historię rozmów w oknie AI Chat według aktualnie wybranego AI employee/workera.
Cel
Standardowy panel AI Chat w NocoBase pokazuje w zakładce Conversations rozmowy ze wszystkich AI workerów. Ten plugin dopina brakujące zachowanie: po wybraniu konkretnego workera lista rozmów pokazuje tylko historię tego workera.
Przykład:
- wybrany worker
atlas-> lista pokazuje tylko rozmowyatlas, - wybrany worker
dexi brak rozmów w bazie -> lista jest pusta, - brak wybranego workera -> lista pokazuje wszystkie rozmowy.
Zakres Funkcjonalny
- Filtruje endpoint
aiConversations:listpoaiEmployeeUsername. - Obserwuje zmianę workera w globalnym store AI Chat.
- Pobiera przefiltrowaną listę rozmów z API.
- Aktualizuje
chat-conversations-store, z którego renderuje się zakładkaConversations. - Chroni wynik filtra przed natywnym refreshem NocoBase, który potrafi ponownie załadować pełną listę rozmów.
- Działa po restarcie kontenera dzięki startup scriptowi
storage/scripts/90-inject-ai-filter.sh. - Używa cache-bustingu
?v=3, żeby przeglądarka nie ładowała starego skryptu.
Lokalizacja
Plugin powinien znajdować się tutaj:
packages/plugins/@flashautomat/plugin-ai-employees-conversation-filterGłówne pliki:
package.json
server.js
dist/server/index.js
dist/client/ai-filter.js
src/server/plugin.ts
src/client-v2/ai-filter.js
README.mdInstalacja
Po umieszczeniu pluginu w katalogu packages/plugins/@flashautomat/plugin-ai-employees-conversation-filter uruchom:
yarn pm enable @flashautomat/plugin-ai-employees-conversation-filterNastępnie odśwież stronę w przeglądarce. Jeśli przeglądarka trzyma starą wersję skryptu, wykonaj twarde odświeżenie:
Ctrl+F5Deployment W Kontenerze
W obecnym środowisku plugin jest kopiowany do kontenera pod ścieżkę:
/app/nocobase/packages/plugins/@flashautomat/plugin-ai-employees-conversation-filterPo skopiowaniu zmian najlepiej zrestartować kontener:
docker restart nocobase-app-1Plugin podczas startu sam dopisuje skrypt do HTML NocoBase.
Jak To Działa
Server
Server plugin rejestruje middleware w pipeline NocoBase Resource Manager:
this.app.resourceManager.use(..., { tag: 'ai-conversation-filter', after: 'acl' })Middleware działa tylko dla endpointu:
/api/aiConversations:listJeśli request zawiera parametr:
aiEmployee=<username>to plugin dopisuje filtr:
ctx.action.params.filter.aiEmployeeUsername = aiEmployee;Dzięki temu NocoBase zwraca tylko rozmowy wybranego workera.
Client
Client script dist/client/ai-filter.js jest wstrzykiwany do HTML NocoBase jako:
<script src="/static/plugins/@flashautomat/plugin-ai-employees-conversation-filter/dist/client/ai-filter.js?v=3"></script>Skrypt korzysta z globalnych store NocoBase AI Chat:
@nocobase/plugin-ai/chat-box-store
@nocobase/plugin-ai/chat-conversations-storePrzepływ działania:
- Skrypt czeka, aż store AI Chat będą dostępne.
- Subskrybuje
chat-box-store. - Wykrywa zmianę
currentEmployee. - Pobiera rozmowy przez
aiConversations:list?aiEmployee=<username>. - Ustawia wynik w
chat-conversations-store. - Jeśli natywny refresh NocoBase nadpisze wynik pełną listą, guard ponownie aplikuje ostatnią przefiltrowaną listę.
Runtime Injection
NocoBase serwuje główny HTML statycznie przez nginx, więc zwykłe middleware aplikacji nie wystarczy do dopięcia skryptu w przeglądarce.
Plugin robi dwie rzeczy:
- przy
load()aktualizujeindex.htmliv/index.html, - tworzy startup fallback
storage/scripts/90-inject-ai-filter.sh.
Startup script jest potrzebny, bo NocoBase potrafi regenerować HTML podczas startu kontenera.
Pliki HTML aktualizowane przez plugin:
node_modules/@nocobase/app/dist/client/index.html
node_modules/@nocobase/app/dist/client/v/index.htmlWeryfikacja
Sprawdzenie, czy HTML zawiera aktualny skrypt:
grep -c "ai-filter.js?v=3" node_modules/@nocobase/app/dist/client/index.html
grep -c "ai-filter.js?v=3" node_modules/@nocobase/app/dist/client/v/index.htmlOczekiwany wynik dla każdego pliku:
1Sprawdzenie, czy startup script jest poprawny składniowo:
sh -n storage/scripts/90-inject-ai-filter.shSprawdzenie dostępności client scriptu:
curl -I http://localhost/static/plugins/@flashautomat/plugin-ai-employees-conversation-filter/dist/client/ai-filter.js?v=3Oczekiwany status:
200Test Manualny
- Otwórz NocoBase w przeglądarce.
- Otwórz AI Chat.
- Przejdź do zakładki
Conversations. - Wybierz workera, który ma rozmowy, np.
atlasalboAction. - Lista powinna pokazać tylko rozmowy tego workera.
- Wybierz workera bez rozmów, np.
dexjeśli w bazie ma0rozmów. - Lista powinna być pusta.
Debug
Logi debug są domyślnie wyłączone, żeby plugin nie spamował konsoli.
Włącz debug w konsoli przeglądarki:
localStorage.setItem('AI_FILTER_DEBUG', '1');
location.reload();Wyłącz debug:
localStorage.removeItem('AI_FILTER_DEBUG');
location.reload();Po włączeniu debug logi mają prefix:
[AI-FILTER]Przy poprawnym działaniu można zobaczyć logi podobne do:
[AI-FILTER] chat box subscription ready
[AI-FILTER] conversations guard ready
[AI-FILTER] employee changed: atlas
[AI-FILTER] applied employee=atlas rows=41
[AI-FILTER] native refresh overwritten filter, reapplying rows=41API
Plugin rozszerza działanie istniejącego endpointu NocoBase:
GET /api/aiConversations:listDodatkowy parametr obsługiwany przez plugin:
aiEmployee=<username>Przykład:
/api/aiConversations:list?sort=-createdAt&appends=aiEmployee&pageSize=200&aiEmployee=atlasWewnętrznie parametr aiEmployee=atlas jest mapowany na filtr kolekcji:
{
"aiEmployeeUsername": "atlas"
}Struktura Kodu
src/server/plugin.ts
Źródłowa wersja server pluginu.
Odpowiada za:
- wykrycie katalogu statycznego HTML NocoBase,
- wstrzyknięcie
<script>do HTML, - utworzenie startup scriptu,
- rejestrację middleware
resourceManager, - dopisanie filtra
aiEmployeeUsernamedoaiConversations:list.
dist/server/index.js
Runtime server entry używany przez NocoBase, wskazany w package.json jako:
"main": "dist/server/index.js"src/client-v2/ai-filter.js
Źródłowa kopia client scriptu. Jest utrzymywana razem z dist/client/ai-filter.js, żeby było wiadomo, co dokładnie jest wstrzykiwane do przeglądarki.
dist/client/ai-filter.js
Runtime client script serwowany przez NocoBase pod URL:
/static/plugins/@flashautomat/plugin-ai-employees-conversation-filter/dist/client/ai-filter.js?v=3Znane Ograniczenia
- Plugin zależy od wewnętrznych store AI Chat NocoBase:
@nocobase/plugin-ai/chat-box-storei@nocobase/plugin-ai/chat-conversations-store. - Jeśli NocoBase zmieni nazwy store albo strukturę AI Chat, client script będzie wymagał aktualizacji.
- Plugin celowo nie tworzy własnego UI ani settings page.
- Plugin nie modyfikuje danych w bazie, tylko filtruje odczyt listy rozmów.
- Maksymalnie pobiera
pageSize=200rozmów dla wybranego workera.
Troubleshooting
Lista dalej pokazuje wszystkie rozmowy
- Sprawdź, czy HTML zawiera
ai-filter.js?v=3. - Wykonaj
Ctrl+F5w przeglądarce. - Włącz debug przez
AI_FILTER_DEBUG. - Sprawdź, czy w konsoli pojawia się
chat box subscription ready. - Sprawdź, czy po zmianie workera pojawia się
employee changed: <username>.
Worker bez rozmów nie pokazuje pustej listy
To oznacza, że natywny refresh NocoBase prawdopodobnie nadpisuje store. Z debugiem powinien pojawić się log:
native refresh overwritten filter, reapplying rows=0Jeśli go nie ma, sprawdź czy skrypt v=3 jest faktycznie załadowany.
Script nie ładuje się po restarcie kontenera
Uruchom ręcznie startup script:
sh storage/scripts/90-inject-ai-filter.shPotem sprawdź HTML:
grep -c "ai-filter.js?v=3" node_modules/@nocobase/app/dist/client/index.html
grep -c "ai-filter.js?v=3" node_modules/@nocobase/app/dist/client/v/index.htmlPlugin nie działa po zmianach w kodzie
Po zmianie dist/client/ai-filter.js podbij SCRIPT_VERSION w src/server/plugin.ts i dist/server/index.js, np. z 3 na 4, żeby przeglądarka nie używała starego cache.
Kompatybilność
- NocoBase
2.x - Wymaga pluginu AI:
@nocobase/plugin-ai - Testowane z AI Chat stores:
@nocobase/plugin-ai/chat-box-store@nocobase/plugin-ai/chat-conversations-store
Aktualny Status
- Wersja pluginu:
1.0.2 - Aktualna wersja injected client scriptu:
v=3 - Plugin działa bez settings page.
- Plugin jest gotowy do działania po instalacji i
yarn pm enable.
