sincenety 0.1.0 → 0.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.ko.md ADDED
@@ -0,0 +1,381 @@
1
+ # sincenety
2
+
3
+ > **[English Documentation (README.md)](./README.md)**
4
+
5
+ **Claude Code 작업 갈무리 도구** — `sincenety` 한 번 실행으로 오늘 하루의 모든 Claude Code 작업을 자동 분석하여 구조화된 기록을 생성합니다.
6
+
7
+ start/stop 없이, 오늘 00:00부터 현재까지의 모든 작업을 소급 정리합니다 (upsert로 중복 방지).
8
+
9
+ ```
10
+ $ sincenety
11
+
12
+ 📋 2026년 4월 7일 화요일 작업 갈무리 (00:00 ~ 18:05)
13
+
14
+ ┌─────────────────────────────────────────────────┐
15
+ │ 총 세션: 4개 │ 메시지: 1,605개 │ 토큰: 221.7K │
16
+ └─────────────────────────────────────────────────┘
17
+
18
+ ┌──────────────┬───────────────┬────────┬─────────┬───────────────────────────────┐
19
+ │ 프로젝트 │ 시간 │ 메시지 │ 토큰 │ 작업 내용 │
20
+ ├──────────────┼───────────────┼────────┼─────────┼───────────────────────────────┤
21
+ │ claudflare │ 11:22 ~ 14:49│ 445 │ 66.4K │ 보안 강화 + 웹 분석 구축 │
22
+ │ sincenety │ 15:01 ~ 18:05│ 312 │ 48.2K │ AI 요약 일일보고 시스템 │
23
+ │ ... │ │ │ │ │
24
+ └──────────────┴───────────────┴────────┴─────────┴───────────────────────────────┘
25
+
26
+ ✅ 갈무리 완료. 기록이 저장되었습니다.
27
+ ```
28
+
29
+ ---
30
+
31
+ ## 핵심 기능
32
+
33
+ ### 소급 갈무리
34
+
35
+ 별도 기록 행위 없이, `sincenety` 실행 시 오늘 00:00부터 현재까지의 `~/.claude/` 데이터를 분석하여 프로젝트별/세션별 작업 내용을 자동 재구성합니다. 하루 전체를 수집하되 upsert로 중복을 방지합니다.
36
+
37
+ - **대화 턴 분석** — 사용자 입력 + 어시스턴트 응답 쌍(`conversationTurns`)을 함께 수집하여 정밀한 작업 내용 파악
38
+ - **세션 JSONL 파싱** — `~/.claude/projects/[project]/[sessionId].jsonl`에서 토큰 사용량, 모델명, 정밀 타임스탬프, 대화 턴 추출
39
+ - **history.jsonl 보조 인덱스** — 빠른 세션 목록 조회용
40
+ - **갈무리 포인트** — 매 실행 시 "여기까지 정리했음" 마커를 저장하여 중복 없이 이어서 정리
41
+
42
+ ### 풍부한 작업 기록
43
+
44
+ | 항목 | 설명 |
45
+ |------|------|
46
+ | 작업 타이틀 | 첫 사용자 메시지에서 자동 추출 |
47
+ | 작업 설명 | 주요 사용자 메시지 3~5개 연결 |
48
+ | 토큰 사용량 | 입력/출력/캐시 토큰 메시지별 합산 |
49
+ | 작업 시간 | 첫 메시지 ~ 마지막 메시지 정밀 측정 |
50
+ | 사용 모델 | assistant 응답에서 모델명 추출 |
51
+ | 카테고리 | 프로젝트 경로 기반 자동 분류 |
52
+
53
+ ### AI 요약 일일보고
54
+
55
+ Claude Code 세션 자체를 요약 엔진으로 활용합니다. `--json` 플래그로 대화 턴 포함 구조화 JSON을 출력하면, SKILL.md가 Claude Code에게 직접 요약 생성을 지시합니다. 외부 API 키 없이도 동작하며, `ANTHROPIC_API_KEY`가 있으면 Claude API 요약도 가능합니다.
56
+
57
+ - **`save-daily`** — AI가 생성한 일일보고를 DB에 저장
58
+ - **`report`** — 일일/주간/월간 보고 조회 (주간/월간은 일일보고를 종합)
59
+
60
+ ### 이메일 리포트
61
+
62
+ Gmail SMTP를 통해 갈무리 리포트를 이메일로 발송합니다. 세션별 컬러 코딩, 토큰 대시보드, 갈무리 요약이 포함된 HTML 이메일입니다. wrapUp 데이터(outcome, flow, significance)를 반영하며, XML/시스템 태그가 정리된 깔끔한 이메일을 생성합니다.
63
+
64
+ ### 자동 스케줄링
65
+
66
+ 오후 6시(기본)에 자동으로 갈무리 + 이메일 발송. macOS는 launchd, Linux는 crontab을 자동으로 설정합니다.
67
+
68
+ ### 암호화 저장
69
+
70
+ 모든 데이터는 AES-256-GCM으로 암호화되어 `~/.sincenety/sincenety.db`에 저장됩니다. 머신 바운드 키(hostname + username + 랜덤 salt)를 기본으로 사용하며, 선택적으로 passphrase를 설정할 수 있습니다.
71
+
72
+ ---
73
+
74
+ ## 설치 및 사용
75
+
76
+ ### 설치
77
+
78
+ ```bash
79
+ # npx로 즉시 실행 (향후 npm publish 후)
80
+ npx sincenety@latest
81
+
82
+ # 또는 로컬 빌드
83
+ git clone <repo-url>
84
+ cd sincenety
85
+ npm install
86
+ npm run build
87
+ npm link # 글로벌 등록
88
+ ```
89
+
90
+ ### 기본 사용
91
+
92
+ ```bash
93
+ # 갈무리 (오늘 00:00부터 현재까지)
94
+ sincenety
95
+
96
+ # 특정 시점부터 갈무리
97
+ sincenety --since "09:00"
98
+ sincenety --since "2026-04-07 09:00"
99
+
100
+ # 구조화 JSON 출력 (대화 턴 포함, AI 요약 파이프라인용)
101
+ sincenety --json
102
+
103
+ # 빠른 모드 (토큰 추출 없이 history.jsonl만 사용)
104
+ sincenety --no-detail
105
+
106
+ # 작업 로그 조회
107
+ sincenety log
108
+ sincenety log --date 2026-04-06
109
+ sincenety log --week
110
+
111
+ # AI 요약 일일보고 저장 (stdin으로 JSON 입력)
112
+ sincenety save-daily < daily_report.json
113
+
114
+ # 보고 조회
115
+ sincenety report # 오늘 일일보고
116
+ sincenety report --week # 주간 보고
117
+ sincenety report --month # 월간 보고
118
+ sincenety report --date 2026-04-06 # 특정일 보고
119
+ ```
120
+
121
+ ### 이메일 설정
122
+
123
+ ```bash
124
+ # 수신 이메일
125
+ sincenety config --email user@gmail.com
126
+
127
+ # SMTP 설정 (Gmail 앱 비밀번호)
128
+ sincenety config --smtp-user sender@gmail.com
129
+ sincenety config --smtp-pass # 프롬프트에서 비밀번호 입력 (쉘 히스토리 노출 방지)
130
+
131
+ # 이메일 발송
132
+ sincenety email
133
+ sincenety email --date 2026-04-06
134
+ ```
135
+
136
+ > Gmail 앱 비밀번호 생성: https://myaccount.google.com/apppasswords
137
+
138
+ ### 자동 갈무리 스케줄
139
+
140
+ ```bash
141
+ # 오후 6시 자동 갈무리 + 이메일 설치
142
+ sincenety schedule --install
143
+
144
+ # 시간 변경
145
+ sincenety schedule --install --time 19:00
146
+
147
+ # 상태 확인 / 해제
148
+ sincenety schedule --status
149
+ sincenety schedule --uninstall
150
+ ```
151
+
152
+ ### Claude Code Skill
153
+
154
+ Claude Code 안에서 `/sincenety`로 직접 호출 가능합니다. `~/.claude/skills/sincenety/SKILL.md`에 등록됩니다.
155
+
156
+ ---
157
+
158
+ ## 아키텍처
159
+
160
+ ```
161
+ sincenety/
162
+ ├── src/
163
+ │ ├── cli.ts # CLI 진입점 (commander, 7개 서브커맨드)
164
+ │ ├── core/
165
+ │ │ ├── gatherer.ts # 갈무리 핵심 로직 (파싱→그룹핑→저장→리포트)
166
+ │ │ └── summarizer.ts # AI 요약 (Claude API + 휴리스틱 fallback)
167
+ │ ├── parser/
168
+ │ │ ├── history.ts # ~/.claude/history.jsonl 스트리밍 파서
169
+ │ │ └── session-jsonl.ts # 세션 JSONL 파서 (토큰/모델/타이밍/대화턴 추출)
170
+ │ ├── grouper/
171
+ │ │ └── session.ts # sessionId+project 기준 그룹핑
172
+ │ ├── storage/
173
+ │ │ ├── adapter.ts # StorageAdapter 인터페이스
174
+ │ │ └── sqljs-adapter.ts # sql.js 구현 (암호화 DB, 자동 마이그레이션)
175
+ │ ├── encryption/
176
+ │ │ ├── key.ts # PBKDF2 키 파생 (머신 바운드 + passphrase)
177
+ │ │ └── crypto.ts # AES-256-GCM encrypt/decrypt
178
+ │ ├── report/
179
+ │ │ ├── terminal.ts # 터미널 테이블 출력 (유니코드 박스 드로잉, 한글 폭 계산)
180
+ │ │ └── markdown.ts # 마크다운 리포트 생성
181
+ │ ├── email/
182
+ │ │ ├── sender.ts # nodemailer 이메일 발송
183
+ │ │ └── template.ts # Bright 컬러코딩 HTML 이메일 템플릿
184
+ │ ├── scheduler/
185
+ │ │ └── install.ts # launchd/cron 자동 설치
186
+ │ └── types/
187
+ │ └── sql.js.d.ts # sql.js 타입 정의
188
+ ├── tests/
189
+ │ └── encryption.test.ts # 암호화 테스트 (26개)
190
+ ├── package.json
191
+ ├── tsconfig.json
192
+ ├── CLAUDE.md
193
+ └── README.md
194
+ ```
195
+
196
+ ### 데이터 흐름
197
+
198
+ ```
199
+ ~/.claude/history.jsonl ──→ 세션 목록 추출 (sessionId + project)
200
+
201
+
202
+ ~/.claude/projects/[project]/[sessionId].jsonl ──→ 토큰/모델/타이밍/대화턴 추출
203
+
204
+
205
+ 그룹핑 + 요약 생성
206
+
207
+ ┌──────────┬───┼───────┬──────────────┐
208
+ ▼ ▼ ▼ ▼ ▼
209
+ 터미널 출력 --json DB 저장 이메일 발송 Claude Code
210
+ (테이블) (구조화) (암호화) AI 요약
211
+
212
+
213
+ save-daily
214
+ (일일보고 DB 저장)
215
+
216
+
217
+ report (일일/주간/월간)
218
+ ```
219
+
220
+ ### DB 스키마
221
+
222
+ **5개 테이블:**
223
+
224
+ | 테이블 | 설명 |
225
+ |--------|------|
226
+ | `sessions` | 세션별 작업 기록 (22개 컬럼 — 토큰, 시간, 타이틀, 설명, 모델 등) |
227
+ | `gather_reports` | 갈무리 실행마다 리포트 저장 (마크다운 + JSON) |
228
+ | `daily_reports` | AI 요약 일일/주간/월간 보고 (UNIQUE(report_date, report_type)) |
229
+ | `checkpoints` | 갈무리 포인트 (마지막 처리 timestamp) |
230
+ | `config` | 설정 (이메일, SMTP 등) |
231
+
232
+ DB 파일: `~/.sincenety/sincenety.db` (AES-256-GCM 암호화, 0600 권한)
233
+
234
+ ### 암호화 상세
235
+
236
+ - **알고리즘**: AES-256-GCM (인증된 암호화)
237
+ - **키 파생**: PBKDF2 (SHA-256, 100,000 iterations)
238
+ - **키 소스**: `hostname + username + 랜덤 salt` (머신 바운드)
239
+ - **Salt**: `~/.sincenety/sincenety.salt` (32바이트 랜덤, 설치 시 1회 생성, 0600 권한)
240
+ - **파일 포맷**: `[4B magic "SNCT"][12B IV][ciphertext][16B auth tag]`
241
+ - **선택적 passphrase**: `sincenety config --set-passphrase` (향후 구현 예정)
242
+
243
+ ---
244
+
245
+ ## 기술 스택
246
+
247
+ | 구성요소 | 기술 |
248
+ |---------|------|
249
+ | 언어 | TypeScript (ESM, Node16 모듈) |
250
+ | 런타임 | Node.js >= 18 |
251
+ | CLI | commander |
252
+ | DB | sql.js (WASM SQLite, native 의존성 없음) |
253
+ | 암호화 | Node.js 내장 crypto (AES-256-GCM) |
254
+ | 이메일 | nodemailer (Gmail SMTP) |
255
+ | 테스트 | vitest |
256
+
257
+ ### 의존성 (최소)
258
+
259
+ ```
260
+ dependencies:
261
+ commander # CLI 파싱
262
+ nodemailer # 이메일 발송
263
+ sql.js # WASM SQLite
264
+
265
+ devDependencies:
266
+ typescript
267
+ vitest
268
+ tsx
269
+ @types/node
270
+ @types/nodemailer
271
+ ```
272
+
273
+ ---
274
+
275
+ ## 개발 가이드
276
+
277
+ ### 빌드 및 실행
278
+
279
+ ```bash
280
+ npm install # 의존성 설치
281
+ npm run build # TypeScript 컴파일 (dist/)
282
+ npm run dev # tsx로 개발 실행
283
+ npm test # vitest 테스트
284
+ node dist/cli.js # 직접 실행
285
+ ```
286
+
287
+ ### 테스트
288
+
289
+ ```bash
290
+ # 암호화 테스트 (26개)
291
+ npx vitest run tests/encryption.test.ts
292
+
293
+ # 전체 테스트
294
+ npm test
295
+ ```
296
+
297
+ ### 로컬 npx 테스트
298
+
299
+ ```bash
300
+ npx . # 현재 디렉토리를 npx로 실행
301
+ ```
302
+
303
+ ---
304
+
305
+ ## 개발 이력
306
+
307
+ ### v0.1 (2026-04-07) — MVP
308
+
309
+ - `history.jsonl` 기반 소급 갈무리
310
+ - sql.js 암호화 DB (AES-256-GCM)
311
+ - 세션 그룹핑 (sessionId + project)
312
+ - 터미널 리포트
313
+ - Claude Code Skill 등록 (`/sincenety`)
314
+
315
+ ### v0.1.1 (2026-04-07) — 보안 강화
316
+
317
+ 보안 감사 결과 CRITICAL 2개 + HIGH 3개 발견, 전부 수정:
318
+ - 랜덤 salt 생성/저장 (`~/.sincenety/sincenety.salt`)
319
+ - DB/salt 파일 권한 0600, 디렉토리 0700
320
+ - 복호화 실패 시 에러 메시지 (무음 DB 교체 제거)
321
+ - CLI 입력 검증 (날짜, 경로, 빈 값)
322
+ - MariaDB URI 보안 (환경변수 참조)
323
+
324
+ ### v0.2 (2026-04-07) — 풍부한 작업 기록 + 이메일 + 스케줄링
325
+
326
+ 데이터소스 전환: `history.jsonl` → `~/.claude/projects/[project]/[sessionId].jsonl`
327
+
328
+ - **토큰 추적**: 메시지별 input/output/cache 토큰 합산
329
+ - **모델 추적**: assistant 응답에서 사용 모델 추출
330
+ - **정밀 타이밍**: ISO 8601 타임스탬프 기반 (밀리초 정밀도)
331
+ - **DB 스키마 v2**: sessions 14개 컬럼 추가, gather_reports/config 테이블
332
+ - **자동 마이그레이션**: v1 → v2 ALTER TABLE ADD COLUMN
333
+ - **마크다운 리포트**: 토큰/모델 포함 풍부한 리포트
334
+ - **이메일 발송**: nodemailer + Gmail SMTP
335
+ - **HTML 이메일 템플릿**: Bright 컬러코딩 대시보드
336
+ - Section 01: 세션 갈무리 요약 (최상단)
337
+ - Section 02: 오늘의 수치 (토큰/비용 대시보드)
338
+ - Section 03: 세션별 상세 작업 로그
339
+ - Section 04: 하루의 성과
340
+ - **자동 스케줄링**: launchd (macOS) / crontab (Linux) 자동 설치
341
+ - **`--auto` 플래그**: 갈무리 + 이메일 자동 발송 (스케줄러용)
342
+
343
+ ### v0.3 (2026-04-07) — AI 요약 일일보고 + 주간/월간 보고
344
+
345
+ - **기본 갈무리 범위 변경**: 항상 오늘 00:00부터 (upsert로 중복 방지)
346
+ - **대화 턴 수집**: `session-jsonl.ts`에서 사용자 입력 + 어시스턴트 응답 쌍(`conversationTurns`) 추출
347
+ - **터미널 테이블 출력**: 요약 테이블 + 세션 상세 테이블 (유니코드 박스 드로잉, 한글 fullwidth 폭 계산)
348
+ - **AI 요약 아키텍처**: `--json` 플래그로 대화 턴 포함 구조화 JSON 출력, SKILL.md가 Claude Code에게 직접 요약 지시
349
+ - **summarizer.ts**: Claude API 요약 (`ANTHROPIC_API_KEY` 있을 때) + 휴리스틱 fallback
350
+ - **일일보고 시스템**: `save-daily` (stdin JSON → DB 저장), `report` (일일/주간/월간 조회)
351
+ - **DB 스키마 v3**: `daily_reports` 테이블 추가 (UNIQUE(report_date, report_type))
352
+ - **이메일 개선**: XML/시스템 태그 정리 (cleanText, esc 함수 강화), wrapUp 데이터 반영, Section 04 작업 흐름 표시
353
+
354
+ ### 향후 계획
355
+
356
+ - [ ] npm publish → `npx sincenety@latest` 배포
357
+ - [ ] passphrase 설정 기능 완성
358
+ - [ ] 유사 작업 매칭 (TF-IDF 기반)
359
+ - [ ] MariaDB/PostgreSQL 외부 DB 연결 (현재 비활성화)
360
+ - [x] 주간/월간 요약 리포트
361
+ - [ ] ccusage 연동 (토큰 비용 자동 계산)
362
+
363
+ ---
364
+
365
+ ## 프로젝트 수치 (2026-04-07 기준)
366
+
367
+ | 지표 | 수치 |
368
+ |------|------|
369
+ | TypeScript 소스 파일 | 15개 |
370
+ | 총 코드 라인 | 3,013줄 |
371
+ | 암호화 테스트 | 26/26 통과 |
372
+ | CLI 명령어 | 7개 (갈무리, log, config, email, schedule, save-daily, report) |
373
+ | DB 테이블 | 5개 |
374
+ | 의존성 (production) | 3개 (commander, nodemailer, sql.js) |
375
+ | 보안 이슈 발견/수정 | 8/8 |
376
+
377
+ ---
378
+
379
+ ## 라이선스
380
+
381
+ MIT