glaip-sdk 0.1.3__py3-none-any.whl → 0.6.19__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/__init__.py +44 -4
- glaip_sdk/_version.py +9 -0
- glaip_sdk/agents/__init__.py +27 -0
- glaip_sdk/agents/base.py +1196 -0
- glaip_sdk/branding.py +13 -0
- glaip_sdk/cli/account_store.py +540 -0
- glaip_sdk/cli/auth.py +254 -15
- glaip_sdk/cli/commands/__init__.py +2 -2
- glaip_sdk/cli/commands/accounts.py +746 -0
- glaip_sdk/cli/commands/agents.py +213 -73
- glaip_sdk/cli/commands/common_config.py +104 -0
- glaip_sdk/cli/commands/configure.py +729 -113
- glaip_sdk/cli/commands/mcps.py +241 -72
- glaip_sdk/cli/commands/models.py +11 -5
- glaip_sdk/cli/commands/tools.py +49 -57
- glaip_sdk/cli/commands/transcripts.py +755 -0
- glaip_sdk/cli/config.py +48 -4
- glaip_sdk/cli/constants.py +38 -0
- glaip_sdk/cli/context.py +8 -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 +35 -19
- glaip_sdk/cli/hints.py +57 -0
- glaip_sdk/cli/io.py +6 -3
- glaip_sdk/cli/main.py +241 -121
- glaip_sdk/cli/masking.py +21 -33
- glaip_sdk/cli/pager.py +9 -10
- glaip_sdk/cli/parsers/__init__.py +1 -3
- glaip_sdk/cli/slash/__init__.py +0 -9
- 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 +62 -21
- glaip_sdk/cli/slash/prompt.py +21 -0
- glaip_sdk/cli/slash/remote_runs_controller.py +566 -0
- glaip_sdk/cli/slash/session.py +771 -140
- glaip_sdk/cli/slash/tui/__init__.py +9 -0
- glaip_sdk/cli/slash/tui/accounts.tcss +86 -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 +12 -52
- glaip_sdk/cli/transcript/cache.py +255 -44
- glaip_sdk/cli/transcript/capture.py +27 -1
- glaip_sdk/cli/transcript/history.py +815 -0
- glaip_sdk/cli/transcript/viewer.py +72 -499
- glaip_sdk/cli/update_notifier.py +14 -5
- glaip_sdk/cli/utils.py +243 -1252
- glaip_sdk/cli/validators.py +5 -6
- glaip_sdk/client/__init__.py +2 -1
- glaip_sdk/client/_agent_payloads.py +45 -9
- glaip_sdk/client/agent_runs.py +147 -0
- glaip_sdk/client/agents.py +291 -35
- glaip_sdk/client/base.py +1 -0
- glaip_sdk/client/main.py +19 -10
- glaip_sdk/client/mcps.py +122 -12
- glaip_sdk/client/run_rendering.py +466 -89
- glaip_sdk/client/shared.py +21 -0
- glaip_sdk/client/tools.py +155 -10
- glaip_sdk/config/constants.py +11 -0
- glaip_sdk/hitl/__init__.py +15 -0
- glaip_sdk/hitl/local.py +151 -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 +1 -13
- 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/rich_components.py +58 -2
- 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 +870 -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 +58 -12
- glaip_sdk/utils/a2a/__init__.py +34 -0
- glaip_sdk/utils/a2a/event_processor.py +188 -0
- glaip_sdk/utils/bundler.py +267 -0
- glaip_sdk/utils/client.py +111 -0
- glaip_sdk/utils/client_utils.py +39 -7
- glaip_sdk/utils/datetime_helpers.py +58 -0
- glaip_sdk/utils/discovery.py +78 -0
- glaip_sdk/utils/display.py +23 -15
- glaip_sdk/utils/export.py +143 -0
- glaip_sdk/utils/general.py +0 -33
- glaip_sdk/utils/import_export.py +12 -7
- glaip_sdk/utils/import_resolver.py +492 -0
- glaip_sdk/utils/instructions.py +101 -0
- glaip_sdk/utils/rendering/__init__.py +115 -1
- glaip_sdk/utils/rendering/formatting.py +5 -30
- glaip_sdk/utils/rendering/layout/__init__.py +64 -0
- glaip_sdk/utils/rendering/{renderer → layout}/panels.py +9 -0
- glaip_sdk/utils/rendering/{renderer → layout}/progress.py +70 -1
- glaip_sdk/utils/rendering/layout/summary.py +74 -0
- glaip_sdk/utils/rendering/layout/transcript.py +606 -0
- glaip_sdk/utils/rendering/models.py +1 -0
- glaip_sdk/utils/rendering/renderer/__init__.py +9 -47
- glaip_sdk/utils/rendering/renderer/base.py +275 -1476
- glaip_sdk/utils/rendering/renderer/debug.py +26 -20
- glaip_sdk/utils/rendering/renderer/factory.py +138 -0
- glaip_sdk/utils/rendering/renderer/stream.py +4 -12
- glaip_sdk/utils/rendering/renderer/thinking.py +273 -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/steps/__init__.py +34 -0
- glaip_sdk/utils/rendering/{steps.py → steps/event_processor.py} +53 -440
- 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 +25 -13
- glaip_sdk/utils/runtime_config.py +425 -0
- glaip_sdk/utils/serialization.py +18 -0
- glaip_sdk/utils/sync.py +142 -0
- glaip_sdk/utils/tool_detection.py +33 -0
- glaip_sdk/utils/tool_storage_provider.py +140 -0
- glaip_sdk/utils/validation.py +16 -24
- {glaip_sdk-0.1.3.dist-info → glaip_sdk-0.6.19.dist-info}/METADATA +56 -21
- glaip_sdk-0.6.19.dist-info/RECORD +163 -0
- {glaip_sdk-0.1.3.dist-info → glaip_sdk-0.6.19.dist-info}/WHEEL +2 -1
- glaip_sdk-0.6.19.dist-info/entry_points.txt +2 -0
- glaip_sdk-0.6.19.dist-info/top_level.txt +1 -0
- glaip_sdk/models.py +0 -240
- glaip_sdk-0.1.3.dist-info/RECORD +0 -83
- glaip_sdk-0.1.3.dist-info/entry_points.txt +0 -3
glaip_sdk/utils/sync.py
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"""Agent and tool synchronization (create/update) operations.
|
|
2
|
+
|
|
3
|
+
This module provides convenience functions for tool classes that need bundling.
|
|
4
|
+
|
|
5
|
+
For direct upsert operations, use the client methods:
|
|
6
|
+
- client.agents.upsert_agent(identifier, **kwargs)
|
|
7
|
+
- client.tools.upsert_tool(identifier, code, **kwargs)
|
|
8
|
+
- client.mcps.upsert_mcp(identifier, **kwargs)
|
|
9
|
+
|
|
10
|
+
Authors:
|
|
11
|
+
Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
from typing import TYPE_CHECKING, Any
|
|
17
|
+
|
|
18
|
+
from glaip_sdk.utils.bundler import ToolBundler
|
|
19
|
+
from glaip_sdk.utils.import_resolver import load_class
|
|
20
|
+
from gllm_core.utils import LoggerManager
|
|
21
|
+
|
|
22
|
+
if TYPE_CHECKING:
|
|
23
|
+
from glaip_sdk.models import Agent, Tool
|
|
24
|
+
|
|
25
|
+
logger = LoggerManager().get_logger(__name__)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _extract_tool_name(tool_class: Any) -> str:
|
|
29
|
+
"""Extract tool name from a class, handling Pydantic v2 models."""
|
|
30
|
+
# Direct attribute access (works for non-Pydantic classes)
|
|
31
|
+
if hasattr(tool_class, "name"):
|
|
32
|
+
name = getattr(tool_class, "name", None)
|
|
33
|
+
if isinstance(name, str):
|
|
34
|
+
return name
|
|
35
|
+
|
|
36
|
+
# Pydantic v2 model - check model_fields
|
|
37
|
+
if hasattr(tool_class, "model_fields"):
|
|
38
|
+
model_fields = getattr(tool_class, "model_fields", {})
|
|
39
|
+
if "name" in model_fields:
|
|
40
|
+
field_info = model_fields["name"]
|
|
41
|
+
if hasattr(field_info, "default") and isinstance(field_info.default, str):
|
|
42
|
+
return field_info.default
|
|
43
|
+
|
|
44
|
+
raise ValueError(f"Cannot extract name from tool class: {tool_class}")
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _extract_tool_description(tool_class: Any) -> str:
|
|
48
|
+
"""Extract tool description from a class, handling Pydantic v2 models."""
|
|
49
|
+
# Direct attribute access
|
|
50
|
+
if hasattr(tool_class, "description"):
|
|
51
|
+
desc = getattr(tool_class, "description", None)
|
|
52
|
+
if isinstance(desc, str):
|
|
53
|
+
return desc
|
|
54
|
+
|
|
55
|
+
# Pydantic v2 model - check model_fields
|
|
56
|
+
if hasattr(tool_class, "model_fields"):
|
|
57
|
+
model_fields = getattr(tool_class, "model_fields", {})
|
|
58
|
+
if "description" in model_fields:
|
|
59
|
+
field_info = model_fields["description"]
|
|
60
|
+
if hasattr(field_info, "default") and isinstance(field_info.default, str):
|
|
61
|
+
return field_info.default
|
|
62
|
+
|
|
63
|
+
return ""
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def update_or_create_tool(tool_ref: Any) -> Tool:
|
|
67
|
+
"""Create or update a tool from a tool class with bundled source code.
|
|
68
|
+
|
|
69
|
+
This function takes a tool class (LangChain BaseTool), bundles its source
|
|
70
|
+
code with inlined imports, and creates/updates it in the backend.
|
|
71
|
+
|
|
72
|
+
Args:
|
|
73
|
+
tool_ref: A tool class (LangChain BaseTool subclass) or import path string.
|
|
74
|
+
|
|
75
|
+
Returns:
|
|
76
|
+
The created or updated tool.
|
|
77
|
+
|
|
78
|
+
Example:
|
|
79
|
+
>>> from glaip_sdk.utils.sync import update_or_create_tool
|
|
80
|
+
>>> from my_tools import WeatherAPITool
|
|
81
|
+
>>> tool = update_or_create_tool(WeatherAPITool)
|
|
82
|
+
"""
|
|
83
|
+
from glaip_sdk.utils.client import get_client # noqa: PLC0415
|
|
84
|
+
|
|
85
|
+
client = get_client()
|
|
86
|
+
|
|
87
|
+
# Handle string import path
|
|
88
|
+
if isinstance(tool_ref, str):
|
|
89
|
+
tool_class = load_class(tool_ref)
|
|
90
|
+
else:
|
|
91
|
+
tool_class = tool_ref
|
|
92
|
+
|
|
93
|
+
# Get tool info - handle Pydantic v2 model classes
|
|
94
|
+
tool_name = _extract_tool_name(tool_class)
|
|
95
|
+
tool_description = _extract_tool_description(tool_class)
|
|
96
|
+
|
|
97
|
+
# Bundle source code
|
|
98
|
+
bundler = ToolBundler(tool_class)
|
|
99
|
+
bundled_source = bundler.bundle()
|
|
100
|
+
|
|
101
|
+
logger.info("Tool info: name='%s', description='%s...'", tool_name, tool_description[:50])
|
|
102
|
+
logger.info("Bundled source code: %d characters", len(bundled_source))
|
|
103
|
+
|
|
104
|
+
# Use client's upsert method
|
|
105
|
+
return client.tools.upsert_tool(
|
|
106
|
+
tool_name,
|
|
107
|
+
code=bundled_source,
|
|
108
|
+
description=tool_description,
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def update_or_create_agent(agent_config: dict[str, Any]) -> Agent:
|
|
113
|
+
"""Create or update an agent from configuration.
|
|
114
|
+
|
|
115
|
+
Args:
|
|
116
|
+
agent_config: Agent configuration dictionary containing:
|
|
117
|
+
- name (str): Agent name (required)
|
|
118
|
+
- description (str): Agent description
|
|
119
|
+
- instruction (str): Agent instruction
|
|
120
|
+
- tools (list, optional): List of tool IDs
|
|
121
|
+
- agents (list, optional): List of sub-agent IDs
|
|
122
|
+
- metadata (dict, optional): Additional metadata
|
|
123
|
+
|
|
124
|
+
Returns:
|
|
125
|
+
The created or updated agent.
|
|
126
|
+
|
|
127
|
+
Example:
|
|
128
|
+
>>> from glaip_sdk.utils.sync import update_or_create_agent
|
|
129
|
+
>>> config = {
|
|
130
|
+
... "name": "weather_reporter",
|
|
131
|
+
... "description": "Weather reporting agent",
|
|
132
|
+
... "instruction": "You are a weather reporter.",
|
|
133
|
+
... }
|
|
134
|
+
>>> agent = update_or_create_agent(config)
|
|
135
|
+
"""
|
|
136
|
+
from glaip_sdk.utils.client import get_client # noqa: PLC0415
|
|
137
|
+
|
|
138
|
+
client = get_client()
|
|
139
|
+
agent_name = agent_config.pop("name")
|
|
140
|
+
|
|
141
|
+
# Use client's upsert method
|
|
142
|
+
return client.agents.upsert_agent(agent_name, **agent_config)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Shared utilities for tool type detection.
|
|
2
|
+
|
|
3
|
+
Authors:
|
|
4
|
+
Christian Trisno Sen Long Chen (christian.t.s.l.chen@gdplabs.id)
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def is_langchain_tool(ref: Any) -> bool:
|
|
11
|
+
"""Check if ref is a LangChain BaseTool class or instance.
|
|
12
|
+
|
|
13
|
+
Shared by:
|
|
14
|
+
- ToolRegistry._is_custom_tool() (for upload detection)
|
|
15
|
+
- LangChainToolAdapter._is_langchain_tool() (for adaptation)
|
|
16
|
+
|
|
17
|
+
Args:
|
|
18
|
+
ref: Object to check.
|
|
19
|
+
|
|
20
|
+
Returns:
|
|
21
|
+
True if ref is a LangChain BaseTool class or instance.
|
|
22
|
+
"""
|
|
23
|
+
try:
|
|
24
|
+
from langchain_core.tools import BaseTool # noqa: PLC0415
|
|
25
|
+
|
|
26
|
+
if isinstance(ref, type) and issubclass(ref, BaseTool):
|
|
27
|
+
return True
|
|
28
|
+
if isinstance(ref, BaseTool):
|
|
29
|
+
return True
|
|
30
|
+
except ImportError:
|
|
31
|
+
pass
|
|
32
|
+
|
|
33
|
+
return False
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"""Helpers for local tool output storage setup.
|
|
2
|
+
|
|
3
|
+
This module bridges agent_config.tool_output_sharing to ToolOutputManager
|
|
4
|
+
for local execution without modifying aip-agents.
|
|
5
|
+
|
|
6
|
+
Authors:
|
|
7
|
+
Fachriza Adhiatma (fachriza.d.adhiatma@gdplabs.id)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
import os
|
|
13
|
+
from typing import Any
|
|
14
|
+
|
|
15
|
+
from gllm_core.utils import LoggerManager
|
|
16
|
+
|
|
17
|
+
logger = LoggerManager().get_logger(__name__)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def build_tool_output_manager(agent_name: str, agent_config: dict[str, Any]) -> Any | None:
|
|
21
|
+
"""Build a ToolOutputManager for local tool output sharing.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
agent_name: Name of the agent whose tool outputs will be stored.
|
|
25
|
+
agent_config: Agent configuration that may enable tool output sharing and contain task_id.
|
|
26
|
+
|
|
27
|
+
Returns:
|
|
28
|
+
A ToolOutputManager instance when tool output sharing is enabled and
|
|
29
|
+
dependencies are available, otherwise ``None``.
|
|
30
|
+
"""
|
|
31
|
+
tool_output_sharing_enabled = agent_config.get("tool_output_sharing", False)
|
|
32
|
+
if not tool_output_sharing_enabled:
|
|
33
|
+
return None
|
|
34
|
+
|
|
35
|
+
try:
|
|
36
|
+
from aip_agents.storage.clients.minio_client import MinioConfig, MinioObjectStorage # noqa: PLC0415
|
|
37
|
+
from aip_agents.storage.providers.memory import InMemoryStorageProvider # noqa: PLC0415
|
|
38
|
+
from aip_agents.storage.providers.object_storage import ObjectStorageProvider # noqa: PLC0415
|
|
39
|
+
from aip_agents.utils.langgraph.tool_output_management import ( # noqa: PLC0415
|
|
40
|
+
ToolOutputConfig,
|
|
41
|
+
ToolOutputManager,
|
|
42
|
+
)
|
|
43
|
+
except ImportError:
|
|
44
|
+
logger.warning("Tool output sharing requested but aip-agents is unavailable; skipping.")
|
|
45
|
+
return None
|
|
46
|
+
|
|
47
|
+
task_id = agent_config.get("task_id")
|
|
48
|
+
|
|
49
|
+
storage_provider = _build_tool_output_storage_provider(
|
|
50
|
+
agent_name=agent_name,
|
|
51
|
+
task_id=task_id,
|
|
52
|
+
minio_config_cls=MinioConfig,
|
|
53
|
+
minio_client_cls=MinioObjectStorage,
|
|
54
|
+
object_storage_provider_cls=ObjectStorageProvider,
|
|
55
|
+
memory_storage_provider_cls=InMemoryStorageProvider,
|
|
56
|
+
)
|
|
57
|
+
tool_output_config = _build_tool_output_config(storage_provider, ToolOutputConfig)
|
|
58
|
+
return ToolOutputManager(tool_output_config)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _build_tool_output_storage_provider(
|
|
62
|
+
agent_name: str,
|
|
63
|
+
task_id: str | None,
|
|
64
|
+
minio_config_cls: Any,
|
|
65
|
+
minio_client_cls: Any,
|
|
66
|
+
object_storage_provider_cls: Any,
|
|
67
|
+
memory_storage_provider_cls: Any,
|
|
68
|
+
) -> Any:
|
|
69
|
+
"""Create a storage provider for tool output sharing.
|
|
70
|
+
|
|
71
|
+
Args:
|
|
72
|
+
agent_name: Name of the agent whose tool outputs are stored.
|
|
73
|
+
task_id: Optional task identifier for coordination context.
|
|
74
|
+
minio_config_cls: Class exposing a ``from_env`` constructor for MinIO config.
|
|
75
|
+
minio_client_cls: MinIO client class used to talk to the object store.
|
|
76
|
+
object_storage_provider_cls: Storage provider wrapping the MinIO client.
|
|
77
|
+
memory_storage_provider_cls: In-memory provider used as a fallback.
|
|
78
|
+
|
|
79
|
+
Returns:
|
|
80
|
+
An instance of ``object_storage_provider_cls`` when MinIO initialization
|
|
81
|
+
succeeds, otherwise an instance of ``memory_storage_provider_cls``.
|
|
82
|
+
"""
|
|
83
|
+
try:
|
|
84
|
+
config_obj = minio_config_cls.from_env()
|
|
85
|
+
minio_client = minio_client_cls(config=config_obj)
|
|
86
|
+
prefix = _build_tool_output_prefix(agent_name, task_id)
|
|
87
|
+
return object_storage_provider_cls(client=minio_client, prefix=prefix, use_json=False)
|
|
88
|
+
except Exception as exc:
|
|
89
|
+
logger.warning("Failed to initialize MinIO for tool outputs: %s. Using in-memory storage.", exc)
|
|
90
|
+
return memory_storage_provider_cls()
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def _build_tool_output_prefix(agent_name: str, task_id: str | None) -> str:
|
|
94
|
+
"""Build object storage prefix for tool outputs in local mode.
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
agent_name: Name of the agent whose outputs are stored.
|
|
98
|
+
task_id: Optional task identifier for coordination context.
|
|
99
|
+
|
|
100
|
+
Returns:
|
|
101
|
+
Object storage key prefix dedicated to the provided agent.
|
|
102
|
+
"""
|
|
103
|
+
if task_id:
|
|
104
|
+
return f"tool-outputs/tasks/{task_id}/agents/{agent_name}/"
|
|
105
|
+
return f"tool-outputs/agents/{agent_name}/"
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def _build_tool_output_config(storage_provider: Any, config_cls: Any) -> Any:
|
|
109
|
+
"""Build ToolOutputConfig using env vars, with safe defaults.
|
|
110
|
+
|
|
111
|
+
Args:
|
|
112
|
+
storage_provider: Provider that will persist tool outputs.
|
|
113
|
+
config_cls: Tool output configuration class to instantiate.
|
|
114
|
+
|
|
115
|
+
Returns:
|
|
116
|
+
A configured ``config_cls`` instance ready for ToolOutputManager use.
|
|
117
|
+
"""
|
|
118
|
+
|
|
119
|
+
def safe_int_conversion(env_var: str, default: str) -> int:
|
|
120
|
+
"""Convert an environment variable to int with a fallback default.
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
env_var: Environment variable name to read.
|
|
124
|
+
default: Default string value used when parsing fails.
|
|
125
|
+
|
|
126
|
+
Returns:
|
|
127
|
+
Integer representation of the environment variable or the default.
|
|
128
|
+
"""
|
|
129
|
+
try:
|
|
130
|
+
return int(os.getenv(env_var, default))
|
|
131
|
+
except (ValueError, TypeError):
|
|
132
|
+
logger.warning("Invalid value for %s, using default: %s", env_var, default)
|
|
133
|
+
return int(default)
|
|
134
|
+
|
|
135
|
+
return config_cls(
|
|
136
|
+
max_stored_outputs=safe_int_conversion("TOOL_OUTPUT_MAX_STORED", "200"),
|
|
137
|
+
max_age_minutes=safe_int_conversion("TOOL_OUTPUT_MAX_AGE_MINUTES", str(24 * 60)),
|
|
138
|
+
cleanup_interval=safe_int_conversion("TOOL_OUTPUT_CLEANUP_INTERVAL", "50"),
|
|
139
|
+
storage_provider=storage_provider,
|
|
140
|
+
)
|
glaip_sdk/utils/validation.py
CHANGED
|
@@ -18,6 +18,16 @@ from glaip_sdk.utils.resource_refs import validate_name_format
|
|
|
18
18
|
RESERVED_NAMES = ["admin", "root", "system", "api", "test", "demo"]
|
|
19
19
|
|
|
20
20
|
|
|
21
|
+
def _validate_named_resource(name: str, resource_type: str) -> str:
|
|
22
|
+
"""Shared validator that prevents reserved-name duplication."""
|
|
23
|
+
cleaned_name = validate_name_format(name, resource_type)
|
|
24
|
+
|
|
25
|
+
if cleaned_name.lower() in RESERVED_NAMES:
|
|
26
|
+
raise ValueError(f"{resource_type.capitalize()} name '{cleaned_name}' is reserved and cannot be used")
|
|
27
|
+
|
|
28
|
+
return cleaned_name
|
|
29
|
+
|
|
30
|
+
|
|
21
31
|
def validate_agent_name(name: str) -> str:
|
|
22
32
|
"""Validate agent name and return cleaned version.
|
|
23
33
|
|
|
@@ -30,13 +40,7 @@ def validate_agent_name(name: str) -> str:
|
|
|
30
40
|
Raises:
|
|
31
41
|
ValueError: If name is invalid
|
|
32
42
|
"""
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
# Check for reserved names
|
|
36
|
-
if cleaned_name.lower() in RESERVED_NAMES:
|
|
37
|
-
raise ValueError(f"'{cleaned_name}' is a reserved name and cannot be used")
|
|
38
|
-
|
|
39
|
-
return cleaned_name
|
|
43
|
+
return _validate_named_resource(name, "agent")
|
|
40
44
|
|
|
41
45
|
|
|
42
46
|
def validate_agent_instruction(instruction: str) -> str:
|
|
@@ -74,13 +78,7 @@ def validate_tool_name(name: str) -> str:
|
|
|
74
78
|
Raises:
|
|
75
79
|
ValueError: If name is invalid
|
|
76
80
|
"""
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
# Check for reserved names
|
|
80
|
-
if cleaned_name.lower() in RESERVED_NAMES:
|
|
81
|
-
raise ValueError(f"'{cleaned_name}' is a reserved name and cannot be used")
|
|
82
|
-
|
|
83
|
-
return cleaned_name
|
|
81
|
+
return _validate_named_resource(name, "tool")
|
|
84
82
|
|
|
85
83
|
|
|
86
84
|
def validate_mcp_name(name: str) -> str:
|
|
@@ -95,13 +93,7 @@ def validate_mcp_name(name: str) -> str:
|
|
|
95
93
|
Raises:
|
|
96
94
|
ValueError: If name is invalid
|
|
97
95
|
"""
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
# Check for reserved names
|
|
101
|
-
if cleaned_name.lower() in RESERVED_NAMES:
|
|
102
|
-
raise ValueError(f"'{cleaned_name}' is a reserved name and cannot be used")
|
|
103
|
-
|
|
104
|
-
return cleaned_name
|
|
96
|
+
return _validate_named_resource(name, "mcp")
|
|
105
97
|
|
|
106
98
|
|
|
107
99
|
def validate_timeout(timeout: int) -> int:
|
|
@@ -213,7 +205,7 @@ def validate_directory_path(dir_path: str | Path, must_exist: bool = True) -> Pa
|
|
|
213
205
|
|
|
214
206
|
|
|
215
207
|
def validate_url(url: str) -> str:
|
|
216
|
-
"""Validate URL format.
|
|
208
|
+
"""Validate URL format (HTTPS only).
|
|
217
209
|
|
|
218
210
|
Args:
|
|
219
211
|
url: URL to validate
|
|
@@ -225,7 +217,7 @@ def validate_url(url: str) -> str:
|
|
|
225
217
|
ValueError: If URL is invalid
|
|
226
218
|
"""
|
|
227
219
|
url_pattern = re.compile(
|
|
228
|
-
r"^https
|
|
220
|
+
r"^https://" # https:// only
|
|
229
221
|
r"(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?|" # domain...
|
|
230
222
|
r"localhost|" # localhost...
|
|
231
223
|
r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})" # ...or ip
|
|
@@ -235,7 +227,7 @@ def validate_url(url: str) -> str:
|
|
|
235
227
|
)
|
|
236
228
|
|
|
237
229
|
if not url_pattern.match(url):
|
|
238
|
-
raise ValueError(
|
|
230
|
+
raise ValueError("API URL must start with https:// and be a valid host.")
|
|
239
231
|
|
|
240
232
|
return url
|
|
241
233
|
|
|
@@ -1,30 +1,45 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: glaip-sdk
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.19
|
|
4
4
|
Summary: Python SDK for GL AIP (GDP Labs AI Agent Package) - Simplified CLI Design
|
|
5
|
+
Author-email: Raymond Christopher <raymond.christopher@gdplabs.id>
|
|
5
6
|
License: MIT
|
|
6
|
-
|
|
7
|
-
Author-email: raymond.christopher@gdplabs.id
|
|
8
|
-
Requires-Python: >=3.10
|
|
9
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
10
|
-
Classifier: Programming Language :: Python :: 3
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
-
Requires-Dist: click (>=8.2.0,<8.3.0)
|
|
15
|
-
Requires-Dist: httpx (>=0.28.1)
|
|
16
|
-
Requires-Dist: packaging (>=23.2)
|
|
17
|
-
Requires-Dist: pydantic (>=2.0.0)
|
|
18
|
-
Requires-Dist: python-dotenv (>=1.1.1,<2.0.0)
|
|
19
|
-
Requires-Dist: pyyaml (>=6.0.0)
|
|
20
|
-
Requires-Dist: questionary (>=2.1.0,<3.0.0)
|
|
21
|
-
Requires-Dist: readchar (>=4.2.1,<5.0.0)
|
|
22
|
-
Requires-Dist: rich (>=13.0.0)
|
|
7
|
+
Requires-Python: <3.13,>=3.11
|
|
23
8
|
Description-Content-Type: text/markdown
|
|
9
|
+
Requires-Dist: httpx>=0.28.1
|
|
10
|
+
Requires-Dist: pydantic>=2.0.0
|
|
11
|
+
Requires-Dist: pyyaml>=6.0.0
|
|
12
|
+
Requires-Dist: python-dotenv<2.0.0,>=1.1.1
|
|
13
|
+
Requires-Dist: readchar<5.0.0,>=4.2.1
|
|
14
|
+
Requires-Dist: questionary<3.0.0,>=2.1.0
|
|
15
|
+
Requires-Dist: click<8.3.0,>=8.2.0
|
|
16
|
+
Requires-Dist: rich>=13.0.0
|
|
17
|
+
Requires-Dist: packaging>=23.2
|
|
18
|
+
Requires-Dist: textual>=0.52.0
|
|
19
|
+
Requires-Dist: gllm-core-binary>=0.1.0
|
|
20
|
+
Requires-Dist: langchain-core>=0.3.0
|
|
21
|
+
Requires-Dist: gllm-tools-binary>=0.1.3
|
|
22
|
+
Provides-Extra: local
|
|
23
|
+
Requires-Dist: aip-agents-binary[local]>=0.5.14; (python_version >= "3.11" and python_version < "3.13") and extra == "local"
|
|
24
|
+
Requires-Dist: wrapt>=1.17.0; (python_version >= "3.11" and python_version < "3.13") and extra == "local"
|
|
25
|
+
Provides-Extra: memory
|
|
26
|
+
Requires-Dist: aip-agents-binary[memory]>=0.5.14; (python_version >= "3.11" and python_version < "3.13") and extra == "memory"
|
|
27
|
+
Provides-Extra: privacy
|
|
28
|
+
Requires-Dist: aip-agents-binary[privacy]>=0.5.14; (python_version >= "3.11" and python_version < "3.13") and extra == "privacy"
|
|
29
|
+
Requires-Dist: en-core-web-sm; extra == "privacy"
|
|
30
|
+
Provides-Extra: dev
|
|
31
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
32
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
33
|
+
Requires-Dist: pytest-dotenv>=0.5.2; extra == "dev"
|
|
34
|
+
Requires-Dist: pre-commit>=4.3.0; extra == "dev"
|
|
35
|
+
Requires-Dist: pytest-xdist>=3.8.0; extra == "dev"
|
|
36
|
+
Requires-Dist: pytest-asyncio>=0.23.6; extra == "dev"
|
|
37
|
+
Requires-Dist: pytest-timeout>=2.3.1; extra == "dev"
|
|
38
|
+
Requires-Dist: ruff>=0.14.0; extra == "dev"
|
|
24
39
|
|
|
25
40
|
# GL AIP — GDP Labs AI Agents Package
|
|
26
41
|
|
|
27
|
-
[](https://www.python.org/downloads/)
|
|
28
43
|
[](https://github.com/psf/black)
|
|
29
44
|
|
|
30
45
|
GL stands for **GDP Labs**—GL AIP is our AI Agents Package for building, running, and operating agents.
|
|
@@ -43,7 +58,7 @@ pip install --upgrade glaip-sdk
|
|
|
43
58
|
uv tool install glaip-sdk
|
|
44
59
|
```
|
|
45
60
|
|
|
46
|
-
**Requirements**: Python 3.
|
|
61
|
+
**Requirements**: Python 3.11 or 3.12
|
|
47
62
|
|
|
48
63
|
## 🐍 Hello World - Python SDK
|
|
49
64
|
|
|
@@ -193,3 +208,23 @@ Quick links:
|
|
|
193
208
|
- **[MCP Integration](https://gdplabs.gitbook.io/gl-aip/gl-aip-sdk/guides/mcps-guide)**: Connect external services
|
|
194
209
|
- **[API Reference](https://gdplabs.gitbook.io/gl-aip/gl-aip-sdk/reference/python-sdk-reference)**: Complete SDK reference
|
|
195
210
|
|
|
211
|
+
## 🧪 Simulate the Update Notifier
|
|
212
|
+
|
|
213
|
+
Need to verify the in-session upgrade flow without hitting PyPI or actually running `pip install`? Use the bundled helper:
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
cd python/glaip-sdk
|
|
217
|
+
poetry run python scripts/mock_update_notifier.py
|
|
218
|
+
# or customize the mock payload:
|
|
219
|
+
# poetry run python scripts/mock_update_notifier.py --version 3.3.3 --marker "[nightly build]"
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
The script:
|
|
223
|
+
|
|
224
|
+
- Launches a SlashSession with prompt-toolkit disabled (so it runs cleanly in tests/CI).
|
|
225
|
+
- Forces the notifier to believe a newer version exists (`--version 9.9.9` by default).
|
|
226
|
+
- Appends a visible marker (default `[mock update]`) to the banner so you can prove the branding reload happened; pass `--marker ""` to skip.
|
|
227
|
+
- Auto-selects “Update now”, mocks the install step, and runs the real branding refresh logic.
|
|
228
|
+
- Resets module metadata afterwards so your environment remains untouched.
|
|
229
|
+
|
|
230
|
+
You should see the Rich banner re-render with the mocked version (and optional marker) at the end of the run.
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
glaip_sdk/__init__.py,sha256=YpePGKbCjwqCwvb8yig8cc64z876ch1oSlTlu-CiWfs,1722
|
|
2
|
+
glaip_sdk/_version.py,sha256=5CHGCxx_36fgmMWuEx6jJ2CzzM-i9eBFyQWFwBi23XE,2259
|
|
3
|
+
glaip_sdk/branding.py,sha256=tLqYCIHMkUf8p2smpuAGNptwaKUN38G4mlh0A0DOl_w,7823
|
|
4
|
+
glaip_sdk/exceptions.py,sha256=iAChFClkytXRBLP0vZq1_YjoZxA9i4m4bW1gDLiGR1g,2321
|
|
5
|
+
glaip_sdk/icons.py,sha256=J5THz0ReAmDwIiIooh1_G3Le-mwTJyEjhJDdJ13KRxM,524
|
|
6
|
+
glaip_sdk/rich_components.py,sha256=44Z0V1ZQleVh9gUDGwRR5mriiYFnVGOhm7fFxZYbP8c,4052
|
|
7
|
+
glaip_sdk/agents/__init__.py,sha256=VfYov56edbWuySXFEbWJ_jLXgwnFzPk1KB-9-mfsUCc,776
|
|
8
|
+
glaip_sdk/agents/base.py,sha256=_KfxI11vM3GaABN5o7hxD2f1Wv7nalCivC11J3wh0VM,42502
|
|
9
|
+
glaip_sdk/cli/__init__.py,sha256=xCCfuF1Yc7mpCDcfhHZTX0vizvtrDSLeT8MJ3V7m5A0,156
|
|
10
|
+
glaip_sdk/cli/account_store.py,sha256=TK4iTV93Q1uD9mCY_2ZMT6EazHKU2jX0qhgWfEM4V-4,18459
|
|
11
|
+
glaip_sdk/cli/agent_config.py,sha256=YAbFKrTNTRqNA6b0i0Q3pH-01rhHDRi5v8dxSFwGSwM,2401
|
|
12
|
+
glaip_sdk/cli/auth.py,sha256=e3Ctkjz3HBFk2mJE5xYpg78flot_luByLhqJ_bVtIsM,24149
|
|
13
|
+
glaip_sdk/cli/config.py,sha256=s0_xBB1e5YE4I_Wc4q-ayY3dwsBU1JrHAF-8ySlim7Y,3040
|
|
14
|
+
glaip_sdk/cli/constants.py,sha256=zqcVtzfj6huW97gbCmhkFqntge1H-c1vnkGqTazADgU,895
|
|
15
|
+
glaip_sdk/cli/context.py,sha256=--Y5vc6lgoAV7cRoUAr9UxSQaLmkMg29FolA7EwoRqM,3803
|
|
16
|
+
glaip_sdk/cli/display.py,sha256=ojgWdGeD5KUnGOmWNqqK4JP-1EaWHWX--DWze3BmIz0,12137
|
|
17
|
+
glaip_sdk/cli/hints.py,sha256=ca4krG103IS43s5BSLr0-N7uRMpte1_LY4nAXVvgDxo,1596
|
|
18
|
+
glaip_sdk/cli/io.py,sha256=ChP6CRKbtuENsNomNEaMDfPDU0iqO-WuVvl4_y7F2io,3871
|
|
19
|
+
glaip_sdk/cli/main.py,sha256=YBWAC6ehffLP_TXZkNBxPrIHN5RqsSD8GLeIZdRBoIg,21911
|
|
20
|
+
glaip_sdk/cli/masking.py,sha256=2lrXQ-pfL7N-vNEQRT1s4Xq3JPDPDT8RC61OdaTtkkc,4060
|
|
21
|
+
glaip_sdk/cli/mcp_validators.py,sha256=cwbz7p_p7_9xVuuF96OBQOdmEgo5UObU6iWWQ2X03PI,10047
|
|
22
|
+
glaip_sdk/cli/pager.py,sha256=XygkAB6UW3bte7I4KmK7-PUGCJiq2Pv-4-MfyXAmXCw,7925
|
|
23
|
+
glaip_sdk/cli/resolution.py,sha256=K-VaEHm9SYY_qfb9538VNHykL4_2N6F8iQqI1zMx_64,2402
|
|
24
|
+
glaip_sdk/cli/rich_helpers.py,sha256=kO47N8e506rxrN6Oc9mbAWN3Qb536oQPWZy1s9A616g,819
|
|
25
|
+
glaip_sdk/cli/update_notifier.py,sha256=FnTjzS8YT94RmP6c5aU_XNIyRi7FRHvAskMy-VJikl8,10064
|
|
26
|
+
glaip_sdk/cli/utils.py,sha256=iemmKkpPndoZFBasoVqV7QArplchtr08yYWLA2efMzg,11996
|
|
27
|
+
glaip_sdk/cli/validators.py,sha256=d-kq4y7HWMo6Gc7wLXWUsCt8JwFvJX_roZqRm1Nko1I,5622
|
|
28
|
+
glaip_sdk/cli/commands/__init__.py,sha256=6Z3ASXDut0lAbUX_umBFtxPzzFyqoiZfVeTahThFu1A,219
|
|
29
|
+
glaip_sdk/cli/commands/accounts.py,sha256=J89chwJWWpEv6TBXaGPUJH-aLrM9Ymxp4jywp5YUUEo,24685
|
|
30
|
+
glaip_sdk/cli/commands/agents.py,sha256=WCOzllyh_Znwlju5camT4vE6OeRJbsAmjWwcyiAqWs4,48429
|
|
31
|
+
glaip_sdk/cli/commands/common_config.py,sha256=ZdWxv050MIZyHOG_UR5AoZvSxvVMx0mdwSeQffHYw4E,3724
|
|
32
|
+
glaip_sdk/cli/commands/configure.py,sha256=Y3ST1I33rXqlLvUyhKFOl9JUjDe01QCrL1dzOjO1E-c,30304
|
|
33
|
+
glaip_sdk/cli/commands/mcps.py,sha256=tttqQnfM89iI9Pm94u8YRhiHMQNYNouecFX0brsT4cQ,42551
|
|
34
|
+
glaip_sdk/cli/commands/models.py,sha256=vfcGprK5CHprQ0CNpNzQlNNTELvdgKC7JxTG_ijOwmE,2009
|
|
35
|
+
glaip_sdk/cli/commands/tools.py,sha256=_VBqG-vIjnn-gqvDlSTvcU7_F4N3ANGGKEECcQVR-BM,18430
|
|
36
|
+
glaip_sdk/cli/commands/transcripts.py,sha256=ofxZLus1xLB061NxrLo1J6LPEb2VIxJTjmz7hLKgPmc,26377
|
|
37
|
+
glaip_sdk/cli/commands/update.py,sha256=rIZo_x-tvpvcwpQLpwYwso1ix6qTHuNNTL4egmn5fEM,1812
|
|
38
|
+
glaip_sdk/cli/core/__init__.py,sha256=HTQqpijKNts6bYnwY97rpP3J324phoQmGFi6OXqi0E4,2116
|
|
39
|
+
glaip_sdk/cli/core/context.py,sha256=I22z5IhZ09g5FPtMycDGU9Aj20Qv3TOQLhA5enaU2qk,3970
|
|
40
|
+
glaip_sdk/cli/core/output.py,sha256=hj5F1M_rEqr4CChmdyW1QzGiWL0Mwzf-BFw-d6pjhjY,28304
|
|
41
|
+
glaip_sdk/cli/core/prompting.py,sha256=U6cxTSBNSa5-55M4W9zWCD_QSkkV912xTeOIRwXSDW8,21046
|
|
42
|
+
glaip_sdk/cli/core/rendering.py,sha256=QgbYzTcKH8wa7-BdR3UgiS3KBx1QYZjDcV2Hyy5ox_Q,5878
|
|
43
|
+
glaip_sdk/cli/parsers/__init__.py,sha256=NzLrSH6GOdNoewXtKNpB6GwrauA8rb_IGYV6cz5Hn3o,113
|
|
44
|
+
glaip_sdk/cli/parsers/json_input.py,sha256=kxoxeIlgfsaH2jhe6apZAgSxAtwlpSINLTMRsZZYboQ,5630
|
|
45
|
+
glaip_sdk/cli/slash/__init__.py,sha256=J9TPL2UcNTkW8eifG6nRmAEGHhyEgdYMYk4cHaaObC0,386
|
|
46
|
+
glaip_sdk/cli/slash/accounts_controller.py,sha256=-7v_4nTAVCqXySbOLtTfMpUpsqCzDTWmZYkBU880AzI,24803
|
|
47
|
+
glaip_sdk/cli/slash/accounts_shared.py,sha256=Mq5HxlI0YsVEQ0KKISWvyBZhzOFFWCzwRbhF5xwvUbM,2626
|
|
48
|
+
glaip_sdk/cli/slash/agent_session.py,sha256=ZK51zrwhFtun26Lu3a70Kcp3VFh0jwu37crWDKx7Ivk,11377
|
|
49
|
+
glaip_sdk/cli/slash/prompt.py,sha256=q4f1c2zr7ZMUeO6AgOBF2Nz4qgMOXrVPt6WzPRQMbAM,8501
|
|
50
|
+
glaip_sdk/cli/slash/remote_runs_controller.py,sha256=Ok6CezIeF1CPGQ8-QN3TRx5kGGEACOrgyPwH_BRRCyI,21354
|
|
51
|
+
glaip_sdk/cli/slash/session.py,sha256=JieIjUCTMW350LDqdSOdfPP8U0OJSmRYvqPBbddO2bw,64333
|
|
52
|
+
glaip_sdk/cli/slash/tui/__init__.py,sha256=ljBAeAFY2qNDkbJrZh5NgXxjwUlsv9-UxgKNIv0AF1Q,274
|
|
53
|
+
glaip_sdk/cli/slash/tui/accounts.tcss,sha256=xuQjQ0tBM08K1DUv6lI5Sfu1zgZzQxg60c9-RlEWB4s,1160
|
|
54
|
+
glaip_sdk/cli/slash/tui/accounts_app.py,sha256=QDaOpVStS6Z51tfXcS8GRRjTrVfMO26-guHepqysU9k,33715
|
|
55
|
+
glaip_sdk/cli/slash/tui/background_tasks.py,sha256=SAe1mV2vXB3mJcSGhelU950vf8Lifjhws9iomyIVFKw,2422
|
|
56
|
+
glaip_sdk/cli/slash/tui/loading.py,sha256=nW5pv_Tnl9FUOPR3Qf2O5gt1AGHSo3b5-Uofg34F6AE,1909
|
|
57
|
+
glaip_sdk/cli/slash/tui/remote_runs_app.py,sha256=RCrI-c5ilKV6Iy1lz2Aok9xo2Ou02vqcXACMXTdodnE,24716
|
|
58
|
+
glaip_sdk/cli/transcript/__init__.py,sha256=yiYHyNtebMCu3BXu56Xm5RBC2tDc865q8UGPnoe6QRs,920
|
|
59
|
+
glaip_sdk/cli/transcript/cache.py,sha256=Wi1uln6HP1U6F-MRTrfnxi9bn6XJTxwWXhREIRPoMqQ,17439
|
|
60
|
+
glaip_sdk/cli/transcript/capture.py,sha256=t8j_62cC6rhb51oCluZd17N04vcXqyjkhPRcRd3ZcmM,10291
|
|
61
|
+
glaip_sdk/cli/transcript/export.py,sha256=reCvrZVzli8_LzYe5ZNdaa-MwZ1ov2RjnDzKZWr_6-E,1117
|
|
62
|
+
glaip_sdk/cli/transcript/history.py,sha256=2FBjawxP8CX9gRPMUMP8bDjG50BGM2j2zk6IfHvAMH4,26211
|
|
63
|
+
glaip_sdk/cli/transcript/launcher.py,sha256=z5ivkPXDQJpATIqtRLUK8jH3p3WIZ72PvOPqYRDMJvw,2327
|
|
64
|
+
glaip_sdk/cli/transcript/viewer.py,sha256=HKL3U-FrhluKSmxLdE_kTbdTalG-LCE0wu1MXsf22Ao,13189
|
|
65
|
+
glaip_sdk/client/__init__.py,sha256=F-eE_dRSzA0cc1it06oi0tZetZBHmSUjWSHGhJMLCls,263
|
|
66
|
+
glaip_sdk/client/_agent_payloads.py,sha256=cH7CvNRn0JvudwKLr072E7W2QGWO9r-4xDxWMvXoPKE,17865
|
|
67
|
+
glaip_sdk/client/agent_runs.py,sha256=tZSFEZZ3Yx0uYRgnwkLe-X0TlmgKJQ-ivzb6SrVnxY8,4862
|
|
68
|
+
glaip_sdk/client/agents.py,sha256=75uDLN85Smf67rw-jFhlVKyiToicAfcFyJHSvWJkAww,47631
|
|
69
|
+
glaip_sdk/client/base.py,sha256=BhNaC2TJJ2jVWRTYmfxD3WjYgAyIuWNz9YURdNXXjJo,18245
|
|
70
|
+
glaip_sdk/client/main.py,sha256=RTREAOgGouYm4lFKkpNBQ9dmxalnBsIpSSaQLWVFSmU,9054
|
|
71
|
+
glaip_sdk/client/mcps.py,sha256=gFRuLOGeh6ieIhR4PeD6yNVT6NhvUMTqPq9iuu1vkAY,13019
|
|
72
|
+
glaip_sdk/client/run_rendering.py,sha256=kERp78v50jojsNWHrjNEkbC8sgOpMacaqUdw5YZuK6A,26074
|
|
73
|
+
glaip_sdk/client/shared.py,sha256=esHlsR0LEfL-pFDaWebQjKKOLl09jsRY-2pllBUn4nU,522
|
|
74
|
+
glaip_sdk/client/tools.py,sha256=kK0rBwX1e_5AlGQRjlO6rNz6gDlohhXWdlxN9AwotdE,22585
|
|
75
|
+
glaip_sdk/client/validators.py,sha256=ioF9VCs-LG2yLkaRDd7Hff74lojDZZ0_Q3CiLbdm1RY,8381
|
|
76
|
+
glaip_sdk/config/constants.py,sha256=Y03c6op0e7K0jTQ8bmWXhWAqsnjWxkAhWniq8Z0iEKY,1081
|
|
77
|
+
glaip_sdk/hitl/__init__.py,sha256=sg92Rpu8_vJIGi1ZEhx0-qWa1nGdvfrKyJAxtoDSKzo,494
|
|
78
|
+
glaip_sdk/hitl/local.py,sha256=rzmaRK15BxgRX7cmklUcGQUotMYg8x2Gd9BWf39k6hw,5661
|
|
79
|
+
glaip_sdk/mcps/__init__.py,sha256=4jYrt8K__oxrxexHRcmnRBXt-W_tbJN61H9Kf2lVh4Q,551
|
|
80
|
+
glaip_sdk/mcps/base.py,sha256=jWwHjDF67_mtDGRp9p5SolANjVeB8jt1PSwPBtX876M,11654
|
|
81
|
+
glaip_sdk/models/__init__.py,sha256=-qO4Yr1-fkyaYC9RcT3nYhplDjoXATrIFZr4JrqflHI,2577
|
|
82
|
+
glaip_sdk/models/agent.py,sha256=vtmUSDrrib1hvm0xnofIuOebqlrs-gIaLsny8hzg1iE,1523
|
|
83
|
+
glaip_sdk/models/agent_runs.py,sha256=MYgab07k8MfExjvI5_o6HxsksJZ3tl2TDZefVxzGc1g,3807
|
|
84
|
+
glaip_sdk/models/common.py,sha256=O30MEGO2nKcGhKbnPNkoGzwNvDVUBjM-uU-Tpigaz5Y,1180
|
|
85
|
+
glaip_sdk/models/mcp.py,sha256=ti_8MUf4k7qbR1gPs9JhqhybMcLUhZxEELtHQrTv2-U,944
|
|
86
|
+
glaip_sdk/models/tool.py,sha256=w3nL2DqyCtGgDPCd40Asi9obRGghQjLlC9Vt_p32Mpc,951
|
|
87
|
+
glaip_sdk/payload_schemas/__init__.py,sha256=nTJmzwn2BbEpzZdq-8U24eVHQHxqYO3_-SABMV9lS_Q,142
|
|
88
|
+
glaip_sdk/payload_schemas/agent.py,sha256=Nap68mI2Ba8eNGOhk79mGrYUoYUahcUJLof3DLWtVO4,3198
|
|
89
|
+
glaip_sdk/registry/__init__.py,sha256=mjvElYE-wwmbriGe-c6qy4on0ccEuWxW_EWWrSbptCw,1667
|
|
90
|
+
glaip_sdk/registry/agent.py,sha256=F0axW4BIUODqnttIOzxnoS5AqQkLZ1i48FTeZNnYkhA,5203
|
|
91
|
+
glaip_sdk/registry/base.py,sha256=0x2ZBhiERGUcf9mQeWlksSYs5TxDG6FxBYQToYZa5D4,4143
|
|
92
|
+
glaip_sdk/registry/mcp.py,sha256=kNJmiijIbZL9Btx5o2tFtbaT-WG6O4Xf_nl3wz356Ow,7978
|
|
93
|
+
glaip_sdk/registry/tool.py,sha256=rxrVxnO_VwO6E5kccqxxEUC337J9qbKpje-Gwl5a3sY,7699
|
|
94
|
+
glaip_sdk/runner/__init__.py,sha256=8RrngoGfpF8x9X27RPdX4gJjch75ZvhtVt_6UV0ULLQ,1615
|
|
95
|
+
glaip_sdk/runner/base.py,sha256=KIjcSAyDCP9_mn2H4rXR5gu1FZlwD9pe0gkTBmr6Yi4,2663
|
|
96
|
+
glaip_sdk/runner/deps.py,sha256=Du3hr2R5RHOYCRAv7RVmx661x-ayVXIeZ8JD7ODirTA,3884
|
|
97
|
+
glaip_sdk/runner/langgraph.py,sha256=-3BMJRww3S3dboS3uyR3QrxV-3p-1i2X5ObxdTTGRdg,32955
|
|
98
|
+
glaip_sdk/runner/mcp_adapter/__init__.py,sha256=Rdttfg3N6kg3-DaTCKqaGXKByZyBt0Mwf6FV8s_5kI8,462
|
|
99
|
+
glaip_sdk/runner/mcp_adapter/base_mcp_adapter.py,sha256=ic56fKgb3zgVZZQm3ClWUZi7pE1t4EVq8mOg6AM6hdA,1374
|
|
100
|
+
glaip_sdk/runner/mcp_adapter/langchain_mcp_adapter.py,sha256=b58GuadPz7q7aXoJyTYs0eeJ_oqp-wLR1tcr_5cbV1s,9723
|
|
101
|
+
glaip_sdk/runner/mcp_adapter/mcp_config_builder.py,sha256=fQcRaueDuyUzXUSVn9N8QxfaYNIteEO_R_uibx_0Icw,3440
|
|
102
|
+
glaip_sdk/runner/tool_adapter/__init__.py,sha256=scv8sSPxSWjlSNEace03R230YbmWgphLgqINKvDjWmM,480
|
|
103
|
+
glaip_sdk/runner/tool_adapter/base_tool_adapter.py,sha256=nL--eicV0St5_0PZZSEhRurHDZHNwhGN2cKOUh0C5IY,1400
|
|
104
|
+
glaip_sdk/runner/tool_adapter/langchain_tool_adapter.py,sha256=goSSDOpubuplsKpfemlbesf_bZBdpDKSTqLILvApcjA,7438
|
|
105
|
+
glaip_sdk/tools/__init__.py,sha256=rhGzEqQFCzeMrxmikBuNrMz4PyYczwic28boDKVmoHs,585
|
|
106
|
+
glaip_sdk/tools/base.py,sha256=bvumLJ-DiQTmuYKgq2yCnlwrTZ9nYXpOwWU0e1vWR5g,15185
|
|
107
|
+
glaip_sdk/utils/__init__.py,sha256=ntohV7cxlY2Yksi2nFuFm_Mg2XVJbBbSJVRej7Mi9YE,2770
|
|
108
|
+
glaip_sdk/utils/agent_config.py,sha256=RhcHsSOVwOaSC2ggnPuHn36Aa0keGJhs8KGb2InvzRk,7262
|
|
109
|
+
glaip_sdk/utils/bundler.py,sha256=fQWAv0e5qNjF1Lah-FGoA9W5Q59YaHbQfX_4ZB84YRw,9120
|
|
110
|
+
glaip_sdk/utils/client.py,sha256=otPUOIDvLCCsvFBNR8YMZFtRrORggmvvlFjl3YeeTqQ,3121
|
|
111
|
+
glaip_sdk/utils/client_utils.py,sha256=hzHxxNuM37mK4HhgIdS0qg4AqjAA5ai2irPO6Nr1Uzo,15350
|
|
112
|
+
glaip_sdk/utils/datetime_helpers.py,sha256=QLknNLEAY56628-MTRKnCXAffATkF33erOqBubKmU98,1544
|
|
113
|
+
glaip_sdk/utils/discovery.py,sha256=DbnPuCXuS5mwTZ9fMfsPHQDJltFV99Wf8Em0YttktVU,1994
|
|
114
|
+
glaip_sdk/utils/display.py,sha256=zu3SYqxj9hPyEN8G1vIXv_yXBkV8jLLCXEg2rs8NlzM,4485
|
|
115
|
+
glaip_sdk/utils/export.py,sha256=1NxxE3wGsA1auzecG5oJw5ELB4VmPljoeIkGhrGOh1I,5006
|
|
116
|
+
glaip_sdk/utils/general.py,sha256=3HSVIopUsIymPaim-kP2lqLX75TkkdIVLe6g3UKabZ0,1507
|
|
117
|
+
glaip_sdk/utils/import_export.py,sha256=RCvoydm_6_L7_J1igcE6IYDunqgS5mQUbWT4VGrytMw,5510
|
|
118
|
+
glaip_sdk/utils/import_resolver.py,sha256=rvNNLjSB1pbQTgkjEy9C8O_P475FefaBpctkiQAom8Y,16250
|
|
119
|
+
glaip_sdk/utils/instructions.py,sha256=MTk93lsq3I8aRnvnRMSXXNMzcpnaIM_Pm3Aiiiq3GBc,2997
|
|
120
|
+
glaip_sdk/utils/resource_refs.py,sha256=vF34kyAtFBLnaKnQVrsr2st1JiSxVbIZ4yq0DelJvCI,5966
|
|
121
|
+
glaip_sdk/utils/run_renderer.py,sha256=d_VMI6LbvHPUUeRmGqh5wK_lHqDEIAcym2iqpbtDad0,1365
|
|
122
|
+
glaip_sdk/utils/runtime_config.py,sha256=Gl9-CQ4lYZ39vRSgtdfcSU3CXshVDDuTOdSzjvsCgG0,14070
|
|
123
|
+
glaip_sdk/utils/serialization.py,sha256=z-qpvWLSBrGK3wbUclcA1UIKLXJedTnMSwPdq-FF4lo,13308
|
|
124
|
+
glaip_sdk/utils/sync.py,sha256=3VKqs1UfNGWSobgRXohBKP7mMMzdUW3SU0bJQ1uxOgw,4872
|
|
125
|
+
glaip_sdk/utils/tool_detection.py,sha256=g410GNug_PhLye8rd9UU-LVFIKq3jHPbmSItEkLxPTc,807
|
|
126
|
+
glaip_sdk/utils/tool_storage_provider.py,sha256=lampwUeWu4Uy8nBG7C4ZT-M6AHoWZS0m67HdLx21VDg,5396
|
|
127
|
+
glaip_sdk/utils/validation.py,sha256=hB_k3lvHdIFUiSwHStrC0Eqnhx0OG2UvwqASeem0HuQ,6859
|
|
128
|
+
glaip_sdk/utils/a2a/__init__.py,sha256=_X8AvDOsHeppo5n7rP5TeisVxlAdkZDTFReBk_9lmxo,876
|
|
129
|
+
glaip_sdk/utils/a2a/event_processor.py,sha256=9Mjvvd4_4VDYeOkAI7_vF7N7_Dn0Kn23ramKyK32b3c,5993
|
|
130
|
+
glaip_sdk/utils/rendering/__init__.py,sha256=cJhhBEf46RnmUGJ1fivGkFuCoOn2pkJkSuRWoo1xlhE,3608
|
|
131
|
+
glaip_sdk/utils/rendering/formatting.py,sha256=tP-CKkKFDhiAHS1vpJQ3D6NmPVl0TX1ZOwBOoxia2eE,8009
|
|
132
|
+
glaip_sdk/utils/rendering/models.py,sha256=LtBgF0CyFnVW_oLAR8O62P-h8auCJwlgZaMUhmE8V-0,2882
|
|
133
|
+
glaip_sdk/utils/rendering/state.py,sha256=54ViIHCGoBHQE4yMOrB2ToK3FZuv7SsD0Qcyq3CEKe4,6540
|
|
134
|
+
glaip_sdk/utils/rendering/step_tree_state.py,sha256=EItKFTV2FYvm5pSyHbXk7lkzJ-0DW_s-VENIBZe8sp4,4062
|
|
135
|
+
glaip_sdk/utils/rendering/timing.py,sha256=__F1eFPoocm7Dps7Y1O_gJV24HsNTbx_FMiqEDN4T9o,1063
|
|
136
|
+
glaip_sdk/utils/rendering/layout/__init__.py,sha256=Lz8eLXDO28wyK36BhKJ6o9YmsRjmQZrNhvZ2wwSjvPw,1609
|
|
137
|
+
glaip_sdk/utils/rendering/layout/panels.py,sha256=c7EhMznVxIiclrFERJuc3qem21t7sQI6BDcmujtdSAk,3905
|
|
138
|
+
glaip_sdk/utils/rendering/layout/progress.py,sha256=GhOhUPNQd8-e6JxTJsV76s6wIYhtTw2G1C3BY9yhtRk,6418
|
|
139
|
+
glaip_sdk/utils/rendering/layout/summary.py,sha256=K-gkDxwUxF67-4nF20y6hv95QEwRZCQI9Eb4KbA8eQY,2325
|
|
140
|
+
glaip_sdk/utils/rendering/layout/transcript.py,sha256=vbfywtbWCDzLY9B5Vvf4crhomftFq-UEz7zqySiLrD8,19052
|
|
141
|
+
glaip_sdk/utils/rendering/renderer/__init__.py,sha256=lpf0GnNGcPb8gq_hJM6Puflwy3eTigVK9qXP01nWRv0,1754
|
|
142
|
+
glaip_sdk/utils/rendering/renderer/base.py,sha256=CpkkwiTmJHi8j2EGBva7WBpVWNte0VoDGgF6UbiJ9J8,41929
|
|
143
|
+
glaip_sdk/utils/rendering/renderer/config.py,sha256=FgSAZpG1g7Atm2MXg0tY0lOEciY90MR-RO6YuGFhp0E,626
|
|
144
|
+
glaip_sdk/utils/rendering/renderer/console.py,sha256=4cLOw4Q1fkHkApuj6dWW8eYpeYdcT0t2SO5MbVt5UTc,1844
|
|
145
|
+
glaip_sdk/utils/rendering/renderer/debug.py,sha256=qyqFXltYzKEqajwlu8QFSBU3P46JzMzIZqurejhx14o,5907
|
|
146
|
+
glaip_sdk/utils/rendering/renderer/factory.py,sha256=3p1Uga_UEN-wwTNerNaDB3qf3-yu1a9DfH4weXxeRdA,4711
|
|
147
|
+
glaip_sdk/utils/rendering/renderer/stream.py,sha256=htqm8pujXGKJncO86d-dfHixv9btACBgwPbO_brUQio,7812
|
|
148
|
+
glaip_sdk/utils/rendering/renderer/summary_window.py,sha256=ffBsVHaUyy2RfIuXLjhfiO31HeeprVcPP_pe4cjDLsU,2286
|
|
149
|
+
glaip_sdk/utils/rendering/renderer/thinking.py,sha256=09dYbtzpOrG5SlhuqpW9uqPCpiijPQuIntsNboMDDJ8,9399
|
|
150
|
+
glaip_sdk/utils/rendering/renderer/toggle.py,sha256=N3LB4g1r8EdDkQyItQdrP5gig6Sszz9uZ6WJuD0KUmk,5396
|
|
151
|
+
glaip_sdk/utils/rendering/renderer/tool_panels.py,sha256=ev7gZsakUMxfG4JoS_bBDey_MwMDyOLwVhTO536v608,17246
|
|
152
|
+
glaip_sdk/utils/rendering/renderer/transcript_mode.py,sha256=FBZVQYrXF5YH79g3gYizE6P_yL5k9ZSGViCmZhv6C4g,6013
|
|
153
|
+
glaip_sdk/utils/rendering/steps/__init__.py,sha256=y1BJUPeT4bclXPmsy6B66KNZWiY8W5p-LnLnlrxynP8,840
|
|
154
|
+
glaip_sdk/utils/rendering/steps/event_processor.py,sha256=sGOHpxm7WmKxxY68l9Su6_YbDkXcoFblwkv1fToSX5k,29048
|
|
155
|
+
glaip_sdk/utils/rendering/steps/format.py,sha256=Chnq7OBaj8XMeBntSBxrX5zSmrYeGcOszooNeBe7_pM,5654
|
|
156
|
+
glaip_sdk/utils/rendering/steps/manager.py,sha256=BiBmTeQMQhjRMykgICXsXNYh1hGsss-fH9BIGVMWFi0,13194
|
|
157
|
+
glaip_sdk/utils/rendering/viewer/__init__.py,sha256=XrxmE2cMAozqrzo1jtDFm8HqNtvDcYi2mAhXLXn5CjI,457
|
|
158
|
+
glaip_sdk/utils/rendering/viewer/presenter.py,sha256=mlLMTjnyeyPVtsyrAbz1BJu9lFGQSlS-voZ-_Cuugv0,5725
|
|
159
|
+
glaip_sdk-0.6.19.dist-info/METADATA,sha256=tHOwtdRHZLmMy4HxbM-C1nhhK6LGoxAwZOZr3Y4OxAw,7921
|
|
160
|
+
glaip_sdk-0.6.19.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
161
|
+
glaip_sdk-0.6.19.dist-info/entry_points.txt,sha256=65vNPUggyYnVGhuw7RhNJ8Fp2jygTcX0yxJBcBY3iLU,48
|
|
162
|
+
glaip_sdk-0.6.19.dist-info/top_level.txt,sha256=td7yXttiYX2s94-4wFhv-5KdT0rSZ-pnJRSire341hw,10
|
|
163
|
+
glaip_sdk-0.6.19.dist-info/RECORD,,
|