readshell 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +17 -0
- package/README.md +128 -0
- package/bin/readshell.js +3 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1656 -0
- package/dist/index.js.map +1 -0
- package/package.json +64 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
GNU AFFERO GENERAL PUBLIC LICENSE
|
|
2
|
+
Version 3, 19 November 2007
|
|
3
|
+
|
|
4
|
+
Copyright (C) 2026 ReadShell
|
|
5
|
+
|
|
6
|
+
This program is free software: you can redistribute it and/or modify
|
|
7
|
+
it under the terms of the GNU Affero General Public License as published by
|
|
8
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
9
|
+
(at your option) any later version.
|
|
10
|
+
|
|
11
|
+
This program is distributed in the hope that it will be useful,
|
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
GNU Affero General Public License for more details.
|
|
15
|
+
|
|
16
|
+
You should have received a copy of the GNU Affero General Public License
|
|
17
|
+
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
package/README.md
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# ReadShell
|
|
2
|
+
|
|
3
|
+
> 终端内低打断轻阅读工具 · CLI Light Reading Tool for Developers
|
|
4
|
+
|
|
5
|
+
[](https://www.gnu.org/licenses/agpl-3.0)
|
|
6
|
+
[](https://nodejs.org)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 🎯 解决什么问题
|
|
11
|
+
|
|
12
|
+
ReadShell 解决的不是「没有地方看书」,而是:
|
|
13
|
+
|
|
14
|
+
**开发间隙,你缺少一个不会把自己拖离工作流的短时休息入口。**
|
|
15
|
+
|
|
16
|
+
| 现有替代方案 | 问题 |
|
|
17
|
+
|---|---|
|
|
18
|
+
| 刷手机 | 打开就停不下来,10 分钟变 40 分钟 |
|
|
19
|
+
| 刷网页 | 信息流劫持注意力,回不到工作状态 |
|
|
20
|
+
| 微信读书 / Kindle | 需要切换设备或窗口,打断工作流 |
|
|
21
|
+
| **ReadShell** | **原地休息,原地恢复,不离开终端** |
|
|
22
|
+
|
|
23
|
+
## 📈 当前阶段进度 (v0.1.0 MVP 达成)
|
|
24
|
+
|
|
25
|
+
目前项目已完全兑现最初的《产品手册》设计目标(阶段一至阶段三皆已闭环上线):
|
|
26
|
+
- **核心阅读全格式支持**:原生支持 `.txt` 纯文本与 `.epub` 电子书解析。支持智能分页渲染、对话高亮以及平滑滚动。
|
|
27
|
+
- **沉浸与反侦查系统**:独创的 `Boss Key` (老板键 `b`/`Esc`),一键秒速伪装成标准的终端报错日志,深藏功与名。
|
|
28
|
+
- **本地极速书房**:基于 SQLite 构建的零依赖本地数据中心。能够精准记忆任何一本书的字节读取偏移量,并在你退出时默默保存进度。
|
|
29
|
+
- **深度时间流体验**:新增随时截取金句的快捷书签(`m` 键)以及基于你的本地 Buffer 实时演算的类 Kindle 阅读剩余时间预估。
|
|
30
|
+
|
|
31
|
+
## 💡 为什么是这样?(内心独白)
|
|
32
|
+
|
|
33
|
+
### 产品的本心:为什么要在终端里做阅读器?
|
|
34
|
+
作为一个开发者,IDE 和 Terminal 是我们日常最常驻的舒适区。当我们在编译等待、等待流水线构建或者单纯思维枯竭的 5 到 10 分钟里,常常需要一个能够**迅速切入又迅速抽离**的“精神避难所”。
|
|
35
|
+
刷网页容易被算法劫持,看手机更是会彻底打断心流进程。而终端——这个只有黑底白字、极度纯粹的环境,天生就带有一种克制的隔离感。
|
|
36
|
+
**ReadShell** 试图在这个极度克制的环境里,以最低的启动摩擦力给你提供一处可以随时下潜和浮出的文字世界。它不需要全屏的臃肿软件,不需要花哨的 UI,在你同事的眼里,它就像一个正在执行的本地构建任务,静默而高效。
|
|
37
|
+
|
|
38
|
+
### 技术选型的浪漫
|
|
39
|
+
在技术栈的设计上,为了追求极致的启动响应和最低的资源开销,我们抛弃了臃肿的 Electron 和图形界面:
|
|
40
|
+
- **`Ink` 驱动的 TUI 美学**:用现代化的 React 响应式思维去描绘古老而极客的命令行界面。Flexbox 布局与 Hooks 状态机让控制台程序也能拥有细腻顺滑的反馈边界。
|
|
41
|
+
- **本地绝对主权 (`SQLite`)**:拒绝云端绑架与冗余的网络请求。你所有的阅读记忆、章节骨架和金句书签,都以毫秒级的查询效率安静地存在于你硬盘上的只读账本里。它是彻底私密、极速的数据中枢。
|
|
42
|
+
- **化繁为简的解析哲学**:无论是动辄几十兆的粗糙 TXT,还是内嵌错综复杂 HTML 的精品 EPUB 包,在经过流式切割和文本清洗后,最终都会化为终端里规整的行与列,在每个敲击的顺手瞬间抵达你的屏前。
|
|
43
|
+
|
|
44
|
+
## ⚡ 快速开始
|
|
45
|
+
|
|
46
|
+
### 安装
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
npm install -g readshell
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 基本使用
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# 导入一本书 (支持 .txt 和 .epub)
|
|
56
|
+
novel import ~/books/my-novel.epub
|
|
57
|
+
|
|
58
|
+
# 恢复上次阅读(零摩擦入口)
|
|
59
|
+
novel resume
|
|
60
|
+
|
|
61
|
+
# 打开指定书籍
|
|
62
|
+
novel open <book-id>
|
|
63
|
+
|
|
64
|
+
# 查看书架
|
|
65
|
+
novel library
|
|
66
|
+
|
|
67
|
+
# 移除书籍与记录
|
|
68
|
+
novel remove <book-id>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 阅读器快捷键
|
|
72
|
+
|
|
73
|
+
| 快捷键 | 功能 |
|
|
74
|
+
|---|---|
|
|
75
|
+
| `空格` / `j` / `↓` | 下一页 |
|
|
76
|
+
| `k` / `↑` | 上一页 |
|
|
77
|
+
| `c` | 章节列表及书签列表 |
|
|
78
|
+
| `Tab` | 章节弹出层中切换【目录/书签】 |
|
|
79
|
+
| `m` / `M` | 将当前页首行标记为书签 |
|
|
80
|
+
| `b` / `Esc` | Boss Key (老板键),秒速伪装终端报错并自动存档 |
|
|
81
|
+
| `q` | 正常退出并保存进度 |
|
|
82
|
+
| `?` | 帮助 |
|
|
83
|
+
|
|
84
|
+
## 🏗️ 技术栈
|
|
85
|
+
|
|
86
|
+
- **TypeScript** + **Node.js** (≥ 18)
|
|
87
|
+
- **Ink** — React 范式的终端 UI 框架
|
|
88
|
+
- **SQLite** (`better-sqlite3`) — 零依赖本地数据库
|
|
89
|
+
- **Vitest** — 测试框架
|
|
90
|
+
|
|
91
|
+
## 📁 项目结构
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
src/
|
|
95
|
+
├── cli/ # 命令层:解析参数,调用 service
|
|
96
|
+
├── ui/ # TUI 层(Ink 组件)
|
|
97
|
+
├── services/ # 业务逻辑层
|
|
98
|
+
├── parsers/ # 文件解析层(txt/epub)
|
|
99
|
+
├── db/ # 数据库层(SQLite)
|
|
100
|
+
├── config/ # 配置管理
|
|
101
|
+
└── utils/ # 工具函数
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## 🛠️ 开发
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# 安装依赖
|
|
108
|
+
npm install
|
|
109
|
+
|
|
110
|
+
# 开发模式
|
|
111
|
+
npm run dev
|
|
112
|
+
|
|
113
|
+
# 运行测试
|
|
114
|
+
npm test
|
|
115
|
+
|
|
116
|
+
# 构建
|
|
117
|
+
npm run build
|
|
118
|
+
|
|
119
|
+
# 代码检查
|
|
120
|
+
npm run lint
|
|
121
|
+
|
|
122
|
+
# 格式化
|
|
123
|
+
npm run format
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## 📝 许可证
|
|
127
|
+
|
|
128
|
+
[AGPL-3.0](LICENSE)
|
package/bin/readshell.js
ADDED
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|