Sidecar - AI 助手小说阅读器
一个伪装成 AI 助手的 VSCode 插件,实际上是一个小说阅读/编码摸鱼工具。
功能特性
- 🤖 伪装界面:看起来像在写 TypeScript 代码和与 AI 对话
- 📖 小说阅读:支持多章节阅读,内容以代码形式展示
- 🔍 搜索功能:支持搜索书籍和章节内容(支持 Ctrl+F)
- 📑 章节导航:快速切换章节(上一章/下一章/跳转)
- ⏹️ 可中断渲染:支持停止当前渲染过程
- 🌊 伪 AI 日志流:模拟 AI 助手的流式输出效果
- 🎨 代码风格:使用 VSCode 深色主题,完美融入开发环境
- 📍 左侧 Sidebar:在资源管理器中显示,方便随时访问
- 💾 本地缓存:自动缓存已下载的书籍,支持离线阅读
- 📚 书籍管理:支持搜索、下载、更新、阅读书籍
- 📝 阅读记录:自动保存阅读进度,下次打开自动续读
安装
- 克隆或下载此项目
- 在项目目录运行:
npm install
npm run compile
- 按
F5 启动调试,或使用 vsce package 打包安装
使用方法
打开面板
- 安装插件后,在左侧活动栏找到 Sidecar 图标(💬 图标)
- 点击图标打开 "AI Assistant" 侧边栏面板
- 面板默认显示日志模式,展示操作历史记录
搜索书籍
在输入框中输入以下命令之一来搜索书籍:
搜索完成后,会显示搜索结果列表,包含书籍的:
- 书名、作者、状态、更新时间、最新章节
- 封面图片
- 操作按钮(下载/阅读)
注意:搜索超时时间为 15 秒,如果超时会显示错误提示。
查看已缓存的书籍
在输入框中输入以下命令之一:
会显示所有已下载并缓存的书籍列表,每个书籍显示:
- 书名、作者、状态、更新时间、最新章节
- 当前阅读进度(第 X 章 / 共 Y 章)
- 操作按钮(更新/阅读)
下载书籍
- 从搜索结果或书籍列表中,点击书籍卡片上的 "下载" 按钮
- 下载过程会在日志中显示进度:
[1/100] 正在下载: 章节标题
- 下载完成后,书籍会被保存到本地缓存目录
- 下载过程中可以继续使用其他功能(如阅读其他书籍)
注意:
- 同时只能下载一本书籍
- 如果书籍已存在,下载会跳过已有章节
- 下载过程中不会打断正在进行的阅读
更新书籍
- 从书籍列表中,点击书籍卡片上的 "更新" 按钮
- 系统会检查并只下载缺失的章节(增量更新)
- 更新过程会在日志中显示进度
注意:
- 同时只能更新一本书籍
- 更新过程中不会打断正在进行的阅读
阅读书籍
开始阅读
- 从搜索结果或书籍列表中,点击书籍卡片上的 "阅读" 按钮
- 如果书籍已缓存,会直接打开并显示章节内容
- 如果书籍未缓存,会提示先下载
阅读模式功能
进入阅读模式后,面板会切换到阅读界面,提供以下功能:
章节导航:
- ← 上一章:跳转到上一章节
- 下一章 →:跳转到下一章节
- 章节列表:点击章节信息可打开章节列表,快速跳转到指定章节
搜索章节内容:
- 在搜索框中输入关键词,按
Enter 或点击搜索按钮
- 支持在当前书籍的所有章节中搜索关键词
- 搜索结果会高亮显示匹配的内容
- 支持使用
Ctrl+F 进行浏览器原生搜索
停止渲染:
退出阅读模式:
- 点击 "清空" 按钮(如果显示)可退出阅读模式,返回日志模式
阅读记录
- 系统会自动保存你的阅读进度
- 下次打开同一本书时,会自动跳转到上次阅读的章节
- 阅读进度会显示在书籍列表中的书籍信息里
日志模式
日志模式会显示所有操作的历史记录,包括:
- 用户输入的命令
- 搜索操作和结果
- 下载/更新进度
- 系统消息和错误提示
日志按时间倒序显示,最新的操作在最上方。
快捷键
Ctrl+F:在阅读模式下搜索章节内容(浏览器原生搜索)
Enter:在搜索框中提交搜索
项目结构
Sidecar/
├── package.json
├── tsconfig.json
├── src/
│ ├── extension.ts # 插件入口
│ ├── panel/
│ │ ├── aiPanel.ts # 左侧 Sidebar(Webview)
│ │ └── logger.ts # 日志管理器
│ ├── engine/
│ │ ├── engine.ts # 状态机 & 调度核心
│ │ ├── novelSource.ts # 小说数据源(可换爬虫)
│ │ ├── aiRenderer.ts # 伪 AI 输出模板
│ │ ├── bookSearch.ts # 书籍搜索模块
│ │ ├── bookCache.ts # 书籍缓存管理
│ │ ├── bookDownloader.ts # 书籍下载模块
│ │ ├── bookReader.ts # 书籍阅读模块
│ │ ├── commandParser.ts # 命令解析器
│ │ ├── config.ts # 配置文件
│ │ └── utils.ts # 工具函数
│ └── types.ts # 类型定义
├── media/
│ ├── panel.html # Webview UI
│ ├── components/
│ │ ├── bookList.js # 书籍列表组件
│ │ └── chapterReader.js # 章节阅读组件
│ └── lib/ # 第三方库(highlight.js 等)
├── out/ # tsc 编译产物
└── README.md
核心功能说明
1. 状态机引擎 (engine/engine.ts)
- 管理渲染状态(IDLE, LOADING, RENDERING, PAUSED, STOPPED)
- 支持中断、暂停、继续操作
- 章节跳转和导航
- 从缓存加载书籍数据
2. 书籍搜索 (engine/bookSearch.ts)
- 在线搜索书籍功能
- 解析搜索结果并返回书籍列表
- 支持超时控制(15秒)
- 可取消搜索操作
3. 书籍缓存 (engine/bookCache.ts)
- 管理本地书籍缓存
- 保存书籍信息和阅读进度
- 提供缓存目录管理
- 支持增量更新
4. 书籍下载 (engine/bookDownloader.ts)
- 下载书籍所有章节
- 将章节内容转换为 TypeScript 代码格式
- 显示下载进度
- 支持断点续传(跳过已下载章节)
5. 书籍阅读 (engine/bookReader.ts)
- 打开已缓存的书籍
- 自动跳转到上次阅读位置
- 后台静默下载缺失章节
- 管理阅读记录
6. 命令解析 (engine/commandParser.ts)
- 解析用户输入的命令
- 支持的命令:
搜索 <书名> - 搜索书籍
查看所有书籍 / 列表 / 书籍列表 - 查看已缓存书籍
7. 伪 AI 渲染器 (engine/aiRenderer.ts)
- 生成类似 AI 助手的日志消息
- 模拟流式输出效果
- 代码和小说内容混合渲染
- WebviewView 实现
- 支持两种模式:日志模式和阅读模式
- 输入控制(命令解析、搜索、章节导航)
- 实时消息流显示
- 日志管理
9. 日志管理 (panel/logger.ts)
- 记录所有操作历史
- 支持不同类型的日志(info、error、books 等)
- 持久化存储日志数据
开发
# 编译 TypeScript
npm run compile
# 监听模式编译
npm run watch
常见问题
Q: 搜索书籍时提示超时怎么办?
A: 搜索超时时间为 15 秒。如果网络较慢,可以:
Q: 下载的书籍保存在哪里?
A: 书籍缓存保存在 VSCode 的全局存储目录中,具体路径可以通过日志查看。
Q: 如何清除缓存?
A: 可以手动删除 VSCode 的全局存储目录中对应的缓存文件夹。
Q: 阅读时如何快速跳转到指定章节?
A: 在阅读模式下,点击章节信息(如"第 5 / 100 章")会打开章节列表,可以快速跳转。
Q: 下载过程中可以阅读其他书籍吗?
A: 可以。下载是后台进行的,不会影响阅读其他已缓存的书籍。
Q: 更新书籍会重新下载所有章节吗?
A: 不会。更新功能只会下载缺失的章节,已存在的章节不会重新下载。
自定义配置
修改搜索源
编辑 src/engine/config.ts 中的配置:
export const config = {
baseUrl: 'https://your-novel-site.com',
searchBase: 'https://your-novel-site.com/search'
};
自定义数据源
编辑 src/engine/novelSource.ts 中的 loadNovel() 方法,修改返回的小说数据。
或者实现自定义的数据源:
// 实现 NovelSourceProvider 接口
class CustomNovelSource extends NovelSourceProvider {
public async loadNovel(): Promise<NovelSource> {
// 从文件、API 或爬虫加载数据
}
}
技术特点
- ✅ 无真实 AI 依赖,完全本地运行
- ✅ 状态机管理,支持中断和恢复
- ✅ 流式渲染,模拟 AI 输出效果
- ✅ 代码高亮,完美伪装
- ✅ 左侧 Sidebar,方便访问
- ✅ 本地缓存,支持离线阅读
- ✅ 自动保存阅读进度
- ✅ 后台下载,不打断阅读
- ✅ 增量更新,节省流量
- ✅ 命令式交互,简单直观
许可证
MIT