AI 辅助长篇小说创作引擎的桌面图形界面
基于 ainovel-cli 的全功能可视化客户端
| 功能 |
说明 |
| 书架管理 |
创建、浏览、切换多部作品,每部独立存储 |
| 封面展示 |
作品封面卡片,书名/作者/进度一目了然 |
| SQLite 持久化 |
所有创作数据本地存储,离线可用 |
| 功能 |
说明 |
| 工作区布局 |
左侧模块导航 + 中央主区域 + 实时状态监控 |
| 章节写作 |
支持快速模式(一句话开写)和共创模式(多轮规划) |
| 大纲管理 |
卷/章/节三层结构,拖拽排序,完成状态标记 |
| 角色编辑 |
姓名、设定、弧光、关系图管理 |
| 时间线 |
故事时间线编排 |
| 上下文摘要 |
自动生成故事摘要,辅助长篇连贯性 |
| 模拟推演 |
AI 模拟剧情走向,提前预览分支 |
| 功能 |
说明 |
| 模型配置 |
按角色(Architect/Writer/Editor)独立设置 Provider/Model/推理强度 |
| 世界规则 |
自定义世界观设定(魔法体系、科技水平、社会结构等) |
| 用户规则 |
自定义写作约束(风格、禁忌、偏好) |
| 系统设置 |
主题切换(亮色/暗色/跟随系统)、数据目录、CLI 路径 |
| 功能 |
说明 |
| 实时状态栏 |
运行态/阶段/流程/已完成章数/字数统计 |
| 事件流监控 |
DISPATCH / DONE / TOOL / ERROR / SYSTEM / AGENT 事件分类展示 |
| 实时输出 |
AI 流式输出(思考过程 + 正文分块渲染) |
| 输入干预 |
随时暂停,发送指令引导创作方向 |
| 开始/暂停/继续 |
完整的创作生命周期控制 |
| 功能 |
说明 |
| 诊断报告 |
四维度诊断(流程/质量/规划/上下文) |
| 评审记录 |
逐章评审历史与改进建议 |
| 导出 |
支持 TXT / EPUB,可指定章节区间 |
- Node.js ≥ 18
- npm ≥ 9
- ainovel-cli 命令行工具
# 安装 ainovel-cli(如未安装)
curl -fsSL https://raw.githubusercontent.com/voocel/ainovel-cli/main/scripts/install.sh | sh
# 或通过 Go 安装
go install github.com/voocel/ainovel-cli/cmd/ainovel-cli@latest
# 安装依赖
npm install
# 启动开发环境(前端热更新 + Electron)
npm run electron:dev
# macOS DMG
npm run dist:mac
# Windows NSIS 安装包
npm run dist:win
# Linux
npm run dist:linux
# 全部平台
npm run dist:all
构建产物位于 release/ 目录。
ainovel-gui/
├── electron/ # Electron 主进程
│ ├── main.ts # 主进程:IPC 通信、子进程管理、文件读写
│ ├── preload.ts # Context Bridge(安全 API 暴露给渲染进程)
│ ├── database.ts # SQLite 数据库(better-sqlite3)
│ └── tsconfig.json
├── src/ # React 前端(渲染进程)
│ ├── main.tsx # React 入口
│ ├── App.css # 暖调书卷风格 CSS + 主题系统
│ ├── components/ # 通用组件
│ │ ├── App.tsx # 根组件:HashRouter + 路由 + 主题
│ │ ├── TopBar.tsx # 顶栏(状态徽章、快捷操作)
│ │ ├── StatusSidebar.tsx # 状态侧栏(大纲、角色、用量)
│ │ ├── EventFlow.tsx # 事件流面板
│ │ ├── StreamOutput.tsx # AI 实时输出面板
│ │ ├── DetailPanel.tsx # 详情面板(前提、提交、审阅)
│ │ ├── InputBox.tsx # 输入框 + 命令面板
│ │ ├── Welcome.tsx # 欢迎页(快速/共创模式选择)
│ │ ├── BookCover.tsx # 书籍封面卡片
│ │ ├── BookNavSidebar.tsx # 工作区左侧模块导航
│ │ ├── ErrorBoundary.tsx # 全局错误边界
│ │ ├── Toast.tsx # 全局提示组件
│ │ ├── CoCreateModal.tsx # 共创规划模态框
│ │ ├── DiagnosticsModal.tsx # 诊断报告模态框
│ │ ├── ExportModal.tsx # 导出设置模态框
│ │ ├── HelpModal.tsx # 帮助/快捷键
│ │ └── ModelSwitchModal.tsx # 模型切换模态框
│ ├── pages/ # 页面组件
│ │ ├── BookList.tsx # 书架列表页(首页)
│ │ ├── BookIntroPage.tsx # 作品详情页
│ │ ├── NewBook.tsx # 新建/导入作品页
│ │ ├── Workspace.tsx # 创作工作台(含子路由)
│ │ ├── OutlinePage.tsx # 大纲管理页
│ │ ├── ChapterPage.tsx # 章节写作页
│ │ ├── CharactersPage.tsx # 角色管理页
│ │ ├── TimelinePage.tsx # 时间线页
│ │ ├── ReviewsPage.tsx # 评审记录页
│ │ ├── SummaryPage.tsx # 上下文摘要页
│ │ ├── SimulationPage.tsx # 剧情模拟页
│ │ ├── ModelsPage.tsx # 模型配置页
│ │ ├── UserRulesPage.tsx # 用户规则页
│ │ ├── WorldRulesPage.tsx # 世界规则页
│ │ └── SettingsPage.tsx # 系统设置页
│ ├── stores/useAppStore.ts # Zustand 集中式状态管理
│ ├── types/index.ts # TypeScript 类型定义
│ └── lib/ # 工具模块
│ ├── store/ # SQLite 数据读写封装 (io.ts)
│ ├── models/ # 模型配置相关
│ ├── rules/ # 规则处理
│ └── host/ # 宿主环境交互
├── scripts/
│ ├── build.js # 构建脚本
│ ├── build-cli.cjs # ainovel-cli 子模块编译
│ └── generate-icons.js # 图标生成
├── build/ # 构建资源(图标等)
├── package.json # 依赖 + electron-builder 配置
├── vite.config.ts
├── tsconfig.json
├── AGENTS.md # AI Agent 项目约束
└── CLAUDE.md # 技术栈速览
┌──────────────────────────────────────────────────────┐
│ AINovel GUI (Electron) │
│ ┌──────────┐ ┌──────────────┐ ┌────────────────┐ │
│ │ 书架首页 │ │ 创作工作台 │ │ 系统设置 │ │
│ │ BookList │ │ ┌──────────┐ │ │ Models/Rules │ │
│ │ │ │ │ 侧栏导航 │ │ │ Settings │ │
│ │ │ │ ├──────────┤ │ └────────────────┘ │
│ │ │ │ │ 主内容区 │ │ │
│ │ │ │ └──────────┘ │ │
│ └──────────┘ └──────────────┘ │
│ HashRouter + Zustand Store │
└──────────────────────┬───────────────────────────────┘
│ IPC (contextBridge)
┌──────────────────────▼───────────────────────────────┐
│ Electron Main Process │
│ 子进程管理 / SQLite 数据库 / 文件系统 / 系统对话框 │
└──────────────────────┬───────────────────────────────┘
│ spawn + stdin/stdout
┌──────────────────────▼───────────────────────────────┐
│ ainovel-cli (headless) │
│ AI Novel Writing Engine (Go) │
└──────────────────────────────────────────────────────┘
GUI 通过 IPC 与 Electron 主进程通信,主进程通过子进程启动 ainovel-cli --headless,读取其 output/ 目录中的 JSON/Markdown 产物获取进度,通过 stdin/stdout 发送用户交互指令。作品元数据通过 SQLite (better-sqlite3) 持久化存储于 ~/.ainovel-gui/ 目录。
npm run dev # 仅前端开发(Vite 热更新)
npm run typecheck # TypeScript 类型检查
npm run build # 全量构建(渲染进程 + 主进程 + CLI 子模块)
npm run build:renderer # 仅构建前端
npm run build:electron # 仅构建主进程
npm run electron:dev # 开发模式(Vite + Electron 并行)
npm run electron:start # 生产模式启动
npm run pack # 打包到目录(不打包安装程序)
npm run dist:mac # 构建 macOS DMG/ZIP
npm run dist:win # 构建 Windows NSIS/ZIP
npm run dist:linux # 构建 Linux AppImage/DEB
npm run dist:all # 构建全部平台
npm run release # 一键编译 + 发布 GitHub Release
npm run release:build-only # 仅编译,不发布
npm run release:dry-run # 预览模式
npm run generate-icons # 从 SVG 生成多尺寸图标
| 层次 |
技术 |
| 桌面框架 |
Electron 31 |
| 前端框架 |
React 18 + TypeScript 5 |
| 构建工具 |
Vite 5 |
| 路由 |
react-router-dom v7 (HashRouter) |
| 状态管理 |
Zustand 4 |
| 数据持久化 |
better-sqlite3 (SQLite) |
| 图标 |
Lucide React |
| 样式 |
纯 CSS(暖调书卷色板 + CSS 变量主题) |
| 打包 |
electron-builder |
| 平台 |
分发格式 |
架构 |
| macOS |
DMG / ZIP |
x64 + arm64 |
| Windows |
NSIS 安装包 / ZIP |
x64 |
| Linux |
AppImage / DEB |
x64 |
支持三平台自动构建,ainovel-cli 二进制通过 extraResources 随应用一起打包分发。
MIT © 2026 crazytree
本项目积极参与并认可linux.do 社区。