Skip to content

feat: SillyTavern parity Phase 0(角色卡分段存储 / Persona / 世界书字段 / 多聊天数据层) - #2

Merged
Cassiur merged 5 commits into
mainfrom
feat/parity-phase0
Sep 18, 2026
Merged

Cassiur merged 5 commits into
mainfrom
feat/parity-phase0

Conversation

@Cassiur

@Cassiur Cassiur commented Sep 18, 2026

Copy link
Copy Markdown
Owner

Summary

SillyTavern feature-parity Phase 0(地基层):角色卡分段存储、Persona 实体、世界书字段补全、一角色多聊天数据层。

  • 角色卡从"拼接进一整段 system_prompt"改成 SillyTavern 风格的分段存储:personality / scenario / post_history_instructions / creator_notes / character_version / mes_example / alternate_greetings,各字段独立可编辑/导出。
  • 新增 Persona 实体(用户侧身份/描述)+ PersonaRepository。
  • 世界书字段对齐 SillyTavern:次要关键词、scan_depth、大小写/整词匹配、互斥组打分、automation_id、role、vectorized、sticky/cooldown。
  • 一角色多聊天:chats 表 + messages.chat_id,仅数据层(ChatSessionRepository),不接 UI;既有消息自动迁移进每个角色的默认聊天。
  • 修复:upgradeToVersion8 定义了却从未被 onUpgrade 调用,且 onCreate 建表语句本身缺 chat_id 列——两者叠加会让任何新装/升级设备在触碰 messages.chat_id 时抛 SQLiteException: no such column。已修复并补充回归测试覆盖 v7→v8 真实迁移路径。

Phase 1(8-10 个 API 来源、宏引擎、完整 Prompt 管理器界面)明确不在本 PR 范围内。

Test plan

  • ./gradlew testDebugUnitTest lintDebug assembleDebug 全过(含新增的 v7→v8 迁移回归测试)
  • Robolectric 覆盖 v1→v5、v7→v8 两条真实 onUpgrade 迁移路径
  • 逐文件人工 review:CharacterCardData/CharacterProfile/CharacterCardParser/CharacterRepository/WorldBookEntry/PersonaRepository/ChatSessionRepository 构造函数向后兼容性与 cursor 字段索引

🤖 Generated with Claude Code

Cassiur and others added 5 commits September 18, 2026 02:08
- CharacterRepository 读写完整的 personality/scenario/post_history_instructions 等字段
- 不再在导入时有损拼接,保留 SillyTavern 原始结构
- 支持 alternate_greetings/mes_example/creator_notes/character_version
- 为后续导出和分段 Prompt 组装打好地基
- 新增 Persona 模型类
- PersonaRepository 支持 CRUD、默认 Persona 切换
- 自动创建默认 Persona,且默认 Persona 不可删除
- 为后续 {{user}} 宏和用户人设注入打好地基
- 新增次要关键词(secondary_keys)、扫描深度(scan_depth)
- 支持大小写敏感、整词匹配、互斥组(automation_id)
- 角色类型(role: system/user/assistant)
- 粘性(sticky)和冷却(cooldown)机制
- 向量化标记(vectorized)预留语义搜索接口
- Database schema 升级到 v7
- 为高级世界书激活算法打好地基
- Database schema 升级到 v8
- 消息表新增 chat_id 字段,支持同一角色多个独立聊天
- 新增 chats 表存储聊天会话元数据
- ChatSessionRepository 管理聊天会话 CRUD
- Chat 模型类
- 自动迁移:既有消息归入默认聊天,保持向后兼容
- UI 层暂不接入,避免赶工偷工减料
upgradeToVersion8() 已完整实现(chats 表 + messages.chat_id + 默认聊天迁
移),但 onUpgrade() 里漏了 if (oldVersion < 8) 分支,从未被真正调用;
同时 onCreate() 的 createMessageTables() 建表语句本身也没有 chat_id
列。两者叠加导致新装和升级都会在触碰 messages.chat_id 的查询上抛
SQLiteException: no such column。

补充回归测试 upgradeFromVersion7_addsChatIdAndMigratesExistingMessages
ToDefaultChat,种一个 v7 库并触发真实的 onUpgrade(db, 7, 8)。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@Cassiur
Cassiur merged commit cdd1674 into main Sep 18, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant