Skip to main content

Kestrel Sovereign SDK — lightweight interfaces and protocols for feature packages

Project description

kestrel-sovereign-sdk

Lightweight SDK providing base interfaces, protocols, and utilities for Kestrel Sovereign feature package development. Feature packages depend on this SDK instead of the full framework, keeping dependencies minimal and development fast.

Installation

uv pip install git+https://github.com/KestrelSovereignAI/kestrel-sovereign-sdk.git

With encryption helpers:

uv pip install "kestrel-sovereign-sdk[crypto] @ git+https://github.com/KestrelSovereignAI/kestrel-sovereign-sdk.git"

Dependencies

  • pydantic>=2.0
  • Optional: cryptography>=42.0 (via [crypto] extra)

Usage

from kestrel_sdk.features.base import Feature, Tool

class MyFeature(Feature):
    name = "my-feature"

    def get_tools(self):
        return [Tool(name="my-tool", description="Does something", handler=self.handle)]

Database surface (entity feature packages)

Feature packages that need raw SQL or ORM access (e.g. kestrel-feature-entities) develop against kestrel_sdk.storage.database:

from kestrel_sdk.storage.database import (
    DatabaseBackend,           # async ABC: execute / fetch_* / transaction
    PrivacyMode,               # 5-mode enum
    EngineTarget,              # frozen dataclass: url, persistent, description
    resolve_engine_target,     # PrivacyMode + fallback_url -> EngineTarget
)

target = resolve_engine_target(PrivacyMode.NORMAL, "postgresql+asyncpg://...")
# target.url is the SQLAlchemy URL the feature should bind its ORM engine to.
# Volatile modes (EPHEMERAL/ISOLATED) ignore fallback_url and return
# in-memory or tempfile sqlite URLs with persistent=False.

To get the active DatabaseBackend instance at runtime, features access it through the agent context they already receive in their Feature.__init__:

class MyEntityFeature(Feature):
    def __init__(self, agent):
        super().__init__(agent)
        self.db: DatabaseBackend = agent.db   # provided by sovereign

The SDK declares the DatabaseBackend ABC; sovereign provides the concrete SQLiteBackend / PostgresBackend instance via agent.db. Feature packages should never instantiate their own backend — that creates a parallel connection pool and bypasses the agent's privacy enforcement.

Channels, Delivery, And Output Contracts

Channel and delivery packages use SDK contracts rather than importing from the full framework:

from kestrel_sdk.channels import ChannelAdapter, ChannelMessage
from kestrel_sdk.delivery import DeliveryProvider, DeliveryTask, DeliveryResult
from kestrel_sdk.outputs import OutputEvent, OutputKind

Feature packages register concrete channel adapters through:

[project.entry-points."kestrel_sovereign.channel_adapters"]
telegram = "kestrel_channel_telegram:TelegramAdapter"

Delivery providers register through:

[project.entry-points."kestrel_sovereign.delivery_providers"]
sendgrid = "kestrel_delivery_sendgrid:SendGridDeliveryProvider"

The SDK owns only the public contracts. The framework owns runtime privacy checks, signal dispatch, durable queues, and server composition.

Timeline Protocols

Timeline implementations (e.g., story archive, health timelines) use SDK protocols for cross-package interoperability:

from kestrel_sdk.timeline import (
    TimelineProtocol,
    EventProtocol,
    PersonProtocol,
    TimelineSharingProtocol,
    JSONTimelineSerializer,
    VectorSearchBackend,
)

These protocols define minimal duck-typed shapes that any timeline implementation must conform to. Feature packages can implement timeline functionality without inheriting from kestrel-feature-entities. For a full timeline implementation with persistence, embeddings, and IPFS export, see kestrel-feature-story-archive.

Configuration

No environment variables required. This is a development-time dependency only.

Development

uv pip install kestrel-sovereign-sdk && uv pip install -e .
uv run pytest

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kestrel_sovereign_sdk-0.16.0.tar.gz (90.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kestrel_sovereign_sdk-0.16.0-py3-none-any.whl (115.8 kB view details)

Uploaded Python 3

File details

Details for the file kestrel_sovereign_sdk-0.16.0.tar.gz.

File metadata

  • Download URL: kestrel_sovereign_sdk-0.16.0.tar.gz
  • Upload date:
  • Size: 90.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for kestrel_sovereign_sdk-0.16.0.tar.gz
Algorithm Hash digest
SHA256 d99fcfeff7c3cc040d8f5bfa3593b9887244f573bf5e9a03b384eebee35f7057
MD5 bb3e16af0b627bbaa74b56ce09140c2a
BLAKE2b-256 e4dd605ef972f4c8d0aa79af20315543b9f9be3805413955db1bd846f46eff14

See more details on using hashes here.

Provenance

The following attestation bundles were made for kestrel_sovereign_sdk-0.16.0.tar.gz:

Publisher: publish.yml on KestrelSovereignAI/kestrel-sovereign-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kestrel_sovereign_sdk-0.16.0-py3-none-any.whl.

File metadata

File hashes

Hashes for kestrel_sovereign_sdk-0.16.0-py3-none-any.whl
Algorithm Hash digest
SHA256 087a157e03208aff0c8834a6c6b29c9b6e0fa6ee1889927793892ed2e1e8d463
MD5 55b9ec08abe2fcac8581d4d688e6c3d3
BLAKE2b-256 47c67d273955b0f9bf0cb114b6ddc48e6c97da9aeaaf0a2811e331c98c4b4e8b

See more details on using hashes here.

Provenance

The following attestation bundles were made for kestrel_sovereign_sdk-0.16.0-py3-none-any.whl:

Publisher: publish.yml on KestrelSovereignAI/kestrel-sovereign-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page