hypercli-cli 0.9.0__tar.gz → 0.9.2__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.
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/PKG-INFO +1 -1
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/hypercli_cli/agents.py +43 -4
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/hypercli_cli/voice.py +18 -6
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/pyproject.toml +1 -1
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/.gitignore +0 -0
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/README.md +0 -0
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/hypercli_cli/__init__.py +0 -0
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/hypercli_cli/billing.py +0 -0
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/hypercli_cli/claw.py +0 -0
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/hypercli_cli/cli.py +0 -0
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/hypercli_cli/comfyui.py +0 -0
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/hypercli_cli/flow.py +0 -0
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/hypercli_cli/instances.py +0 -0
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/hypercli_cli/jobs.py +0 -0
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/hypercli_cli/keys.py +0 -0
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/hypercli_cli/onboard.py +0 -0
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/hypercli_cli/output.py +0 -0
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/hypercli_cli/renders.py +0 -0
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/hypercli_cli/tui/__init__.py +0 -0
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/hypercli_cli/tui/job_monitor.py +0 -0
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/hypercli_cli/user.py +0 -0
- {hypercli_cli-0.9.0 → hypercli_cli-0.9.2}/hypercli_cli/wallet.py +0 -0
|
@@ -107,8 +107,41 @@ def _get_pod_with_token(agent_id: str) -> ReefPod:
|
|
|
107
107
|
return pod
|
|
108
108
|
|
|
109
109
|
|
|
110
|
+
@app.command("budget")
|
|
111
|
+
def budget():
|
|
112
|
+
"""Show your agent resource budget and usage."""
|
|
113
|
+
agents = _get_agents_client()
|
|
114
|
+
|
|
115
|
+
try:
|
|
116
|
+
data = agents.budget()
|
|
117
|
+
except Exception as e:
|
|
118
|
+
console.print(f"[red]❌ Failed to get budget: {e}[/red]")
|
|
119
|
+
raise typer.Exit(1)
|
|
120
|
+
|
|
121
|
+
b = data.get("budget", {})
|
|
122
|
+
u = data.get("used", {})
|
|
123
|
+
a = data.get("available", {})
|
|
124
|
+
|
|
125
|
+
console.print(f"\n[bold]Agent Resource Budget[/bold] ({data.get('plan_id', '')})")
|
|
126
|
+
console.print(f" Agents: {u.get('agents', 0)}/{b.get('max_agents', 0)} ({a.get('agents', 0)} available)")
|
|
127
|
+
console.print(f" CPU: {u.get('cpu', 0)}/{b.get('total_cpu', 0)} cores ({a.get('cpu', 0)} available)")
|
|
128
|
+
console.print(f" Memory: {u.get('memory', 0)}/{b.get('total_memory', 0)} GB ({a.get('memory', 0)} available)")
|
|
129
|
+
|
|
130
|
+
presets = data.get("size_presets", {})
|
|
131
|
+
if presets:
|
|
132
|
+
console.print("\n[bold]Size Presets:[/bold]")
|
|
133
|
+
for name, spec in presets.items():
|
|
134
|
+
console.print(f" {name:8s} — {spec['cpu']} CPU, {spec['memory']} GB")
|
|
135
|
+
console.print()
|
|
136
|
+
|
|
137
|
+
|
|
110
138
|
@app.command("create")
|
|
111
139
|
def create(
|
|
140
|
+
name: str = typer.Option("agent", "--name", "-n", help="Agent name"),
|
|
141
|
+
size: str = typer.Option(None, "--size", "-s", help="Size preset: small, medium, large"),
|
|
142
|
+
cpu: int = typer.Option(None, "--cpu", help="Custom CPU in cores"),
|
|
143
|
+
memory: int = typer.Option(None, "--memory", help="Custom memory in GB"),
|
|
144
|
+
no_start: bool = typer.Option(False, "--no-start", help="Create without starting"),
|
|
112
145
|
wait: bool = typer.Option(True, "--wait/--no-wait", help="Wait for pod to be running"),
|
|
113
146
|
):
|
|
114
147
|
"""Create a new OpenClaw agent pod."""
|
|
@@ -117,7 +150,7 @@ def create(
|
|
|
117
150
|
console.print("\n[bold]Creating agent pod...[/bold]")
|
|
118
151
|
|
|
119
152
|
try:
|
|
120
|
-
pod = agents.create()
|
|
153
|
+
pod = agents.create(name=name, size=size, cpu=cpu, memory=memory, start=not no_start)
|
|
121
154
|
except Exception as e:
|
|
122
155
|
console.print(f"[red]❌ Create failed: {e}[/red]")
|
|
123
156
|
raise typer.Exit(1)
|
|
@@ -125,7 +158,8 @@ def create(
|
|
|
125
158
|
_save_pod_state(pod)
|
|
126
159
|
|
|
127
160
|
console.print(f"[green]✓[/green] Agent created: [bold]{pod.id[:12]}[/bold]")
|
|
128
|
-
console.print(f"
|
|
161
|
+
console.print(f" Name: {pod.name or pod.pod_name}")
|
|
162
|
+
console.print(f" Size: {pod.cpu} CPU, {pod.memory} GB")
|
|
129
163
|
console.print(f" State: {pod.state}")
|
|
130
164
|
console.print(f" Desktop: {pod.vnc_url}")
|
|
131
165
|
console.print(f" Shell: {pod.shell_url}")
|
|
@@ -186,7 +220,8 @@ def list_agents(
|
|
|
186
220
|
|
|
187
221
|
table = Table(title="Agents")
|
|
188
222
|
table.add_column("ID", style="cyan", no_wrap=True)
|
|
189
|
-
table.add_column("
|
|
223
|
+
table.add_column("Name", style="blue")
|
|
224
|
+
table.add_column("Size")
|
|
190
225
|
table.add_column("State")
|
|
191
226
|
table.add_column("Desktop URL")
|
|
192
227
|
table.add_column("Created")
|
|
@@ -194,9 +229,11 @@ def list_agents(
|
|
|
194
229
|
for pod in pods:
|
|
195
230
|
style = {"running": "green", "pending": "yellow", "starting": "yellow"}.get(pod.state, "red")
|
|
196
231
|
created = pod.created_at.strftime("%Y-%m-%d %H:%M") if pod.created_at else ""
|
|
232
|
+
size_str = f"{pod.cpu}c/{pod.memory}G" if pod.cpu else ""
|
|
197
233
|
table.add_row(
|
|
198
234
|
pod.id[:12],
|
|
199
|
-
pod.pod_name or "",
|
|
235
|
+
pod.name or pod.pod_name or "",
|
|
236
|
+
size_str,
|
|
200
237
|
f"[{style}]{pod.state}[/{style}]",
|
|
201
238
|
pod.vnc_url or "",
|
|
202
239
|
created,
|
|
@@ -225,7 +262,9 @@ def status(
|
|
|
225
262
|
_save_pod_state(pod)
|
|
226
263
|
|
|
227
264
|
console.print(f"\n[bold]Agent {pod.id[:12]}[/bold]")
|
|
265
|
+
console.print(f" Name: {pod.name or pod.pod_name}")
|
|
228
266
|
console.print(f" Pod: {pod.pod_name}")
|
|
267
|
+
console.print(f" Size: {pod.cpu} CPU, {pod.memory} GB")
|
|
229
268
|
console.print(f" State: {pod.state}")
|
|
230
269
|
console.print(f" Desktop: {pod.vnc_url}")
|
|
231
270
|
console.print(f" Shell: {pod.shell_url}")
|
|
@@ -76,7 +76,8 @@ def tts(
|
|
|
76
76
|
text: str = typer.Argument(..., help="Text to synthesize"),
|
|
77
77
|
voice: str = typer.Option("Chelsie", "--voice", "-v", help="Voice name (CustomVoice preset)"),
|
|
78
78
|
language: str = typer.Option("auto", "--language", "-l", help="Language: auto, english, chinese, etc."),
|
|
79
|
-
|
|
79
|
+
format: str = typer.Option("mp3", "--format", "-f", help="Output format: wav, mp3, opus, ogg, flac"),
|
|
80
|
+
output: Path = typer.Option(None, "--output", "-o", help="Output audio file (default: output.<format>)"),
|
|
80
81
|
key: str = typer.Option(None, "--key", "-k", help="API key (sk-...)"),
|
|
81
82
|
dev: bool = typer.Option(False, "--dev", help="Use dev API"),
|
|
82
83
|
):
|
|
@@ -84,13 +85,16 @@ def tts(
|
|
|
84
85
|
|
|
85
86
|
Examples:
|
|
86
87
|
hyper claw voice tts "Hello world"
|
|
87
|
-
hyper claw voice tts "Bonjour" -v Etienne -l french -o hello.
|
|
88
|
+
hyper claw voice tts "Bonjour" -v Etienne -l french -f opus -o hello.opus
|
|
88
89
|
"""
|
|
89
90
|
api_key = _get_api_key(key)
|
|
91
|
+
if output is None:
|
|
92
|
+
output = Path(f"output.{format}")
|
|
90
93
|
payload = {
|
|
91
94
|
"text": text,
|
|
92
95
|
"voice": voice,
|
|
93
96
|
"language": language,
|
|
97
|
+
"response_format": format,
|
|
94
98
|
}
|
|
95
99
|
_post_voice("tts", payload, api_key, output, dev)
|
|
96
100
|
|
|
@@ -101,7 +105,8 @@ def clone(
|
|
|
101
105
|
ref_audio: Path = typer.Option(..., "--ref", "-r", help="Reference audio file (wav/mp3/ogg)"),
|
|
102
106
|
language: str = typer.Option("auto", "--language", "-l", help="Language: auto, english, chinese, etc."),
|
|
103
107
|
x_vector_only: bool = typer.Option(True, "--x-vector-only/--full-clone", help="Use x_vector_only mode (recommended)"),
|
|
104
|
-
|
|
108
|
+
format: str = typer.Option("mp3", "--format", "-f", help="Output format: wav, mp3, opus, ogg, flac"),
|
|
109
|
+
output: Path = typer.Option(None, "--output", "-o", help="Output audio file (default: output.<format>)"),
|
|
105
110
|
key: str = typer.Option(None, "--key", "-k", help="API key (sk-...)"),
|
|
106
111
|
dev: bool = typer.Option(False, "--dev", help="Use dev API"),
|
|
107
112
|
):
|
|
@@ -109,9 +114,11 @@ def clone(
|
|
|
109
114
|
|
|
110
115
|
Examples:
|
|
111
116
|
hyper claw voice clone "Hello" --ref voice.wav
|
|
112
|
-
hyper claw voice clone "Test" -r ref.wav -l english -o cloned.
|
|
117
|
+
hyper claw voice clone "Test" -r ref.wav -l english -f mp3 -o cloned.mp3
|
|
113
118
|
"""
|
|
114
119
|
api_key = _get_api_key(key)
|
|
120
|
+
if output is None:
|
|
121
|
+
output = Path(f"output.{format}")
|
|
115
122
|
|
|
116
123
|
if not ref_audio.exists():
|
|
117
124
|
console.print(f"[red]❌ Reference audio not found: {ref_audio}[/red]")
|
|
@@ -127,6 +134,7 @@ def clone(
|
|
|
127
134
|
"ref_audio_base64": ref_b64,
|
|
128
135
|
"language": language,
|
|
129
136
|
"x_vector_only": x_vector_only,
|
|
137
|
+
"response_format": format,
|
|
130
138
|
}
|
|
131
139
|
_post_voice("clone", payload, api_key, output, dev)
|
|
132
140
|
|
|
@@ -136,7 +144,8 @@ def design(
|
|
|
136
144
|
text: str = typer.Argument(..., help="Text to synthesize"),
|
|
137
145
|
description: str = typer.Option(..., "--desc", "-d", help="Voice description (e.g. 'young female, warm, American accent')"),
|
|
138
146
|
language: str = typer.Option("auto", "--language", "-l", help="Language: auto, english, chinese, etc."),
|
|
139
|
-
|
|
147
|
+
format: str = typer.Option("mp3", "--format", "-f", help="Output format: wav, mp3, opus, ogg, flac"),
|
|
148
|
+
output: Path = typer.Option(None, "--output", "-o", help="Output audio file (default: output.<format>)"),
|
|
140
149
|
key: str = typer.Option(None, "--key", "-k", help="API key (sk-...)"),
|
|
141
150
|
dev: bool = typer.Option(False, "--dev", help="Use dev API"),
|
|
142
151
|
):
|
|
@@ -144,12 +153,15 @@ def design(
|
|
|
144
153
|
|
|
145
154
|
Examples:
|
|
146
155
|
hyper claw voice design "Hello" --desc "deep male voice, British accent"
|
|
147
|
-
hyper claw voice design "Test" -d "young woman, cheerful" -o designed.
|
|
156
|
+
hyper claw voice design "Test" -d "young woman, cheerful" -f mp3 -o designed.mp3
|
|
148
157
|
"""
|
|
149
158
|
api_key = _get_api_key(key)
|
|
159
|
+
if output is None:
|
|
160
|
+
output = Path(f"output.{format}")
|
|
150
161
|
payload = {
|
|
151
162
|
"text": text,
|
|
152
163
|
"instruct": description,
|
|
153
164
|
"language": language,
|
|
165
|
+
"response_format": format,
|
|
154
166
|
}
|
|
155
167
|
_post_voice("design", payload, api_key, output, dev)
|
|
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
|