- **v0.23.66 模型角色分配 × 后台并发根治** (2026-06-28) — 两层修复解决模型过载与前端页面崩溃问题。核心变更: - **模型角色分配**:新增三种模型角色——创作模型(正文生成/Writer/改写)、工具模型(Call 1 路由/探测/JSON 提取)、后台任务模型(BGP 审计/入库/洞察/Genesis 后台流水线)。`AppConfig` +3 字段 + `GatewayRequest.model_role` + `resolve_role_model` 解析方法。网关 `select_candidates`/`select_fastest_profile` 按角色选择对应模型并强制置顶;未设置时自动分配(快→工具,闲置→后台,创作回退 active)。前端 `UnifiedModelManager` 顶部新增「模型角色分配」卡片(三个下拉框 + "自动分配"选项),`ModelCard` 显示角色徽章(琥珀=创作/蓝=工具/紫=后台) - **后台并发过载根治**:`ParallelWorldOutlineCharacterStep` 从 `tokio::join!` 3 路并发改为串行 `.await` + `BACKGROUND_LLM_SEMAPHORE` 保护;BGP-4 `run_insight` 前加信号量;Genesis 后台 spawn 入口加信号量。任何时刻最多 1 个后台 LLM 调用,根治单模型过载 → `INTERNAL_ERROR` 洪流 → 前端崩溃的链路 - 验证:`cargo test --lib` **582 passed / 0 failed / 2 ignored**;`cargo check` ✓;`npx tsc --noEmit` ✓;`cargo +nightly fmt -- --check` ✓ - **v0.23.65 提示词工程全链路修复** (2026-06-27) — 对提示词工程进行深度审计,修复 80+ 高质量提示词在默认续写路径(TimeSliced)被系统性旁路的问题,全部改动零新增 LLM 调用。核心变更: - **P0-1/P0-2:`writer_system` 全链透传**。`writer_system`(7 条写作准则)此前仅在 Full 路径(`build_writer_prompt`)生效,TriShot Call 3 和 TimeSliced(默认续写)完全旁路。现在从 orchestrator → `generate_for_task*` → `GatewayRequest` → `execute_generation` → `GenerateRequest` → 适配器全链路透传 `system_prompt`。`GatewayRequest` +`system_prompt` 字段;`execute_generation` 三级优先级(每模型 > adapter 默认 > `writer_system` 注册表默认);Ollama 适配器 `system_prompt` 前置拼接 - **P0-3:选中资产正文回灌**。Call 1 返回 `selected_asset_ids`(桥段卡/引擎/高压关系等),此前只被转为路由标签用于模型网关,资产内容(`function`/`when_to_use`/`remix_hint`/`avoid`/`core_payoff`)从未到达 Writer。新增 `render_selected_asset_guidance`——从 `AssetCapabilityManifest` 回查资产完整内容,格式化为紧凑创作指导文本,注入 TriShot Call 3 的 system_prompt(限 5 条,控制 token 预算) - **P1-2:LivingAuthorGuard 注入所有路径**。`render_writer_system_from_bundle` 内置在世作者名清除 + 手工艺滑块(5 维 × 3 档),此前只在 Full 路径 `build_writer_prompt` 生效 - **P1-3:Anti-AI cliché 避免指令**。27 个 AI 高频陈词滥调(不言而喻、总而言之、嘴角微微上扬…)注入所有 Writer 路径的 system_prompt - **P2-1/P2-5:`orchestrator_timesliced_writer` 模板充实 + `continuation` 变量声明补全**。模板新增 `{{continuation}}` 变量使用;注册表补全 `continuation` 变量声明(此前代码注入了但注册表未声明,前端编辑器不可见) - 验证:`cargo test --lib` **582 passed / 0 failed / 2 ignored**;`cargo check` ✓;`npx tsc --noEmit` ✓;`cargo +nightly fmt -- --check` ✓ - **v0.23.64 续写内容质量根因修复** (2026-06-27) — 用户续写得到完全不可用的小说(4 个不同故事拼接 + 每个重复两次 + 规划 markdown 泄漏)。三路并行调查确认 3 个根因。核心变更: - **P0 根因:Writer LLM 看不到前文正文**。TimeSliced(默认续写)`execute_time_sliced` 构建 prompt 时完全不读取 `task.parameters["current_content"]`,Writer 只收到 `WriteTimeBundle` 结构化约束 → 每次续写生成全新故事。TriShot 路径的 `current_content` 截断 6000→600 字只给 Call 1 做意图检测,Call 3 Writer 看不到任何原始正文 - **P0 修复**:新增 `build_continuation_context` 函数(结合记忆系统)——从 `scene_commits.summary_text` 读取近 3 章摘要(每章 300 字)+ 当前章尾部 2000 字预览,注入 TimeSliced 和 TriShot(非创世第一章)prompt。`MemoryWriter::extract_summary` 从前缀 200 字改为尾部 300 字(续写需要"最近发生了什么"而非开头) - **P1 根因:`sanitize_novel_output` 清洗不足**。推理模型在正文后输出 `...` 思考链 + `+++++` 文件分隔符 + 编号规划块(`1. 世界观设定`等)+ markdown 代码块,`sanitize_novel_output` 均未剥离 → 规划 markdown 泄漏到正文 - **P1 修复**:`sanitize_novel_output` 新增第 0 步清洗(调用 `strip_reasoning_blocks` 剥离思考链 + `+++++` 分隔符截断 + 编号规划块连续 3 行检测截断 + markdown 代码块剥离)。`strip_reasoning_blocks` 从 `narrative/mod.rs` 改为 `pub(crate)` 复用 - **P2 根因:前端幽灵文本与编辑器内容同时渲染**。`AppendContent` 事件 `setContent(prev => prev + formatted)` 无去重守卫 → 同一正文可被拼接两次。bootstrap 回退路径 `setContent(autoFormatText(final_content))` 不清空 `generatedText` → 同一文本同时作为幽灵(纯文本)和编辑器内容(HTML) - **P2 修复**:`AppendContent` 追加前检查 formatted 尾部 200 字是否已存在于 prev 中;bootstrap 回退路径两个 `setContent` 前加 `setGeneratedText('')` - 验证:`cargo test --lib` **578 passed / 0 failed / 2 ignored**;`cargo check` ✓;`npx tsc --noEmit` ✓ - **v0.23.63 byte-slice panic 根治 + 探测日志静默化** (2026-06-27) — 解决创世静默卡死 600s 超时 + 日志洪流两个问题。核心变更: - **根因(日志确认)**:`trishot.call3.done`(Call 3 作家模型生成完成)正常发射,但第二个 `trishot.call3.done`(Call 3 完成,正文已生成)从未出现。两者之间的 `&content[..content.len().min(120)]` 在多字节 UTF-8 边界 **panic**(Rust 字符串字节索引必须落在 char 边界),`execute_trishot` tokio task 静默崩溃,`smart_execute` 600s 超时 - **P0 修复**:全局 9 处 `&str[..str.len().min(N)]` 字节切片改为 `str.chars().take(N).collect::()`,根治 UTF-8 边界 panic。覆盖 orchestrator/genesis/audit_executor/analyzer/migrations/service - **P1 探测日志静默化**:keepalive 探测每 10s 调用 3 个模型,虽然 `is_silent_background=true` 跳过了 emit_llm_progress,但 `workflow_log`(llm.generate.start/completed/heartbeat/record_call/emit_completed/return_ok)和 `record_llm_call` 仍在执行 → 27361 行日志中 17832 行是 probe 噪声。现在 `is_silent_background=true` 时跳过全部 workflow_log 和 record_llm_call - 验证:`cargo test --lib` **578 passed / 0 failed / 2 ignored**;`npx tsc --noEmit` ✓ - **v0.23.61 系统提示词可配置 + 第一章注册表化 + 框架级智能路由** (2026-06-27) — 三个缺口全面修复。核心变更: - **Gap 1 第一章注册表化**:`genesis.rs` 硬编码 `format!()` 改为 `first_chapter_prompt()`,走 PromptRegistry 的 `narrative_first_chapter_generate` 条目(15 个模板变量),后台可编辑覆盖 - **Gap 2 系统提示词覆盖**:`LlmProfile` +`system_prompt_override` → `GenerateRequest` +`system_prompt` → OpenAI/Anthropic adapter 去硬编码英文 "You are a professional…",改为 `req.system_prompt`。前端 ModelModal 新增多行文本框。优先级:每模型 > adapter 默认 - **Gap 3 框架级智能路由**:新增 `FrameworkSelections`(methodology/quality_gate/contextual_injectors/prompt_hints)。Call 1 最快模型收到 `build_prompt_framework_catalog()`(方法论文/质量门/注入器目录),输出 `framework_selections`。各步骤消费选择结果 - 验证:`cargo test --lib` **578 passed / 0 failed / 2 ignored**;`cargo +nightly fmt --check` ✓;`npx tsc --noEmit` ✓ - **v0.23.60 网关探测异步化 + 调度退避 + 并发限流 + 卡死诊断** (2026-06-27) — 基于本机日志分析的精益优化。核心变更: - **网关探测异步化**:后台 keepalive 每 10s 刷新健康模型(5s 超时),`is_health_fresh()` → true 时网关跳过内联 5s 探测,正常运行时 0ms 附加延迟 - **死模型退避**:连续失败 ≥3 次 → 指数退避 30→60→120→…→3600s - **后台 LLM 并发限流**:`BACKGROUND_LLM_SEMAPHORE(1)`,Call 3 后 BGP-1/BGP-3 串行化 - **卡死诊断**:`execute_trishot` 返回前 → `orchestrator.generate` 返回前 → genesis DB 保存前后加 `log::warn!` - 验证:`cargo test --lib` **578 passed / 0 failed / 2 ignored** - **v0.23.59 全面修复并强化模型网关调度** (2026-06-27) — 审计发现创世流程 5 个 LLM 调用中 4 个绕过网关、真实调用失败对调度器不可见两个系统性缺陷,全面修复。核心变更: - **根因 A(审计确认)**:创世流程 5 个 LLM 调用中,只有 TriShot Call 3 经过网关(带 5s 预探测 + 候选 fallback)。故事概念生成、Call 1 路由合成、5 个后台 pipeline 步骤全部绕过网关——直接走 `select_profile_for_request` + 单适配器,死模型挂起 300s 直到 LLM 超时,无候选切换 - **根因 B(审计确认)**:候选循环中真实调用失败只 `continue` 到下一候选,不更新健康注册表。只有预探测失败才标记 Unhealthy。预探测成功≠真实调用成功——模型能说 "OK" 但无法生成正文时,下次 `generate()` 又强制置顶该模型(`+1000` 分)。`Degraded` 状态从未被任何路径写入 - **Fix 1 路由到网关**:`generate_for_request_with_context_and_pipeline`(service.rs)改为委托 `generate_for_request_with_request_id`(网关路径),单点覆盖概念生成 + 5 个后台 pipeline。新增 `derive_intent_from_label` 从 `context_label` 派生 `intent_verb`/`intent_object` 激活意图感知分类 - **Fix 2 `generate_with_fastest` 探测+fallback**:新增 5s 预探测(`probe_profile_quick`),探测通过才直接调用(保留速度优势),失败标记 Unhealthy + 递增失败计数,回退到网关候选链。新增 `GatewayExecutor::mark_unhealthy`/`record_success_public` 公开接口 - **Fix 3 连续失败降级**:`HealthRecord` +`consecutive_failures` 字段 + `record_failure`/`record_success`/`consecutive_failures` 方法;网关候选循环 5 处跟踪真实调用成败(真实调用失败标记 `Degraded`——让"能说 OK 但无法生成正文"的模型对调度器可见);新增 `active_model_demoted()` + `ACTIVE_MODEL_DEMOTION_THRESHOLD=2`,3 个强制置顶点(`select_candidates`/`generate`/`select_fastest_profile`)连续失败≥2 时跳过强制置顶,成功 1 次即清零恢复 - **Fix 4 TimeSliced 写作策略**:`WriteTimeBundle::load_sync()` 的写作策略约束字符串是硬编码(`运行模式:标准\n冲突强度:0.5\n...`),用户在后台设置修改的策略从未在 TimeSliced 续写路径生效。`execute_time_sliced()` 从 `AppConfig` 读取真实 `WritingStrategy` 并覆盖 `bundle.writing_strategy_constraints`(`format_writing_strategy_constraints` 新增于 `write_time_bundle.rs`) - 验证:`cargo check` 零错误;`cargo test --lib` **578 passed / 0 failed / 2 ignored**(571 基线 + 7 新增);`cargo +nightly fmt --check` 通过;`npx tsc --noEmit` 零错误 - **v0.23.49 推理模型思考链导致 JSON 提取出空对象修复** (2026-06-26) — 解决推理模型创世时报 `missing field 'title' at line 1 column 2` 的问题。核心变更: - **根因(日志确认)**:MN-Oblivion-26B 等推理模型在正文前输出 `önh...` / `...` 思考链,思考链里含花括号(如 "用 {} 格式表示")。`extract_first_json_object` 用 `content.find('{')` 找第一个 `{`,它落在思考链里那个 `{}` 上,括号匹配返回空对象 `{}`,serde 反序列化 `StoryMetaElement` 时找不到必填 `title`。LLM 实际成功返回 5191 字符,失败在 JSON 提取阶段 - **修复**:新增 `strip_reasoning_blocks`(在 `extract_and_sanitize_json` 第一步剥离配对思考链块,标签以字节数组构造避免源码字面量被误处理);`extract_first_json_object` 跳过空对象 `{}` 继续向后扫描。`extract_and_sanitize_json` 是 genesis/ingest/analysis/auto_contract 共用 JSON 提取咽喉点,一次性受益 - 验证:`cargo test --lib` **571 passed / 0 failed / 2 ignored** - **v0.23.48 JSON 提取用括号匹配修复 trailing characters 解析失败** (2026-06-25) — 解决 LLM 返回 JSON 后附带含 `}` 文本导致的解析失败。核心变更: - **根因**:`extract_and_sanitize_json` 用 `rfind('}')` 找 JSON 结尾,LLM 在 JSON 后输出包含 `}` 的额外文本时,`rfind` 误提取过多内容 → serde_json "trailing characters" 错误 - **修复**:新增 `extract_first_json_object` 用括号匹配(跟踪 `{`/`}` 深度 + 跳过字符串字面量)精确提取第一个完整 JSON 对象 - 验证:`cargo test --lib` **568 passed / 0 failed / 2 ignored** - **v0.23.47 调用模型前实时连接探测(5s),跳过失效死模型** (2026-06-25) — 解决死模型浪费 30-300s 超时。核心变更: - **根因**:模型列表里可能存在已失效但健康状态仍为 Healthy 的死模型(本地服务已停止但缓存未更新) - **修复**:`GatewayExecutor::generate` 候选循环中,每个候选模型在实际 LLM 调用前先执行 5s 超时实时探测;探测失败/超时则标记 `HealthStatus::Unhealthy`,跳到下一候选 - **v0.23.46 顶部流程进度和底部AI进程状态统一使用模型名称** (2026-06-25) — 状态栏文案追加模型名称。 - **v0.23.45 IngestPipeline LLM 调用静默化,根治正文后活动卡死与页面崩溃** (2026-06-25) — 解决创世正文返回后前端崩溃问题。核心变更: - **根因(日志确认)**:创世正文返回后,IngestPipeline 并发发起多个"记忆-内容分析"LLM 调用,`context_label` 未匹配 `is_silent_background` 静默列表,导致进度事件覆盖前端主活动状态("准备上下文"卡住)。本地模型无法处理并发请求返回 `INTERNAL_ERROR`,大量错误事件涌入导致前端页面崩溃空白 - **修复**:将 IngestPipeline 的三个 `context_label`(`"记忆-内容分析"`、`"记忆-生成知识"`、`"记忆-叙事事件提取"`)加入 `is_silent_background` 静默列表 - 验证:`cargo check` 零错误 - **v0.23.44 AI 状态提示使用模型名称** (2026-06-25) — 状态栏文案追加模型名称。核心变更: - `generation-status` 和 `llm-generating-progress` 心跳事件的状态文案追加模型名称(格式:`准备上下文... · gemma4-e2b (OpenAI) (15s)`) - 模型名称来自 `lastLlmModelRef`(在 `llm-prompt-sent` 事件中设置为 `model_name (provider)` 格式) - **v0.23.43 前端诊断日志 + log_frontend_event 命令** (2026-06-25) — 前端可写入 WorkflowLogger。核心变更: - 新增 `log_frontend_event` Tauri 命令,前端关键路径(`setContent`/`selectChapter`/`ChapterSwitch`)可写入 `creative_workflow.log` - 诊断卡片自动收集这些前端日志 - **v0.23.42 根治创世卡在"最终输出":BGP-4 自死锁修复** (2026-06-25) — 根治 v0.23.40-41 中创世 Call 3 完成后卡死 600s 超时的问题。核心变更: - **根因(日志确认)**:`execute_trishot` 在 Call 3 成功返回后用 `spawn_blocking().await` 同步等待 BGP-4 `should_trigger` DB 查询,与 BGP-1/BGP-3 后台任务竞争 `std::sync::Mutex` 导致自死锁,`execute_trichot` 永不返回,DB 保存和 ChapterSwitch 事件从未执行 - **修复**:BGP-4 从 `spawn_blocking().await` 改为 `tokio::spawn`(fire-and-forget),`execute_trichot` 在 Call 3 完成后立即返回 - **诊断日志**:`trishot.call3.done` → `trishot.bgp4.spawn` → `trishot.bgp4.done` 全部在 1ms 内完成 - 验证:`cargo test --lib` **563 passed / 0 failed / 2 ignored** - **v0.23.40 参照现有诊断机制添加 WorkflowLogger 日志点** (2026-06-25) — 在关键缺失点补充日志。核心变更: - **Bug A 日志点**:`genesis.first_chapter.generated`、`genesis.chapter_switch.sent`、`genesis.final_content`(记录是摘要还是完整正文) - **Bug B 日志点**:`smart_execute.start`、`trishot.call3.done`、`trishot.bgp4.start`/`bgp4.done` - 前端 `[DEBUG-dup]` / `[DEBUG-act]` console.warn 诊断日志 - **v0.23.37 Genesis 活动清理 + 前端正文重复修复尝试** (2026-06-25) — 修复 Genesis 完成后活动卡死。核心变更: - **Bug B-1**:Genesis 成功路径补发 `smart-execute-progress` 的 `completed` 事件,错误路径补发 `error` - **Bug B-2**:`smart-execute-progress` 处理器把 `timeout`/`error` 也映射为 `failed`(此前只认 `completed`) - v0.23.39 回滚了激进的前端修改(selectChapter guard / 跳过 selectChapter / setGeneratedText('')),保留后端修复 - **v0.23.36 创世正文清洗 + 后台作业不阻塞输入** (2026-06-24) — 解决创世流程最终输出的两个瑕疵。核心变更: - **TriShot Call 3 输出纪律段**:`NOVEL_OUTPUT_DISCIPLINE` 常量追加到 Call 3 的 `final_prompt` 末尾,约束模型只输出纯小说正文,禁止元评论/markdown 格式/`【】`小节标题/`(幕结束)`批注 - **`sanitize_novel_output` 后处理兜底**:Call 3 返回后对内容做四步清洗(逐行去 markdown 符号 → 截断尾部元评论 → 剥离前导过渡语 → 去整行小节标题/批注),7 个单元测试覆盖 - **Genesis 后台阶段不阻塞输入**:后台完善世界观/角色/场景时 `pipeline-progress` 事件打 `metadata:{background:true}` 标记,前端 `useBackendActivityListener` 检测到后跳过注册 running activity,输入框不再被禁用;状态文案仍由 `novel-bootstrap-progress` 监听器独立更新 - 验证:`cargo test --lib` **563 passed / 0 failed / 2 ignored**;`npx tsc --noEmit` 零错误 - **v0.23.35 采摘 Step1 JSON 解析容错** (2026-06-23) — 修复采摘作业 Ingest Step1 `missing field entity_type` 错误。核心变更: - `memory/ingest.rs` 中 6 个反序列化结构体补 `#[serde(default)]` 容错字段(AnalyzedEntity/AnalyzedRelation/AnalyzedEvent/SentimentAnalysis/Foreshadowing) - LLM 返回 JSON 缺失这些字段时不再解析失败,3 次重试均失败的采摘错误消除 - 验证:`cargo test --lib` **556 passed / 0 failed / 2 ignored** - **v0.23.34 修复 select_candidates 中 std::sync::Mutex 自死锁(根因彻底查明)** (2026-06-23) — v0.23.31-33 全链路 15 个诊断标记精确定位:`select_candidates` 第125行 `health_registry.lock()` 获取 MutexGuard,变量存活到函数末尾不释放,第188行 `is_model_available` 再次 `lock()` 同一 Mutex → `std::sync::Mutex` 不可重入 → 自死锁 → 600s 超时。Call 1 走 `select_fastest_profile` 不受影响。修复:health 锁移入嵌套块作用域,块结束时自动释放。 - 验证:`cargo test --lib` **556 passed / 0 failed / 2 ignored**;`cargo +nightly fmt --check` 通过 - **v0.23.30 Genesis 全线阻塞点修复:genesis_default + select_candidates spawn_blocking + Chapter 保存 spawn_blocking** (2026-06-23) — 全线同步 DB 操作从 tokio worker 线程移出。核心变更: - **`GenerationMode::genesis_default()`**:显式化 Genesis 模式选择,替代写死的 TriShot。Genesis 始终用 TriShot(需资产选择 + 快速出章),用户模式设置影响日常续写/改写 - **`select_candidates` spawn_blocking 预加载能力档案**:`GatewayExecutor::generate` 中同步 DB 查询 `CapabilityStore::load_all()` 用 `spawn_blocking` 包裹,修复 Call 3 卡死 - **Chapter 保存 spawn_blocking**:`FirstChapterGenerationStep` 中 `ChapterRepository::get_by_story/update/create` 移入 `spawn_blocking` - **Genesis 跳过 Call 2 精修器**:第 1 章 + 无已有内容时直接进 Call 3 - **前端显示 "[创世]"**:Genesis 期间底部栏显示创世状态而非"三击模式" - 验证:`cargo test --lib` **556 passed / 0 failed / 2 ignored**;`npx tsc --noEmit` 零错误;`npx vitest run` 126 passed - **v0.23.28 select_candidates spawn_blocking + v0.23.29 Chapter 保存 spawn_blocking** (2026-06-23) — 最后两个同步 DB 阻塞点修复。Call 3 不再卡在 gateway 路由;第一章内容写入不再卡在 DB。 - **v0.23.24 setContent 内容比较 + v0.23.23 RichTextEditor isExternalSyncRef** (2026-06-23) — 从根源和入口双重杜绝伪"保存中":`setContent` 和新内容相同时跳过;编辑器外部 `setContent` 触发的 `onUpdate` 跳过 `onChange` 回调。 - **v0.23.21 根治 TriShot auto_fill 5 次 LLM 调用耗尽预算** (2026-06-22) — v0.23.19 仍 600s 超时,日志显示 `try_state` 到 `spawn` 卡 4 分钟:`record_llm_call` 虽然把 DB 写入移入 spawn_blocking,但 `try_state` + `count_tokens` + `get_active_profile` + 数据收集仍在 tokio worker 线程同步执行。同时用户反馈"保存中"卡死——`update_chapter` 是同步 Tauri command,连接池满时 `pool.get()` 阻塞。核心变更: - **Fix 4 整个 record_llm_call 放入 spawn_blocking**:async 线程只 clone owned 数据,所有工作(token 计数、try_state、DB 写入)在阻塞线程池执行,tokio worker 线程零阻塞 - **Fix 3 update_chapter 改 async + spawn_blocking**:同步 `pub fn` → `pub async fn`,DB 操作用 `spawn_blocking` 包裹,连接池满时不再阻塞前端"保存中" - **连接池扩容 20 → 50**:缓冲 auto_commit/ingest/projection writers 并发占用 - **新增 `get_db_pool_status` 命令**:返回 `{max_size, connections, idle, in_use, connection_timeout_secs}`,前端可实时监控连接池状态 - **前端 DB 连接池指示器**:`useDbPoolStatus` Hook 5s 轮询,FrontstageHeader 状态栏 ≥80% 黄色预警 / ≥95% 红色告警;诊断卡片新增 `DB连接池` 字段 - 验证:`cargo test --lib` **556 passed / 0 failed / 2 ignored**;`npx tsc --noEmit` 零错误;`npm run format:check` 零差异;`vitest run` 126 passed - **v0.23.19 根治 record_llm_call 阻塞 tokio worker 导致 600s 超时** (2026-06-22) — v0.23.18 行级工作流日志精确定位卡点:概念生成 LLM 调用 1.1s 完成,但随后的 `record_llm_call` 同步 DB INSERT 卡住 600s 永不返回。根因是 `record_llm_call` 在 async 上下文中直接执行同步 `pool.get()` + `conn.execute()`,而生产连接池未配置 `connection_timeout`,连接池满时 `pool.get()` 无限阻塞 tokio worker 线程,`tokio::time::timeout` 无法 poll。核心变更: - **生产连接池加 `connection_timeout(5s)`**:`init_db` 的 `Pool::builder()` 补 `.connection_timeout(Duration::from_secs(5))`,与测试池一致,防止 `pool.get()` 无限阻塞 - **`record_llm_call` 改为 fire-and-forget**:收集 owned 数据后 `tokio::task::spawn_blocking` 提交 DB 写入到阻塞线程池,立即返回不等待结果。指标记录是审计用途,失败不影响生成结果,永不阻塞主流程 - 移除 `record_llm_call` 内部的 `llm.record_call.db_write` / `db_done` 工作流日志(DB 写入已异步化,无法在主流程观察到完成时刻),新增 `llm.record_call.spawn` 标记提交点 - 验证:`cargo test --lib` **556 passed / 0 failed / 2 ignored**;`cargo +nightly fmt --check` 通过;`npx tsc --noEmit` 零错误;`npm run format:check` 零差异 - **v0.23.16 Genesis 快速阶段卡死修复 + E2E 集成测试** (2026-06-22) — 根治 v0.23.15 中概念 LLM 完成后 pipeline 阻塞 600s 的问题。根因是 `StoryRepository::create()` 为同步 r2d2 调用,在 async 上下文中直接执行,若 DB 锁或连接池满则阻塞 tokio worker 线程,导致 `tokio::time::timeout(600s)` 无法 poll。核心变更: - `story_repo.create()` 改用 `tokio::task::spawn_blocking` 异步化 - `ConceptGenerationStep` / `FirstChapterGenerationStep` / `smart_execute` 关键路径添加 `log::warn!` 诊断日志 - 新增 `scripts/test_trishot_e2e.py` E2E 集成测试,用真实 LLM 模拟完整 Call 1-3 - E2E 验证:Gemma4-e2b 真实模型 **73.2s 完成,2270 字符,1852 中文字,全部检查通过** - 验证:`cargo test --lib` **551 passed / 0 failed / 2 ignored**;`cargo +nightly fmt --check` 通过 - **v0.23.15 TriShot 管线 4 处缺陷修复** (2026-06-22) — 审查 `execute_trishot` Call 1-3 全路径发现 P0/P1/P2 共 4 处缺陷。核心变更: - **P0**: `execute_trishot` 预检用 `QuickPreflightChecker` 不触发 auto-fill,Genesis 新故事必然失败。修复:预检失败时调 `AutoContractBuilder::auto_fill` 补齐角色后重试 - **P1**: 前端 `novel_bootstrap_background_started` 消息导致第一章正文被当幽灵文本。修复:改名 `novel_bootstrap_first_chapter_ready` - **P2**: Call 1 预算守卫 `t_synth` 刚创建 `elapsed≈0` 永远不触发;Call 2 硬编码 `total_budget=180`;Call 3 无超时覆盖可跑满 300s。修复:用 `total_start` 计算已耗时间、读配置 budget、Call 3 超时 30-120s + 空内容检查 - 移除 `strategy_selection_step()` 死代码 - 验证:`cargo test --lib` **551 passed / 0 failed / 2 ignored** - **v0.23.14 干净健康的模型池 + 两阶段 Genesis** (2026-06-22) — 建设干净的模型池并重构 Genesis 为快速阶段(30-60s 返回正文)+ 后台阶段。核心变更: - **模型池净化 L1-L4**:启动归零清除历史 `llm_calls` + 过滤 `HealthRegistry` 残留;删除/更新模型级联清理;拒绝 disabled 设为活跃;清理硬编码死模型 IP;健康报告数据源从历史表切换为实时探测快照 - **Genesis 两阶段**:`quick_phase_steps()` = 概念 + 第一章(TriShot 模式);`background_steps()` = 策略选择 + 世界观/大纲/角色等 - `FirstChapterGenerationStep`: `Full` → `TriShot` 模式(270s → 30-60s) - 验证:`cargo test --lib` **551 passed / 0 failed / 2 ignored** - **v0.23.13 强制所有生成路径使用活跃模型** (2026-06-22) — 彻底解决”当前模型是 A,实际调用 B”导致的 600 秒超时。核心变更: - `LlmService::select_profile_for_request` 无条件优先返回用户设置的 `active_llm_profile` - `GatewayExecutor::select_candidates` 将健康活跃模型强制置顶为 primary,避免被三维打分/算力档案绕开 - `GatewayExecutor::select_fastest_profile` 只要活跃模型健康(Healthy/Degraded)就优先使用,不再受 TTFB 阈值限制 - Genesis 故事概念、TriShot Call 1/Call 3、普通路由生成全部走活跃模型 - `create_model` 保存后即时刷新网关注册表并执行健康探测,新模型立即进入可用池 - 验证:`cargo test --lib` **540 passed / 0 failed / 2 ignored**;`cargo +nightly fmt --check` 通过;`npx tsc --noEmit` 零错误;`npm run format:check` 零差异 - **v0.23.12 彻底修复长超时:活跃模型优先 + 智能创作流程日志** (2026-06-22) — 根因是模型网关连接了非当前设置的模型,导致实际调用的模型挂起/不可用。核心变更: - `GatewayExecutor::generate` 把用户当前设置的活跃模型强制提升到候选链首位 - `select_fastest_profile` 在活跃模型无算力档案时也优先使用活跃模型 - 新增 `WorkflowLogger`,记录 TriShot 每个阶段、LLM 调用起止、模型网关候选链等,写入 `logs/creative_workflow.log` - 诊断卡片新增工作流日志路径与最近日志 - 验证:`cargo test --lib` **540 passed / 0 failed / 2 ignored**;`npx tsc --noEmit` 零错误;`npm run format:check` 零差异 - **v0.23.11 诊断提示词过滤探测/静默调用** (2026-06-22) — 修复诊断卡片里“最后发给模型的提示词”被 `model_gateway_probe` 的 `Respond with exactly the word OK.` 覆盖的问题。核心变更: - `LlmService::execute_generation` 仅在非静默/非探测调用时更新 `DiagnosticStore` 和 `llm-prompt-sent` 事件 - 过滤范围:probe、input_hint、intent_detection、后台审计/洞察、tri-shot-router/refiner、bg-auto-rewriter、bg-ingest - 验证:`cargo test --lib` **540 passed / 0 failed / 2 ignored**;`npx tsc --noEmit` 零错误;`npm run format:check` 零差异 - **v0.23.10 模型网关优先使用当前活跃模型** (2026-06-22) — 修复“AI 连接了以前的模型 ID,没有连接当前设置的模型”的问题。核心变更: - `select_fastest_profile` 在选最快模型前先读取当前 `active profile`;若活跃模型健康且 TTFB 不比最快模型差太多,优先使用活跃模型 - `select_candidates` 保证活跃模型始终出现在候选链中,避免路由结果完全脱离用户预期 - 验证:`cargo test --lib` **540 passed / 0 failed / 2 ignored**;`npx tsc --noEmit` 零错误;`npm run format:check` 零差异 - **v0.23.9 运行时创作资产能力清单 + TriShot 路由增强** (2026-06-22) — 解决“组合提示词不顺利”的根因:Call 1 原本只能看到当前故事约束,看不到系统级创作资产。核心变更: - 新增 `AssetCapabilityManifest` Tauri State,启动时自动生成全部系统资产(methodology、genre_profile、skill、beat_card、story_engine、pressure_relationship 等)的紧凑目录 - `PromptSynthesizer` Call 1 prompt 注入【系统可用创作资产目录】,让模型知道可调用的资产 - TriShot Call 3 通过 `generate_for_task_with_tags` 把 Call 1 选中的资产透传给 `ModelGateway` - `ModelGateway` dispatcher 识别更多创作资产标签并归类为 `HeavyCreation` - 修复 TriShot `request_id` 被错误赋值为模型名、Call 1 无预算守卫的问题 - 验证:`cargo test --lib` **540 passed / 0 failed / 2 ignored**;`npx tsc --noEmit` 零错误;`npm run format:check` 零差异 - **v0.23.8 AI 进度指示精细化 + 提示词诊断可靠性提升** (2026-06-22) — 让 LLM 生成过程可见:连接模型 ID/提供商、组合提示词规模、等待回应、模型回应 token 数、解析结果。核心变更: - `LlmGeneratingProgress` 新增 `model_id`、`provider`、`prompt_chars`、`prompt_tokens`、`response_tokens` - 心跳文案从“构思故事”改为具体阶段描述,并实时显示模型 ID 与提示词规模 - 新增 `diagnostics::DiagnosticStore` Tauri State 与 `get_last_llm_prompt` 命令,避免大提示词事件丢失导致诊断卡片“未捕获” - 验证:`cargo test --lib` **538 passed / 0 failed / 2 ignored**;`npx tsc --noEmit` 零错误;`npm run format:check` 零差异 - **v0.23.7 诊断信息增强 + 超时文案去硬编码** (2026-06-22) — 修复诊断卡片版本号仍显示 `0.16.0`、超时文案硬编码 200/180 的问题,并补充 AI 生成模式、当前模型、最后发给 LLM 的提示词全文。核心变更: - `src-frontend/src/main.tsx` / `src/frontstage/main.tsx` 从 `package.json` 动态注入 `__STORYFORGE_VERSION__` - `FrontstageApp.tsx` 的 `handleRequestGeneration` / `handleSmartGeneration` 从 `settings` 读取实际超时时长 - 诊断卡片新增 `AI生成模式`、`当前模型ID/名称/提供商/端点`、`最后调用模型`、`最后发给模型的提示词` - 后端 `LlmService` 调用模型前发射 `llm-prompt-sent` 事件,前端监听并缓存最后一次 prompt - 验证:`cargo check` 零错误;`npx tsc --noEmit` 零错误;`npm run format:check` 零差异 - **v0.23.6 修复 macOS 启动崩溃(VectorStore State 初始化顺序)** (2026-06-22) — 修复启动时 `state() called before manage() for Arc` panic 导致的 macOS 崩溃。核心变更: - 将 `LanceVectorStore` 的创建与 `app.manage(vector_store)` 提前到 `init_task_system_and_automation` 之前 - 仅调整 State 注入时序,异步 `init()` 保留在原地 - 验证:`cargo test --lib` **538 passed / 0 failed / 2 ignored**;`npm run format:check` / `npm run type-check` 通过;`python3 scripts/architecture_guard.py` 通过 - **v0.23.5 CI 格式化修复** (2026-06-21) — 修复 Rust nightly `cargo fmt` 格式化差异(import 顺序、函数参数折行、单行化)与前端 Prettier 差异(`GeneralSettings.tsx` 类型断言单行化)。无业务逻辑变更,仅代码风格修复,使 GitHub Actions `rust-check` / `frontend-check` 通过。 - **v0.23.4 智能层闭环落地** (2026-06-21) — TriShot 管线与架构债务清偿后,补齐智能创作层最后一环。核心变更: - LLM JSON mode:`llm::adapter::ResponseFormat::JsonObject`,OpenAI/Ollama 适配器原生结构化输出,`GatewayRequest` 透传 `response_format` - Review/Refine Pipeline 调用 JSON mode 并解析 `refinement_notes` - `MemoryBudget::for_task_type` 强类型化预算参数(`MemoryTaskType { Write, Plan, Review }`) - 拆书存储统一:删除 `reference_characters` / `reference_scenes`,数据汇入 `narrative_*` 表;迁移 `V100__拆书存储统一_删除_reference_表.sql` - 验证:`cargo test --lib` **538 passed / 0 failed / 2 ignored**;`python3 scripts/architecture_guard.py` 通过 - **v0.23.3 测试基线修复 + 工程化(48 个 V092 失败清零)** (2026-06-21) — 修复迁移框架 bug 与 narrative 表 schema 不匹配,让 `cargo test --lib` 首次全绿。核心变更: - **MigrationRunner 交错执行**:`run_with_legacy` 改为按版本将 SQL 文件 migration 与 inline Rust migration 交错执行,避免高版本 SQL 文件跳过低版本 inline migrations;新增 `MAX_INLINE_MIGRATION_VERSION` 约束与注释 - **SING migration 版本上调**:`V095__意图图_SING_数据层.sql` → `V099__...`,确保其跑在所有 inline migrations 之后 - **`narrative_*` 表补 status 列**:`narrative_characters` / `narrative_scenes` / `narrative_world_buildings` 加入 `status TEXT NOT NULL DEFAULT 'active'`,并新增 inline Migration 98 为已存在表补列 - **ElementSource/ElementStatus round-trip 修复**:`domain/narrative_elements.rs` 新增 `as_str()` / `from_str()`(snake_case 英文);`db/repositories_narrative.rs` 存储与解析统一使用英文键,新增 3 个 repository round-trip 测试 - **验证**:`cargo check` 零错误;`cargo test --lib` **538 passed / 0 failed / 2 ignored**(新增 3 个测试,零回归);`npx tsc --noEmit` 零错误;`python3 scripts/architecture_guard.py` 通过 - **v0.23.2 事件总线与状态同步治理** (2026-06-21) — 在 v0.23.1 架构清理基础上,补齐后端提交事件流并收敛前端编辑器状态源。核心变更: - **后端 `SyncEvent::ChapterCommitted`**:`state_sync/events.rs` 新增 `ChapterCommitted` 变体,携带 `projection_status`;`SceneCommitService::apply_commit` 在 projections 完成后统一发射,替代零散的 `dataRefresh("knowledgeGraph")` - **前端 `content/isSaved` 迁移到 `frontstageStore`**:`FrontstageApp.tsx` 移除本地 `useState(content/isSaved)`,改为 `useFrontstageStore` 读写;保留 `isSaved` + editor focus 双重保护,后台同步事件不会覆盖未保存编辑内容 - **清理遗留事件/hack**:删除所有 `backstage-data-refreshed` 废弃注释,更新 `CONTEXT.md` 数据刷新说明;`useWebViewRedrawFix` 改为 `FIXME` 标记,待真实场景验证后再移除 - **验证**:`cargo check` 零错误;`cargo test --lib` 487 passed / 48 failed(新增 1 个序列化测试,基线一致,零新回归);`npx tsc --noEmit` 零错误;`npx vitest run` 126 passed / 3 skipped - **v0.23.1 架构债务清偿:全局单例治理 + 模块依赖解耦** (2026-06-21) — 为 TriShot 之后的长期可维护性清理架构底层,零业务行为变更。核心变更: - **全局单例清零**:彻底移除 14 个全局 `static`/缓存(`VECTOR_STORE` / `DB_POOL` / `LLM_SERVICE` / `APP_CONFIG` / `SKILL_MANAGER` / `CHAPTER_COMMIT_DEBOUNCE` / `PENDING_VECTOR_INDEXES` / `WRITER_*` 缓存 / `APP_CONFIG_CACHE` 等),全部改为 Tauri State 注入或每次调用重新加载 - **domain 领域层扩展**:新增 `agent_context` / `agent_types` / `foreshadowing` / `search` / `write_time_bundle` / `asset_snapshot` / `continuity` / `adaptive` / `prompt_synthesis` / `agent_service` / `creative_engine` 等共享类型与端口,统一跨模块数据契约 - **模块循环依赖斩断**:`memory → agents`、`narrative → memory`、`narrative → creative_engine` 数据类型下沉到 `domain`;`agents ↔ creative_engine` 行为依赖通过 `CreativeEnginePort` / `AgentServicePort` 双向反转,彻底消除循环导入 - **架构守卫收紧**:`scripts/architecture_guard.py` 的 `KNOWN_VIOLATIONS` 清空,`architecture_guard.py` 报告 **0 known violations / 14 enforced global singletons removed** - **验证**:`cargo check` 零错误;`cargo test --lib` 486 passed / 48 failed(与 TriShot 基线一致,零新回归) - **v0.23.0 TriShot 三击生成管线** (2026-06-21) — 全面实施「最多 3 次 LLM」三击生成架构。核心变更: - **TriShot 三击管线**:新增 `GenerationMode::TriShot` 模式,Call 1 用最快模型选资产+合成提示词 → Call 2(可选) 精修 → Call 3 Writer 生成。关键路径最多 3 次 LLM,质检/改写/入库/洞察全部下沉后台静默执行 - **prompt_synthesis 模块**:`manifest.rs` 资产清单(4000 字符预算)+ `synthesizer.rs` 路由合成器(最快模型选资产+合成)+ `refiner.rs` 精修器(可选,预算守卫) - **最快模型选取**:`GatewayExecutor::select_fastest_profile()` 按 CapabilityProfile TTFB 升序选最快可用模型 + `LlmService::generate_with_fastest()` - **PlanExecutor 快速路径**:TriShot 跳过 SING/PlanGenerator(Call 1 替代),`PlanStep::long_running` 跳过 90s 步超时 - **后台 agent 体系**:BGP-1 质检(复用 AuditExecutor)→ BGP-2 自动改写器(新 `auto_rewrite_executor.rs`,分严重度)→ BGP-3 入库(补 smart_execute 缺口)→ BGP-4 洞察(复用 InsightExecutor) - **SyncEvent 扩展**:`ContentAutoRevised`(HIGH 自动改写通知,可撤销)+ `RevisionSuggested`(LOW 建议审阅面板) - **配置**:`AppConfig.generation_mode` 新增 `"tri_shot"` + `auto_rewrite_severity_threshold`;前端设置下拉新增「三击模式」 - **验证**:`cargo check` 零错误;`cargo test --lib` 486 passed(新增 TriShot 相关 19 测试全部通过,零回归);`npx tsc --noEmit` 零错误 - **v0.22.4 「异星球末世生存」智能创作流程优化** (2026-06-21) — 针对复合题材(如「异星球末世生存」)解析断链、意图图资产发现不足、模型网关调度未感知资产标签、TimeSliced 默认续写路径缺失次要题材画像等问题,进行系统性补强: - **GenreResolver 题材解析服务**:新增 `strategy/genre_resolver.rs`,支持精确/别名/子串/同义词/复合题材解析;将「异星球末世生存」解析为末世+科幻/星际机甲等多画像 - **StrategySelector 链路改造**:`exact_genre_match`、`build_selected_strategy`、`story_concept_prompt` 均接入 GenreResolver,LLM 输出标准化 `genre_profile_ids` - **意图图资产发现增强**:`AssetNode` 支持 tags;资产同步注入标签;`IntentionGraphPlanner::discover_assets` 用 GenreResolver 补充复合题材相关 `genre_profile` - **模型网关资产感知调度**:`GatewayRequest` 新增 `asset_tags`/`discovered_asset_ids`,`TaskClassifier` 按标签校准任务类别,`GatewayExecutor` 按标签重叠加分 - **TimeSliced 续写复合题材补强**:`WriteTimeBundle` 新增 `secondary_genre_profile_strategy`,复合题材时把次要题材画像摘要注入默认续写 prompt - **验证**:新增 targeted tests 全部通过(genre 5/5、selector 6/6、write_time_bundle 13/13、dispatcher 5/5、intention_graph 19/19 passed,2 ignored);`cargo check` 零错误;`npx tsc --noEmit` 零错误 - **v0.22.3 钥匙串彻底移除 + 模型健康报告自动刷新 + 配置加载优化** (2026-06-21) — 根据用户反馈实施 3 项关键改进: - **钥匙串彻底移除**:删除 `keyring` crate、`secure_storage` 模块、`store_api_keys_securely` 配置项;API Key 直接存 SQLite;移除 `load()/save()` 中全部钥匙串读写逻辑(共~260 行),启动/操作时不再弹出 macOS 钥匙串密码提示 - **模型健康报告自动刷新**:前端 `refetchInterval: 30_000` 每 30 秒自动刷新;后端改为 async 命令不阻塞 IPC - **冗余 load 消除**:`execute_writer` 2→1 次、`FirstChapterGenerationStep` 3→1 次、`book_deconstruction` 死代码移除 - **验证**:`cargo check` 零错误,`cargo test --lib` 425 passed,`npx tsc --noEmit` 零错误 — 根据测试反馈实施 4 条建设性意见。关键变更: - **GenreProfile 推荐种子**:`seed_genre_recommendations()` 为末世/科幻/修仙/都市/悬疑/历史 6 个题材写入推荐风格+方法论+技能映射 - **策略选择器硬约束**:`build_selected_strategy` 中体裁画像有推荐时跳过 LLM 直接使用 - **算力档案默认值修正**:capability_score 未测试时默认 0.0(避免虚假质量分基准) - **v0.22.1 提示词与后台资产深度结合** (2026-06-21) — 根据测试报告实施 5 条建设性意见。关键变更: - **StrategySelector 题材推荐映射**:`get_genre_recommendations()` 覆盖末世→余华等 7 种题材→风格推荐 - **StyleDNA 句长偏差检测**:`execute_time_sliced` 生成后检测句长偏差,>30% 记录建议 - **Inspector 方法论动态 prompt**:按 methodology_id 选择 prompt(5 种方法论全覆盖) - **GenreProfile 推荐字段**:4 新列 + Migration 96 + Repository SQL 更新 - **v0.22.0 提示词与后台资产完整结合** (2026-06-21) — 修复 5 个系统性缺口:TimeSliced 全资产注入 / Inspector 全资产注入 / 意图感知调度接线 / 算力档案消费闭环 / 资产→生成参数规则映射。关键变更: - **Phase A**: WriteTimeBundle 新增 4 字段,`to_prompt()` 追加 4 个 section - **Phase B**: `build_inspector_prompt` 追加题材画像/方法论/角色状态/冲突/四元组 - **Phase C**: `generate_for_request_with_request_id` 新增 intent 参数,agent_type 自动推导意图 - **Phase D**: `select_candidates` 加载 CapabilityProfile 参与候选排序 - **Phase E**: 新增 `asset_params.rs` —— StyleDNA→temperature / methodology→max_tokens / genre→max_tokens - **验证**:cargo check 零错误,真实模型 6/6 通过,tsc 零错误 - **v0.21.0 提示词全量可配置化:从"聊胜于无"到"全面可控"** (2026-06-21) — 审计发现现有"提示词覆盖"仅覆盖 14 个 key,15 个假接入(走 resolve_prompt_default 旁路 DB),40+ 个活跃硬编码提示词完全旁路 registry。全面修复后所有提示词均可在后台设置页面查看、编辑、保存。关键变更: - **Phase 1 registry 扩展**:新增 6 个 PromptCategory,注册 ~50 个新提示词条目,新增 resolve_prompt_with_vars - **Phase 2 假接入修复**:snowflake 10 个 + multi_agent 5 个 key 改为 resolve_prompt(含 DB 覆盖) - **Phase 3 旁路接线**:40+ 个硬编码提示词全部接入 registry(narrative/pipeline/planner/agents/memory/audit/strategy/deconstruction/methodology/intention_graph) - **Phase 5 前端升级**:PromptsPanel 编辑器升级为 Monaco,新增批量导出/导入 - **验证**:cargo check 零错误,intention_graph 18/18 通过,真实模型测试通过,tsc 零错误 - **v0.20.1 SING 意图图集成审计修复:5 处致命断环 + 理论对齐** (2026-06-21) — 对 v0.20.0 SING 集成进行深度审计后发现 5 处致命断环导致意图图路径运行时从未生效(静默回退到 PlanGenerator),系统性修复全部问题。关键变更: - **P0-1 资产同步接通**:`lib.rs` setup 阶段调用 `AssetSyncEngine::full_initialize` + `warm_up_cache`,将 CapabilityRegistry/SelectableAsset/Agent/系统命令同步到意图图表;IntentionGraphRepository 注册为 Tauri state 供共享缓存 - **P0-2 模型网关意图感知生效**:`GatewayRequest` 新增 `intent_verb`/`intent_object` 可选字段,`classify_task` 优先使用 `classify_by_intention` 进行意图感知分类 - **P0-3 执行图持久化**:`execute_with_react` 接受 `invoke_fn` 回调实现真实步骤执行(替代硬编码假输出),执行图 + 执行节点持久化到数据库供诊断面板查询;`record_execution_graph` 在意图图计划生成成功后调用 - **P0-5 LLM 意图合成**:`IntentSynthesisPipeline::synthesize_query` 新增 LLM 增强版(JSON 结构化输出提取动词-宾语),失败时优雅降级到规则匹配 - **P1-1 评分权重对齐论文**:`discover_tool_level` 从 0.3/0.4/0.2/0.1 改为论文 λ=1 等权(desc + intent + ppr) - **P1-2 PPR 图传播生效**:`discover_server_level` 从一跳邻域冒充改为真正调用 `GraphScorer::ppr_propagate`,构建异构图邻接表从根意图种子节点传播 - **P1-4 语义嵌入生成**:AssetSyncEngine 为所有节点(资产/意图)调用 `embed_text` 生成语义嵌入,使描述匹配走余弦相似度而非 Jaccard 词重叠 - **验证**:`cargo check` 零错误,`cargo test --lib intention_graph` 16/16 通过,`npx tsc --noEmit` 零错误 - **v0.20.0 SING 意图图集成:动态 ReAct + 分层发现** (2026-06-21) — 全面集成 arXiv:2606.16591v2 论文的意图-工具异构图理论,实现从"关键词匹配"到"意图驱动"的智能创作调度范式升级。关键变更: - **新模块 `intention_graph/`**(11 文件):`models.rs` 核心数据结构 + `graph.rs` SQLite+内存混合存储 + `builder.rs` 离线意图合成 + `discovery.rs` 分层发现 + `reactor.rs` 动态 ReAct + `planner.rs` 包装 PlanGenerator + `commands.rs` IPC 诊断命令 - **Migration 95**:6 张新表(intention_nodes / asset_nodes / intention_asset_edges / asset_asset_edges / execution_graphs / execution_nodes) - **PlanExecutor 四级回退**:模板匹配 → IntentionGraphPlanner → PlanGenerator → 直接 Writer,零回归风险 - **模型网关意图感知**:`classify_by_intention()` 将 SING 意图动词映射到 TaskClass(LightTool/BalancedWork/HeavyCreation) - **前端诊断面板**:`IntentionGraphDiagnostics.tsx` —— 统计卡片 + 最近执行记录 + 执行图详情钻取,侧边栏新增「意图图」入口 - **验证**:`cargo check` 零错误,`cargo test --lib intention_graph` 16/16 通过,`npx tsc --noEmit` 零错误 - **v0.19.0 提示词全面可配置化:70+ 硬编码提示词注册表 + 前端完整覆盖** (2026-06-18) — 彻底消灭所有硬编码提示词,全部纳入统一注册表。关键变更: - **注册表扩展**:`prompts/registry.rs` 从 8 个内置 prompt 扩展至 35+,覆盖 15 个分类(Writer / Inspector / Commentator / Planner / Analyzer / Probe / System / Memory / Knowledge / Skill / Methodology / World / Character / Narrative / Other) - **雪花法 10 步注入**:`methodology_snowflake_step1` ~ `step10` 全部进入注册表,`prompt_instruction()` 优先查注册表、回退硬编码 - **技能提示词映射**:`skill_id_to_prompt_id()` 将 5 个内置技能(style_enhancer / plot_twist / text_formatter / character_voice / emotion_pacing)映射到注册表 prompt ID,执行时动态读取覆盖 - **Memory / Knowledge / MultiAgent 接入**:`extract_narrative_events`、`build_knowledge_graph_prompt`、`multi_agent` 等模块全部改用 `resolve_prompt()` - **前端 PromptsPanel 重写**:15 分类折叠面板 + 实时搜索 + 分类筛选 + 批量重置 + 默认内容预览 + 模板变量标签高亮 - **GeneralSettings 精简**:移除旧版 2 个 textarea 覆盖,改为「提示词注册表」链接卡片 - **新增 IPC**:`reset_all_prompt_overrides` 一键恢复全部默认 - **验证**:`cargo check` 零错误,`cargo test --lib` 392/392 通过,`npx tsc --noEmit` 零错误,`vitest run` 126/126 通过 - **v0.18.1 设置超时修复:数字输入体验 + 配置读取路径** (2026-06-20) — 修复两个关键问题: - **前端数字输入过快保存**:后台设置「超时设置」数字输入框从 `onChange` + 300ms 防抖改为本地 state + `onBlur` 保存,用户输入多位数字时不再中途弹出「设置已保存」 - **后端超时配置不生效**:修复 3 处 `AppConfig::load` 错误使用 `std::env::current_dir()` 而非 `app_handle.path().app_data_dir()` 的问题(`smart_execute` 总超时、`executor_step_timeout` 单步超时、`model_gateway` 探测提示词),用户设置的 600 秒总超时现在真正生效 - **验证**:`cargo check` 零错误,`cargo test --lib` 444/444 通过,`npx tsc --noEmit` 零错误,`vitest run` 126/126 通过 - **v0.18.0 后台资产深度审计 × 智能创作流程全面优化** (2026-06-20) — 对后台资产与智能创作流程的关联进行全面深度审计,发现核心矛盾:默认续写路径(TimeSliced)绕过约 90% 后台资产。系统性修复 P0-P3 共 14 项: - **P0 断环修复**:ingest→伏笔自动追踪闭环(`persist_foreshadowings`)、character_states 写入闭环(`persist_character_states`)、内置 MCP 自动注册进 CapabilityRegistry、四元组资产完整 payload 展开 - **P1 核心优化**:TimeSliced 接入精选资产子集(叙事阶段+伏笔+风格摘要+四元组,解决"资产黑洞")、接通 3 个休眠技能(character_voice/plot_twist/text_formatter 场景智能触发)、Full Inspector 接入全量上下文、审计触发自动 Rewrite 建议(`AuditRewriteSuggested` SyncEvent) - **P2 死代码清理**:删除 `prompts/methodologies/`、`evolution/`、`state/`、`PromptManager`、`PromptEvolver`;评点家改用 registry 模板;Migration 94 删除 beat_cards/story_engines/pressure_relationships 死表 - **P3 架构优化**:Pro/Free 精细化分层(单 StyleDNA+写作风格+作品简介移出 is_pro)、按 genre 自动匹配 GenreProfile、新建 `CreativeAssetSnapshot` 统一资产注入网关 - **CI 修复**:删除重复的 V092/V093 SQL 迁移文件(修复 48 个测试失败) - **文档**:新增审计报告 `docs/AUDIT_后台资产与智能创作流程.md` + 参考文档 `docs/CREATION_FLOW_AND_ASSETS_REFERENCE.md` - **验证**:`cargo check` 零错误,`cargo test --lib` 444/444 通过,`npx tsc --noEmit` 零错误,`cargo +nightly fmt -- --check` 通过 - **v0.17.1 提示词注册表 + 两个紧急 Bug 修复 + 智能后台预访谈 + Anti-AI 闸骨架 + 在世作者保护** (2026-06-19) — 一个综合性版本: - **🔴 Bug 1 修复:超时设置保存失败 undefined**:`AppSettingsData` 长期缺失 v0.16.0 引入的 13 个高级字段(frontend_timeout_secs / executor_step_timeout_secs / smart_execute_total_timeout_secs / llm_connect_timeout_secs / llm_first_chunk_timeout_secs / style_weight / narrative_weight / skip_rewrite_threshold / keep_revision_history / context_budget_ratio / generation_mode / writer_system_prompt_override / probe_prompt_override),任何尝试调整超时数字都触发 IPC 反序列化失败。修复:后端补全字段 + 全部 `#[serde(default)]` + 前端 `SettingsContext` mutationFn 读取 query 缓存合并 patch 后下发完整对象。 - **🔴 Bug 2 修复:模型健康报告不可用**:`ModelHealthReport` 新增 `total_calls` / `last_called_at` / `generated_at`;前端 `useModelHealthReports` 关掉缓存(`staleTime: 0` / `gcTime: 0` / `refetchOnMount: 'always'`);ModelHealthPanel 头部显示「数据更新于 X」+ 每个模型的「近期调用次数 / 最近一次调用」,让数据新鲜度可见。 - **🟡 提示词注册表(核心新增)**:把分散在 `prompts/engine.rs` / `llm/prompt.rs` / `task_system/audit_executor.rs` 的硬编码 prompt 全部抽取到统一注册表。关键: - **Migration 93** `prompt_overrides` 表(prompt_id PK + overridden_content + updated_at) - **`prompts/registry.rs`**:8 个内置 prompt(writer_system / writer_continue / writer_rewrite / inspector_system / style_checker_system / outline_planner / commentator_system / model_gateway_probe),分 6 类(写作核心 / 审校与质量 / 评点 / 规划 / 分析 / 探测) - **IPC 命令**:`list_prompt_entries` / `save_prompt_override` / `reset_prompt_override` / `resolve_prompt_content` - **前端 PromptsPanel**:Settings 新增「提示词」标签页,按分类折叠分组,每条 prompt 可展开编辑,显示已覆盖 / 未保存状态徽章 + 模板变量列表 + 保存覆盖 / 恢复默认按钮 - **运行时接入**:`AgentService::resolve_prompt(id)` 优先查 DB override,否则回退默认;Writer / Inspector / OutlinePlanner / Model Gateway 探测全部经 registry 读取 - **InputClarity 三档判定**:`intent.rs` 新增 `detect_input_clarity()` 启发式(Vague / WithSeed / WithFullConcept),不调 LLM,用字符长度 + 故事元素信号词(角色 / 动作 / 冲突 / 场景 / 关系 / 目标 6 类,约 45 个词)轻量分类。 - **NarrativeQuartet 透明推断**:新建 `strategy/quartet_inference.rs` —— 当输入处于 Vague/WithSeed 时,后端透明补全 5 元组(emotional_payoff / pressure_relationship / conflict_arena / story_engine / beat_card),不弹卡片,全部走默认 + GenreProfile.reader_promise。 - **Writer Prompt 注入**:`PlanExecutor::execute_writer` 把序列化后的四元组写入 `task.parameters["narrative_quartet"]`;`build_writer_prompt` 在最终组装阶段调用 `render_narrative_quartet_section()` 追加中文渲染段。 - **Anti-AI cliché 词表 +7**:`anti_ai/mod.rs::ai_cliches` 新增 关键在于 / 值得注意的是 / 综上所述 / 让我们 / 在某种程度上 / 与此同时 / 这一切的背后。 - **AntiAiRewriter 骨架**:`anti_ai/rewriter.rs`(新文件)—— `RewriteStrategy`(LocalReplace / ParagraphRewrite / ChapterRewrite)+ `AntiAiRewriter::should_trigger`(overall_score < 60 或任一 high severity)+ `rewrite()` 异步入口(v0.17.1 直接返回原文,v0.17.2 接 LLM)+ 4 个单测。 - **OpeningClarityGate 骨架**:`audit/opening_clarity.rs`(新文件)—— 6 要素门(Danger / Humiliation / Loss / Puzzle / PhysicalAnchor / GenreSignal),按前 200 字检查;`signal_for_genre()` 为 5 种主流题材(赘婿 / 修真 / 末世 / 悬疑 / 校园)提供差异化检测词;5 个单测。 - **AuditExecutor 7→11 维**:`task_system/audit_executor.rs` prompt 扩 4 维(desire / payoff / aftertaste / opening_clarity),`dimension_priority` / `dimension_label` 同步更新,2 个新单测。 - **LivingAuthorGuard**:`creative_engine/style/living_author_guard.rs`(新文件)—— 在世作者黑名单 41 位(中文 26 + 外文 15),命中即替换为「具备相同手工艺特征的写作风格」+ 自动追加「手工艺滑块」段(5 维 × 3 档:句长偏好 / 对话比例 / 比喻密度 / 内心独白比例 / 视角粘度);`build_writer_prompt` 在最终组装后调用 `sanitize_style_brief()` 自动清洗;6 个单测。 - **不接入生产的骨架模块**:rewriter.rs / opening_clarity.rs 仅做接口预定义和轻量启发式实现,主创作流程暂未引用,预留 v0.17.2 接入。 - **遗留诊断**:用户报告「写第二章」200s 假超时(plan-executor-step inspector 事件 + heartbeat elapsed=0)已定位为前后端超时间隔过窄(200s vs 180s)+ 计划步骤超时不受 smart_execute outer timeout 进度保护,转交 v0.17.2 集中修复。 - **验证**:`cargo check` 零错误(33 warnings 全为既有),`cargo test --lib` 396 passed / 48 failed(48 为 v0.17.0 起的 V092 测试 DB 基线问题,零新回归),新增 28 个单测全部通过(含 5 个提示词注册表单测)。 - **v0.17.0 中文叙事增强:桥段卡 / 剧情引擎 / 高压关系 / 读者承诺四件套** (2026-06-19) — 引入业界共识级的四类中文叙事创作资产,与既有的方法论 / 体裁画像 / Style DNA 三轴互补: - **31 张经典桥段卡**:`creative_engine/beat_cards/`(mod.rs + registry.rs),分 7 大类——跌落与回归 / 公开证明与打脸 / 身份与识别 / 悬疑与真相重构 / 情感拉扯 / 制度与规则压力 / 后台视角与组织讽刺。每张卡含可复用功能 / 何时使用 / 重构提示 / 反例 / 标签五要素,全部使用通用化中文,不绑定特定作品。 - **21 种剧情引擎**:`creative_engine/story_engines/mod.rs`,正交叙事动力库可组合 2-4 个。每种引擎含核心 payoff / 最佳收束 / 反例 / 适合搭配。 - **13 种高压关系**:`creative_engine/pressure_relationships/mod.rs`,冲突放大器(真假继承人 / 师徒宗门 / 后台执行者与台前英雄 等)。 - **体裁读者承诺**:`creative_engine/reader_promise.rs` + Migration 92 `genre_profiles.reader_promise` 字段,9 种基础情绪(爽 / 甜 / 虐 / 恨 / 惊 / 燃 / 怕 / 痛 / 治愈)+ 衍生爽点。43 个内置体裁全部映射,启动期回填,已设置值不会被覆盖。 - **架构升级**:`AssetKind` +3 变体(BeatCard / StoryEngine / PressureRelationship);`SelectedStrategy` +5 字段(emotional_payoff / pressure_relationship_id / conflict_arena / story_engine_ids / beat_card_ids);`StrategyOverrides` 同步扩展支持 UI 锁定;`strategy/asset_catalog.rs` 新增 3 个工厂函数自动并入资产路由。 - **下一步迭代**:v0.17.1(智能后台预访谈 LLM prompt 扩四元组)/ v0.17.2(反 AI 味自动改写闸 + 开篇清晰度门 + 11 维质量门)/ v0.17.3(在世作家风格信号翻译)。 - **验证**:`cargo check` 零错误,`cargo test --lib` 357 passed(基线 344 + 新增 13)零回归,`npx tsc --noEmit` 零错误。 - **v0.16.2 修复后台审计(AuditExecutor)LLM 调用误导前端假超时** (2026-06-18) — 用户输入"写第二章"后诊断卡弹出"最终输出 / async-audit-inspector 完成":TimeSliced 模式正文生成后 spawn 的 `AuditExecutor` 未列入 silent 白名单,其 `emit_llm_progress` 覆盖了主流程的 "已完成" 事件,让前端误以为主流程仍在跑,最终 200s 假超时。关键变更: - **后端扩展 silent_background**:`async-audit-inspector` / `async-insight` / `async-deep-insight` / `background-summary` 纳入静默白名单,跳过 emit_llm_progress 与心跳 - **前端 mainGenerationCompletedRef**:`handleGenerationStatus` 在 phase="已完成"/"出错"/"已取消" 时置位,后续后台 events 不再重置 sinceLastEvent、不再触发 tick - **验证**:`cargo check` 通过,`cargo test --lib` 392/392 通过,`npx tsc --noEmit` 通过 - **v0.16.1 修复"距上次响应 80006 秒"计数 Bug** (2026-06-18) — `lastEventTimeRef` 初始化 `Date.now()` 若首事件延时较长,其与 `Date.now()` 的差值被解释为"距上次响应",产生天文数字。修复:`lastEventTimeRef` 初始为 null + tick null guard。 - **v0.16.0 智能创作参数全面可配置** (2026-06-18) — 所有超时/创作/提示词覆盖参数可从前端设置。GeneralSettings 新增 3 张卡片(创作参数/超时设置/提示词覆盖),AppConfig 扩展对应字段,AppSettings 接口同步更新。 - **v0.15.2 修复"已完成"事件在错误检测前发射** (2026-06-18) — `emit_progress("completed")` 移至成功路径末尾,仅在 `result.success == true` 且内容非空时发射。失败路径改发 "error"。 - **v0.15.1 生成阶段提示汉字化** (2026-06-18) — `GenerationPhase::as_str()` 返回中文(准备上下文/候选生成/内容审校/润色改写/最终输出/已完成),底部状态栏与诊断卡均以中文显示。 - **v0.15.0 模型网关智能调度器** (2026-06-17) — 新增 Capability Profile 系统(`model_capability_profile` 表 + CRUD),Streaming TTFB 基准测试(长+短),TaskClassifier(LightTool/BalancedWork/HeavyCreation),3D 智能评分路由(能力 50%+偏好 30%+拟合 20%),所有 LLM 调用统一经网关路由。 - **v0.14.4 修复"应用启动后自动进入生成进程"假象** (2026-06-18) — `model_gateway_probe` / `input_hint` / `intent_detection` 纳入 `is_silent_background`,跳过心跳与 emit_llm_progress;前端 `llm-generating-progress` 监听器添加 `isGenerating` 守卫。 - **v0.14.3 智能创作生成内容根因修复——场景智能路由** (2026-06-17) — 在 v0.14.2 超时防线之上深入查找根因,发现"准备上下文阶段长时间延时后退出"的真正症结:`smart_execute` 路径写死 `GenerationMode::Full`,导致每次续写需要 1 Writer + 2 Inspector + 2 Rewrite = 最多 5 次同步 LLM 调用,对本地 Qwen 累计 250-335 秒**必然超时**。`docs/plans/2026-06-14-time-sliced-intervention-design.md:456` 明确指定 `smart_execute` 默认 `TimeSliced`,但实施时只改了任务系统入口,**漏改了 `smart_execute` 实际走的 `PlanExecutor::execute_writer` 路径**。关键变更: - **场景智能路由**:`PlanExecutor::execute_writer` 根据场景动态选择模式——`selected_text` 非空(重写选中)→ Full(含质检),续写或新章首段 → TimeSliced(单次 LLM,30-60s) - **AppConfig.generation_mode**:新增配置字段,可选 `auto`/`time_sliced`/`fast`/`full`,前端 GeneralSettings 暴露下拉选择 - **优先级**:plan 参数 > AppConfig.generation_mode > 场景智能默认 - **超时优化**:`DEFAULT_LLM_TIMEOUT_SECONDS` 240→120,LlmProfile `max_tokens` 8192→2500 - **预期效果**:续写从"200-300s 必超时"变为"30-60s 稳定生成",智能创作功能从不可用变为可用 - **验证**:`cargo check` 零错误,`cargo test --lib` 392/392 通过,`npx tsc --noEmit` 零错误,`vitest run` 126/126 通过 - **v0.14.2 智能创作超时退出根因修复——多层超时防线** (2026-06-17) — 从根本上修复智能创作"准备上下文阶段长时间延时后退出且不弹诊断卡片"的系统性问题。经全面检视,根因是多层超时缺失:后端 `smart_execute` 无整体超时、LLM 生成超时按 chunk 刷新可无限挂起、Full 模式 270s 预算是死代码、准备上下文阶段同步 DB 阻塞 worker。关键变更: - **smart_execute 整体超时**:函数体提取为 `smart_execute_inner`,外层包裹 180s `tokio::time::timeout`,超时调用 `cancel_all_generations()` 取消所有 LLM 生成 - **PlanExecutor 单步超时**:`execute_step` 单步 90s 超时,超时记为 failed 但不中断后续批次 - **激活 Full 模式预算**:Inspector/Rewrite 受 `remaining_budget_secs()` 约束,剩余 <30s 跳过质检 - **LLM 首字节超时 + 绝对超时**:`read_body_with_generation_timeout` 首字节 min(240s, 60s),绝对上限 generation_timeout × 1.5,修复 vllm 半挂 - **spawn_blocking 包裹同步 DB**:`build_agent_context` 中 `CanonicalStateManager::get_snapshot`、`ForeshadowingTracker`、`StoryRepository`;Step 4 风格查询和 `build_selected_strategy` - **前端超时 330s→200s**:确保前端总在后端之后超时;超时调用 `llm_cancel_all_generations` 通知后端取消 - **useBackendActivityListener 状态保护**:`plan-executor-step` failed 状态保持 activity running,避免 invoke reject 前清空 isGenerating - **验证**:`cargo check` 零错误,`cargo test --lib` 392/392 通过,`npx tsc --noEmit` 零错误,`vitest run` 126 passed - **v0.14.1 后台设置即时更新重构** (2026-06-17) — 引入 `SettingsProvider` 统一后台设置状态层,消除本地 state 与 server state 的双向漂移。关键变更: - **统一状态层**:新增 `src/contexts/SettingsContext.tsx`/`settingsContextBase.ts`/`hooks/useSettingsContext.ts`,在 `main.tsx` 全局挂载; - **乐观更新与回滚**:所有设置写操作(保存通用设置、创建/更新/删除/激活模型、更新 Agent 映射)均内置 `onMutate` 乐观更新 + `onError` 回滚 + `onSettled` 统一失效; - **组件重构**:`GeneralSettings`、`MethodologySettings` 移除本地 `useState/useEffect`,直接绑定 TanStack Query 数据;`AgentConfig`、`UnifiedModelManager`、`ModelModal` 接入 Context; - **跨状态同步**:`useUpdateStory` 乐观更新同时刷新 query 缓存与 Zustand `currentStory`; - **统一失效范围**:设置 family 内 `settings`/`models`/`agent-mappings`/`model-health-reports` 一并失效,确保跨标签页/跨组件即时同步; - **验证**:`npx tsc --noEmit` 通过,修改文件 `eslint --max-warnings 0` 通过,`cargo +nightly fmt -- --check` 通过,`cargo check` 通过。 - **v0.13.3 诊断卡片安全网:修复「准备上下文」长时间延时后退出但未弹诊断卡片** (2026-06-17) — 根因:诊断卡片仅在 `catch` 块触发,但存在多条静默退出路径(成功路径中返回空内容 / `success: false`、状态流转异常等)。关键变更: - **防御性诊断**:在 `handleRequestGeneration` 与 `handleSmartGeneration` 的成功路径中,遇到 `final_content` 为空或 `success: false` 时立即调用 `captureDiagnosticInfo` 并弹诊断卡片; - **全局安全网**:新增 `smartExecuteNeedDiagnosticRef` 与 `lastGenerationCancelledRef`,监听 `isGenerating` 从 `true` 到 `false` 的转换,若本次生成曾启动且未被用户主动取消,则兜底弹出诊断卡片; - **修复响应判定**:`startElapsedTimer` 不再在启动时就将 `backendEverRespondedRef` 设为 `true`,仅在实际收到后端事件后才标记,提升诊断信息准确性; - **验证**:`cargo check` 通过,`cargo test --lib` 392/392 通过,`npx tsc --noEmit` 通过,`NODE_ENV=test npx vitest run` 126/126 通过。 - **v0.13.2 诊断卡片增强 + 前端自救计时器** (2026-06-17) — 根据首次诊断报告修复多个问题:版本号显示、已用时被意外清空、后端响应判定逻辑 bug;新增 `smartExecuteInFlightRef` 防止 activityStore 提前清空生成状态;`scheduleFallbackPrompt` 改为自我循环的前端自救计时器,即使后端心跳中断也能每 10s 更新已用时;后端心跳改为 `log::warn!` 级别输出,确认心跳是否运行;诊断提示去 Ollama 化,适配 vllm/Qwen 用户。验证:`cargo check` 通过,`npx tsc --noEmit` 通过,`NODE_ENV=test npx vitest run` 126/126 通过。 - **v0.13.1 修复智能创作卡死在「准备上下文」阶段** (2026-06-15) — 根因:能力进化反馈环 `evolve_capability_descriptions` 未清洗 LLM `` 思考链,被污染的 `when_to_use` 描述注入 PlanGenerator prompt,导致计划生成 LLM 卡死、前端 300s 超时退出。关键变更: - **写入清洗**:`capabilities/evolution.rs` 新增 `sanitize_evolved_description()`,剥离 `...` 标签(含未闭合情况)、去 markdown 代码块、300 字符上限、<20 字符拒绝;新增 5 个单元测试 - **加载防御**:`capabilities/mod.rs` `load_evolved_descriptions()` 过滤含 `` 或超 300 字符的条目,丢弃并告警,防止历史污染数据再次注入 - **数据清理**:用户机器 `evolved_descriptions.json` 已重置为 `{}`,立即恢复 - **验证**:`cargo check` 零错误,`cargo test --lib` 392/392 通过(原 387 + 新增 5),零回归 - **v0.9.7 技能与设置参数对智能创作真正生效** (2026-06-13) — 全面修复"项目丰富的技能与后台参数设定没有真正影响小说内容生成"问题,关键变更: - **WorkflowConfig 统一从 AppConfig 读取**:`rewrite_threshold` / `max_feedback_loops` / `style_weight` / `narrative_weight` / `skip_rewrite_threshold` / `keep_revision_history` 全部用户可配置,创作路径不再写死 - **Agent 模型映射前端可用**:新增 `AgentConfig` 组件,可为 8 个 Agent 单独配置 chat / embedding / multimodal 模型;后端 `get_agent_llm_params` 按 Agent 读取模型 profile 的 `temperature` / `max_tokens` - **技能参数真正生效**:`SkillParameter.default` 自动合并;`SkillManifest.config` 支持 `temperature` / `max_tokens`;内置技能补充默认 config - **Genesis / 创作向导读取配置**:概念生成与第一章使用 active profile 参数;第一章注入 `writing_strategy` 与可配置目标字数;创作工作流 `review_threshold` / `max_iterations` 从配置读取 - **模型高级参数持久化**:`LlmProfile` 新增 `top_p` / `frequency_penalty` / `presence_penalty`,前端 `ModelModal` 可编辑,OpenAI / Anthropic / Ollama 适配器传递 - **通用/隐私设置持久化**:`theme` / `language` / `auto_save` / `font_size` / `line_height` / `share_usage_data` / `store_api_keys_securely` 真正保存到 `AppConfig` - **风格与场景参数补全注入**:`build_writer_prompt` 注入写作风格详细字段与作品简介;`format_scene_structure` 显式渲染 `setting_atmosphere` - **验证**:`cargo test --lib` 323/323 通过,`npm run type-check` 通过,`vitest run` 116 passed / 3 skipped - **v0.9.4 智能创作进度感知与幕前界面精简** (2026-06-12) — 修复"智能创作进度提示长时间卡住"问题,并进一步精简幕前界面,关键变更: - **全局进度监听**:`orchestrator-step` 监听从局部改为全局,智能输入栏(`handleSmartGeneration`)与 `Ctrl+Enter`(`handleRequestGeneration`)均能实时显示写作进度 - **初始阶段提示细化**:`smart_execute` 上下文加载阶段新增"读取故事信息 / 章节与场景结构 / 世界观、角色与伏笔 / 风格配置"等细粒度事件,避免初始阶段无反馈 - **意图识别文案优化**:识别明确续写意图时显示"正在续写...",通用指令显示"正在理解创作意图并执行..." - **删除"我学到这些"卡片**:接受/拒绝续写后的学习反馈改为统一 toast 进程提示 - **完全删除左侧边栏**:移除修订模式、生成古典评点、打开幕后工作室按钮;`FrontstageSidebar` 组件及相关样式已删除 - **设置入口移至顶部**:在顶部色调设置旁新增设置图标,点击打开幕后工作室 - **采摘图标与右键菜单重绘**:采摘(Ingest)改为统一 VI 风格漏斗+下箭头 SVG;编辑器右键菜单仅保留剪切/复制/粘贴/全选,并继承全局色调 - **编译测试通过**:`cargo check` 零错误,`npx tsc --noEmit` 零错误,`vitest run` 116 passed - **v0.9.4 采摘状态指示器 VI 风格再优化** (2026-06-12) — 针对截图反馈的"灰色 pill 像橡皮擦"问题,进一步美化采摘(Ingest)状态 UI: - **移除灰色 pill 容器**:改为与设置/文思/禅模式一致的 28px 圆形透明按钮 - **简化状态表达**:漏斗图标 + 右下角微型状态点(绿/琥珀/灰)替代双图标并排 - **全局色调继承**:hover、active、面板背景、边框、文字全部使用 `--parchment`、`--warm-sand`、`--stone-gray`、`--charcoal` 等 CSS 变量 - **面板风格统一**:下拉面板改为暖色纸张质感圆角卡片,替代原来的深色 slate 面板 - **图标线条优化**:漏斗 SVG 路径更柔和,stroke-width 调整为 1.75,视觉上更纤细 - **前端验证**:`npx tsc --noEmit` 零错误,`vitest run` 116 passed,`npm run build` 通过 - **v0.9.4 CI 调整:E2E 不再阻塞整体工作流** (2026-06-12) — 解决 master 构建整体被 E2E 测试标红的问题: - 给 `e2e-check` job 添加 `continue-on-error: true` - 移动并更新注释:E2E 在缺少真实 Tauri 后端的 Vite dev server 上运行,settings 页 IPC 调用会挂起,因此不作为发布阻塞项 - 单元测试与构建检查(rust-check / frontend-check / tauri-build)仍是可靠质量门 - **v0.9.5 智能创作补齐采摘(Ingest)闭环** (2026-06-12) — 修复智能创作(`smart_execute` / `AgentOrchestrator::generate`)生成成功后未触发完整采摘的问题: - **现状**:查询侧已正常调用(`StoryContextBuilder` → `MemoryOrchestrator::build_memory_pack`),但生成后只写入 `memory_items` / `scene_commits` 摘要,未调用 `IngestPipeline` 提取实体/关系并更新知识图谱 - **修复**:在 `AgentOrchestrator::generate` 的 `MemoryWriter::write` 成功后,异步启动 `IngestPipeline::ingest`,并将提取到的实体/关系批量保存到知识图谱(`KnowledgeGraphRepository::save_entities_batch` / `save_relations_batch`) - **影响**:智能创作续写/生成的内容与 `auto_write` 保持一致,都会进入知识图谱和向量索引,后续查询能检索到最新实体与关系 - **本地验证**:`cargo check` 零错误,`cargo clippy` 通过,`cargo test --lib` 318/318 通过 - **v0.9.4 构建修复:固定 Rust 1.95.0 并提交 Cargo.lock** (2026-06-12) — 修复 GitHub Actions 在 latest stable Rust 下的 E0119 编译失败,关键变更: - **根因**:Rust 1.96(latest stable)与 `time` crate 0.3.47/0.3.48 存在 coherence 冲突,导致 `tracing-subscriber`、`tantivy-common`、`cookie`、`tauri-utils` 等 crate 报 `From` 冲突实现错误 - **修复**:新增 `rust-toolchain.toml` 固定 Rust 版本为 **1.95.0**;将 `Cargo.lock` 从 `.gitignore` 移除并纳入版本控制,锁定 `time` 在 0.3.47 - **影响**:CI 与本地构建依赖解析一致,避免 future Rust 版本导致 transitive crate 编译失败 - **本地验证**:`cargo clippy` 通过(301 warnings 均为既有历史 warning),`cargo test --lib` 318/318 通过 - **v0.9.2 自动创作性能优化** (2026-06-11) — 全面优化自动创作速度与后台任务感知,重点解决"后台任务多"与"创作速度慢"问题,关键变更: - **后端并行化**:PlanExecutor 同 batch 步骤 `join_all` 并行;GenesisPipeline 后台阶段将世界观/大纲/角色合并为单一并行步骤,使用 `tokio::join!` 同时调用 LLM - **共享状态线程安全**:`GenesisContext.bundle` 升级为 `Arc>` - **上下文查询去重**:`StoryContextBuilder` 同一次构建内只查一次 scenes - **LLM 调用层优化**:Adapter 缓存复用、读取 `timeout_seconds`、指数退避重试 - **数据库调优**:SQLite WAL + busy_timeout + synchronous=NORMAL,连接池 5 → 10 - **前端收敛**:`useBackendActivityListener` 将 6 类事件聚合为单一主 activity;`FrontstageApp` 的 `isGenerating` 与 `backendActivityStore` 对齐 - **全量测试通过**:`cargo test --lib` 318/318,`vitest run` 124 passed - **v0.9.1 架构拆分与全面测试覆盖** (2026-06-10) — 完成 Phase 3 架构拆分 + Phase 4 测试覆盖,`cargo check` 零警告,`cargo test` 318/318 通过,前端 `vitest run` 124/124 通过,E2E 32/32 通过。关键变更: - **后端架构拆分**:`repositories.rs` 6198 行 → 183 行(24 个 Repository 独立文件);`models.rs` → 8 个领域子模块;移除 3 个 RESERVED 幽灵模块 - **前端架构拆分**:`FrontstageApp.tsx` 提取 5 个自定义 hooks(useFrontstageData/Editor/Generation/Wensi/Panels)+ 2 个子组件(HelpPanel/ZenModeExit) - **前端单元测试 71 例**:hooks ×4、组件 ×2、工具函数 ×2,全部通过 - **Rust 核心测试 21 例**:utils/text ×7、utils/file ×3、pipeline/refine ×3、pipeline/review ×3、story_system/scene_service ×5,全部通过 - **E2E 测试重写 36 例**:从截图驱动转为行为驱动,新建 3 个 spec 文件 + 共享 mock 工具 - **v0.9.0 Brooks-Lint 代码质量重构** (2026-06-08) — 完成第一轮代码质量重构,`cargo check` 接近零警告,前端 `tsc --noEmit` 零错误,Rust 测试 297/297 通过。关键变更: - 新增 `db/dto.rs`:18+ 个请求/响应 DTO 从 `models.rs` 独立 - 新增 `story_system/chapter_service.rs` 与 `scene_service.rs`:业务编排从 Command 层下沉到领域服务 - 前端 `services/tauri.ts`(1,340 行)拆分为 `services/api/` 下 17 个按域子模块 - 自定义 `MigrationRunner` + 21 个版本化 `.sql` 迁移文件(V007 ~ V027) - `lib.rs` setup 逻辑拆分为独立初始化函数,全局单例补充 SAFETY 注释 - 为 Repository、Cascade 删除、规范状态等核心模块铺设回归测试,总测试数 264 → 297 - **v0.8.0 模型管理重构 + 浮点数精度修复 + 连接状态增强** (2026-05-29) — 统一模型管理入口 `UnifiedModelManager`;temperature 序列化规范化;连接测试步骤可视化 + 全局连接状态 Store;`commands.rs` 辅助函数提取。 - **v5.6.4 Tauri v2 IPC `rename_all = "snake_case"` 根本修复** (2026-05-08) — 彻底消灭 camelCase↔snake_case 参数不匹配导致的 IPC 静默失败。根因:Tauri v2 默认将 Rust snake_case 自动转换为 camelCase 传给 JS,前端改为 snake_case 后未同步禁用转换,参数全部静默丢弃。修复:157 个 `#[tauri::command]` 全部添加 `rename_all = "snake_case"`(`lib.rs` 63 + `commands_v3.rs` 92 + `subscription/commands.rs` 2)。`cargo check` 零错误,`cargo test` 217/217 通过。 - **v5.6.3 IPC 参数一致性全面修复 + Bootstrap 序列化修复** (2026-05-08) — 修复幕后界面功能不可用的根本原因。Bootstrap 进度卡死:`CharacterElement`/`SceneElement` 添加 `#[serde(default)]` 容错 LLM 省略字段;`BootstrapProgressEvent` 新增 `status` 字段。IPC 参数全面审计:修复 7 处 camelCase↔snake_case 不匹配(前端传参修复)。后端命令参数补全:`run_creation_workflow` mode 映射、`update_story` genre、`create_character`/`update_character` 扩展字段。`cargo check` 零错误,`npm run build` 通过。 - **v5.6.2 设计-实现对齐全面修复 v5** (2026-05-08) — 全面检视并修复 5 项设计-实现差距 - **前端缓存同步精确化**: `writingStyle` case 同时刷新 `writing_style` 缓存(修复只刷新 `world_building` 的遗漏);`chapterUpdated` 补充 `['chapters', storyId]` 精确刷新 - **update_scene 向量索引闭环**: `update_scene` 内联 Ingest 补充 `embed_text_async` → `VectorRecord` → `add_record`,Scene 内容变更后语义搜索可检索;`VECTOR_STORE`/`embeddings` 可见性提升为 `pub(crate)` - **storySelected 关联数据自动刷新**: `case 'storySelected'` 补充 8 项关联数据 `invalidateQueries`,消除切换故事时的时序依赖 - **dataRefresh 完整覆盖**: 补充 `knowledgeGraph`/`characterRelationships` 单独 case - **编译优化**: 5 处 dead_code 警告清理,warnings 113→109 - **编译**: `cargo check` 零错误,`npm run build` 通过 - **v5.6.1 设计-实现对齐全面修复 v4** (2026-05-08) — 全面检视并修复 8 项设计-实现差距 - **幕前幕后自动关联补全**: `sceneCreated`/`sceneDeleted` 同步刷新 `chapters` 缓存,消除场景-章节关联状态滞后 - **自适应学习真实反馈**: `record_feedback` 返回 `Vec`,同步挖掘真实偏好;前端使用返回结果替代硬编码 mock - **前端缓存同步完整覆盖**: `useSyncStore` 新增 `writingStyle`/`storyOutlines`/`foreshadowings` case,所有数据类型修改后自动刷新 - **Pending vector SQLite 持久化**: Migration 42 创建表,替代 JSON 文件持久化 - **Workflow 幂等性**: `schedule_execution` 入队前检查 queue/running,防止重复执行 - **编译**: `cargo check` 零错误,`cargo test` 217/217 通过,`npm run build` 通过 - **v5.5.0 设计-实现对齐全面修复** (2026-05-07) — 全面检视并修复 10 项设计-实现差距 - **幕前幕后自动关联补全**: `create_world_building`/`update_world_building` 正确发射 `WorldBuildingUpdated` 同步事件;`ChapterRepository::delete` 添加事务清理 `scenes.chapter_id` 外键;`characterDeleted` 按 `storyId` 精准失效缓存 - **后台自动化闭环**: `auto_ingest_chapter` 成功后写入 LanceDB 向量存储(`embed_text_async` → `VectorRecord` → `add_record`),语义搜索可检索最新写作内容;WorkflowEngine 支持数据库持久化(Migration 41 + `with_pool` + 自动 save/load);能力进化反馈环闭合(`evolve_capability_descriptions` 自动保存 + `build_default_registry` 加载进化描述 + PlanExecutor 后台触发) - **技术债务清理**: 移除 `src-core` 幽灵 crate(54 文件零引用);同步 `FEATURES.md`/`ROADMAP.md`/`ARCHITECTURE.md` 版本号至 v5.4.1 - **编译**: `cargo check` 零错误,`cargo test` 217/217 通过,`npm run build` 通过 - **v5.4.1 Bootstrap 编辑器内容丢失修复** (2026-05-07) — 修复创世流程"小说已创建但编辑器无文字"的竞态条件问题 - `FrontstageEvent::ChapterSwitch` 新增 `content` 字段,后端直接传递生成内容 - 前端优先使用事件中的 `payload.content`,绕过 DB 查询竞态 - `chaptersRef` 为空时自动重新查询数据库 - `final_content` 兜底机制 - `loadStories` 在生成期间禁止自动 `selectStory` - **编译**: `cargo check` 零错误,`npm run build` 通过 - **v5.4.0 向量检索语义化 + QueryPipeline 端到端集成** (2026-05-04) — 从关键词匹配到语义理解的检索升级 - **OllamaEmbeddingAdapter**: 新增 `embeddings/provider.rs` 中 `OllamaEmbeddingProvider`,支持通过 Ollama API(`nomic-embed-text` / `all-minilm` / `mxbai-embed-large`)获取真实语义嵌入 - **全局语义嵌入路由**: `embeddings/embedding.rs` 中 `embed_text_async()` 优先查询全局 `EmbeddingProvider`(Ollama/OpenAI),失败 graceful fallback 到本地 FNV-1a 哈希;全局 provider 使用 `tokio::sync::Mutex` 保证跨 async 边界 `Send` 安全 - **QueryPipeline 语义搜索融合**: `memory/query.rs` 四阶段管线扩展为五阶段——1a token_search + 1b semantic_search(embedding 生成 → `search_with_embedding`)+ 1c `fuse_results` 加权融合(token 权重 0.4 / 语义权重 0.6)+ 2 图谱扩展 + 3 预算控制 + 4 上下文组装 - **Graceful 降级**: 若用户未配置 Ollama/OpenAI embedding,或 `DbVectorStore` 不支持 `search_with_embedding`,自动回退到纯 token 搜索,零额外配置即可运行 - **LanceDB 真实向量索引**: `vector/lancedb_store.rs` 已接入 IVF-PQ + Cosine 距离语义检索,`VectorStore` trait 扩展 `search_with_embedding` 接口 - **测试覆盖**: 新增 6 个 `fuse_results` 单元测试(双侧/仅token/仅语义/去重/空输入/截断),Rust 总测试数 211→217 - **编译**: `cargo check` 零错误,`cargo test` 217/217,`npm run build` 通过 - **v5.3.1 Bootstrap体验修复 + 幕后数据刷新** (2026-05-03) — 修复四个关键体验问题 - **Bootstrap重复显示小说开头**: `handleSmartGeneration` Bootstrap完成时不再设置 `generatedText` 幽灵文本,避免与 `ChapterSwitch` 加载的 `chapter.content` 正文叠加 - **幕后结构要素不显示**: `useSyncStore` 中 `invalidateQueries` 的 queryKey 与 hooks 实际使用的 key 不一致(`world-building`≠`world_building`、`story-outlines`≠`story-outline`),修复后 TanStack Query 缓存正确过期,幕后自动刷新世界观/大纲/角色/场景/伏笔数据 - **Bootstrap解析失败**: 给所有 `NarrativeElement` 结构体的 `id`/`story_id`/`source` 等字段添加 `#[serde(default)]`,允许 LLM 返回的 JSON 省略后端生成字段,修复 `missing field id` 反序列化错误 - **Bootstrap生成中断(幕前无正文+幕后无结构要素)**: `StoryContextBuilder::build` 中数据库查询在 Bootstrap 时返回 `Err` 导致 `FirstChapterGenerationStep` 失败;LLM 返回 JSON 缺少 `relationships`/`rules`/`key_locations` 等字段导致后台阶段中断。修复:build 方法查询失败时返回默认值;给所有可能缺失的字段添加 `#[serde(default)]` - **续写时重复生成小说开头**: `current_content_preview` 从头部截断 2000 字符,续写后 LLM 看不到续写内容只能看到第一章,于是重新生成开头。修复:从尾部截断 6000 字符保留最新内容 - **后台数据刷新统一通道**: 后台阶段完成后通过 `StateSync::emit_data_refresh()` 发射标准 `sync-event` 事件 - **编译**: `cargo check` 零错误,`cargo test` 193/193,`npm run build` 通过,`cargo tauri build` Windows `.exe`/`.msi`/`-setup.exe` 生成 - **v5.3.0 叙事元素模型重构:创世-拆书同构架构** (2026-05-02) — 将 Bootstrap(生成小说)和拆书(分析小说)统一为可逆的 NarrativePipeline 架构 - **统一数据模型**: 新建 `narrative/` 模块 — `CharacterElement/SceneElement` 等 + `ElementSource` 枚举区分 Generated/Extracted/UserCreated/Imported - **GenesisPipeline**: 7步正向流程(概念→世界观→大纲→角色→场景→伏笔→知识图谱) - **AnalysisPipeline**: 7步逆向流程(元数据→世界观→角色→场景→故事线→伏笔→知识图谱) - **统一进度系统**: `usePipelineProgress.ts` Hook 替代两套进度系统 - **统一存储层**: `repositories_narrative.rs` 生产表和参考表数据汇聚到统一表 - **编译**: `cargo check` 零错误,`cargo test` 193/193,`npm run build` 通过 - **v5.2.2 Bootstrap 两阶段架构重构** (2026-05-02) — 核心体验优化:用户等待从10+分钟缩短到2-3分钟 - **两阶段执行模型**: `bootstrap.rs` `run()` 拆分为 `run_quick_phase()`(同步:概念+正文,2-3分钟)+ `run_background_phase()`(异步 `tokio::spawn`:世界观/大纲/角色/场景/伏笔/知识图谱,5-8分钟) - **即时返回正文**: 生成第一章后立即返回给前端,用户可以开始写作,无需等待后台完善 - **后台进度感知**: 前端状态栏显示"后台正在完善小说世界...",完成后 toast "创世完成!所有卡片已生成" - **编译**: `cargo check` 零错误,`cargo test` 193/193,`npm run build` 通过 - **v5.2.1 超时修复与白屏修复** (2026-05-02) — 消灭用户报告的两个紧急问题 - **Bootstrap 超时延长**: 前端 `handleSmartGeneration` 创建新小说超时从 180 秒延长至 **600 秒**,匹配本地大模型多步 LLM 调用实际耗时 - **进度密度增强**: `bootstrap.rs` 每个 LLM 调用(概念/世界观/大纲/角色/场景/伏笔)前后增加细粒度进度事件,用户实时看到"调用AI→已生成→解析中" - **LLM 心跳加速**: `llm/service.rs` 心跳间隔 3 秒→**2 秒**,上限 40 次→**300 次**,消息优化为"正在深度思考中..." - **后台窗口白屏修复 v5.2.1**: `show_backstage` 双重维度尺寸微调(width+height)+ JS `html+body` 双重重排 + **800ms 延迟**(原 300ms)+ 延迟期间再次微调;`App.tsx` 立即+300ms 延迟两次 `setRenderKey` 强制 React 重挂载 - **编译**: `cargo check` 零错误,`cargo test` 193/193,`npm run build` 通过 - **v5.2.0 设计-实现对齐全面完成** (2026-05-02) — 通用 Workflow 引擎 + 能力进化闭环 + 双向同步 - **`WorkflowScheduler::run_instance` 完整 DAG 执行**: 从空实现到支持 Start→WriteChapter→Inspect→Revise→VectorIndex→AnalyzePlot→End 全节点类型,拓扑有序执行(同层可并行)+ 状态管理 + 上下文变量传递 - **通用 Workflow IPC 命令**: `register_workflow` / `create_workflow_instance` / `start_workflow_instance` / `get_workflow_instance_status`,setup 时自动注册 `standard_writing_workflow` 模板 - **能力进化反馈环闭合**: `ExecutionRecordStore` JSON 持久化 + `PlanExecutor` 自动记录每次能力执行 + `evolve_capability_descriptions` LLM 分析生成改进建议 - **幕前↔场景内容双向同步**: `useSyncStore` chapterUpdated 刷新 scenes 缓存 + `FrontstageApp` 监听 chapter-updated 自动刷新编辑器内容(3 秒防循环保护) - **QueryPipeline 降级感知**: 后端 `context-degraded` 事件 + 前端 toast "正在使用简化上下文生成内容..." - **废弃组件清理**: `FrontstageToolbar` 从索引导出中移除 - **编译**: `cargo check` 零错误,`cargo test` 193/193,`npm run build` 通过 - **v5.1.1 设计-实现对齐全面修复** (2026-05-01) — 消灭 P0 差距,补齐 P1 差距,全面达到设计目标 - **`update_chapter` 保存后自动触发 IngestPipeline**: `auto_ingest_chapter()` 异步后台执行,5 分钟冷却期 + 内容哈希去重,防止 API 成本失控 - **`state_sync` 空 story_id 修复**: character/chapter update/delete 先查询 `story_id` 再发射同步事件,前端缓存精准刷新 - **`FrontstageToolbar` story_id 传递**: 废弃组件修复 `show_backstage` 参数传递 - **`WorkflowScheduler` 队列机制**: 从空实现改为 `VecDeque` 内存队列 + `execute_next()` 串行执行 - **`PromptLibrary` 扩展**: 新增 StyleChecker + Commentator 系统提示词模板 - **方法论模板库**: 新建 `prompts/methodologies/` — 雪花法 10 步 + 英雄之旅 12 阶段 + 场景结构 3 变体 - **编译**: `cargo check` 零错误,`cargo test` 193/193,`npm run build` 通过,`cargo tauri build` Windows `.exe`/`.msi`/`-setup.exe` 生成 - **v5.1.0 幕前幕后自动关联对齐** (2026-05-01) — 从"各自为战"到"自动联动"的全面升级 - **Phase 1.1 Chapter↔Scene 双向映射**: `chapters.scene_id` + `scenes.chapter_id` 外键关联,ChapterRepository 自动创建/关联 Scene - **Phase 1.2 统一实时状态中心**: 后端 `state_sync` 模块 + 16 种 `SyncEvent`,所有数据修改命令自动发射同步事件 - **Phase 1.3 Bootstrap 自动加载**: `smartExecute` 返回后前端自动加载新故事并切换到第一章,Bootstrap 完成后双重 `ChapterSwitch` 保险 - **Phase 1.4 幕前→幕后快速跳转**: `Ctrl+Shift+B` 快捷键 + 标题栏点击,幕后自动定位当前故事 - **Phase 2.2 自适应学习闭环修复**: `record_feedback` 成功后异步触发 `mine_preferences`,偏好挖掘自动激活 - **Phase 2.4 AgentOrchestrator 闭环接入**: `execute_writer` 集成 `AgentOrchestrator::execute_write_with_inspection`,Writer→Inspector→StyleChecker→Writer 质检改写生效 - **Phase 3.1 Zustand↔TanStack Query 同步**: `App.tsx` 监听 `currentStory` 变化,自动刷新关联数据缓存 - **Phase 3.2 窗口通信事件标准化**: `DataRefresh` 统一由 `useSyncStore` 处理,消除重复刷新 - **编译**: `cargo check` 零错误,`cargo test` 193/193,`npm run build` 通过 - **v5.0.0 创世引擎:一键创世,万物关联** (2026-04-30) — 从"一键生成开头"到"一键生成完整小说世界" - **故事大纲自动生成**: `story_outlines` 表 + LLM 生成 3 幕结构大纲(标题/摘要/情节点/预估场景数) - **角色完整性格小传**: `characters` 表新增 appearance/gender/age,bootstrap 完整填充 personality/goals/appearance - **角色关系图谱**: `character_relationships` 表 + 前端"关系"标签页,展示角色间朋友/敌人/恋人/师徒等关联 - **伏笔自动埋设**: Bootstrap 基于大纲识别 3-5 个核心伏笔,自动关联第一章场景 - **知识图谱自动构建**: 创世时为角色/场景/伏笔自动创建 KG 实体和关系 - **前后台智能联动**: Bootstrap 完成后自动发送 `NavigateTo` 事件,幕后切换到 Stories 并高亮新故事 - **故事概览面板**: Stories.tsx 新增"概览"视图,展示大纲/角色/场景/伏笔总览 - **7步创世工作流**: 构思故事 → 撰写开篇 → 构建世界 → 生成大纲 → 塑造角色 → 铺设场景 → 埋设伏笔 → 编织关联 - **Migration 34/35/36**: story_outlines / characters增强+relationships / scenes.foreshadowing_ids - **Bug 修复 v3(热修复)**: 后台窗口白屏 + 后台卡片显示修复 - **白屏根因**: WebView2 窗口 `hide()` 后重新 `show()` 时渲染表面可能丢失;JS 强制重排不够可靠 - **白屏修复 v3**: `show_backstage` 命令**微调窗口大小再恢复**(`width+1` → `width`),强制 WebView2 重新创建渲染表面;配合 JS 强制重排;延迟 300ms 发射 `backstage-shown` 事件确保前端监听器就绪 - **卡片不显示根因 v3**: (1) Bootstrap 完成时 backstage 被隐藏,事件丢失; (2) `DataLoader` 与 `App.tsx` 同时加载 stories 造成**竞态条件**; (3) Bootstrap LLM 调用失败时错误被 `log::warn` 吞掉,前端完全不可见 - **卡片修复 v3**: `DataLoader` **移除 stories 查询**,完全由 `App.tsx` 控制数据加载,消除竞态 → `App.tsx` 引入 `useQueryClient`,`handleWindowShown` 中主动 `invalidateQueries` 强制刷新所有页面数据 → `bootstrap.rs` LLM 调用失败时发射 `novel-bootstrap-error` 事件到前端,让错误可见 - 编译: `cargo check` 零错误,`cargo test` 193/193,`npm run build` 通过 - **v4.5.0 进程提示栏超时深度修复:消灭"系统仍在处理中"黑洞** (2026-04-30) — 从"不知道在等什么"到"每一步都可见" - **根因定位**: `build_writer_prompt` 是同步函数,内部包含大量数据库查询 + `block_on` 调用,但**零事件输出**。用户在 0.15→0.20 之间等待 5-30 秒无反馈,前端 fallback timer 超时退出 - **async 化**: `build_writer_prompt` → `async fn`,移除危险的 `tauri::async_runtime::block_on`(在 Tauri 异步运行时中可能导致死锁/线程阻塞) - **密集事件**: 在 `build_writer_prompt` 内部插入 15+ 个新事件(0.150→0.195),覆盖:策略配置→模板变量→系统提示词渲染→策略约束注入→方法论→风格 DNA→个性化偏好→叙事状态快照(故事/场景/冲突/伏笔/角色)→最终组装 - **`tokio::task::yield_now().await`**: 每个子步骤之间 yield,确保事件循环有机会将 IPC 事件发送到前端 - **AdaptiveGenerator 细分**: 0.281"查询用户反馈历史"、0.285"计算生成策略" - **前端图标映射**: 补充"读取/渲染/准备/查询/计算"→Brain,"注入/组装"→Cog - **状态栏宽度**: `generation-status-text` max-width 200px→600px + `flex-shrink: 0`;最终移到输入框 pill 下方独立行 `generation-status-row`,占满 900px 宽度 - 编译: `cargo check` 零错误,`cargo test` 193/193,`npm run build` 通过 - **v4.4.0 3风格三角框架:通用风格混合系统** (2026-04-28) — 从单一风格到多风格融合的创作革命 - **通用风格混合系统**: `StyleBlendConfig` 支持任意 2-5 个 StyleDNA 按权重组合,主导/辅助角色自动分配,权重实时归一化 - **3风格三角创作框架**: 新增普鲁斯特(意识流/长句/内心独白70%)+ 马尔克斯(魔幻现实/全知视角)内置风格,与现有海明威形成完整三角 - **混合风格 Prompt 注入**: 主导风格完整注入,辅助风格仅注入关键差异维度;融合规则明确"主导定基调,辅助渗精神" - **防漂移自检清单**: 5项检查(句长/对话比/比喻密度/内心独白/情感外露),加权平均目标 ± 容差,总体匹配度评分 - **章节级风格控制**: `scenes.style_blend_override` 支持每章独立配置,前端 Stories.tsx 双标签页(单一风格/风格混合) - **数据层**: Migration 30/31 新增 `story_style_configs` 表 + `scenes` 覆盖字段;4 个新 IPC 命令 - 编译: `cargo check` 零错误,`cargo test` 193/193,`npm run build` 通过 - **v4.3.0 智能交互创作流程深度优化** (2026-04-27) — 从"能创作"到"懂创作"的全面升级 - **一键创作体验升级**: Bootstrap前端实时显示5步进度(构思→世界观→角色→场景→撰写);创建完成后自动切换新故事并加载第一章;Chapter/Scene双轨同步确保前端零延迟加载 - **模型驱动编排全面落地**: 彻底移除`detect_and_route_intent`关键词匹配,所有用户输入交由PlanGenerator自由理解;PlanContext增强注入世界观摘要、角色列表、活跃伏笔、风格DNA、MCP可用工具 - **设定修改智能响应**: 新增`update_character`/`update_world_building`/`update_scene`能力,LLM解析用户修改意图自动更新后台设定;场景修改自动标记`needs_rewrite`,续写时自动重写受影响内容 - **MCP与技能自动化**: CapabilityRegistry注册MCP工具,PlanGenerator知道何时调用外部工具;内置技能(style_enhancer/character_voice/emotion_pacing)可由模型自主编排 - **PlanGenerator Prompt进化**: 新增技能调用指南、设定修改指南、MCP工具使用指南、伏笔处理指南(Rule 12-18) - 编译: `cargo check` 零错误零警告,`cargo test` 183/183,`npm run build` 通过 - 新增测试: planner/bootstrap 7个(JSON提取/概念序列化)、planner/executor 4个(参数解析)、planner/mod 4个(PlanContext/PlanStep) - 修复: bootstrap.rs 编译警告、第一章 prompt 增强(注入题材/基调/简介) - **v4.2.0 智能交互设计重构 V2:模型驱动的编排范式** (2026-04-23) — 从程序式编排转向模型式编排 - **核心理念**: 人类只定义能力能做什么(自然语言描述),模型负责编排(什么时候用、怎么用、按什么顺序)。移除所有关键词匹配、意图分类枚举、if/else 分支判断用户意图。 - **CapabilityRegistry(能力自描述系统)**: Agent 和 Skill 用自然语言描述自己(`description` / `when_to_use` / `input_description` / `output_description`),模型阅读描述自主选择。人类不再写死 Agent 映射规则。 - **PlanGenerator(模型计划生成器)**: 取代 IntentParser + IntentExecutor。LLM 接收系统状态 + 用户输入 + 能力清单,自主输出执行计划(自由文本理解 + 步骤列表 + 参数 + 依赖关系)。 - **PlanExecutor(计划执行引擎)**: Dumb executor,忠实执行 LLM 生成的计划。按顺序执行步骤、传递输出、处理失败。所有决策已在计划中。 - **PromptEvolver(提示词进化器)**: LLM 根据故事上下文(题材、叙事阶段、用户偏好)自由改写整个 prompt。不是模板变量替换,而是真正的"进化"。 - **AiLearningIndicator(记忆显性化)**: 前端组件,每次 AI 交互后展示"系统学到了什么"。让"越写越懂"对用户可见。(注:v0.9.4 已移除该卡片式提示,改为统一 toast 进程提示。) - **CapabilityEvolutionEngine(能力进化反馈环)**: 记录能力调用结果,长期优化能力描述准确性。 - **PlanTemplateLibrary(计划模板学习)**: 记录成功执行计划,类似请求复用或微调。 - **移除的程序式规则**: IntentType 枚举(11 类预设分类)、前端正则关键词检测、IntentExecutor.map_agents 写死映射、`if (!currentStory)` 强制报错流程。 - **前端简化**: `handleSmartGeneration` / `handleRequestGeneration` 统一走 `smart_execute`,用户任何输入都交给模型决定。 - 编译: `cargo check` 零错误零警告,`cargo test` 160/160,`npm run build` 通过 - **v4.1.0 幕前界面深度重构:化整为零,萤火随行** (2026-04-22) — P0+P1+P2 全流程体验重构 - **设计理念**: 从 20+ 可见 UI 元素缩减至 <5 持久元素。AI 功能以萤火暗示(firefly hints)形式按需浮现,用完即隐。"创作者不应在工具中花费精力标注自己的创作"——移除所有显式注释/评论创建 UI。 - **P0 核心重构 (4 项)**: - 顶栏精简: 44px 细线设计,小说标题(点击进入幕后)、字数统计、字号调节、🔥 文思三态切换(off·/passive✨/active🔥)、禅模式。移除汉堡菜单、订阅徽章、"开启文思"按钮、"AI 续写"按钮、主行动按钮。 - 底栏删除: 彻底删除底部聊天工具栏(chat input、模型状态点、WenSiPanel 嵌入、Slash textarea 菜单)。AI 结果以幽灵文本(ghost text)内联呈现,Tab 接受/Esc 拒绝。 - 侧边栏精简: 5 按钮→2 按钮:修(修订模式)/ 批(生成古典评点)/ 幕(幕后)。移除注释和评论显式 UI。(注:v0.9.4 已进一步完全移除幕前左侧边栏,设置入口并入顶部状态栏。) - 键盘快捷键: `Ctrl+Enter` / `Cmd+Enter` 全局触发续写,`Ctrl+Space` 循环文思模式,`F11` 禅模式。 - **P1 萤火系统 (3 项)**: - 幽灵文本: 编辑器末尾灰色斜体段落(`opacity: 0.35`),附带萤火操作栏(Tab 接受 / Esc 拒绝)。 - 右边缘萤火: `smartGhostText` 从右侧淡入(0.8s)→ 停留 → 淡出(1.2s),不打扰写作流。 - 空态引导: 编辑器无内容时居中显示诗意提示"开始写下第一句话,文思将随你而行"。 - **P2 体验优化 (4 项)**: - 内联 `/` 命令菜单: 8 命令(续写/润色/古风/场景/自动续写/审校/评点/排版),光标处触发,方向键导航,回车执行,Esc 关闭,自动删除 `/` 字符。 - WenSiPanel 浮动化: 从底栏嵌入改为 FrontstageApp 右下角浮动卡片,通过 `/` 菜单高级命令触发。 - 修订横幅精简: 从多行可展开缩减为 32px 单行,变更列表可滚动,默认折叠。 - 古典评点保留: AI 生成的段落评点(金圣叹式朱批)保留为内联段落,朱红色 `oklch(55% 0.18 25)`,霞鹜文楷字体,左边框红色,※ 前缀,缩进 3em。 - **移除(设计决策)**: - 显式注释系统: sidebar "注"按钮、注释/评论面板、选中文本弹窗创建按钮、右键菜单项、所有相关 hooks(`useTextAnnotations`、`useCommentThreads`)。 - 原因: AI 写作工具不需要创作者标注自己的作品;AI 反馈应以幽灵文本或古典评点形式自然呈现。 - 编译: `cargo check` 零错误零警告,`cargo test` 160/160,`npm run build` 通过 - **v4.0.1 全面代码审计与空实现修复** (2026-04-22) — Phase A+B - **Phase A: 代码审计与 P0 修复 (15+ 项)**: - 综合审计: 扫描 40+ 模块,输出 `CODE_AUDIT_REPORT_V4.md`(5 严重/17 参数/9 空实现) - IPC: 统一 17 处 camelCase→snake_case 参数名,修复 Tauri v2 反序列化静默失败 - 空实现补全: `analytics` 真实统计、`agents/commands` 真实状态、`skills/executor` 真实 MCP 调用、`export/import_from_text` 正则解析、`workflow/scheduler` 执行日志、`evolution/updater` manifest CRUD、`mcp/server` 缺失 `.await` - 前端修复: `settings.ts` 移除硬编码密钥、`useCollaboration.ts` WebSocket 真实发送、`useStreamingGeneration.ts` 移除 mock、`textAnalyzer.ts` 增量分析 - UI: 聊天工具栏从 absolute 改为正常流、编辑器 padding 优化 - 类型统一: `skills/mod.rs` 移除重复 `McpServerConfig` - **Phase B: 内存模块 SQLite 持久化 (3 模块)**: - Migration 26/27/28: `chat_sessions`/`chat_messages`、`story_runtime_states`、`collab_sessions`/`collab_participants` - `chat/mod.rs`: `ChatManager` 改为 `DbPool` 持久化 - `state/manager.rs`: `StoryStateManager` 改为 `DbPool` 持久化 - `collab/mod.rs` + `websocket.rs`: `CollabManager` 持久化 + 完整消息处理闭环(Join/Leave/Operation/Cursor/Participants) - 编译: `cargo check` 零错误零警告,`cargo test` 160/160,`npm run build` 通过 - **v4.0.0 借鉴 AI-Novel-Writing-Assistant 全面优化** (2026-04-22) — Phase 1+2+3 共 9 项新功能 - **Phase 1: P0 核心能力 (3 项)**: - Canonical State: 新增规范状态系统,统一聚合 StoryContextBuilder/character_states/foreshadowing/KG 等分散状态,AI 续写时准确知道"当前处于故事哪个阶段" - Payoff Ledger: 升级 ForeshadowingTracker 为伏笔账本,新增时间窗口追踪(target_start/target_end)、逾期检测、风险信号、回收时机智能推荐 - Execution Panel: 新增章节执行面板,智能推荐下一步行动("处理逾期伏笔"/"续写"/"运行审校"),集成到 Scenes.tsx 和 FrontstageApp - **Phase 2: P1 质量与控制 (3 项)**: - Narrative Phase Detection: 增强叙事阶段检测(逾期伏笔→ConflictActive、高置信度长内容→Climax、主要伏笔回收→Resolution),注入 Writer prompt - Structured Outline: Scene 模型新增 execution_stage/outline_content/draft_content,SceneEditor 重写为 6 标签页(规划/大纲/起草/审校/定稿/批注) - Audit System: 新增统一审计模块,整合 ContinuityEngine/StyleChecker/QualityChecker/PayoffLedger,五维评分(连续性/人物/风格/节奏/伏笔),支持 light/full 审计 - **Phase 3: P2 体验优化 (3 项)**: - Novel Creation Wizard: 新增 5 步小说创建向导(创意→世界观→角色→文风→首个场景),每步提供 AI 生成选项 - Enhanced Streaming: StreamOutput 组件增强(Markdown 渲染、实时字数、停止按钮、打字机效果),接入 FrontstageApp/WenSiPanel/CreationWizard - Strategy Configuration: Settings 新增写作策略配置(运行模式/冲突强度/叙事节奏/AI 自由度),动态注入 Writer prompt - 编译: `cargo check` 零错误,`cargo test` 160/160,`npm run build` 通过 - **v3.7.1 智能化创作系统 5 阶段重构深度修复** (2026-04-22) — Phase A+B+C 共 15 项修复 - **Phase A: P0 核心断裂修复 (5 项)**: - QueryPipeline: `graph_expansion` 内容分词后逐 token 匹配实体,修复图谱扩展永不命中的 bug - QueryPipeline: `budget_control` 修复内层 break 只跳出内层循环的预算泄漏 bug - ContinuityEngine: `check_world_rules` 修复检查方向——从"检测规则描述片段"改为"提取禁止条款后检测" - ContinuityEngine: `get_character_states` 效率优化(O(N×M)→O(N+M)),`check_character_locations` 增强跨场景位置检测 - PreferenceMiner: `record_feedback` 成功后异步触发 `mine_preferences`,自适应学习闭环激活 - StyleChecker: 接入 `AgentOrchestrator` 闭环,Writer→Inspector→StyleChecker→Writer 风格校验生效 - Ingestion: 实现真正的内容保存(Chapter 创建/更新)+ 简化知识图谱实体提取,工作流闭环完成 - **Phase B: P1 功能补全 (6 项)**: - 方法论: Migration 22 添加 `methodology_id`/`methodology_step`,Settings 页面新增创作方法论配置 - 创作模式: `CreationWorkflowEngine` 按 `CreationMode` 分支(AI全自动/AI初稿+精修/人工初稿+润色) - 进度反馈: 前端 `useWorkflowProgress` Hook + Stories.tsx 进度弹窗(阶段名称+百分比+指示器) - Orchestrator 事件: 前端监听 `orchestrator-step` 实时状态(生成→质检→改写),Settings 暴露阈值/循环数配置 - AdaptiveGenerator: `calculate_temperature` 累加而非覆盖,pacing/style 偏好微调生效 - 反馈记录: AiSuggestionNode + WenSiPanel 接入 `record_feedback`,覆盖内联建议/自动续写/自动修改 - **Phase C: P2 优化 (4 项)**: - StyleAnalyzer: 新增 `analyze_with_llm` + `analyze_style_sample` IPC,Stories.tsx 新增"从文本生成风格" - QualityChecker: 新增 `check_with_llm`,Review 阶段优先 LLM 评估、回退规则评估 - PhaseWorkflow: 硬编码阶段逻辑迁移到配置驱动,`PhaseWorkflow` 配置系统激活 - 增量 Context: 每阶段完成后关键产出回注 `AgentContext`(Conception→world_rules, Outlining→scene_structure) - 编译: `cargo check` 零错误,`cargo test` 145/145,`npm run build` 通过 - **v3.6.1 全面功能审计与深度修复** (2026-04-22) — P0+P1+P2 共 30 项修复 - **P0 紧急修复 (10 项)**: - DB: Migration 21 补全 scenes/kg_relations `confidence_score` 缺失列,消除运行时崩溃 - IPC: 统一 25 处 camelCase→snake_case 参数名,修复 Tauri v2 反序列化失败 - 场景: `create_scene` 后端扩展参数,前端传参不再静默丢弃 - Orchestrator: 修复 Rewrite 事件错误携带初稿分数的 bug (`writer_result.score` → `rewrite_result.score`) - 技能: `execute_skill` 注入真实 `StoryContext`,`SkillExecutor` 实现真正 LLM 调用 - 自适应学习: FrontstageApp accept/reject 接入 `record_feedback`,FeedbackRecorder 数据源激活 - 审计: `LlmService::generate` 完成后调用 `log_ai_usage`,AI 调用日志写入数据库 - 配额: auto_write/auto_revise 错误处理识别配额关键字,触发 Toast 提示 - **P1 功能补全 (8 项)**: - ContinuityEngine: 补全 timeline + character_emotion + relationship 检查,5/5 全部实现 - 一键创作: `CreationWorkflowEngine` 每阶段发射 `workflow-progress` 事件 + QualityReport 填充 - SceneRepository: 新增 5 个单元测试(create/get/update/delete/reorder),Rust 测试 139→144 - hooks/index.ts: 补全 `useCommentThreads` 等 6 个 Hook 导出 - 类型: `ChangeTrack.scene_id` 改为 `string | undefined`,与后端 `Option` 对齐 - 评论: RichTextEditor 已解决评论支持「重新打开」 - 变更追踪: 修订模式增加单条 change 独立接受/拒绝按钮 - 清理: 移除弃用 `check_ai_quota` IPC 注册 - **P2 优化 (6 项)**: - 概念统一: Sidebar `chapter_count` 显示从"场景"改为"章" - 滑块: SceneEditor 置信度 `step` 从 0.05 改为 0.1 - 拆书转故事: 人物 background 合并 personality + appearance,场景 summary 保存为 content - 伏笔看板: 幕后新增 Foreshadowing 页面,支持 setup/payoff/abandoned 状态管理 - 技能 Hook: 6 个关键业务点(create_chapter/character/scene、AI write、world_building update)激活 Hook 调用 - 孤儿表: 评估 `world_rules`/`settings`/`character_states`,保留兼容 - 编译: `cargo check` 零错误,`cargo test` 144/144,`npm run build` 通过 - **v3.5.2 全功能落地:剩余 7 项修复完成** (2026-04-22) - #17 auto_revise 取消/进度事件:后台任务模式 + 4 阶段进度 + 取消支持 - #20 confidence_score:Scene 类型补全 + SceneEditor 置信度滑块 - #16 MCP 持久连接:全局连接池 + disconnect/get_connections + DuckDuckGo 真实搜索 - #19 一键创作按钮:Stories 页面入口 + run_creation_workflow 调用 - #18 StyleDNA UI:stories 表 style_dna_id + 前端选择模态框 + 创作注入 - #15 技能系统补全:execute_skill 异步 LLM 调用 + 2 个缺失技能(角色声音/情感节奏) - #14 意图引擎接入:RichTextEditor 聊天栏 parseIntent → 路由 → executeIntent - 139 Rust tests + 前端构建全部通过,版本号统一 3.5.2 - **v3.5.1 全面功能审计与修复** (2026-04-22) — 13 项关键修复 - 自动修改: 结果应用到编辑器 + 保存到数据库 - 拆书: 书名/作者持久化、convert_to_story story_id 修复、store_embeddings、进度 100%、心跳闪烁修复 - 场景模型: scene_versions 表生产环境补建、conflict_type 列索引修复、版本快照全字段检测 - AI 核心: AgentOrchestrator 闭环集成、ContinuityEngine/ForeshadowingTracker 写作流集成、AdaptiveGenerator 动态参数应用、auto_write Ingest 触发 - Inspector: JSON 结构化输出 + 三层解析增强 - LLM: 取消机制实现、useLlmStream 真实流式 - StyleDNA: 内置风格自动种子化、CreationWorkflowEngine 暴露命令 - 测试: Rust 139 全部通过,前端构建通过,已推送 GitHub - **v3.5.0 拆书体验升级** (2026-04-21) — 进度提示 + 取消支持 - 后端: `BookAnalyzer` 5 步 Pipeline 每个子步骤发送详细进度,人物/章节逐块汇报 - 前端: `AnalysisProgress` 8 步骤指示器 + 百分比 + 块处理信息,告别"只见转圈" - 取消: `TaskExecutionContext.is_cancelled()` + analyzer 循环检查 + `cancel_book_analysis` IPC - 数据库: `reference_books` 新增 `task_id` 字段 + Migration 18 - 测试: Rust 139 全部通过,前端构建通过 - **v3.4.0 智能化创作系统** (2026-04-18) — 5 阶段重构 - Phase 1 地基重构: `StoryContextBuilder` 真实 DB 上下文, `QueryPipeline` 四阶段检索, `ContinuityEngine`, `ForeshadowingTracker` — 27 tests ✅ - Phase 2 方法论注入: 雪花法/场景节拍/英雄之旅/人物深度 + `MethodologyEngine` + `AgentOrchestrator`(Writer→Inspector 闭环) — 34 tests ✅ - Phase 3 风格深度化: `StyleDNA` 六维模型, `StyleAnalyzer`, `StyleChecker`, 10 经典作家 DNA, `StyleDnaRepository` — 45 tests ✅ - Phase 4 自适应学习: `FeedbackRecorder`, `PreferenceMiner`(5 维启发式), `AdaptiveGenerator`(动态 temperature/top-p), `PromptPersonalizer` — 54 tests ✅ - Phase 5 工作流闭环: `CreationWorkflowEngine`(7 阶段), `QualityChecker`(4 维评估) — 63 tests ✅ - 版本号统一 3.3.0→3.4.0,Logo 生成全平台图标包 - **Freemium 付费系统** (2026-04-18) - 后端: `subscriptions`/`ai_usage_logs` 表 + `SubscriptionService`(v0.7.3 移除配额计量,改为功能订阅开关)+ Tauri IPC 命令 - 前端: `useSubscription` Hook + `SubscriptionStatus` 指示器 + `UpgradePanel` 付费引导 + 功能解锁提示 - 策略: "功能订阅制" — Free 用户可用基础写作/场景/角色/知识图谱;Pro 解锁 Pipeline(Refine/Review/Finalize)/ 拆书 / 自动续写 / 自动修改 - Agent 分层: 免费版 max_tokens 1000 + 简化 prompt;专业版完整能力 - 优化: `has_feature_access` 细粒度权限 / `AppError::SubscriptionRequired` 错误码 / session 冷却 / 离线缓存 / 防抖修复 — 9 项 - **幕前排版与 AI 续写优化** (2026-04-17) - 段落间距收紧 + 首行缩进 2em,底部栏 padding-bottom 增至 10rem - 自动续写:接受 AI 生成后自动触发下一轮续写 - Zen 模式绝对纯净:隐藏所有 AI UI 元素 - **TaskService 全局共享修复 + 集成测试建设** (2026-04-19) - 关键 Bug: `TaskService` 未全局共享 → 每个 command 新建实例 → `BookDeconstructionExecutor` 丢失 → 拆书功能不可用 - 修复: `TaskService` 泛型化 + 手动 `Clone` + `app.manage(task_service)` + `State<'_, TaskService>` - 缓存修复: `useSetActiveModel` `invalidateQueries({ queryKey: ['settings'] })` - 单元测试: Rust 71 新增(settings 16 + task_system 13 + repositories 14 + validation 20)+ 前端 21 新增 - 集成测试: Rust 5 新增(executor registry 共享、任务生命周期、调度器、无执行器失败、拆书去重) - 测试总计: Rust 139 + 前端 21 = 160 tests 全部通过 - **拆书功能 + 任务系统 + 向量化存储** (2026-04-19) - 后端: `book_deconstruction` 模块 — parser/chunker/analyzer/repository/service/commands - 前端: `BookDeconstruction` 页面 + 6 个子组件 + `useBookDeconstruction` Hooks - 任务系统: `task_system` 模块 — models/repository/scheduler/heartbeat/executor/service/commands (8 IPC 命令) - 拆书改为 `BookDeconstructionExecutor` 任务执行,心跳保活 + 进度推送 - 向量化: 场景/人物 embedding 自动生成并入库 LanceVectorStore - 数据库: 5 张新表 (tasks + task_logs + reference_books + reference_characters + reference_scenes) + 9 个索引 + Migration 16/17 - **拆书功能** (2026-04-19) - 后端: `book_deconstruction` 模块 — parser/chunker/analyzer/repository/service/commands - 前端: `BookDeconstruction` 页面 + 6 个子组件 + `useBookDeconstruction` Hooks - 支持 txt/pdf/epub 解析,三层 LLM 分块分析策略,生成小说类型/世界观/人物/章节/故事线 - 一键转为故事项目,参考素材库独立存储,向量化接口预留 - 新增 3 张数据库表 + 4 个索引 + Migration 16,6 个单元测试 - **任务系统 + 拆书改任务 + 向量化存储** (2026-04-19) - 后端: `task_system` 模块 — models/repository/scheduler/heartbeat/executor/service/commands (8 IPC 命令) - 前端: `Tasks` 页面 + `useTasks` Hooks,状态分组/心跳指示器/进度条/执行日志 - tokio::time 调度器支持 once/daily/weekly/cron,每任务互斥锁防重叠,心跳检测60秒扫描 - 拆书分析改为 `BookDeconstructionExecutor` 任务执行,每步分析后心跳保活 - 向量化存储接入 LanceVectorStore:场景/人物 embedding 自动生成并入库 - 新增 2 张数据库表 (tasks + task_logs) + 5 个索引 + Migration 17 ### 编译状态 - `cargo check` ✅ | 警告: 0(新增 `LearningPoint` 结构体,`RecordFeedbackRequest` 字段 `scene_id`/`chapter_id` 预留未读警告已存在) - `cargo check --release` ✅ | 警告: 0 - `cargo test` ✅ 217/217 - `npm run build` ✅ - `npm run build` ✅ - `cargo test` ✅ 193/193 --- ## [v5.1.0] - 幕前幕后自动关联对齐 ### 核心升级 - **Chapter↔Scene 双向映射**: 自动关联,幕前切换章节同步切换场景 - **统一实时状态中心**: 所有数据修改自动同步,前后台零延迟对齐 - **Bootstrap 自动加载**: 创世完成后幕前自动加载新故事并切换到第一章 - **AgentOrchestrator 闭环**: Writer 生成后自动质检→风格检查→改写 ### 技术细节 - Migration 37: `chapters.scene_id` + `scenes.chapter_id` - 后端 `state_sync` 模块: `SyncEvent` 枚举 + `StateSync` 发射器 - 前端 `useSyncStore` Hook: 监听 `sync-event`,自动 `invalidateQueries` - `show_backstage` 接收 `story_id` 参数,自动导航定位 ### 编译状态 - `cargo check` ✅ 零错误 - `cargo test` ✅ 193/193 - `npm run build` ✅ --- ## [v5.0.0] - 创世引擎:一键创世,万物关联 ### 核心升级 - **一键生成完整小说世界**: 输入"写一部都市玄幻小说",自动生成故事概念 + 第一章正文 + 完整大纲 + 角色性格小传 + 场景规划 + 伏笔埋设 - **7步创世工作流**: 构思 → 开篇 → 世界 → 大纲 → 角色 → 场景 → 伏笔 → 关联 - **自动幕后卡片创建**: 所有生成内容自动在幕后对应栏目创建卡片 ### 新增功能 - **故事大纲系统**: `story_outlines` 表 + 3幕结构自动生成 + 前端概览面板 - **角色系统增强**: appearance/gender/age 字段 + 角色关系图谱 - **伏笔自动生成**: Bootstrap 自动埋设 3-5 个核心伏笔 - **知识图谱自动构建**: 角色/场景/伏笔自动创建 KG 实体 - **前后台智能联动**: 完成后自动导航到 Stories 并高亮新故事 ### Bug 修复 - **后台窗口白屏修复**: 隐藏后重新显示时出现空白/白屏 - **后台卡片显示修复**: Bootstrap 后大纲/角色/场景/伏笔卡片不显示 - **根因**: (1) 后台隐藏时无法接收事件 (2) 前后台独立 Zustand store 未同步 (3) 页面未监听 DataRefresh (4) 无自动加载 - **修复**: App.tsx 自动加载 + FrontstageApp 通知同步 + 页面监听 backstage-data-refreshed 并 invalidate queries ### 数据库迁移 - Migration 34: `story_outlines` 表 - Migration 35: `characters` 增强 + `character_relationships` 表 - Migration 36: `scenes.foreshadowing_ids` ### 编译状态 - `cargo check` ✅ 零错误 - `cargo test` ✅ 193/193 - `npm run build` ✅ - `cargo tauri build` ✅ — Windows `.exe` (36MB) + `.msi` (14MB) + `-setup.exe` (10MB) 已生成 --- *最后更新: 2026-06-21 - v0.22.3 钥匙串彻底移除* --- *归档于 2026-07-04。后续版本摘要请见根目录 AGENTS.md。*