Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
33b7e72b18 | ||
|
|
d046831903 |
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## [Unreleased]
|
## [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
|
## [0.2.1] - 2026-01-09
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|||||||
@@ -19,4 +19,7 @@ ENV PYTHONPATH=/app
|
|||||||
|
|
||||||
EXPOSE 8086
|
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"]
|
CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8086", "--workers", "1"]
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "webber"
|
name = "webber"
|
||||||
version = "0.2.1"
|
version = "0.2.3"
|
||||||
description = "Mrs. Webber - Multi-Agent AI Development System"
|
description = "Mrs. Webber - Multi-Agent AI Development System"
|
||||||
authors = [
|
authors = [
|
||||||
{name = "jpmschweitzer"}
|
{name = "jpmschweitzer"}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ from pathlib import Path
|
|||||||
from functools import lru_cache
|
from functools import lru_cache
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
|
from pydantic import field_validator
|
||||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||||
|
|
||||||
|
|
||||||
@@ -57,7 +58,7 @@ class Settings(BaseSettings):
|
|||||||
# Tool execution
|
# Tool execution
|
||||||
tool_timeout_seconds: int = 120
|
tool_timeout_seconds: int = 120
|
||||||
sandbox_enabled: bool = True
|
sandbox_enabled: bool = True
|
||||||
allowed_paths: list[str] = []
|
allowed_paths: Optional[list[str]] = None
|
||||||
|
|
||||||
# Sessions
|
# Sessions
|
||||||
session_ttl_hours: int = 24
|
session_ttl_hours: int = 24
|
||||||
@@ -67,8 +68,14 @@ class Settings(BaseSettings):
|
|||||||
env_file=".env",
|
env_file=".env",
|
||||||
case_sensitive=False,
|
case_sensitive=False,
|
||||||
extra="ignore",
|
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()
|
@lru_cache()
|
||||||
def get_settings() -> Settings:
|
def get_settings() -> Settings:
|
||||||
|
|||||||
Reference in New Issue
Block a user