proxima-cli 1.2.1__tar.gz → 1.2.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.
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/PKG-INFO +1 -1
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/pyproject.toml +1 -1
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/src/prox/__init__.py +1 -1
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/src/prox/cli.py +2 -1
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/src/prox/commands/catalog.py +11 -17
- proxima_cli-1.2.2/src/prox/commands/skill.py +76 -0
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/.github/workflows/publish.yml +0 -0
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/.gitignore +0 -0
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/LICENSE +0 -0
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/README.md +0 -0
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/src/prox/api.py +0 -0
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/src/prox/auth.py +0 -0
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/src/prox/commands/__init__.py +0 -0
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/src/prox/commands/agent.py +0 -0
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/src/prox/commands/governance.py +0 -0
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/src/prox/commands/knowledge.py +0 -0
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/src/prox/commands/model.py +0 -0
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/src/prox/commands/ontology.py +0 -0
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/src/prox/commands/platform.py +0 -0
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/src/prox/commands/routine.py +0 -0
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/src/prox/commands/secret.py +0 -0
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/src/prox/commands/team.py +0 -0
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/src/prox/commands/toolbox.py +0 -0
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/src/prox/commands/workflow.py +0 -0
- {proxima_cli-1.2.1 → proxima_cli-1.2.2}/src/prox/config.py +0 -0
|
@@ -4,7 +4,7 @@ import typer
|
|
|
4
4
|
from rich.console import Console
|
|
5
5
|
|
|
6
6
|
from . import __version__, auth, config
|
|
7
|
-
from .commands import catalog, agent, toolbox, knowledge, secret, model, routine, workflow, governance, platform, ontology, team
|
|
7
|
+
from .commands import catalog, agent, toolbox, knowledge, secret, model, routine, workflow, governance, platform, ontology, team, skill
|
|
8
8
|
|
|
9
9
|
def version_callback(value: bool):
|
|
10
10
|
if value:
|
|
@@ -28,6 +28,7 @@ console = Console()
|
|
|
28
28
|
app.add_typer(catalog.app, name="catalog")
|
|
29
29
|
app.add_typer(agent.app, name="agent")
|
|
30
30
|
app.add_typer(toolbox.app, name="toolbox")
|
|
31
|
+
app.add_typer(skill.app, name="skill")
|
|
31
32
|
app.add_typer(knowledge.app, name="knowledge")
|
|
32
33
|
app.add_typer(ontology.app, name="ontology")
|
|
33
34
|
app.add_typer(secret.app, name="secret")
|
|
@@ -248,6 +248,7 @@ def deploy_from_catalog(
|
|
|
248
248
|
version: str = typer.Option("latest", "--version", "-v", help="Version to deploy"),
|
|
249
249
|
domain: str = typer.Option("", "--domain", "-d", help="Domain assignment (skips prompt)"),
|
|
250
250
|
model: str = typer.Option("", "--model", "-m", help="LLM model (skips prompt)"),
|
|
251
|
+
data_source: str = typer.Option("", "--data-source", help="synthetic or configure-later (skips prompt)"),
|
|
251
252
|
yes: bool = typer.Option(False, "--yes", "-y", help="Skip confirmation prompt"),
|
|
252
253
|
):
|
|
253
254
|
"""Deploy an agent from catalog to the platform.
|
|
@@ -275,7 +276,6 @@ def deploy_from_catalog(
|
|
|
275
276
|
|
|
276
277
|
# --- Domain selection ---
|
|
277
278
|
if not domain:
|
|
278
|
-
# Fetch existing domains from platform
|
|
279
279
|
existing_domains = []
|
|
280
280
|
try:
|
|
281
281
|
domains_res = gateway_get("/build/domains")
|
|
@@ -285,15 +285,12 @@ def deploy_from_catalog(
|
|
|
285
285
|
|
|
286
286
|
if existing_domains:
|
|
287
287
|
console.print(f" Existing domains: {', '.join(existing_domains)}")
|
|
288
|
+
console.print(f" [dim](New domains will be created automatically)[/dim]")
|
|
288
289
|
|
|
289
|
-
domain = typer.prompt(
|
|
290
|
-
f" Domain",
|
|
291
|
-
default=suggested_domain,
|
|
292
|
-
)
|
|
290
|
+
domain = typer.prompt(f" Domain", default=suggested_domain)
|
|
293
291
|
|
|
294
292
|
# --- Model selection ---
|
|
295
293
|
if not model:
|
|
296
|
-
# Fetch available models from platform
|
|
297
294
|
available_models = []
|
|
298
295
|
try:
|
|
299
296
|
models_res = gateway_get("/build/models")
|
|
@@ -304,17 +301,14 @@ def deploy_from_catalog(
|
|
|
304
301
|
if available_models:
|
|
305
302
|
console.print(f" Available models: {', '.join(available_models)}")
|
|
306
303
|
|
|
307
|
-
model = typer.prompt(
|
|
308
|
-
f" Model",
|
|
309
|
-
default=agent_meta.get("model_requirement", "gpt-4.1-mini"),
|
|
310
|
-
)
|
|
304
|
+
model = typer.prompt(f" Model", default=agent_meta.get("model_requirement", "gpt-4.1-mini"))
|
|
311
305
|
|
|
312
306
|
# --- Data source mode ---
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
307
|
+
if not data_source:
|
|
308
|
+
data_source = typer.prompt(
|
|
309
|
+
f" Data sources (synthetic / configure-later)",
|
|
310
|
+
default="synthetic",
|
|
311
|
+
)
|
|
318
312
|
|
|
319
313
|
# --- Confirmation ---
|
|
320
314
|
console.print(f"\n [bold]Deployment summary:[/bold]")
|
|
@@ -322,7 +316,7 @@ def deploy_from_catalog(
|
|
|
322
316
|
console.print(f" Version: {resolved_version}")
|
|
323
317
|
console.print(f" Domain: {domain}")
|
|
324
318
|
console.print(f" Model: {model}")
|
|
325
|
-
console.print(f" Data: {
|
|
319
|
+
console.print(f" Data: {data_source}")
|
|
326
320
|
console.print()
|
|
327
321
|
|
|
328
322
|
if not yes:
|
|
@@ -338,7 +332,7 @@ def deploy_from_catalog(
|
|
|
338
332
|
"version": version,
|
|
339
333
|
"domain": domain,
|
|
340
334
|
"model": model,
|
|
341
|
-
"data_source_mode":
|
|
335
|
+
"data_source_mode": data_source,
|
|
342
336
|
})
|
|
343
337
|
deployment_id = result.get("deployment_id")
|
|
344
338
|
resolved_version = result.get("version", resolved_version)
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"""prox skill — manage skills (prompt templates)."""
|
|
2
|
+
|
|
3
|
+
import typer
|
|
4
|
+
from rich.console import Console
|
|
5
|
+
from rich.table import Table
|
|
6
|
+
|
|
7
|
+
from ..api import gateway_get, gateway_delete, APIError
|
|
8
|
+
|
|
9
|
+
app = typer.Typer(help="Manage skills.")
|
|
10
|
+
console = Console()
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@app.command("list")
|
|
14
|
+
def list_skills():
|
|
15
|
+
"""List all skills on the platform."""
|
|
16
|
+
try:
|
|
17
|
+
data = gateway_get("/build/skills")
|
|
18
|
+
except APIError as e:
|
|
19
|
+
console.print(f"[red]Error:[/red] {e.detail}")
|
|
20
|
+
raise typer.Exit(1)
|
|
21
|
+
|
|
22
|
+
skills = data.get("skills", [])
|
|
23
|
+
if not skills:
|
|
24
|
+
console.print("[dim]No skills registered.[/dim]")
|
|
25
|
+
return
|
|
26
|
+
|
|
27
|
+
table = Table(title=f"Skills ({len(skills)})")
|
|
28
|
+
table.add_column("ID", style="bold")
|
|
29
|
+
table.add_column("Version", justify="right")
|
|
30
|
+
table.add_column("Description")
|
|
31
|
+
|
|
32
|
+
for s in skills:
|
|
33
|
+
table.add_row(
|
|
34
|
+
s.get("id", s.get("name", "")),
|
|
35
|
+
str(s.get("version", "")),
|
|
36
|
+
s.get("description", "")[:60],
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
console.print(table)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@app.command("delete")
|
|
43
|
+
def delete_skill(
|
|
44
|
+
skill_id: str = typer.Argument(help="Skill ID to delete"),
|
|
45
|
+
confirm: bool = typer.Option(False, "--yes", "-y"),
|
|
46
|
+
):
|
|
47
|
+
"""Delete a skill."""
|
|
48
|
+
if not confirm:
|
|
49
|
+
typer.confirm(f"Delete skill '{skill_id}'?", abort=True)
|
|
50
|
+
try:
|
|
51
|
+
gateway_delete(f"/build/skills/{skill_id}")
|
|
52
|
+
console.print(f"[green]✓[/green] Deleted: {skill_id}")
|
|
53
|
+
except APIError as e:
|
|
54
|
+
console.print(f"[red]Error:[/red] {e.detail}")
|
|
55
|
+
raise typer.Exit(1)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@app.command("delete-all")
|
|
59
|
+
def delete_all_skills(
|
|
60
|
+
confirm: bool = typer.Option(False, "--yes", "-y"),
|
|
61
|
+
):
|
|
62
|
+
"""Delete all skills from the platform."""
|
|
63
|
+
if not confirm:
|
|
64
|
+
typer.confirm("Delete ALL skills?", abort=True)
|
|
65
|
+
try:
|
|
66
|
+
data = gateway_get("/build/skills")
|
|
67
|
+
skills = data.get("skills", [])
|
|
68
|
+
for s in skills:
|
|
69
|
+
sid = s.get("id", s.get("name", ""))
|
|
70
|
+
if sid:
|
|
71
|
+
gateway_delete(f"/build/skills/{sid}")
|
|
72
|
+
console.print(f" [green]✓[/green] {sid}")
|
|
73
|
+
console.print(f"\n[green]✓[/green] Deleted {len(skills)} skills")
|
|
74
|
+
except APIError as e:
|
|
75
|
+
console.print(f"[red]Error:[/red] {e.detail}")
|
|
76
|
+
raise typer.Exit(1)
|
|
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
|