hanzo 0.3.34__tar.gz → 0.3.35__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.
- {hanzo-0.3.34 → hanzo-0.3.35}/PKG-INFO +3 -4
- {hanzo-0.3.34 → hanzo-0.3.35}/pyproject.toml +3 -4
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/__init__.py +1 -1
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/cli.py +2 -2
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/commands/__init__.py +1 -1
- hanzo-0.3.34/src/hanzo/commands/infra.py → hanzo-0.3.35/src/hanzo/commands/cloud.py +28 -28
- {hanzo-0.3.34 → hanzo-0.3.35}/.gitignore +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/README.md +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/__main__.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/base_agent.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/batch_orchestrator.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/commands/agent.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/commands/auth.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/commands/chat.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/commands/config.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/commands/mcp.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/commands/miner.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/commands/network.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/commands/node.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/commands/repl.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/commands/router.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/commands/tools.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/cryptography/__init__.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/cryptography/ml_dsa.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/cryptography/precompiles.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/cryptography/slh_dsa.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/dev.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/fallback_handler.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/infra/__init__.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/infra/cron.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/infra/documentdb.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/infra/functions.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/infra/kv.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/infra/pubsub.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/infra/queues.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/infra/search.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/infra/storage.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/infra/tasks.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/infra/vector.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/interactive/__init__.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/interactive/dashboard.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/interactive/enhanced_repl.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/interactive/model_selector.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/interactive/repl.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/interactive/todo_manager.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/mcp_server.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/memory_manager.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/model_registry.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/orchestrator_config.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/rate_limiter.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/repl.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/router/__init__.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/streaming.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/tools/__init__.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/tools/detector.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/ui/__init__.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/ui/inline_startup.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/ui/startup.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/utils/__init__.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/utils/config.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/utils/net_check.py +0 -0
- {hanzo-0.3.34 → hanzo-0.3.35}/src/hanzo/utils/output.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hanzo
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.35
|
|
4
4
|
Summary: Hanzo AI - Complete AI Infrastructure Platform with CLI, Router, MCP, and Agent Runtime
|
|
5
5
|
Project-URL: Homepage, https://hanzo.ai
|
|
6
6
|
Project-URL: Repository, https://github.com/hanzoai/python-sdk
|
|
@@ -14,12 +14,11 @@ Classifier: Intended Audience :: Developers
|
|
|
14
14
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
15
15
|
Classifier: Operating System :: OS Independent
|
|
16
16
|
Classifier: Programming Language :: Python :: 3
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
19
17
|
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
19
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
21
20
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
|
-
Requires-Python: >=3.
|
|
21
|
+
Requires-Python: >=3.12
|
|
23
22
|
Requires-Dist: anthropic>=0.25.0
|
|
24
23
|
Requires-Dist: click>=8.1.0
|
|
25
24
|
Requires-Dist: httpx>=0.23.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "hanzo"
|
|
3
|
-
version = "0.3.
|
|
3
|
+
version = "0.3.35"
|
|
4
4
|
description = "Hanzo AI - Complete AI Infrastructure Platform with CLI, Router, MCP, and Agent Runtime"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "Hanzo AI", email = "dev@hanzo.ai"},
|
|
@@ -18,7 +18,7 @@ dependencies = [
|
|
|
18
18
|
"qrcode>=7.4.2",
|
|
19
19
|
]
|
|
20
20
|
readme = "README.md"
|
|
21
|
-
requires-python = ">= 3.
|
|
21
|
+
requires-python = ">= 3.12"
|
|
22
22
|
keywords = ["ai", "cli", "hanzo", "agents", "llm", "mcp", "local-ai", "private-ai"]
|
|
23
23
|
classifiers = [
|
|
24
24
|
"Development Status :: 4 - Beta",
|
|
@@ -27,9 +27,8 @@ classifiers = [
|
|
|
27
27
|
"License :: OSI Approved :: Apache Software License",
|
|
28
28
|
"Operating System :: OS Independent",
|
|
29
29
|
"Programming Language :: Python :: 3",
|
|
30
|
-
"Programming Language :: Python :: 3.10",
|
|
31
|
-
"Programming Language :: Python :: 3.11",
|
|
32
30
|
"Programming Language :: Python :: 3.12",
|
|
31
|
+
"Programming Language :: Python :: 3.13",
|
|
33
32
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
34
33
|
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
35
34
|
]
|
|
@@ -22,7 +22,7 @@ from .commands import (
|
|
|
22
22
|
config,
|
|
23
23
|
router,
|
|
24
24
|
network,
|
|
25
|
-
|
|
25
|
+
cloud,
|
|
26
26
|
)
|
|
27
27
|
from .ui.startup import show_startup
|
|
28
28
|
from .utils.output import console
|
|
@@ -91,7 +91,7 @@ cli.add_command(tools.tools_group)
|
|
|
91
91
|
cli.add_command(network.network_group)
|
|
92
92
|
cli.add_command(config.config_group)
|
|
93
93
|
cli.add_command(router.router_group)
|
|
94
|
-
cli.add_command(
|
|
94
|
+
cli.add_command(cloud.cloud_group)
|
|
95
95
|
|
|
96
96
|
|
|
97
97
|
# Quick aliases
|
|
@@ -115,7 +115,7 @@ def get_api_key() -> Optional[str]:
|
|
|
115
115
|
return None
|
|
116
116
|
|
|
117
117
|
|
|
118
|
-
def
|
|
118
|
+
def get_cloud_config() -> dict:
|
|
119
119
|
"""Load infrastructure configuration."""
|
|
120
120
|
config_file = Path.home() / ".hanzo" / "infra.json"
|
|
121
121
|
if config_file.exists():
|
|
@@ -126,7 +126,7 @@ def get_infra_config() -> dict:
|
|
|
126
126
|
return {"services": {}}
|
|
127
127
|
|
|
128
128
|
|
|
129
|
-
def
|
|
129
|
+
def save_cloud_config(config: dict):
|
|
130
130
|
"""Save infrastructure configuration."""
|
|
131
131
|
config_dir = Path.home() / ".hanzo"
|
|
132
132
|
config_dir.mkdir(exist_ok=True)
|
|
@@ -134,8 +134,8 @@ def save_infra_config(config: dict):
|
|
|
134
134
|
config_file.write_text(json.dumps(config, indent=2))
|
|
135
135
|
|
|
136
136
|
|
|
137
|
-
@click.group(name="
|
|
138
|
-
def
|
|
137
|
+
@click.group(name="cloud")
|
|
138
|
+
def cloud_group():
|
|
139
139
|
"""Manage Hanzo infrastructure services.
|
|
140
140
|
|
|
141
141
|
Provision and connect to managed infrastructure:
|
|
@@ -155,19 +155,19 @@ def infra_group():
|
|
|
155
155
|
|
|
156
156
|
\b
|
|
157
157
|
Examples:
|
|
158
|
-
hanzo
|
|
159
|
-
hanzo
|
|
160
|
-
hanzo
|
|
161
|
-
hanzo
|
|
162
|
-
hanzo
|
|
158
|
+
hanzo cloud list # Show available services
|
|
159
|
+
hanzo cloud provision vector # Provision Qdrant
|
|
160
|
+
hanzo cloud connect # Get connection URLs
|
|
161
|
+
hanzo cloud env # Export as env vars
|
|
162
|
+
hanzo cloud status # Check health
|
|
163
163
|
"""
|
|
164
164
|
pass
|
|
165
165
|
|
|
166
166
|
|
|
167
|
-
@
|
|
167
|
+
@cloud_group.command()
|
|
168
168
|
def list():
|
|
169
169
|
"""List available infrastructure services."""
|
|
170
|
-
config =
|
|
170
|
+
config = get_cloud_config()
|
|
171
171
|
provisioned = config.get("services", {})
|
|
172
172
|
|
|
173
173
|
table = Table(title="Hanzo Infrastructure Services", box=box.ROUNDED)
|
|
@@ -183,10 +183,10 @@ def list():
|
|
|
183
183
|
|
|
184
184
|
console.print(table)
|
|
185
185
|
console.print()
|
|
186
|
-
console.print("[dim]Use 'hanzo
|
|
186
|
+
console.print("[dim]Use 'hanzo cloud provision <service>' to provision a service[/dim]")
|
|
187
187
|
|
|
188
188
|
|
|
189
|
-
@
|
|
189
|
+
@cloud_group.command()
|
|
190
190
|
@click.argument("service", type=click.Choice(SERVICE_NAMES))
|
|
191
191
|
@click.option("--tier", type=click.Choice(["free", "pro", "enterprise"]), default="free", help="Service tier")
|
|
192
192
|
@click.option("--region", default="us-west-2", help="Deployment region")
|
|
@@ -228,7 +228,7 @@ def provision(service: str, tier: str, region: str):
|
|
|
228
228
|
data = resp.json()
|
|
229
229
|
|
|
230
230
|
# Save to config
|
|
231
|
-
config =
|
|
231
|
+
config = get_cloud_config()
|
|
232
232
|
config["services"][service] = {
|
|
233
233
|
"id": data.get("id"),
|
|
234
234
|
"url": data.get("url"),
|
|
@@ -238,13 +238,13 @@ def provision(service: str, tier: str, region: str):
|
|
|
238
238
|
"tier": tier,
|
|
239
239
|
"region": region,
|
|
240
240
|
}
|
|
241
|
-
|
|
241
|
+
save_cloud_config(config)
|
|
242
242
|
|
|
243
243
|
console.print(f"[green]✓ {info['name']} provisioned successfully![/green]")
|
|
244
244
|
console.print()
|
|
245
245
|
console.print(f"[cyan]Connection URL:[/cyan] {data.get('url')}")
|
|
246
246
|
console.print()
|
|
247
|
-
console.print("[dim]Run 'hanzo
|
|
247
|
+
console.print("[dim]Run 'hanzo cloud env' to export environment variables[/dim]")
|
|
248
248
|
|
|
249
249
|
except httpx.ConnectError:
|
|
250
250
|
console.print("[red]Could not connect to Hanzo API.[/red]")
|
|
@@ -253,16 +253,16 @@ def provision(service: str, tier: str, region: str):
|
|
|
253
253
|
console.print(f"[red]Error: {e}[/red]")
|
|
254
254
|
|
|
255
255
|
|
|
256
|
-
@
|
|
256
|
+
@cloud_group.command()
|
|
257
257
|
@click.argument("service", type=click.Choice(SERVICE_NAMES), required=False)
|
|
258
258
|
def connect(service: Optional[str]):
|
|
259
259
|
"""Show connection details for provisioned services."""
|
|
260
|
-
config =
|
|
260
|
+
config = get_cloud_config()
|
|
261
261
|
services = config.get("services", {})
|
|
262
262
|
|
|
263
263
|
if not services:
|
|
264
264
|
console.print("[yellow]No services provisioned yet.[/yellow]")
|
|
265
|
-
console.print("Run 'hanzo
|
|
265
|
+
console.print("Run 'hanzo cloud provision <service>' to get started.")
|
|
266
266
|
return
|
|
267
267
|
|
|
268
268
|
if service:
|
|
@@ -285,12 +285,12 @@ def connect(service: Optional[str]):
|
|
|
285
285
|
console.print(panel)
|
|
286
286
|
|
|
287
287
|
|
|
288
|
-
@
|
|
288
|
+
@cloud_group.command()
|
|
289
289
|
@click.option("--shell", type=click.Choice(["bash", "zsh", "fish", "powershell"]), default="bash")
|
|
290
290
|
@click.option("--export", "do_export", is_flag=True, help="Print export statements")
|
|
291
291
|
def env(shell: str, do_export: bool):
|
|
292
292
|
"""Show environment variables for provisioned services."""
|
|
293
|
-
config =
|
|
293
|
+
config = get_cloud_config()
|
|
294
294
|
services = config.get("services", {})
|
|
295
295
|
|
|
296
296
|
if not services:
|
|
@@ -345,14 +345,14 @@ def env(shell: str, do_export: bool):
|
|
|
345
345
|
|
|
346
346
|
console.print(table)
|
|
347
347
|
console.print()
|
|
348
|
-
console.print(f"[dim]Run 'hanzo
|
|
348
|
+
console.print(f"[dim]Run 'hanzo cloud env --export' to get export statements[/dim]")
|
|
349
349
|
|
|
350
350
|
|
|
351
|
-
@
|
|
351
|
+
@cloud_group.command()
|
|
352
352
|
@click.argument("service", type=click.Choice(SERVICE_NAMES), required=False)
|
|
353
353
|
def status(service: Optional[str]):
|
|
354
354
|
"""Check health status of provisioned services."""
|
|
355
|
-
config =
|
|
355
|
+
config = get_cloud_config()
|
|
356
356
|
services = config.get("services", {})
|
|
357
357
|
|
|
358
358
|
if not services:
|
|
@@ -398,12 +398,12 @@ def status(service: Optional[str]):
|
|
|
398
398
|
console.print(table)
|
|
399
399
|
|
|
400
400
|
|
|
401
|
-
@
|
|
401
|
+
@cloud_group.command()
|
|
402
402
|
@click.argument("service", type=click.Choice(SERVICE_NAMES))
|
|
403
403
|
@click.option("--force", is_flag=True, help="Skip confirmation")
|
|
404
404
|
def destroy(service: str, force: bool):
|
|
405
405
|
"""Destroy a provisioned service."""
|
|
406
|
-
config =
|
|
406
|
+
config = get_cloud_config()
|
|
407
407
|
services = config.get("services", {})
|
|
408
408
|
|
|
409
409
|
if service not in services:
|
|
@@ -436,7 +436,7 @@ def destroy(service: str, force: bool):
|
|
|
436
436
|
|
|
437
437
|
# Remove from config
|
|
438
438
|
del config["services"][service]
|
|
439
|
-
|
|
439
|
+
save_cloud_config(config)
|
|
440
440
|
|
|
441
441
|
console.print(f"[green]✓ {info['name']} destroyed.[/green]")
|
|
442
442
|
|
|
@@ -444,7 +444,7 @@ def destroy(service: str, force: bool):
|
|
|
444
444
|
console.print(f"[red]Error: {e}[/red]")
|
|
445
445
|
|
|
446
446
|
|
|
447
|
-
@
|
|
447
|
+
@cloud_group.command()
|
|
448
448
|
def init():
|
|
449
449
|
"""Initialize infrastructure from hanzo.yaml config file."""
|
|
450
450
|
config_paths = [
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|