@purpleraven/hits 0.2.0 → 0.2.1

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.
Files changed (3) hide show
  1. package/AGENTS.md +75 -75
  2. package/README.md +163 -163
  3. package/package.json +1 -1
package/AGENTS.md CHANGED
@@ -19,137 +19,137 @@ If pre-flight checks fail, fix the errors before proceeding.
19
19
 
20
20
  ## AI Session Handover Protocol
21
21
 
22
- 토큰 한계 등으로 AI 세션이 교체될 때, 프로젝트별 인수인계가 자동으로 동작합니다.
23
- 모든 데이터는 `~/.hits/data/`에 중앙 집중 저장되며, 프로젝트 경로로 격리됩니다.
22
+ When an AI session is replaced due to token limits, project-specific handover activates automatically.
23
+ All data is centrally stored at `~/.hits/data/` and isolated by project path.
24
24
 
25
- ### 세션 시작
25
+ ### On Session Start
26
26
 
27
27
  ```bash
28
- # HTTP API (HITS 서버 실행 중일 때)
28
+ # HTTP API (when HITS server is running)
29
29
  curl -s "http://localhost:8765/api/handover?project_path=$(pwd)" | python -m json.tool
30
30
 
31
- # 또는 MCP (HITS MCP 설정된 경우):
32
- # hits_get_handover → 이전 세션의 작업 내용, 결정 사항, 미완료 항목 조회
31
+ # Or via MCP tool (when HITS MCP is configured):
32
+ # hits_get_handover → Retrieve previous session's work, decisions, and unfinished items
33
33
  ```
34
34
 
35
- ### 세션 종료 (반드시 기록)
35
+ ### On Session End (MUST record)
36
36
 
37
37
  ```bash
38
38
  curl -X POST http://localhost:8765/api/work-log \
39
39
  -H "Content-Type: application/json" \
40
40
  -d '{
41
- "performed_by": "<AI_도구_이름>",
42
- "request_text": "<작업 요약>",
43
- "context": "<상세 내용, 결정 사항>",
41
+ "performed_by": "<AI_tool_name>",
42
+ "request_text": "<work summary>",
43
+ "context": "<details, decisions>",
44
44
  "source": "ai_session",
45
- "tags": ["<태그>"],
46
- "project_path": "<프로젝트_절대경로>",
45
+ "tags": ["<tag>"],
46
+ "project_path": "<project_absolute_path>",
47
47
  "result_data": {
48
- "files_modified": ["<수정한_파일>"],
49
- "commands_run": ["<실행한_명령>"]
48
+ "files_modified": ["<modified_file>"],
49
+ "commands_run": ["<executed_command>"]
50
50
  }
51
51
  }'
52
52
  ```
53
53
 
54
- ### performed_by 규칙
54
+ ### performed_by Values
55
55
 
56
- | AI 도구 | performed_by |
57
- |---------|----------------|
56
+ | AI Tool | performed_by Value |
57
+ |---------|-------------------|
58
58
  | OpenCode | `"opencode"` |
59
59
  | Claude Code | `"claude"` |
60
60
  | Cursor | `"cursor"` |
61
61
  | GitHub Copilot | `"copilot"` |
62
- | 사용자 직접 | `"manual"` 또는 사용자명 |
62
+ | Manual | `"manual"` or username |
63
63
 
64
- ### project_path 규칙
64
+ ### project_path Rules
65
65
 
66
- - **항상 절대경로 사용**: `"/home/user/source/my-project"` (O), `"./my-project"` (X)
67
- - **자동 감지**: CWD에서 `.git` 디렉토리가 있는 루트를 프로젝트 경로로 사용
68
- - **프로젝트별 격리**: 서로 다른 `project_path`는 완전히 독립된 인수인계 컨텍스트를 가짐
66
+ - **Always use absolute paths**: `"/home/user/source/my-project"` (O), `"./my-project"` (X)
67
+ - **Auto-detection**: Use the directory containing `.git` from CWD as the project path
68
+ - **Project isolation**: Different `project_path` values have completely independent handover contexts
69
69
 
70
- ### MCP 사용 (권장)
70
+ ### MCP Tools (Recommended)
71
71
 
72
- HITS MCP 서버가 설정된 경우, HTTP API 대신 직접 호출:
72
+ When the HITS MCP server is configured, use direct tool calls instead of HTTP API:
73
73
 
