feat(ia): add Judite & Narrador personas, per-player AI selection, persistent memory, and event reactivity

This commit is contained in:
Marcos Paulo
2026-08-18 19:00:11 -03:00
parent dafd96a4b6
commit ea55813019
13 changed files with 1036 additions and 88 deletions
@@ -0,0 +1,46 @@
# Tasks: AI Multi-Personalities, Judite (SAC), Dynamic Tags, Persistent Memory & Event Expansion
- [x] **Task 1: Persona Enhancement (`Persona.java` & `PersonaTest.java`)**
- Add `JUDITE` (SAC/telemarketing attendant) and `NARRADOR` (fantasy narrator) to `Persona` enum.
- Add `displayTag()` (e.g. "Judite", "Zoeiro", "Amigão", "Seco", "Aldeão", "Narrador", "IA") and `tagColor()` (`NamedTextColor`).
- Add persona system prompts with safety guard invariant.
- Update `PersonaTest.java` to assert all enum keys, display tags, colors, and guard constraints.
- [x] **Task 2: Persistent Player Memory & Compression (`PlayerMemory.java` & `PlayerMemoryTest.java`)**
- Create `PlayerMemory.java` persisted at `plugins/Canalhandia/ia-memoria.yml`.
- Implement per-player persona setting (`getPersona`, `setPersona`, `resetPersona`).
- Implement turn recording with automatic sliding-window summary condensation.
- Implement key facts list per player (`addFact`, `getFacts`).
- Implement `formatContext(UUID player)` for AI system prompt formatting.
- Write comprehensive unit tests in `PlayerMemoryTest.java`.
- [x] **Task 3: Location Grounding Tool (`Tools.java` & `ToolsTest.java`)**
- Add `lugares_jogador` function definition to `Tools.DEFINITIONS`.
- Implement `lugares_jogador` in `Tools.java` pulling recent deaths from `DeathLog`, saved pins from `Notes`, and current world/biome.
- Write unit tests in `ToolsTest.java` verifying tool execution and response formatting.
- [x] **Task 4: AI Orchestration & Dynamic Tag Styling (`Ai.java`)**
- Integrate `PlayerMemory` into `Ai.java`.
- Resolve effective persona per player in `ask()`.
- Update `compose()` to inject player persona prompt, player memory context, and location context.
- Update `deliver()` and `style()` to display dynamic persona tag (e.g. `[Judite]`, `[Zoeiro]`) and hover metadata.
- Update `saySomething()` to support persona-specific spontaneous speech.
- [x] **Task 5: Command Interface & Subcommands (`CanalhandiaCommand.java`)**
- Implement `/ia persona` / `/ia personalidade` list and player preference switcher (`/ia persona <nome>`).
- Implement `/ia persona padrao` to reset preference.
- Implement `/ia status` to show active persona, memory summary, and facts.
- Implement `/ia esquecer` to clear personal memory.
- Update tab-completion for `/ia` with new subcommands and persona keys.
- [x] **Task 6: Event Expansion & Plugin Wiring (`Canalhandia.java`)**
- Initialize and expose `PlayerMemory` in `Canalhandia.java`.
- Expand event triggers in `Canalhandia.java`:
- Joins (`onJoinWelcome`) with persona-specific greeting.
- Notable deaths & streaks (`onPlayerDeath`) with persona-specific commentary.
- Milestone completions (`onMilestone`) with persona-specific recognition.
- [x] **Task 7: Verification & Build (`mvn test` & `mvn package`)**
- Run full test suite (`mvn test`) ensuring 100% pass rate.
- Package final jar (`mvn package`).
- Verify all acceptance criteria from `spec.md`.