Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: adcontextprotocol/adcp-client-python
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v1.5.0
Choose a base ref
...
head repository: adcontextprotocol/adcp-client-python
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v1.6.0
Choose a head ref
  • 3 commits
  • 13 files changed
  • 3 contributors

Commits on Nov 13, 2025

  1. feat: add AdCPBaseModel with exclude_none serialization (#40)

    * feat: add AdCPBaseModel with exclude_none serialization
    
    AdCP JSON schemas use `additionalProperties: false` and don't allow null
    for optional fields. Optional fields must be omitted entirely when not present.
    
    Changes:
    - Create AdCPBaseModel base class with exclude_none=True by default
    - Update code generator to use AdCPBaseModel instead of BaseModel
    - Regenerate all models with new base class
    - Export AdCPBaseModel from adcp.types
    
    This ensures spec-compliant JSON serialization where None values are
    omitted from the output instead of being sent as null.
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    
    * fix: add type annotations to AdCPBaseModel methods
    
    Add proper type annotations to model_dump() and model_dump_json()
    to satisfy mypy strict type checking.
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    
    ---------
    
    Co-authored-by: Claude <noreply@anthropic.com>
    bokelley and claude authored Nov 13, 2025
    Configuration menu
    Copy the full SHA
    c3cd590 View commit details
    Browse the repository at this point in the history
  2. feat: add adagents.json validation and discovery (#42)

    * feat: add adagents.json validation support
    
    Add utilities for fetching, parsing, and validating adagents.json files
    per the AdCP specification. This allows sales agents to verify they are
    authorized for specific publisher properties.
    
    Features:
    - fetch_adagents(): Async function to fetch and validate adagents.json
    - verify_agent_authorization(): Check if agent is authorized for a property
    - verify_agent_for_property(): Convenience wrapper combining fetch + verify
    - domain_matches(): Domain matching logic per AdCP rules (wildcards, subdomains)
    - identifiers_match(): Property identifier matching logic
    
    Implements AdCP spec for publisher authorization:
    - Wildcard domain patterns (*.example.com)
    - Common subdomain matching (www, m)
    - Protocol-agnostic agent URL matching
    - Property type and identifier validation
    - Multiple identifier types (domain, bundle_id, etc.)
    
    Exception hierarchy:
    - AdagentsValidationError: Base error for validation issues
    - AdagentsNotFoundError: adagents.json not found (404)
    - AdagentsTimeoutError: Request timeout
    
    Tests:
    - 27 unit tests covering all core logic
    - Domain matching edge cases
    - Identifier matching rules
    - Authorization verification scenarios
    - Error handling and validation
    
    All existing tests pass (207 tests total)
    Type checking passes with mypy
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    
    * docs: add adagents validation example
    
    Add comprehensive example demonstrating adagents.json validation:
    - Fetching and parsing adagents.json
    - Verifying agent authorization
    - Domain matching rules
    - Identifier matching
    - Error handling
    
    Includes working examples with mock data and explanations of
    all key use cases for sales agents and publishers.
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    
    * docs: add Publisher Authorization Validation section to README
    
    Document the new adagents.json validation functionality:
    - Usage examples for fetch_adagents and verify_agent_authorization
    - Domain matching rules (wildcards, subdomains, protocol-agnostic)
    - Use cases for sales agents and publishers
    - Reference to complete examples
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    
    * feat: add property and tag discovery functions
    
    Add utilities to extract and query properties from adagents.json:
    - get_all_properties(): Extract all properties across all agents
    - get_all_tags(): Get unique tags from all properties
    - get_properties_by_agent(): Filter properties by agent URL
    
    Features:
    - Extracts properties with agent_url for reference
    - Protocol-agnostic agent URL matching
    - Handles empty/missing properties gracefully
    - Returns structured data for indexing and discovery
    
    Use cases:
    - Build property indexes and registries
    - Discover available inventory by tags
    - Query what properties an agent can sell
    - Aggregate publisher inventory across agents
    
    Tests:
    - 8 new unit tests covering all edge cases
    - All 215 tests pass
    
    Example added demonstrating property discovery and tag extraction.
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    
    * feat: add security and performance improvements to adagents validation
    
    - Add domain input validation to prevent injection attacks
    - Add comprehensive domain normalization (handles trailing dots/slashes)
    - Add HTTP session management with optional client parameter for connection pooling
    - Add 14 new tests for domain validation and normalization
    - Fix line length violation in docstring
    
    Security improvements:
    - Validate publisher domains before HTTP requests
    - Check for suspicious characters (backslash, @, newlines, tabs)
    - Prevent path traversal attempts
    - Enforce DNS domain length limits (253 chars)
    
    Performance improvements:
    - Optional httpx.AsyncClient parameter for connection reuse
    - Enables connection pooling for multiple adagents.json fetches
    - Reduces overhead for production use cases
    
    All 229 tests pass.
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    
    * fix: correct import sorting in __init__.py for CI linter
    
    Ruff's import sorter requires imports to be in alphabetical order.
    This fixes the CI linter failure.
    
    🤖 Generated with [Claude Code](https://claude.com/claude-code)
    
    Co-Authored-By: Claude <noreply@anthropic.com>
    
    ---------
    
    Co-authored-by: Claude <noreply@anthropic.com>
    bokelley and claude authored Nov 13, 2025
    Configuration menu
    Copy the full SHA
    4ea16a1 View commit details
    Browse the repository at this point in the history
  3. chore(main): release 1.6.0 (#41)

    Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
    github-actions[bot] authored Nov 13, 2025
    Configuration menu
    Copy the full SHA
    6c67f02 View commit details
    Browse the repository at this point in the history
Loading