Skip to content

正文即界面:交互重设计(2026-08-17) ​

P1(单栏主场 + 段落气泡 + 目录抽屉 + 章首状态卡 + 章尾下一章卡)已于 2026-08-17 实施。 P2(AI 窄栏 AiDock:随便聊/这章整体不满意双通道 + ③④档意见清单 + 整章优化对照卡; ReviseCard/PolishPanel/ReviseChat 退场)已于同日实施。 P3(②档多处批注改:AnnotatedReviseCard 逐条字符级 diff 接受/拒绝,paraEdit 段号+快照守卫写回; 选段/整章统一走 charDiff/DiffText 验收)已于同日实施。 P4(移动端壳收尾 + 章首交稿单 + 书房入口:ChapterStatusCard 升级为一句话自检交稿单—— 校对快照 + 一致性冲突计数,要修的一键带进 diff 验收流;移动端全屏正文 + 顶栏目录/任务中心、 废除 FAB/动作扇;书房经全书区页签进入;features/README 文档更新,官网截图待手动刷新) 已于同日实施。

本文档取代 docs/07 的 write 区设计(StageBar/动作条/动作卡族/参考抽屉那一套), setup 开书向导、book 全书区、settings 的功能保持不变,只改出场方式。 方向来源:用户是「AI 生成,我审改」的主编式创作者;上一版失败在——七个动词、 状态机词汇、卡片堆叠、正文被动。本轮换一个交互隐喻:书本身就是 app。

0. 设计纲领 ​

  • 正文即界面:打开 app 就是这本书的正文。阅读即审改,选中一段即可操作, 没有"工作台"和"功能页面"之分。
  • 对话即遥控器:AI 是住在正文边上的合著者。一条可收起的对话窄栏常驻, 它永远知道你在看哪章、选中了哪段——你说人话,它干活。
  • 修改按四级梯度,永远先花最少的 token:
    档位场景手段
    ① 选段定点改某几句/段不行选中 → 说一句 → 只改这段
    ② 多处批注改问题分散在好几处,都是局部边读边批注 → 一次性定点改
    ③ 整章优化情节对,文风/节奏/结构整体不行对话梳理意见清单 → 锁情节整章重润
    ④ 整章重生成情节本身不对对话梳理意见清单 → 推倒重跑
    • 默认落在最低档;升档永远由用户确认,不由 AI 自行扩大。
    • ③④档动手前,AI 必须先输出修改意见清单(什么问题/涉及哪里/怎么改/ 建议哪档),用户可增删改,确认后才执行——token 花在刀刃上,动手前永远 知道它要干嘛。
    • ③档强制锁情节(沿用现有润色事实校验);情节要动必须走④档。
  • 验收即 diff:AI 改完不直接覆盖。选段改→段内 inline diff 逐条接受/拒绝; 整章改→变动段落高亮+段内 diff,可整收可回退。旧版永远留快照(已有)。
  • 说人话:界面不出现 quarantined/放行/门禁/pending_review。章状态只有三种 用户语言:「在写」「写好了,等你过目」「有问题,等你拍板」(外加修饰徽标 「大纲已变」)。chapterStage.ts 的六阶段推断保留为内部实现,对外映射到三态。
  • 功能一个不少:圣经/伏笔/级联更新/版本/连写/投稿导出全部保留,换出场方式。

1. 信息架构 ​

/project/:id/setup    开书向导(现状保留)
/project/:id/write    主场=正文(本文档全部焦点)?ch=N
/project/:id/book     书房=全书管理层(看板/人物/圣经/伏笔/投稿/体检/翻新,现状保留)
/project/:id/settings 书级设置(现状保留)
/project/:id/read     只读对照窗(现状保留)
  • 主场没有左栏章节轨。目录是可唤出的抽屉(点章题/Ctrl+K/移动端顶栏), 含搜索与状态点;连写入口收进目录底部(「让 AI 连续写 N 章」)。
  • 书房是第二层级,从主场顶栏一个入口进入;它不参与日常审改循环, 沿用现有 book 区组件,本轮不重做。
  • URL 只保留 ?ch=N;act=/ctx= 两个参数族随动作卡与参考抽屉一起废除。

2. 主场布局(桌面) ​

