Ver Fonte

fix: 修复审查发现的3个遗漏问题

- 中: core-constraints.md 示例改为查询 index.db (v5.1)
- 低: SKILL.md genres 路径示例修正为实际目录名
- 低: tier枚举统一为 核心/重要/次要/装饰
  - state_manager.py 注释更新
  - sql_state_manager.py 文档更新
  - index_manager.py SQL查询添加'次要'

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
lingfengQAQ há 5 meses atrás
pai
commit
0d41af61e0

+ 1 - 1
.claude/scripts/data_modules/index_manager.py

@@ -544,7 +544,7 @@ class IndexManager:
             cursor = conn.cursor()
             cursor = conn.cursor()
             cursor.execute("""
             cursor.execute("""
                 SELECT * FROM entities
                 SELECT * FROM entities
-                WHERE (tier IN ('核心', '重要') OR is_protagonist = 1) AND is_archived = 0
+                WHERE (tier IN ('核心', '重要', '次要') OR is_protagonist = 1) AND is_archived = 0
                 ORDER BY is_protagonist DESC, tier, last_appearance DESC
                 ORDER BY is_protagonist DESC, tier, last_appearance DESC
             """)
             """)
             return [self._row_to_dict(row, parse_json=["current_json"]) for row in cursor.fetchall()]
             return [self._row_to_dict(row, parse_json=["current_json"]) for row in cursor.fetchall()]

+ 1 - 1
.claude/scripts/data_modules/sql_state_manager.py

@@ -155,7 +155,7 @@ class SQLStateManager:
         """
         """
         获取核心实体(用于 Context Agent 全量加载)
         获取核心实体(用于 Context Agent 全量加载)
 
 
-        返回所有 tier=核心/重要 或 is_protagonist=1 的实体
+        返回所有 tier=核心/重要/次要 或 is_protagonist=1 的实体
         """
         """
         entities = self._index_manager.get_core_entities()
         entities = self._index_manager.get_core_entities()
         for e in entities:
         for e in entities:

+ 1 - 1
.claude/scripts/data_modules/state_manager.py

@@ -36,7 +36,7 @@ class EntityState:
     id: str
     id: str
     name: str
     name: str
     type: str  # 角色/地点/物品/势力
     type: str  # 角色/地点/物品/势力
-    tier: str = "装饰"  # 核心/支线/装饰
+    tier: str = "装饰"  # 核心/重要/次要/装饰
     aliases: List[str] = field(default_factory=list)
     aliases: List[str] = field(default_factory=list)
     attributes: Dict[str, Any] = field(default_factory=dict)
     attributes: Dict[str, Any] = field(default_factory=dict)
     first_appearance: int = 0
     first_appearance: int = 0

+ 8 - 2
.claude/skills/webnovel-write/SKILL.md

@@ -91,8 +91,14 @@ cat "${CLAUDE_PLUGIN_ROOT}/skills/webnovel-write/references/core-constraints.md"
 **可选加载题材风格参考**(用户指定时加载):
 **可选加载题材风格参考**(用户指定时加载):
 ```bash
 ```bash
 # 如需特定题材的写作风格参考,可按需加载 genres 目录下的对应文件
 # 如需特定题材的写作风格参考,可按需加载 genres 目录下的对应文件
-# 示例: cat "${CLAUDE_PLUGIN_ROOT}/genres/修仙/修仙-writing-style.md"
-# 可用题材: 修仙、系统流、都市异能、狗血言情、知乎短篇、古言、现实题材、规则怪谈等
+# 可用题材目录:
+#   xuanhuan/          - 玄幻修仙
+#   dog-blood-romance/ - 狗血言情
+#   zhihu-short/       - 知乎短篇
+#   period-drama/      - 古言/宫斗
+#   realistic/         - 现实题材
+#   rules-mystery/     - 规则怪谈/推理
+# 示例: cat "${CLAUDE_PLUGIN_ROOT}/genres/xuanhuan/power-systems.md"
 ```
 ```
 
 
 **输出格式**:
 **输出格式**:

+ 4 - 4
.claude/skills/webnovel-write/references/core-constraints.md

@@ -53,17 +53,17 @@ v5.1 不再要求在正文中写 XML 标签。新实体由 Data Agent 在章节
 <example>
 <example>
 <input>主角需要使用"天雷掌"击败敌人</input>
 <input>主角需要使用"天雷掌"击败敌人</input>
 <output>
 <output>
-1. 检查 state.json → entities 中是否有"天雷掌"技能
+1. 查询 index.db 中是否有"天雷掌"技能(v5.1 使用 SQLite)
 2. 若有:直接使用
 2. 若有:直接使用
 3. 若无:在正文中安排获得途径(如拜师/领悟/传承),Data Agent 会自动提取
 3. 若无:在正文中安排获得途径(如拜师/领悟/传承),Data Agent 会自动提取
 </output>
 </output>
 </example>
 </example>
 
 
 <example type="edge_case">
 <example type="edge_case">
-<input>剧情需要主角展示筑基期实力,但 state.json 显示练气期</input>
+<input>剧情需要主角展示筑基期实力,但 index.db 显示练气期</input>
 <output>
 <output>
 ❌ 直接写筑基期战力 → 违反"设定即物理"
 ❌ 直接写筑基期战力 → 违反"设定即物理"
-✅ 先安排突破场景,更新 state.json,再展示新实力
+✅ 先安排突破场景,Data Agent 更新 index.db,再展示新实力
 </output>
 </output>
 </example>
 </example>
 
 
@@ -71,5 +71,5 @@ v5.1 不再要求在正文中写 XML 标签。新实体由 Data Agent 在章节
 
 
 <errors>
 <errors>
 ❌ 主角突然会新技能 → ✅ 先在正文中安排获得途径
 ❌ 主角突然会新技能 → ✅ 先在正文中安排获得途径
-❌ 实力设定不一致 → ✅ 写作前查询 state.json 确认
+❌ 实力设定不一致 → ✅ 写作前查询 index.db 确认
 </errors>
 </errors>