Skip to content

Commit c219319

Browse files
committed
2 parents aaf2a2a + 11fd515 commit c219319

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+3584
-6104
lines changed

.claude/settings.local.json

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,18 @@
164164
"Bash(cd:*)",
165165
"Bash(cd:*)",
166166
"Bash(cd:*)",
167-
"Bash(cd:*)"
167+
"Bash(cd:*)",
168+
"Bash(cd:*)",
169+
"Bash(python test_gdrive_integration.py:*)",
170+
"Bash(open http://localhost:8001/static/gdrive-ui.html)",
171+
"Bash(python test_full_gdrive_flow.py:*)",
172+
"Bash(true)",
173+
"Bash(python -m pytest tests/unit/test_basic_functionality.py -v -x)",
174+
"Bash(black:*)",
175+
"Bash(isort:*)",
176+
"Bash(pylint:*)",
177+
"Bash(git fsck:*)",
178+
"Bash(git fetch:*)"
168179
],
169180
"deny": []
170181
}

DEVELOPMENT_CONTEXT.md

Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
# Development Context - Second Brain v4.2.3
2+
3+
## Current State (August 15, 2025)
4+
5+
### ✅ What's Working
6+
- **PostgreSQL Backend**: Production-ready with pgvector for embeddings
7+
- **Google Drive Integration**: Full OAuth flow implemented and functional
8+
- User can authenticate with Google account
9+
- List and browse Google Drive files
10+
- Sync files to PostgreSQL as memories
11+
- Generate OpenAI embeddings (when API key configured)
12+
- **Code Quality**: 10/10 linting score, PEP8 compliant, properly formatted
13+
- **Tests**: All 28 tests passing locally and in CI
14+
- **UI**: Beautiful Google Drive interface at `/static/gdrive-ui.html`
15+
16+
### 🔧 Current Implementation Details
17+
18+
#### Google OAuth Flow (Accurate as of Session 7)
19+
1. **User Action**: Click "Connect Google Drive" in frontend
20+
2. **Backend Request**: Frontend calls `/api/v1/gdrive/connect` endpoint
21+
3. **Authorization URL Generation**: Backend constructs OAuth 2.0 URL with parameters
22+
4. **Redirect to Google**: Frontend redirects browser to authorization URL
23+
5. **User Consent**: User approves requested permissions (drive.readonly)
24+
6. **Redirect to Callback**: Google redirects to `http://localhost:8001/api/v1/gdrive/callback`
25+
7. **Code Exchange**: Callback exchanges authorization code for tokens
26+
8. **Token Storage**: Currently stored IN MEMORY (problem - lost on restart)
27+
9. **Confirmation**: User shown success page
28+
29+
#### Key Files
30+
- `app/routes/gdrive_real.py`: FastAPI endpoints for OAuth flow
31+
- `app/services/google_drive_simple.py`: Google Drive API business logic
32+
- `docs/google-drive-integration.md`: User-facing setup guide
33+
34+
### ⚠️ Critical Issues
35+
36+
1. **Token Persistence**: Tokens stored in memory are lost on restart
37+
- User must re-authenticate every time server restarts
38+
- No refresh token logic implemented
39+
- Not suitable for production use
40+
41+
2. **Security Considerations**
42+
- Tokens should be encrypted before storage
43+
- Need secure local storage solution
44+
- Must not commit tokens to git
45+
46+
### 🎯 Next Steps (Priority Order)
47+
48+
1. **Implement Token Persistence**
49+
- Store tokens in `.gdrive_tokens.json` (local file)
50+
- Encrypt tokens using Fernet encryption
51+
- Add to `.gitignore` to prevent git commits
52+
53+
2. **Add Token Refresh Logic**
54+
- Check if access token expired before API calls
55+
- Use refresh token to get new access token
56+
- Update stored tokens automatically
57+
58+
3. **Improve User Experience**
59+
- Auto-reconnect on server restart if tokens exist
60+
- Show connection status in UI
61+
- Handle token expiration gracefully
62+
63+
## User Preferences & Context
64+
65+
### Development Style
66+
- **Autonomous Mode**: No confirmations needed, execute immediately
67+
- **Cross-Platform**: Works on Windows, macOS, Linux
68+
- **No Co-Author Lines**: Don't add co-author lines to commits
69+
- **Production Focus**: Real implementation, not demos
70+
71+
### Technical Constraints
72+
- **Single User**: Designed for personal use
73+
- **Docker Deployment**: Will run in Docker container
74+
- **PostgreSQL Only**: No SQLite, Redis, or other databases
75+
- **Local Storage OK**: Can use local files for single-user tokens
76+
77+
## Session History
78+
79+
### Session 7 (August 15, 2025)
80+
- Implemented real Google Drive integration
81+
- Fixed all linting and code quality issues
82+
- Cleaned up repository (removed 17 temp files)
83+
- Added proper dependencies to requirements.txt
84+
- Tests passing in CI
85+
- **Issue Identified**: Token persistence needed
86+
87+
### Previous Sessions
88+
- Sessions 1-6: Built v4.2.3 with PostgreSQL backend
89+
- Extensive testing and documentation cleanup
90+
- Security patches applied
91+
- Production-ready base system
92+
93+
## Architecture Decisions
94+
95+
### Token Storage Solution (Proposed)
96+
```python
97+
# Store in: .gdrive_tokens.json
98+
{
99+
"access_token": "encrypted_token_here",
100+
"refresh_token": "encrypted_token_here",
101+
"token_expiry": "2025-08-15T12:00:00Z",
102+
"user_email": "[email protected]"
103+
}
104+
```
105+
106+
### Security Implementation
107+
- Use `cryptography.fernet` for symmetric encryption
108+
- Derive key from `ENCRYPTION_KEY` in `.env`
109+
- Never store plaintext tokens
110+
- Validate token integrity on load
111+
112+
## Testing Status
113+
114+
### What's Tested
115+
- Basic functionality (28 tests)
116+
- Import verification
117+
- Mock services
118+
- Factory pattern
119+
120+
### What Needs Testing
121+
- Token persistence
122+
- Token refresh logic
123+
- OAuth flow end-to-end
124+
- File sync with real embeddings
125+
126+
## Dependencies Added
127+
- `redis==5.0.1` (for tests)
128+
- `aiohttp==3.9.5` (for async HTTP)
129+
- `google-auth==2.32.0`
130+
- `google-auth-oauthlib==1.2.0`
131+
- `google-api-python-client==2.137.0`
132+
133+
## Environment Variables
134+
```bash
135+
# Google OAuth (configured)
136+
GOOGLE_CLIENT_ID=741796279744-ed8polbgfqjttqt2vlpgmofs7gho8kbl.apps.googleusercontent.com
137+
GOOGLE_CLIENT_SECRET=***hidden***
138+
GOOGLE_REDIRECT_URI=http://localhost:8001/api/v1/gdrive/callback
139+
140+
# Encryption (for token storage)
141+
ENCRYPTION_KEY=test-encryption-key # Should be strong in production
142+
```
143+
144+
## Known Issues & Workarounds
145+
146+
1. **Python 3.13 Compatibility**
147+
- Some packages (numpy, pandas) don't support 3.13 yet
148+
- Temporarily disabled in requirements.txt
149+
150+
2. **Mock Database Fallback**
151+
- System falls back to mock DB if PostgreSQL unavailable
152+
- Good for testing, but user should use real PostgreSQL
153+
154+
3. **OpenAI Embeddings**
155+
- Currently using mock key
156+
- User needs real OpenAI API key for embeddings
157+
158+
## Success Metrics
159+
- ✅ Google Drive authentication works
160+
- ✅ Files can be listed and synced
161+
- ✅ Memories stored in PostgreSQL
162+
- ✅ Code quality 10/10
163+
- ✅ Tests passing
164+
- ❌ Tokens persist across restarts (TODO)
165+
- ❌ Automatic token refresh (TODO)
166+
167+
## Next Session Goals
168+
1. Implement token persistence with encryption
169+
2. Add refresh token logic
170+
3. Test full flow with restart
171+
4. Document token security model
172+
5. Consider adding progress indicators for large file syncs