74
74
  ```
75
- hits_record_work → 작업 기록 (project_path 자동 감지)
76
- hits_get_handover → 인수인계 요약 조회
77
- hits_search_works → 이전 작업 검색
78
- hits_list_projects → 프로젝트 목록
79
- hits_get_recent → 최근 작업 조회
75
+ hits_record_work → Record work entry (auto-detects project_path)
76
+ hits_get_handover → Query handover summary
77
+ hits_search_works → Search past work
78
+ hits_list_projects → List projects
79
+ hits_get_recent → Get recent work
80
80
  ```
81
81
 
82
- ### 기록 시점
82
+ ### When to Record
83
83
 
84
- - 사용자와 작업 세션 종료
85
- - 주요 기능 구현 완료
86
- - 버그 수정 완료
87
- - 사용자가 명시적으로 종료 요청
88
- - **토큰 한계 경고 수신 시** (즉시 기록!)
84
+ - At the end of a long work session with the user
85
+ - After completing a major feature implementation
86
+ - After fixing a bug
87
+ - When the user explicitly requests to end the session
88
+ - **On token limit warning** (record immediately!)
89
89
 
90
- ### 데이터 저장소
90
+ ### Data Store
91
91
 
92
- | 위치 | 설명 |
93
- |------|------|
94
- | `~/.hits/data/work_logs/` | 작업 기록 (JSON) |
95
- | `~/.hits/data/trees/` | 지식 트리 |
96
- | `~/.hits/data/workflows/` | 워크플로우 |
97
- | `~/.hits/.auth/` | 인증 데이터 (권한 600/700) |
98
- | `HITS_DATA_PATH` 환경변수 | 저장소 경로 오버라이드 |
92
+ | Location | Description |
93
+ |----------|-------------|
94
+ | `~/.hits/data/work_logs/` | Work logs (JSON) |
95
+ | `~/.hits/data/trees/` | Knowledge trees |
96
+ | `~/.hits/data/workflows/` | Workflows |
97
+ | `~/.hits/.auth/` | Auth data (permissions 600/700) |
98
+ | `HITS_DATA_PATH` env var | Override storage path |
99
99
 
100
100
  ## API Endpoints
101
101
 
102
- ### 인증
102
+ ### Authentication
103
103
 
104
104
  | Method | Path | Description |
105
105
  |--------|------|-------------|
106
- | GET | `/api/auth/status` | 인증 상태 (초기화 여부, 로그인 여부) |
107
- | POST | `/api/auth/register` | 사용자 등록 ( 사용자 = admin) |
108
- | POST | `/api/auth/login` | 로그인 (HttpOnly 쿠키 설정) |
109
- | POST | `/api/auth/logout` | 로그아웃 |
110
- | POST | `/api/auth/refresh` | 액세스 토큰 갱신 |
111
- | GET | `/api/auth/me` | 현재 사용자 정보 |
112
- | PUT | `/api/auth/password` | 비밀번호 변경 |
106
+ | GET | `/api/auth/status` | Auth status (initialized, logged in) |
107
+ | POST | `/api/auth/register` | Register user (first user = admin) |
108
+ | POST | `/api/auth/login` | Login (sets HttpOnly cookies) |
109
+ | POST | `/api/auth/logout` | Logout |
110
+ | POST | `/api/auth/refresh` | Refresh access token |
111
+ | GET | `/api/auth/me` | Current user info |
112
+ | PUT | `/api/auth/password` | Change password |
113
113
 
114
- ### 작업 기록
114
+ ### Work Logs
115
115
 
116
116
  | Method | Path | Description |
117
117
  |--------|------|-------------|
118
- | GET | `/api/health` | 서버 상태 확인 |
119
- | POST | `/api/work-log` | 작업 기록 생성 |
120
- | GET | `/api/work-logs` | 작업 기록 목록 (`project_path` 필터 지원) |
121
- | GET | `/api/work-logs/search?q=키워드` | 작업 검색 (`project_path` 필터 지원) |
122
- | GET | `/api/work-log/{id}` | 단건 조회 |
123
- | PUT | `/api/work-log/{id}` | 수정 |
124
- | DELETE | `/api/work-log/{id}` | 삭제 |
118
+ | GET | `/api/health` | Server health check |
119
+ | POST | `/api/work-log` | Create work log |
120
+ | GET | `/api/work-logs` | List work logs (supports `project_path` filter) |
121
+ | GET | `/api/work-logs/search?q=keyword` | Search work logs (supports `project_path` filter) |
122
+ | GET | `/api/work-log/{id}` | Get single entry |
123
+ | PUT | `/api/work-log/{id}` | Update entry |
124
+ | DELETE | `/api/work-log/{id}` | Delete entry |
125
125
 
