halyn 0.2.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.
- halyn-0.2.0/LICENSE +15 -0
- halyn-0.2.0/PKG-INFO +246 -0
- halyn-0.2.0/README.md +210 -0
- halyn-0.2.0/pyproject.toml +49 -0
- halyn-0.2.0/setup.cfg +4 -0
- halyn-0.2.0/src/halyn/__init__.py +7 -0
- halyn-0.2.0/src/halyn/__main__.py +4 -0
- halyn-0.2.0/src/halyn/audit.py +278 -0
- halyn-0.2.0/src/halyn/auth.py +88 -0
- halyn-0.2.0/src/halyn/autonomy.py +262 -0
- halyn-0.2.0/src/halyn/cli.py +208 -0
- halyn-0.2.0/src/halyn/config.py +135 -0
- halyn-0.2.0/src/halyn/consent.py +243 -0
- halyn-0.2.0/src/halyn/control_plane.py +354 -0
- halyn-0.2.0/src/halyn/discovery.py +323 -0
- halyn-0.2.0/src/halyn/drivers/__init__.py +0 -0
- halyn-0.2.0/src/halyn/drivers/browser.py +60 -0
- halyn-0.2.0/src/halyn/drivers/dds.py +156 -0
- halyn-0.2.0/src/halyn/drivers/docker.py +62 -0
- halyn-0.2.0/src/halyn/drivers/http_auto.py +259 -0
- halyn-0.2.0/src/halyn/drivers/mqtt.py +93 -0
- halyn-0.2.0/src/halyn/drivers/opcua.py +77 -0
- halyn-0.2.0/src/halyn/drivers/ros2.py +124 -0
- halyn-0.2.0/src/halyn/drivers/serial.py +226 -0
- halyn-0.2.0/src/halyn/drivers/socket_raw.py +153 -0
- halyn-0.2.0/src/halyn/drivers/ssh.py +131 -0
- halyn-0.2.0/src/halyn/drivers/unitree.py +103 -0
- halyn-0.2.0/src/halyn/drivers/websocket.py +175 -0
- halyn-0.2.0/src/halyn/engine.py +222 -0
- halyn-0.2.0/src/halyn/intent.py +240 -0
- halyn-0.2.0/src/halyn/llm.py +178 -0
- halyn-0.2.0/src/halyn/mcp.py +239 -0
- halyn-0.2.0/src/halyn/memory/__init__.py +0 -0
- halyn-0.2.0/src/halyn/memory/store.py +200 -0
- halyn-0.2.0/src/halyn/nrp_bridge.py +213 -0
- halyn-0.2.0/src/halyn/py.typed +0 -0
- halyn-0.2.0/src/halyn/sanitizer.py +120 -0
- halyn-0.2.0/src/halyn/server.py +292 -0
- halyn-0.2.0/src/halyn/types.py +116 -0
- halyn-0.2.0/src/halyn/watchdog.py +252 -0
- halyn-0.2.0/src/halyn.egg-info/PKG-INFO +246 -0
- halyn-0.2.0/src/halyn.egg-info/SOURCES.txt +45 -0
- halyn-0.2.0/src/halyn.egg-info/dependency_links.txt +1 -0
- halyn-0.2.0/src/halyn.egg-info/entry_points.txt +2 -0
- halyn-0.2.0/src/halyn.egg-info/requires.txt +20 -0
- halyn-0.2.0/src/halyn.egg-info/top_level.txt +1 -0
- halyn-0.2.0/tests/test_halyn.py +978 -0
halyn-0.2.0/LICENSE
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Elmadani SALKA
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files, to deal in the Software
|
|
7
|
+
without restriction, including without limitation the rights to use, copy,
|
|
8
|
+
modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
|
9
|
+
Software, and to permit persons to whom the Software is furnished to do so,
|
|
10
|
+
subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND.
|
halyn-0.2.0/PKG-INFO
ADDED
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: halyn
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Halyn — NRP control plane with domain-scoped authorization.
|
|
5
|
+
Author-email: Elmadani SALKA <Elmadani.SALKA@proton.me>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/ElmadaniS/halyn
|
|
8
|
+
Project-URL: Repository, https://github.com/ElmadaniS/halyn
|
|
9
|
+
Project-URL: Issues, https://github.com/ElmadaniS/halyn/issues
|
|
10
|
+
Keywords: ai,browser,robotics,iot,mcp,nrp,llm,infrastructure,devops
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
15
|
+
Classifier: Topic :: System :: Systems Administration
|
|
16
|
+
Requires-Python: >=3.10
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
License-File: LICENSE
|
|
19
|
+
Requires-Dist: nrp>=0.1.0
|
|
20
|
+
Requires-Dist: aiohttp>=3.9
|
|
21
|
+
Provides-Extra: enterprise
|
|
22
|
+
Requires-Dist: grpcio>=1.60; extra == "enterprise"
|
|
23
|
+
Requires-Dist: psycopg2-binary; extra == "enterprise"
|
|
24
|
+
Requires-Dist: redis; extra == "enterprise"
|
|
25
|
+
Provides-Extra: robotics
|
|
26
|
+
Requires-Dist: rclpy; extra == "robotics"
|
|
27
|
+
Requires-Dist: unitree-sdk2py; extra == "robotics"
|
|
28
|
+
Provides-Extra: iot
|
|
29
|
+
Requires-Dist: paho-mqtt; extra == "iot"
|
|
30
|
+
Provides-Extra: dev
|
|
31
|
+
Requires-Dist: pytest; extra == "dev"
|
|
32
|
+
Requires-Dist: pytest-asyncio; extra == "dev"
|
|
33
|
+
Requires-Dist: mypy; extra == "dev"
|
|
34
|
+
Requires-Dist: ruff; extra == "dev"
|
|
35
|
+
Dynamic: license-file
|
|
36
|
+
|
|
37
|
+
<div align="center">
|
|
38
|
+
|
|
39
|
+
<img src="logo.svg" width="80" alt="Halyn">
|
|
40
|
+
|
|
41
|
+
# Halyn
|
|
42
|
+
|
|
43
|
+
### NRP Control Plane
|
|
44
|
+
|
|
45
|
+
**Connect any device to any LLM through NRP.**
|
|
46
|
+
|
|
47
|
+
NRP control plane with domain-scoped authorization.
|
|
48
|
+
|
|
49
|
+
[](LICENSE)
|
|
50
|
+
[](https://python.org)
|
|
51
|
+
[]()
|
|
52
|
+
[](https://github.com/ElmadaniS/nrp)
|
|
53
|
+
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
you: "How's the factory?"
|
|
60
|
+
|
|
61
|
+
halyn: All 12 arms running. Arm-7 joint 3 is 12°C above normal.
|
|
62
|
+
Soil moisture in the north field dropped to 18%.
|
|
63
|
+
3 urgent emails. Hetzner invoice due tomorrow.
|
|
64
|
+
Want me to handle any of these?
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## What It Does
|
|
68
|
+
|
|
69
|
+
Halyn connects AI to:
|
|
70
|
+
|
|
71
|
+
| Domain | Examples |
|
|
72
|
+
|--------|----------|
|
|
73
|
+
| **Servers** | Deploy, monitor, fix, scale |
|
|
74
|
+
| **Robots** | Move, pick, navigate, patrol |
|
|
75
|
+
| **Sensors** | Temperature, humidity, soil, air |
|
|
76
|
+
| **APIs** | Stripe, GitHub, Slack — any REST/GraphQL |
|
|
77
|
+
| **Factories** | PLCs, SCADA, OPC-UA, Modbus |
|
|
78
|
+
| **Smart Home** | Lights, climate, security |
|
|
79
|
+
| **Vehicles** | Navigate, charge, maintain |
|
|
80
|
+
| **Drones** | Survey, photograph, deliver |
|
|
81
|
+
|
|
82
|
+
One protocol. One conversation. Everything.
|
|
83
|
+
|
|
84
|
+
## Quick Start
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
pip install halyn
|
|
88
|
+
|
|
89
|
+
halyn scan # discover your world
|
|
90
|
+
halyn connect # plug your LLM
|
|
91
|
+
halyn serve # start running
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Any LLM
|
|
95
|
+
|
|
96
|
+
```yaml
|
|
97
|
+
# halyn.yml
|
|
98
|
+
llm:
|
|
99
|
+
provider: claude # or: openai, ollama, huggingface, vllm
|
|
100
|
+
model: claude-sonnet-4-20250514
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Halyn doesn't lock you in. Claude today. Local Ollama tomorrow. Same nodes. Same drivers. Same safety.
|
|
104
|
+
|
|
105
|
+
## Human Always in Control
|
|
106
|
+
|
|
107
|
+
5 autonomy levels. Per domain. Per node. Per hour.
|
|
108
|
+
|
|
109
|
+
| Level | Name | Behavior |
|
|
110
|
+
|-------|------|----------|
|
|
111
|
+
| 0 | **Manual** | AI proposes. You approve every action. |
|
|
112
|
+
| 1 | **Supervised** | AI reads alone. Asks before acting. |
|
|
113
|
+
| 2 | **Guided** | Safe actions alone. Dangerous = confirm. |
|
|
114
|
+
| 3 | **Autonomous** | Does everything. You can interrupt anytime. |
|
|
115
|
+
| 4 | **Full Auto** | Handles routine. Reports daily. |
|
|
116
|
+
|
|
117
|
+
```yaml
|
|
118
|
+
# halyn.yml
|
|
119
|
+
domains:
|
|
120
|
+
physical:
|
|
121
|
+
level: 1 # supervised
|
|
122
|
+
nodes: [robot/*, drone/*]
|
|
123
|
+
confirm: [move, pick, deploy]
|
|
124
|
+
|
|
125
|
+
financial:
|
|
126
|
+
level: 0 # manual — confirm everything
|
|
127
|
+
nodes: [finance/*, bank/*]
|
|
128
|
+
blocked: [delete]
|
|
129
|
+
|
|
130
|
+
monitoring:
|
|
131
|
+
level: 4 # full auto
|
|
132
|
+
nodes: [sensor/*, monitor/*]
|
|
133
|
+
|
|
134
|
+
infrastructure:
|
|
135
|
+
level: 2 # guided
|
|
136
|
+
nodes: [server/*, cloud/*]
|
|
137
|
+
confirm: [restart, deploy, delete]
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Your banking requires approval for every action. Your sensors run on autopilot. Your servers auto-handle safe ops but confirm deploys. You set the rails once. The AI rides them.
|
|
141
|
+
|
|
142
|
+
## Security
|
|
143
|
+
|
|
144
|
+
Not optional. Not a feature. The foundation.
|
|
145
|
+
|
|
146
|
+
| Layer | What It Does |
|
|
147
|
+
|-------|-------------|
|
|
148
|
+
| **Auth** | API key with timing-safe HMAC |
|
|
149
|
+
| **Autonomy** | 5 levels per domain, rate limiting |
|
|
150
|
+
| **Shield** | Per-node safety rules from NRP |
|
|
151
|
+
| **Sanitizer** | Injection, traversal, overflow protection |
|
|
152
|
+
| **Audit** | SHA-256 hash-chain on disk, tamper-detectable |
|
|
153
|
+
| **Watchdog** | Health monitoring, failsafe on crash |
|
|
154
|
+
| **Redaction** | No internal paths or secrets in errors |
|
|
155
|
+
|
|
156
|
+
If Halyn crashes, nodes enter safe state automatically.
|
|
157
|
+
|
|
158
|
+
The audit trail is a hash chain. Tamper with one entry and the chain breaks. Every action records: who asked, which AI decided, what reasoning, what result, which domain policy authorized it.
|
|
159
|
+
|
|
160
|
+
## Architecture
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
Any LLM
|
|
164
|
+
│ MCP
|
|
165
|
+
▼
|
|
166
|
+
Halyn Control Plane
|
|
167
|
+
│ ┌─ Autonomy (5 levels)
|
|
168
|
+
│ ├─ Audit (SHA-256 chain)
|
|
169
|
+
│ ├─ Watchdog (failsafe)
|
|
170
|
+
│ ├─ Auth + Sanitizer
|
|
171
|
+
│ └─ Memory (SQLite + FTS5)
|
|
172
|
+
│
|
|
173
|
+
│ NRP (Node Reach Protocol)
|
|
174
|
+
│
|
|
175
|
+
├──→ SSH (servers)
|
|
176
|
+
├──→ Docker (containers)
|
|
177
|
+
├──→ Chrome CDP (browsers)
|
|
178
|
+
├──→ ROS2 (robots)
|
|
179
|
+
├──→ Unitree (humanoids)
|
|
180
|
+
├──→ MQTT (IoT sensors)
|
|
181
|
+
├──→ OPC-UA (industrial PLCs)
|
|
182
|
+
├──→ HTTP Auto (any API — auto-introspected)
|
|
183
|
+
└──→ Your driver (~100 lines)
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## HTTP Auto-Introspection
|
|
187
|
+
|
|
188
|
+
Point Halyn at any API. It reads the OpenAPI/GraphQL spec. Generates the manifest. Creates the tools. Automatically.
|
|
189
|
+
|
|
190
|
+
```yaml
|
|
191
|
+
nodes:
|
|
192
|
+
- id: nrp://cloud/api/stripe
|
|
193
|
+
driver: http_auto
|
|
194
|
+
base_url: https://api.stripe.com/v1
|
|
195
|
+
auth_token: Bearer ${STRIPE_API_KEY}
|
|
196
|
+
|
|
197
|
+
- id: nrp://cloud/api/github
|
|
198
|
+
driver: http_auto
|
|
199
|
+
base_url: https://api.github.com
|
|
200
|
+
auth_token: Bearer ${GITHUB_TOKEN}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Any API in the world becomes an NRP node. Zero custom code.
|
|
204
|
+
|
|
205
|
+
## Docker
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
docker compose up -d
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
```yaml
|
|
212
|
+
# docker-compose.yml included — non-root, healthcheck, resource limits
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## Stats
|
|
216
|
+
|
|
217
|
+
| Metric | Value |
|
|
218
|
+
|--------|-------|
|
|
219
|
+
| Source lines | ~5,200 |
|
|
220
|
+
| Drivers | 9 |
|
|
221
|
+
| LLM connectors | 5 (Claude, GPT, Ollama, HF, vLLM) |
|
|
222
|
+
| Tests | 48 passed, 0 failed |
|
|
223
|
+
| Dependencies | 1 (aiohttp) |
|
|
224
|
+
| Docker image | ~150MB |
|
|
225
|
+
| MCP native | Yes (Claude.ai direct) |
|
|
226
|
+
| Tested on | Real hardware across 3 countries |
|
|
227
|
+
|
|
228
|
+
## Built on NRP
|
|
229
|
+
|
|
230
|
+
Halyn implements the [Node Reach Protocol](https://github.com/ElmadaniS/nrp) — the universal standard for AI-to-world control. Any NRP-compatible device works with Halyn automatically.
|
|
231
|
+
|
|
232
|
+
## Contributing
|
|
233
|
+
|
|
234
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
235
|
+
|
|
236
|
+
## Security
|
|
237
|
+
|
|
238
|
+
See [SECURITY.md](SECURITY.md). Report vulnerabilities to Elmadani.SALKA@proton.me.
|
|
239
|
+
|
|
240
|
+
## License
|
|
241
|
+
|
|
242
|
+
MIT
|
|
243
|
+
|
|
244
|
+
## Author
|
|
245
|
+
|
|
246
|
+
**Elmadani SALKA**
|
halyn-0.2.0/README.md
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<img src="logo.svg" width="80" alt="Halyn">
|
|
4
|
+
|
|
5
|
+
# Halyn
|
|
6
|
+
|
|
7
|
+
### NRP Control Plane
|
|
8
|
+
|
|
9
|
+
**Connect any device to any LLM through NRP.**
|
|
10
|
+
|
|
11
|
+
NRP control plane with domain-scoped authorization.
|
|
12
|
+
|
|
13
|
+
[](LICENSE)
|
|
14
|
+
[](https://python.org)
|
|
15
|
+
[]()
|
|
16
|
+
[](https://github.com/ElmadaniS/nrp)
|
|
17
|
+
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
you: "How's the factory?"
|
|
24
|
+
|
|
25
|
+
halyn: All 12 arms running. Arm-7 joint 3 is 12°C above normal.
|
|
26
|
+
Soil moisture in the north field dropped to 18%.
|
|
27
|
+
3 urgent emails. Hetzner invoice due tomorrow.
|
|
28
|
+
Want me to handle any of these?
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## What It Does
|
|
32
|
+
|
|
33
|
+
Halyn connects AI to:
|
|
34
|
+
|
|
35
|
+
| Domain | Examples |
|
|
36
|
+
|--------|----------|
|
|
37
|
+
| **Servers** | Deploy, monitor, fix, scale |
|
|
38
|
+
| **Robots** | Move, pick, navigate, patrol |
|
|
39
|
+
| **Sensors** | Temperature, humidity, soil, air |
|
|
40
|
+
| **APIs** | Stripe, GitHub, Slack — any REST/GraphQL |
|
|
41
|
+
| **Factories** | PLCs, SCADA, OPC-UA, Modbus |
|
|
42
|
+
| **Smart Home** | Lights, climate, security |
|
|
43
|
+
| **Vehicles** | Navigate, charge, maintain |
|
|
44
|
+
| **Drones** | Survey, photograph, deliver |
|
|
45
|
+
|
|
46
|
+
One protocol. One conversation. Everything.
|
|
47
|
+
|
|
48
|
+
## Quick Start
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
pip install halyn
|
|
52
|
+
|
|
53
|
+
halyn scan # discover your world
|
|
54
|
+
halyn connect # plug your LLM
|
|
55
|
+
halyn serve # start running
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Any LLM
|
|
59
|
+
|
|
60
|
+
```yaml
|
|
61
|
+
# halyn.yml
|
|
62
|
+
llm:
|
|
63
|
+
provider: claude # or: openai, ollama, huggingface, vllm
|
|
64
|
+
model: claude-sonnet-4-20250514
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Halyn doesn't lock you in. Claude today. Local Ollama tomorrow. Same nodes. Same drivers. Same safety.
|
|
68
|
+
|
|
69
|
+
## Human Always in Control
|
|
70
|
+
|
|
71
|
+
5 autonomy levels. Per domain. Per node. Per hour.
|
|
72
|
+
|
|
73
|
+
| Level | Name | Behavior |
|
|
74
|
+
|-------|------|----------|
|
|
75
|
+
| 0 | **Manual** | AI proposes. You approve every action. |
|
|
76
|
+
| 1 | **Supervised** | AI reads alone. Asks before acting. |
|
|
77
|
+
| 2 | **Guided** | Safe actions alone. Dangerous = confirm. |
|
|
78
|
+
| 3 | **Autonomous** | Does everything. You can interrupt anytime. |
|
|
79
|
+
| 4 | **Full Auto** | Handles routine. Reports daily. |
|
|
80
|
+
|
|
81
|
+
```yaml
|
|
82
|
+
# halyn.yml
|
|
83
|
+
domains:
|
|
84
|
+
physical:
|
|
85
|
+
level: 1 # supervised
|
|
86
|
+
nodes: [robot/*, drone/*]
|
|
87
|
+
confirm: [move, pick, deploy]
|
|
88
|
+
|
|
89
|
+
financial:
|
|
90
|
+
level: 0 # manual — confirm everything
|
|
91
|
+
nodes: [finance/*, bank/*]
|
|
92
|
+
blocked: [delete]
|
|
93
|
+
|
|
94
|
+
monitoring:
|
|
95
|
+
level: 4 # full auto
|
|
96
|
+
nodes: [sensor/*, monitor/*]
|
|
97
|
+
|
|
98
|
+
infrastructure:
|
|
99
|
+
level: 2 # guided
|
|
100
|
+
nodes: [server/*, cloud/*]
|
|
101
|
+
confirm: [restart, deploy, delete]
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Your banking requires approval for every action. Your sensors run on autopilot. Your servers auto-handle safe ops but confirm deploys. You set the rails once. The AI rides them.
|
|
105
|
+
|
|
106
|
+
## Security
|
|
107
|
+
|
|
108
|
+
Not optional. Not a feature. The foundation.
|
|
109
|
+
|
|
110
|
+
| Layer | What It Does |
|
|
111
|
+
|-------|-------------|
|
|
112
|
+
| **Auth** | API key with timing-safe HMAC |
|
|
113
|
+
| **Autonomy** | 5 levels per domain, rate limiting |
|
|
114
|
+
| **Shield** | Per-node safety rules from NRP |
|
|
115
|
+
| **Sanitizer** | Injection, traversal, overflow protection |
|
|
116
|
+
| **Audit** | SHA-256 hash-chain on disk, tamper-detectable |
|
|
117
|
+
| **Watchdog** | Health monitoring, failsafe on crash |
|
|
118
|
+
| **Redaction** | No internal paths or secrets in errors |
|
|
119
|
+
|
|
120
|
+
If Halyn crashes, nodes enter safe state automatically.
|
|
121
|
+
|
|
122
|
+
The audit trail is a hash chain. Tamper with one entry and the chain breaks. Every action records: who asked, which AI decided, what reasoning, what result, which domain policy authorized it.
|
|
123
|
+
|
|
124
|
+
## Architecture
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
Any LLM
|
|
128
|
+
│ MCP
|
|
129
|
+
▼
|
|
130
|
+
Halyn Control Plane
|
|
131
|
+
│ ┌─ Autonomy (5 levels)
|
|
132
|
+
│ ├─ Audit (SHA-256 chain)
|
|
133
|
+
│ ├─ Watchdog (failsafe)
|
|
134
|
+
│ ├─ Auth + Sanitizer
|
|
135
|
+
│ └─ Memory (SQLite + FTS5)
|
|
136
|
+
│
|
|
137
|
+
│ NRP (Node Reach Protocol)
|
|
138
|
+
│
|
|
139
|
+
├──→ SSH (servers)
|
|
140
|
+
├──→ Docker (containers)
|
|
141
|
+
├──→ Chrome CDP (browsers)
|
|
142
|
+
├──→ ROS2 (robots)
|
|
143
|
+
├──→ Unitree (humanoids)
|
|
144
|
+
├──→ MQTT (IoT sensors)
|
|
145
|
+
├──→ OPC-UA (industrial PLCs)
|
|
146
|
+
├──→ HTTP Auto (any API — auto-introspected)
|
|
147
|
+
└──→ Your driver (~100 lines)
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## HTTP Auto-Introspection
|
|
151
|
+
|
|
152
|
+
Point Halyn at any API. It reads the OpenAPI/GraphQL spec. Generates the manifest. Creates the tools. Automatically.
|
|
153
|
+
|
|
154
|
+
```yaml
|
|
155
|
+
nodes:
|
|
156
|
+
- id: nrp://cloud/api/stripe
|
|
157
|
+
driver: http_auto
|
|
158
|
+
base_url: https://api.stripe.com/v1
|
|
159
|
+
auth_token: Bearer ${STRIPE_API_KEY}
|
|
160
|
+
|
|
161
|
+
- id: nrp://cloud/api/github
|
|
162
|
+
driver: http_auto
|
|
163
|
+
base_url: https://api.github.com
|
|
164
|
+
auth_token: Bearer ${GITHUB_TOKEN}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Any API in the world becomes an NRP node. Zero custom code.
|
|
168
|
+
|
|
169
|
+
## Docker
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
docker compose up -d
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
```yaml
|
|
176
|
+
# docker-compose.yml included — non-root, healthcheck, resource limits
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## Stats
|
|
180
|
+
|
|
181
|
+
| Metric | Value |
|
|
182
|
+
|--------|-------|
|
|
183
|
+
| Source lines | ~5,200 |
|
|
184
|
+
| Drivers | 9 |
|
|
185
|
+
| LLM connectors | 5 (Claude, GPT, Ollama, HF, vLLM) |
|
|
186
|
+
| Tests | 48 passed, 0 failed |
|
|
187
|
+
| Dependencies | 1 (aiohttp) |
|
|
188
|
+
| Docker image | ~150MB |
|
|
189
|
+
| MCP native | Yes (Claude.ai direct) |
|
|
190
|
+
| Tested on | Real hardware across 3 countries |
|
|
191
|
+
|
|
192
|
+
## Built on NRP
|
|
193
|
+
|
|
194
|
+
Halyn implements the [Node Reach Protocol](https://github.com/ElmadaniS/nrp) — the universal standard for AI-to-world control. Any NRP-compatible device works with Halyn automatically.
|
|
195
|
+
|
|
196
|
+
## Contributing
|
|
197
|
+
|
|
198
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
199
|
+
|
|
200
|
+
## Security
|
|
201
|
+
|
|
202
|
+
See [SECURITY.md](SECURITY.md). Report vulnerabilities to Elmadani.SALKA@proton.me.
|
|
203
|
+
|
|
204
|
+
## License
|
|
205
|
+
|
|
206
|
+
MIT
|
|
207
|
+
|
|
208
|
+
## Author
|
|
209
|
+
|
|
210
|
+
**Elmadani SALKA**
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "halyn"
|
|
3
|
+
version = "0.2.0"
|
|
4
|
+
description = "Halyn — NRP control plane with domain-scoped authorization."
|
|
5
|
+
requires-python = ">=3.10"
|
|
6
|
+
license = {text = "MIT"}
|
|
7
|
+
authors = [{name = "Elmadani SALKA", email = "Elmadani.SALKA@proton.me"}]
|
|
8
|
+
readme = "README.md"
|
|
9
|
+
keywords = ["ai", "browser", "robotics", "iot", "mcp", "nrp", "llm", "infrastructure", "devops"]
|
|
10
|
+
classifiers = [
|
|
11
|
+
"Development Status :: 3 - Alpha",
|
|
12
|
+
"License :: OSI Approved :: MIT License",
|
|
13
|
+
"Programming Language :: Python :: 3",
|
|
14
|
+
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
15
|
+
"Topic :: System :: Systems Administration",
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
dependencies = [
|
|
19
|
+
"nrp>=0.1.0",
|
|
20
|
+
"aiohttp>=3.9",
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
[project.optional-dependencies]
|
|
24
|
+
enterprise = ["grpcio>=1.60", "psycopg2-binary", "redis"]
|
|
25
|
+
robotics = ["rclpy", "unitree-sdk2py"]
|
|
26
|
+
iot = ["paho-mqtt"]
|
|
27
|
+
dev = ["pytest", "pytest-asyncio", "mypy", "ruff"]
|
|
28
|
+
|
|
29
|
+
[project.scripts]
|
|
30
|
+
halyn = "halyn.cli:main"
|
|
31
|
+
|
|
32
|
+
[project.urls]
|
|
33
|
+
Homepage = "https://github.com/ElmadaniS/halyn"
|
|
34
|
+
Repository = "https://github.com/ElmadaniS/halyn"
|
|
35
|
+
Issues = "https://github.com/ElmadaniS/halyn/issues"
|
|
36
|
+
|
|
37
|
+
[tool.setuptools.packages.find]
|
|
38
|
+
where = ["src"]
|
|
39
|
+
|
|
40
|
+
[tool.ruff]
|
|
41
|
+
line-length = 100
|
|
42
|
+
target-version = "py310"
|
|
43
|
+
|
|
44
|
+
[tool.mypy]
|
|
45
|
+
strict = true
|
|
46
|
+
|
|
47
|
+
[build-system]
|
|
48
|
+
requires = ["setuptools>=68"]
|
|
49
|
+
build-backend = "setuptools.build_meta"
|
halyn-0.2.0/setup.cfg
ADDED