feat: add RMA (Relationship Memory Architecture) module v0.6.0

Complete RMA system for tracking relationship dynamics in roleplay:
- 10 new modules in src/rma/ (analyzer, memory-store, phase-manager,
  worldbook-sync, float-panel, confirmation-ui, timeline-view, etc.)
- Three-layer model: phases → memories (4 types) → emotional texture
- Post-processing AI analysis via CHARACTER_MESSAGE_RENDERED hook
- Dynamic world book entry toggling/rewriting
- Floating panel UI with 3 states (expanded/half/minimized)
- User confirmation flow (every_turn/important_only/auto modes)
- Settings panel integration with independent API config
- chat_metadata.cola_rma persistence

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Cola-Echo
2026-03-31 23:23:41 +08:00
parent 621b6bad30
commit 10ea8cc1f4
22 changed files with 2928 additions and 19 deletions

49
ui/rma-panel.html Normal file
View File

@@ -0,0 +1,49 @@
<!-- RMA 关系记忆系统 悬浮面板 -->
<div id="rma-float-panel" class="rma-panel rma-panel-minimized" style="display:none">
<!-- 最小化图标 -->
<div class="rma-panel-minimized-icon" id="rma-minimize-icon" title="RMA 关系系统">🔮</div>
<!-- 面板头部 -->
<div class="rma-panel-header" id="rma-panel-header">
<span class="rma-panel-title">RMA 关系系统</span>
<div class="rma-panel-controls">
<button class="rma-btn-sm" id="rma-collapse-btn" title="折叠"></button>
<button class="rma-btn-sm" id="rma-minimize-btn" title="最小化">_</button>
</div>
</div>
<!-- 半折叠摘要行 -->
<div class="rma-panel-half" id="rma-panel-half"></div>
<!-- 展开面板主体 -->
<div class="rma-panel-body" id="rma-panel-body">
<!-- 阶段指示器 -->
<div id="rma-phase-section" class="rma-section"></div>
<!-- 当前感受 -->
<div id="rma-feeling-section" class="rma-section"></div>
<!-- 秘密进度 -->
<div id="rma-secrets-section" class="rma-section"></div>
<!-- 未解决事项 -->
<div id="rma-threads-section" class="rma-section"></div>
<!-- 故事状态 -->
<div id="rma-story-section" class="rma-section rma-story-bar"></div>
<!-- 最近记忆 -->
<div id="rma-memories-section" class="rma-section"></div>
<!-- 待确认区域 -->
<div id="rma-pending-section" class="rma-section rma-pending-area"></div>
</div>
<!-- 底部操作栏 -->
<div class="rma-panel-footer">
<button class="rma-btn-sm" id="rma-timeline-btn" title="查看完整记忆时间线">📜 完整记忆</button>
</div>
<!-- 时间线容器 -->
<div id="rma-timeline-container" style="display:none"></div>
</div>

View File

@@ -726,6 +726,81 @@
</div>
</div>
</div>
<!-- RMA 关系记忆系统折叠卡片 -->
<div class="mm-collapse-card" id="mm-rma-card">
<div class="mm-collapse-header" id="mm-rma-toggle">
<div class="mm-collapse-title">
<i class="fa-solid fa-heart-pulse"></i>
<span>RMA 关系记忆</span>
<span class="mm-collapse-badge" id="mm-rma-badge">关闭</span>
</div>
<i class="fa-solid fa-chevron-down mm-collapse-arrow"></i>
</div>
<div class="mm-collapse-body">
<div class="mm-index-mode-content">
<!-- 启用开关 -->
<div class="mm-setting-item">
<label class="mm-label-with-hint">
<input type="checkbox" id="mm-rma-enabled" />
启用 RMA 关系记忆系统
<i class="fa-solid fa-circle-question mm-hint-icon" title="自动分析每轮对话中的关系变化,管理记忆、动态更新世界书条目。需要角色卡包含 RMA 配置。"></i>
</label>
</div>
<!-- 角色卡检测状态 -->
<div class="mm-setting-item" id="mm-rma-char-status" style="display: none;">
<div class="mm-rma-status-row">
<i class="fa-solid fa-user-check" style="color: var(--mm-success);"></i>
<span id="mm-rma-char-status-text">当前角色已配置 RMA</span>
</div>
</div>
<!-- 确认模式 -->
<div class="mm-setting-item">
<label class="mm-label-with-hint">
确认模式
<i class="fa-solid fa-circle-question mm-hint-icon" title="every_turn: 每轮都弹窗确认&#10;important_only: 仅阶段变化/秘密进展/裂痕时确认&#10;auto: 全自动,事后可在面板修改"></i>
</label>
<select id="mm-rma-confirmation-mode" class="mm-select mm-select-sm">
<option value="every_turn">每轮确认</option>
<option value="important_only">仅重要变化</option>
<option value="auto">全自动</option>
</select>
</div>
<!-- 面板默认状态 -->
<div class="mm-setting-item">
<label class="mm-label-with-hint">
悬浮面板默认状态
<i class="fa-solid fa-circle-question mm-hint-icon" title="面板初始显示状态&#10;展开: 显示所有信息&#10;半折叠: 仅显示一行摘要&#10;最小化: 仅显示角落图标"></i>
</label>
<select id="mm-rma-panel-state" class="mm-select mm-select-sm">
<option value="expanded">展开</option>
<option value="half_collapsed">半折叠</option>
<option value="minimized">最小化</option>
</select>
</div>
<!-- RMA 分析 API 配置卡片 -->
<div id="mm-rma-config-card" class="mm-ai-config-item" style="margin-top: 10px;">
<div class="mm-config-info">
<span class="mm-config-name">
<i class="fa-solid fa-robot"></i>
RMA 分析
</span>
<span class="mm-config-model" id="mm-rma-model-display">未配置</span>
</div>
<div class="mm-config-actions">
<button type="button" id="mm-rma-edit" class="mm-btn mm-btn-xs mm-btn-primary" title="编辑配置">
<i class="fa-solid fa-pen"></i>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>