126
- ### 인수인계
126
+ ### Handover
127
127
 
128
128
  | Method | Path | Description |
129
129
  |--------|------|-------------|
130
- | GET | `/api/handover?project_path=...` | 프로젝트별 인수인계 요약 |
131
- | GET | `/api/handover/projects` | 프로젝트 목록 |
132
- | GET | `/api/handover/project-stats?project_path=...` | 프로젝트 통계 |
130
+ | GET | `/api/handover?project_path=...` | Project handover summary |
131
+ | GET | `/api/handover/projects` | List projects |
132
+ | GET | `/api/handover/project-stats?project_path=...` | Project stats |
133
133
 
134
- ### 지식 카테고리
134
+ ### Knowledge Categories
135
135
 
136
136
  | Method | Path | Description |
137
137
  |--------|------|-------------|
138
- | GET | `/api/knowledge/categories` | 카테고리 목록 |
139
- | POST | `/api/knowledge/category` | 카테고리 생성 |
140
- | PUT | `/api/knowledge/category/{name}` | 카테고리 수정 |
141
- | DELETE | `/api/knowledge/category/{name}` | 카테고리 삭제 |
142
- | POST | `/api/knowledge/category/{name}/nodes` | 노드 추가 |
143
- | PUT | `/api/knowledge/category/{name}/nodes/{idx}` | 노드 수정 |
144
- | DELETE | `/api/knowledge/category/{name}/nodes/{idx}` | 노드 삭제 |
138
+ | GET | `/api/knowledge/categories` | List categories |
139
+ | POST | `/api/knowledge/category` | Create category |
140
+ | PUT | `/api/knowledge/category/{name}` | Update category |
141
+ | DELETE | `/api/knowledge/category/{name}` | Delete category |
142
+ | POST | `/api/knowledge/category/{name}/nodes` | Add node |
143
+ | PUT | `/api/knowledge/category/{name}/nodes/{idx}` | Update node |
144
+ | DELETE | `/api/knowledge/category/{name}/nodes/{idx}` | Delete node |
145
145
 
146
- ### 지식 트리 (노드 기반)
146
+ ### Knowledge Tree (Node-based)
147
147
 
148
148
  | Method | Path | Description |
149
149
  |--------|------|-------------|
150
- | POST | `/api/node` | 지식 노드 생성 |
151
- | PUT | `/api/node/{id}` | 지식 노드 수정 |
152
- | DELETE | `/api/node/{id}` | 지식 노드 삭제 |
150
+ | POST | `/api/node` | Create knowledge node |
151
+ | PUT | `/api/node/{id}` | Update knowledge node |
152
+ | DELETE | `/api/node/{id}` | Delete knowledge node |
153
153
 
154
154
  ## Development Workflow
155
155
 
package/README.md CHANGED
@@ -1,85 +1,85 @@
1
1
  # HITS - Hybrid Intel Trace System
2
2
 
3
- > AI를 가장 적게 쓰면서, 전임자의 뇌를 가장 완벽하게 복제하는 시스템
3
+ > Replicate your predecessor's brain as perfectly as possible, using the least amount of AI.
4
4
 
5
- ## 개요
5
+ ## Overview
6
6
 
7
- HITS 기업의 핵심 지식과 의사결정 맥락을 보존하기 위한 하이브리드 지식 관리 시스템입니다. AI 도구 (Claude, OpenCode, Cursor ) 세션 전환 시 프로젝트별 인수인계를 자동화합니다.
7
+ HITS is a hybrid knowledge management system designed to preserve organizational core knowledge and decision-making context. It automates project-specific handover when switching between AI tool sessions (Claude, OpenCode, Cursor, etc.).
8
8
 
9
- ### 핵심 가치
9
+ ### Core Values
10
10
 
