chattercatcher 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.
@@ -0,0 +1,163 @@
1
+ # 开发计划
2
+
3
+ ## 策略
4
+
5
+ 从最小可用闭环开始:
6
+
7
+ ```text
8
+ 接收飞书文字 -> 本地保存 -> RAG 检索 -> 带引用回答
9
+ ```
10
+
11
+ 这个闭环稳定后,再扩展文件理解、冲突处理和长期运行能力。
12
+
13
+ ## M1:可用的文字记忆
14
+
15
+ 目标:ChatterCatcher 可以安装、配置、连接飞书/Lark,并对群聊文字消息进行问答。
16
+
17
+ ### 范围
18
+
19
+ - TypeScript 项目脚手架。
20
+ - npm 全局 CLI 包。
21
+ - 交互式 `chattercatcher setup`。
22
+ - 可编辑的 `chattercatcher settings`。
23
+ - 飞书/Lark Gateway start/status/stop 命令。
24
+ - 飞书长连接事件接收。
25
+ - 文字消息入库。
26
+ - SQLite 元数据数据库。
27
+ - 本地向量库。
28
+ - SQLite FTS 关键词索引。
29
+ - OpenAI-compatible chat provider。
30
+ - OpenAI-compatible embedding provider。
31
+ - `@机器人` 触发回答。
32
+ - 来源引用。
33
+ - 基础冲突处理。
34
+ - 基础本地 Web UI:状态、历史、配置。
35
+ - `chattercatcher doctor`。
36
+
37
+ `doctor` 需要覆盖两类检查:
38
+
39
+ - 默认离线检查:配置目录、飞书配置完整性、SQLite、LanceDB、RAG 策略。
40
+ - 可选在线检查:`chattercatcher doctor --online` 调用 OpenAI-compatible chat 和 embedding 接口,确认模型连通性。
41
+
42
+ ### 验收标准
43
+
44
+ - `npm install -g chattercatcher` 暴露 CLI。
45
+ - `chattercatcher setup` 生成可用本地配置。
46
+ - `chattercatcher gateway start` 能连接飞书/Lark。
47
+ - 机器人能接收群文字消息。
48
+ - 机器人保存消息文本、发送人、群、时间戳和原始 payload。
49
+ - `@ChatterCatcher` 提问能返回简短答案和引用。
50
+ - 明确的新信息优先于旧事实。
51
+ - 模糊讨论不会被当成确定更新。
52
+ - Web UI 可通过 `http://127.0.0.1:<port>` 访问。
53
+
54
+ ### 自测
55
+
56
+ - CLI setup 使用临时配置目录 dry run。
57
+ - 飞书事件 payload fixture 入库测试。
58
+ - 已知消息检索测试。
59
+ - 使用 mock LLM 的答案生成测试。
60
+ - 冲突处理测试:
61
+ - 明确更新。
62
+ - 普通建议。
63
+ - 旧事实没有替代。
64
+ - Web UI build 测试。
65
+
66
+ ## M2:文件成为知识源
67
+
68
+ 目标:文件、图片、语音、链接成为一等可检索来源。
69
+
70
+ ### 范围
71
+
72
+ - 飞书媒体/文件下载。
73
+ - 文件保存到本地数据目录。
74
+ - PDF 解析。
75
+ - DOCX 解析。
76
+ - XLSX 解析。
77
+ - PPTX 解析。
78
+ - 纯文本和 Markdown 解析。
79
+ - 图片 OCR 路径。
80
+ - 语音转写路径。
81
+ - 链接元数据提取。
82
+ - chunking pipeline。
83
+ - 索引任务队列。
84
+ - Web UI 文件库。
85
+ - 重建索引命令。
86
+ - 文件引用。
87
+ - 多文件交叉问答。
88
+
89
+ ### 验收标准
90
+
91
+ - 群里发送的文件会被下载并本地保存。
92
+ - 解析后的文件文本能在索引元数据中看到。
93
+ - 解析失败任务可见、可重试。
94
+ - 问题可以从文件内容中得到回答。
95
+ - 答案能引用文件名和可用位置。
96
+ - 多个文件可以共同参与一个答案。
97
+
98
+ ### 自测
99
+
100
+ - 每种支持格式的 parser fixture 测试。
101
+ - OCR fixture 测试。
102
+ - 语音转写 mock 测试。
103
+ - 索引重试测试。
104
+ - 引用格式测试。
105
+ - Web UI 文件库构建和交互测试。
106
+
107
+ ## M3:可信的家庭知识库
108
+
109
+ 目标:ChatterCatcher 足够可靠,可以长期作为家庭记忆系统运行。
110
+
111
+ ### 范围
112
+
113
+ - 飞书云文档同步。
114
+ - 事实抽取 pipeline。
115
+ - 事实版本历史。
116
+ - 冲突解释 UI。
117
+ - 群级和成员级配置。
118
+ - 数据删除控制。
119
+ - 备份和恢复。
120
+ - 定时摘要。
121
+ - 服务安装:
122
+ - Windows service。
123
+ - macOS launchd。
124
+ - Linux systemd。
125
+ - 可选 Docker 部署。
126
+ - parser 插件接口。
127
+
128
+ ### 验收标准
129
+
130
+ - 用户能检查某个事实为什么是当前版本。
131
+ - 被覆盖的旧事实仍作为历史保留。
132
+ - 用户能删除指定本地数据。
133
+ - 数据可以导出和恢复。
134
+ - Gateway 可以作为后台服务运行。
135
+ - 定时摘要可以通过 CLI 或 Web UI 配置。
136
+
137
+ ### 自测
138
+
139
+ - 事实抽取和版本测试。
140
+ - 备份恢复测试。
141
+ - 服务命令 dry-run 测试。
142
+ - 群/成员配置测试。
143
+ - 数据删除测试。
144
+
145
+ ## Backlog
146
+
147
+ - 更多聊天平台。
148
+ - 移动端友好的 Web UI。
149
+ - 本地 LLM 和 embedding 默认配置。
150
+ - 知识图谱可视化。
151
+ - 手动捕获浏览器扩展。
152
+ - 飞书富文本卡片。
153
+ - 公开 npm 包发布加固。
154
+
155
+ ## 发布纪律
156
+
157
+ 每个里程碑结束时必须有:
158
+
159
+ - 通过的自动化测试。
160
+ - 手工 smoke test 记录。
161
+ - 已更新的文档。
162
+ - 一个或多个聚焦的 git commit。
163
+ - 开始发版后维护 changelog。
package/docs/PRD.md ADDED
@@ -0,0 +1,235 @@
1
+ # ChatterCatcher 产品需求文档
2
+
3
+ ## 概述
4
+
5
+ ChatterCatcher 是一个本地优先的飞书/Lark 家庭群机器人。它静默监听群聊,保存消息和文件,构建可检索的本地知识库,并在被 `@` 时基于证据回答问题。
6
+
7
+ 核心承诺:
8
+
9
+ ```text
10
+ 把机器人拉进家庭群。它记住群里的重要聊天和文件。之后直接问它,它用来源回答。
11
+ ```
12
+
13
+ ## 问题
14
+
15
+ 家庭里的重要信息经常以闲聊形式发布:
16
+
17
+ - 活动日期。
18
+ - 学校或出行安排。
19
+ - 账单和付款信息。
20
+ - 文档。
21
+ - 截图。
22
+ - 语音消息。
23
+ - 链接。
24
+ - 后续变更。
25
+
26
+ 大家经常忘记信息在哪里,只能去问某个最会找消息的人。这低效、重复,而且容易烦。
27
+
28
+ ## 目标
29
+
30
+ - 无需手动打标签,也能捕获家庭群信息。
31
+ - 支持文字、文件、图片、链接、语音和飞书文档链接。
32
+ - 默认所有数据本地保存。
33
+ - 使用 LLM 理解、回答、摘要和处理信息冲突。
34
+ - 使用 embedding 和 RAG,让回答基于可追溯证据。
35
+ - 用户 `@ChatterCatcher` 后,机器人给出简短直接回答。
36
+ - 每个事实性回答都提供引用来源。
37
+ - 新信息覆盖旧信息时保留历史证据。
38
+ - 提供交互式 CLI 和基础本地 Web UI。
39
+
40
+ ## 非目标
41
+
42
+ - ChatterCatcher 不是自主 Agent。
43
+ - 不执行任意外部任务。
44
+ - MVP 不做多租户 SaaS。
45
+ - MVP 不做飞书以外的平台。
46
+ - MVP 不需要公网访问。
47
+ - 第一版不做企业级复杂权限系统。
48
+
49
+ ## 目标用户
50
+
51
+ 主要维护者:
52
+
53
+ - 家里一个懂技术的人,负责安装、配置和维护。
54
+
55
+ 最终用户:
56
+
57
+ - 飞书/Lark 家庭群成员,通过 `@机器人 + 问题` 使用。
58
+
59
+ ## 核心用户故事
60
+
61
+ ### 静默捕获
62
+
63
+ 作为家庭成员,我希望机器人静默保存群里的消息和文件,这样不用手动整理。
64
+
65
+ 验收标准:
66
+
67
+ - 机器人加入群后能接收飞书群消息。
68
+ - 机器人保存文字消息、发送人、群、时间戳和原始平台元数据。
69
+ - 机器人下载支持的媒体和文件到本地。
70
+ - 默认不主动回复,除非被 `@` 或用户显式配置。
71
+
72
+ ### 问答
73
+
74
+ 作为家庭成员,我希望直接 `@机器人` 提问,快速找到信息。
75
+
76
+ 验收标准:
77
+
78
+ - `@ChatterCatcher 问题` 触发检索和回答。
79
+ - 回答简短直接。
80
+ - 回答包含来源引用。
81
+ - 证据不足时,机器人明确说不知道。
82
+
83
+ ### 文件理解
84
+
85
+ 作为家庭成员,我希望文件也能像聊天消息一样被检索和问答。
86
+
87
+ 验收标准:
88
+
89
+ - PDF、Word、Excel、PowerPoint、文本、Markdown、图片、链接、语音和飞书文档链接被捕获。
90
+ - 解析后的文本会被切块、embedding、索引,并关联回源文件。
91
+ - 回答能引用文件名,以及可用的页码、sheet 或 slide。
92
+
93
+ ### 冲突处理
94
+
95
+ 作为家庭成员,我希望机器人优先使用较新的确定信息,但不把闲聊讨论误判为更新。
96
+
97
+ 验收标准:
98
+
99
+ - 明确更新会覆盖同一主体、同一谓词的旧事实。
100
+ - 猜测、建议、讨论不会自动覆盖已确认事实。
101
+ - 机器人能在必要时说明旧信息已经被新信息取代。
102
+
103
+ 示例:
104
+
105
+ ```text
106
+ 旧信息:活动 2026/5/30 举办。
107
+ 新信息:活动改到 2026/6/30。
108
+ 回答:活动目前是 2026/6/30。此前 2026/5/30 是旧信息。
109
+ ```
110
+
111
+ ### 引导式配置
112
+
113
+ 作为维护者,我希望 `npm install -g chattercatcher` 后通过交互式命令完成配置。
114
+
115
+ 验收标准:
116
+
117
+ - `chattercatcher setup` 引导配置飞书、模型、embedding、存储、定时任务和 Web UI。
118
+ - `chattercatcher settings` 可以修改和重置配置。
119
+ - `chattercatcher doctor` 检查飞书凭证、模型连通性、embedding 兼容性和本地存储。
120
+
121
+ ## RAG 要求
122
+
123
+ RAG 是产品核心,不是可选增强。
124
+
125
+ 问答必须经过:
126
+
127
+ ```text
128
+ 问题理解 -> 混合检索 -> 证据重排 -> 冲突处理 -> 答案生成 -> 引用输出
129
+ ```
130
+
131
+ 禁止:
132
+
133
+ - 把全量聊天历史直接塞进 prompt。
134
+ - 把大文件全文直接塞进 prompt。
135
+ - 用上下文窗口替代向量索引和关键词索引。
136
+ - 没有引用地给出事实性答案。
137
+
138
+ ## MVP 范围
139
+
140
+ MVP 必须包含:
141
+
142
+ - npm 全局包。
143
+ - 交互式 CLI。
144
+ - 飞书/Lark 自建应用连接。
145
+ - 基于飞书长连接的本地 Gateway。
146
+ - 本地存储。
147
+ - 文字消息捕获。
148
+ - 针对已捕获消息的 RAG。
149
+ - OpenAI-compatible chat model。
150
+ - OpenAI-compatible embedding model。
151
+ - `@机器人` 触发问答。
152
+ - 来源引用。
153
+ - 基础冲突处理。
154
+ - 基础本地 Web UI。
155
+
156
+ MVP 暂缓:
157
+
158
+ - 深度飞书云文档同步。
159
+ - 高级权限系统。
160
+ - 多平台支持。
161
+ - 云部署。
162
+ - 复杂自主工作流。
163
+
164
+ ## 产品命令
165
+
166
+ 必需 CLI 命令:
167
+
168
+ ```bash
169
+ chattercatcher setup
170
+ chattercatcher settings
171
+ chattercatcher settings reset
172
+ chattercatcher gateway start
173
+ chattercatcher gateway stop
174
+ chattercatcher gateway restart
175
+ chattercatcher gateway status
176
+ chattercatcher logs
177
+ chattercatcher logs --follow
178
+ chattercatcher index status
179
+ chattercatcher index rebuild
180
+ chattercatcher web start
181
+ chattercatcher doctor
182
+ chattercatcher export
183
+ ```
184
+
185
+ ## Web UI 要求
186
+
187
+ 本地 Web UI 需要提供:
188
+
189
+ - Gateway 状态。
190
+ - 飞书连接状态。
191
+ - LLM 和 embedding 配置状态。
192
+ - 最近群消息。
193
+ - 群聊历史。
194
+ - 文件库。
195
+ - 索引任务。
196
+ - 问答日志。
197
+ - 配置编辑。
198
+ - 重建索引和导出数据。
199
+
200
+ 默认监听地址:
201
+
202
+ ```text
203
+ 127.0.0.1
204
+ ```
205
+
206
+ ## 隐私要求
207
+
208
+ - 默认本地保存数据。
209
+ - Web UI 默认不对公网暴露。
210
+ - secrets 和普通配置分开保存。
211
+ - 不记录 secrets。
212
+ - 后续需要支持删除群、消息和文件数据。
213
+
214
+ ## 飞书/Lark 集成
215
+
216
+ MVP 集成模式:
217
+
218
+ - 用户创建飞书/Lark 自建应用。
219
+ - 用户启用机器人能力。
220
+ - 用户配置所需权限。
221
+ - 用户启用长连接事件订阅。
222
+ - 用户订阅消息接收事件。
223
+ - ChatterCatcher Gateway 通过飞书/Lark SDK 在本地建立长连接。
224
+
225
+ 设计参考 OpenClaw 的 Gateway 模式:本地 Gateway、App ID/App Secret 配置、长连接事件投递、群内 `@` 触发、CLI 可查看状态。
226
+
227
+ ## 成功指标
228
+
229
+ 家庭 MVP 的成功指标:
230
+
231
+ - 一个懂技术的用户能在 30 分钟内完成安装配置。
232
+ - 对近期聊天中的直接事实问题,至少 80% 能带引用回答。
233
+ - 没有证据时不会自信胡说。
234
+ - Gateway 能连续运行多天。
235
+ - parser 或 embedding 失败后能通过重建索引恢复。