nexora-py 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.
- nexora_py-1.0.0/LICENSE +21 -0
- nexora_py-1.0.0/PKG-INFO +218 -0
- nexora_py-1.0.0/README.md +174 -0
- nexora_py-1.0.0/pyproject.toml +52 -0
- nexora_py-1.0.0/setup.cfg +4 -0
- nexora_py-1.0.0/src/nexora/__init__.py +21 -0
- nexora_py-1.0.0/src/nexora/_version.py +1 -0
- nexora_py-1.0.0/src/nexora/adaptive/__init__.py +24 -0
- nexora_py-1.0.0/src/nexora/adaptive/engine.py +323 -0
- nexora_py-1.0.0/src/nexora/adaptive/models.py +68 -0
- nexora_py-1.0.0/src/nexora/adaptive/plugin.py +302 -0
- nexora_py-1.0.0/src/nexora/agentbox/__init__.py +43 -0
- nexora_py-1.0.0/src/nexora/agentbox/engine.py +101 -0
- nexora_py-1.0.0/src/nexora/agentbox/models.py +96 -0
- nexora_py-1.0.0/src/nexora/agentbox/plugin.py +173 -0
- nexora_py-1.0.0/src/nexora/agentbox/sandbox.py +204 -0
- nexora_py-1.0.0/src/nexora/app.py +216 -0
- nexora_py-1.0.0/src/nexora/cli/__init__.py +3 -0
- nexora_py-1.0.0/src/nexora/cli/main.py +102 -0
- nexora_py-1.0.0/src/nexora/config.py +72 -0
- nexora_py-1.0.0/src/nexora/events/__init__.py +3 -0
- nexora_py-1.0.0/src/nexora/events/bus.py +114 -0
- nexora_py-1.0.0/src/nexora/ghost/__init__.py +21 -0
- nexora_py-1.0.0/src/nexora/ghost/plugin.py +712 -0
- nexora_py-1.0.0/src/nexora/ghost/records.py +49 -0
- nexora_py-1.0.0/src/nexora/memory/__init__.py +20 -0
- nexora_py-1.0.0/src/nexora/memory/models.py +40 -0
- nexora_py-1.0.0/src/nexora/memory/plugin.py +164 -0
- nexora_py-1.0.0/src/nexora/memory/store.py +208 -0
- nexora_py-1.0.0/src/nexora/plugins/__init__.py +10 -0
- nexora_py-1.0.0/src/nexora/plugins/base.py +60 -0
- nexora_py-1.0.0/src/nexora/plugins/registry.py +61 -0
- nexora_py-1.0.0/src/nexora/py.typed +0 -0
- nexora_py-1.0.0/src/nexora/runtime/__init__.py +3 -0
- nexora_py-1.0.0/src/nexora/runtime/core.py +56 -0
- nexora_py-1.0.0/src/nexora/security/__init__.py +11 -0
- nexora_py-1.0.0/src/nexora/security/permissions.py +65 -0
- nexora_py-1.0.0/src/nexora/security/redact.py +54 -0
- nexora_py-1.0.0/src/nexora/shadow/__init__.py +30 -0
- nexora_py-1.0.0/src/nexora/shadow/engine.py +220 -0
- nexora_py-1.0.0/src/nexora/shadow/models.py +106 -0
- nexora_py-1.0.0/src/nexora/shadow/plugin.py +155 -0
- nexora_py-1.0.0/src/nexora/state/__init__.py +3 -0
- nexora_py-1.0.0/src/nexora/state/store.py +62 -0
- nexora_py-1.0.0/src/nexora/storage/__init__.py +3 -0
- nexora_py-1.0.0/src/nexora/storage/local.py +88 -0
- nexora_py-1.0.0/src/nexora/timeline/__init__.py +21 -0
- nexora_py-1.0.0/src/nexora/timeline/engine.py +178 -0
- nexora_py-1.0.0/src/nexora/timeline/models.py +52 -0
- nexora_py-1.0.0/src/nexora/timeline/plugin.py +219 -0
- nexora_py-1.0.0/src/nexora/vision/__init__.py +23 -0
- nexora_py-1.0.0/src/nexora/vision/engine.py +294 -0
- nexora_py-1.0.0/src/nexora/vision/models.py +101 -0
- nexora_py-1.0.0/src/nexora/vision/plugin.py +157 -0
- nexora_py-1.0.0/src/nexora/world/__init__.py +20 -0
- nexora_py-1.0.0/src/nexora/world/models.py +287 -0
- nexora_py-1.0.0/src/nexora/world/plugin.py +317 -0
- nexora_py-1.0.0/src/nexora/world/renderer.py +352 -0
- nexora_py-1.0.0/src/nexora/worldforge/__init__.py +25 -0
- nexora_py-1.0.0/src/nexora/worldforge/engine.py +189 -0
- nexora_py-1.0.0/src/nexora/worldforge/generator.py +200 -0
- nexora_py-1.0.0/src/nexora/worldforge/models.py +198 -0
- nexora_py-1.0.0/src/nexora/worldforge/plugin.py +259 -0
- nexora_py-1.0.0/src/nexora_py.egg-info/PKG-INFO +218 -0
- nexora_py-1.0.0/src/nexora_py.egg-info/SOURCES.txt +84 -0
- nexora_py-1.0.0/src/nexora_py.egg-info/dependency_links.txt +1 -0
- nexora_py-1.0.0/src/nexora_py.egg-info/entry_points.txt +2 -0
- nexora_py-1.0.0/src/nexora_py.egg-info/requires.txt +24 -0
- nexora_py-1.0.0/src/nexora_py.egg-info/top_level.txt +1 -0
- nexora_py-1.0.0/tests/test_adaptive.py +316 -0
- nexora_py-1.0.0/tests/test_agentbox.py +229 -0
- nexora_py-1.0.0/tests/test_app.py +120 -0
- nexora_py-1.0.0/tests/test_cli.py +36 -0
- nexora_py-1.0.0/tests/test_config.py +28 -0
- nexora_py-1.0.0/tests/test_events.py +60 -0
- nexora_py-1.0.0/tests/test_ghost.py +370 -0
- nexora_py-1.0.0/tests/test_interop.py +148 -0
- nexora_py-1.0.0/tests/test_memory.py +181 -0
- nexora_py-1.0.0/tests/test_plugins.py +14 -0
- nexora_py-1.0.0/tests/test_security.py +43 -0
- nexora_py-1.0.0/tests/test_shadow.py +242 -0
- nexora_py-1.0.0/tests/test_storage.py +43 -0
- nexora_py-1.0.0/tests/test_timeline.py +191 -0
- nexora_py-1.0.0/tests/test_vision.py +204 -0
- nexora_py-1.0.0/tests/test_world.py +464 -0
- nexora_py-1.0.0/tests/test_worldforge.py +202 -0
nexora_py-1.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Teja Priyan and NEXORA Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
nexora_py-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: nexora-py
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: A modular, local-first Python runtime: events, plugins, state, adaptive interfaces, memory, timeline rewind, observability, screen perception, procedural worlds, and sandboxed agents.
|
|
5
|
+
Author: NEXORA Contributors
|
|
6
|
+
Author-email: Teja Priyan <teja1616150@gmail.com>
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
Project-URL: Homepage, https://github.com/TejaPriyan/Nexora
|
|
9
|
+
Project-URL: Documentation, https://github.com/TejaPriyan/Nexora/tree/main/docs
|
|
10
|
+
Project-URL: Repository, https://github.com/TejaPriyan/Nexora.git
|
|
11
|
+
Project-URL: Issues, https://github.com/TejaPriyan/Nexora/issues
|
|
12
|
+
Keywords: runtime,events,plugins,local-first,privacy,agents,observability
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
22
|
+
Requires-Python: >=3.9
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Provides-Extra: ghost
|
|
26
|
+
Requires-Dist: rich>=13.0; extra == "ghost"
|
|
27
|
+
Provides-Extra: world
|
|
28
|
+
Requires-Dist: pygame>=2.5; extra == "world"
|
|
29
|
+
Provides-Extra: vision
|
|
30
|
+
Requires-Dist: pillow>=10.0; extra == "vision"
|
|
31
|
+
Requires-Dist: mss>=9.0; extra == "vision"
|
|
32
|
+
Provides-Extra: ai
|
|
33
|
+
Requires-Dist: numpy>=1.24; extra == "ai"
|
|
34
|
+
Provides-Extra: dev
|
|
35
|
+
Requires-Dist: pytest>=7.4; extra == "dev"
|
|
36
|
+
Requires-Dist: pytest-cov>=4.1; extra == "dev"
|
|
37
|
+
Provides-Extra: all
|
|
38
|
+
Requires-Dist: rich>=13.0; extra == "all"
|
|
39
|
+
Requires-Dist: pygame>=2.5; extra == "all"
|
|
40
|
+
Requires-Dist: pillow>=10.0; extra == "all"
|
|
41
|
+
Requires-Dist: mss>=9.0; extra == "all"
|
|
42
|
+
Requires-Dist: numpy>=1.24; extra == "all"
|
|
43
|
+
Dynamic: license-file
|
|
44
|
+
|
|
45
|
+
# NEXORA
|
|
46
|
+
|
|
47
|
+
**One Python ecosystem. Many capabilities. Completely modular. Local-first. Privacy-first. Open-source.**
|
|
48
|
+
|
|
49
|
+
NEXORA is a modular Python runtime. The long-term vision is to give ordinary
|
|
50
|
+
Python applications new capabilities -- automatic interfaces, visual
|
|
51
|
+
application/world representations, adaptive interfaces, persistent
|
|
52
|
+
application memory, state history and rewind, screen/computer perception,
|
|
53
|
+
live application observation, interactive world generation, and controlled
|
|
54
|
+
AI-agent execution -- all built on one small, shared runtime.
|
|
55
|
+
|
|
56
|
+
This is **not** meant to become another chatbot wrapper, terminal UI
|
|
57
|
+
library, game engine, vector database wrapper, agent wrapper, or
|
|
58
|
+
automation library on its own. Each capability is a module; the modules
|
|
59
|
+
share one event system, one state model, one security/privacy layer, and
|
|
60
|
+
one CLI.
|
|
61
|
+
|
|
62
|
+
> **Status: v1.0.0 (Complete Platform Release).** All 10 milestones are fully implemented and verified:
|
|
63
|
+
> NEXORA Core, **GhostUI** (Milestone 1), **CodeWorld** (Milestone 2), **MoodUI** (Milestone 3),
|
|
64
|
+
> **Recall** (Milestone 4), **TimeLoop** (Milestone 5), **Shadow** (Milestone 6),
|
|
65
|
+
> **ScreenMind** (Milestone 7), **WorldForge** (Milestone 8), **AgentBox** (Milestone 9),
|
|
66
|
+
> and **Module Interoperability** (Milestone 10) -- see [What's implemented today](#whats-implemented-today)
|
|
67
|
+
> and [docs/ROADMAP.md](docs/ROADMAP.md). Every module communicates strictly through the shared EventBus and State with zero cross-module imports.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Install
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
pip install nexora-py
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
The base install is dependency-free (Python stdlib only). Feature modules
|
|
78
|
+
pull in extras as needed, e.g.:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
pip install nexora-py[ghost] # rich (GhostUI automatic terminal interfaces)
|
|
82
|
+
pip install nexora-py[world] # pygame (CodeWorld 2D entity visualization)
|
|
83
|
+
pip install nexora-py[vision] # pillow + mss (ScreenMind screen perception)
|
|
84
|
+
pip install nexora-py[ai] # numpy, for numerical operations
|
|
85
|
+
pip install nexora-py[all] # everything above
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
*(Note: The package installs as `nexora-py`, and is imported in Python directly as `nexora`, e.g. `import nexora` or `from nexora import App`.)*
|
|
89
|
+
|
|
90
|
+
## Quickstart
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
from nexora import App
|
|
94
|
+
|
|
95
|
+
app = App()
|
|
96
|
+
|
|
97
|
+
@app.task
|
|
98
|
+
def process_data():
|
|
99
|
+
print("processing...")
|
|
100
|
+
|
|
101
|
+
app.run()
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Every task call automatically emits `task.started` / `task.completed` /
|
|
105
|
+
`task.failed` events on the app's event bus, which anything else in the
|
|
106
|
+
process can subscribe to:
|
|
107
|
+
|
|
108
|
+
```python
|
|
109
|
+
@app.bus.on("task.completed")
|
|
110
|
+
def on_done(event):
|
|
111
|
+
print(f"{event.payload['task']} took {event.payload['duration_seconds']:.3f}s")
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
See [`examples/`](examples/) for runnable demonstrations:
|
|
115
|
+
- **`showcase_all.py`**: **Master live showcase of all 10 milestones in action!**
|
|
116
|
+
- `ghost_ui_demo.py`: GhostUI automatic terminal UI dashboards, logs, and metrics
|
|
117
|
+
- `codeworld_demo.py`: CodeWorld 2D entity visualization and spatial topology
|
|
118
|
+
- `mood_ui_demo.py`: MoodUI interaction-aware adaptive interfaces and friction detection
|
|
119
|
+
- `recall_demo.py`: Recall persistent application memory with secret redaction
|
|
120
|
+
- `timeloop_demo.py`: TimeLoop runtime state checkpoints, rewind, and structural diff
|
|
121
|
+
- `shadow_demo.py`: Shadow live observability, high-resolution timing, and error tracking
|
|
122
|
+
- `vision_demo.py`: ScreenMind explicitly-permissioned screen perception
|
|
123
|
+
- `worldforge_demo.py`: WorldForge interactive procedural world generation
|
|
124
|
+
- `agentbox_demo.py`: AgentBox sandboxed autonomous agent execution
|
|
125
|
+
- `events_demo.py`: Using `EventBus` standalone
|
|
126
|
+
- `state_and_storage_demo.py`: Observable state + local persistence
|
|
127
|
+
|
|
128
|
+
## CLI
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
nexora version # print the installed version
|
|
132
|
+
nexora doctor # check which optional extras are installed
|
|
133
|
+
nexora init myapp # scaffold a new NEXORA app
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## What's implemented today
|
|
137
|
+
|
|
138
|
+
| Layer | Status | Module |
|
|
139
|
+
|---|---|---|
|
|
140
|
+
| Event system | ✅ implemented | `nexora.events` (`EventBus`, `Event`) |
|
|
141
|
+
| State | ✅ implemented | `nexora.state` (`State`) |
|
|
142
|
+
| Configuration | ✅ implemented | `nexora.config` (`Config`) |
|
|
143
|
+
| Security / privacy | ✅ implemented | `nexora.security` (`PermissionManager`, `SecretRedactor`) |
|
|
144
|
+
| Local storage | ✅ implemented | `nexora.storage` (`LocalStore`, SQLite-backed) |
|
|
145
|
+
| Plugin architecture | ✅ implemented | `nexora.plugins` (`Plugin`, feature registry) |
|
|
146
|
+
| App / tasks | ✅ implemented | `nexora.App` |
|
|
147
|
+
| CLI | ✅ implemented | `nexora` command (`version`, `doctor`, `init`) |
|
|
148
|
+
| GhostUI | ✅ implemented | `nexora.ghost` (`GhostPlugin`, `GhostUI`, terminal interfaces via `rich`) |
|
|
149
|
+
| CodeWorld | ✅ implemented | `nexora.world` (`WorldPlugin`, `CodeWorld`, 2D entity visualization via `pygame`) |
|
|
150
|
+
| MoodUI (adaptive) | ✅ implemented | `nexora.adaptive` (`AdaptivePlugin`, `MoodUI`, interaction-aware states) |
|
|
151
|
+
| Recall (memory) | ✅ implemented | `nexora.memory` (`MemoryPlugin`, `Recall`, structured memory via `LocalStore`) |
|
|
152
|
+
| TimeLoop (timeline) | ✅ implemented | `nexora.timeline` (`TimelinePlugin`, `TimeLoop`, state checkpoint & rewind) |
|
|
153
|
+
| Shadow (observability) | ✅ implemented | `nexora.shadow` (`ShadowPlugin`, `Shadow`, genuine execution timing & errors) |
|
|
154
|
+
| ScreenMind (vision) | ✅ implemented | `nexora.vision` (`VisionPlugin`, `ScreenMind`, explicitly-permissioned screen perception) |
|
|
155
|
+
| WorldForge | ✅ implemented | `nexora.worldforge` (`WorldForgePlugin`, `WorldForge`, procedural interactive worlds) |
|
|
156
|
+
| AgentBox | ✅ implemented | `nexora.agentbox` (`AgentBoxPlugin`, `AgentBox`, sandboxed execution for autonomous agents) |
|
|
157
|
+
|
|
158
|
+
### Modular Feature Activation
|
|
159
|
+
|
|
160
|
+
Every feature is strictly optional and isolated. You activate only the modules your application needs:
|
|
161
|
+
|
|
162
|
+
```python
|
|
163
|
+
from nexora import App
|
|
164
|
+
|
|
165
|
+
# Opt in to only the features you want:
|
|
166
|
+
app = App(features=["ghost", "memory", "shadow"])
|
|
167
|
+
|
|
168
|
+
# Access feature APIs directly on the app instance:
|
|
169
|
+
app.memory.remember("server_config", {"port": 8080})
|
|
170
|
+
app.ghost.log("App initialized with memory & shadow observability.")
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
If an app requests a planned or unregistered feature that is not available, NEXORA raises a clear `NotImplementedError` rather than silently failing:
|
|
174
|
+
|
|
175
|
+
```python
|
|
176
|
+
app = App(features=["unbuilt_custom_plugin"])
|
|
177
|
+
app.run()
|
|
178
|
+
# NotImplementedError: NEXORA feature 'unbuilt_custom_plugin' is not registered...
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
See [docs/ROADMAP.md](docs/ROADMAP.md) for the complete roadmap and
|
|
182
|
+
[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for how the layers fit
|
|
183
|
+
together.
|
|
184
|
+
|
|
185
|
+
## Privacy principles
|
|
186
|
+
|
|
187
|
+
NEXORA is local-first by default:
|
|
188
|
+
|
|
189
|
+
- `Config.telemetry` and `Config.cloud_sync` default to `False`.
|
|
190
|
+
- `nexora.security.PermissionManager` grants nothing by default -- every
|
|
191
|
+
privacy-sensitive capability future modules add (screen capture, agent
|
|
192
|
+
file/system access, etc.) must be explicitly granted per scope, and
|
|
193
|
+
every grant/revoke is recorded in an in-process audit trail.
|
|
194
|
+
- `nexora.storage.LocalStore` is SQLite-backed, on-disk, and makes no
|
|
195
|
+
network calls.
|
|
196
|
+
- `nexora.security.SecretRedactor` exists so state/timeline snapshots
|
|
197
|
+
never blindly serialize obvious secret-shaped keys --
|
|
198
|
+
this is a best-effort heuristic, not a guarantee, and callers should
|
|
199
|
+
always add known-sensitive fields explicitly.
|
|
200
|
+
|
|
201
|
+
See [SECURITY.md](SECURITY.md) for the full policy and responsible
|
|
202
|
+
disclosure process.
|
|
203
|
+
|
|
204
|
+
## Development
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
git clone https://github.com/TejaPriyan/Nexora.git
|
|
208
|
+
cd Nexora
|
|
209
|
+
pip install -e ".[dev]"
|
|
210
|
+
pytest
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for how modules are added
|
|
214
|
+
incrementally.
|
|
215
|
+
|
|
216
|
+
## License
|
|
217
|
+
|
|
218
|
+
MIT -- see [LICENSE](LICENSE).
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# NEXORA
|
|
2
|
+
|
|
3
|
+
**One Python ecosystem. Many capabilities. Completely modular. Local-first. Privacy-first. Open-source.**
|
|
4
|
+
|
|
5
|
+
NEXORA is a modular Python runtime. The long-term vision is to give ordinary
|
|
6
|
+
Python applications new capabilities -- automatic interfaces, visual
|
|
7
|
+
application/world representations, adaptive interfaces, persistent
|
|
8
|
+
application memory, state history and rewind, screen/computer perception,
|
|
9
|
+
live application observation, interactive world generation, and controlled
|
|
10
|
+
AI-agent execution -- all built on one small, shared runtime.
|
|
11
|
+
|
|
12
|
+
This is **not** meant to become another chatbot wrapper, terminal UI
|
|
13
|
+
library, game engine, vector database wrapper, agent wrapper, or
|
|
14
|
+
automation library on its own. Each capability is a module; the modules
|
|
15
|
+
share one event system, one state model, one security/privacy layer, and
|
|
16
|
+
one CLI.
|
|
17
|
+
|
|
18
|
+
> **Status: v1.0.0 (Complete Platform Release).** All 10 milestones are fully implemented and verified:
|
|
19
|
+
> NEXORA Core, **GhostUI** (Milestone 1), **CodeWorld** (Milestone 2), **MoodUI** (Milestone 3),
|
|
20
|
+
> **Recall** (Milestone 4), **TimeLoop** (Milestone 5), **Shadow** (Milestone 6),
|
|
21
|
+
> **ScreenMind** (Milestone 7), **WorldForge** (Milestone 8), **AgentBox** (Milestone 9),
|
|
22
|
+
> and **Module Interoperability** (Milestone 10) -- see [What's implemented today](#whats-implemented-today)
|
|
23
|
+
> and [docs/ROADMAP.md](docs/ROADMAP.md). Every module communicates strictly through the shared EventBus and State with zero cross-module imports.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Install
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
pip install nexora-py
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The base install is dependency-free (Python stdlib only). Feature modules
|
|
34
|
+
pull in extras as needed, e.g.:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
pip install nexora-py[ghost] # rich (GhostUI automatic terminal interfaces)
|
|
38
|
+
pip install nexora-py[world] # pygame (CodeWorld 2D entity visualization)
|
|
39
|
+
pip install nexora-py[vision] # pillow + mss (ScreenMind screen perception)
|
|
40
|
+
pip install nexora-py[ai] # numpy, for numerical operations
|
|
41
|
+
pip install nexora-py[all] # everything above
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
*(Note: The package installs as `nexora-py`, and is imported in Python directly as `nexora`, e.g. `import nexora` or `from nexora import App`.)*
|
|
45
|
+
|
|
46
|
+
## Quickstart
|
|
47
|
+
|
|
48
|
+
```python
|
|
49
|
+
from nexora import App
|
|
50
|
+
|
|
51
|
+
app = App()
|
|
52
|
+
|
|
53
|
+
@app.task
|
|
54
|
+
def process_data():
|
|
55
|
+
print("processing...")
|
|
56
|
+
|
|
57
|
+
app.run()
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Every task call automatically emits `task.started` / `task.completed` /
|
|
61
|
+
`task.failed` events on the app's event bus, which anything else in the
|
|
62
|
+
process can subscribe to:
|
|
63
|
+
|
|
64
|
+
```python
|
|
65
|
+
@app.bus.on("task.completed")
|
|
66
|
+
def on_done(event):
|
|
67
|
+
print(f"{event.payload['task']} took {event.payload['duration_seconds']:.3f}s")
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
See [`examples/`](examples/) for runnable demonstrations:
|
|
71
|
+
- **`showcase_all.py`**: **Master live showcase of all 10 milestones in action!**
|
|
72
|
+
- `ghost_ui_demo.py`: GhostUI automatic terminal UI dashboards, logs, and metrics
|
|
73
|
+
- `codeworld_demo.py`: CodeWorld 2D entity visualization and spatial topology
|
|
74
|
+
- `mood_ui_demo.py`: MoodUI interaction-aware adaptive interfaces and friction detection
|
|
75
|
+
- `recall_demo.py`: Recall persistent application memory with secret redaction
|
|
76
|
+
- `timeloop_demo.py`: TimeLoop runtime state checkpoints, rewind, and structural diff
|
|
77
|
+
- `shadow_demo.py`: Shadow live observability, high-resolution timing, and error tracking
|
|
78
|
+
- `vision_demo.py`: ScreenMind explicitly-permissioned screen perception
|
|
79
|
+
- `worldforge_demo.py`: WorldForge interactive procedural world generation
|
|
80
|
+
- `agentbox_demo.py`: AgentBox sandboxed autonomous agent execution
|
|
81
|
+
- `events_demo.py`: Using `EventBus` standalone
|
|
82
|
+
- `state_and_storage_demo.py`: Observable state + local persistence
|
|
83
|
+
|
|
84
|
+
## CLI
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
nexora version # print the installed version
|
|
88
|
+
nexora doctor # check which optional extras are installed
|
|
89
|
+
nexora init myapp # scaffold a new NEXORA app
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## What's implemented today
|
|
93
|
+
|
|
94
|
+
| Layer | Status | Module |
|
|
95
|
+
|---|---|---|
|
|
96
|
+
| Event system | ✅ implemented | `nexora.events` (`EventBus`, `Event`) |
|
|
97
|
+
| State | ✅ implemented | `nexora.state` (`State`) |
|
|
98
|
+
| Configuration | ✅ implemented | `nexora.config` (`Config`) |
|
|
99
|
+
| Security / privacy | ✅ implemented | `nexora.security` (`PermissionManager`, `SecretRedactor`) |
|
|
100
|
+
| Local storage | ✅ implemented | `nexora.storage` (`LocalStore`, SQLite-backed) |
|
|
101
|
+
| Plugin architecture | ✅ implemented | `nexora.plugins` (`Plugin`, feature registry) |
|
|
102
|
+
| App / tasks | ✅ implemented | `nexora.App` |
|
|
103
|
+
| CLI | ✅ implemented | `nexora` command (`version`, `doctor`, `init`) |
|
|
104
|
+
| GhostUI | ✅ implemented | `nexora.ghost` (`GhostPlugin`, `GhostUI`, terminal interfaces via `rich`) |
|
|
105
|
+
| CodeWorld | ✅ implemented | `nexora.world` (`WorldPlugin`, `CodeWorld`, 2D entity visualization via `pygame`) |
|
|
106
|
+
| MoodUI (adaptive) | ✅ implemented | `nexora.adaptive` (`AdaptivePlugin`, `MoodUI`, interaction-aware states) |
|
|
107
|
+
| Recall (memory) | ✅ implemented | `nexora.memory` (`MemoryPlugin`, `Recall`, structured memory via `LocalStore`) |
|
|
108
|
+
| TimeLoop (timeline) | ✅ implemented | `nexora.timeline` (`TimelinePlugin`, `TimeLoop`, state checkpoint & rewind) |
|
|
109
|
+
| Shadow (observability) | ✅ implemented | `nexora.shadow` (`ShadowPlugin`, `Shadow`, genuine execution timing & errors) |
|
|
110
|
+
| ScreenMind (vision) | ✅ implemented | `nexora.vision` (`VisionPlugin`, `ScreenMind`, explicitly-permissioned screen perception) |
|
|
111
|
+
| WorldForge | ✅ implemented | `nexora.worldforge` (`WorldForgePlugin`, `WorldForge`, procedural interactive worlds) |
|
|
112
|
+
| AgentBox | ✅ implemented | `nexora.agentbox` (`AgentBoxPlugin`, `AgentBox`, sandboxed execution for autonomous agents) |
|
|
113
|
+
|
|
114
|
+
### Modular Feature Activation
|
|
115
|
+
|
|
116
|
+
Every feature is strictly optional and isolated. You activate only the modules your application needs:
|
|
117
|
+
|
|
118
|
+
```python
|
|
119
|
+
from nexora import App
|
|
120
|
+
|
|
121
|
+
# Opt in to only the features you want:
|
|
122
|
+
app = App(features=["ghost", "memory", "shadow"])
|
|
123
|
+
|
|
124
|
+
# Access feature APIs directly on the app instance:
|
|
125
|
+
app.memory.remember("server_config", {"port": 8080})
|
|
126
|
+
app.ghost.log("App initialized with memory & shadow observability.")
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
If an app requests a planned or unregistered feature that is not available, NEXORA raises a clear `NotImplementedError` rather than silently failing:
|
|
130
|
+
|
|
131
|
+
```python
|
|
132
|
+
app = App(features=["unbuilt_custom_plugin"])
|
|
133
|
+
app.run()
|
|
134
|
+
# NotImplementedError: NEXORA feature 'unbuilt_custom_plugin' is not registered...
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
See [docs/ROADMAP.md](docs/ROADMAP.md) for the complete roadmap and
|
|
138
|
+
[docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for how the layers fit
|
|
139
|
+
together.
|
|
140
|
+
|
|
141
|
+
## Privacy principles
|
|
142
|
+
|
|
143
|
+
NEXORA is local-first by default:
|
|
144
|
+
|
|
145
|
+
- `Config.telemetry` and `Config.cloud_sync` default to `False`.
|
|
146
|
+
- `nexora.security.PermissionManager` grants nothing by default -- every
|
|
147
|
+
privacy-sensitive capability future modules add (screen capture, agent
|
|
148
|
+
file/system access, etc.) must be explicitly granted per scope, and
|
|
149
|
+
every grant/revoke is recorded in an in-process audit trail.
|
|
150
|
+
- `nexora.storage.LocalStore` is SQLite-backed, on-disk, and makes no
|
|
151
|
+
network calls.
|
|
152
|
+
- `nexora.security.SecretRedactor` exists so state/timeline snapshots
|
|
153
|
+
never blindly serialize obvious secret-shaped keys --
|
|
154
|
+
this is a best-effort heuristic, not a guarantee, and callers should
|
|
155
|
+
always add known-sensitive fields explicitly.
|
|
156
|
+
|
|
157
|
+
See [SECURITY.md](SECURITY.md) for the full policy and responsible
|
|
158
|
+
disclosure process.
|
|
159
|
+
|
|
160
|
+
## Development
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
git clone https://github.com/TejaPriyan/Nexora.git
|
|
164
|
+
cd Nexora
|
|
165
|
+
pip install -e ".[dev]"
|
|
166
|
+
pytest
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for how modules are added
|
|
170
|
+
incrementally.
|
|
171
|
+
|
|
172
|
+
## License
|
|
173
|
+
|
|
174
|
+
MIT -- see [LICENSE](LICENSE).
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "nexora-py"
|
|
7
|
+
version = "1.0.0"
|
|
8
|
+
description = "A modular, local-first Python runtime: events, plugins, state, adaptive interfaces, memory, timeline rewind, observability, screen perception, procedural worlds, and sandboxed agents."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.9"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
authors = [{ name = "Teja Priyan", email = "teja1616150@gmail.com" }, { name = "NEXORA Contributors" }]
|
|
13
|
+
keywords = ["runtime", "events", "plugins", "local-first", "privacy", "agents", "observability"]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Development Status :: 5 - Production/Stable",
|
|
16
|
+
"Intended Audience :: Developers",
|
|
17
|
+
"Operating System :: OS Independent",
|
|
18
|
+
"Programming Language :: Python :: 3",
|
|
19
|
+
"Programming Language :: Python :: 3.9",
|
|
20
|
+
"Programming Language :: Python :: 3.10",
|
|
21
|
+
"Programming Language :: Python :: 3.11",
|
|
22
|
+
"Programming Language :: Python :: 3.12",
|
|
23
|
+
"Topic :: Software Development :: Libraries :: Application Frameworks",
|
|
24
|
+
]
|
|
25
|
+
# The base install is intentionally dependency-free (stdlib only).
|
|
26
|
+
dependencies = []
|
|
27
|
+
|
|
28
|
+
[project.optional-dependencies]
|
|
29
|
+
ghost = ["rich>=13.0"]
|
|
30
|
+
world = ["pygame>=2.5"]
|
|
31
|
+
vision = ["pillow>=10.0", "mss>=9.0"]
|
|
32
|
+
ai = ["numpy>=1.24"]
|
|
33
|
+
dev = ["pytest>=7.4", "pytest-cov>=4.1"]
|
|
34
|
+
all = ["rich>=13.0", "pygame>=2.5", "pillow>=10.0", "mss>=9.0", "numpy>=1.24"]
|
|
35
|
+
|
|
36
|
+
[project.scripts]
|
|
37
|
+
nexora = "nexora.cli.main:main"
|
|
38
|
+
|
|
39
|
+
[project.urls]
|
|
40
|
+
Homepage = "https://github.com/TejaPriyan/Nexora"
|
|
41
|
+
Documentation = "https://github.com/TejaPriyan/Nexora/tree/main/docs"
|
|
42
|
+
Repository = "https://github.com/TejaPriyan/Nexora.git"
|
|
43
|
+
Issues = "https://github.com/TejaPriyan/Nexora/issues"
|
|
44
|
+
|
|
45
|
+
[tool.setuptools.packages.find]
|
|
46
|
+
where = ["src"]
|
|
47
|
+
|
|
48
|
+
[tool.setuptools.package-data]
|
|
49
|
+
nexora = ["py.typed"]
|
|
50
|
+
|
|
51
|
+
[tool.pytest.ini_options]
|
|
52
|
+
testpaths = ["tests"]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from ._version import __version__
|
|
2
|
+
from .app import App
|
|
3
|
+
from .config import Config
|
|
4
|
+
from .events import Event, EventBus
|
|
5
|
+
from .runtime import Runtime
|
|
6
|
+
from .security import PermissionManager, SecretRedactor
|
|
7
|
+
from .state import State
|
|
8
|
+
from .storage import LocalStore
|
|
9
|
+
|
|
10
|
+
__all__ = [
|
|
11
|
+
"__version__",
|
|
12
|
+
"App",
|
|
13
|
+
"Config",
|
|
14
|
+
"Event",
|
|
15
|
+
"EventBus",
|
|
16
|
+
"Runtime",
|
|
17
|
+
"State",
|
|
18
|
+
"PermissionManager",
|
|
19
|
+
"SecretRedactor",
|
|
20
|
+
"LocalStore",
|
|
21
|
+
]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.0.0"
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"""MoodUI (adaptive interfaces) -- Milestone 3 of NEXORA.
|
|
2
|
+
|
|
3
|
+
Derives interaction-aware states (NORMAL, FAST, DIFFICULTY_HIGH, INACTIVE,
|
|
4
|
+
ERROR_HEAVY) purely from observable signals -- repeated/failed actions,
|
|
5
|
+
navigation loops, help requests, inactivity -- with explicit opt-in
|
|
6
|
+
and no hidden monitoring. Strictly avoids emotion-detection claims.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from .engine import AdaptiveEngine
|
|
10
|
+
from .models import AdaptiveConfig, InteractionSignal, InteractionState, StateTransition
|
|
11
|
+
from .plugin import AdaptivePlugin, MoodUI
|
|
12
|
+
|
|
13
|
+
STATUS = "implemented"
|
|
14
|
+
|
|
15
|
+
__all__ = [
|
|
16
|
+
"AdaptivePlugin",
|
|
17
|
+
"MoodUI",
|
|
18
|
+
"AdaptiveEngine",
|
|
19
|
+
"AdaptiveConfig",
|
|
20
|
+
"InteractionSignal",
|
|
21
|
+
"InteractionState",
|
|
22
|
+
"StateTransition",
|
|
23
|
+
"STATUS",
|
|
24
|
+
]
|