11
- - **토큰 최적화**: AI 비용 절감을 위한 시멘틱 압축과 온디맨드 분석
12
- - **맥락 보존**: Why-How-What 계층 구조로 의사결정 과정 저장
13
- - **실패 경험**: Negative Path로 실패한 접근법도 함께 기록
14
- - **보안 강화**: Argon2id 해싱, JWT HttpOnly 쿠키, CSP, Rate Limiting
15
- - **AI 세션 인수인계**: 토큰 한계로 AI 교체 프로젝트별 컨텍스트 자동 전달
16
- - **중앙 집중 저장**: `~/.hits/data/`에 모든 AI 도구의 작업 기록이 통합 저장
17
- - **프로젝트별 격리**: 프로젝트 경로 기반으로 완전히 독립된 컨텍스트 관리
11
+ - **Token Optimization**: Semantic compression and on-demand analysis to reduce AI costs
12
+ - **Context Preservation**: Store decision-making processes in a Why-How-What hierarchy
13
+ - **Failure Experience**: Record failed approaches alongside successes as Negative Paths
14
+ - **Security Hardened**: Argon2id hashing, JWT HttpOnly cookies, CSP, Rate Limiting
15
+ - **AI Session Handover**: Automatically transfer project context when AI sessions rotate due to token limits
16
+ - **Centralized Storage**: All AI tool work logs are consolidated at `~/.hits/data/`
17
+ - **Project Isolation**: Completely independent context management based on project path
18
18
 
19
- ## 기술 스택
19
+ ## Tech Stack
20
20
 
21
- | 영역 | 기술 |
22
- |------|------|
23
- | **백엔드** | Python 3.10+, FastAPI, Pydantic v2 |
24
- | **프론트엔드** | Svelte 5, Vite, TypeScript |
25
- | **인증** | Argon2id (비밀번호), JWT HS256 (HttpOnly 쿠키) |
26
- | **저장소** | 파일 기반 (`~/.hits/data/`), Redis (선택) |
27
- | **보안** | CSP, CORS, Rate Limiting, Secure Headers |
21
+ | Area | Technology |
22
+ |------|-----------|
23
+ | **Backend** | Python 3.10+, FastAPI, Pydantic v2 |
24
+ | **Frontend** | Svelte 5, Vite, TypeScript |
25
+ | **Authentication** | Argon2id (passwords), JWT HS256 (HttpOnly cookies) |
26
+ | **Storage** | File-based (`~/.hits/data/`), Redis (optional) |
27
+ | **Security** | CSP, CORS, Rate Limiting, Secure Headers |
28
28
 
29
- ## 설치
29
+ ## Installation
30
30
 
31
- ### 요구사항
31
+ ### Requirements
32
32
 
33
- - Python 3.10 이상
34
- - Node.js 18+ (프론트엔드 빌드용)
35
- - Redis (선택사항, 없으면 파일 저장소 사용)
33
+ - Python 3.10 or later
34
+ - Node.js 18+ (for frontend build)
35
+ - Redis (optional falls back to file storage)
36
36
 
37
- ### 빠른 시작
37
+ ### Quick Start
38
38
 
39
39
  ```bash
40
40
  cd hits
41
- ./run.sh # 자동 설치 + 서버 시작
41
+ ./run.sh # Auto-install + start server
42
42
  ```
43
43
 
44
- #### 개발 모드
44
+ #### Development Mode
45
45
 
46
46
  ```bash
47
- ./run.sh --dev # Vite HMR + FastAPI 백엔드
47
+ ./run.sh --dev # Vite HMR + FastAPI backend
48
48
  ```
49
49
 
50
- #### 수동 설치
50
+ #### Manual Installation
51
51
 
52
52
  ```bash
53
- # Python 환경
53
+ # Python environment
54
54
  python3 -m venv venv
55
55
  source venv/bin/activate
56
56
  pip install -r requirements.txt
57
57
 
58
- # 프론트엔드 빌드
58
+ # Frontend build
59
59
  cd hits_web
60
60
  npm install
61
61
  npm run build
62
62
  cd ..
63
63
 
64
- # 서버 실행
64
+ # Start server
65
65
  python -m hits_core.main --port 8765
66
66
  ```
67
67
 
68
- ## 보안
68
+ ## Security
69
69
 
70
- ### 인증 시스템
70
+ ### Authentication System
71
71
 
