feat(ia): add Judite & Narrador personas, per-player AI selection, persistent memory, and event reactivity
This commit is contained in:
@@ -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`.
|
||||
Reference in New Issue
Block a user