Skip to content

suifengwudong/Qingmo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

76 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

清墨 - 轻量化小说写作结构化工具

项目概述

清墨是一款专为小说创作者打造的轻量化结构化写作工具。它复刻了VS Code的核心UI体验,剔除冗余功能,专注于小说写作的结构化需求。通过Markdown(内容)+ JSON(设计)为核心载体,支持人设/章节图形化调整,预留LLM辅助拓展能力,全程本地运行,无云端依赖。

核心目标

  • 体验层:100%复用VS Code的核心UI/交互逻辑(左侧工具栏、树形导航、分栏编辑、快捷键),降低用户学习成本。
  • 轻量化:安装包体积≤8MB,启动时间≤0.5秒,内存占用≤50MB(无浏览器内核/冗余进程)。
  • 结构化:以Markdown+JSON为核心,实现小说内容、人设、章节的结构化管理,适配LLM输入。
  • 场景化:提供小说专属的图形化人设/章节调整、大纲/伏笔管理功能,无编程相关冗余模块。

目标用户

小说创作者(侧重结构化写作、适配LLM辅助创作的用户)。

设计原则

  • 用户侧极致轻量化:仅保留写作核心功能,剔除插件市场、终端、调试、Git、Copilot等所有冗余模块;仅本地纯文本存储(MD/JSON),无数据库/云端同步。
  • VS Code UI体验复用:复刻左侧工具栏(图标化切换面板)、树形项目导航、分栏编辑区、快捷键体系(如Ctrl+S保存、Ctrl+/注释)。
  • 结构化优先:所有内容最终落地为Markdown/JSON结构化文本,图形化操作仅为交互层,最终同步到文本文件。
  • 小说场景专属:功能模块仅围绕“内容写作、人设管理、章节调整、大纲伏笔、LLM辅助”设计,无通用编辑冗余功能。
  • 本地优先:所有操作本地完成,无强制联网、数据上传,LLM优先支持本地轻量模型部署。

产品架构设计

整体架构(分层设计)

  • UI层:复刻VS Code风格界面,使用egui实现轻量化渲染。
  • 交互层:图形化操作(人设卡片、章节时间轴、大纲树等),与文本层双向同步。
  • 数据层:纯文本存储(Markdown/JSON),支持本地文件操作。
  • 拓展层:LLM辅助接口,支持本地模型部署。

核心模块拆解

模块1:小说编辑模块(📝)- 核心写作层

  • 项目树形导航:复刻VS Code项目树,仅显示小说项目目录:Content(MD内容文件)、Design(JSON设计文件)、废稿文件夹;支持折叠/展开、重命名、删除。
  • 双分栏编辑区:左侧Content栏:Markdown编辑(保留VS Code语法高亮、块折叠、快捷键);右侧Design栏:JSON编辑(自动生成模板,与MD实时联动)。
  • 本地文件操作:新建/保存/导出MD/JSON文件,无自动备份、版本历史(避免冗余)。

模块2:人设&章节模块(👤)- 图形化调整层

  • 人设图形化编辑器:卡片式布局:人物卡片(显示姓名/核心属性),拖拽卡片绘制关系线(敌对/友好/亲属);编辑卡片属性自动同步到Content/人设.md和Design/人物配置.json。
  • 章节时间轴编辑器:横向时间轴:显示章节节点,点击添加/删除章节,拖拽调整顺序;节点可标注“高潮/伏笔/过渡”,同步到Design/章节结构.json。
  • 一键同步:将图形化调整结果同步到MD/JSON文件,支持反向同步(修改文本后更新图形化界面)。

模块3:大纲&伏笔模块(🧭)- 结构化管理层

  • 大纲树形编辑器:复刻VS Code树形折叠逻辑,拖拽调整大纲层级(卷→章→节→核心情节);支持折叠/展开,同步到Content/章节大纲.md。
  • 伏笔标签管理:标签式布局:添加伏笔标签(如“伏笔1:XX”),拖拽关联对应章节;支持搜索、筛选,同步到Content/伏笔.md。
  • 进度追踪:极简进度显示:仅展示章节完成度(已写/待写),无冗余统计/分析功能。