72
- | 기능 | 구현 |
73
- |------|------|
74
- | **비밀번호 해싱** | Argon2id (memory=64MB, iterations=3, parallelism=1) |
75
- | **비밀번호 최소 길이** | 8 |
76
- | **JWT 토큰** | HttpOnly + Secure + SameSite=Lax 쿠키 |
77
- | **액세스 토큰** | 15 만료 |
78
- | **리프레시 토큰** | 7 만료, `/api/auth/refresh` 경로에서만 전송 |
79
- | **첫 사용자** | 자동으로 admin 역할 부여 |
80
- | **이후 사용자** | admin만 생성 가능 |
72
+ | Feature | Implementation |
73
+ |---------|---------------|
74
+ | **Password Hashing** | Argon2id (memory=64MB, iterations=3, parallelism=1) |
75
+ | **Minimum Password Length** | 8 characters |
76
+ | **JWT Tokens** | HttpOnly + Secure + SameSite=Lax cookies |
77
+ | **Access Token** | 15-minute expiry |
78
+ | **Refresh Token** | 7-day expiry, sent only to `/api/auth/refresh` |
79
+ | **First User** | Automatically assigned admin role |
80
+ | **Subsequent Users** | Can only be created by admin |
81
81
 
82
- ### 보안 헤더
82
+ ### Security Headers
83
83
 
84
84
  ```
85
85
  Content-Security-Policy: default-src 'self'; script-src 'self'; ...
@@ -92,65 +92,65 @@ Permissions-Policy: camera=(), microphone=(), geolocation=()
92
92
 
93
93
  ### Rate Limiting
94
94
 
95
- - 로그인 엔드포인트: 10회/분 (IP 기준)
96
- - 429 Too Many Requests 응답으로 제한
95
+ - Login endpoint: 10 requests/minute (per IP)
96
+ - Responds with 429 Too Many Requests when exceeded
97
97
 
98
- ### 데이터 보호
98
+ ### Data Protection
99
99
 
100
- | 항목 | 권한 | 설명 |
101
- |------|------|------|
102
- | `~/.hits/.auth/users.json` | 600 | 사용자 데이터 (소유자만) |
103
- | `~/.hits/.pepper` | 600 | HMAC 페퍼 (소유자만) |
104
- | `~/.hits/.jwt_secret` | 600 | JWT 서명 (소유자만) |
105
- | `~/.hits/.auth/` | 700 | 인증 디렉토리 (소유자만) |
100
+ | Item | Permissions | Description |
101
+ |------|-------------|-------------|
102
+ | `~/.hits/.auth/users.json` | 600 | User data (owner only) |
103
+ | `~/.hits/.pepper` | 600 | HMAC pepper (owner only) |
104
+ | `~/.hits/.jwt_secret` | 600 | JWT signing key (owner only) |
105
+ | `~/.hits/.auth/` | 700 | Auth directory (owner only) |
106
106
 
107
- ## UI
107
+ ## Web UI
108
108
 
109
- ### 화면 구성
109
+ ### Layout
110
110
 
111
111
  ```
112
112
  ┌─────────────┬───────────────────────────────────┐
113
- 사이드바헤더 ( + 사용자 메뉴)
113
+ SidebarHeader (tabs + user menu)
114
114
  │ ├───────────────────────────────────┤
115
- │ 📂 프로젝트 │ │
116
- │ ────────── │ 메인 컨텐츠 영역
115
+ │ 📂 Projects│ │
116
+ │ ────────── │ Main content area
117
117
  │ /project-a │ │
118
- │ /project-b │ 📋 지식 트리 | 📝 타임라인 | 🔄 인수인계
118
+ │ /project-b │ 📋 Knowledge | 📝 Timeline | 🔄 Handover
119
119
  │ /project-c │ │
120
120
  │ │ │
121
121
  └─────────────┴───────────────────────────────────┘
122
122
  ```
123
123
 
124
- ### 주요 기능
124
+ ### Features
125
125
 
126
- - **지식 트리**: 카테고리별 Why-How-What 노드 관리 (CRUD)
127
- - **타임라인**: 프로젝트별 작업 기록, 날짜별 그룹핑, 검색
128
- - **인수인계**: 프로젝트 선택 자동 생성된 인수인계 요약
129
- - **프로젝트 전환**: 사이드바에서 프로젝트 선택으로 즉시 전환
130
- - **사용자 관리**: 비밀번호 변경, 로그아웃
126
+ - **Knowledge Tree**: Manage Why-How-What nodes by category (full CRUD)
127
+ - **Timeline**: Project work logs, grouped by date, with search
128
+ - **Handover**: Auto-generated handover summary when a project is selected
129
+ - **Project Switching**: Instant context switch via sidebar
130
+ - **User Management**: Password change, logout
131
131
 
132
- ## AI 세션 인수인계
132
+ ## AI Session Handover
133
133
 
134
- ### 작동 방식
134
+ ### How It Works
135
135
 
136
136
  ```
