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 +381 -0
- package/README.md +152 -221
- package/dist/cli.js +237 -4
- package/dist/cli.js.map +1 -1
- package/dist/core/gatherer.js +69 -25
- package/dist/core/gatherer.js.map +1 -1
- package/dist/core/summarizer.d.ts +20 -0
- package/dist/core/summarizer.js +215 -0
- package/dist/core/summarizer.js.map +1 -0
- package/dist/email/sender.js +33 -24
- package/dist/email/sender.js.map +1 -1
- package/dist/email/template.d.ts +1 -0
- package/dist/email/template.js +42 -13
- package/dist/email/template.js.map +1 -1
- package/dist/grouper/session.d.ts +11 -0
- package/dist/grouper/session.js.map +1 -1
- package/dist/parser/session-jsonl.d.ts +11 -0
- package/dist/parser/session-jsonl.js +57 -8
- package/dist/parser/session-jsonl.js.map +1 -1
- package/dist/report/terminal.d.ts +1 -1
- package/dist/report/terminal.js +202 -42
- package/dist/report/terminal.js.map +1 -1
- package/dist/storage/adapter.d.ts +21 -0
- package/dist/storage/sqljs-adapter.d.ts +7 -1
- package/dist/storage/sqljs-adapter.js +110 -2
- package/dist/storage/sqljs-adapter.js.map +1 -1
- package/package.json +2 -1
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
|