README.md

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
<div align="center">
2-
<img src="logo.png" alt="Second Brain Logo" width="400">
3-
4-
[![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=flat&logo=docker&logoColor=white)](https://docker.com/)
5-
[![FastAPI](https://img.shields.io/badge/FastAPI-005571?style=flat&logo=fastapi)](https://fastapi.tiangolo.com/)
6-
[![CI](https://github.com/raold/second-brain/actions/workflows/ci.yml/badge.svg)](https://github.com/raold/second-brain/actions/workflows/ci.yml)
7-
[![Deploy](https://github.com/raold/second-brain/actions/workflows/deploy.yml/badge.svg)](https://github.com/raold/second-brain/actions/workflows/deploy.yml)
8-
9-
[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-16+-blue.svg)](https://www.postgresql.org/)
10-
[![pgvector](https://img.shields.io/badge/pgvector-0.8.0-blue.svg)](https://github.com/pgvector/pgvector)
11-
[![Python](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
2+
3+
# 🧠 Second Brain
4+
5+
### AI-Powered Memory & Knowledge Management System
6+
7+
[![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=flat&logo=docker&logoColor=white)](https://docker.com/)
8+
[![FastAPI](https://img.shields.io/badge/FastAPI-005571?style=flat&logo=fastapi)](https://fastapi.tiangolo.com/)
9+
[![CI](https://github.com/raold/second-brain/actions/workflows/ci.yml/badge.svg)](https://github.com/raold/second-brain/actions/workflows/ci.yml)
10+
[![Deploy](https://github.com/raold/second-brain/actions/workflows/deploy.yml/badge.svg)](https://github.com/raold/second-brain/actions/workflows/deploy.yml)
11+
12+
[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-16+-blue.svg)](https://www.postgresql.org/)
13+
[![pgvector](https://img.shields.io/badge/pgvector-0.8.0-blue.svg)](https://github.com/pgvector/pgvector)
14+
[![Python](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
15+
1216
</div>
1317

1418
> **🚀 Unified Database Architecture**: v4.2.3 with PostgreSQL + pgvector - Production-ready with security patches, clean docs & optional Cipher integration!

0 commit comments

Comments
 (0)