┌────────────────────────────────────────────────────┐
│ 顶栏:← 书名 · 第 N 章《标题》(点=目录) 状态一句話  ⚙︎ ▶│
├──────────────────────────────────────────┬─────────┤
│                                          │ AI 窄栏 │
│            正 文(居中,~760px)            │ (可收成 │
│                                          │  细条)  │
│  [章首] 交稿单(仅生成后/有问题时出现)      │         │
│  [章首] 本章蓝图(默认收起一行)            │  对话流  │
│                                          │         │
│   正文段落……(点选段落→气泡)               │         │
│                                          │ ┌─────┐ │
│                                          │ │输入框│ │
│  [章尾] 下一章卡:「第 N+1 章 — 让 AI 写」  │ └─────┘ │
└──────────────────────────────────────────┴─────────┘
  • 单栏正文是视觉重心,不再有永久三栏。无底部动作条、无 StageBar。
  • 章首两张轻卡:交稿单(见 §5)、本章蓝图(一行可展开)。两者都可永久收掉, 收了不再主动出现。
  • 章尾下一章卡:唯一常驻的"推进"入口。章写完了显示「让 AI 写下一章」; 全部写完显示「写完了,去书房导出/投稿」。
  • AI 窄栏(右侧,默认 320px,可收成 40px 细条):唯一的对话入口,身兼三职—— ①档的"说一句就改"、③④档的意见梳理、随便问("这章沈眠的动机站得住吗")。 收窄条时新消息来了有圆点提示。
  • 快捷键与 Ctrl+K 命令面板保留(动作改为新体系下的等价物:生成下一章/ 打开目录/AI 栏聚焦/验收通过)。

3. 正文交互:段落气泡(①档与手改) ​

把现有全屏 Reader 的选段三件套(Reader.tsx 点选段落→para-tools 气泡) 上移为主场正文的默认能力:

  • 点选段落(桌面点击/移动端轻点)→ 段落左侧出现气泡:
    • 💬 改这段:气泡内小输入框,说一句("对话太端着"/"扩写打戏")→ 走选段对话端点(chapters/{n}/discuss,可返回 suggestion)或 polish-fragment → 段落就地变成 diff 卡(见 §6),接受/拒绝/再改。
    • ✍️ 手改:该段就地变为自适应高度编辑框(不再是整章 textarea 切换), 保存走 nthParaSpan 定位 + PUT content 整章写回(现有链路),带原文 比对守卫防串段。
  • 划词(任意文本区间)选择:本轮不做,选择粒度=整段。中文段落短, 整段粒度已覆盖绝大多数"这段不行"的场景;留作后续增强。

4. 多处批注改(②档) ​

  • 阅读中对某段点「批注」(气泡第三项/段落长按菜单),挂一句话; 批注以段落左侧标记呈现,同时汇聚到 AI 窄栏的「待处理批注」列表。
  • 批注数据 = {paraIdx, 原文快照, 意见};正文若已变动,用快照比对判定失效 (复用 nthParaSpan 守卫思想),失效批注标灰提示重新指认。
  • 批注攒够后点「按批注改」→ 新端点 POST /chapters/{n}/revise-annotated-async (job):把批注清单+蓝图+上下文发给 LLM,只改写被指认的段落,返回逐段 旧/新对 → 前端逐段 diff 验收(逐条接受/拒绝),接受的段落一次性 PUT content 写回并留快照。
  • 此端点是本设计唯一需要新增的后端能力;①③④档端点全部现成 (polish-fragment / polish chapter 锁情节 / generate-async revision)。

4·五、跨章标记 + 全书批修(2026-09 增补,治「批注跨不了章」) ​

  • 原版批注是内存状态,切章/刷新即丢;现批注落库(chapter_marks 表, 身份仍是 para_idx + 原文快照),边读边攒、跨章不丢,失效判定不变。
  • 全书批修:攒下的标记跨章生效——AI 窄栏写一句总描述(如「所有铁锈玫瑰 的描写全部换成全新意象」)→ POST /marks/revise-async(job):逐标记复用 polish_fragment(总描述叠加该标记自己的意见),只产出待验收替换对、不落库; 结果按章分组出验收卡(复用 AnnotatedReviseCard),逐条 diff 验收、接受走 paraEdit 快照守卫写回并销账对应标记;快照失配的标记自动跳过并计入 stale。 与按批注改的关系:后者仍是「当场、单章」的快捷路径,前者是「攒着、跨章」的批量路径。

5. 章首交稿单(AI 自检) ​

  • 生成/重生成完成后,章首出现一张轻卡,一句话结论开头: 「第 12 章写好了——校对 2 处小错,AI 味正常,和设定没冲突。」
  • 数据全部来自现有信号,不新增自动 job:生成时自动校对的快照 (GET /proofread)、一致性门禁结果(quarantined)、AI 味分数。 可展开看明细;「按建议修复」把校对问题带进 diff 验收流。
  • 门禁拦下(quarantined)时不说"放行",说:「这章有 N 处和设定冲突, 等你拍板」→ 展开看问题 → 每条「按建议改」(现有 apply-revision)或 「就这样吧」(现有 gate-release,确认制保留)。
  • 评分(主审四维)保持手动,入口在 AI 栏(「给这章打个分」)与交稿单 展开区;不打分不挡路。

