Repository navigation
OpenFicM 0.11.0
新增:错误重试可配置、任务可取消、整库备份,以及十余处稳定性修复
本版实现 GitHub issue #4,并从一次全面代码审查中修掉了搜索、覆盖、导入、下载等链路上的多处隐患。
错误重试与超时:可配置(issue #4)
此前请求失败的重试次数、429 限流与 5xx 服务器错误的重试策略、超时后是否重发都是写死的,遇到网络不稳或供应商限流时只能干等。
现在“设置 → 连接”里新增:
- 请求超时:单轮请求的等待上限(10 秒到 5 分钟可调)。
- 请求失败重试次数:网络错误等一般失败的重试上限(1–5 次,默认 3)。
- 服务器错误重试次数:5xx 错误的重试上限(1–3 次,默认 2)。
- 限流重试次数:HTTP 429 的重试上限(1–3 次,默认 1)。
- 超时后自动重发:默认关闭。开启后超时的请求会按上面次数重发;对计费供应商而言一次超时可能被计成多次调用,开启前请确认。
所有重试间隔沿用原有的指数退避;设置读取带 30 秒缓存,不会在每次请求时反复查库。
智能体任务:可取消、不再带入失败记录
- 发送按钮在任务运行中变为红色的“停止”按钮,点一下立即中止本轮智能体(模型请求与工具调用链路上都已接入取消信号)。
- 切换到其他作品时,旧作品的进行中任务自动中止,避免它继续写旧作品的章节。
- 此前失败的任务消息仍会留在会话记录里,但不会再被当作上下文发给模型——避免模型把上次失败的工具调用当成范例模仿。
- 长会话截取历史时,如果窗口起点落在 assistant 消息上会向前修剪到最近一条 user 消息,避免模型看到没有用户提问开头的“半截对话”。
章节搜索:中文按子串命中
全文检索表用的是 SQLite FTS5 的 unicode61 分词器,不为中文分词,所以“林雨晴”三个字搜“雨晴”搜不到。现在查询里只要含中文,就直接走 LIKE 子串匹配;纯英文查询仍走 FTS,且 FTS 查不到时回退到 LIKE,保证“作者觉得明明写过却搜不到”的情况不再出现。
章节与角色/世界书编辑:拒绝清空式误操作
write_chapter与edit_chapter拒绝空白正文,从源头堵住“模型手滑把整章清空”的事故;如需删除整章,必须先与用户确认。edit_chapter覆盖前会先把当前已保存的正文快照一份草稿,再写入新内容,再快照新稿——即使中途出错也能从草稿里找回旧版本。edit_character拒绝把角色设定改成空白;edit_world_entry拒绝把条目内容改成空白。
文风蒸馏:双击不再开出两个任务
“开始蒸馏”按钮此前只靠 store 状态判断任务是否已存在,从点击到状态落库之间有一个窗口期,快速双击会同时起两个蒸馏任务。现在改用同步的 AbortController 互斥:第一下点击立刻占位,第二下点击直接返回。
EPUB 参考书:缺章拒绝导入
部分 EPUB 的 manifest(文件清单)与 spine(阅读顺序)不一致,解析失败的章节此前会被静默跳过,导致参考书缺章但用户不知情。现在只要有一个章节解析失败,整个导入会被拒绝并明确提示“缺 N 章,为避免得到缺章的参考书已取消导入”。
备份:一键导出整库,删作品前可先备份
- 设置 → 通用 → 新增“导出全部数据备份”:把 SQLite 数据库(作品、章节、角色、世界书、会话)与文风库文件打成一个 zip,经系统分享面板保存到任意位置。
- 写作页删除作品的确认弹层里新增“先备份再删除”选项,点一下先触发上面那个备份流程,再回到删除确认。
Hugging Face 模型下载:主站失败自动走镜像
模型下载此前只连 huggingface.co,国内网络环境下经常失败。现在下载失败会自动换 hf-mirror.com 重试,两个源共用同一份 SHA-256 校验,下到一半切换源不会留下半截文件。
版本对齐
app.json、package.json 与 android/app/build.gradle 三处版本号此前不一致(0.10.3 / 0.10.3 / 21 与 10),本版统一为 0.11.0 / versionCode 22。
兼容性
- 沿用 0.7.0 起的正式签名证书,可直接覆盖升级。
- applicationId
com.openfic.mobile,versionCode 22,minSdk 28,仅 arm64-v8a。 - 不涉及数据结构与迁移,升级不影响任何本地作品数据。