3 Commits
Author SHA1 Message Date
jpmschweitzerandClaude Opus 4.5 33b7e72b18 feat: add Docker healthcheck for container monitoring
Build and Push / release (push) Successful in 3s
Build and Push / build (push) Successful in 1m14s
Helps Watchtower and Docker detect unhealthy containers.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 21:28:39 +01:00
jpmschweitzerandClaude Opus 4.5 d046831903 fix: handle empty environment variables for list fields
Build and Push / release (push) Successful in 3s
Build and Push / build (push) Successful in 1m12s
- Use Optional[list[str]] with None default for allowed_paths
- Add env_parse_none_str="" to treat empty strings as None
- Add effective_allowed_paths property for safe access

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 20:38:30 +01:00
jpmschweitzerandClaude Opus 4.5 cbf75986fb chore: release v0.2.1 - test CI/CD pipeline
Build and Push / release (push) Successful in 3s
Build and Push / build (push) Successful in 3m23s
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-09 20:22:07 +01:00
4 changed files with 28 additions and 2 deletions
+16
View File
@@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [0.2.3] - 2026-01-09
### Added
- Docker healthcheck for container health monitoring
## [0.2.2] - 2026-01-09
### Fixed
- Config parsing for empty environment variables (allowed_paths, cors_*)
- Use `env_parse_none_str=""` to treat empty strings as None
## [0.2.1] - 2026-01-09
### Fixed
- CI/CD pipeline credentials configured
## [0.2.0] - 2026-01-09
### Added
+3
View File
@@ -19,4 +19,7 @@ ENV PYTHONPATH=/app
EXPOSE 8086
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD curl -f http://localhost:8086/health || exit 1
CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8086", "--workers", "1"]
+1 -1
View File
@@ -1,6 +1,6 @@
[project]
name = "webber"
version = "0.2.0"
version = "0.2.3"
description = "Mrs. Webber - Multi-Agent AI Development System"
authors = [
{name = "jpmschweitzer"}
+8 -1
View File
@@ -8,6 +8,7 @@ from pathlib import Path
from functools import lru_cache
from typing import Optional
from pydantic import field_validator
from pydantic_settings import BaseSettings, SettingsConfigDict
@@ -57,7 +58,7 @@ class Settings(BaseSettings):
# Tool execution
tool_timeout_seconds: int = 120
sandbox_enabled: bool = True
allowed_paths: list[str] = []
allowed_paths: Optional[list[str]] = None
# Sessions
session_ttl_hours: int = 24
@@ -67,8 +68,14 @@ class Settings(BaseSettings):
env_file=".env",
case_sensitive=False,
extra="ignore",
env_parse_none_str="", # Treat empty string as None
)
@property
def effective_allowed_paths(self) -> list[str]:
"""Return allowed_paths or empty list if None."""
return self.allowed_paths or []
@lru_cache()
def get_settings() -> Settings: