glaip-sdk 0.6.15b2__py3-none-any.whl → 0.6.16__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.
- glaip_sdk/agents/__init__.py +27 -0
- glaip_sdk/agents/base.py +1196 -0
- glaip_sdk/cli/__init__.py +9 -0
- glaip_sdk/cli/account_store.py +540 -0
- glaip_sdk/cli/agent_config.py +78 -0
- glaip_sdk/cli/auth.py +699 -0
- glaip_sdk/cli/commands/__init__.py +5 -0
- glaip_sdk/cli/commands/accounts.py +746 -0
- glaip_sdk/cli/commands/agents.py +1509 -0
- glaip_sdk/cli/commands/common_config.py +104 -0
- glaip_sdk/cli/commands/configure.py +896 -0
- glaip_sdk/cli/commands/mcps.py +1356 -0
- glaip_sdk/cli/commands/models.py +69 -0
- glaip_sdk/cli/commands/tools.py +576 -0
- glaip_sdk/cli/commands/transcripts.py +755 -0
- glaip_sdk/cli/commands/update.py +61 -0
- glaip_sdk/cli/config.py +95 -0
- glaip_sdk/cli/constants.py +38 -0
- glaip_sdk/cli/context.py +150 -0
- glaip_sdk/cli/core/__init__.py +79 -0
- glaip_sdk/cli/core/context.py +124 -0
- glaip_sdk/cli/core/output.py +851 -0
- glaip_sdk/cli/core/prompting.py +649 -0
- glaip_sdk/cli/core/rendering.py +187 -0
- glaip_sdk/cli/display.py +355 -0
- glaip_sdk/cli/hints.py +57 -0
- glaip_sdk/cli/io.py +112 -0
- glaip_sdk/cli/main.py +615 -0
- glaip_sdk/cli/masking.py +136 -0
- glaip_sdk/cli/mcp_validators.py +287 -0
- glaip_sdk/cli/pager.py +266 -0
- glaip_sdk/cli/parsers/__init__.py +7 -0
- glaip_sdk/cli/parsers/json_input.py +177 -0
- glaip_sdk/cli/resolution.py +67 -0
- glaip_sdk/cli/rich_helpers.py +27 -0
- glaip_sdk/cli/slash/__init__.py +15 -0
- glaip_sdk/cli/slash/accounts_controller.py +578 -0
- glaip_sdk/cli/slash/accounts_shared.py +75 -0
- glaip_sdk/cli/slash/agent_session.py +285 -0
- glaip_sdk/cli/slash/prompt.py +256 -0
- glaip_sdk/cli/slash/remote_runs_controller.py +566 -0
- glaip_sdk/cli/slash/session.py +1708 -0
- glaip_sdk/cli/slash/tui/__init__.py +9 -0
- glaip_sdk/cli/slash/tui/accounts_app.py +876 -0
- glaip_sdk/cli/slash/tui/background_tasks.py +72 -0
- glaip_sdk/cli/slash/tui/loading.py +58 -0
- glaip_sdk/cli/slash/tui/remote_runs_app.py +628 -0
- glaip_sdk/cli/transcript/__init__.py +31 -0
- glaip_sdk/cli/transcript/cache.py +536 -0
- glaip_sdk/cli/transcript/capture.py +329 -0
- glaip_sdk/cli/transcript/export.py +38 -0
- glaip_sdk/cli/transcript/history.py +815 -0
- glaip_sdk/cli/transcript/launcher.py +77 -0
- glaip_sdk/cli/transcript/viewer.py +374 -0
- glaip_sdk/cli/update_notifier.py +290 -0
- glaip_sdk/cli/utils.py +263 -0
- glaip_sdk/cli/validators.py +238 -0
- glaip_sdk/client/__init__.py +11 -0
- glaip_sdk/client/_agent_payloads.py +520 -0
- glaip_sdk/client/agent_runs.py +147 -0
- glaip_sdk/client/agents.py +1335 -0
- glaip_sdk/client/base.py +502 -0
- glaip_sdk/client/main.py +249 -0
- glaip_sdk/client/mcps.py +370 -0
- glaip_sdk/client/run_rendering.py +700 -0
- glaip_sdk/client/shared.py +21 -0
- glaip_sdk/client/tools.py +661 -0
- glaip_sdk/client/validators.py +198 -0
- glaip_sdk/config/constants.py +52 -0
- glaip_sdk/mcps/__init__.py +21 -0
- glaip_sdk/mcps/base.py +345 -0
- glaip_sdk/models/__init__.py +90 -0
- glaip_sdk/models/agent.py +47 -0
- glaip_sdk/models/agent_runs.py +116 -0
- glaip_sdk/models/common.py +42 -0
- glaip_sdk/models/mcp.py +33 -0
- glaip_sdk/models/tool.py +33 -0
- glaip_sdk/payload_schemas/__init__.py +7 -0
- glaip_sdk/payload_schemas/agent.py +85 -0
- glaip_sdk/registry/__init__.py +55 -0
- glaip_sdk/registry/agent.py +164 -0
- glaip_sdk/registry/base.py +139 -0
- glaip_sdk/registry/mcp.py +253 -0
- glaip_sdk/registry/tool.py +232 -0
- glaip_sdk/runner/__init__.py +59 -0
- glaip_sdk/runner/base.py +84 -0
- glaip_sdk/runner/deps.py +112 -0
- glaip_sdk/runner/langgraph.py +782 -0
- glaip_sdk/runner/mcp_adapter/__init__.py +13 -0
- glaip_sdk/runner/mcp_adapter/base_mcp_adapter.py +43 -0
- glaip_sdk/runner/mcp_adapter/langchain_mcp_adapter.py +257 -0
- glaip_sdk/runner/mcp_adapter/mcp_config_builder.py +95 -0
- glaip_sdk/runner/tool_adapter/__init__.py +18 -0
- glaip_sdk/runner/tool_adapter/base_tool_adapter.py +44 -0
- glaip_sdk/runner/tool_adapter/langchain_tool_adapter.py +219 -0
- glaip_sdk/tools/__init__.py +22 -0
- glaip_sdk/tools/base.py +435 -0
- glaip_sdk/utils/__init__.py +86 -0
- glaip_sdk/utils/a2a/__init__.py +34 -0
- glaip_sdk/utils/a2a/event_processor.py +188 -0
- glaip_sdk/utils/agent_config.py +194 -0
- glaip_sdk/utils/bundler.py +267 -0
- glaip_sdk/utils/client.py +111 -0
- glaip_sdk/utils/client_utils.py +486 -0
- glaip_sdk/utils/datetime_helpers.py +58 -0
- glaip_sdk/utils/discovery.py +78 -0
- glaip_sdk/utils/display.py +135 -0
- glaip_sdk/utils/export.py +143 -0
- glaip_sdk/utils/general.py +61 -0
- glaip_sdk/utils/import_export.py +168 -0
- glaip_sdk/utils/import_resolver.py +492 -0
- glaip_sdk/utils/instructions.py +101 -0
- glaip_sdk/utils/rendering/__init__.py +115 -0
- glaip_sdk/utils/rendering/formatting.py +264 -0
- glaip_sdk/utils/rendering/layout/__init__.py +64 -0
- glaip_sdk/utils/rendering/layout/panels.py +156 -0
- glaip_sdk/utils/rendering/layout/progress.py +202 -0
- glaip_sdk/utils/rendering/layout/summary.py +74 -0
- glaip_sdk/utils/rendering/layout/transcript.py +606 -0
- glaip_sdk/utils/rendering/models.py +85 -0
- glaip_sdk/utils/rendering/renderer/__init__.py +55 -0
- glaip_sdk/utils/rendering/renderer/base.py +1024 -0
- glaip_sdk/utils/rendering/renderer/config.py +27 -0
- glaip_sdk/utils/rendering/renderer/console.py +55 -0
- glaip_sdk/utils/rendering/renderer/debug.py +178 -0
- glaip_sdk/utils/rendering/renderer/factory.py +138 -0
- glaip_sdk/utils/rendering/renderer/stream.py +202 -0
- glaip_sdk/utils/rendering/renderer/summary_window.py +79 -0
- glaip_sdk/utils/rendering/renderer/thinking.py +273 -0
- glaip_sdk/utils/rendering/renderer/toggle.py +182 -0
- glaip_sdk/utils/rendering/renderer/tool_panels.py +442 -0
- glaip_sdk/utils/rendering/renderer/transcript_mode.py +162 -0
- glaip_sdk/utils/rendering/state.py +204 -0
- glaip_sdk/utils/rendering/step_tree_state.py +100 -0
- glaip_sdk/utils/rendering/steps/__init__.py +34 -0
- glaip_sdk/utils/rendering/steps/event_processor.py +778 -0
- glaip_sdk/utils/rendering/steps/format.py +176 -0
- glaip_sdk/utils/rendering/steps/manager.py +387 -0
- glaip_sdk/utils/rendering/timing.py +36 -0
- glaip_sdk/utils/rendering/viewer/__init__.py +21 -0
- glaip_sdk/utils/rendering/viewer/presenter.py +184 -0
- glaip_sdk/utils/resource_refs.py +195 -0
- glaip_sdk/utils/run_renderer.py +41 -0
- glaip_sdk/utils/runtime_config.py +425 -0
- glaip_sdk/utils/serialization.py +424 -0
- glaip_sdk/utils/sync.py +142 -0
- glaip_sdk/utils/tool_detection.py +33 -0
- glaip_sdk/utils/validation.py +264 -0
- {glaip_sdk-0.6.15b2.dist-info → glaip_sdk-0.6.16.dist-info}/METADATA +4 -5
- glaip_sdk-0.6.16.dist-info/RECORD +160 -0
- glaip_sdk-0.6.15b2.dist-info/RECORD +0 -12
- {glaip_sdk-0.6.15b2.dist-info → glaip_sdk-0.6.16.dist-info}/WHEEL +0 -0
- {glaip_sdk-0.6.15b2.dist-info → glaip_sdk-0.6.16.dist-info}/entry_points.txt +0 -0
- {glaip_sdk-0.6.15b2.dist-info → glaip_sdk-0.6.16.dist-info}/top_level.txt +0 -0
glaip_sdk/cli/io.py
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"""CLI I/O utilities for file import/export orchestration.
|
|
2
|
+
|
|
3
|
+
This module handles file operations and network requests for CLI commands,
|
|
4
|
+
wrapping core serialization utilities with Click-friendly error handling.
|
|
5
|
+
|
|
6
|
+
Authors:
|
|
7
|
+
Raymond Christopher (raymond.christopher@gdplabs.id)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from importlib import import_module
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
from typing import TYPE_CHECKING, Any
|
|
13
|
+
|
|
14
|
+
import click
|
|
15
|
+
|
|
16
|
+
from glaip_sdk.branding import WARNING_STYLE
|
|
17
|
+
from glaip_sdk.utils.serialization import (
|
|
18
|
+
collect_attributes_for_export,
|
|
19
|
+
load_resource_from_file,
|
|
20
|
+
write_resource_export,
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
if TYPE_CHECKING: # pragma: no cover - typing-only imports
|
|
24
|
+
from rich.console import Console
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _create_console() -> "Console":
|
|
28
|
+
"""Return a Console instance (lazy import for easier testing)."""
|
|
29
|
+
try:
|
|
30
|
+
console_module = import_module("rich.console")
|
|
31
|
+
except ImportError as exc: # pragma: no cover - optional dependency missing
|
|
32
|
+
raise RuntimeError("Rich Console is not available") from exc
|
|
33
|
+
return console_module.Console()
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def load_resource_from_file_with_validation(file_path: Path, resource_type: str) -> dict[str, Any]:
|
|
37
|
+
"""Load resource data from JSON or YAML file with CLI-friendly error handling.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
file_path: Path to the file
|
|
41
|
+
resource_type: Type of resource (for error messages)
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
Dictionary with resource data
|
|
45
|
+
|
|
46
|
+
Raises:
|
|
47
|
+
click.ClickException: If file operations fail
|
|
48
|
+
"""
|
|
49
|
+
try:
|
|
50
|
+
return load_resource_from_file(file_path)
|
|
51
|
+
except FileNotFoundError as err:
|
|
52
|
+
raise click.ClickException(f"File not found: {file_path}") from err
|
|
53
|
+
except ValueError as e:
|
|
54
|
+
raise click.ClickException(f"Invalid {resource_type.lower()} file format: {e}") from e
|
|
55
|
+
except Exception as e:
|
|
56
|
+
raise click.ClickException(f"Failed to load {resource_type.lower()} file: {e}") from e
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def export_resource_to_file_with_validation(resource: Any, file_path: Path, format: str = "json") -> None:
|
|
60
|
+
"""Export resource to file with CLI-friendly error handling.
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
resource: Resource object to export
|
|
64
|
+
file_path: Path to export file
|
|
65
|
+
format: Export format ("json" or "yaml")
|
|
66
|
+
|
|
67
|
+
Raises:
|
|
68
|
+
click.ClickException: If export operations fail
|
|
69
|
+
"""
|
|
70
|
+
try:
|
|
71
|
+
# Get all available resource attributes dynamically
|
|
72
|
+
export_data = collect_attributes_for_export(resource)
|
|
73
|
+
write_resource_export(file_path, export_data, format)
|
|
74
|
+
except Exception as e:
|
|
75
|
+
raise click.ClickException(f"Failed to export resource: {e}") from e
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def fetch_raw_resource_details(client: Any, resource: Any, resource_type: str) -> Any:
|
|
79
|
+
"""Fetch raw resource details directly from API to preserve ALL fields.
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
client: API client
|
|
83
|
+
resource: Resource object
|
|
84
|
+
resource_type: Type of resource ("agents", "tools", "mcps")
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
Raw API response data or None if failed
|
|
88
|
+
|
|
89
|
+
Notes:
|
|
90
|
+
This is CLI-specific functionality for displaying comprehensive resource details.
|
|
91
|
+
"""
|
|
92
|
+
console = _create_console()
|
|
93
|
+
|
|
94
|
+
try:
|
|
95
|
+
resource_id = str(getattr(resource, "id", "")).strip()
|
|
96
|
+
if resource_id:
|
|
97
|
+
# Make direct API call to get raw response
|
|
98
|
+
response = client.http_client.get(f"/{resource_type}/{resource_id}")
|
|
99
|
+
response.raise_for_status()
|
|
100
|
+
raw_response = response.json()
|
|
101
|
+
|
|
102
|
+
# If it's a wrapped response (success/data/message), extract the data
|
|
103
|
+
if isinstance(raw_response, dict) and "data" in raw_response:
|
|
104
|
+
return raw_response["data"]
|
|
105
|
+
else:
|
|
106
|
+
# Direct response
|
|
107
|
+
return raw_response
|
|
108
|
+
except Exception as e:
|
|
109
|
+
console.print(f"[{WARNING_STYLE}]Failed to fetch raw {resource_type} details: {e}[/]")
|
|
110
|
+
# Fall back to regular method
|
|
111
|
+
return None
|
|
112
|
+
return None
|