137
- [OpenCode 세션] [Claude 세션]
138
- │ │
139
- 작업 수행 세션 시작
140
- │ │
141
- 작업 기록 ──────────────────────→ 인수인계 조회
142
- POST /api/work-log GET /api/handover
143
- project_path: /my-project project_path: /my-project
144
- │ │
145
- └──→ ~/.hits/data/ ←──┘ │
146
- (중앙 집중) 이전 컨텍스트 파악
147
-
148
- 작업 이어서 수행
137
+ [OpenCode Session] [Claude Session]
138
+ │ │
139
+ Perform work Session start
140
+ │ │
141
+ Record work ──────────────────────→ Query handover
142
+ POST /api/work-log GET /api/handover
143
+ project_path: /my-project project_path: /my-project
144
+ │ │
145
+ └──→ ~/.hits/data/ ←──┘ │
146
+ (centralized) Understand previous context
147
+
148
+ Continue work seamlessly
149
149
  ```
150
150
 
151
- ### MCP 설정
151
+ ### MCP Configuration
152
152
 
153
- OpenCode 또는 Claude MCP 설정에 추가:
153
+ Add to your OpenCode or Claude MCP settings:
154
154
 
155
155
  ```json
156
156
  {
@@ -162,76 +162,76 @@ OpenCode 또는 Claude의 MCP 설정에 추가:
162
162
  }
