Skip to main content

EasyNet Python SDK surface (MVP)

Project description

EasyRemote

easynet-run-axon

Python SDK for EasyNet Axon — the Capability Control Plane for agent-native distributed execution.


What is this?

This is the Python surface for Axon, a protocol-level control plane that treats agent capabilities as first-class network objects — not raw RPC endpoints. Every ability you expose carries its own schema, trust posture, scheduling contract, and tenant isolation rules, enforced atomically at invocation time.

Why this matters: In traditional architectures, policy evaluation, node selection, rate limiting, and concurrency admission happen in separate systems with separate state. That creates a race window — OPA approves a call against nodes {A,B,C}, but the load balancer routes to Node D added between decisions. Axon collapses all six checks (tenant isolation, rate limit, policy, node selection, concurrency, circuit breaker) into a single atomic decision against the same state snapshot.

Note: The wheel is platform-tagged (not any) because it ships a native Dendrite bridge binary — the same C ABI that powers protocol-complete Axon gRPC calls without reimplementing protobuf encoding or streaming semantics in Python.

Install

pip install easynet-run-axon

Platform / Native Bundle Notes

The Python wheel contains native runtime + bridge payload and is therefore target-specific.

  • Wheels are published to PyPI per target. pip install on a host automatically selects the matching wheel.
  • For explicit cross-target workflows (CI + dev), use matching GitHub Release packs:
    • sdk-packs-aarch64-apple-darwin.tar.gz
    • sdk-packs-aarch64-apple-ios.tar.gz
    • sdk-packs-x86_64-apple-ios.tar.gz
    • sdk-packs-x86_64-unknown-linux-gnu.tar.gz
    • sdk-packs-aarch64-unknown-linux-gnu.tar.gz
    • sdk-packs-aarch64-linux-android.tar.gz
    • sdk-packs-x86_64-pc-windows-msvc.tar.gz
    • sdk-packs-x86_64-apple-darwin.tar.gz
  • If auto selection is not available (e.g., offline/air-gapped), install from pack file directly:
pip install /path/to/dist/sdk-packs/<version>/python/easynet_run_axon-<version>-cp*.whl
  • CI/source cross-target hints:
    • SDK_VERSION=<version> (optional; resolver checks this value and then falls back to 0.1.0)
    • EASYNET_DENDRITE_BRIDGE_PLATFORM=ios|android|linux|windows|macos
    • EASYNET_DENDRITE_BRIDGE_LIB=/abs/path/libaxon_dendrite_bridge.<ext>
    • EASYNET_DENDRITE_BRIDGE_HOME=/path/to/sdk-packs-<target>.tar.gz/extracted/package(例如 dist/sdk-packs/<version>/python 或其父级的统一目录)
    • EASYNET_DENDRITE_BRIDGE_SOURCE=local to auto-bind from source-tree release output (core/runtime-rs/dendrite-bridge/target/...) when running from repository checkout.

Quick Start

Expose an ability

from easynet_axon import ability, serve

@ability("easynet:///r/org/reg/agent.quote-bot/abilities/order.quote@1?tenant_id=tenant-test")
def quote(ctx, sku: str, qty: int = 1):
    return {"sku": sku, "price": 19.9 * qty}

serve("agent.quote-bot")

Invoke an ability

from easynet_axon import client

res = (
    client()
    .tenant("tenant-test")
    .ability("easynet:///r/org/reg/agent.quote-bot/abilities/order.quote@1?tenant_id=tenant-test")
    .call({"sku": "A1", "qty": 2})
)

Bootstrap a local runtime behind NAT

No public IP required. The SDK spawns a local Axon runtime that joins a federation Hub over outbound gRPC only:

from easynet_axon import start_server

srv = start_server(
    hub="axon://hub.easynet.run:50084",
    hub_tenant="tenant-test",
    hub_label="alice-macbook",
)

Capabilities

Core Protocol

  • Fluent builders.tenant().principal().ability().call() are immutable and chainable.
  • Native Dendrite bridgeDendriteBridge loads the platform C ABI via ctypes; all Axon gRPC shapes (unary, server-stream, client-stream, bidi-stream) are available without gRPC codegen.
  • Semantic DSLSemanticBridge and @ability_call decorator for ergonomic protocol invocation.
  • Subject binding.principal(...) scopes invocation to a subject identity with automatic URI visibility mapping (pub/prv/org).

Ability Lifecycle

Full lifecycle management — not just invocation:

  • build_ability_descriptor() / export_ability() — define and register abilities with schemas
  • deploy_to_node() — install + activate on target nodes
  • list_abilities() / invoke_ability() / uninstall_ability()
  • forget_all() — bulk removal of all deployed abilities

