|
1 | 1 | # Changelog |
2 | 2 |
|
| 3 | +## Unreleased |
| 4 | + |
| 5 | +### Breaking Changes |
| 6 | + |
| 7 | +**Self-describing JSON serialization replaces pickle** |
| 8 | +- Task results now use JSON serialization with embedded type information (similar to pickle) |
| 9 | +- Automatically stores fully qualified class name with data for type reconstruction |
| 10 | +- No longer requires `TaskDefinition` registry for result deserialization |
| 11 | +- `ax.gather()` now works with tasks created via `ax.enqueue()` without pool context |
| 12 | +- **Migration**: Clear Redis or wait for TTL expiry on old pickled results |
| 13 | + |
| 14 | +**TaskHandler Protocol enforces BaseModel returns** |
| 15 | +- Task handlers must return a Pydantic `BaseModel` instance (not `None` or arbitrary objects) |
| 16 | +- Return type is automatically inferred and validated at registration time |
| 17 | +- Enables type-safe result retrieval and automatic serialization |
| 18 | + |
| 19 | +### New Features |
| 20 | + |
| 21 | +**State backend abstraction** |
| 22 | +- Introduced `StateBackend` Protocol for pluggable state storage implementations |
| 23 | +- Current Redis implementation moved to `agentexec.state.redis_backend` |
| 24 | +- Backend modules verified against protocol at import time via `cast()` |
| 25 | +- Prepares foundation for alternative backends (in-memory, DynamoDB, etc.) |
| 26 | + |
| 27 | +**Improved async patterns** |
| 28 | +- `brpop()` is now a proper async function (was sync returning coroutine) |
| 29 | +- Consistent async/await usage across state operations |
| 30 | +- Better type hints and IDE support |
| 31 | + |
| 32 | +**Enhanced type safety** |
| 33 | +- `TaskHandler` Protocol with support for both sync and async handlers |
| 34 | +- Proper type annotations for all state backend operations |
| 35 | +- `serialize()` and `deserialize()` type-enforced for `BaseModel` only |
| 36 | + |
| 37 | +### Documentation |
| 38 | + |
| 39 | +**Comprehensive documentation added** |
| 40 | +- API reference for core modules (activity, pipeline, runner, task) |
| 41 | +- Conceptual guides (architecture, task lifecycle, worker pool) |
| 42 | +- Deployment guides (Docker, production best practices) |
| 43 | +- Usage guides (basic usage, pipelines, FastAPI integration, OpenAI runner) |
| 44 | +- Getting started (installation, quickstart, configuration) |
| 45 | +- Contributing guide |
| 46 | + |
| 47 | +### UI & Tooling |
| 48 | + |
| 49 | +**React frontend and component library** |
| 50 | +- Added `agentexec-ui` npm package with reusable React components |
| 51 | +- Pre-built UI for agent monitoring and activity tracking |
| 52 | +- TanStack Query integration for real-time updates |
| 53 | +- React Router for navigation between agent list and detail views |
| 54 | + |
| 55 | +**Docker deployment** |
| 56 | +- Docker worker image for containerized deployments |
| 57 | +- GitHub Actions for automated Docker image publishing to GitHub Container Registry |
| 58 | +- GitHub Actions for automated npm publishing of UI components |
| 59 | + |
| 60 | +### Testing |
| 61 | + |
| 62 | +**Comprehensive test coverage** |
| 63 | +- Achieved 89% code coverage |
| 64 | +- Added unit tests for all core modules: |
| 65 | + - State backend and serialization (`test_state.py`, `test_state_backend.py`) |
| 66 | + - Self-describing results (`test_self_describing_results.py`) |
| 67 | + - Activity tracking schemas (`test_activity_schemas.py`) |
| 68 | + - Pipeline orchestration (`test_pipeline.py`) |
| 69 | + - Task queue operations (`test_queue.py`) |
| 70 | + - Worker events and logging (`test_worker_event.py`, `test_worker_logging.py`) |
| 71 | + - Database operations (`test_db.py`) |
| 72 | + - Configuration (`test_config.py`) |
| 73 | + |
| 74 | +### Internal Improvements |
| 75 | + |
| 76 | +**Redis client refactoring** |
| 77 | +- Removed `core/redis_client.py` in favor of state backend abstraction |
| 78 | +- Lazy connection initialization for both async and sync Redis clients |
| 79 | +- Proper connection cleanup in `backend.close()` |
| 80 | + |
| 81 | +**Key formatting consistency** |
| 82 | +- All state keys use consistent `agentexec:` prefix via `backend.format_key()` |
| 83 | +- Results: `agentexec:result:{agent_id}` |
| 84 | +- Events: `agentexec:event:{name}:{id}` |
| 85 | +- Logs channel: `agentexec:logs` |
| 86 | + |
| 87 | +**Standardized function signatures** |
| 88 | +- `get_result()` and `gather()` return `BaseModel` directly (not JSON strings) |
| 89 | +- Consistent parameter ordering across state module functions |
| 90 | +- Better docstrings with type information |
| 91 | + |
3 | 92 | ## v0.1.2 |
4 | 93 |
|
5 | 94 | ### New Features |
|
0 commit comments