163
163
  ```
164
164
 
165
- MCP 툴:
166
- - `hits_record_work`: 작업 기록
167
- - `hits_get_handover`: 인수인계 요약
168
- - `hits_search_works`: 작업 검색
169
- - `hits_list_projects`: 프로젝트 목록
170
- - `hits_get_recent`: 최근 작업
165
+ MCP Tools:
166
+ - `hits_record_work`: Record work entry
167
+ - `hits_get_handover`: Get handover summary
168
+ - `hits_search_works`: Search past work
169
+ - `hits_list_projects`: List projects
170
+ - `hits_get_recent`: Get recent work
171
171
 
172
- ## API 엔드포인트
172
+ ## API Endpoints
173
173
 
174
- ### 인증
174
+ ### Authentication
175
175
 
176
176
  | Method | Path | Description |
177
177
  |--------|------|-------------|
178
- | GET | `/api/auth/status` | 인증 상태 확인 |
179
- | POST | `/api/auth/register` | 사용자 등록 |
180
- | POST | `/api/auth/login` | 로그인 (HttpOnly 쿠키 설정) |
181
- | POST | `/api/auth/logout` | 로그아웃 |
182
- | POST | `/api/auth/refresh` | 액세스 토큰 갱신 |
183
- | GET | `/api/auth/me` | 현재 사용자 정보 |
184
- | PUT | `/api/auth/password` | 비밀번호 변경 |
178
+ | GET | `/api/auth/status` | Check auth status |
179
+ | POST | `/api/auth/register` | Register user |
180
+ | POST | `/api/auth/login` | Login (sets HttpOnly cookies) |
181
+ | POST | `/api/auth/logout` | Logout |
182
+ | POST | `/api/auth/refresh` | Refresh access token |
183
+ | GET | `/api/auth/me` | Get current user info |
184
+ | PUT | `/api/auth/password` | Change password |
185
185
 
186
- ### 작업 기록
186
+ ### Work Logs
187
187
 
188
188
  | Method | Path | Description |
189
189
  |--------|------|-------------|
190
- | POST | `/api/work-log` | 작업 기록 생성 |
191
- | GET | `/api/work-logs` | 작업 목록 (`project_path` 필터) |
192
- | GET | `/api/work-logs/search?q=...` | 작업 검색 |
193
- | GET | `/api/work-log/{id}` | 단건 조회 |
194
- | PUT | `/api/work-log/{id}` | 수정 |
195
- | DELETE | `/api/work-log/{id}` | 삭제 |
190
+ | POST | `/api/work-log` | Create work log |
191
+ | GET | `/api/work-logs` | List work logs (supports `project_path` filter) |
192
+ | GET | `/api/work-logs/search?q=...` | Search work logs |
193
+ | GET | `/api/work-log/{id}` | Get single entry |
194
+ | PUT | `/api/work-log/{id}` | Update entry |
195
+ | DELETE | `/api/work-log/{id}` | Delete entry |
196
196
 
197
- ### 인수인계
197
+ ### Handover
198
198
 
199
199
  | Method | Path | Description |
200
200
  |--------|------|-------------|
201
- | GET | `/api/handover?project_path=...` | 프로젝트별 인수인계 요약 |
202
- | GET | `/api/handover/projects` | 프로젝트 목록 |
203
- | GET | `/api/handover/project-stats?project_path=...` | 프로젝트 통계 |
201
+ | GET | `/api/handover?project_path=...` | Get project handover summary |
202
+ | GET | `/api/handover/projects` | List projects |
203
+ | GET | `/api/handover/project-stats?project_path=...` | Get project stats |
204
204
 
205
- ### 지식 카테고리
205
+ ### Knowledge Categories
206
206
 
207
207
  | Method | Path | Description |
208
208
  |--------|------|-------------|
209
- | GET | `/api/knowledge/categories` | 카테고리 목록 |
210
- | POST | `/api/knowledge/category` | 카테고리 생성 |
211
- | PUT | `/api/knowledge/category/{name}` | 카테고리 수정 |
212
- | DELETE | `/api/knowledge/category/{name}` | 카테고리 삭제 |
213
- | POST | `/api/knowledge/category/{name}/nodes` | 노드 추가 |
214
- | PUT | `/api/knowledge/category/{name}/nodes/{idx}` | 노드 수정 |
215
- | DELETE | `/api/knowledge/category/{name}/nodes/{idx}` | 노드 삭제 |
216
-
217
- ### performed_by 규칙
218
-
219
- | AI 도구 | |
220
- |---------|-----|
209
+ | GET | `/api/knowledge/categories` | List categories |
210
+ | POST | `/api/knowledge/category` | Create category |
211
+ | PUT | `/api/knowledge/category/{name}` | Update category |
212
+ | DELETE | `/api/knowledge/category/{name}` | Delete category |
213
+ | POST | `/api/knowledge/category/{name}/nodes` | Add node |
214
+ | PUT | `/api/knowledge/category/{name}/nodes/{idx}` | Update node |
215
+ | DELETE | `/api/knowledge/category/{name}/nodes/{idx}` | Delete node |
216
+
217
+ ### performed_by Values
218
+
219
+ | AI Tool | Value |
220
+ |---------|-------|
221
221
  | OpenCode | `opencode` |
222
222
  | Claude Code | `claude` |
223
223
  | Cursor | `cursor` |
224
- | 사용자 직접 | `manual` |
224
+ | Manual | `manual` |
225
225
 
226
- ## 아키텍처
226
+ ## Architecture
227
227
 
228
228
  ```
229
229
  ┌──────────────────────────────────────────────────────────┐
230
230
  │ hits_web (Svelte 5 + Vite) │
231
- │ Material Dark 테마 · TypeScript
231
+ │ Material Dark theme · TypeScript
232
232
  │ ┌──────────┬──────────┬──────────────────────────┐ │
233
233
  │ │ Sidebar │ Knowledge│ HandoverPanel │ │
234
- │ │ Projects │ Tree │ 인수인계 요약 │ │
234
+ │ │ Projects │ Tree │ Handover summary view │ │
235
235
  │ │ Filter │ Timeline │ │ │
236
236
  │ └──────────┴──────────┴──────────────────────────┘ │
237
237
  │ ↕ API Client (fetch + HttpOnly cookies) │
@@ -257,57 +257,57 @@ MCP 툴:
257
257
  └──────────────────────────────────────────────────────────┘
258
258
  ```
259
259
 
260
- ## 지식 트리 구조
260
+ ## Knowledge Tree Structure
261
261
 
262
- ### Why-How-What 계층
262
+ ### Why-How-What Hierarchy
263
263
 
264
264
  ```
265
- ├── WHY (의도/목적)
266
- │ ├── " 시스템을 만들었나?"
267
- │ └── "비즈니스 목표가 무엇인가?"
265
+ ├── WHY (Intent/Purpose)
266
+ │ ├── "Why was this system built?"
267
+ │ └── "What is the business goal?"
268
268
 
