Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

anna-app-runtime-local

Local-dev in-memory runtime for Anna Apps. Reuses the production anna_app_rpc_dispatcher through WindowStoreProtocol so harness behaviour is byte-identical to nexus production.

How it shares code with production

This package does not vendor a copy of the dispatcher. Instead it:

  1. Imports dispatch, WindowStoreProtocol, HostRpcError from src.services.anna_app_rpc_dispatcher (matrix-nexus source).
  2. Provides InMemoryWindowStore — a WindowStoreProtocol impl that keeps state in dictionaries and queues SSE events in memory.
  3. Wires the production dispatch(store, …) against in-memory state.

Because the wheel imports src.services.… directly, the bridge process must be launched from a Python environment that has matrix-nexus on PYTHONPATH (typically: cd matrix-nexus && uv run python -m anna_app_runtime_local.bridge).

Public surface

from anna_app_runtime_local import LocalDispatcherSession, mint_dev_token

session = LocalDispatcherSession.create(
    user_id=1,
    app_slug="focus-flow",
    manifest_dict={...},  # parsed manifest.json
    view="main",
    entry_payload={"topic": "ECM"},
)
result = await session.call("storage", "set", {"key": "x", "value": 42})
events = session.drain_events()  # list[dict] for SSE relay

stdio bridge

python -m anna_app_runtime_local.bridge

Speaks JSON-RPC 2.0 over stdin/stdout (one envelope per line). Methods:

  • session.create{ session_id, window_uuid, token, view, view_meta }
  • session.call → forwards to dispatch(); returns { ok, result | error }
  • session.drain_events → flushes queued SSE events
  • session.close → drops the session
  • session.refresh_token → re-mints a dev token for an active session
  • executas.register → registers {tool_id, project_dir, command?} for tools.invoke; first call lazy-spawns uv run --project <dir> <tool_id> and reuses the warm subprocess.

The Node-side harness (anna-app-cli/src/harness/bridge.ts) speaks this protocol over python-shell.

Local HMAC tokens

mint_dev_token / verify_dev_token use a per-user key at ~/.anna-app/dev.key (mode 600, generated on first use). TTL defaults to 30 s — shorter than production's 120 s — to surface SDK refresh bugs early.

These tokens are not interoperable with the production JWT path; production's _is_tool_allowed already rejects tool-dev-… prefixes.

Download files

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

Source Distribution

anna_app_runtime_local-0.2.0a21.tar.gz (46.9 kB view details)

Uploaded Source

Built Distribution

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

anna_app_runtime_local-0.2.0a21-py3-none-any.whl (40.0 kB view details)

Uploaded Python 3

File details

Details for the file anna_app_runtime_local-0.2.0a21.tar.gz.

File metadata

File hashes

Hashes for anna_app_runtime_local-0.2.0a21.tar.gz
Algorithm Hash digest
SHA256 1fc37ddda91a8444f45284c7c75db4df5cc0a40d508b675b8daaf193417002ad
MD5 0c48f8ec8f9566e636cf98d222d4b83d
BLAKE2b-256 df691a87588d6518afa6f47e3c90c98550c9522348ca61eb76d6420c9b0add1a

See more details on using hashes here.

File details

Details for the file anna_app_runtime_local-0.2.0a21-py3-none-any.whl.

File metadata

File hashes

Hashes for anna_app_runtime_local-0.2.0a21-py3-none-any.whl
Algorithm Hash digest
SHA256 4e56a54c322c4ff24f7b408e812e1c5e7cd8acf057fccbbd3f09ec2fb3793a9b
MD5 44295d9ac71f4cf23758c09bcc14616f
BLAKE2b-256 410aed51bf84d25d8297027c0fd0696d569f26e5b9e645bb8ffc3df2c4d565d7

See more details on using hashes here.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page