Changelog¶
All notable changes to this project are documented in this file. Format follows Keep a Changelog. Versioning follows Semantic Versioning.
[Unreleased]¶
[0.1.0] - 2026-04-06¶
Security¶
- Fix prompt injection in
refine_loopdefault evaluator via XML delimiter sandboxing and input truncation to 32 768 chars - Mask API key in
Provider.__repr__— previously leakedsk-...values in logs and tracebacks - Redact credential-pattern substrings from HTTP error messages using
_redact_sensitiveregex - Return only exception type name (not message) from tool error handler in
react_loopto prevent leaking internal details to the LLM - Add Bandit SAST job to CI and Dependabot weekly auto-update configuration for pip and GitHub Actions
Added¶
- Add optional
httpxbackend for HTTP connection pooling — install withpip install executionkit[httpx]; falls back tourllibwhenhttpxis absent - Add
max_history_messages: int | Noneparameter toreact_loopfor capping message history size; always preserves the original user prompt - Add
_validate_tool_argshelper inreact_loopthat validates tool call arguments against JSON Schema (required fields,additionalProperties, and type checks) before execution — uses stdlib only, nojsonschemadependency - Add
aclose()and async context manager support (__aenter__/__aexit__) toProviderfor explicit HTTP client lifecycle management - Add
messages_trimmedcounter toreact_loopmetadata
Fixed¶
- Fix
consensusvoting incorrectly splitting semantically identical responses that differ only in trailing newlines or internal whitespace — votes now use normalized text while the original winning response is preserved - Fix
_parse_scoresilently accepting scores outside the 0–10 range; now raisesValueErrorfor out-of-range values - Remove phantom
pydantic>=2.0fromproject.dependencies; pydantic was never imported in the library source
Changed¶
- Change
PatternResult.metadatatype fromdict[str, Any]toMappingProxyType[str, Any]to enforce true immutability on a frozen dataclass