capiscio-sdk 2.3.0__tar.gz → 2.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/.github/workflows/integration-tests.yml +1 -0
- capiscio_sdk-2.4.0/CHANGELOG.md +284 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/PKG-INFO +1 -1
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/__init__.py +1 -1
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/_rpc/client.py +406 -4
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/badge.py +85 -15
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/integrations/fastapi.py +18 -6
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/validators/message.py +4 -3
- capiscio_sdk-2.4.0/docs/api-reference.md +208 -0
- capiscio_sdk-2.4.0/docs/guides/mcp.md +283 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/docs/guides/scoring.md +1 -1
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/mkdocs.yml +5 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/pyproject.toml +1 -1
- capiscio_sdk-2.4.0/tests/integration/test_mcp_service.py +377 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/unit/test_badge.py +79 -5
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/unit/test_fastapi_integration.py +41 -0
- capiscio_sdk-2.3.0/CHANGELOG.md +0 -156
- capiscio_sdk-2.3.0/docs/api-reference.md +0 -79
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/.github/copilot-instructions.md +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/.github/markdown-link-check-config.json +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/.github/workflows/docs.yml +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/.github/workflows/pr-checks.yml +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/.github/workflows/publish.yml +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/.gitignore +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/.python-version +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/CONTRIBUTING.md +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/Dockerfile.test +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/LICENSE +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/QUICK_REFERENCE.md +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/README.md +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/RELEASE_GUIDE.md +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/SECURITY.md +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/_rpc/__init__.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/_rpc/gen/__init__.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/_rpc/process.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/badge_keeper.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/config.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/dv.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/errors.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/executor.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/infrastructure/__init__.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/infrastructure/cache.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/infrastructure/rate_limiter.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/py.typed +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/scoring/__init__.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/scoring/availability.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/scoring/compliance.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/scoring/trust.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/scoring/types.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/simple_guard.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/types.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/validators/__init__.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/validators/_core.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/validators/agent_card.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/validators/certificate.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/validators/protocol.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/validators/semver.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/validators/signature.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/capiscio_sdk/validators/url_security.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/docs/assets/.!58931!favicon.ico +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/docs/assets/favicon.ico +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/docs/assets/logo.png +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/docs/getting-started/concepts.md +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/docs/getting-started/installation.md +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/docs/getting-started/quickstart.md +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/docs/guides/badge-verification.md +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/docs/guides/configuration.md +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/docs/includes/abbreviations.md +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/docs/index.md +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/docs/javascripts/extra.js +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/docs/stylesheets/extra.css +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/docs/stylesheets/unified.css +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/examples/README.md +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/examples/secure_ping_pong/README.md +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/examples/secure_ping_pong/client.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/examples/secure_ping_pong/server.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/examples/simple_agent/README.md +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/examples/simple_agent/agent_executor.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/examples/simple_agent/main.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/examples/simple_agent/requirements.txt +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/examples/simple_agent/test_client.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/__init__.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/e2e/__init__.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/integration/Dockerfile.test +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/integration/README.md +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/integration/__init__.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/integration/docker-compose.yml +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/integration/requirements.txt +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/integration/test_badge_keeper.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/integration/test_dv_badge_flow.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/integration/test_dv_order_api.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/integration/test_dv_sdk.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/integration/test_grpc_scoring.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/integration/test_real_executor.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/integration/test_server_integration.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/integration/test_simple_guard.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/unit/__init__.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/unit/test_agent_card.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/unit/test_badge_keeper.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/unit/test_cache.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/unit/test_certificate.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/unit/test_config.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/unit/test_core_validator.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/unit/test_errors.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/unit/test_executor.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/unit/test_message_validator.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/unit/test_pop_badge.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/unit/test_protocol_validator.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/unit/test_rate_limiter.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/unit/test_semver_validator.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/unit/test_signature_validator.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/unit/test_simple_guard.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/unit/test_types.py +0 -0
- {capiscio_sdk-2.3.0 → capiscio_sdk-2.4.0}/tests/unit/test_url_security.py +0 -0
|
@@ -107,6 +107,7 @@ jobs:
|
|
|
107
107
|
--ignore=tests/integration/test_dv_badge_flow.py \
|
|
108
108
|
--ignore=tests/integration/test_dv_order_api.py \
|
|
109
109
|
--ignore=tests/integration/test_dv_sdk.py \
|
|
110
|
+
--ignore=tests/integration/test_mcp_service.py \
|
|
110
111
|
-v --tb=short --junit-xml=/workspace/test-results.xml
|
|
111
112
|
|
|
112
113
|
- name: Upload test results
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [2.4.0] - 2026-01-18
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- **RFC-002 Alignment**: TrustLevel enum values now match RFC-002 §5 exactly
|
|
14
|
+
- **BadgeClaims**: Aligned claim field names with RFC-002 specification
|
|
15
|
+
- **to_dict()**: Now preserves `cnf` claim for IAL-1 badges (round-trip serialization)
|
|
16
|
+
- **has_key_binding**: Consistently checks both `ial=='1'` AND `cnf` presence
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
- **MCP Service Client**: RFC-006/RFC-007 operations via MCP protocol
|
|
20
|
+
- **MCP gRPC Client**: Server identity operations
|
|
21
|
+
|
|
22
|
+
## [2.3.1] - 2025-01-14
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
- Fixed `__version__` in package `__init__.py` (was 0.3.1, now 2.3.1)
|
|
26
|
+
- Aligned all version references across package metadata
|
|
27
|
+
|
|
28
|
+
## [0.1.0] - 2025-01-10
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
- **Comprehensive Integration Tests (26 tests)**
|
|
32
|
+
- Real A2A SDK integration testing with official types
|
|
33
|
+
- All Part types tested: TextPart, FilePart (bytes/URI), DataPart, mixed parts
|
|
34
|
+
- Both role values tested: user, agent
|
|
35
|
+
- Optional fields tested: contextId, taskId, metadata
|
|
36
|
+
- Edge cases: empty text, long text (10KB), Unicode/special characters
|
|
37
|
+
- Security patterns: XSS attempts, SQL injection, oversized messages (100+ parts), null bytes
|
|
38
|
+
- Malformed messages: invalid roles, empty messageId, empty parts array
|
|
39
|
+
- Coverage: All tests passing in ~1.27 seconds
|
|
40
|
+
|
|
41
|
+
- **GitHub Actions CI/CD**
|
|
42
|
+
- `pr-checks.yml`: Comprehensive PR validation (Python 3.10-3.13, linting, type checking, tests, security scanning)
|
|
43
|
+
- Enhanced `publish.yml`: Now runs full test suite before publishing to PyPI
|
|
44
|
+
- `docs.yml`: Automated documentation deployment (GitHub Pages, Cloudflare Pages)
|
|
45
|
+
|
|
46
|
+
- **Foundation Layer**
|
|
47
|
+
- Core types: `ValidationResult`, `ValidationIssue`, `ValidationSeverity`, `RateLimitInfo`, `CacheEntry`
|
|
48
|
+
- Error hierarchy: 7 exception classes for different security scenarios
|
|
49
|
+
- Configuration system with 4 presets: `development()`, `production()`, `strict()`, `from_env()`
|
|
50
|
+
|
|
51
|
+
- **Validators**
|
|
52
|
+
- `MessageValidator`: Validates A2A v0.3.0 message structure
|
|
53
|
+
- Required fields: `messageId` (non-empty string), `role` (enum), `parts` (array)
|
|
54
|
+
- Optional fields: `contextId`, `taskId`, `metadata`
|
|
55
|
+
- Supports all Part types: `TextPart`, `FilePart` (FileWithBytes/FileWithUri), `DataPart`
|
|
56
|
+
- Part validation: kind discriminator ("text"|"file"|"data") with type-specific validation
|
|
57
|
+
- `ProtocolValidator`: Validates protocol version, headers, and message types
|
|
58
|
+
|
|
59
|
+
- **Infrastructure**
|
|
60
|
+
- `ValidationCache`: TTL-based in-memory cache with invalidation support
|
|
61
|
+
- `RateLimiter`: Token bucket algorithm with per-identifier rate limiting
|
|
62
|
+
- Configurable cache size and TTL
|
|
63
|
+
|
|
64
|
+
- **Security Executor**
|
|
65
|
+
- `CapiscIOSecurityExecutor`: Main wrapper for agent executors
|
|
66
|
+
- Three integration patterns:
|
|
67
|
+
- Minimal: `secure(agent)` - one-liner integration
|
|
68
|
+
- Explicit: `CapiscIOSecurityExecutor(agent, config)` - full control
|
|
69
|
+
- Decorator: `@secure_agent(config)` - pythonic decorator pattern
|
|
70
|
+
- Configurable fail modes: `block`, `monitor`, `log`
|
|
71
|
+
- Request rate limiting with identifier-based buckets
|
|
72
|
+
- Validation result caching for performance
|
|
73
|
+
|
|
74
|
+
- **Documentation**
|
|
75
|
+
- Complete rewrite of all examples to use official A2A SDK types
|
|
76
|
+
- Updated configuration guide with correct A2A message fields
|
|
77
|
+
- Comprehensive quickstart with real-world integration examples
|
|
78
|
+
- API reference documentation
|
|
79
|
+
- Apache 2.0 license, Contributing guidelines, Security policy
|
|
80
|
+
|
|
81
|
+
### Technical Details
|
|
82
|
+
- Python 3.10+ support (tested on 3.10, 3.11, 3.12, 3.13)
|
|
83
|
+
- Type hints with `py.typed` marker
|
|
84
|
+
- Pydantic models for validation
|
|
85
|
+
- Token bucket rate limiting algorithm
|
|
86
|
+
- TTL-based caching with LRU eviction
|
|
87
|
+
- Delegate pattern for attribute access
|
|
88
|
+
|
|
89
|
+
### Test Coverage
|
|
90
|
+
- **Total: 150 tests, 99.3% passing (149 passing, 1 skipped)**
|
|
91
|
+
- Unit tests: 124 tests (including 14 MessageValidator tests)
|
|
92
|
+
- Integration tests: 26 tests (all passing)
|
|
93
|
+
- Skipped: 1 module (test_executor.py - covered by integration tests)
|
|
94
|
+
|
|
95
|
+
### Release Notes
|
|
96
|
+
This is an **early 0.1.0 release**. While the middleware has comprehensive test coverage (150 tests) and validates all official A2A message structures correctly, it has not yet been battle-tested in production environments. We recommend:
|
|
97
|
+
|
|
98
|
+
- ✅ **Safe for**: Development environments, testing, evaluation
|
|
99
|
+
- ⚠️ **Use with monitoring**: Staging environments, non-critical production
|
|
100
|
+
- ❌ **Not yet ready for**: Mission-critical production without extensive internal testing
|
|
101
|
+
|
|
102
|
+
**Planned for v1.0**: Load testing, stress testing, concurrent request testing, performance benchmarking, production hardening based on real-world feedback
|
|
103
|
+
|
|
104
|
+
### Installation
|
|
105
|
+
```bash
|
|
106
|
+
pip install capiscio-sdk==0.1.0
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## [Unreleased]
|
|
112
|
+
|
|
113
|
+
## [2.3.0] - 2025-01-14
|
|
114
|
+
|
|
115
|
+
**Major Release** - Complete Trust Badge ecosystem with gRPC backend, PoP protocol, and DV badge flow.
|
|
116
|
+
|
|
117
|
+
This release introduces the **capiscio-core gRPC integration**, enabling high-performance badge operations through a native Go backend. The SDK now provides a complete implementation of RFC-002 (Trust Badges) and RFC-003 (Proof of Possession).
|
|
118
|
+
|
|
119
|
+
### Added
|
|
120
|
+
|
|
121
|
+
#### Trust Badge API (`capiscio_sdk.badge`)
|
|
122
|
+
- **`verify_badge()`** - Full badge verification with signature, expiration, and revocation checks
|
|
123
|
+
- **`parse_badge()`** - Parse badge claims without verification (for inspection)
|
|
124
|
+
- **`request_badge()` / `request_badge_sync()`** - Request new badges from CA
|
|
125
|
+
- **`request_pop_badge()` / `request_pop_badge_sync()`** - RFC-003 Proof of Possession badge requests
|
|
126
|
+
- **`start_badge_keeper()`** - Start automatic badge renewal
|
|
127
|
+
- **`BadgeClaims`** dataclass with full RFC-002 claim support
|
|
128
|
+
- **`VerifyOptions`** - Configurable verification (audience, issuers, clock skew)
|
|
129
|
+
- **`VerifyMode`** enum - `ONLINE`, `OFFLINE`, `HYBRID` verification modes
|
|
130
|
+
- **`TrustLevel`** enum - Level 1 (DV), Level 2 (OV), Level 3 (EV)
|
|
131
|
+
|
|
132
|
+
#### Badge Lifecycle Management (`capiscio_sdk.badge_keeper`)
|
|
133
|
+
- **`BadgeKeeper`** class - Automatic badge renewal with background thread
|
|
134
|
+
- Configurable renewal threshold (renew N seconds before expiry)
|
|
135
|
+
- Exponential backoff retry on failure
|
|
136
|
+
- Callback support for badge updates (`on_renew`)
|
|
137
|
+
- Integration with `SimpleGuard` for seamless auth
|
|
138
|
+
- **`BadgeKeeperConfig`** - Full configuration options (TTL, trust level, output file)
|
|
139
|
+
|
|
140
|
+
#### Domain Validation API (`capiscio_sdk.dv`)
|
|
141
|
+
- **`create_dv_order()`** - Create DV badge order with HTTP-01 or DNS-01 challenge
|
|
142
|
+
- **`get_dv_order()`** - Check order status
|
|
143
|
+
- **`finalize_dv_order()`** - Complete validation and receive grant JWT
|
|
144
|
+
- **`DVOrder`** dataclass - Order details (challenge token, validation URL, DNS record)
|
|
145
|
+
- **`DVGrant`** dataclass - Signed grant JWT for badge issuance
|
|
146
|
+
|
|
147
|
+
#### gRPC Backend (`capiscio_sdk._rpc`)
|
|
148
|
+
- **`CapiscioRPCClient`** - High-level gRPC client for capiscio-core
|
|
149
|
+
- Auto-starts local capiscio-core binary when needed
|
|
150
|
+
- Connection pooling and health checks
|
|
151
|
+
- Context manager support (`with CapiscioRPCClient() as client:`)
|
|
152
|
+
- **Generated Protocol Buffers** for all services:
|
|
153
|
+
- `BadgeService` - Badge parsing, verification, issuance
|
|
154
|
+
- `DIDService` - DID parsing and resolution
|
|
155
|
+
- `TrustService` - Trust level operations
|
|
156
|
+
- `RevocationService` - Badge revocation checks
|
|
157
|
+
- `ScoringService` - Trust scoring calculations
|
|
158
|
+
- `SimpleGuardService` - Request signing and verification
|
|
159
|
+
- `RegistryService` - Agent registry operations
|
|
160
|
+
- **`ProcessManager`** - Manages capiscio-core subprocess lifecycle
|
|
161
|
+
|
|
162
|
+
#### Core Validator (`capiscio_sdk.validators`)
|
|
163
|
+
- **`CoreValidator`** class - Go-backed validation for agent cards
|
|
164
|
+
- **`validate_agent_card()`** - One-liner validation using Go core
|
|
165
|
+
- RFC-004 Agent Card schema validation
|
|
166
|
+
- Much faster than pure-Python validation
|
|
167
|
+
|
|
168
|
+
#### RFC-002 v1.3 §7.5 Staleness Options
|
|
169
|
+
- Configurable badge staleness thresholds
|
|
170
|
+
- `max_age` parameter for verification
|
|
171
|
+
- Grace period support for expiring badges
|
|
172
|
+
|
|
173
|
+
### Changed
|
|
174
|
+
- **Version Alignment**: SDK version now matches other CapiscIO products (capiscio-server, capiscio-ui, capiscio-core v2.3.0)
|
|
175
|
+
- **SimpleGuard Refactoring**:
|
|
176
|
+
- Now uses gRPC backend for cryptographic operations
|
|
177
|
+
- Improved request signing with `sign_request()` / `verify_request()`
|
|
178
|
+
- Better error messages with RFC references
|
|
179
|
+
- **Scoring Module**: Enhanced with gRPC-backed calculations
|
|
180
|
+
|
|
181
|
+
### Fixed
|
|
182
|
+
- **CI/CD Pipeline**:
|
|
183
|
+
- Publish workflow now runs only unit tests (prevents false failures from missing infrastructure)
|
|
184
|
+
- Integration tests moved to dedicated workflow with Docker infrastructure
|
|
185
|
+
- **Lint Issues**: Fixed all ruff warnings, updated to latest ruff config
|
|
186
|
+
- **FastAPI Integration**: Improved middleware error handling
|
|
187
|
+
|
|
188
|
+
### Infrastructure
|
|
189
|
+
- **New Integration Test Suite** with Docker Compose:
|
|
190
|
+
- `test_badge_keeper.py` - Badge lifecycle tests
|
|
191
|
+
- `test_dv_badge_flow.py` - Full DV flow E2E tests
|
|
192
|
+
- `test_dv_order_api.py` - DV API tests
|
|
193
|
+
- `test_dv_sdk.py` - SDK integration tests
|
|
194
|
+
- `test_grpc_scoring.py` - gRPC scoring tests
|
|
195
|
+
- `test_server_integration.py` - Server integration tests
|
|
196
|
+
- `test_simple_guard.py` - SimpleGuard tests
|
|
197
|
+
- **New Unit Tests**:
|
|
198
|
+
- `test_badge.py` - Badge API unit tests
|
|
199
|
+
- `test_badge_keeper.py` - BadgeKeeper unit tests
|
|
200
|
+
- `test_core_validator.py` - CoreValidator tests
|
|
201
|
+
- `test_pop_badge.py` - PoP protocol tests
|
|
202
|
+
- **GitHub Actions Workflows**:
|
|
203
|
+
- `integration-tests.yml` - Full integration tests with capiscio-server + postgres + capiscio-core
|
|
204
|
+
|
|
205
|
+
### Documentation
|
|
206
|
+
- **Comprehensive gRPC Integration Guide** (`docs/guides/badge-verification.md`)
|
|
207
|
+
- **Badge Verification Guide** with code examples
|
|
208
|
+
- **GitHub Copilot Instructions** for AI-assisted development
|
|
209
|
+
- **API Reference** updates for all new modules
|
|
210
|
+
|
|
211
|
+
### Dependencies
|
|
212
|
+
- Added `grpcio` and `grpcio-tools` for gRPC support
|
|
213
|
+
- Added `protobuf` for Protocol Buffer serialization
|
|
214
|
+
- Updated `cryptography` to latest version
|
|
215
|
+
|
|
216
|
+
### Statistics
|
|
217
|
+
- **+12,568 lines of code** added
|
|
218
|
+
- **63 files** changed
|
|
219
|
+
- **7 new modules** added
|
|
220
|
+
- **1,321 line** gRPC client implementation
|
|
221
|
+
- **737 line** badge API implementation
|
|
222
|
+
- **304 line** BadgeKeeper implementation
|
|
223
|
+
- **296 line** DV API implementation
|
|
224
|
+
|
|
225
|
+
### Migration from v0.3.x
|
|
226
|
+
This release is backwards compatible. Existing `SimpleGuard` and `CapiscioSecurityExecutor` usage continues to work. New features are additive.
|
|
227
|
+
|
|
228
|
+
To use new badge features:
|
|
229
|
+
```python
|
|
230
|
+
from capiscio_sdk import verify_badge, BadgeKeeper, create_dv_order
|
|
231
|
+
|
|
232
|
+
# Verify an incoming badge
|
|
233
|
+
result = verify_badge(token, trusted_issuers=["https://registry.capisc.io"])
|
|
234
|
+
|
|
235
|
+
# Auto-renew badges
|
|
236
|
+
keeper = BadgeKeeper(api_url="...", api_key="...", agent_id="...")
|
|
237
|
+
keeper.start()
|
|
238
|
+
|
|
239
|
+
# Get a DV badge
|
|
240
|
+
order = create_dv_order(domain="example.com", challenge_type="http-01", jwk=jwk)
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## [0.3.1] - 2025-11-23
|
|
244
|
+
|
|
245
|
+
### Fixed
|
|
246
|
+
- **Release Automation**: Bumped version to trigger fresh GitHub Release and PyPI publication with correct artifacts.
|
|
247
|
+
|
|
248
|
+
## [0.3.0] - 2025-11-22
|
|
249
|
+
|
|
250
|
+
### Added
|
|
251
|
+
- **SimpleGuard Security Strategy**:
|
|
252
|
+
- **Identity**: Ed25519 Trust Badge verification (`X-Capiscio-Badge` header per RFC-002 §9.1).
|
|
253
|
+
- **Integrity**: SHA-256 Body Hash verification (`bh` claim) to prevent payload tampering.
|
|
254
|
+
- **Freshness**: Replay protection using `exp` (expiration) and `iat` (issued at) claims with a 60-second window.
|
|
255
|
+
- **Zero Config**: Secure by default with minimal setup.
|
|
256
|
+
- **FastAPI Integration**:
|
|
257
|
+
- `CapiscioMiddleware`: Automatic request validation and identity injection into `request.state.agent_id`.
|
|
258
|
+
- `Server-Timing` header support for telemetry (verification time).
|
|
259
|
+
- **Telemetry**:
|
|
260
|
+
- Added `dur` (duration) metric to `Server-Timing` header for monitoring security overhead.
|
|
261
|
+
- **Documentation**:
|
|
262
|
+
- Updated `README.md` with "Enforcement First" strategy.
|
|
263
|
+
- Updated `SECURITY.md` with threat model and verification steps.
|
|
264
|
+
- Added `examples/secure_ping_pong` demo.
|
|
265
|
+
|
|
266
|
+
### Changed
|
|
267
|
+
- **Breaking Change**: Shifted from "Validation" focus to "Enforcement" focus.
|
|
268
|
+
- Updated `pyproject.toml` dependencies to include `cryptography` and `pyjwt`.
|
|
269
|
+
|
|
270
|
+
### Planned for v1.0.0
|
|
271
|
+
- Full A2A v1.0 compliance
|
|
272
|
+
- Production-ready hardening
|
|
273
|
+
- Performance optimizations
|
|
274
|
+
- Comprehensive documentation
|
|
275
|
+
- CI/CD pipeline
|
|
276
|
+
- PyPI release
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
[2.3.0]: https://github.com/capiscio/capiscio-sdk-python/releases/tag/v2.3.0
|
|
281
|
+
[0.3.1]: https://github.com/capiscio/capiscio-sdk-python/releases/tag/v0.3.1
|
|
282
|
+
[0.3.0]: https://github.com/capiscio/capiscio-sdk-python/releases/tag/v0.3.0
|
|
283
|
+
[0.1.0]: https://github.com/capiscio/capiscio-sdk-python/releases/tag/v0.1.0
|
|
284
|
+
|