模块4:LLM辅助模块(🤖)- 拓展层

  • 结构化补全:读取Content的Markdown层级,调用LLM补全正文/对话/场景描述;结果直接插入编辑区。
  • 人设对话优化:基于图形化人设的属性(性格/背景),优化Content中的人物对话风格。
  • 本地模型适配:支持Llama 2 7B、Phi-2等轻量模型本地部署,无强制联网调用云端API。
  • 极简配置:仅保留“模型选择、温度调节、补全长度”3个配置项,无冗余参数。

交互设计

整体布局(复刻VS Code核心布局)

┌─────────────────────────────────────────────────────────────────────────────┐
│ 顶部菜单栏(极简):文件/编辑/视图/设置                                     │
├────────┬───────────────────────────────────────────────────────────────────┤
│ 左侧工具栏(图标化)│ 左侧面板(随工具栏切换)                              │ 中央编辑区(双分栏)       │
│ 📝(小说编辑)     │ ┌──────────────────────────────────────────────────┐ │ ┌──────────────┬──────────────┐ │
│ 👤(人设&章节)    │ │ 项目树:Content/Design/废稿                       │ │ │ Content(MD)│ Design(JSON)│ │
│ 🧭(大纲&伏笔)    │ │ (VS Code树形折叠逻辑)                           │ │ │ 编辑区       │ 编辑区       │ │
│ 🤖(LLM辅助)      │ └──────────────────────────────────────────────────┘ │ └──────────────┴──────────────┘ │
│                    │ ┌──────────────────────────────────────────────────┐ │                              │
│                    │ │ 人设卡片+章节时间轴(图形化)                     │ │                              │
│                    │ └──────────────────────────────────────────────────┘ │                              │
│                    │ ┌──────────────────────────────────────────────────┐ │                              │
│                    │ │ 大纲树+伏笔标签(轻量化可视化)                   │ │                              │
│                    │ └──────────────────────────────────────────────────┘ │                              │
│                    │ ┌──────────────────────────────────────────────────┐ │                              │
│                    │ │ LLM辅助配置+功能按钮(极简)                      │ │                              │
│                    │ └──────────────────────────────────────────────────┘ │                              │
└────────┴───────────────────────────────────────────────────────────────────┘

核心交互规则(复用VS Code习惯)

  1. 左侧工具栏:点击图标切换左侧面板,hover显示模块名称(如📝:小说编辑)。
  2. 项目树:右键菜单仅保留“新建文件/文件夹、重命名、删除、打开”,无VS Code的“在终端中打开、复制路径”等冗余选项。
  3. 编辑区:复用VS Code快捷键(Ctrl+S保存、Ctrl+/注释、Ctrl+Z撤销、Alt+鼠标选中块);Markdown语法高亮与VS Code一致。
  4. 图形化操作:拖拽操作后自动提示“是否同步到文本文件”,无自动同步(避免误操作)。
  5. LLM辅助:点击“补全”按钮后,结果插入编辑区光标位置,保留撤销功能。

技术选型

核心技术栈(用户侧轻量化优先)

  • 底层语言&框架:Rust + egui(极致轻量化,打包体积≤5MB,内存占用极低,支持本地LLM部署)。
  • 文本解析引擎:tree-sitter(MD/JSON结构化解析,轻量、高性能,支持AST解析,适配小说文本的层级/标签提取)。
  • 图形化渲染:egui(轻量化,无冗余动画,内存占用低)。
  • 本地存储:纯文本文件(MD/JSON,无数据库依赖,轻量化,用户可直接用其他编辑器打开)。
  • LLM接口:llm-rs(支持本地轻量模型部署,适配主流云端API)。

轻量化技术要点

  1. 编译优化:Rust项目开启release模式,裁剪无用依赖,静态编译。
  2. 资源裁剪:仅保留核心图标/样式,无图片/字体冗余,复用系统字体。
  3. 进程管控:仅启动主进程,无后台辅助进程。
  4. 渲染优化:图形化界面仅渲染当前可视区域,不加载全量数据。

轻量化设计细则

  • 安装包体积:≤5MB(Rust+egui方案);剔除所有第三方UI组件冗余、无用依赖。
  • 启动速度:≤0.5秒;无启动加载动画,直接渲染界面,延迟加载非核心模块。
  • 内存占用:≤50MB(编辑单本10万字小说时);无内存泄漏,关闭面板后释放对应资源。
  • 存储占用:仅存储MD/JSON纯文本,无缓存文件/日志文件。
  • 运行时冗余:无自动更新、无日志收集、无广告、无弹窗提示(仅必要操作确认)。

