feat: Restore mood system and implement comprehensive memory editor UI

MOOD SYSTEM FIX:
- Mount bot/moods directory in docker-compose.yml for Cat container access
- Update miku_personality plugin to load mood descriptions from .txt files
- Add Cat logger for debugging mood loading (replaces print statements)
- Moods now dynamically loaded from working_memory instead of hardcoded neutral
This commit is contained in:
2026-02-10 22:03:54 +02:00
parent 6ba8e19d99
commit 34167eddae
4 changed files with 211 additions and 1 deletions

View File

@@ -2777,6 +2777,17 @@ def set_voice_debug_mode(enabled: bool = Form(...)):
class MemoryDeleteRequest(BaseModel):
confirmation: str
class MemoryEditRequest(BaseModel):
content: str
metadata: Optional[dict] = None
class MemoryCreateRequest(BaseModel):
content: str
collection: str # 'declarative' or 'episodic'
user_id: Optional[str] = None
source: Optional[str] = None
metadata: Optional[dict] = None
@app.get("/memory/status")
async def get_cat_memory_status():
"""Get Cheshire Cat connection status and feature flag."""
@@ -2899,6 +2910,48 @@ async def delete_single_memory_point(collection: str, point_id: str):
else:
return {"success": False, "error": f"Failed to delete point {point_id}"}
@app.put("/memory/point/{collection}/{point_id}")
async def edit_memory_point(collection: str, point_id: str, request: MemoryEditRequest):
"""Edit an existing memory point's content and/or metadata."""
from utils.cat_client import cat_adapter
success = await cat_adapter.update_memory_point(
collection=collection,
point_id=point_id,
content=request.content,
metadata=request.metadata
)
if success:
return {"success": True, "updated": point_id}
else:
return {"success": False, "error": f"Failed to update point {point_id}"}
@app.post("/memory/create")
async def create_memory_point(request: MemoryCreateRequest):
"""
Manually create a new memory (declarative fact or episodic memory).
For declarative facts, this allows you to teach Miku new knowledge.
For episodic memories, this allows you to inject conversation context.
"""
from utils.cat_client import cat_adapter
if request.collection not in ['declarative', 'episodic']:
return {"success": False, "error": "Collection must be 'declarative' or 'episodic'"}
# Create the memory point
result = await cat_adapter.create_memory_point(
collection=request.collection,
content=request.content,
user_id=request.user_id or "manual_admin",
source=request.source or "manual_web_ui",
metadata=request.metadata or {}
)
if result:
return {"success": True, "point_id": result, "collection": request.collection}
else:
return {"success": False, "error": "Failed to create memory point"}
def start_api():
import uvicorn