@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 +331 -96
- package/bin/claude-daemon +266 -0
- package/bin/cli.js +117 -18
- package/hooks/SessionRecorder.hook.push.ts +193 -0
- package/install-windows-final.ps1 +329 -0
- package/install-windows-v2.ps1 +262 -0
- package/install-windows.ps1 +197 -0
- package/install.ps1 +209 -0
- package/install.sh +95 -25
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -1,31 +1,223 @@
|
|
|
1
|
-
# Claude Code
|
|
1
|
+
# Claude Code 守护进程(Daemon)
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> 🚀 自动记录、分析和监控 Claude Code 会话的守护线程系统
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
[](https://github.com/JhihJian/claude-daemon)
|
|
6
|
+
[](https://bun.sh)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
[](FINAL-TEST-REPORT.md)
|
|
6
9
|
|
|
7
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
245
|
+
## ⚙️ 配置
|
|
54
246
|
|
|
55
|
-
|
|
247
|
+
### 环境变量
|
|
56
248
|
|
|
57
249
|
```bash
|
|
58
|
-
#
|
|
59
|
-
|
|
250
|
+
# 日志级别
|
|
251
|
+
export SESSION_LOG_LEVEL=DEBUG # DEBUG|INFO|WARN|ERROR|SILENT
|
|
252
|
+
|
|
253
|
+
# 路径配置
|
|
254
|
+
export PAI_DIR=~/.claude
|
|
60
255
|
|
|
61
|
-
#
|
|
62
|
-
|
|
256
|
+
# 输出长度限制
|
|
257
|
+
export MAX_OUTPUT_LENGTH=5000
|
|
258
|
+
|
|
259
|
+
# 超时配置
|
|
260
|
+
export HOOK_TIMEOUT=10000
|
|
261
|
+
export GIT_TIMEOUT=3000
|
|
63
262
|
```
|
|
64
263
|
|
|
65
|
-
###
|
|
264
|
+
### 配置文件
|
|
66
265
|
|
|
67
|
-
|
|
266
|
+
创建 `~/.claude/session-config.json`:
|
|
68
267
|
|
|
69
268
|
```json
|
|
70
269
|
{
|
|
71
|
-
"
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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
|
-
|
|
284
|
+
---
|
|
80
285
|
|
|
81
|
-
|
|
82
|
-
# 查询最近的会话
|
|
83
|
-
bun /data/app/claude-history/tools/SessionQuery.ts recent 10
|
|
286
|
+
## 🧪 测试状态
|
|
84
287
|
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
-
|
|
113
|
-
- **存储格式**:JSONL(每行一个 JSON 对象)
|
|
114
|
-
- **索引策略**:增量更新,按时间倒序
|
|
115
|
-
- **路径编码**:Base64(避免文件系统特殊字符)
|
|
116
|
-
- **性能**:Hook 执行时间 < 50ms,不阻塞 Claude Code
|
|
327
|
+
## 🛠️ 故障排除
|
|
117
328
|
|
|
118
|
-
|
|
329
|
+
### 守护进程无法启动
|
|
119
330
|
|
|
120
331
|
```bash
|
|
121
|
-
#
|
|
122
|
-
|
|
123
|
-
bun hooks/SessionRecorder.hook.ts
|
|
332
|
+
# 检查 Bun 是否安装
|
|
333
|
+
which bun
|
|
124
334
|
|
|
125
|
-
#
|
|
126
|
-
|
|
335
|
+
# 查看日志
|
|
336
|
+
cat ~/.claude/daemon.log
|
|
127
337
|
|
|
128
|
-
#
|
|
129
|
-
bun
|
|
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
|
-
|
|
348
|
+
# 测试 Socket 连接
|
|
349
|
+
echo '{"test":true}' | nc -U /tmp/claude-daemon.sock
|
|
135
350
|
|
|
136
|
-
|
|
351
|
+
# 检查 Hooks 权限
|
|
352
|
+
ls -la ~/.claude/hooks/
|
|
353
|
+
```
|
|
137
354
|
|
|
138
|
-
|
|
355
|
+
### 查看详细日志
|
|
139
356
|
|
|
140
|
-
**解决方案**: 使用 Bun 的完整路径
|
|
141
357
|
```bash
|
|
142
|
-
#
|
|
143
|
-
|
|
358
|
+
# 实时监控
|
|
359
|
+
claude-daemon logs -f
|
|
360
|
+
|
|
361
|
+
# 或直接查看文件
|
|
362
|
+
tail -f ~/.claude/daemon.log
|
|
144
363
|
```
|
|
145
364
|
|
|
146
|
-
|
|
365
|
+
更多故障排除,请查看 [DAEMON-GUIDE.md](DAEMON-GUIDE.md#故障排除)
|
|
147
366
|
|
|
148
|
-
|
|
367
|
+
---
|
|
149
368
|
|
|
150
|
-
|
|
369
|
+
## 🤝 贡献
|
|
151
370
|
|
|
152
|
-
|
|
153
|
-
1. 优先从 `event.tool_response.stdout/stderr` 读取输出
|
|
154
|
-
2. 从 `!event.tool_response.interrupted` 判断成功状态
|
|
155
|
-
3. 备用方案:从 transcript 文件读取
|
|
371
|
+
欢迎提交 Issue 和 Pull Request!
|
|
156
372
|
|
|
157
|
-
|
|
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
|
-
|
|
160
|
-
# 1. 手动测试 hook
|
|
161
|
-
echo '{"session_id":"test","tool_name":"Bash"}' | ~/.bun/bin/bun ~/.claude/hooks/SessionRecorder.hook.ts
|
|
379
|
+
---
|
|
162
380
|
|
|
163
|
-
|
|
164
|
-
echo "请运行 date 命令" | claude -p --dangerously-skip-permissions
|
|
381
|
+
## 📄 许可证
|
|
165
382
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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
|
-
|
|
408
|
+
</div>
|