Releases
49 releases keptv0.3.3 Release v0.3.3
descoped/fastapi-testingGitHuboranheim
Maintenance & Dependency Release
Release notes
Maintenance & Dependency Release
The library API is unchanged from v0.3.2 —
src/fastapi_testingis byte-identical. This release modernizes dependencies (security fixes + latest compatible versions) and CI tooling.Dependencies
- Security updates:
starlette,pygments, andpytestmoved to patched releases. - Minimums raised to the latest releases that still support Python ≥ 3.11:
- Runtime:
fastapi>=0.137.2,starlette>=1.3.1,uvicorn>=0.49.0,websockets>=16.0 - Dev/build:
pytest>=9.1.0,pytest-asyncio>=1.4.0,pytest-cov>=7.1.0,pydantic>=2.13.4,ruff>=0.15.17,hatchling>=1.30.1
- Runtime:
Note for consumers: installing
fastapi-testing0.3.3 now pulls in the newer FastAPI / Starlette / Uvicorn minimums listed above.CI / Tooling
- GitHub Actions upgraded to current majors:
checkoutv7,setup-pythonv6,setup-uvv8.2.0,codecov-actionv7,attest-build-provenancev4. - Fixed the pinned uv version in CI (
0.5.11→0.11.13) so it can parse the currentrevision = 3lockfile. - "Build and Test" now runs on pull requests.
Compatibility
- Python 3.11–3.13. No public API changes; no migration required.
Full Changelog: https://github.com/descoped/fastapi-testing/compare/v0.3.2...v0.3.3
- Security updates:
descoped/dddnsGitHubgithub-actions[bot] (automation)
dddns v0.3.2 (2026-04-19T00:40:29Z)
Release notes
dddns v0.3.2 (2026-04-19T00:40:29Z)
Changelog
Features
- 96260aa143a5d86ab1ed6b3e77b5e5e2dacf9c05 feat(aws-lambda): add ?dry-run=true query param + fix aws v6 deprecations
Installation
Ubiquiti Dream Machine (UDM/UDR)
curl -fsL https://raw.githubusercontent.com/descoped/dddns/main/scripts/install-on-unifi-os.sh | bash -smacOS
brew tap descoped/tap brew install dddnsManual
Download the appropriate binary from the assets below.
v0.3.1 Release v0.3.1
descoped/psycopg-toolkitGitHuboranheim
🎯 Simplified pgvector Support
Release notes
🎯 Simplified pgvector Support
This release simplifies pgvector integration by removing the pgvector-python library dependency and using native JSON parsing instead. This results in zero external dependencies, better Pydantic compatibility, and simpler code.
✨ What's Changed
Removed Dependencies
- Removed pgvector-python dependency - No longer required for vector support
- Removed numpy dependency - Vector data returned as native Python
list[float]
Simplified Implementation
- PostgreSQL returns vectors as strings like
'[0.1,0.2,0.3]' - Automatically parsed to
list[float]using built-in JSON parsing - Removed 28 lines of adapter registration complexity
- No async adapter registration needed
Performance
- Negligible overhead: <0.1ms per vector for JSON parsing
- For 1000 vectors: ~10-100ms difference vs adapter (1-10% overhead)
- Completely acceptable for typical LLM embedding use cases
🚀 Key Benefits
✅ Zero External Dependencies - No pgvector-python, no numpy required ✅ Simpler Code - Removed async adapter registration logic ✅ Perfect Pydantic Compatibility - Returns
list[float], notnumpy.ndarray✅ No Breaking Changes - Same public API, drop-in upgrade ✅ All Tests Passing - 227 tests with zero regressions📦 Installation
pip install psycopg-toolkit==0.3.1💻 Usage Example
from pydantic import BaseModel from psycopg_toolkit import BaseRepository from uuid import UUID class DocumentEmbedding(BaseModel): id: UUID document_id: UUID embedding: list[float] # Auto-detected as vector field metadata: dict[str, Any] | None = None class EmbeddingRepository(BaseRepository[DocumentEmbedding, UUID]): def __init__(self, db_connection): super().__init__( db_connection=db_connection, table_name="embeddings", model_class=DocumentEmbedding, primary_key="id", auto_detect_vector=True, # Automatically detects list[float] ) # Usage - works seamlessly with PostgreSQL pgvector extension embedding_vector = [0.1] * 384 # 384-dimensional vector doc = DocumentEmbedding( id=uuid4(), document_id=uuid4(), embedding=embedding_vector, metadata={"model": "all-MiniLM-L6-v2"} ) created = await repo.create(doc) assert isinstance(created.embedding, list) # Returns list[float]!🔧 Technical Details
Before (v0.3.0):
- Required
pgvector-python>=0.4.1dependency - Used
register_vector_async()adapter registration - Returned vectors as
numpy.ndarray - Required numpy as transitive dependency
After (v0.3.1):
- No external dependencies needed
- Simple JSON parsing with
JSONHandler.deserialize() - Returns vectors as native Python
list[float] - Direct Pydantic compatibility
📝 Full Changelog
Commits:
82ad82a- refactor: Remove pgvector-python dependency, use JSON parsing for vectors- Updated documentation in
.claude/CLAUDE.md - Removed adapter registration from
BaseRepository - Added vector field parsing in
_postprocess_data()
Files Changed: 4 files (+37, -152 lines)
pyproject.toml- Removed pgvector dependencysrc/psycopg_toolkit/repositories/base.py- Simplified vector handling.claude/CLAUDE.md- Updated documentationuv.lock- Dependency updates
🧪 Testing
All 227 tests passing:
- 12 vector field unit tests
- 4 pgvector integration tests
- 211 other tests (JSONB, arrays, dates, transactions, etc.)
- Zero regressions
⚠️ Breaking Changes
None - This is a drop-in replacement for v0.3.0. The public API remains identical.
Full Changelog: https://github.com/descoped/psycopg-toolkit/compare/v0.3.0...v0.3.1
v0.1.1 Release v0.1.1 - Performance & SQLite Optimization
descoped/mcp-pkg-localGitHuboranheim
🚀 Major Performance Improvements
Release notes
🚀 Major Performance Improvements
High-Performance SQLite Cache
- 40x faster validity checks (0.03ms vs 1.2ms)
- WAL mode for optimized concurrent access
- Prepared statements for efficient queries
- MessagePack serialization for binary data storage
- Response times: ~150ms scan, ~10ms read, ~5ms cache hits
Token Efficiency Optimizations
- 90% token reduction for scan-packages (20K → 2K tokens)
- 99% reduction with summary mode (20K → 200 tokens)
- 94% reduction with lazy loading (5K → 300 tokens)
- Smart limits: Default 50 packages for optimal LLM performance
✨ New Features
Advanced Filtering System
- 📊 Summary Mode: Ultra-efficient package counts only
- 🔍 Regex Filtering: Pattern-based package selection
- 📦 Category Filtering: Production vs development dependencies
- 🏷️ Group Filtering: Pre-defined groups (testing, linting, building, etc.)
- 🚫 Type Exclusion: Optionally exclude @types packages
Enhanced Package Intelligence
- 📈 Relevance Scoring: Prioritizes direct dependencies over transitive
- 🎯 Smart Prioritization: Project dependencies ranked higher
- 🌲 Lazy Loading: File trees loaded on-demand for faster navigation
- 🔄 Package Scoring: Popular packages get higher relevance scores
Developer Experience
- 🛠️ TypeScript 5.9+: Strict mode with full type safety
- 📦 ES Modules: Modern import maps (#utils, #tools, etc.)
- 🧪 Comprehensive Testing: 59 tests with 100% pass rate
- 🔧 Better Error Handling: Actionable error messages with suggestions
🏗️ Architecture Improvements
Simplified Caching
- Removed 350+ lines of dead JSON fallback code
- SQLite-only implementation (no unnecessary fallbacks)
- 87% code reduction in cache.ts (407 → 53 lines)
- Synchronous operations for better performance
Test Infrastructure
- Sequential test execution to prevent SQLite database locking
- Directory-based cache naming for proper test isolation
- 100% reliable test suite (54/54 tests pass consistently)
- 60-second timeout for performance-heavy operations
Code Quality
- 0 ESLint errors/warnings
- 0 TypeScript errors
- Safer null handling with nullish coalescing (??)
- Proper type definitions eliminating any types
📊 Statistics
Metric Value Files changed 53 Insertions +8,140 Deletions -2,464 Net change +5,676 lines Test coverage 59 tests (100% pass rate) Dependencies 420 packages (0 vulnerabilities) Build time ~2s (clean environment) 🐛 Bug Fixes
- Fixed SQLite database locking in concurrent test execution
- Resolved test robustness with better package detection
- Fixed TypeScript path mapping for #utils/sqlite-cache
- Improved cache sharing between scan and read operations
- Enhanced error handling and validation across all tools
🔧 Technical Changes
Cache System
- UnifiedCache now SQLite-only (removed PartitionedCache, IndexCache)
- Cache stored in .pkg-local-cache/cache.db (or test-specific variants)
- Automatic WAL mode for concurrent access
- Directory-based naming for test isolation
- 1-hour TTL with smart invalidation
Test Infrastructure
- vitest.config.ts: Sequential execution with pool: 'forks', singleFork: true
- Test timeout: Increased to 60s for performance benchmarks
- Cache isolation: Directory-based DB naming prevents conflicts
- 100% reliability: No more SQLite locking errors
API Consistency
- All cache methods now synchronous
- Improved type safety across all modules
- Better error messages with actionable suggestions
- Consistent logging and debugging output
🏃♂️ Performance Benchmarks
Operation v0.1.0 v0.1.1 Improvement Cache validity check 1.2ms 0.03ms 40x faster Full scan tokens 20,000 2,000 90% reduction Summary mode tokens N/A 200 99% reduction Lazy loading tokens 5,000 300 94% reduction Cache hit response 50ms 5ms 10x faster Test suite reliability 85% 100% Consistent
Full Changelog: v0.1.0...v0.1.1
v1.0.0 Release v1.0.0
descoped/mcp-web-scraperGitHuboranheim
Features**
Release notes
Features
🍪 Advanced Cookie Consent Handling
- 30+ Languages: Norwegian, English, German, French, Spanish, Italian, and more
- 25+ Frameworks: OneTrust, Quantcast, Cookiebot, TrustArc, and others
- 100% Success Rate: Tested on major European and American news sites
- Sub-second Performance: <1000ms average consent handling
🔌 MCP Protocol Compliance
- Perfect 10/10 Score: Full MCP 2024-11-05 specification compliance
- Real-time Progress: 5-stage workflow tracking with SSE notifications
- Content Streaming: Live content delivery during extraction
- TypeScript Native: Complete type safety and IntelliSense support
🏆 Complete Browser Automation (29 Tools)
- 100% Microsoft Playwright MCP Parity: All 29 tools implemented
- Core Interactions: Navigation, clicking, typing, form handling, dialogs
- Advanced Features: PDF generation, console monitoring, accessibility testing
- Session Management: Tab management, history navigation, network monitoring
- AI-Powered Vision: Element finding, page annotation, JavaScript execution
- Session Persistence: Maintain browser state across tool calls
- Cookie Consent: Superior handling that Microsoft's implementation lacks
v0.4.4 Release v0.4.4
descoped/async-task-workerGitHuboranheim
Release Notes v0.4.4
Release notes
Release Notes v0.4.4
🚀 New Features
Cache Metadata Tracking
- Added
from_cachemetadata field to all task responses and status objects - Tasks now indicate whether their results were served from cache (
true) or freshly computed (false) - Available in all API endpoints:
/api/v1/tasks,/api/v1/tasks/{task_id}, and task listings
Enhanced Completion Callbacks
- Updated completion callback signature to include cache metadata:
(task_id, result, from_cache) - Backward compatibility maintained - existing callbacks without the
from_cacheparameter continue to work - Cache hits and fresh computations are now distinguishable in callback handlers
🔧 Improvements
API Enhancements
- All task response models now include the
from_cacheboolean field - Task serialization (
.to_dict()) includes cache metadata - Consistent cache metadata across all task management operations
Testing
- Added comprehensive test coverage for cache metadata functionality
- Tests verify cache metadata in both direct task execution and API responses
- Ensures cache metadata is properly serialized and deserialized
📦 Dependencies
- Updated redis:
6.1.0→6.2.0
🔄 Breaking Changes
None - This release maintains full backward compatibility with existing code.
💡 Usage Examples
Checking if a result came from cache:
task_info = await worker.get_task_info(task_id) if task_info.from_cache: print("Result was served from cache") else: print("Result was freshly computed")Using the enhanced completion callback:
async def on_task_complete(task_id: str, result: Any, from_cache: bool): if from_cache: logger.info(f"Cache hit for task {task_id}") else: logger.info(f"Fresh computation for task {task_id}") # Old callbacks still work: async def legacy_callback(task_id: str, result: Any): logger.info(f"Task {task_id} completed")API Response Example:
{ "id": "task-123", "status": "completed", "result": {"value": "computed_result"}, "from_cache": true, "progress": 1.0, "metadata": {} }This release enhances observability and debugging capabilities while maintaining full backward compatibility with existing applications.
- Added
v0.1.3 Release v0.1.3
descoped/aippGitHuboranheim
Implemented PromptBuilder with composable TextProcessors.
Release notes
Implemented PromptBuilder with composable TextProcessors.
Created a modular system for AI prompt engineering with a fluent interface.
Key components:
- PromptBuilder with method chaining for prompt construction
- TextProcessor protocol for composable transformations
- Built-in processors for common patterns: variables, JSON, step-by-step, chain-of-thought, few-shot examples, structured output, etc.
- Support for custom processors via lambda functions
2.0.1 io.descoped.secrets:secrets-provider-safe-configuration
2.0.1 io.descoped.secrets:secrets-provider-google-secret-manager
2.0.1 io.descoped.secrets:secrets-provider-dynamic-configuration
2.0.3 io.descoped.secrets:secrets-client-api
2.0.1 io.descoped.encryption:encryption-util
2.0.0 io.descoped.config:dynamic-configuration
2.0.1 io.descoped.spi:service-provider-api