项目里程碑

第一阶段里程碑(MVP)✅ 已完成

里程碑 状态 说明
✅ VS Code 风格 UI 复刻 完成 左侧工具栏、项目树、双分栏编辑区均已实现
✅ 本地 MD/JSON 文件操作 完成 新建/保存/导出/撤销,快捷键 Ctrl+S/Z 已绑定
✅ Markdown 预览渲染 完成 支持标题、粗斜体、代码块、列表、引用等语法
✅ 轻量化基础达标 完成 Rust+egui 方案,打包体积目标 ≤5MB

第二阶段里程碑(场景化能力)✅ 已完成

里程碑 状态 说明
✅ 世界对象编辑器(卡片视图) 完成 人物/场景/道具等对象支持卡片/列表双视图,可管理关联关系
✅ 章节结构编辑器(时间轴视图) 完成 支持树形/时间轴双视图,节点标签(高潮/伏笔/过渡)、完成度追踪
✅ 大纲树与伏笔管理 完成 层级结构编辑、跨节点关联、伏笔新增/解决/同步到 MD
✅ 图形化操作与 MD/JSON 双向同步 完成 世界对象/章节结构/伏笔均可一键同步到对应 JSON/MD 文件
✅ 进度追踪 完成 叶节点完成度进度条,里程碑管理面板

第三阶段里程碑(LLM 辅助层)✅ 已完成

里程碑 状态 说明
✅ LLM 后端接口抽象(LlmBackend trait) 完成 MockBackend(模拟)、ApiBackend(HTTP)已实现,支持 Ollama 和 OpenAI 兼容格式
✅ 非阻塞异步调用(线程+通道) 完成 后台线程发起请求,UI 轮询结果,附带加载指示器与取消按钮
✅ 结构化上下文注入 完成 可一键将世界对象/章节结构注入提示词,实现结构化补全
✅ 本地轻量模型适配(llama.cpp HTTP 服务器) 完成 LocalServerBackend 支持 llama.cpp 原生 /completion 接口,UI 提供启动命令提示
✅ 人设对话风格优化 完成 人物选择器 + build_dialogue_optimization_prompt() 自动注入人物特质/背景/关系,一键优化对话
✅ 提示词快速模板 完成 内置「续写正文/扩写场景/优化对话/生成人物简介」四种模板,PromptTemplate 可扩展
✅ 系统提示词支持 完成 LlmConfig.system_prompt 字段,HTTP API 和本地服务器均可配置系统角色
✅ API + Skill(Agent)架构 完成 Skill trait + 4 内置技能 + SkillSet + AgentBackend(OpenAI 工具调用循环,最多 5 轮),UI 提供 🤖 Agent 模式切换

第四阶段里程碑(稳定性与延展层)✅ 已完成

