agentsystems-sdk 0.5.9__py3-none-any.whl → 0.5.10__py3-none-any.whl
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.
- agentsystems_sdk/cli.py +3 -3
- agentsystems_sdk/commands/__init__.py +2 -2
- agentsystems_sdk/commands/{hub.py → index.py} +92 -79
- agentsystems_sdk/licenses/python/ATTRIBUTIONS.md +4 -4
- agentsystems_sdk/licenses/python/THIRD_PARTY_LICENSES.json +4 -4
- agentsystems_sdk/licenses/python/THIRD_PARTY_REQUIREMENTS.txt +1 -1
- {agentsystems_sdk-0.5.9.dist-info → agentsystems_sdk-0.5.10.dist-info}/METADATA +12 -1
- {agentsystems_sdk-0.5.9.dist-info → agentsystems_sdk-0.5.10.dist-info}/RECORD +13 -13
- {agentsystems_sdk-0.5.9.dist-info → agentsystems_sdk-0.5.10.dist-info}/WHEEL +0 -0
- {agentsystems_sdk-0.5.9.dist-info → agentsystems_sdk-0.5.10.dist-info}/entry_points.txt +0 -0
- {agentsystems_sdk-0.5.9.dist-info → agentsystems_sdk-0.5.10.dist-info}/licenses/LICENSE +0 -0
- {agentsystems_sdk-0.5.9.dist-info → agentsystems_sdk-0.5.10.dist-info}/licenses/NOTICE +0 -0
- {agentsystems_sdk-0.5.9.dist-info → agentsystems_sdk-0.5.10.dist-info}/top_level.txt +0 -0
agentsystems_sdk/cli.py
CHANGED
@@ -26,7 +26,7 @@ from agentsystems_sdk.commands import (
|
|
26
26
|
update_command,
|
27
27
|
version_command,
|
28
28
|
versions_command,
|
29
|
-
|
29
|
+
index_commands,
|
30
30
|
)
|
31
31
|
|
32
32
|
# Load .env before Typer parses env-var options
|
@@ -93,8 +93,8 @@ app.command(name="update")(update_command)
|
|
93
93
|
app.command(name="version")(version_command)
|
94
94
|
app.command(name="versions")(versions_command)
|
95
95
|
|
96
|
-
# Register
|
97
|
-
app.add_typer(
|
96
|
+
# Register index sub-commands
|
97
|
+
app.add_typer(index_commands)
|
98
98
|
|
99
99
|
|
100
100
|
if __name__ == "__main__":
|
@@ -11,7 +11,7 @@ from .artifacts import artifacts_path_command
|
|
11
11
|
from .clean import clean_command
|
12
12
|
from .update import update_command
|
13
13
|
from .version import version_command, versions_command
|
14
|
-
from .
|
14
|
+
from .index import index_commands
|
15
15
|
|
16
16
|
__all__ = [
|
17
17
|
"init_command",
|
@@ -26,5 +26,5 @@ __all__ = [
|
|
26
26
|
"update_command",
|
27
27
|
"version_command",
|
28
28
|
"versions_command",
|
29
|
-
"
|
29
|
+
"index_commands",
|
30
30
|
]
|
@@ -1,4 +1,4 @@
|
|
1
|
-
"""
|
1
|
+
"""Index commands for publishing and managing agents in the AgentSystems Index."""
|
2
2
|
|
3
3
|
from __future__ import annotations
|
4
4
|
|
@@ -14,77 +14,80 @@ from rich.table import Table
|
|
14
14
|
|
15
15
|
console = Console()
|
16
16
|
|
17
|
-
# Create
|
18
|
-
|
19
|
-
name="
|
20
|
-
help="Publish and manage agents in the AgentSystems
|
17
|
+
# Create index sub-app
|
18
|
+
index_commands = typer.Typer(
|
19
|
+
name="index",
|
20
|
+
help="Publish and manage agents in the AgentSystems Index",
|
21
21
|
no_args_is_help=True,
|
22
22
|
)
|
23
23
|
|
24
24
|
# Config file for storing API key
|
25
25
|
CONFIG_DIR = pathlib.Path.home() / ".agentsystems"
|
26
|
-
|
27
|
-
|
26
|
+
INDEX_CONFIG_FILE = CONFIG_DIR / "index-config.yml"
|
27
|
+
DEFAULT_INDEX_URL = "https://index-api.agentsystems.ai"
|
28
28
|
|
29
29
|
|
30
|
-
def
|
31
|
-
"""Load
|
32
|
-
if not
|
30
|
+
def get_index_config() -> dict:
|
31
|
+
"""Load index configuration from file."""
|
32
|
+
if not INDEX_CONFIG_FILE.exists():
|
33
33
|
return {}
|
34
|
-
with
|
34
|
+
with INDEX_CONFIG_FILE.open("r") as f:
|
35
35
|
return yaml.safe_load(f) or {}
|
36
36
|
|
37
37
|
|
38
|
-
def
|
39
|
-
"""Save
|
38
|
+
def save_index_config(config: dict) -> None:
|
39
|
+
"""Save index configuration to file."""
|
40
40
|
CONFIG_DIR.mkdir(parents=True, exist_ok=True)
|
41
|
-
with
|
41
|
+
with INDEX_CONFIG_FILE.open("w") as f:
|
42
42
|
yaml.safe_dump(config, f)
|
43
43
|
|
44
44
|
|
45
45
|
def get_api_key() -> Optional[str]:
|
46
46
|
"""Get API key from config or environment."""
|
47
47
|
# Check environment first
|
48
|
-
api_key = os.getenv("
|
48
|
+
api_key = os.getenv("AGENTSYSTEMS_INDEX_API_KEY")
|
49
49
|
if api_key:
|
50
50
|
return api_key
|
51
51
|
|
52
52
|
# Check config file
|
53
|
-
config =
|
53
|
+
config = get_index_config()
|
54
54
|
return config.get("api_key")
|
55
55
|
|
56
56
|
|
57
|
-
def
|
58
|
-
"""Get
|
57
|
+
def get_index_url() -> str:
|
58
|
+
"""Get index URL from config or environment."""
|
59
59
|
# Check environment first
|
60
|
-
|
61
|
-
if
|
62
|
-
return
|
60
|
+
index_url = os.getenv("AGENTSYSTEMS_INDEX_URL")
|
61
|
+
if index_url:
|
62
|
+
return index_url
|
63
63
|
|
64
64
|
# Check config file
|
65
|
-
config =
|
66
|
-
return config.get("
|
65
|
+
config = get_index_config()
|
66
|
+
return config.get("index_url", DEFAULT_INDEX_URL)
|
67
67
|
|
68
68
|
|
69
69
|
def get_developer_name() -> Optional[str]:
|
70
70
|
"""Get cached developer name from config."""
|
71
|
-
config =
|
71
|
+
config = get_index_config()
|
72
72
|
return config.get("developer_name")
|
73
73
|
|
74
74
|
|
75
|
-
@
|
75
|
+
@index_commands.command(name="login")
|
76
76
|
def login_command(
|
77
77
|
api_key: str = typer.Option(
|
78
|
-
...,
|
78
|
+
...,
|
79
|
+
prompt="Index API key",
|
80
|
+
hide_input=True,
|
81
|
+
help="Your AgentSystems Index API key",
|
79
82
|
),
|
80
|
-
|
83
|
+
index_url: str = typer.Option(DEFAULT_INDEX_URL, help="Index API URL"),
|
81
84
|
) -> None:
|
82
|
-
"""Store your AgentSystems
|
85
|
+
"""Store your AgentSystems Index API key for publishing agents."""
|
83
86
|
|
84
87
|
# Verify the API key works
|
85
88
|
try:
|
86
89
|
response = requests.get(
|
87
|
-
f"{
|
90
|
+
f"{index_url}/auth/verify",
|
88
91
|
headers={"Authorization": f"Bearer {api_key}"},
|
89
92
|
timeout=10.0,
|
90
93
|
)
|
@@ -97,16 +100,16 @@ def login_command(
|
|
97
100
|
console.print(f"[green]✓[/green] Developer name: {data.get('developer_name')}")
|
98
101
|
|
99
102
|
# Save to config
|
100
|
-
config =
|
103
|
+
config = get_index_config()
|
101
104
|
config["api_key"] = api_key
|
102
|
-
config["
|
105
|
+
config["index_url"] = index_url
|
103
106
|
config["user_uid"] = data.get("user_uid")
|
104
107
|
config["developer_name"] = data.get("developer_name")
|
105
108
|
config["email"] = data.get("email")
|
106
109
|
config["api_key_label"] = data.get("api_key_label")
|
107
|
-
|
110
|
+
save_index_config(config)
|
108
111
|
|
109
|
-
console.print(f"\n[green]✓[/green] API key saved to {
|
112
|
+
console.print(f"\n[green]✓[/green] API key saved to {INDEX_CONFIG_FILE}")
|
110
113
|
|
111
114
|
except requests.HTTPError as e:
|
112
115
|
if e.response.status_code == 401:
|
@@ -119,35 +122,37 @@ def login_command(
|
|
119
122
|
raise typer.Exit(1)
|
120
123
|
|
121
124
|
|
122
|
-
@
|
125
|
+
@index_commands.command(name="logout")
|
123
126
|
def logout_command() -> None:
|
124
127
|
"""Remove stored API key and credentials."""
|
125
|
-
if not
|
128
|
+
if not INDEX_CONFIG_FILE.exists():
|
126
129
|
console.print("[yellow]Not logged in.[/yellow]")
|
127
130
|
return
|
128
131
|
|
129
132
|
try:
|
130
|
-
|
133
|
+
INDEX_CONFIG_FILE.unlink()
|
131
134
|
console.print("[green]✓[/green] Logged out successfully")
|
132
|
-
console.print(f"[green]✓[/green] Removed {
|
135
|
+
console.print(f"[green]✓[/green] Removed {INDEX_CONFIG_FILE}")
|
133
136
|
except Exception as e:
|
134
137
|
console.print(f"[red]✗[/red] Error removing config: {e}")
|
135
138
|
raise typer.Exit(1)
|
136
139
|
|
137
140
|
|
138
|
-
@
|
141
|
+
@index_commands.command(name="whoami")
|
139
142
|
def whoami_command() -> None:
|
140
143
|
"""Show current logged-in developer identity."""
|
141
144
|
api_key = get_api_key()
|
142
145
|
if not api_key:
|
143
|
-
console.print(
|
146
|
+
console.print(
|
147
|
+
"[red]✗[/red] Not logged in. Run 'agentsystems index login' first."
|
148
|
+
)
|
144
149
|
raise typer.Exit(1)
|
145
150
|
|
146
|
-
|
151
|
+
index_url = get_index_url()
|
147
152
|
|
148
153
|
try:
|
149
154
|
response = requests.get(
|
150
|
-
f"{
|
155
|
+
f"{index_url}/auth/verify",
|
151
156
|
headers={"Authorization": f"Bearer {api_key}"},
|
152
157
|
timeout=10.0,
|
153
158
|
)
|
@@ -159,13 +164,13 @@ def whoami_command() -> None:
|
|
159
164
|
console.print(f" Email: {data.get('email')}")
|
160
165
|
if data.get("api_key_label"):
|
161
166
|
console.print(f" API Key: {data.get('api_key_label')}")
|
162
|
-
console.print(f"
|
167
|
+
console.print(f" Index URL: {index_url}")
|
163
168
|
console.print()
|
164
169
|
|
165
170
|
except requests.HTTPError as e:
|
166
171
|
if e.response.status_code == 401:
|
167
172
|
console.print(
|
168
|
-
"[red]✗[/red] Invalid or expired API key. Run 'agentsystems
|
173
|
+
"[red]✗[/red] Invalid or expired API key. Run 'agentsystems index login' again."
|
169
174
|
)
|
170
175
|
else:
|
171
176
|
console.print(f"[red]✗[/red] HTTP error: {e.response.status_code}")
|
@@ -175,7 +180,7 @@ def whoami_command() -> None:
|
|
175
180
|
raise typer.Exit(1)
|
176
181
|
|
177
182
|
|
178
|
-
@
|
183
|
+
@index_commands.command(name="validate")
|
179
184
|
def validate_command() -> None:
|
180
185
|
"""Validate agent.yaml without publishing."""
|
181
186
|
# Look for agent.yaml in current directory
|
@@ -231,10 +236,10 @@ def validate_command() -> None:
|
|
231
236
|
# Check developer name against authenticated user
|
232
237
|
api_key = get_api_key()
|
233
238
|
if api_key:
|
234
|
-
|
239
|
+
index_url = get_index_url()
|
235
240
|
try:
|
236
241
|
response = requests.get(
|
237
|
-
f"{
|
242
|
+
f"{index_url}/auth/verify",
|
238
243
|
headers={"Authorization": f"Bearer {api_key}"},
|
239
244
|
timeout=10.0,
|
240
245
|
)
|
@@ -272,19 +277,21 @@ def validate_command() -> None:
|
|
272
277
|
console.print("[green]✓[/green] Validation passed")
|
273
278
|
|
274
279
|
|
275
|
-
@
|
280
|
+
@index_commands.command(name="list")
|
276
281
|
def list_command() -> None:
|
277
|
-
"""List all your agents in the
|
282
|
+
"""List all your agents in the index."""
|
278
283
|
api_key = get_api_key()
|
279
284
|
if not api_key:
|
280
|
-
console.print(
|
285
|
+
console.print(
|
286
|
+
"[red]✗[/red] Not logged in. Run 'agentsystems index login' first."
|
287
|
+
)
|
281
288
|
raise typer.Exit(1)
|
282
289
|
|
283
|
-
|
290
|
+
index_url = get_index_url()
|
284
291
|
|
285
292
|
try:
|
286
293
|
response = requests.get(
|
287
|
-
f"{
|
294
|
+
f"{index_url}/agents/me",
|
288
295
|
headers={"Authorization": f"Bearer {api_key}"},
|
289
296
|
timeout=10.0,
|
290
297
|
)
|
@@ -297,7 +304,7 @@ def list_command() -> None:
|
|
297
304
|
if not agents:
|
298
305
|
console.print("\n[yellow]No agents found.[/yellow]")
|
299
306
|
console.print(
|
300
|
-
"Publish your first agent with: [cyan]agentsystems
|
307
|
+
"Publish your first agent with: [cyan]agentsystems index publish[/cyan]"
|
301
308
|
)
|
302
309
|
return
|
303
310
|
|
@@ -336,7 +343,7 @@ def list_command() -> None:
|
|
336
343
|
except requests.HTTPError as e:
|
337
344
|
if e.response.status_code == 401:
|
338
345
|
console.print(
|
339
|
-
"[red]✗[/red] Invalid or expired API key. Run 'agentsystems
|
346
|
+
"[red]✗[/red] Invalid or expired API key. Run 'agentsystems index login' again."
|
340
347
|
)
|
341
348
|
else:
|
342
349
|
console.print(f"[red]✗[/red] HTTP error: {e.response.status_code}")
|
@@ -346,15 +353,17 @@ def list_command() -> None:
|
|
346
353
|
raise typer.Exit(1)
|
347
354
|
|
348
355
|
|
349
|
-
@
|
356
|
+
@index_commands.command(name="publish")
|
350
357
|
def publish_command() -> None:
|
351
|
-
"""Publish or update an agent in the
|
358
|
+
"""Publish or update an agent in the index from agent.yaml."""
|
352
359
|
api_key = get_api_key()
|
353
360
|
if not api_key:
|
354
|
-
console.print(
|
361
|
+
console.print(
|
362
|
+
"[red]✗[/red] Not logged in. Run 'agentsystems index login' first."
|
363
|
+
)
|
355
364
|
raise typer.Exit(1)
|
356
365
|
|
357
|
-
|
366
|
+
index_url = get_index_url()
|
358
367
|
|
359
368
|
# Look for agent.yaml in current directory
|
360
369
|
agent_yaml_path = pathlib.Path.cwd() / "agent.yaml"
|
@@ -381,7 +390,7 @@ def publish_command() -> None:
|
|
381
390
|
# Verify API key and get authenticated developer name (don't trust cached config)
|
382
391
|
try:
|
383
392
|
verify_response = requests.get(
|
384
|
-
f"{
|
393
|
+
f"{index_url}/auth/verify",
|
385
394
|
headers={"Authorization": f"Bearer {api_key}"},
|
386
395
|
timeout=10.0,
|
387
396
|
)
|
@@ -395,7 +404,7 @@ def publish_command() -> None:
|
|
395
404
|
except requests.HTTPError as e:
|
396
405
|
if e.response.status_code == 401:
|
397
406
|
console.print(
|
398
|
-
"[red]✗[/red] Invalid or expired API key. Run 'agentsystems
|
407
|
+
"[red]✗[/red] Invalid or expired API key. Run 'agentsystems index login' again."
|
399
408
|
)
|
400
409
|
else:
|
401
410
|
console.print(f"[red]✗[/red] Verification failed: {e}")
|
@@ -441,7 +450,7 @@ def publish_command() -> None:
|
|
441
450
|
console.print()
|
442
451
|
|
443
452
|
# Ask for confirmation
|
444
|
-
confirm = typer.confirm("Publish this agent to the
|
453
|
+
confirm = typer.confirm("Publish this agent to the index?")
|
445
454
|
if not confirm:
|
446
455
|
console.print("[yellow]Publish cancelled.[/yellow]")
|
447
456
|
raise typer.Exit(0)
|
@@ -449,7 +458,7 @@ def publish_command() -> None:
|
|
449
458
|
try:
|
450
459
|
# Try to create first
|
451
460
|
response = requests.post(
|
452
|
-
f"{
|
461
|
+
f"{index_url}/agents",
|
453
462
|
headers={"Authorization": f"Bearer {api_key}"},
|
454
463
|
json=payload,
|
455
464
|
timeout=10.0,
|
@@ -462,7 +471,7 @@ def publish_command() -> None:
|
|
462
471
|
# Fetch current agent settings
|
463
472
|
try:
|
464
473
|
current_response = requests.get(
|
465
|
-
f"{
|
474
|
+
f"{index_url}/agents/{authenticated_developer}/{name}",
|
466
475
|
headers={"Authorization": f"Bearer {api_key}"},
|
467
476
|
timeout=10.0,
|
468
477
|
)
|
@@ -494,7 +503,7 @@ def publish_command() -> None:
|
|
494
503
|
|
495
504
|
if changes:
|
496
505
|
console.print(
|
497
|
-
"\n[yellow]Warning: Publishing will overwrite the following
|
506
|
+
"\n[yellow]Warning: Publishing will overwrite the following index settings:[/yellow]"
|
498
507
|
)
|
499
508
|
for change in changes:
|
500
509
|
console.print(
|
@@ -518,7 +527,7 @@ def publish_command() -> None:
|
|
518
527
|
|
519
528
|
# Update agent
|
520
529
|
response = requests.put(
|
521
|
-
f"{
|
530
|
+
f"{index_url}/agents/{authenticated_developer}/{name}",
|
522
531
|
headers={"Authorization": f"Bearer {api_key}"},
|
523
532
|
json=payload,
|
524
533
|
timeout=10.0,
|
@@ -543,7 +552,7 @@ def publish_command() -> None:
|
|
543
552
|
except requests.HTTPError as e:
|
544
553
|
if e.response.status_code == 401:
|
545
554
|
console.print(
|
546
|
-
"[red]✗[/red] Invalid or expired API key. Run 'agentsystems
|
555
|
+
"[red]✗[/red] Invalid or expired API key. Run 'agentsystems index login' again."
|
547
556
|
)
|
548
557
|
else:
|
549
558
|
error_detail = e.response.json().get("detail", str(e))
|
@@ -554,7 +563,7 @@ def publish_command() -> None:
|
|
554
563
|
"[red]✗[/red] Error: Listed agents disabled for this developer"
|
555
564
|
)
|
556
565
|
console.print(
|
557
|
-
"To publish as listed, run: [cyan]agentsystems
|
566
|
+
"To publish as listed, run: [cyan]agentsystems index allow-listed --enable[/cyan]"
|
558
567
|
)
|
559
568
|
else:
|
560
569
|
console.print(f"[red]✗[/red] Error: {error_detail}")
|
@@ -564,18 +573,20 @@ def publish_command() -> None:
|
|
564
573
|
raise typer.Exit(1)
|
565
574
|
|
566
575
|
|
567
|
-
@
|
576
|
+
@index_commands.command(name="delete")
|
568
577
|
def delete_command(
|
569
578
|
name: str = typer.Argument(..., help="Agent name to delete"),
|
570
579
|
force: bool = typer.Option(False, "--force", "-f", help="Skip confirmation"),
|
571
580
|
) -> None:
|
572
|
-
"""Delete an agent from the
|
581
|
+
"""Delete an agent from the index."""
|
573
582
|
api_key = get_api_key()
|
574
583
|
if not api_key:
|
575
|
-
console.print(
|
584
|
+
console.print(
|
585
|
+
"[red]✗[/red] Not logged in. Run 'agentsystems index login' first."
|
586
|
+
)
|
576
587
|
raise typer.Exit(1)
|
577
588
|
|
578
|
-
|
589
|
+
index_url = get_index_url()
|
579
590
|
|
580
591
|
if not force:
|
581
592
|
confirm = typer.confirm(f"Are you sure you want to delete '{name}'?")
|
@@ -588,13 +599,13 @@ def delete_command(
|
|
588
599
|
developer_name = get_developer_name()
|
589
600
|
if not developer_name:
|
590
601
|
console.print(
|
591
|
-
"[red]✗[/red] Developer name not found. Run 'agentsystems
|
602
|
+
"[red]✗[/red] Developer name not found. Run 'agentsystems index login' again."
|
592
603
|
)
|
593
604
|
raise typer.Exit(1)
|
594
605
|
|
595
606
|
# Delete agent
|
596
607
|
response = requests.delete(
|
597
|
-
f"{
|
608
|
+
f"{index_url}/agents/{developer_name}/{name}",
|
598
609
|
headers={"Authorization": f"Bearer {api_key}"},
|
599
610
|
timeout=10.0,
|
600
611
|
)
|
@@ -607,7 +618,7 @@ def delete_command(
|
|
607
618
|
except requests.HTTPError as e:
|
608
619
|
if e.response.status_code == 401:
|
609
620
|
console.print(
|
610
|
-
"[red]✗[/red] Invalid or expired API key. Run 'agentsystems
|
621
|
+
"[red]✗[/red] Invalid or expired API key. Run 'agentsystems index login' again."
|
611
622
|
)
|
612
623
|
elif e.response.status_code == 404:
|
613
624
|
console.print(f"[red]✗[/red] Agent '{name}' not found")
|
@@ -620,7 +631,7 @@ def delete_command(
|
|
620
631
|
raise typer.Exit(1)
|
621
632
|
|
622
633
|
|
623
|
-
@
|
634
|
+
@index_commands.command(name="allow-listed")
|
624
635
|
def allow_listed_command(
|
625
636
|
enable: bool = typer.Option(False, "--enable", help="Enable listed agents"),
|
626
637
|
disable: bool = typer.Option(False, "--disable", help="Disable listed agents"),
|
@@ -634,10 +645,12 @@ def allow_listed_command(
|
|
634
645
|
"""Enable or disable listed agents for your developer account."""
|
635
646
|
api_key = get_api_key()
|
636
647
|
if not api_key:
|
637
|
-
console.print(
|
648
|
+
console.print(
|
649
|
+
"[red]✗[/red] Not logged in. Run 'agentsystems index login' first."
|
650
|
+
)
|
638
651
|
raise typer.Exit(1)
|
639
652
|
|
640
|
-
|
653
|
+
index_url = get_index_url()
|
641
654
|
|
642
655
|
# Validate flags
|
643
656
|
if enable and disable:
|
@@ -665,7 +678,7 @@ def allow_listed_command(
|
|
665
678
|
try:
|
666
679
|
# Update developer settings
|
667
680
|
response = requests.patch(
|
668
|
-
f"{
|
681
|
+
f"{index_url}/developers/me",
|
669
682
|
headers={"Authorization": f"Bearer {api_key}"},
|
670
683
|
json={"allow_listed_agents": enable},
|
671
684
|
timeout=10.0,
|
@@ -679,7 +692,7 @@ def allow_listed_command(
|
|
679
692
|
if cascade:
|
680
693
|
# Unlist all existing agents
|
681
694
|
unlist_response = requests.post(
|
682
|
-
f"{
|
695
|
+
f"{index_url}/developers/me/unlist-all",
|
683
696
|
headers={"Authorization": f"Bearer {api_key}"},
|
684
697
|
timeout=10.0,
|
685
698
|
)
|
@@ -697,7 +710,7 @@ def allow_listed_command(
|
|
697
710
|
except requests.HTTPError as e:
|
698
711
|
if e.response.status_code == 401:
|
699
712
|
console.print(
|
700
|
-
"[red]✗[/red] Invalid or expired API key. Run 'agentsystems
|
713
|
+
"[red]✗[/red] Invalid or expired API key. Run 'agentsystems index login' again."
|
701
714
|
)
|
702
715
|
else:
|
703
716
|
error_detail = e.response.json().get("detail", str(e))
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
This package relies on the third-party Python packages listed below.
|
4
4
|
|
5
|
-
## agentsystems-sdk 0.5.
|
5
|
+
## agentsystems-sdk 0.5.10
|
6
6
|
- License: UNKNOWN
|
7
7
|
- URL: UNKNOWN
|
8
8
|
- Author: AgentSystems <support@agentsystems.ai>
|
@@ -1594,8 +1594,8 @@ THE SOFTWARE.
|
|
1594
1594
|
```
|
1595
1595
|
</details>
|
1596
1596
|
|
1597
|
-
## idna 3.
|
1598
|
-
- License:
|
1597
|
+
## idna 3.11
|
1598
|
+
- License: UNKNOWN
|
1599
1599
|
- URL: https://github.com/kjd/idna
|
1600
1600
|
- Author: Kim Davies <kim+pypi@gumleaf.org>
|
1601
1601
|
|
@@ -1604,7 +1604,7 @@ THE SOFTWARE.
|
|
1604
1604
|
```
|
1605
1605
|
BSD 3-Clause License
|
1606
1606
|
|
1607
|
-
Copyright (c) 2013-
|
1607
|
+
Copyright (c) 2013-2025, Kim Davies and contributors.
|
1608
1608
|
All rights reserved.
|
1609
1609
|
|
1610
1610
|
Redistribution and use in source and binary forms, with or without
|
@@ -29,7 +29,7 @@
|
|
29
29
|
"LicenseText": " Apache License\n Version 2.0, January 2004\n http://www.apache.org/licenses/\n\n TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n 1. Definitions.\n\n \"License\" shall mean the terms and conditions for use, reproduction,\n and distribution as defined by Sections 1 through 9 of this document.\n\n \"Licensor\" shall mean the copyright owner or entity authorized by\n the copyright owner that is granting the License.\n\n \"Legal Entity\" shall mean the union of the acting entity and all\n other entities that control, are controlled by, or are under common\n control with that entity. For the purposes of this definition,\n \"control\" means (i) the power, direct or indirect, to cause the\n direction or management of such entity, whether by contract or\n otherwise, or (ii) ownership of fifty percent (50%) or more of the\n outstanding shares, or (iii) beneficial ownership of such entity.\n\n \"You\" (or \"Your\") shall mean an individual or Legal Entity\n exercising permissions granted by this License.\n\n \"Source\" form shall mean the preferred form for making modifications,\n including but not limited to software source code, documentation\n source, and configuration files.\n\n \"Object\" form shall mean any form resulting from mechanical\n transformation or translation of a Source form, including but\n not limited to compiled object code, generated documentation,\n and conversions to other media types.\n\n \"Work\" shall mean the work of authorship, whether in Source or\n Object form, made available under the License, as indicated by a\n copyright notice that is included in or attached to the work\n (an example is provided in the Appendix below).\n\n \"Derivative Works\" shall mean any work, whether in Source or Object\n form, that is based on (or derived from) the Work and for which the\n editorial revisions, annotations, elaborations, or other modifications\n represent, as a whole, an original work of authorship. For the purposes\n of this License, Derivative Works shall not include works that remain\n separable from, or merely link (or bind by name) to the interfaces of,\n the Work and Derivative Works thereof.\n\n \"Contribution\" shall mean any work of authorship, including\n the original version of the Work and any modifications or additions\n to that Work or Derivative Works thereof, that is intentionally\n submitted to Licensor for inclusion in the Work by the copyright owner\n or by an individual or Legal Entity authorized to submit on behalf of\n the copyright owner. For the purposes of this definition, \"submitted\"\n means any form of electronic, verbal, or written communication sent\n to the Licensor or its representatives, including but not limited to\n communication on electronic mailing lists, source code control systems,\n and issue tracking systems that are managed by, or on behalf of, the\n Licensor for the purpose of discussing and improving the Work, but\n excluding communication that is conspicuously marked or otherwise\n designated in writing by the copyright owner as \"Not a Contribution.\"\n\n \"Contributor\" shall mean Licensor and any individual or Legal Entity\n on behalf of whom a Contribution has been received by Licensor and\n subsequently incorporated within the Work.\n\n 2. Grant of Copyright License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n copyright license to reproduce, prepare Derivative Works of,\n publicly display, publicly perform, sublicense, and distribute the\n Work and such Derivative Works in Source or Object form.\n\n 3. Grant of Patent License. Subject to the terms and conditions of\n this License, each Contributor hereby grants to You a perpetual,\n worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n (except as stated in this section) patent license to make, have made,\n use, offer to sell, sell, import, and otherwise transfer the Work,\n where such license applies only to those patent claims licensable\n by such Contributor that are necessarily infringed by their\n Contribution(s) alone or by combination of their Contribution(s)\n with the Work to which such Contribution(s) was submitted. If You\n institute patent litigation against any entity (including a\n cross-claim or counterclaim in a lawsuit) alleging that the Work\n or a Contribution incorporated within the Work constitutes direct\n or contributory patent infringement, then any patent licenses\n granted to You under this License for that Work shall terminate\n as of the date such litigation is filed.\n\n 4. Redistribution. You may reproduce and distribute copies of the\n Work or Derivative Works thereof in any medium, with or without\n modifications, and in Source or Object form, provided that You\n meet the following conditions:\n\n (a) You must give any other recipients of the Work or\n Derivative Works a copy of this License; and\n\n (b) You must cause any modified files to carry prominent notices\n stating that You changed the files; and\n\n (c) You must retain, in the Source form of any Derivative Works\n that You distribute, all copyright, patent, trademark, and\n attribution notices from the Source form of the Work,\n excluding those notices that do not pertain to any part of\n the Derivative Works; and\n\n (d) If the Work includes a \"NOTICE\" text file as part of its\n distribution, then any Derivative Works that You distribute must\n include a readable copy of the attribution notices contained\n within such NOTICE file, excluding those notices that do not\n pertain to any part of the Derivative Works, in at least one\n of the following places: within a NOTICE text file distributed\n as part of the Derivative Works; within the Source form or\n documentation, if provided along with the Derivative Works; or,\n within a display generated by the Derivative Works, if and\n wherever such third-party notices normally appear. The contents\n of the NOTICE file are for informational purposes only and\n do not modify the License. You may add Your own attribution\n notices within Derivative Works that You distribute, alongside\n or as an addendum to the NOTICE text from the Work, provided\n that such additional attribution notices cannot be construed\n as modifying the License.\n\n You may add Your own copyright statement to Your modifications and\n may provide additional or different license terms and conditions\n for use, reproduction, or distribution of Your modifications, or\n for any such Derivative Works as a whole, provided Your use,\n reproduction, and distribution of the Work otherwise complies with\n the conditions stated in this License.\n\n 5. Submission of Contributions. Unless You explicitly state otherwise,\n any Contribution intentionally submitted for inclusion in the Work\n by You to the Licensor shall be under the terms and conditions of\n this License, without any additional terms or conditions.\n Notwithstanding the above, nothing herein shall supersede or modify\n the terms of any separate license agreement you may have executed\n with Licensor regarding such Contributions.\n\n 6. Trademarks. This License does not grant permission to use the trade\n names, trademarks, service marks, or product names of the Licensor,\n except as required for reasonable and customary use in describing the\n origin of the Work and reproducing the content of the NOTICE file.\n\n 7. Disclaimer of Warranty. Unless required by applicable law or\n agreed to in writing, Licensor provides the Work (and each\n Contributor provides its Contributions) on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n implied, including, without limitation, any warranties or conditions\n of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n PARTICULAR PURPOSE. You are solely responsible for determining the\n appropriateness of using or redistributing the Work and assume any\n risks associated with Your exercise of permissions under this License.\n\n 8. Limitation of Liability. In no event and under no legal theory,\n whether in tort (including negligence), contract, or otherwise,\n unless required by applicable law (such as deliberate and grossly\n negligent acts) or agreed to in writing, shall any Contributor be\n liable to You for damages, including any direct, indirect, special,\n incidental, or consequential damages of any character arising as a\n result of this License or out of the use or inability to use the\n Work (including but not limited to damages for loss of goodwill,\n work stoppage, computer failure or malfunction, or any and all\n other commercial damages or losses), even if such Contributor\n has been advised of the possibility of such damages.\n\n 9. Accepting Warranty or Additional Liability. While redistributing\n the Work or Derivative Works thereof, You may choose to offer,\n and charge a fee for, acceptance of support, warranty, indemnity,\n or other liability obligations and/or rights consistent with this\n License. However, in accepting such obligations, You may act only\n on Your own behalf and on Your sole responsibility, not on behalf\n of any other Contributor, and only if You agree to indemnify,\n defend, and hold each Contributor harmless for any liability\n incurred by, or claims asserted against, such Contributor by reason\n of your accepting any such warranty or additional liability.\n\n END OF TERMS AND CONDITIONS\n\n APPENDIX: How to apply the Apache License to your work.\n\n To apply the Apache License to your work, attach the following\n boilerplate notice, with the fields enclosed by brackets \"[]\"\n replaced with your own identifying information. (Don't include\n the brackets!) The text should be enclosed in the appropriate\n comment syntax for the file format. We also recommend that a\n file or class name and description of purpose be included on the\n same \"printed page\" as the copyright notice for easier\n identification within third-party archives.\n\n Copyright [yyyy] [name of copyright owner]\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n",
|
30
30
|
"Name": "agentsystems-sdk",
|
31
31
|
"URL": "UNKNOWN",
|
32
|
-
"Version": "0.5.
|
32
|
+
"Version": "0.5.10"
|
33
33
|
},
|
34
34
|
{
|
35
35
|
"Author": "\"Jason R. Coombs\" <jaraco@jaraco.com>",
|
@@ -153,11 +153,11 @@
|
|
153
153
|
},
|
154
154
|
{
|
155
155
|
"Author": "Kim Davies <kim+pypi@gumleaf.org>",
|
156
|
-
"License": "
|
157
|
-
"LicenseText": "BSD 3-Clause License\n\nCopyright (c) 2013-
|
156
|
+
"License": "UNKNOWN",
|
157
|
+
"LicenseText": "BSD 3-Clause License\n\nCopyright (c) 2013-2025, Kim Davies and contributors.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n",
|
158
158
|
"Name": "idna",
|
159
159
|
"URL": "https://github.com/kjd/idna",
|
160
|
-
"Version": "3.
|
160
|
+
"Version": "3.11"
|
161
161
|
},
|
162
162
|
{
|
163
163
|
"Author": "\"Jason R. Coombs\" <jaraco@jaraco.com>",
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: agentsystems-sdk
|
3
|
-
Version: 0.5.
|
3
|
+
Version: 0.5.10
|
4
4
|
Summary: AgentSystems Python SDK and CLI
|
5
5
|
Author-email: AgentSystems <support@agentsystems.ai>
|
6
6
|
License-Expression: Apache-2.0
|
@@ -101,6 +101,17 @@ All commands are available through `agentsystems` (or the shorter alias `agntsys
|
|
101
101
|
| `agentsystems run AGENT PAYLOAD` | Invoke an agent with JSON payload and optional file uploads, stream progress, and return results. |
|
102
102
|
| `agentsystems update [PROJECT_DIR]` | Update core platform images (agent-control-plane, agentsystems-ui) to latest versions. Faster than re-running `up` when you only need to update platform components. |
|
103
103
|
|
104
|
+
### Index Commands
|
105
|
+
|
106
|
+
| Command | Description |
|
107
|
+
|---------|-------------|
|
108
|
+
| `agentsystems index login` | Login to AgentSystems Index - opens browser for authentication and stores API key locally. |
|
109
|
+
| `agentsystems index logout` | Logout from AgentSystems Index - removes stored API key from local machine. |
|
110
|
+
| `agentsystems index list` | List all your published agents on the index. |
|
111
|
+
| `agentsystems index publish [PATH]` | Publish agent to the index. Use `--listed` for public agents. Agents are unlisted (private) by default. |
|
112
|
+
| `agentsystems index delete DEVELOPER/AGENT` | Permanently remove an agent from the index. |
|
113
|
+
| `agentsystems index allow-listed --enable\|--disable` | Enable or disable listed (public) agents. When disabling, use `--preserve` to keep existing agents or `--cascade` to unlist all. |
|
114
|
+
|
104
115
|
### `up` options
|
105
116
|
|
106
117
|
```
|
@@ -1,13 +1,13 @@
|
|
1
1
|
agentsystems_sdk/__init__.py,sha256=e0cW9_DFgYAM8oTyOXL_FyuqF_PELxPGLKTayhp4PqA,407
|
2
|
-
agentsystems_sdk/cli.py,sha256=
|
2
|
+
agentsystems_sdk/cli.py,sha256=ZQClQmm1Uqr4SzgmZ-cxdNCxEUe6b4_6bx6IIJ4gyu0,2589
|
3
3
|
agentsystems_sdk/config.py,sha256=kB_Rkju287qaKhKGdeYWeJjB0QmTHy7o60mxUXdxNLs,6464
|
4
4
|
agentsystems_sdk/progress_tracker.py,sha256=34zW26QPlCGORkOYOK0cqbYIGvl5ga4Jp9cTN4Ar0RU,4082
|
5
5
|
agentsystems_sdk/utils.py,sha256=sdza_FsmoZ8L4gS0HU3jQ6JjNfL030dhIkS8IOp5S6o,9230
|
6
|
-
agentsystems_sdk/commands/__init__.py,sha256=
|
6
|
+
agentsystems_sdk/commands/__init__.py,sha256=fOy0kUXhO7sWYpWseRDHAF1jT_RwDZBO45Vzv1Rdiu8,757
|
7
7
|
agentsystems_sdk/commands/artifacts.py,sha256=KTOEu0Cg9aeFEaNfOUW-lSJM7dewOC9KJYtyw8vESM4,1113
|
8
8
|
agentsystems_sdk/commands/clean.py,sha256=-wyy7CleRmEew3SUlff0iYsCMLsj_JcwhlpqgQYhZZk,1942
|
9
9
|
agentsystems_sdk/commands/down.py,sha256=blWdlGV70pecXkbeOd7mDzeB80jSE-e7cHbLoCzJcas,4389
|
10
|
-
agentsystems_sdk/commands/
|
10
|
+
agentsystems_sdk/commands/index.py,sha256=rrp-NqZjWpoYSZ2nIdUCtZ7TftmLKvGwCEIxuO-_Qfk,25959
|
11
11
|
agentsystems_sdk/commands/init.py,sha256=xzc-zcN-8PpxpAuAGLwObRbBdx9V9c0QN12HA6Llgsc,7352
|
12
12
|
agentsystems_sdk/commands/logs.py,sha256=2BpoXuQr_Vq_ou7oj1x-oYC552enWZiuKqoOEJOXDd4,1225
|
13
13
|
agentsystems_sdk/commands/restart.py,sha256=0dxGHCxAI-_fjIzy_BYwnk_-pfR8UhffHVAW6s12o0k,2641
|
@@ -31,13 +31,13 @@ agentsystems_sdk/deployments_scaffold/compose/local/db-backup/Dockerfile,sha256=
|
|
31
31
|
agentsystems_sdk/deployments_scaffold/compose/local/db-backup/entrypoint.sh,sha256=7as7UNRCR5ziTOUWJGHtPgCb70oNLImWmGJsgTy0t-A,2462
|
32
32
|
agentsystems_sdk/deployments_scaffold/compose/local/postgres-init/audit.sql,sha256=96812AZ2Tm57rmIi5de2nsAwxnn_AkJmavJgBn_MKKE,1796
|
33
33
|
agentsystems_sdk/deployments_scaffold/schema/agentsystems-config.schema.json,sha256=fhZfE_fVSbv0vYvh9JT5EZC2XYjp9v54cP0UK6hH18A,1374
|
34
|
-
agentsystems_sdk/licenses/python/ATTRIBUTIONS.md,sha256=
|
35
|
-
agentsystems_sdk/licenses/python/THIRD_PARTY_LICENSES.json,sha256=
|
36
|
-
agentsystems_sdk/licenses/python/THIRD_PARTY_REQUIREMENTS.txt,sha256=
|
37
|
-
agentsystems_sdk-0.5.
|
38
|
-
agentsystems_sdk-0.5.
|
39
|
-
agentsystems_sdk-0.5.
|
40
|
-
agentsystems_sdk-0.5.
|
41
|
-
agentsystems_sdk-0.5.
|
42
|
-
agentsystems_sdk-0.5.
|
43
|
-
agentsystems_sdk-0.5.
|
34
|
+
agentsystems_sdk/licenses/python/ATTRIBUTIONS.md,sha256=uaU_SVPZTmSrv_0QiJUY5IFBz7LKlXXV0EdWz1nNMLs,186406
|
35
|
+
agentsystems_sdk/licenses/python/THIRD_PARTY_LICENSES.json,sha256=zLGfgV7yyXe2nkjIuS3wkbbjB1r6p3rCxQiTHAd_sHM,191174
|
36
|
+
agentsystems_sdk/licenses/python/THIRD_PARTY_REQUIREMENTS.txt,sha256=3hg7IuEDc49uJygM3hLJATwVQmi3hPf8cvwTxHrir6k,1000
|
37
|
+
agentsystems_sdk-0.5.10.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
38
|
+
agentsystems_sdk-0.5.10.dist-info/licenses/NOTICE,sha256=SGMFwyEoZ6NG19ZrdvwYt43lig12rEl5z8XvWMGej6c,918
|
39
|
+
agentsystems_sdk-0.5.10.dist-info/METADATA,sha256=a8xMNF6-ivNXA6syb4eqYUMmlJ7EamIb8hibhKAPsk0,13090
|
40
|
+
agentsystems_sdk-0.5.10.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
41
|
+
agentsystems_sdk-0.5.10.dist-info/entry_points.txt,sha256=0lejF8v40DAB0D2612UWLLA3e1Ux8TyyLU6yJc0vQkQ,93
|
42
|
+
agentsystems_sdk-0.5.10.dist-info/top_level.txt,sha256=nkHK6IHAO6-yoZJukUr0CruzkP8weBKraPnsj2FmDV8,17
|
43
|
+
agentsystems_sdk-0.5.10.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|