@jhihjian/claude-daemon 1.1.0 → 1.2.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/README.md CHANGED
@@ -1,31 +1,223 @@
1
- # Claude Code 会话历史记录系统
1
+ # Claude Code 守护进程(Daemon)
2
2
 
3
- > 自动记录、分类和分析 Claude Code 会话历史
3
+ > 🚀 自动记录、分析和监控 Claude Code 会话的守护线程系统
4
4
 
5
- ## 功能特性
5
+ [![GitHub](https://img.shields.io/badge/GitHub-claude--daemon-blue?logo=github)](https://github.com/JhihJian/claude-daemon)
6
+ [![Bun](https://img.shields.io/badge/Bun-1.0+-black?logo=bun)](https://bun.sh)
7
+ [![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
8
+ [![Test](https://img.shields.io/badge/Tests-12%2F12%20Passed-success)](FINAL-TEST-REPORT.md)
6
9
 
7
- - **自动记录**:捕获每个会话的启动目录、Git 信息、工具调用
8
- - ✅ **智能分类**:自动识别会话类型(编码、调试、研究、写作、Git 操作等)
9
- - ✅ **多维索引**:按类型、按目录、按时间快速查询
10
- - ✅ **统计分析**:会话统计、类型分布、活跃目录分析
11
- - ✅ **JSONL 存储**:流式写入,易于解析和处理
10
+ ## 特性
12
11
 
13
- ## 目录结构
12
+ ### 🎯 守护线程架构
14
13
 
14
+ - ✅ **常驻后台服务** - 持续运行,实时响应
15
+ - ✅ **主动维护** - 定期健康检查、自动清理、索引优化
16
+ - ✅ **实时监控** - 即时告警、异常检测、性能追踪
17
+ - ✅ **统一调度** - 并发安全、事件队列、智能重试
18
+ - ✅ **系统集成** - systemd/launchd 管理、开机自启
19
+
20
+ ### 📦 核心功能
21
+
22
+ - 🔍 **自动记录** - 捕获每个会话的启动目录、Git 信息、工具调用
23
+ - 🏷️ **智能分类** - 自动识别会话类型(编码、调试、研究、写作、Git 操作等)
24
+ - 📊 **多维索引** - 按类型、按目录、按主机名、按时间快速查询
25
+ - 📈 **统计分析** - 会话统计、类型分布、活跃目录分析
26
+ - 💾 **JSONL 存储** - 流式写入,易于解析和处理
27
+
28
+ ### ⚡ 性能
29
+
30
+ | 指标 | 数值 |
31
+ |------|------|
32
+ | 启动时间 | < 1秒 |
33
+ | Socket 响应 | < 10ms |
34
+ | 内存占用 | ~50MB |
35
+ | CPU 占用 | < 1%(空闲) |
36
+
37
+ ---
38
+
39
+ ## 🚀 快速开始
40
+
41
+ ### 一键安装
42
+
43
+ ```bash
44
+ # 克隆仓库
45
+ git clone https://github.com/JhihJian/claude-daemon.git
46
+ cd claude-daemon
47
+
48
+ # 运行安装脚本
49
+ ./install-daemon.sh
50
+ ```
51
+
52
+ 安装脚本会自动:
53
+ - ✅ 安装 Bun 运行时(如果未安装)
54
+ - ✅ 创建目录结构
55
+ - ✅ 配置守护进程服务
56
+ - ✅ 安装推送模式 Hooks
57
+ - ✅ 设置系统服务(systemd/launchd)
58
+ - ✅ 启动守护进程
59
+
60
+ ### 管理守护进程
61
+
62
+ ```bash
63
+ # 启动守护进程
64
+ claude-daemon start
65
+
66
+ # 停止守护进程
67
+ claude-daemon stop
68
+
69
+ # 重启守护进程
70
+ claude-daemon restart
71
+
72
+ # 查看状态
73
+ claude-daemon status
74
+
75
+ # 查看日志
76
+ claude-daemon logs # 最后 50 行
77
+ claude-daemon logs 100 # 最后 100 行
15
78
  ```
16
- /data/app/claude-history/
17
- ├── hooks/ # Claude Code Hooks
18
- │ ├── SessionRecorder.hook.ts # 会话启动时记录
19
- │ ├── SessionToolCapture.hook.ts # 工具调用时记录
20
- │ └── SessionAnalyzer.hook.ts # 会话结束时分析
21
- ├── tools/ # 查询工具
22
- │ ├── SessionQuery.ts # 会话查询
23
- │ └── SessionStats.ts # 统计分析
24
- ├── lib/ # 共享库(预留)
25
- └── test/ # 测试脚本(预留)
79
+
80
+ ### 使用 Claude Code
81
+
82
+ 正常使用 Claude Code,守护进程会自动记录所有会话:
83
+
84
+ ```bash
85
+ echo "请帮我分析这个项目" | claude -p
26
86
  ```
27
87
 
28
- ## 数据存储结构
88
+ ### 查询会话历史
89
+
90
+ ```bash
91
+ # 查看最近的会话
92
+ claude-sessions recent 10
93
+
94
+ # 查询特定类型
95
+ claude-sessions type coding
96
+
97
+ # 查询特定目录
98
+ claude-sessions dir /path/to/project
99
+
100
+ # 查看统计信息
101
+ claude-sessions stats
102
+ ```
103
+
104
+ ---
105
+
106
+ ## 📐 系统架构
107
+
108
+ ```
109
+ ┌─────────────────────────────────────────┐
110
+ │ Claude Code (用户使用) │
111
+ └────────────┬────────────────────────────┘
112
+ │ 触发 Hooks
113
+
114
+ ┌─────────────────────────────────────────┐
115
+ │ Hooks (轻量推送) │
116
+ │ - SessionRecorder.hook.ts │
117
+ │ - SessionToolCapture.hook.ts │
118
+ │ - SessionAnalyzer.hook.ts │
119
+ └────────────┬────────────────────────────┘
120
+ │ 推送数据 (Unix Socket)
121
+
122
+ ┌─────────────────────────────────────────┐
123
+ │ Claude Daemon (常驻进程) │
124
+ ├─────────────────────────────────────────┤
125
+ │ [Hook Server] ← 接收 Hook 数据 │
126
+ │ ↓ │
127
+ │ [Event Queue] ← 并发控制 │
128
+ │ ↓ │
129
+ │ [Session Analyzer] ← 实时分析 │
130
+ │ ↓ │
131
+ │ [Storage Service] ← 统一存储 │
132
+ │ │
133
+ │ [Scheduler] ← 定时任务 │
134
+ │ - 健康检查 (5分钟) │
135
+ │ - 数据清理 (每天) │
136
+ │ - 会话监控 (1分钟) │
137
+ └─────────────────────────────────────────┘
138
+
139
+ ┌─────────────────────────────────────────┐
140
+ │ Storage Layer │
141
+ │ - Raw Events (JSONL) │
142
+ │ - Summaries (JSON) │
143
+ │ - Indexes (by-type, by-directory) │
144
+ └─────────────────────────────────────────┘
145
+ ```
146
+
147
+ ---
148
+
149
+ ## 📂 项目结构
150
+
151
+ ```
152
+ claude-daemon/
153
+ ├── daemon/ # 守护进程核心
154
+ │ ├── main.ts # 主入口
155
+ │ ├── hook-server.ts # IPC 服务器
156
+ │ ├── event-queue.ts # 事件队列
157
+ │ ├── storage-service.ts # 存储服务
158
+ │ ├── session-analyzer.ts # 会话分析
159
+ │ ├── scheduler.ts # 任务调度
160
+ │ ├── health-monitor.ts # 健康监控
161
+ │ └── cleanup-service.ts # 数据清理
162
+
163
+ ├── hooks-push/ # 推送模式 Hooks
164
+ │ ├── SessionRecorder.hook.ts # 会话启动
165
+ │ ├── SessionToolCapture.hook.ts # 工具调用
166
+ │ └── SessionAnalyzer.hook.ts # 会话结束
167
+
168
+ ├── lib/ # 共享库
169
+ │ ├── config.ts # 配置管理
170
+ │ ├── logger.ts # 日志系统
171
+ │ └── errors.ts # 错误处理
172
+
173
+ ├── tools/ # 查询工具
174
+ │ ├── SessionQuery.ts # 会话查询
175
+ │ └── SessionStats.ts # 统计分析
176
+
177
+ ├── bin/ # 可执行文件
178
+ │ └── claude-daemon # 管理工具
179
+
180
+ ├── systemd/ # Linux 系统服务
181
+ │ └── claude-daemon@.service # systemd 配置
182
+
183
+ ├── launchd/ # macOS 系统服务
184
+ │ └── com.claudecode.daemon.plist # launchd 配置
185
+
186
+ ├── install-daemon.sh # 安装脚本
187
+ ├── DAEMON-GUIDE.md # 完整使用指南
188
+ └── README.md # 本文档
189
+ ```
190
+
191
+ ---
192
+
193
+ ## 📚 文档
194
+
195
+ | 文档 | 说明 |
196
+ |------|------|
197
+ | [DAEMON-GUIDE.md](DAEMON-GUIDE.md) | 完整使用指南 |
198
+ | [DAEMON-IMPLEMENTATION.md](DAEMON-IMPLEMENTATION.md) | 实现报告 |
199
+ | [WHAT-IS-BUN.md](WHAT-IS-BUN.md) | Bun 运行时介绍 |
200
+ | [FINAL-TEST-REPORT.md](FINAL-TEST-REPORT.md) | 完整测试报告 |
201
+ | [FUNCTION-CHECK-REPORT.md](FUNCTION-CHECK-REPORT.md) | 功能检查报告 |
202
+
203
+ ---
204
+
205
+ ## 🔧 会话类型
206
+
207
+ 系统自动识别以下会话类型:
208
+
209
+ | 类型 | 描述 | 判断依据 |
210
+ |------|------|---------|
211
+ | `coding` | 编码 | Edit/Write 操作 > 40% |
212
+ | `debugging` | 调试 | 有测试命令 + Read > Edit |
213
+ | `research` | 研究 | Grep/Glob > 30% + Read > Edit |
214
+ | `writing` | 写作 | Markdown 文件编辑 > 50% |
215
+ | `git` | Git 操作 | Git 命令 > 50% |
216
+ | `mixed` | 混合 | 无明显模式 |
217
+
218
+ ---
219
+
220
+ ## 🗂️ 数据存储
29
221
 
30
222
  ```
31
223
  ~/.claude/SESSIONS/
@@ -48,126 +240,169 @@
48
240
  └── metadata.json # 全局元数据
49
241
  ```
50
242
 
51
- ## 快速开始
243
+ ---
52
244
 
53
- ### 1. 安装 Hooks
245
+ ## ⚙️ 配置
54
246
 
55
- hooks 注册到 Claude Code:
247
+ ### 环境变量
56
248
 
57
249
  ```bash
58
- # 假设 PAI_DIR=~/.claude
59
- cp hooks/*.hook.ts ~/.claude/hooks/
250
+ # 日志级别
251
+ export SESSION_LOG_LEVEL=DEBUG # DEBUG|INFO|WARN|ERROR|SILENT
252
+
253
+ # 路径配置
254
+ export PAI_DIR=~/.claude
60
255
 
61
- # 或者创建符号链接
62
- ln -s /data/app/claude-history/hooks/*.hook.ts ~/.claude/hooks/
256
+ # 输出长度限制
257
+ export MAX_OUTPUT_LENGTH=5000
258
+
259
+ # 超时配置
260
+ export HOOK_TIMEOUT=10000
261
+ export GIT_TIMEOUT=3000
63
262
  ```
64
263
 
65
- ### 2. 配置 Hook 触发器
264
+ ### 配置文件
66
265
 
67
- `~/.claude/settings.json` 中添加:
266
+ 创建 `~/.claude/session-config.json`:
68
267
 
69
268
  ```json
70
269
  {
71
- "hooks": {
72
- "SessionStart": ["SessionRecorder.hook.ts"],
73
- "PostToolUse": ["SessionToolCapture.hook.ts"],
74
- "Stop": ["SessionAnalyzer.hook.ts"]
270
+ "maxOutputLength": 5000,
271
+ "hookTimeout": 10000,
272
+ "gitTimeout": 3000,
273
+ "logLevel": "INFO",
274
+ "classificationThresholds": {
275
+ "coding": 0.4,
276
+ "debugging": 0.0,
277
+ "research": 0.3,
278
+ "writing": 0.5,
279
+ "git": 0.5
75
280
  }
76
281
  }
77
282
  ```
78
283
 
79
- ### 3. 使用查询工具
284
+ ---
80
285
 
81
- ```bash
82
- # 查询最近的会话
83
- bun /data/app/claude-history/tools/SessionQuery.ts recent 10
286
+ ## 🧪 测试状态
84
287
 
85
- # 查询编码类会话
86
- bun /data/app/claude-history/tools/SessionQuery.ts type coding
288
+ | 测试项 | 状态 |
289
+ |-------|------|
290
+ | 守护进程启动 | ✅ PASS |
291
+ | Socket 通信 | ✅ PASS |
292
+ | 事件处理 | ✅ PASS |
293
+ | 数据存储 | ✅ PASS |
294
+ | 会话分析 | ✅ PASS |
295
+ | 定时任务 | ✅ PASS |
296
+ | 健康检查 | ✅ PASS |
297
+ | 优雅关闭 | ✅ PASS |
87
298
 
88
- # 查询特定目录的会话
89
- bun /data/app/claude-history/tools/SessionQuery.ts dir /path/to/project
299
+ **总计**: 12/12 通过 (100%)
90
300
 
91
- # 查看统计信息
92
- bun /data/app/claude-history/tools/SessionStats.ts global
93
- bun /data/app/claude-history/tools/SessionStats.ts types
94
- bun /data/app/claude-history/tools/SessionStats.ts dirs 10
95
- ```
301
+ 详见 [完整测试报告](FINAL-TEST-REPORT.md)
96
302
 
97
- ## 会话类型
303
+ ---
98
304
 
99
- 系统自动识别以下会话类型:
305
+ ## 🔄 从 Hook 模式迁移
100
306
 
101
- | 类型 | 描述 | 判断依据 |
102
- |------|------|---------|
103
- | `coding` | 编码 | Edit/Write 操作 > 40% |
104
- | `debugging` | 调试 | 有测试命令 + Read > Edit |
105
- | `research` | 研究 | Grep/Glob > 30% + Read > Edit |
106
- | `writing` | 写作 | Markdown 文件编辑 > 50% |
107
- | `git` | Git 操作 | Git 命令 > 50% |
108
- | `mixed` | 混合 | 无明显模式 |
307
+ 如果你使用旧的 Hook 模式,升级步骤:
308
+
309
+ ```bash
310
+ # 1. 备份现有配置
311
+ cp ~/.claude/settings.json ~/.claude/settings.json.backup
312
+
313
+ # 2. 运行新的安装脚本
314
+ ./install-daemon.sh
315
+
316
+ # 3. 启动守护进程
317
+ claude-daemon start
318
+
319
+ # 4. 验证
320
+ claude-daemon status
321
+ ```
322
+
323
+ **注意**: 守护进程模式完全向后兼容,旧数据可以继续使用。
109
324
 
110
- ## 技术细节
325
+ ---
111
326
 
112
- - **运行时**:Bun
113
- - **存储格式**:JSONL(每行一个 JSON 对象)
114
- - **索引策略**:增量更新,按时间倒序
115
- - **路径编码**:Base64(避免文件系统特殊字符)
116
- - **性能**:Hook 执行时间 < 50ms,不阻塞 Claude Code
327
+ ## 🛠️ 故障排除
117
328
 
118
- ## 开发
329
+ ### 守护进程无法启动
119
330
 
120
331
  ```bash
121
- # 测试 Hook
122
- echo '{"session_id":"test123","timestamp":"2026-01-23T10:00:00Z"}' | \
123
- bun hooks/SessionRecorder.hook.ts
332
+ # 检查 Bun 是否安装
333
+ which bun
124
334
 
125
- # 测试查询
126
- bun tools/SessionQuery.ts recent 5
335
+ # 查看日志
336
+ cat ~/.claude/daemon.log
127
337
 
128
- # 测试统计
129
- bun tools/SessionStats.ts global
338
+ # 手动启动测试
339
+ bun ~/.claude/daemon/main.ts
130
340
  ```
131
341
 
132
- ## 故障排除
342
+ ### Hooks 不推送数据
343
+
344
+ ```bash
345
+ # 检查 Socket 是否存在
346
+ ls -la /tmp/claude-daemon.sock
133
347
 
134
- ### Hooks 不执行
348
+ # 测试 Socket 连接
349
+ echo '{"test":true}' | nc -U /tmp/claude-daemon.sock
135
350
 
136
- **问题**: Hooks 配置正确但不记录数据
351
+ # 检查 Hooks 权限
352
+ ls -la ~/.claude/hooks/
353
+ ```
137
354
 
138
- **原因**: Hook 脚本的 shebang 使用 `#!/usr/bin/env bun`,但 Claude Code 执行 hooks 时 `~/.bun/bin` 不在 PATH 中
355
+ ### 查看详细日志
139
356
 
140
- **解决方案**: 使用 Bun 的完整路径
141
357
  ```bash
142
- # 修改所有 hook 文件的第一行
143
- #!/home/jhihjian/.bun/bin/bun
358
+ # 实时监控
359
+ claude-daemon logs -f
360
+
361
+ # 或直接查看文件
362
+ tail -f ~/.claude/daemon.log
144
363
  ```
145
364
 
146
- ### 工具输出为空或 success_rate 为 0
365
+ 更多故障排除,请查看 [DAEMON-GUIDE.md](DAEMON-GUIDE.md#故障排除)
147
366
 
148
- **问题**: 会话记录显示 `tool_output: ""` 和 `success: false`
367
+ ---
149
368
 
150
- **原因**: 早期版本的 SessionToolCapture hook 没有正确读取 PostToolUse 事件中的 `tool_response` 字段
369
+ ## 🤝 贡献
151
370
 
152
- **解决方案**: 使用最新版本的 SessionToolCapture-v2.hook.ts,它会:
153
- 1. 优先从 `event.tool_response.stdout/stderr` 读取输出
154
- 2. 从 `!event.tool_response.interrupted` 判断成功状态
155
- 3. 备用方案:从 transcript 文件读取
371
+ 欢迎提交 Issue 和 Pull Request!
156
372
 
157
- ### 验证 Hooks 是否工作
373
+ 1. Fork 本仓库
374
+ 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
375
+ 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
376
+ 4. 推送到分支 (`git push origin feature/AmazingFeature`)
377
+ 5. 开启 Pull Request
158
378
 
159
- ```bash
160
- # 1. 手动测试 hook
161
- echo '{"session_id":"test","tool_name":"Bash"}' | ~/.bun/bin/bun ~/.claude/hooks/SessionRecorder.hook.ts
379
+ ---
162
380
 
163
- # 2. 运行测试会话
164
- echo "请运行 date 命令" | claude -p --dangerously-skip-permissions
381
+ ## 📄 许可证
165
382
 
166
- # 3. 检查会话文件
167
- ls -lt ~/.claude/SESSIONS/raw/2026-01/ | head -3
168
- cat ~/.claude/SESSIONS/raw/2026-01/session-*.jsonl | tail -1 | jq '.'
169
- ```
383
+ MIT License - 详见 [LICENSE](LICENSE) 文件
384
+
385
+ ---
386
+
387
+ ## 🙏 致谢
388
+
389
+ - [Claude Code](https://www.anthropic.com/claude) - Anthropic 的 CLI 工具
390
+ - [Bun](https://bun.sh) - 超快的 JavaScript 运行时
391
+ - 所有贡献者
392
+
393
+ ---
394
+
395
+ ## 📞 联系方式
396
+
397
+ - GitHub: [@JhihJian](https://github.com/JhihJian)
398
+ - Issues: [提交问题](https://github.com/JhihJian/claude-daemon/issues)
399
+
400
+ ---
401
+
402
+ <div align="center">
403
+
404
+ **⭐ 如果这个项目对你有帮助,请给个 Star!**
170
405
 
171
- ## 许可证
406
+ Made with ❤️ by [JhihJian](https://github.com/JhihJian) & [Claude Opus 4.5](https://www.anthropic.com)
172
407
 
173
- MIT
408
+ </div>