里程碑 状态 说明
✅ 配置持久化 完成 LLM 配置、MD 预览设置自动保存/恢复到 ~/.config/qingmo/config.json,启动时自动加载上次项目
✅ 反向同步(JSON/MD → 应用状态) 完成 Design/世界对象.jsonDesign/章节结构.jsonContent/伏笔.mdDesign/里程碑.json 恢复图形化界面数据;工具菜单提供单项加载入口;设置中可开启"打开项目时自动反向同步"
✅ 全文搜索 完成 Ctrl+Shift+F 打开浮动搜索窗口,扫描项目内所有 .md/.json 文件,显示文件名+行号+内容摘要,双击结果跳转到编辑器
✅ 导出与备份 完成 文件菜单「导出章节合集」将 Content/*.md 合并导出为单一 Markdown 文件;「备份项目到文件夹」将整个项目目录递归复制到用户指定位置
✅ 拖拽重排 完成 世界对象列表视图支持拖拽排序(egui dnd_drag_source / dnd_release_payload);章节结构顶层节点支持拖拽重排,选中状态随位置正确更新
✅ Markdown 编辑增强 完成 左侧 Markdown 编辑器实时显示非空白字符数(文字数);Ctrl+B 加粗(选中文字自动包裹 **,未选中时插入 **粗体** 模板);Ctrl+I 斜体(同上逻辑)

第五阶段里程碑(打磨与发布就绪)⏳ 规划中

里程碑 优先级 说明
⏳ 自动保存 🔴 高 定时(如每 60 秒)自动将已修改的文件保存到磁盘,防止意外关闭导致数据丢失;状态栏显示"上次自动保存时间"
⏳ 文件树重命名与删除 🔴 高 右键菜单补齐重命名(F2 快捷键)和删除(移入废稿文件夹)两项基础操作;删除前弹出确认对话框
⏳ 亮色/暗色主题切换 🟡 中 在设置窗口提供主题选择(跟随系统 / 亮色 / 暗色),通过 egui::Visuals 动态切换,配置写入 AppConfig 持久化
⏳ 编辑器字体大小配置 🟡 中 在设置中为编辑器(Monospace 字体族)独立设置字号,与预览字号互相独立,Ctrl+滚轮快速缩放
⏳ 关系图谱可视化 🟡 中 在「世界对象」面板增加「图谱」视图:以节点图展示对象及其关联关系(egui 自定义绘图),支持拖拽布局,不依赖第三方图形库
⏳ PDF/纯文本导出 🟢 低 在「导出章节合集」基础上增加纯文本(.txt)导出选项;调用系统打印对话框输出 PDF(跨平台方式:依赖 OS 打印管道)
⏳ 新项目模板 🟢 低 提供「空白项目」「短篇小说」「长篇小说(卷→章→节)」三类模板;选择后自动生成目录结构和初始 MD/JSON 文件

迭代规划

第一阶段:MVP(最小可行产品)- 核心写作层

  1. 完成VS Code风格UI复刻:左侧工具栏、项目树、双分栏MD/JSON编辑区。
  2. 实现本地MD/JSON文件的新建/保存/编辑功能。
  3. 完成轻量化基础:安装包≤5MB,启动≤0.5秒,内存≤50MB。
  4. 核心目标:验证“轻量化+VS Code UI+MD/JSON结构化”核心体验。

第二阶段:场景化能力 - 图形化调整层

  1. 开发人设图形化编辑器(卡片+关系线)、章节时间轴编辑器。
  2. 实现图形化操作与MD/JSON的双向同步。
  3. 开发大纲树、伏笔标签管理功能。
  4. 核心目标:完成小说专属的结构化管理能力。

第三阶段:拓展能力 - LLM辅助层

  1. 接入本地轻量LLM模型(llama.cpp HTTP 服务器;Ollama)。
  2. 实现结构化补全、人设对话优化功能(PromptTemplate + build_dialogue_optimization_prompt)。
  3. 适配主流云端LLM API(OpenAI 兼容格式)。
  4. 引入 API + Skill (Agent) 架构:Skill trait + 4 内置技能 + AgentBackend(工具调用循环)。
  5. 核心目标:完成LLM与结构化文本的联动,LLM 可自主查询项目数据。

第四阶段:稳定性与延展层 - 体验完善

  1. 配置持久化:LLM配置、界面设置自动保存/恢复到本地配置文件。
  2. 反向同步:从 JSON/MD 文件恢复世界对象、章节结构、伏笔到图形化界面(补齐双向同步缺口)。
  3. 全文搜索:跨项目全文搜索(Ctrl+Shift+F),支持正文、人设、章节过滤。
  4. 导出与备份:项目打包为 ZIP,章节导出为纯文本/Markdown 合集。
  5. 核心目标:补齐核心验收标准,提升用户体验稳定性。

第五阶段:打磨与发布就绪 - 产品化收尾

  1. 自动保存:防止意外关闭造成数据丢失,状态栏显示自动保存状态。
  2. 文件树重命名/删除:补齐文件树右键菜单缺失的基础操作(重命名、移入废稿/删除)。
  3. 亮/暗主题切换:UI 视觉配置(跟随系统 / 强制亮色 / 强制暗色),持久化到配置文件。
  4. 编辑器字体大小:编辑器字号独立于预览字号,支持 Ctrl+滚轮快速缩放。
  5. 关系图谱:世界对象「图谱」视图,可视化对象关联关系网络。
  6. 核心目标:消除已知 UX 短板,达到可面向真实用户发布的产品完成度。

核心验收标准

  • 轻量化:安装包≤5MB,启动≤0.5秒,编辑10万字小说内存≤50MB,无后台冗余进程。
  • VS Code体验:工具栏/项目树/编辑区交互逻辑与VS Code一致,快捷键复用率≥90%。
  • 结构化:所有图形化操作可同步为MD/JSON文本,文本修改可反向同步到图形化界面。
  • 场景化:支持人设关系调整、章节顺序调整、伏笔管理,无编程相关功能。
  • 本地优先:所有操作本地完成,无强制联网,可离线使用。

代码结构

src/
├── main.rs                  # 程序入口
└── app/
    ├── mod.rs               # TextToolApp 结构体、核心逻辑(项目/文件/同步/LLM辅助方法)及单元测试
    ├── models.rs            # 数据模型(RelationKind、WorldObject、StructNode、Foreshadow、LlmConfig、Panel 等)
    ├── file_manager.rs      # 文件系统结构(FileNode、OutlineEntry、OpenFile)及 rfd 文件对话框封装
    ├── llm_backend.rs       # LLM后端实现(MockBackend、ApiBackend、LocalServerBackend、PromptTemplate、LlmTask)
    ├── agent.rs             # Agent 架构(Skill trait、4个内置技能、SkillSet、AgentBackend 工具调用循环)
    ├── ui_helpers.rs        # 公共 UI 组件(菜单栏、工具栏、状态栏、新建文件对话框、键盘快捷键)
    └── panel/               # 各功能面板 UI(按面板分组)
        ├── mod.rs           # 声明子模块
        ├── novel.rs         # 小说编辑面板(文件树、双分栏编辑区)
        ├── characters.rs    # 人设&章节面板(人物列表/卡片视图、关系管理)
        ├── outline.rs       # 大纲&伏笔面板(大纲树/时间轴视图、伏笔管理、里程碑追踪)
        └── llm.rs           # LLM辅助面板(模型配置、Agent 模式、提示词模板、对话优化、输出展示)

为什么选择目录模块而非单文件?

项目早期将全部逻辑放在一个 src/app.rs 中(~1764 行)。随着功能增加,单文件会带来一系列问题,因此改为 src/app/ 目录模块,并将各面板进一步归入 src/app/panel/ 子目录。两种方式的对比如下:

维度 单文件 src/app.rs 目录模块 src/app/ + panel/
可读性 滚动千行才能找到目标函数 文件名即功能名,直接打开对应文件
职责划分 数据模型、UI 渲染、文件操作混在一起 每个文件只做一件事,边界清晰
层级结构 所有代码平铺 面板代码集中在 panel/,与公共基础设施分离
并行开发 多人同时改同一文件极易产生 Git 冲突 不同面板由不同文件承载,冲突概率大幅降低
编译速度 任何改动都重新编译整个文件 只重新编译被修改的子模块
可测试性 测试代码与业务代码堆在一起 可在各子模块内独立编写和运行单元测试
扩展性 新增面板/功能需在同一文件里插入代码 panel/ 下新增 xxx.rs 文件,不影响其他模块

Rust 说明:在 Rust 中,src/app.rssrc/app/mod.rs 对外导出的模块名完全相同(都是 mod app),调用方无需任何修改。目录形式是官方推荐的大型模块组织方式,两者在语义上等价,仅在文件布局上有区别。

项目结构

src/
├── main.rs              # 应用入口
├── app/
│   ├── mod.rs           # 应用模块声明
│   ├── models.rs        # 数据模型(Character, Panel等)
│   ├── file_manager.rs  # 文件管理逻辑
│   ├── ui_helpers.rs    # UI辅助函数
│   └── panel/
│       ├── mod.rs       # 面板模块声明
│       ├── novel.rs     # 小说编辑面板
│       ├── characters.rs # 人设&章节面板
│       ├── outline.rs   # 大纲&伏笔面板
│       └── llm.rs       # LLM辅助面板
└── assets/
    └── NotoSansCJKsc-Regular.otf  # 中文字体

贡献

欢迎提交Issue和Pull Request。请遵循项目的设计原则,保持轻量化。

许可证

MIT License

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors