This release is a pre-release and may not be stable for production use.
astroframe 筑穹
筑其基者,擎九霄穹
Universal plugin platform runtime — Protocol-based capability registration, subprocess sandbox (seccomp-bpf + Landlock + PEP 578 audit hooks), sigstore/GPG signature verification, and AST security scanning. All plugins run in isolated subprocess sandboxes.
Features
- Plugin Discovery —
entry_points-based discovery with manifest (astroframe-plugin.json) as single source of truth - Capability Registry — Protocol-typed capability groups (Processor, Exporter, ChatProvider, Transform, CLI subcommand, GUI page, etc.)
- Four-Layer Security — S5 AST scanner → S9 seccomp-bpf syscall whitelist → S10 Landlock filesystem ACL → S8 PEP 578 audit hooks
- Subprocess Sandbox — Every plugin runs in an isolated child process with IPC via
multiprocessing.connection - Signature Verification — Sigstore / GPG plugin signature verification pipeline
- Schema Validation — JSON Schema-based plugin config validation at load time
- Lifecycle Management — LOADED → ENABLED → DISABLED → ERROR state machine with crash recovery and dependency cascade resolution
- Fail-Closed — Any security mechanism failure → affected plugin unavailable, rest operate normally
- Plugin Error Isolation — Engine always starts; single plugin failure blast radius limited to its capabilities
Install
pip install astroframe
With sigstore signature verification:
pip install "astroframe[sigstore]"
Quick Start
from astroframe import PluginRegistry, discover_plugins
# Discover plugins via entry_points
manifests = discover_plugins()
# Register and validate
registry = PluginRegistry()
registry.register_all(manifests)
# Lifecycle — load and enable
registry.load_all()
registry.enable_all()
Architecture
entry_points → manifest → AST scan → subprocess sandbox
├── seccomp-bpf (syscall whitelist)
├── Landlock (filesystem ACL)
└── PEP 578 (audit hooks)
All plugins — including first-party consumers like astrocrawl — run through the same pipeline. No BUILTIN concept, no special-cased identity.
Plugin Manifest
Plugins declare themselves via astroframe-plugin.json:
{
"name": "my-plugin",
"version": "1.0.0",
"group": "processor",
"capabilities": [...],
"entry_point": "my_plugin:factory",
"config_schema": {...}
}
Entry point in pyproject.toml:
[project.entry-points."astroframe.plugins"]
my-plugin = "my_plugin:get_manifest_path"
Optional Dependencies
| Extra | Purpose |
|---|---|
sigstore |
Sigstore-based plugin signature verification |
License
Apache 2.0
Metadata
Release files for astroframe 0.1.0a1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| astroframe-0.1.0a1.tar.gz | 77.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| astroframe-0.1.0a1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 161.1 kB
Release files / astroframe-0.1.0a1.tar.gz
| Download URL | astroframe-0.1.0a1.tar.gz |
|---|---|
| Size | 77.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8ea34bf0c3529d9ef92c4505a795fe5e1bee67b9a8b1f8cc4b4fd70067fd2965
|
|
BLAKE2b-256 checksum How to use checksums |
a755ae3aaca9fa4454dde74299a6d936e9caebdc176ff8998f6ee70fd4881fac
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 19, 2026.
Transparency logRelease files / astroframe-0.1.0a1-py3-none-any.whl
| Download URL | astroframe-0.1.0a1-py3-none-any.whl |
|---|---|
| Size | 83.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bafbd325c141e150e9e2cea09bbc718be2d8a6b94f2a29d38510191c3ab6e8a9
|
|
BLAKE2b-256 checksum How to use checksums |
4f29851c9f249ef30c1eaef8934e0a30afcb881ed1b7a2af3e1cbe0c4a4444ad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 19, 2026.
Transparency log