MCP & A2A Protocols

  • MCP serverStdioMcpServer hosts JSON-RPC 2.0 tool endpoints over stdio.
  • MCP operationsdeploy_mcp_list_dir(), list_mcp_tools(), call_mcp_tool_with_args(), update_mcp_list_dir()
  • A2A agent protocollist_a2a_agents(), get_a2a_agent_card(), send_a2a_task() for inter-agent task dispatch.
  • Tool adapterAbilityToolAdapter converts Axon abilities to OpenAI/Anthropic tool definitions with local handler registration.

Voice & Media Signaling

First-class voice call lifecycle and transport negotiation:

  • Call management: create, join, leave, end, watch events, report metrics
  • Transport sessions: create, set description, add ICE candidates, refresh lease
  • Codec profile negotiation

Federation

  • start_server() spawns a local Axon runtime and joins the Hub — all traffic is outbound.
  • FederationCaseKit for cross-network orchestration workflows.
  • Federated node discovery, heartbeat, and invocation dispatch.
  • Preset status: FederationCaseKit is currently the only first-party high-level federation preset helper; other SDKs expose federation through lower-level runtime/client surfaces only.

Remote Control & Orchestration

  • OrchestratorFactory / RemoteOrchestratorFactory for subprocess template building and capability deployment workflows.
  • Bundle reading, media persistence, CLI argument handling.

License

Apache-2.0 — see LICENSE.

Author

Silan Hu · silan.hu@u.nus.edu

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

easynet_run_axon-0.39.29.tar.gz (6.9 MB view details)

Uploaded Source

Built Distributions

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

easynet_run_axon-0.39.29-py3-none-win_amd64.whl (6.9 MB view details)

Uploaded Python 3Windows x86-64

easynet_run_axon-0.39.29-py3-none-manylinux_2_17_x86_64.whl (7.5 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

easynet_run_axon-0.39.29-py3-none-manylinux_2_17_aarch64.whl (7.4 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

easynet_run_axon-0.39.29-py3-none-macosx_11_0_arm64.whl (16.4 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

easynet_run_axon-0.39.29-py3-none-macosx_10_9_x86_64.whl (16.5 MB view details)

Uploaded Python 3macOS 10.9+ x86-64

File details

Details for the file easynet_run_axon-0.39.29.tar.gz.

File metadata

  • Download URL: easynet_run_axon-0.39.29.tar.gz
  • Upload date:
  • Size: 6.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for easynet_run_axon-0.39.29.tar.gz
Algorithm Hash digest
SHA256 7c1d27dedcd6fef48753a1b0d4e94adb855f858d44fad1341d402f55646388a4
MD5 703fb26528086c85f7d34b0109e0aca9
BLAKE2b-256 117866e0454cc8c9af111cabc7c7465486f6008131166d1d95baa288710950fc

See more details on using hashes here.

File details

Details for the file easynet_run_axon-0.39.29-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for easynet_run_axon-0.39.29-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 c50ade860bf3a6da8e881ca7a41954e2435c4b557864e0e1b99ccf5534de9e4d
MD5 c460a210fc9dd3585bd3ecb0583d94d3
BLAKE2b-256 666ef69d35b679cf367db5937321f85a02c5cc8f254bbaaf61bccb895fe6ee66

See more details on using hashes here.

File details

Details for the file easynet_run_axon-0.39.29-py3-none-manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for easynet_run_axon-0.39.29-py3-none-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 edb32f02929dc19232529023afefcc6270c5f76fbf425e3e8af7be3f189bb61a
MD5 238680c5c95ee9ee34b359957d4e185a
BLAKE2b-256 1e6642dc7f37d888ea3d91fcd3c3839e66c41e13d3af2898adff35aacdc29790

See more details on using hashes here.

File details

Details for the file easynet_run_axon-0.39.29-py3-none-manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for easynet_run_axon-0.39.29-py3-none-manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 a725ce602fd665ff9c7646658557c89b331e56862145f556f574c20ed7f89f14
MD5 262c7b5b52202d190de248aea8ba9280
BLAKE2b-256 448cf727987c6ba90a415e2bb1e8452f1ed4a71b2ed9b43902ee3144d81a2c4a

See more details on using hashes here.

File details

Details for the file easynet_run_axon-0.39.29-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for easynet_run_axon-0.39.29-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a864f16bd816b107586e6a7296c45aa3fde2cc335987a4869511d8803906f76d
MD5 c0a4a44c513faabc6f104d20f73b4863
BLAKE2b-256 42e7083e9d8d4149c0109102349008286c2138bea56cf5d4121eb60acd519249

See more details on using hashes here.

File details

Details for the file easynet_run_axon-0.39.29-py3-none-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for easynet_run_axon-0.39.29-py3-none-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7770d63a752ec64172c7751c39af07db75e39f5eeff3dadcf0faeee6ab1a5175
MD5 977021a2a636ec5a86e2828d3de3a343
BLAKE2b-256 e35f58e415b90308fc92ecfd3b9634183e00451d09e7331e03967396016dabc5

See more details on using hashes here.

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