Files
jpmschweitzerandClaude 7172927a79
Build and Push API / release (push) Successful in 2s
Build and Push API / build (push) Successful in 2m17s
release api/v1.1.0
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-11 16:30:09 +02:00

7.7 KiB

Changelog - Webber API

All notable changes to the Webber API will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

[1.1.0] - 2026-08-11

Added

  • webber version command. It was implemented and imported but never registered, so the subcommand did not exist; the fuller output includes the resolved Ollama URL and model.

Fixed

  • The Ollama content: null sanitiser raised AttributeError on first use. It looked up the parent client's chat getter via .fget, and openai now exposes chat as a cached_property. Any agent request would have failed before reaching the model.

Changed

  • Default OLLAMA_AGENT_MODEL is now gemma4:e2b instead of mistral-nemo-large:latest, so a deployment without an explicit override no longer exhausts shared GPU memory
  • BaseAgent is generic over its context type and run_stream is typed as AsyncIterator[str | StreamEvent], matching what callers already receive.

[1.0.1] - 2026-07-19

Changed

  • Default TATLOCK_API_URL and SEARXNG_URL now use docker container names (http://tatlock:8000, http://searxng:8080) instead of host IP:port, for container-to-container traffic on the docker-dataplane network
  • CI workflow now pushes Docker images via the git.schweitz.net registry route

[1.0.0] - 2026-01-15

Added

  • Event-based streaming for task agent (StreamEvent objects instead of raw text)
    • New tools_streaming.py with all tools emitting structured events
    • Event types: tool_start, tool_done, thinking, response, error, done
  • Retry logic when LLM responds without calling tools (max 2 retries)
    • Tracks tools_called counter on TaskContext
    • Stronger retry prompt forces tool use
  • Working directory context injected into all agent prompts

Changed

  • Hardened system prompts to enforce tool use before responding
    • Added "CRITICAL RULE" section requiring tool calls first
    • Made "MANDATORY WORKFLOW" more emphatic
  • Updated explore and plan agents with _build_prompt_with_context() method

Fixed

  • Agent path hallucination - now explicitly communicates working directory to LLM

Note

  • Project paused: Local LLMs (Mistral Nemo 12B on available hardware) are not capable enough for reliable agentic tool use. Models frequently hallucinate responses instead of calling tools, even with prompt hardening and retry logic. Would require larger models (70B+) or cloud API integration to continue.

[0.4.2] - 2026-01-11

Added

  • Retry logic for transient failures with exponential backoff
    • src/shared/retry.py - @with_retry decorator and retry_async() function
    • Retries on: timeout, connection errors, HTTP 429/5xx
    • Configurable: RETRY_MAX_ATTEMPTS, RETRY_BASE_DELAY, RETRY_MAX_DELAY
  • Web search tool now automatically retries on network failures
  • 29 retry tests (205 total tests passing)

[0.4.1] - 2026-01-11

Fixed

  • Replace litellm with tiktoken for token counting (dependency conflict with pydantic-ai)
  • Update documentation (README.md, architecture.md) with conversation layer info

[0.4.0] - 2026-01-11

Added

  • Conversation persistence layer with SQLAlchemy async
    • Database models: Conversation, Message with UUID primary keys
    • SQLite (dev) and PostgreSQL (prod) support via async engines
    • Lazy database initialization pattern
  • Context management infrastructure
    • Token counting utilities using tiktoken
    • Context summarization at 80% token threshold
    • XML-tagged context prompt building for agent injection
  • REST API for multi-turn conversations
    • POST /conversations/ - Create new conversation
    • GET /conversations/ - List conversations
    • GET /conversations/{id} - Get conversation with history
    • POST /conversations/{id}/messages - Add message (triggers agent)
    • DELETE /conversations/{id} - Delete conversation
  • New dependencies: sqlalchemy[asyncio]~=2.0.36, aiosqlite~=0.21.0, tiktoken>=0.12.0
  • Config settings: database_url, summarization_threshold, keep_recent_messages
  • 19 conversation tests, 6 token counting tests (176 total tests passing)

Changed

  • Updated COVERAGE.md to ~80% complete
  • Quieter pytest output (-q --tb=short instead of -v)

[0.3.4] - 2026-01-11

Added

  • Task Agent - Full orchestrator for autonomous multi-step task execution
    • Has ALL tools: read, write, edit, bash (full), web_search
    • New spawn_agent tool to launch sub-agents (Explore, Plan) for focused work
    • Recursion prevention: cannot spawn nested Task agents
    • 22 unit tests for registration, tools, spawn_agent, and API
  • Complete agent hierarchy: Explore (read-only) → Plan (read-only) → Task (orchestrator)

[0.3.3] - 2026-01-11

Added

  • Plan Agent - READ-ONLY software architect that designs implementation strategies
    • Uses only read-only tools: read_file, glob_files, grep_content, bash_readonly
    • Creates step-by-step implementation plans with critical files list
    • 15 unit tests for registration, tools, and API
  • Web search summarizer added to roadmap (future feature)

Changed

  • Updated COVERAGE.md to ~70% complete

[0.3.2] - 2026-01-11

Added

  • Mandatory release procedure documentation in AGENTS.md

[0.3.1] - 2026-01-11

Added

  • Integration test infrastructure with pytest markers (integration, e2e, slow)
  • 10 LLM integration tests (requires Ollama)
  • 12 E2E API tests (requires running server)
  • Command line options: --run-integration, --run-e2e, --ollama-url, --api-url
  • Sample project fixtures for testing
  • 14 security tests (path traversal, command injection, input validation)
  • Helper functions: assert_contains_any, assert_contains_all

Changed

  • Updated COVERAGE.md to ~65% complete

[0.3.0] - 2026-01-10

Added

  • Explore agent with PydanticAI tool calling and Mistral Nemo
  • Coding tools: edit_file, write_file, bash (full)
  • Web search tool using SearXNG integration
  • Streaming responses via SSE
  • Sanitized Ollama provider (fixes content: null issue)

Changed

  • Reorganized into monorepo structure (webber-api/, webber-cli/, webber-sandbox/)
  • Added ruff linter and fixed mypy errors

[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

  • Reference prompts from claude-code-system-prompts for all agent types
  • Detailed documentation for Explore, Plan, and Task agents
  • Detailed documentation for File, Shell, and Search tools
  • Utility prompts (TodoWrite, AskUserQuestion, conversation summarization, etc.)
  • Security review prompt for code analysis

Changed

  • Expanded agents/README.md with capabilities and use cases
  • Expanded tools/README.md with parameter details and behaviors

[0.1.0] - 2026-01-09

Added

  • Initial FastAPI boilerplate setup
  • Domain-based project structure (src/domains/, src/shared/)
  • BaseController pattern with lazy router instantiation
  • Pydantic Settings configuration with env file support
  • Logger decorator with temporal benchmarking and trace IDs
  • UserProvider singleton for request-scoped context
  • Custom exception hierarchy
  • Health endpoints (/, /health)
  • Placeholder domains for agents (explore, plan, task)
  • Placeholder domains for tools (file, shell, search)
  • Placeholder domain for auth (tatlock integration)
  • CI/CD workflow for Gitea with Docker build and Watchtower deployment
  • Dockerfile for containerized deployment
  • CVE-checked dependencies (2026-01-09)