269
- ├── HOW (논리/방법)
270
- │ ├── "어떻게 구현했나?"
271
- │ └── "어떤 의사결정을 내렸나?"
269
+ ├── HOW (Logic/Method)
270
+ │ ├── "How was it implemented?"
271
+ │ └── "What decisions were made?"
272
272
 
273
- └── WHAT (실행/작업)
274
- ├── "구체적으로 무엇을 하나?"
275
- └── "실행 가능한 액션"
273
+ └── WHAT (Execution/Tasks)
274
+ ├── "What specifically does it do?"
275
+ └── "Actionable tasks"
276
276
  ```
277
277
 
278
- ## 개발
278
+ ## Development
279
279
 
280
- ### 개발 모드
280
+ ### Development Mode
281
281
 
282
282
  ```bash
283
283
  ./run.sh --dev # Vite HMR + FastAPI
284
284
  ```
285
285
 
286
- ### 테스트
286
+ ### Testing
287
287
 
288
288
  ```bash
289
- ./run.sh --test # pytest 실행
289
+ ./run.sh --test # Run pytest
290
290
  ```
291
291
 
292
- ### 프론트엔드 개발
292
+ ### Frontend Development
293
293
 
294
294
  ```bash
295
295
  cd hits_web
296
- npm install # 의존성 설치
297
- npm run dev # Vite 개발 서버 (http://localhost:5173)
298
- npm run build # 프로덕션 빌드
296
+ npm install # Install dependencies
297
+ npm run dev # Vite dev server (http://localhost:5173)
298
+ npm run build # Production build
299
299
  ```
300
300
 
301
- ## 라이선스
301
+ ## License
302
302
 
303
- | 패키지 | 라이선스 | 상업적 사용 |
304
- |--------|---------|-------------|
305
- | `hits_core` | Apache 2.0 | ✅ 자유로움 |
306
- | `hits_web` | Apache 2.0 | ✅ 자유로움 |
303
+ | Package | License | Commercial Use |
304
+ |---------|---------|---------------|
305
+ | `hits_core` | Apache 2.0 | ✅ Free |
306
+ | `hits_web` | Apache 2.0 | ✅ Free |
307
307
 
308
- ## 문제 해결
308
+ ## Troubleshooting
309
309
 
310
- ### Node.js 없습니다
310
+ ### Node.js Not Found
311
311
 
312
312
  ```bash
313
313
  # Ubuntu/Debian
@@ -315,22 +315,22 @@ curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
315
315
  sudo apt install -y nodejs
316
316
  ```
317
317
 
318
- ### Redis 연결 실패
318
+ ### Redis Connection Failed
319
319
 
320
- Redis 없이도 HITS는 정상 작동합니다. 파일 기반 저장소를 자동으로 사용합니다.
320
+ HITS works fine without Redis. It automatically falls back to file-based storage.
321
321
 
322
- ### 데이터가 어디에 저장되나요?
322
+ ### Where Is Data Stored?
323
323
 
324
324
  ```
325
325
  ~/.hits/
326
- ├── data/ ← 모든 데이터의 기본 위치
327
- │ ├── work_logs/ ← AI 세션 작업 기록
328
- │ ├── trees/ ← 지식 트리
329
- │ └── workflows/ ← 워크플로우
330
- ├── .auth/ ← 인증 데이터
331
- │ └── users.json ← 사용자 정보 (권한 600)
332
- ├── .pepper ← HMAC 페퍼 (권한 600)
333
- └── .jwt_secret ← JWT 서명 (권한 600)
334
-
335
- HITS_DATA_PATH 환경변수로 경로 변경 가능
326
+ ├── data/ ← Default location for all data
327
+ │ ├── work_logs/ ← AI session work logs
328
+ │ ├── trees/ ← Knowledge trees
329
+ │ └── workflows/ ← Workflows
330
+ ├── .auth/ ← Authentication data
331
+ │ └── users.json ← User info (permissions 600)
332
+ ├── .pepper ← HMAC pepper (permissions 600)
333
+ └── .jwt_secret ← JWT signing key (permissions 600)
334
+
335
+ Override with HITS_DATA_PATH environment variable
336
336
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purpleraven/hits",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "HITS - Hybrid Intel Trace System. AI session handover with secure web UI.",
5
5
  "keywords": [
6
6
  "knowledge-management",