Metadata-Version: 2.4
Name: aifeed
Version: 1.0.0a1
Summary: Independent Python verifier for AIFeed signed declarations: manifests, AIFeed Markdown, MAKO, revocation, bundles, and delta indexes
License-Expression: MIT
Project-URL: Homepage, https://aifeed.md
Project-URL: Repository, https://github.com/denyn1/aifeed-protocol
Project-URL: Specification, https://github.com/denyn1/aifeed-protocol/blob/main/spec/en/aifeed-v0.2.md
Project-URL: Changelog, https://github.com/denyn1/aifeed-protocol/blob/main/CHANGELOG.md
Keywords: aifeed,ai,verification,ed25519,markdown,mako,content-permissions
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Security :: Cryptography
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# aifeed (Python)

Independent Python verifier for the [AIFeed protocol](https://aifeed.md): signed content
permissions for the AI web. Standard library only — no third-party dependencies.

```bash
pip install aifeed
```

## Verify a directory or manifest

```python
from aifeed import verify

report = verify.verify_directory('./my-site', domain='example.com')
print(report['result'], report['errors'])
```

```python
from aifeed import verify

with open('ai.json', encoding='utf-8') as handle:
    manifest = handle.read()
with open('ai-signature.json', encoding='utf-8') as handle:
    signature = handle.read()
report = verify.verify(manifest, signature, domain='example.com')
```

## Revocations, bundles, digests

```python
from aifeed import verify

verify.verify_revocation_document(text, domain='example.com', governance_keys=keys)
verify.verify_bundle('./my-bundle')                 # offline audit bundle
verify.parse_strict(text)                           # strict JSON (no floats/dupes, NFC)
verify.verify_content_digest(header, body_bytes)    # Content-Digest (RFC 9530)
```

## AIFeed Markdown / MAKO documents

```python
from aifeed import mako

parsed = mako.parse_frontmatter(page_bytes)
fields = mako.validate_aimd_fields(parsed['frontmatter'])   # or validate_mako_fields
result = mako.verify_mako_container(container_text, page_url, body_bytes, public_key_value)
index = mako.verify_aimd_index(index_text, index_url, public_key_value)
```

## Command line

```bash
aifeed-verify ./my-site --json                       # directory verification
aifeed-verify ai.json --domain example.com --json    # single manifest + signature
aifeed-verify revocation ./revocation.json --json    # multi-signature registry
aifeed-verify bundle ./my-bundle --json              # offline bundle
aifeed-mako page.aifeed.md                           # frontmatter/container verification
```

The historical paths still work: `import aifeed_verify` / `import aifeed_mako` and
`python clients/python/aifeed_verify.py` are aliases for `aifeed.verify` / `aifeed.mako`.

## Source

Part of [aifeed-protocol](https://github.com/denyn1/aifeed-protocol) (`clients/python/`),
differential-tested against the shared conformance vectors alongside the JavaScript
implementation. Specs: `spec/en/`; agent guide: `docs/agent-quickstart.md`.