6. 验收与 diff ​

  • 新增轻量 diff:不引第三方库,手写字符级 LCS diff(中文按字切粒度合适, 3000 字一章性能无压力)。视觉沿用校对卡的 .diff-old/.diff-new (删除线红/绿字)基调。
  • 段内 diff 卡:①②档的验收单元——该段原地显示删增高亮, 按钮=接受/拒绝/「再改改」(带原意见回到对话)。
  • 整章验收(③④档):默认显示新版正文,变动段落左侧带标记; 点「看改动」切换为 diff 模式(逐段删增);「整收」「回退到旧版」 (现有 versions 快照)兜底。
  • 任何接受/写回都走现有快照机制,错了永远能回。

7. 移动端 ​

移动端不是桌面的压缩,是这套交互的天然形态:

  • 全屏正文,顶栏只有:←、章题(点=目录抽屉)、状态点。
  • 底部一条输入条(不是动作栏):「和 AI 说点什么…」——点开=AI 对话 全屏 sheet;有选中段落时输入条自动带上「第 N 段」引用。
  • 段落轻点选中出气泡(改这段/批注/手改),手势与桌面一致。
  • diff 卡、交稿单、目录、书房全部为全屏 sheet(复用现有 m-sheet 族)。
  • FAB、底部四键栏、动作扇全部废除;左右滑切章保留。
  • 任务中心入口留在顶栏(生成是长任务,需要看得见)。

8. 组件迁移映射(什么死、什么活) ​

现有去向
StageBar / chapterStage死(外壳);deriveStage 纯函数保留,改输出三态人话
底部动作条 / FAB / 动作扇死
动作卡族(act=revise/polish/proofread/review)死;能力分别由①③档、交稿单、AI 栏吸收
ChapterRail 章节轨改名目录抽屉,删行内操作(生成/重写框),保留搜索/状态点/连写入口
RefDrawer 参考抽屉拆:蓝图→章首卡;审核/版本→交稿单+diff 模式;人物/伏笔/圣经→书房(现状已有)
ReviseChat 重写研讨升级为常驻 AI 窄栏,不再绑死"重写"一个目的
Reader 选段三件套上移为主场正文默认能力;全屏 Reader 保留为纯阅读+对照窗
PolishPanel / ProofreadCard / ReviewCard死(外壳);端点与逻辑被①③档/交稿单复用
VersionCompare 左右对照保留为「版本」查看,增补 diff 模式
WritePanel(1121 行状态中枢)拆:主场页壳 / 正文交互 / AI 栏 / 批注与验收 四个模块

9. 技术要点与风险 ​

  • 段落寻址:splitParas+nthParaSpan 现成;段落身份=下标+原文快照守卫, 不引入新 id 体系(多处批注并存靠快照比对兜底失效)。
  • diff:手写字符级 LCS,无新依赖。
  • 对话:接受现状非流式(全量 messages POST + spinner);窄栏输入框本地 乐观追加。流式留作后续。
  • 新端点只有一个:revise-annotated-async(②档批量定点改),job 模式, 复用 pollJob/useJob 基建。
  • 风险:① 段内 diff 的字符级算法需测试覆盖(纯函数,好测); ② AI 窄栏上下文组装(当前章+选中段+批注)的 prompt 设计需后端配合, 第一版先用现有 discuss/revise-discuss 端点的注入逻辑,不重写后端 prompt; ③ WritePanel 拆分是本轮最大工程量,拆分时状态下沉到各模块,URL 仍是 ch 的唯一来源。
  • 暗色主题:全部新样式只用现有 CSS 令牌,[data-theme="dark"] 已整组 覆写,新增组件不得引入硬编码颜色。

10. 分期 ​

  • P1 正文活起来:单栏布局+目录抽屉+段落气泡(①档+手改)+章尾下一章卡; StageBar/动作条/动作卡/RefDrawer 退场。
  • P2 AI 窄栏:常驻对话栏(①档入口+自由问答),③④档意见清单卡 (梳理→档位建议→确认→执行)。
  • P3 ②档批注+统一 diff 验收:新端点、批注流、段内/整章 diff 模式。
  • P4 移动端壳+交稿单+书房入口收尾,文档(features/README/官网截图)更新。

每期门禁不变:npx tsc -b、npx eslint <改动文件>、npx vitest run 全绿。

基于 Apache License 2.0 开源