radui 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- radui-1.0.0/.dockerignore +29 -0
- radui-1.0.0/.github/workflows/deploy-pages.yml +51 -0
- radui-1.0.0/.github/workflows/publish-pypi.yml +48 -0
- radui-1.0.0/.gitignore +49 -0
- radui-1.0.0/ARCHITECTURE.md +156 -0
- radui-1.0.0/CHANGELOG.md +180 -0
- radui-1.0.0/Dockerfile +50 -0
- radui-1.0.0/LICENSE +202 -0
- radui-1.0.0/PKG-INFO +763 -0
- radui-1.0.0/README.md +716 -0
- radui-1.0.0/audit/ARCHITECTURE_DECISION_RECORDS_PROPOSAL.md +260 -0
- radui-1.0.0/audit/COMPETITIVE_ANALYSIS.md +79 -0
- radui-1.0.0/audit/DEVELOPER_AND_USER_EXPERIENCE_REPORT.md +111 -0
- radui-1.0.0/audit/EXECUTIVE_SUMMARY.md +100 -0
- radui-1.0.0/audit/FINAL_ARCHITECTURE_SIGNOFF.md +152 -0
- radui-1.0.0/audit/FINAL_AUDIT_RECONCILIATION.md +143 -0
- radui-1.0.0/audit/FINAL_V1_RELEASE_CRITERIA.md +110 -0
- radui-1.0.0/audit/FLEXIBILITY_AND_CUSTOMIZATION_REPORT.md +147 -0
- radui-1.0.0/audit/FUNCTIONALITY_GAP_ANALYSIS.md +76 -0
- radui-1.0.0/audit/IMPROVEMENT_ROADMAP.md +140 -0
- radui-1.0.0/audit/PHASE_1_EVIDENCE_CORRECTIONS.md +286 -0
- radui-1.0.0/audit/PRODUCTION_READINESS_REPORT.md +94 -0
- radui-1.0.0/audit/PROJECT_AUDIT_REPORT.md +112 -0
- radui-1.0.0/audit/RESEARCH_IMPLEMENTATION_GAP_ANALYSIS.md +92 -0
- radui-1.0.0/audit/experiments/advanced_app.py +236 -0
- radui-1.0.0/audit/experiments/beginner_app.py +98 -0
- radui-1.0.0/audit/experiments/intermediate_app.py +275 -0
- radui-1.0.0/audit/experiments/test_experiments.py +66 -0
- radui-1.0.0/benchmarks/run.py +47 -0
- radui-1.0.0/docker-compose.yml +61 -0
- radui-1.0.0/docs/adr/ADR-001-monotonic-fencing-tokens.md +50 -0
- radui-1.0.0/docs/adr/ADR-002-transactional-outbox.md +81 -0
- radui-1.0.0/docs/adr/ADR-003-high-watermark-sse-replay.md +55 -0
- radui-1.0.0/docs/adr/ADR-004-psycopg3-native-postgresql.md +55 -0
- radui-1.0.0/docs/adr/ADR-005-multi-tenant-key-isolation.md +88 -0
- radui-1.0.0/docs/adr/ADR-006-five-state-client-mutation-lifecycle.md +85 -0
- radui-1.0.0/docs/adr/ADR-007-distributed-consistency-failure-semantics.md +38 -0
- radui-1.0.0/docs/adr/ADR-008-reactive-state-transaction-semantics.md +44 -0
- radui-1.0.0/docs/adr/ADR-009-query-cache-consistency-invalidation.md +46 -0
- radui-1.0.0/docs/adr/ADR-010-framework-security-threat-model.md +49 -0
- radui-1.0.0/docs/adr/ADR-011-background-job-execution-guarantees.md +61 -0
- radui-1.0.0/docs/adr/ADR-012-protocol-compatibility-versioning.md +67 -0
- radui-1.0.0/docs/architecture/RADUI_NATIVE_DOCUMENTATION_ARCHITECTURE.md +217 -0
- radui-1.0.0/docs_site/README.md +16 -0
- radui-1.0.0/docs_site/__init__.py +1 -0
- radui-1.0.0/docs_site/app.py +39 -0
- radui-1.0.0/docs_site/assets/favicon.svg +20 -0
- radui-1.0.0/docs_site/assets/radui-concept-emblem.jpg +0 -0
- radui-1.0.0/docs_site/assets/radui-concept-lockup.jpg +0 -0
- radui-1.0.0/docs_site/assets/radui-concept-minimalist.jpg +0 -0
- radui-1.0.0/docs_site/assets/radui-icon.svg +98 -0
- radui-1.0.0/docs_site/assets/radui-logo-dark.svg +70 -0
- radui-1.0.0/docs_site/assets/radui-logo-light.svg +63 -0
- radui-1.0.0/docs_site/assets/radui-logo.svg +77 -0
- radui-1.0.0/docs_site/assets/radui-mark.svg +71 -0
- radui-1.0.0/docs_site/commands.py +73 -0
- radui-1.0.0/docs_site/core.py +40 -0
- radui-1.0.0/docs_site/data.py +875 -0
- radui-1.0.0/docs_site/layout.py +116 -0
- radui-1.0.0/docs_site/pages/__init__.py +3 -0
- radui-1.0.0/docs_site/pages/advanced.py +80 -0
- radui-1.0.0/docs_site/pages/cli_guides.py +164 -0
- radui-1.0.0/docs_site/pages/component_guides.py +423 -0
- radui-1.0.0/docs_site/pages/intro.py +206 -0
- radui-1.0.0/docs_site/pages/systems.py +243 -0
- radui-1.0.0/docs_site/theme.py +464 -0
- radui-1.0.0/examples/ai_agent_workbench/app.py +183 -0
- radui-1.0.0/examples/analytics_dashboard/app.py +234 -0
- radui-1.0.0/examples/architecture_visualizer/app.py +363 -0
- radui-1.0.0/examples/hello_genesis/app.py +29 -0
- radui-1.0.0/examples/interactive_counter/app.py +61 -0
- radui-1.0.0/examples/research_workbench/app.py +88 -0
- radui-1.0.0/examples/saas_admin/app.py +270 -0
- radui-1.0.0/examples/state_demo.py +60 -0
- radui-1.0.0/genesis/__init__.py +563 -0
- radui-1.0.0/genesis/__main__.py +9 -0
- radui-1.0.0/genesis/ai/__init__.py +21 -0
- radui-1.0.0/genesis/ai/a2ui.py +82 -0
- radui-1.0.0/genesis/ai/ag_ui.py +84 -0
- radui-1.0.0/genesis/ai/mcp.py +46 -0
- radui-1.0.0/genesis/ai/persistence.py +157 -0
- radui-1.0.0/genesis/ai/streaming.py +95 -0
- radui-1.0.0/genesis/benchmarks/__init__.py +5 -0
- radui-1.0.0/genesis/benchmarks/suite.py +336 -0
- radui-1.0.0/genesis/cli.py +1225 -0
- radui-1.0.0/genesis/components/__init__.py +297 -0
- radui-1.0.0/genesis/components/model_forms.py +149 -0
- radui-1.0.0/genesis/components/nodes.py +2014 -0
- radui-1.0.0/genesis/core/__init__.py +15 -0
- radui-1.0.0/genesis/core/app.py +1441 -0
- radui-1.0.0/genesis/core/auth.py +53 -0
- radui-1.0.0/genesis/core/idempotency.py +1042 -0
- radui-1.0.0/genesis/core/ir.py +48 -0
- radui-1.0.0/genesis/core/outbox.py +475 -0
- radui-1.0.0/genesis/core/registry.py +321 -0
- radui-1.0.0/genesis/core/security.py +66 -0
- radui-1.0.0/genesis/core/theme.py +96 -0
- radui-1.0.0/genesis/data/__init__.py +23 -0
- radui-1.0.0/genesis/data/browser.py +25 -0
- radui-1.0.0/genesis/data/query.py +268 -0
- radui-1.0.0/genesis/i18n/__init__.py +21 -0
- radui-1.0.0/genesis/i18n/formatters.py +121 -0
- radui-1.0.0/genesis/inspector/__init__.py +14 -0
- radui-1.0.0/genesis/inspector/collector.py +131 -0
- radui-1.0.0/genesis/inspector/graph.py +175 -0
- radui-1.0.0/genesis/inspector/otlp.py +132 -0
- radui-1.0.0/genesis/jobs/__init__.py +26 -0
- radui-1.0.0/genesis/jobs/contracts.py +67 -0
- radui-1.0.0/genesis/jobs/redis.py +118 -0
- radui-1.0.0/genesis/jobs/runtime.py +585 -0
- radui-1.0.0/genesis/jobs/sqlite.py +515 -0
- radui-1.0.0/genesis/motion/__init__.py +198 -0
- radui-1.0.0/genesis/motion/springs.py +75 -0
- radui-1.0.0/genesis/motion/types.py +114 -0
- radui-1.0.0/genesis/plugins/__init__.py +5 -0
- radui-1.0.0/genesis/plugins/base.py +103 -0
- radui-1.0.0/genesis/renderers/__init__.py +3 -0
- radui-1.0.0/genesis/renderers/html.py +3808 -0
- radui-1.0.0/genesis/state/__init__.py +45 -0
- radui-1.0.0/genesis/state/backend.py +311 -0
- radui-1.0.0/genesis/state/dependencies.py +218 -0
- radui-1.0.0/genesis/state/middleware.py +38 -0
- radui-1.0.0/genesis/state/refs.py +269 -0
- radui-1.0.0/genesis/state/runtime.py +596 -0
- radui-1.0.0/genesis/testing.py +132 -0
- radui-1.0.0/genesis/transport/__init__.py +21 -0
- radui-1.0.0/genesis/transport/events.py +717 -0
- radui-1.0.0/pyproject.toml +79 -0
- radui-1.0.0/radui/__init__.py +553 -0
- radui-1.0.0/radui/__main__.py +9 -0
- radui-1.0.0/radui/ai/__init__.py +21 -0
- radui-1.0.0/radui/ai/a2ui.py +82 -0
- radui-1.0.0/radui/ai/ag_ui.py +84 -0
- radui-1.0.0/radui/ai/mcp.py +46 -0
- radui-1.0.0/radui/ai/persistence.py +157 -0
- radui-1.0.0/radui/ai/streaming.py +95 -0
- radui-1.0.0/radui/benchmarks/__init__.py +5 -0
- radui-1.0.0/radui/benchmarks/suite.py +336 -0
- radui-1.0.0/radui/cli.py +1235 -0
- radui-1.0.0/radui/components/__init__.py +297 -0
- radui-1.0.0/radui/components/model_forms.py +149 -0
- radui-1.0.0/radui/components/nodes.py +2028 -0
- radui-1.0.0/radui/core/__init__.py +15 -0
- radui-1.0.0/radui/core/app.py +1441 -0
- radui-1.0.0/radui/core/auth.py +53 -0
- radui-1.0.0/radui/core/idempotency.py +1042 -0
- radui-1.0.0/radui/core/ir.py +48 -0
- radui-1.0.0/radui/core/outbox.py +475 -0
- radui-1.0.0/radui/core/registry.py +321 -0
- radui-1.0.0/radui/core/security.py +66 -0
- radui-1.0.0/radui/core/theme.py +96 -0
- radui-1.0.0/radui/data/__init__.py +23 -0
- radui-1.0.0/radui/data/browser.py +25 -0
- radui-1.0.0/radui/data/query.py +268 -0
- radui-1.0.0/radui/i18n/__init__.py +21 -0
- radui-1.0.0/radui/i18n/formatters.py +121 -0
- radui-1.0.0/radui/inspector/__init__.py +14 -0
- radui-1.0.0/radui/inspector/collector.py +131 -0
- radui-1.0.0/radui/inspector/graph.py +175 -0
- radui-1.0.0/radui/inspector/otlp.py +132 -0
- radui-1.0.0/radui/jobs/__init__.py +26 -0
- radui-1.0.0/radui/jobs/contracts.py +67 -0
- radui-1.0.0/radui/jobs/redis.py +118 -0
- radui-1.0.0/radui/jobs/runtime.py +585 -0
- radui-1.0.0/radui/jobs/sqlite.py +515 -0
- radui-1.0.0/radui/motion/__init__.py +198 -0
- radui-1.0.0/radui/motion/springs.py +75 -0
- radui-1.0.0/radui/motion/types.py +114 -0
- radui-1.0.0/radui/plugins/__init__.py +5 -0
- radui-1.0.0/radui/plugins/base.py +103 -0
- radui-1.0.0/radui/renderers/__init__.py +3 -0
- radui-1.0.0/radui/renderers/html.py +4093 -0
- radui-1.0.0/radui/state/__init__.py +45 -0
- radui-1.0.0/radui/state/backend.py +311 -0
- radui-1.0.0/radui/state/dependencies.py +218 -0
- radui-1.0.0/radui/state/middleware.py +38 -0
- radui-1.0.0/radui/state/refs.py +269 -0
- radui-1.0.0/radui/state/runtime.py +596 -0
- radui-1.0.0/radui/testing.py +132 -0
- radui-1.0.0/radui/transport/__init__.py +21 -0
- radui-1.0.0/radui/transport/events.py +717 -0
- radui-1.0.0/scripts/build_docs.py +60 -0
- radui-1.0.0/tests/test_ai.py +93 -0
- radui-1.0.0/tests/test_applications.py +166 -0
- radui-1.0.0/tests/test_chaos.py +537 -0
- radui-1.0.0/tests/test_complex_components.py +300 -0
- radui-1.0.0/tests/test_components_extended.py +170 -0
- radui-1.0.0/tests/test_core.py +125 -0
- radui-1.0.0/tests/test_docs_site.py +114 -0
- radui-1.0.0/tests/test_enterprise_features.py +102 -0
- radui-1.0.0/tests/test_events.py +89 -0
- radui-1.0.0/tests/test_gate3_observability_security.py +183 -0
- radui-1.0.0/tests/test_gate4_benchmarks_soak.py +94 -0
- radui-1.0.0/tests/test_inspector.py +77 -0
- radui-1.0.0/tests/test_interactivity.py +579 -0
- radui-1.0.0/tests/test_jobs.py +516 -0
- radui-1.0.0/tests/test_motion.py +108 -0
- radui-1.0.0/tests/test_reactive_gate2.py +262 -0
- radui-1.0.0/tests/test_sqlite_jobs.py +130 -0
- radui-1.0.0/tests/test_state.py +377 -0
- radui-1.0.0/tests/test_v07_features.py +222 -0
- radui-1.0.0/tests/test_v08_features.py +143 -0
- radui-1.0.0/tests/test_v09_features.py +605 -0
- radui-1.0.0/tests/test_v10_reconciliation_features.py +548 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
__pycache__
|
|
2
|
+
*.pyc
|
|
3
|
+
*.pyo
|
|
4
|
+
*.pyd
|
|
5
|
+
.Python
|
|
6
|
+
env/
|
|
7
|
+
venv/
|
|
8
|
+
.venv/
|
|
9
|
+
build/
|
|
10
|
+
develop-eggs/
|
|
11
|
+
dist/
|
|
12
|
+
downloads/
|
|
13
|
+
eggs/
|
|
14
|
+
.eggs/
|
|
15
|
+
lib/
|
|
16
|
+
lib64/
|
|
17
|
+
parts/
|
|
18
|
+
sdist/
|
|
19
|
+
var/
|
|
20
|
+
wheels/
|
|
21
|
+
*.egg-info/
|
|
22
|
+
.installed.cfg
|
|
23
|
+
*.egg
|
|
24
|
+
.pytest_cache/
|
|
25
|
+
.coverage
|
|
26
|
+
htmlcov/
|
|
27
|
+
.git
|
|
28
|
+
.gitignore
|
|
29
|
+
.gemini
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
name: Deploy Documentation to GitHub Pages
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: ["gh-pages"]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
pages: write
|
|
11
|
+
id-token: write
|
|
12
|
+
|
|
13
|
+
concurrency:
|
|
14
|
+
group: "pages"
|
|
15
|
+
cancel-in-progress: false
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
deploy:
|
|
19
|
+
environment:
|
|
20
|
+
name: github-pages
|
|
21
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
steps:
|
|
24
|
+
- name: Checkout Repository
|
|
25
|
+
uses: actions/checkout@v4
|
|
26
|
+
|
|
27
|
+
- name: Set up Python
|
|
28
|
+
uses: actions/setup-python@v5
|
|
29
|
+
with:
|
|
30
|
+
python-version: "3.12"
|
|
31
|
+
|
|
32
|
+
- name: Install Dependencies
|
|
33
|
+
run: |
|
|
34
|
+
python -m pip install --upgrade pip
|
|
35
|
+
pip install -e .
|
|
36
|
+
|
|
37
|
+
- name: Export RADUI-Native Static Documentation
|
|
38
|
+
run: |
|
|
39
|
+
python -m radui export docs_site/app.py --static --output ./dist_docs
|
|
40
|
+
mkdir -p ./dist_docs/assets
|
|
41
|
+
cp -R ./docs_site/assets/. ./dist_docs/assets/
|
|
42
|
+
touch ./dist_docs/.nojekyll
|
|
43
|
+
|
|
44
|
+
- name: Upload Pages Artifact
|
|
45
|
+
uses: actions/upload-pages-artifact@v3
|
|
46
|
+
with:
|
|
47
|
+
path: ./dist_docs
|
|
48
|
+
|
|
49
|
+
- name: Deploy to GitHub Pages
|
|
50
|
+
id: deployment
|
|
51
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
id-token: write
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
build:
|
|
14
|
+
name: Build distribution package
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
- name: Set up Python
|
|
19
|
+
uses: actions/setup-python@v5
|
|
20
|
+
with:
|
|
21
|
+
python-version: "3.12"
|
|
22
|
+
- name: Install build tools
|
|
23
|
+
run: python -m pip install --upgrade build hatchling
|
|
24
|
+
- name: Build sdist and wheel
|
|
25
|
+
run: python -m build
|
|
26
|
+
- name: Store distribution packages
|
|
27
|
+
uses: actions/upload-artifact@v4
|
|
28
|
+
with:
|
|
29
|
+
name: python-package-distributions
|
|
30
|
+
path: dist/
|
|
31
|
+
|
|
32
|
+
publish-to-pypi:
|
|
33
|
+
name: Publish package to PyPI
|
|
34
|
+
needs: [build]
|
|
35
|
+
runs-on: ubuntu-latest
|
|
36
|
+
environment:
|
|
37
|
+
name: pypi
|
|
38
|
+
url: https://pypi.org/p/radui
|
|
39
|
+
permissions:
|
|
40
|
+
id-token: write
|
|
41
|
+
steps:
|
|
42
|
+
- name: Download distribution packages
|
|
43
|
+
uses: actions/download-artifact@v4
|
|
44
|
+
with:
|
|
45
|
+
name: python-package-distributions
|
|
46
|
+
path: dist/
|
|
47
|
+
- name: Publish package to PyPI
|
|
48
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
radui-1.0.0/.gitignore
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# Distribution / packaging
|
|
7
|
+
build/
|
|
8
|
+
dist/
|
|
9
|
+
dist_docs/
|
|
10
|
+
eggs/
|
|
11
|
+
.eggs/
|
|
12
|
+
*.egg-info/
|
|
13
|
+
*.egg
|
|
14
|
+
|
|
15
|
+
# Virtual environments
|
|
16
|
+
.venv/
|
|
17
|
+
venv/
|
|
18
|
+
env/
|
|
19
|
+
ENV/
|
|
20
|
+
|
|
21
|
+
# Testing and coverage
|
|
22
|
+
.pytest_cache/
|
|
23
|
+
.coverage
|
|
24
|
+
.coverage.*
|
|
25
|
+
htmlcov/
|
|
26
|
+
nosetests.xml
|
|
27
|
+
coverage.xml
|
|
28
|
+
*.cover
|
|
29
|
+
|
|
30
|
+
# Caches and indexing tools
|
|
31
|
+
.graphify/
|
|
32
|
+
.mypy_cache/
|
|
33
|
+
.ruff_cache/
|
|
34
|
+
|
|
35
|
+
# Databases and local states
|
|
36
|
+
*.db
|
|
37
|
+
*.sqlite
|
|
38
|
+
*.sqlite3
|
|
39
|
+
*.log
|
|
40
|
+
|
|
41
|
+
# Environment variables & secrets
|
|
42
|
+
.env
|
|
43
|
+
.env.*
|
|
44
|
+
!.env.example
|
|
45
|
+
|
|
46
|
+
# OS generated files
|
|
47
|
+
.DS_Store
|
|
48
|
+
Thumbs.db
|
|
49
|
+
Desktop.ini
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# RADUI Architecture Specification (Version 0.9.0)
|
|
2
|
+
|
|
3
|
+
RADUI is an open-source, Python-first frontend application framework designed for AI/ML/agents, analytics dashboards, and full-stack software.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Architecture Flow
|
|
8
|
+
|
|
9
|
+
The architecture follows a strict 5-stage unidirectional execution lifecycle with SWR query caching, distributed multi-worker backends, and persistent layouts:
|
|
10
|
+
|
|
11
|
+
```mermaid
|
|
12
|
+
flowchart TD
|
|
13
|
+
S1["<b>1. User interacts</b><br/>Button, form, input or navigation"]
|
|
14
|
+
S2["<b>2. Command dispatcher</b><br/>Validate, authorize, deduplicate"]
|
|
15
|
+
S3["<b>3. Application runtime</b><br/>Resolve session and state references"]
|
|
16
|
+
|
|
17
|
+
subgraph Execution ["Execution Pathways"]
|
|
18
|
+
direction LR
|
|
19
|
+
S3A["<b>State update</b><br/>Derived values and invalidations"]
|
|
20
|
+
S3B["<b>Job submission</b><br/>External or local executor"]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
S4["<b>4. Event journal</b><br/>Ordered events, revisions, trace references"]
|
|
24
|
+
S5["<b>5. Renderer and browser</b><br/>HTML fragments, state updates and progress"]
|
|
25
|
+
|
|
26
|
+
S1 --> S2
|
|
27
|
+
S2 --> S3
|
|
28
|
+
S3 --> S3A
|
|
29
|
+
S3 --> S3B
|
|
30
|
+
S3A --> S4
|
|
31
|
+
S3B --> S4
|
|
32
|
+
S4 --> S5
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Detailed Lifecycle Stages
|
|
38
|
+
|
|
39
|
+
### 1. User Interacts
|
|
40
|
+
- **Inputs & Controls**: Form fields, text inputs, textareas, selects, switches, radio groups, and chat inputs.
|
|
41
|
+
- **Triggers**: Buttons, action card approval/rejection triggers, and navigation links.
|
|
42
|
+
- **Transport**: Standard form submissions or asynchronous AJAX `fetch()` calls carrying signed `_csrf` tokens, `_gx_action_id` idempotency keys, and `_gx_view_id` route references.
|
|
43
|
+
|
|
44
|
+
### 2. Command Dispatcher
|
|
45
|
+
- **Validation**: Enforces strict payload bounds (`max_form_bytes`), character sets, and content types (`application/x-www-form-urlencoded`).
|
|
46
|
+
- **Authorization & Security**: Validates constant-time CSRF tokens (`secrets.compare_digest`), checks origin headers against base URLs, and blocks cross-site request forgery (`Sec-Fetch-Site`).
|
|
47
|
+
- **Deduplication & Idempotency**: Atomic in-memory action reservations (`_reserve_action`) prevent duplicate executions of identical `_gx_action_id` requests while caching and replaying identical responses.
|
|
48
|
+
|
|
49
|
+
### 3. Application Runtime
|
|
50
|
+
- **Identity Resolution**: Resolves signed browser session identity (`SessionMiddleware`) and optional user identification hooks (`user_id_resolver`).
|
|
51
|
+
- **Context Binding**: Allocates an isolated `StateContext` identifying the active session, user, and view scope.
|
|
52
|
+
- **Execution Dispatch**: Invokes registered Python async/sync command handlers with an injected `CommandContext`.
|
|
53
|
+
|
|
54
|
+
#### Pathway A: State Update
|
|
55
|
+
- Writes to typed `StateRef` references across four isolated scopes:
|
|
56
|
+
- `view`: Scoped to `(session_id, view_id)`.
|
|
57
|
+
- `session`: Scoped to `session_id`.
|
|
58
|
+
- `user`: Shared across sessions of an authenticated `user_id`.
|
|
59
|
+
- `app`: Global singleton process-wide state.
|
|
60
|
+
- Computes derived values, increments revisions, and calculates surgical component dependency invalidations.
|
|
61
|
+
|
|
62
|
+
#### Pathway B: Job Submission
|
|
63
|
+
- Asynchronously schedules background long-running workloads (`@app.job`) through the pluggable `JobBackend` (`LocalJobBackend` default).
|
|
64
|
+
- Enforces active concurrency capacity limits, cancellation guards, and progress event publication.
|
|
65
|
+
|
|
66
|
+
### 4. Event Journal
|
|
67
|
+
- **Ordered Events**: Ordered SSE journal publishing granular `invalidate` and `reset` events tagged with monotonic sequence numbers.
|
|
68
|
+
- **Revisions & Replay**: Maintains bounded in-memory event buffers to allow seamless client reconnection with `Last-Event-ID` or `since` parameters.
|
|
69
|
+
- **Trace References**: Telemetry captured by the `TraceCollector` recording latency, state diffs, command invocations, job progress, and errors.
|
|
70
|
+
|
|
71
|
+
### 5. Renderer and Browser
|
|
72
|
+
- **Surgical HTML Patches**: Server-side `HTMLRenderer` renders targeted HTML fragments for only invalidated components.
|
|
73
|
+
- **Progressive Delivery**: Browser applies DOM updates without full-page refreshes.
|
|
74
|
+
- **Native Motion Engine (`RADUI.motion`)**:
|
|
75
|
+
- **FLIP Layout Interpolation**: Intercepts `applyPatches` and smoothly transitions DOM replacements using WAAPI.
|
|
76
|
+
- **Spring Physics Solver**: Analytical damped harmonic oscillator driving 120fps hardware-accelerated animations (`transform`, `opacity`).
|
|
77
|
+
- **Number Tweening**: Smooth animated number counting on metric updates (`animate_number=True`).
|
|
78
|
+
- **Micro-interactions**: Declarative hover elevation and tactile tap depression.
|
|
79
|
+
- **View Transitions**: Integrated with browser native `document.startViewTransition`.
|
|
80
|
+
- **Accessibility**: Automatic enforcement of `prefers-reduced-motion`.
|
|
81
|
+
- **Client Script**: Lightweight vanilla client (`/_gx/client.js`) manages EventSource reconnects, form dispatching, job cancellation, optimistic rollbacks, and developer inspector drawer inspection.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Enterprise & Resilience Extensions (0.6)
|
|
86
|
+
|
|
87
|
+
### 1. SQLite WAL Job Backend (`SQLiteJobBackend`)
|
|
88
|
+
- Durable, file-backed job persistence using standard library `sqlite3` with `PRAGMA journal_mode=WAL;`.
|
|
89
|
+
- Recovers safely from server crashes and process restarts without losing job logs, progress, or returned result payloads.
|
|
90
|
+
|
|
91
|
+
### 2. Built-in Auth & Role-Based Access Control (RBAC)
|
|
92
|
+
- Role-based decorators: `@app.command(require_auth=True)`, `@app.command(require_role="admin")`, `@app.require_auth`, `@app.require_role(...)`.
|
|
93
|
+
- First-class `User` and `RBACPolicy` models with inherited permissions and contextual guards.
|
|
94
|
+
|
|
95
|
+
### 3. Optimistic UI Updates & Automatic Rollback
|
|
96
|
+
- Forms and triggers marked with `optimistic=True` apply instantaneous local state while awaiting network resolution.
|
|
97
|
+
- Automatically reverts to snapshot on network failure or server rejection.
|
|
98
|
+
|
|
99
|
+
### 4. Scoped GenerativeSlot Mutations
|
|
100
|
+
- Dedicated sub-renderers and targeted slot patching for streaming AI responses without re-rendering parent tree nodes.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Complete Frontend & Enterprise Architecture (0.7.0 Final)
|
|
105
|
+
|
|
106
|
+
### 1. Global Command Palette (`Ctrl+K`)
|
|
107
|
+
- Native modal dialog with fuzzy keyboard search filtering, arrow navigation, and instant command/page triggers.
|
|
108
|
+
- Provides immediate keyboard accessibility for developers and enterprise operators.
|
|
109
|
+
|
|
110
|
+
### 2. Design System & Theming Engine (`Theme`)
|
|
111
|
+
- Token-based theming architecture compiling declarative palettes (`primary`, `surface`, `bg`, `text`, `radius`) directly to CSS custom properties.
|
|
112
|
+
- Dynamic runtime theme switching via `ThemeToggle` component with client-side event dispatching and `localStorage` persistence.
|
|
113
|
+
|
|
114
|
+
### 3. Responsive Breakpoint Layout Engine
|
|
115
|
+
- Declarative column dictionaries (`columns={"sm": 1, "md": 2, "lg": 4}`) compiled into responsive CSS custom properties (`--gx-cols-{bp}`).
|
|
116
|
+
- Zero JavaScript overhead on resize; handled directly by modern browser CSS grid media queries.
|
|
117
|
+
|
|
118
|
+
### 4. Reflection-Based Model Forms (`form_from_model`)
|
|
119
|
+
- Introspects Pydantic model schemas and automatically synthesizes fully-typed RADUI Forms.
|
|
120
|
+
- Auto-generates type-safe form controls (`Checkbox` for bools, `Select` for Enums, `Textarea` for long text, number inputs for numeric fields).
|
|
121
|
+
|
|
122
|
+
### 5. High-Performance Virtualization (`VirtualList`)
|
|
123
|
+
- Windowed viewport slicing algorithm maintaining steady 60fps scrolling over 50,000+ items.
|
|
124
|
+
- Minimal DOM node footprint using pure CSS translateY positioning inside sized spacer elements.
|
|
125
|
+
|
|
126
|
+
### 6. Declarative Testing Harness (`TestHarness`)
|
|
127
|
+
- In-memory headless test runner for rendering component trees, extracting pre-filled forms and CSRF tokens, and dispatching command interactions without spinning up real browsers.
|
|
128
|
+
|
|
129
|
+
### 7. Micro-Frontend Embedding (`/_gx/embed.js`)
|
|
130
|
+
- Universal `<RADUI-view>` Web Component wrapper allowing RADUI views to be seamlessly mounted within React, Angular, Vue, or legacy enterprise web portals.
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Distributed Hardening & Advanced Routing (0.8.0 Final)
|
|
135
|
+
|
|
136
|
+
### 1. Dynamic Routing & Signature-Driven Path Injection
|
|
137
|
+
- Path parameter pattern matching (`/users/{user_id}`, `/orgs/{org}/repos/{repo}`).
|
|
138
|
+
- Auto-extracts URL path segments and injects them directly into typed Python page handler arguments.
|
|
139
|
+
- Route-level security guards: `@app.page("/admin", require_auth=True, require_role="admin")` blocking unauthenticated or unpermitted access with standard 401/403 responses.
|
|
140
|
+
|
|
141
|
+
### 2. Pluggable State Storage Architecture (`StateBackend`)
|
|
142
|
+
- Decouples reactive state management from process memory.
|
|
143
|
+
- `InMemoryStateBackend`: Ultra-low-latency in-memory dictionary for single-process local development and unit testing.
|
|
144
|
+
- `SQLiteStateBackend`: Durable file-backed ACID store running in SQLite WAL mode. Permits multiple Uvicorn workers and container restarts to read and write shared `user`, `session`, and `app` state without partition divergence.
|
|
145
|
+
|
|
146
|
+
### 3. Component-Level Error Boundaries (`ErrorBoundary`)
|
|
147
|
+
- Wraps arbitrary visual subtrees in an isolated execution sandbox.
|
|
148
|
+
- Intercepts render exceptions and displays localized error cards with customized failure messages and [Retry] buttons without crashing the overall view or dashboard.
|
|
149
|
+
|
|
150
|
+
### 4. Modal Focus Trap & Accessible Keyboard Management
|
|
151
|
+
- Traps keyboard `Tab` cycling strictly inside open modal dialogs to comply with WCAG 2.2 AA accessibility standards.
|
|
152
|
+
- Saves previously active element and restores focus upon modal dismissal (`Escape` or backdrop click).
|
|
153
|
+
|
|
154
|
+
### 5. Client Connection State & Offline Awareness
|
|
155
|
+
- Native browser `online`/`offline` listener and SSE EventSource state monitor.
|
|
156
|
+
- Automatically surfaces a non-intrusive floating connection banner (`.gx-connection-banner`) during network drops and dismisses it upon reconnection.
|
radui-1.0.0/CHANGELOG.md
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# RADUI Framework Changelog
|
|
2
|
+
|
|
3
|
+
## [0.9.0] - 2026-11-15
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- **68 Core Component Primitives (Component Expansion)**:
|
|
7
|
+
- Added 19 modern UI components exceeding the 60+ component target:
|
|
8
|
+
- `Toast` & `ToastContainer`: Real-time notification cards with auto-dismiss timers and stacked placement.
|
|
9
|
+
- `Tooltip`: Accessible hover & focus hint wrappers.
|
|
10
|
+
- `Popover`: Anchored floating panels with trigger button.
|
|
11
|
+
- `Accordion` & `AccordionItem`: Collapsible disclosure sections with smooth transitions.
|
|
12
|
+
- `Drawer`: Slide-out side panel modals (left, right, top, bottom).
|
|
13
|
+
- `Breadcrumb` & `BreadcrumbItem`: Accessible hierarchical navigation trails.
|
|
14
|
+
- `Pagination`: Page navigation buttons with current/total indicators.
|
|
15
|
+
- `ProgressBar`: Determinate and indeterminate progress bars with percentage text, striped patterns, and animated shimmer.
|
|
16
|
+
- `ProgressCircle`: SVG circular gauge with percentage indicator.
|
|
17
|
+
- `Avatar` & `AvatarGroup`: User profile pictures with initials fallback, status badges, and grouped overflow indicators (`+2`).
|
|
18
|
+
- `DatePicker`: Accessible date selector bound to reactive state.
|
|
19
|
+
- `TimePicker`: Accessible time selector bound to reactive state.
|
|
20
|
+
- `Slider`: Range slider input with live value preview label.
|
|
21
|
+
- `SplitPanel`: Resizable horizontal and vertical split panes with draggable separator handle.
|
|
22
|
+
- `DropdownMenu` & `DropdownMenuItem`: Action dropdowns with icons, shortcuts, and destructive styling.
|
|
23
|
+
- `Kbd`: Styled keyboard shortcut key badges.
|
|
24
|
+
- `Container`: Centered responsive max-width layout wrapper.
|
|
25
|
+
- `Stack`: Flexible vertical and horizontal spacing container.
|
|
26
|
+
- `Tag`: Dismissible and categorized feature tags/chips.
|
|
27
|
+
- **RADUI Data Engine (`RADUI.data`)**:
|
|
28
|
+
- `gx.query(key, fetch_fn, stale_time=60, retry=3)`: SWR query caching engine with concurrent request deduplication.
|
|
29
|
+
- `@gx.cached(ttl=60)`: Function decorator for server-side query caching.
|
|
30
|
+
- `gx.invalidate_query(key_or_prefix)`: Cache invalidation triggering instant client re-renders.
|
|
31
|
+
- `gx.paginate(items, page, page_size)`: Utility for dataset slicing and pagination metadata.
|
|
32
|
+
- `gx.download_button(...)`: Client-side file download trigger.
|
|
33
|
+
- **Persistent Nested Route Layouts (`@app.layout`)**:
|
|
34
|
+
- `@app.layout(path_prefix="/...")`: Hierarchical layout wrappers wrapping child page outlets (`outlet=page_root`) without duplicating navigation or shells across routes.
|
|
35
|
+
- **Distributed Production Providers**:
|
|
36
|
+
- `RedisStateBackend`: Redis-backed distributed state storage for multi-worker / multi-pod deployments.
|
|
37
|
+
- `PostgreSQLStateBackend`: Relational persistent state storage.
|
|
38
|
+
- `RedisJobBackend`: Distributed job backend with lease acquisition, heartbeats, and worker broadcast.
|
|
39
|
+
- **Toast Notifications & Real-Time Dispatch (`app.notify`)**:
|
|
40
|
+
- `app.notify(message, title, variant, duration)`: Publishes real-time toast notifications via SSE stream (`gx:toast`) rendered dynamically on the client.
|
|
41
|
+
- **Scroll Reveal Animations**:
|
|
42
|
+
- `[data-gx-reveal]` with `IntersectionObserver` triggering hardware-accelerated entry animations when elements enter viewport.
|
|
43
|
+
- **Offline Mutation Queue**:
|
|
44
|
+
- Automatic buffering of client form submissions and actions during network disconnections, with automatic replay on reconnect.
|
|
45
|
+
- **Internationalization (RTL)**:
|
|
46
|
+
- `Theme(direction="rtl")` generating `dir="rtl"` and logical CSS direction rules.
|
|
47
|
+
- **Automated A11y & Quality Auditor CLI**:
|
|
48
|
+
- `RADUI audit [app.py] --a11y`: Scans routes for heading hierarchies, form input labels, theme contrast, and ARIA live regions.
|
|
49
|
+
- **Static Site Generation (SSG)**:
|
|
50
|
+
- `RADUI export [app.py] --static`: Generates full standalone HTML document bundles ready for CDN deployment.
|
|
51
|
+
|
|
52
|
+
### Added
|
|
53
|
+
- **Dynamic Routing & Path Parameters**:
|
|
54
|
+
- Full path template matching: `@app.page("/users/{user_id}")` and `@app.page("/orgs/{org}/repos/{repo}")`.
|
|
55
|
+
- Type-safe signature introspection automatically extracting and injecting path parameters into page handlers.
|
|
56
|
+
- Route guards: `@app.page("/admin", require_auth=True, require_role="admin", require_permission="...")` blocking unauthorized access with standard 401/403 responses.
|
|
57
|
+
- **Pluggable Multi-Worker State Backend (`StateBackend`)**:
|
|
58
|
+
- `InMemoryStateBackend`: High-throughput, thread-safe in-memory store for single-process runtimes and tests.
|
|
59
|
+
- `SQLiteStateBackend`: Crash-resilient, multi-worker persistent state backend in SQLite WAL mode. Allows multiple Uvicorn workers and container restarts to share synchronized `user`, `session`, and `app` state.
|
|
60
|
+
- **Component-Level Error Boundary (`ErrorBoundary` / `gx.error_boundary`)**:
|
|
61
|
+
- Gracefully isolates individual component rendering errors without crashing the entire page or surrounding layout.
|
|
62
|
+
- Displays localized error banner with custom fallback message and instant [Retry] trigger.
|
|
63
|
+
- **Accessible Modal Focus Trap & ARIA Hardening**:
|
|
64
|
+
- Enhanced client-side modal lifecycle with automatic focus acquisition on open and focus restoration to the trigger element on close (`Escape` or backdrop click).
|
|
65
|
+
- Keyboard `Tab` focus trap preventing focus escape outside open dialogs.
|
|
66
|
+
- Injected `role="dialog"`, `aria-modal="true"`, and `aria-labelledby` semantics.
|
|
67
|
+
- **Offline Detection & Reconnection Status Banner**:
|
|
68
|
+
- Automatic browser `online` / `offline` event monitoring.
|
|
69
|
+
- Dedicated client status banner (`.gx-connection-banner`) alerting users to network disconnects and auto-dismissing upon SSE reconnection.
|
|
70
|
+
- **Registry & Catalog Alignment**:
|
|
71
|
+
- Synchronized component catalog dynamically introspected from `ComponentRegistry.builtins()` (44 registered built-in components).
|
|
72
|
+
|
|
73
|
+
## [0.7.0] - 2026-11-15
|
|
74
|
+
|
|
75
|
+
### Added
|
|
76
|
+
- **Global `Ctrl+K` Command Palette**:
|
|
77
|
+
- Built-in keyboard-driven command navigation palette with search filtering, arrow navigation, Enter trigger, and Esc close.
|
|
78
|
+
- Pre-wired shortcuts for navigation, page transitions, and theme toggling.
|
|
79
|
+
- **Responsive Layout Engine & Breakpoints**:
|
|
80
|
+
- `Grid` accepts responsive breakpoint mappings: `columns={"sm": 1, "md": 2, "lg": 4}`.
|
|
81
|
+
- Generates `--gx-cols-{bp}` responsive CSS variables paired with clean `@media` queries without inline JavaScript.
|
|
82
|
+
- **Native Design System & Theming (`RADUI.core.theme` / `gx.Theme`)**:
|
|
83
|
+
- First-class `Theme` engine with token serialization, CSS variable compilation, and runtime theme switching.
|
|
84
|
+
- Built-in theme presets: `Theme.dark()`, `Theme.indigo()`, `Theme.emerald()`, `Theme.zinc()`.
|
|
85
|
+
- `ThemeToggle` (`gx.theme_toggle`) component with client-side theme switching and `localStorage` persistence.
|
|
86
|
+
- **Universal UI State Primitives**:
|
|
87
|
+
- `Skeleton` (`gx.skeleton`): Shimmering placeholders (`@keyframes gx-shimmer`) with customizable shapes (`text`, `rect`, `circle`) and dimensions.
|
|
88
|
+
- `EmptyState` (`gx.empty_state`): First-class zero-data UI state with visual icon, heading, description, and call-to-action.
|
|
89
|
+
- **Form-from-Model Reflection (`form_from_model`)**:
|
|
90
|
+
- Automatic conversion of Pydantic models into typed RADUI forms.
|
|
91
|
+
- Inferred types: booleans $\to$ checkboxes, Enums $\to$ dropdown selects, ints/floats $\to$ number inputs, passwords $\to$ masked inputs, descriptions $\to$ textareas.
|
|
92
|
+
- Pre-populates bound `StateRef` references and defaults.
|
|
93
|
+
- **High-Performance Virtual List (`VirtualList` / `gx.virtual_list`)**:
|
|
94
|
+
- Windowed DOM rendering engine capable of scrolling 50,000+ items at 60fps.
|
|
95
|
+
- Dynamic scroll translation with sized spacer container and viewport clipping.
|
|
96
|
+
- **Drag-and-Drop File Upload (`FileUpload` / `gx.file_upload`)**:
|
|
97
|
+
- Client-side drag-and-drop dropzone with file type and size constraints, progress styling, and file list previews.
|
|
98
|
+
- **Declarative Testing Harness (`RADUI.testing.TestHarness`)**:
|
|
99
|
+
- Headless component and full-stack application testing harness.
|
|
100
|
+
- Form extraction (`extract_form`, `get_forms`), headless page rendering (`get_page`, `render`), command dispatching (`dispatch`), and DOM assertions.
|
|
101
|
+
- **Micro-Frontend Embed Endpoint (`/_gx/embed.js`)**:
|
|
102
|
+
- Lightweight Web Component `<RADUI-view>` for embedding RADUI views into external React, Vue, Angular, or standard HTML web apps.
|
|
103
|
+
- **Accessibility & A11y Polish**:
|
|
104
|
+
- Dedicated `aria-live="polite"` polite announcer region for screen-reader notifications during real-time SSE patch updates.
|
|
105
|
+
- System-wide `prefers-reduced-motion` compliance.
|
|
106
|
+
|
|
107
|
+
## [0.6.0] - 2026-11-14
|
|
108
|
+
|
|
109
|
+
### Added
|
|
110
|
+
- **Native Motion & Visual Interaction Engine (`RADUI.motion` / `gx.motion`)**:
|
|
111
|
+
- **Zero-Dependency WAAPI Driver**: Bundled analytical spring physics solver and Web Animations API executor with zero external CDN requirements.
|
|
112
|
+
- **Damped Harmonic Oscillator Physics**: Configurable `spring(stiffness, damping, mass)` generating hardware-accelerated 120fps motion curves.
|
|
113
|
+
- **FLIP Layout Interpolation**: Intercepts `applyPatches` and smoothly transitions DOM replacements using First, Last, Invert, Play algorithms.
|
|
114
|
+
- **Animated Number Tweening**: Seamless counter rolling for `MetricCard` value updates (`animate_number=True`).
|
|
115
|
+
- **Micro-Interactions**: Declarative pointer hover elevation (`hover=gx.motion.hover(...)`) and tactile tap depression (`tap=gx.motion.tap(...)`).
|
|
116
|
+
- **Staggered Container Cascades**: Cascaded delay animations for children in `Grid`, `Column`, and `TreeView` (`stagger_children=0.05`).
|
|
117
|
+
- **View Transitions API Integration**: Seamless page-level transitions via native `document.startViewTransition`.
|
|
118
|
+
- **Accessibility Compliance**: Built-in OS-level `prefers-reduced-motion` safety enforcement.
|
|
119
|
+
- **SQLite WAL Job Backend (`SQLiteJobBackend`)**:
|
|
120
|
+
- Durable, file-backed background task execution with multi-process query persistence.
|
|
121
|
+
- Automatic process-restart recovery marking interrupted jobs without data loss.
|
|
122
|
+
- **Built-in Auth & Role-Based Access Control (RBAC)**:
|
|
123
|
+
- `@app.command(require_auth=True)`, `@app.command(require_role="admin")`, `@app.require_auth`, `@app.require_role(...)`.
|
|
124
|
+
- First-class `User` and `RBACPolicy` models with inherited permissions.
|
|
125
|
+
- **Optimistic UI Signals & Rollback**:
|
|
126
|
+
- Instantaneous client-side feedback on form/action submission with automatic rollback on network failure or 4xx/5xx responses.
|
|
127
|
+
- **Scoped GenerativeSlot Mutations**:
|
|
128
|
+
- Isolated sub-rendering and incremental streaming updates for AI components without parent tree re-renders.
|
|
129
|
+
|
|
130
|
+
## [0.5.0] - 2026-11-14
|
|
131
|
+
|
|
132
|
+
### Added
|
|
133
|
+
- **Interactive Architecture Diagram & Flowchart Engine**:
|
|
134
|
+
- `Diagram`, `DiagramNode`, `DiagramEdge` models and factory helpers.
|
|
135
|
+
- Zero-dependency pure SVG rendering with smooth cubic bezier curves and directional arrow markers.
|
|
136
|
+
- Animated flowlines (`animated=True`), pulsing status beacons (`active`, `success`, `warning`, `danger`), and custom shapes (`pill`, `diamond`, `database`, `rounded`).
|
|
137
|
+
- Bi-directional node click triggers dispatching RADUI commands with structured payload.
|
|
138
|
+
- **Developer & Enterprise Component Suite**:
|
|
139
|
+
- `CodeBlock`: Monospace presentation with line numbers, copy-to-clipboard, and language badges.
|
|
140
|
+
- `TreeView` & `TreeNode`: Collapsible directory, AST, and component hierarchy trees with expand/collapse carets.
|
|
141
|
+
- `DataGrid`: Advanced client-side searchable, sortable, and paginated data table.
|
|
142
|
+
- `GenerativeSlot`: Container slot for dynamic agent-generated or runtime-swapped UI components.
|
|
143
|
+
- **CLI Runner & Library Distribution (`radui`)**:
|
|
144
|
+
- `RADUI run <app.py> --port 8000 --reload` for running any RADUI app on a specified port.
|
|
145
|
+
- `RADUI info` displaying system information and component registry stats.
|
|
146
|
+
- `RADUI new <name>` scaffolding new RADUI applications.
|
|
147
|
+
- `[project.scripts]` registration in `pyproject.toml` and `python -m RADUI` support.
|
|
148
|
+
- **Expanded Component Catalog**:
|
|
149
|
+
- Layout & Containers: `Grid`, `Badge`, `Callout`, `Spacer`, `Tabs`, `TabItem`, `Modal`.
|
|
150
|
+
- Advanced Form Controls: `Textarea`, `Select`, `Switch`, `RadioGroup`.
|
|
151
|
+
- Analytics & Data: `MetricCard`, `Table`, `Plot` (with zero-dependency pure SVG bar and line rendering).
|
|
152
|
+
- AI & Agent Native: `ChatView`, `ChatMessage`, `ChatInput`, `StreamingText`, `ActionCard`, `StepTimeline`, `DynamicCard`.
|
|
153
|
+
- **Runtime Inspector & Telemetry**:
|
|
154
|
+
- `TraceCollector` recording circular telemetry logs for `render`, `state`, `command`, `job`, and `error`.
|
|
155
|
+
- Built-in developer endpoints: `/_gx/inspect`, `/_gx/inspect/traces`, `/_gx/inspect/stats`.
|
|
156
|
+
- Inline collapsible developer drawer (toggle with `Ctrl+Shift+I` or badge click).
|
|
157
|
+
- **AI & Agent Subsystem (`RADUI.ai`)**:
|
|
158
|
+
- `StreamingFenceParser` for real-time extraction of structured UI blocks from streaming LLM output.
|
|
159
|
+
- `a2ui_to_component` mapping external agent UI schemas to RADUI native component nodes.
|
|
160
|
+
- `AGUIEventJournal` for tracking agent execution steps and generating reactive timelines.
|
|
161
|
+
- `MCPToolRegistry` with human-in-the-loop validation support.
|
|
162
|
+
- **Modern Responsive Design System**:
|
|
163
|
+
- Comprehensive CSS variables with light and dark mode support.
|
|
164
|
+
- Interactive client-side tab switching, modal dialogs, and action card dispatchers.
|
|
165
|
+
- **Three Showcase Applications**:
|
|
166
|
+
- `examples/ai_agent_workbench`: Full-stack agent workbench with streaming chat, background RAG indexing, execution journals, and action approval cards.
|
|
167
|
+
- `examples/analytics_dashboard`: Multi-region executive BI cockpit with reactive filtering, metric cards, pure SVG charts, and OLAP refresh jobs.
|
|
168
|
+
- `examples/saas_admin`: Multi-route administrative governance platform with user management, tabbed settings, and backup tasks.
|
|
169
|
+
|
|
170
|
+
## [0.4.0] - Prior Milestone
|
|
171
|
+
- Background job backend, progress tracking, cancellation endpoints, and `JobPanel` component.
|
|
172
|
+
|
|
173
|
+
## [0.3.0] - Prior Milestone
|
|
174
|
+
- Interactive forms, commands, CSRF protection, idempotency cache, and SSE event streaming.
|
|
175
|
+
|
|
176
|
+
## [0.2.0] - Prior Milestone
|
|
177
|
+
- Multi-scoped reactive state (`view`, `session`, `user`, `app`) and fine-grained dependency tracking.
|
|
178
|
+
|
|
179
|
+
## [0.1.0] - Prior Milestone
|
|
180
|
+
- Initial Application IR and HTML renderer.
|
radui-1.0.0/Dockerfile
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Production Dockerfile for RADUI v1.0.0 Applications
|
|
2
|
+
FROM python:3.12-slim AS builder
|
|
3
|
+
|
|
4
|
+
WORKDIR /build
|
|
5
|
+
|
|
6
|
+
# Install build tools and compile dependencies
|
|
7
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
8
|
+
gcc \
|
|
9
|
+
libpq-dev \
|
|
10
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
11
|
+
|
|
12
|
+
COPY pyproject.toml README.md ./
|
|
13
|
+
COPY RADUI ./RADUI
|
|
14
|
+
|
|
15
|
+
RUN pip install --no-cache-dir --upgrade pip && \
|
|
16
|
+
pip install --no-cache-dir hatchling && \
|
|
17
|
+
pip install --no-cache-dir ".[server,postgres,redis]"
|
|
18
|
+
|
|
19
|
+
# Runtime stage
|
|
20
|
+
FROM python:3.12-slim AS runner
|
|
21
|
+
|
|
22
|
+
WORKDIR /app
|
|
23
|
+
|
|
24
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
25
|
+
libpq5 \
|
|
26
|
+
curl \
|
|
27
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
28
|
+
|
|
29
|
+
# Create unprivileged application user
|
|
30
|
+
RUN groupadd -r RADUI && useradd -r -g RADUI -d /app -s /sbin/nologin appuser
|
|
31
|
+
|
|
32
|
+
# Copy installed packages from builder
|
|
33
|
+
COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages
|
|
34
|
+
COPY --from=builder /usr/local/bin /usr/local/bin
|
|
35
|
+
|
|
36
|
+
COPY . /app
|
|
37
|
+
RUN chown -R appuser:RADUI /app
|
|
38
|
+
|
|
39
|
+
USER appuser
|
|
40
|
+
|
|
41
|
+
ENV PYTHONUNBUFFERED=1 \
|
|
42
|
+
PORT=3000 \
|
|
43
|
+
HOST=0.0.0.0
|
|
44
|
+
|
|
45
|
+
EXPOSE 3000
|
|
46
|
+
|
|
47
|
+
HEALTHCHECK --interval=15s --timeout=3s --start-period=5s --retries=3 \
|
|
48
|
+
CMD curl -f http://localhost:3000/_gx/health || exit 1
|
|
49
|
+
|
|
50
|
+
CMD ["python", "-m", "RADUI.cli", "serve", "--port", "3000", "--host", "0.0.0.0"]
|