logtap 0.1.0__tar.gz

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.
logtap-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 termkit contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
logtap-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,194 @@
1
+ Metadata-Version: 2.4
2
+ Name: logtap
3
+ Version: 0.1.0
4
+ Summary: A cross-platform terminal toolkit; logtap read is a pure-terminal novel (.txt) reader
5
+ Author: logtap contributors
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/example/logtap
8
+ Project-URL: Issues, https://github.com/example/logtap/issues
9
+ Keywords: terminal,cli,reader,novel,txt,console
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Environment :: Console
12
+ Classifier: Intended Audience :: End Users/Desktop
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.8
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Topic :: Terminals
21
+ Classifier: Topic :: Utilities
22
+ Requires-Python: >=3.8
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: textual>=0.47.0
26
+ Requires-Dist: rich>=13.0.0
27
+ Requires-Dist: chardet>=5.0.0
28
+ Dynamic: license-file
29
+
30
+ # logtap read
31
+
32
+ **日志风格终端小说阅读器** —— 摸鱼神器,视觉模仿服务器运行日志,低辨识度,支持流式自动滚动、书签、进度记忆、三套主题。
33
+
34
+ 基于 [Textual](https://textual.textualize.io/) 框架构建,纯终端 UI,无 GUI,兼容 Windows Terminal、iTerm2、Linux 终端。
35
+
36
+ ## 核心特色
37
+
38
+ **日志伪装设计**:外观模拟 Linux 服务日志 / 后端程序输出,章节标题显示为 `[WARN]` 黄色标签,正文为标准日志文本样式,外人一眼看上去像在排查服务器问题,而非阅读小说。
39
+
40
+ **流式自动滚动**:按 `Space` 启动后文本持续向下滚动(模拟日志实时输出),速度可调,随时暂停/恢复,配合日志样式完美伪装成"正在监控服务器日志"。
41
+
42
+ **隐蔽交互**:章节列表、搜索、跳转均为临时悬浮组件,按 `ESC` 立即消失,不长期占用屏幕空间暴露用途。
43
+
44
+ ## 安装
45
+
46
+ ```bash
47
+ pip install logtap
48
+ ```
49
+
50
+ (本地开发调试可直接 `pip install -e .`)
51
+
52
+ ## 快速开始
53
+
54
+ ```bash
55
+ # 直接打开指定文件
56
+ logtap read ./novel.txt
57
+ ```
58
+
59
+ ## 快捷键说明
60
+
61
+ | 按键 | 功能 |
62
+ |-------------|----------------------------------|
63
+ | `↑` / `↓` | 手动上下滚动 |
64
+ | `w` / `s` | 上一页 / 下一页 |
65
+ | `g` | 跳转到指定行号 |
66
+ | `m` | 在当前行添加/移除书签 |
67
+ | `d` | **切换伪装模式**(日志/AI/关闭) |
68
+ | `t` | 循环切换三套主题 |
69
+ | `q` | 退出阅读器,自动保存当前阅读位置 |
70
+
71
+ ## 核心创新:动态伪装模式
72
+
73
+ 按 `d` 键可在三种模式间切换,适应不同摸鱼场景:
74
+
75
+ ### 模式1:日志模式(默认)
76
+ - 正文随机插入日志级别:`[INFO]`、`[DEBUG]`、`[WARN]`、`[ERROR]`
77
+ - 30% 概率给正文行加时间戳前缀:`2026-07-28 14:32:15`
78
+ - 随机插入模拟系统日志噪音(不打断阅读):
79
+ - `[INFO] Database connection pool: 8/20 active`
80
+ - `[DEBUG] Cache hit ratio: 87.3%`
81
+ - `[WARN] Memory usage: 1461MB / 2048MB`
82
+ - 章节标题伪装成关键错误:`[ERROR] Critical: 第一章 标题`
83
+
84
+ **适用场景**:假装在查看服务器日志、排查线上问题
85
+
86
+ ### 模式2:AI助手模式
87
+ - 正文标记为 `[assistant]` AI回答格式
88
+ - 随机将连续 2-3 行渲染成代码 diff 格式:
89
+ - `+ 新增内容`(绿色)
90
+ - `- 删除内容`(红色)
91
+ - 随机插入 AI 思考链路噪音(灰色斜体):
92
+ - `<thinking>分析需求中...</thinking>`
93
+ - `<thinking>检查代码结构...</thinking>`
94
+ - 章节标题伪装成任务:`## Task: 实现用户认证模块`
95
+
96
+ **适用场景**:假装在用 Claude Code / Cursor AI 写代码、调试程序
97
+
98
+ ### 模式3:关闭伪装
99
+ - 纯净的日志风格(每行只加 `[TEXT]` 前缀)
100
+ - 适合不需要伪装的私密环境
101
+
102
+ ## 三套主题
103
+
104
+ 1. **日志仿真模式**(默认):黑底 + 彩色日志标签(`[WARN]` 黄色、`[INFO]` 蓝色),模拟服务器日志输出
105
+ 2. **护眼暗色模式**:深灰底 + 暖色调文字,适合长时间阅读
106
+ 3. **极简黑白模式**:纯黑底白字,移除所有颜色,最高隐蔽度
107
+
108
+ 按 `t` 键循环切换,选择会被记住。
109
+
110
+ ## 功能特性
111
+
112
+ - **纯本地文本**:只读取本地 `.txt` 文件,不含任何网络爬虫或在线下载功能。
113
+ - **编码自动识别**:自动识别 UTF-8 / GBK / GB2312 / BIG5 / UTF-16 等编码;
114
+ 识别置信度不足时弹出手动选择编码的面板。
115
+ - **大文件优化**:仅扫描一次建立"行偏移索引",正文按需 `seek` 读取,不会
116
+ 把整本书载入内存,GB 级文本同样流畅。
117
+ - **东亚宽字符换行**:按终端可视宽度自动换行,中日韩字符按 2 列宽计算,
118
+ 不会出现超长行溢出。
119
+ - **章节粗识别**:通过"第 N 章/回/节"标题模式与常见分割线(`----`、`====`
120
+ 等)自动标记章节,阅读时定时显示当前所在章节。
121
+ - **独立进度与书签**:每本书按绝对路径独立记录阅读进度和书签列表,下次
122
+ 打开自动恢复到上次阅读位置。
123
+
124
+ ## 配置文件
125
+
126
+ 阅读进度、书签、主题设置保存在跨平台配置目录下的 JSON 文件中:
127
+
128
+ - Windows: `%USERPROFILE%\.logtap\read_config.json`
129
+ - macOS / Linux: `~/.logtap/read_config.json`
130
+
131
+ 写入采用"临时文件 + 原子替换"策略,避免程序异常退出导致配置损坏;若配置
132
+ 文件本身已损坏,会自动备份为 `read_config.json.corrupted-<timestamp>.bak`
133
+ 并回退到默认设置,不影响正常启动。
134
+
135
+ ## 项目结构
136
+
137
+ ```
138
+ logtap/
139
+ ├── cli.py # logtap 主命令行入口,分发子命令
140
+ └── read/
141
+ ├── __init__.py # 对外暴露 run(path)
142
+ ├── app.py # Textual 主应用:自动滚动、快捷键、主题切换
143
+ ├── log_style_render.py # 日志风格文本渲染组件
144
+ ├── reader_core.py # 编码识别、行索引、宽字符换行、章节识别
145
+ ├── storage.py # 进度/书签/设置持久化
146
+ └── themes.py # 三套主题 CSS 样式定义
147
+ ```
148
+
149
+ ## 依赖
150
+
151
+ - [`textual`](https://pypi.org/project/textual/):现代化终端 UI 框架
152
+ - [`rich`](https://pypi.org/project/rich/):富文本渲染(Textual 底层依赖)
153
+ - [`chardet`](https://pypi.org/project/chardet/):编码检测辅助
154
+
155
+ ## 开发与测试
156
+
157
+ ```bash
158
+ pip install -e .
159
+ pip install pytest
160
+ pytest tests/ -v
161
+ ```
162
+
163
+ ## 设计理念
164
+
165
+ 区别于传统终端阅读器(侧边目录 + 正文区域的常规布局),本项目**主打动态伪装系统**:
166
+
167
+ ### 核心差异化
168
+
169
+ 1. **两套伪装模式随时切换**(`d` 键)
170
+ - 日志模式:模拟服务器运行日志,随机插入系统状态噪音
171
+ - AI模式:模拟 Claude Code / Cursor 编程助手输出,带代码 diff 和思考链路
172
+
173
+ 2. **智能噪音注入**
174
+ - 15% 概率在正文间插入伪装噪音行(不干扰阅读连续性)
175
+ - 日志模式:30% 概率添加时间戳,随机日志级别分布模拟真实日志
176
+ - AI模式:20% 概率将连续几行渲染成代码 diff(红绿对比)
177
+
178
+ 3. **视觉真实性**
179
+ - 章节标题根据模式动态调整(`[ERROR] Critical` / `## Task:`)
180
+ - 噪音行使用 `dim` 样式,视觉上退居背景
181
+ - 状态栏实时显示当前伪装模式
182
+
183
+ ### 适用场景
184
+
185
+ - **工作时摸鱼**:日志模式让你看起来在排查线上问题
186
+ - **远程会议/屏幕共享**:AI模式让你看起来在用编程助手写代码
187
+ - **开放式办公区**:动态切换模式应对不同路过的同事
188
+
189
+ 与市面上所有终端小说阅读器的根本区别:**不是"做了个阅读器顺便能伪装",而是"做了个伪装系统顺便能看小说"**。
190
+
191
+ ## 许可证
192
+
193
+ MIT License,详见 [LICENSE](LICENSE)。
194
+
logtap-0.1.0/README.md ADDED
@@ -0,0 +1,165 @@
1
+ # logtap read
2
+
3
+ **日志风格终端小说阅读器** —— 摸鱼神器,视觉模仿服务器运行日志,低辨识度,支持流式自动滚动、书签、进度记忆、三套主题。
4
+
5
+ 基于 [Textual](https://textual.textualize.io/) 框架构建,纯终端 UI,无 GUI,兼容 Windows Terminal、iTerm2、Linux 终端。
6
+
7
+ ## 核心特色
8
+
9
+ **日志伪装设计**:外观模拟 Linux 服务日志 / 后端程序输出,章节标题显示为 `[WARN]` 黄色标签,正文为标准日志文本样式,外人一眼看上去像在排查服务器问题,而非阅读小说。
10
+
11
+ **流式自动滚动**:按 `Space` 启动后文本持续向下滚动(模拟日志实时输出),速度可调,随时暂停/恢复,配合日志样式完美伪装成"正在监控服务器日志"。
12
+
13
+ **隐蔽交互**:章节列表、搜索、跳转均为临时悬浮组件,按 `ESC` 立即消失,不长期占用屏幕空间暴露用途。
14
+
15
+ ## 安装
16
+
17
+ ```bash
18
+ pip install logtap
19
+ ```
20
+
21
+ (本地开发调试可直接 `pip install -e .`)
22
+
23
+ ## 快速开始
24
+
25
+ ```bash
26
+ # 直接打开指定文件
27
+ logtap read ./novel.txt
28
+ ```
29
+
30
+ ## 快捷键说明
31
+
32
+ | 按键 | 功能 |
33
+ |-------------|----------------------------------|
34
+ | `↑` / `↓` | 手动上下滚动 |
35
+ | `w` / `s` | 上一页 / 下一页 |
36
+ | `g` | 跳转到指定行号 |
37
+ | `m` | 在当前行添加/移除书签 |
38
+ | `d` | **切换伪装模式**(日志/AI/关闭) |
39
+ | `t` | 循环切换三套主题 |
40
+ | `q` | 退出阅读器,自动保存当前阅读位置 |
41
+
42
+ ## 核心创新:动态伪装模式
43
+
44
+ 按 `d` 键可在三种模式间切换,适应不同摸鱼场景:
45
+
46
+ ### 模式1:日志模式(默认)
47
+ - 正文随机插入日志级别:`[INFO]`、`[DEBUG]`、`[WARN]`、`[ERROR]`
48
+ - 30% 概率给正文行加时间戳前缀:`2026-07-28 14:32:15`
49
+ - 随机插入模拟系统日志噪音(不打断阅读):
50
+ - `[INFO] Database connection pool: 8/20 active`
51
+ - `[DEBUG] Cache hit ratio: 87.3%`
52
+ - `[WARN] Memory usage: 1461MB / 2048MB`
53
+ - 章节标题伪装成关键错误:`[ERROR] Critical: 第一章 标题`
54
+
55
+ **适用场景**:假装在查看服务器日志、排查线上问题
56
+
57
+ ### 模式2:AI助手模式
58
+ - 正文标记为 `[assistant]` AI回答格式
59
+ - 随机将连续 2-3 行渲染成代码 diff 格式:
60
+ - `+ 新增内容`(绿色)
61
+ - `- 删除内容`(红色)
62
+ - 随机插入 AI 思考链路噪音(灰色斜体):
63
+ - `<thinking>分析需求中...</thinking>`
64
+ - `<thinking>检查代码结构...</thinking>`
65
+ - 章节标题伪装成任务:`## Task: 实现用户认证模块`
66
+
67
+ **适用场景**:假装在用 Claude Code / Cursor AI 写代码、调试程序
68
+
69
+ ### 模式3:关闭伪装
70
+ - 纯净的日志风格(每行只加 `[TEXT]` 前缀)
71
+ - 适合不需要伪装的私密环境
72
+
73
+ ## 三套主题
74
+
75
+ 1. **日志仿真模式**(默认):黑底 + 彩色日志标签(`[WARN]` 黄色、`[INFO]` 蓝色),模拟服务器日志输出
76
+ 2. **护眼暗色模式**:深灰底 + 暖色调文字,适合长时间阅读
77
+ 3. **极简黑白模式**:纯黑底白字,移除所有颜色,最高隐蔽度
78
+
79
+ 按 `t` 键循环切换,选择会被记住。
80
+
81
+ ## 功能特性
82
+
83
+ - **纯本地文本**:只读取本地 `.txt` 文件,不含任何网络爬虫或在线下载功能。
84
+ - **编码自动识别**:自动识别 UTF-8 / GBK / GB2312 / BIG5 / UTF-16 等编码;
85
+ 识别置信度不足时弹出手动选择编码的面板。
86
+ - **大文件优化**:仅扫描一次建立"行偏移索引",正文按需 `seek` 读取,不会
87
+ 把整本书载入内存,GB 级文本同样流畅。
88
+ - **东亚宽字符换行**:按终端可视宽度自动换行,中日韩字符按 2 列宽计算,
89
+ 不会出现超长行溢出。
90
+ - **章节粗识别**:通过"第 N 章/回/节"标题模式与常见分割线(`----`、`====`
91
+ 等)自动标记章节,阅读时定时显示当前所在章节。
92
+ - **独立进度与书签**:每本书按绝对路径独立记录阅读进度和书签列表,下次
93
+ 打开自动恢复到上次阅读位置。
94
+
95
+ ## 配置文件
96
+
97
+ 阅读进度、书签、主题设置保存在跨平台配置目录下的 JSON 文件中:
98
+
99
+ - Windows: `%USERPROFILE%\.logtap\read_config.json`
100
+ - macOS / Linux: `~/.logtap/read_config.json`
101
+
102
+ 写入采用"临时文件 + 原子替换"策略,避免程序异常退出导致配置损坏;若配置
103
+ 文件本身已损坏,会自动备份为 `read_config.json.corrupted-<timestamp>.bak`
104
+ 并回退到默认设置,不影响正常启动。
105
+
106
+ ## 项目结构
107
+
108
+ ```
109
+ logtap/
110
+ ├── cli.py # logtap 主命令行入口,分发子命令
111
+ └── read/
112
+ ├── __init__.py # 对外暴露 run(path)
113
+ ├── app.py # Textual 主应用:自动滚动、快捷键、主题切换
114
+ ├── log_style_render.py # 日志风格文本渲染组件
115
+ ├── reader_core.py # 编码识别、行索引、宽字符换行、章节识别
116
+ ├── storage.py # 进度/书签/设置持久化
117
+ └── themes.py # 三套主题 CSS 样式定义
118
+ ```
119
+
120
+ ## 依赖
121
+
122
+ - [`textual`](https://pypi.org/project/textual/):现代化终端 UI 框架
123
+ - [`rich`](https://pypi.org/project/rich/):富文本渲染(Textual 底层依赖)
124
+ - [`chardet`](https://pypi.org/project/chardet/):编码检测辅助
125
+
126
+ ## 开发与测试
127
+
128
+ ```bash
129
+ pip install -e .
130
+ pip install pytest
131
+ pytest tests/ -v
132
+ ```
133
+
134
+ ## 设计理念
135
+
136
+ 区别于传统终端阅读器(侧边目录 + 正文区域的常规布局),本项目**主打动态伪装系统**:
137
+
138
+ ### 核心差异化
139
+
140
+ 1. **两套伪装模式随时切换**(`d` 键)
141
+ - 日志模式:模拟服务器运行日志,随机插入系统状态噪音
142
+ - AI模式:模拟 Claude Code / Cursor 编程助手输出,带代码 diff 和思考链路
143
+
144
+ 2. **智能噪音注入**
145
+ - 15% 概率在正文间插入伪装噪音行(不干扰阅读连续性)
146
+ - 日志模式:30% 概率添加时间戳,随机日志级别分布模拟真实日志
147
+ - AI模式:20% 概率将连续几行渲染成代码 diff(红绿对比)
148
+
149
+ 3. **视觉真实性**
150
+ - 章节标题根据模式动态调整(`[ERROR] Critical` / `## Task:`)
151
+ - 噪音行使用 `dim` 样式,视觉上退居背景
152
+ - 状态栏实时显示当前伪装模式
153
+
154
+ ### 适用场景
155
+
156
+ - **工作时摸鱼**:日志模式让你看起来在排查线上问题
157
+ - **远程会议/屏幕共享**:AI模式让你看起来在用编程助手写代码
158
+ - **开放式办公区**:动态切换模式应对不同路过的同事
159
+
160
+ 与市面上所有终端小说阅读器的根本区别:**不是"做了个阅读器顺便能伪装",而是"做了个伪装系统顺便能看小说"**。
161
+
162
+ ## 许可证
163
+
164
+ MIT License,详见 [LICENSE](LICENSE)。
165
+
@@ -0,0 +1,7 @@
1
+ """logtap: 跨平台命令行工具箱。
2
+
3
+ 当前提供的子命令:
4
+ logtap read <file> 纯终端小说(.txt)阅读器
5
+ """
6
+
7
+ __version__ = "0.1.0"
@@ -0,0 +1,54 @@
1
+ """logtap 主命令行入口,负责解析子命令并分发。
2
+
3
+ 当前仅有 read 子命令;后续新增其他 logtap 功能时,在此文件追加新的
4
+ subparser 即可,read 相关实现始终保持在 logtap.read 包内部,不与
5
+ 其他子命令耦合。
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import argparse
11
+ import sys
12
+ from typing import List, Optional
13
+
14
+ from logtap import __version__
15
+
16
+
17
+ def _build_parser() -> argparse.ArgumentParser:
18
+ parser = argparse.ArgumentParser(
19
+ prog="logtap",
20
+ description="logtap: 跨平台终端工具箱",
21
+ )
22
+ parser.add_argument(
23
+ "--version", action="version", version=f"logtap {__version__}"
24
+ )
25
+ subparsers = parser.add_subparsers(dest="command")
26
+
27
+ read_parser = subparsers.add_parser(
28
+ "read", help="纯终端小说(.txt)阅读器"
29
+ )
30
+ read_parser.add_argument(
31
+ "path",
32
+ nargs="?",
33
+ default=None,
34
+ help="要打开的 .txt 文件路径;留空则在当前目录选择",
35
+ )
36
+
37
+ return parser
38
+
39
+
40
+ def main(argv: Optional[List[str]] = None) -> int:
41
+ parser = _build_parser()
42
+ args = parser.parse_args(argv)
43
+
44
+ if args.command == "read":
45
+ from logtap.read import run as run_reader
46
+
47
+ return run_reader(args.path)
48
+
49
+ parser.print_help()
50
+ return 0
51
+
52
+
53
+ if __name__ == "__main__":
54
+ sys.exit(main())
@@ -0,0 +1,8 @@
1
+ """logtap.read 子包:纯终端小说阅读器。
2
+
3
+ 对外暴露 run(path) 作为 CLI 层的统一入口。
4
+ """
5
+
6
+ from logtap.read.app import run
7
+
8
+ __all__ = ["run"]