feat: add conversation persistence and context management layer
Build and Push API / release (push) Successful in 3s
Build and Push API / build (push) Failing after 34s

- SQLAlchemy async database layer (SQLite dev, PostgreSQL prod)
- Conversation and Message models with UUID primary keys
- Token counting utilities using litellm
- Context summarization at 80% token threshold
- REST API endpoints for multi-turn conversations
- 19 conversation tests, 6 token tests (176 total passing)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-11 22:42:38 +01:00
co-authored by Claude Opus 4.5
parent 470b7448ac
commit 2523db4da7
19 changed files with 1506 additions and 15 deletions
+32 -10
View File
@@ -2,7 +2,7 @@
> Tracking progress towards Claude Code-like functionality
## Current Status: ~70% Complete
## Current Status: ~80% Complete
Last updated: 2026-01-11
@@ -68,16 +68,19 @@ Last updated: 2026-01-11
| Markdown rendering | ✅ | Rich markdown output |
| Streaming display | ✅ | Real-time token output with `--stream` flag |
### Phase 4: Agentic Loop ⚠️ Partial
### Phase 4: Agentic Loop ✅ Complete
| Component | Status | Notes |
|-----------|--------|-------|
| `webber-cli chat` command | ✅ | Interactive mode with streaming |
| `webber-cli explore` command | ✅ | One-shot query with streaming |
| `SessionState` dataclass | ✅ | Basic context tracking |
| `AgenticLoop` class | ⚠️ | Basic implementation, not fully utilized |
| Conversation history | | Not persisted between turns in CLI |
| Context management | | No token counting or summarization |
| `AgenticLoop` class | | Basic implementation |
| Conversation persistence | | SQLAlchemy async with SQLite/PostgreSQL |
| Context summarization | | Token counting (litellm) + auto-summarization |
| Conversation API | ✅ | `/conversations/` REST endpoints |
**Database:** SQLite (dev) or PostgreSQL (prod), async via SQLAlchemy 2.0
### Phase 5: REST API ✅ Complete
@@ -109,9 +112,9 @@ Last updated: 2026-01-11
| Feature | Category | Description | Complexity |
|---------|----------|-------------|------------|
| ~~**Plan Agent**~~ | Agents | ✅ Design implementation approaches | High |
| **Task Agent** | Agents | Autonomous multi-step execution | High |
| **Context summarization** | Infrastructure | Compress history at token limit | High |
| **Conversation persistence** | CLI | Multi-turn memory in chat mode | Medium |
| ~~**Task Agent**~~ | Agents | Autonomous multi-step execution | High |
| ~~**Context summarization**~~ | Infrastructure | ✅ Token counting + auto-summarization | High |
| ~~**Conversation persistence**~~ | Infrastructure | ✅ SQLAlchemy async database layer | Medium |
### Medium Priority
@@ -145,10 +148,15 @@ Last updated: 2026-01-11
| Tool unit tests | 109 | 109 | ✅ |
| API tests | 11 | 11 | ✅ |
| Plan agent tests | 15 | 15 | ✅ |
| Task agent tests | 15 | 15 | ✅ |
| Conversation tests | 19 | 19 | ✅ |
| Token tests | 6 | 6 | ✅ |
| Security tests | 14 | 14 | ✅ |
| Integration tests | 10 | 10 | ✅ Agent + real LLM |
| E2E tests | 12 | 12 | ✅ Full API workflow |
**Total: 176 tests passing**
**Test breakdown:**
- Read/Glob/Grep tools: 17 tests
- Edit/Write tools: 22 tests
@@ -157,6 +165,9 @@ Last updated: 2026-01-11
- Gitignore filtering: 10 tests
- API endpoints: 11 tests
- Plan agent: 15 tests
- Task agent: 15 tests
- Conversations: 19 tests
- Tokens: 6 tests
- Security: 14 tests
- Health checks: 2 tests
- Integration (LLM): 10 tests
@@ -183,9 +194,9 @@ pytest tests/ --run-integration --run-e2e
1. **Model hallucination** - Mistral Nemo sometimes makes up file contents instead of using actual tool results.
2. **No conversation memory** - CLI chat mode doesn't persist context between sessions.
2. **Temperature setting** - Changed from 0.0 to 0.3 for Mistral Nemo compatibility, may affect determinism.
3. **Temperature setting** - Changed from 0.0 to 0.3 for Mistral Nemo compatibility, may affect determinism.
3. **SQLAlchemy deprecation** - `datetime.utcnow()` deprecation warning from SQLAlchemy.
---
@@ -231,6 +242,17 @@ curl -X POST http://localhost:8095/agents/run \
curl -N http://localhost:8095/agents/stream \
-H "Content-Type: application/json" \
-d '{"agent_type":"explore","prompt":"find config files","working_dir":"."}'
# Conversation API (stateful multi-turn)
curl -X POST http://localhost:8095/conversations/ \
-H "Content-Type: application/json" \
-H "X-API-Key: dev-key" \
-d '{"agent_type":"explore","working_dir":"."}'
curl -X POST http://localhost:8095/conversations/{id}/messages \
-H "Content-Type: application/json" \
-H "X-API-Key: dev-key" \
-d '{"content":"find all Python files"}'
```
---