glaip-sdk 0.1.2__py3-none-any.whl → 0.7.17__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 +1413 -0
- glaip_sdk/branding.py +126 -2
- glaip_sdk/cli/account_store.py +555 -0
- glaip_sdk/cli/auth.py +260 -15
- glaip_sdk/cli/commands/__init__.py +2 -2
- glaip_sdk/cli/commands/accounts.py +746 -0
- glaip_sdk/cli/commands/agents/__init__.py +116 -0
- glaip_sdk/cli/commands/agents/_common.py +562 -0
- glaip_sdk/cli/commands/agents/create.py +155 -0
- glaip_sdk/cli/commands/agents/delete.py +64 -0
- glaip_sdk/cli/commands/agents/get.py +89 -0
- glaip_sdk/cli/commands/agents/list.py +129 -0
- glaip_sdk/cli/commands/agents/run.py +264 -0
- glaip_sdk/cli/commands/agents/sync_langflow.py +72 -0
- glaip_sdk/cli/commands/agents/update.py +112 -0
- glaip_sdk/cli/commands/common_config.py +104 -0
- glaip_sdk/cli/commands/configure.py +728 -113
- glaip_sdk/cli/commands/mcps/__init__.py +94 -0
- glaip_sdk/cli/commands/mcps/_common.py +459 -0
- glaip_sdk/cli/commands/mcps/connect.py +82 -0
- glaip_sdk/cli/commands/mcps/create.py +152 -0
- glaip_sdk/cli/commands/mcps/delete.py +73 -0
- glaip_sdk/cli/commands/mcps/get.py +212 -0
- glaip_sdk/cli/commands/mcps/list.py +69 -0
- glaip_sdk/cli/commands/mcps/tools.py +235 -0
- glaip_sdk/cli/commands/mcps/update.py +190 -0
- glaip_sdk/cli/commands/models.py +12 -8
- glaip_sdk/cli/commands/shared/__init__.py +21 -0
- glaip_sdk/cli/commands/shared/formatters.py +91 -0
- glaip_sdk/cli/commands/tools/__init__.py +69 -0
- glaip_sdk/cli/commands/tools/_common.py +80 -0
- glaip_sdk/cli/commands/tools/create.py +228 -0
- glaip_sdk/cli/commands/tools/delete.py +61 -0
- glaip_sdk/cli/commands/tools/get.py +103 -0
- glaip_sdk/cli/commands/tools/list.py +69 -0
- glaip_sdk/cli/commands/tools/script.py +49 -0
- glaip_sdk/cli/commands/tools/update.py +102 -0
- glaip_sdk/cli/commands/transcripts/__init__.py +90 -0
- glaip_sdk/cli/commands/transcripts/_common.py +9 -0
- glaip_sdk/cli/commands/transcripts/clear.py +5 -0
- glaip_sdk/cli/commands/transcripts/detail.py +5 -0
- glaip_sdk/cli/commands/transcripts_original.py +756 -0
- glaip_sdk/cli/commands/update.py +163 -17
- glaip_sdk/cli/config.py +49 -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 +41 -20
- glaip_sdk/cli/entrypoint.py +20 -0
- glaip_sdk/cli/hints.py +57 -0
- glaip_sdk/cli/io.py +6 -3
- glaip_sdk/cli/main.py +340 -143
- glaip_sdk/cli/masking.py +21 -33
- glaip_sdk/cli/pager.py +12 -13
- glaip_sdk/cli/parsers/__init__.py +1 -3
- glaip_sdk/cli/resolution.py +2 -1
- glaip_sdk/cli/slash/__init__.py +0 -9
- glaip_sdk/cli/slash/accounts_controller.py +580 -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 +568 -0
- glaip_sdk/cli/slash/session.py +1105 -153
- glaip_sdk/cli/slash/tui/__init__.py +36 -0
- glaip_sdk/cli/slash/tui/accounts.tcss +177 -0
- glaip_sdk/cli/slash/tui/accounts_app.py +1853 -0
- glaip_sdk/cli/slash/tui/background_tasks.py +72 -0
- glaip_sdk/cli/slash/tui/clipboard.py +195 -0
- glaip_sdk/cli/slash/tui/context.py +92 -0
- glaip_sdk/cli/slash/tui/indicators.py +341 -0
- glaip_sdk/cli/slash/tui/keybind_registry.py +235 -0
- glaip_sdk/cli/slash/tui/layouts/__init__.py +14 -0
- glaip_sdk/cli/slash/tui/layouts/harlequin.py +184 -0
- glaip_sdk/cli/slash/tui/loading.py +80 -0
- glaip_sdk/cli/slash/tui/remote_runs_app.py +760 -0
- glaip_sdk/cli/slash/tui/terminal.py +407 -0
- glaip_sdk/cli/slash/tui/theme/__init__.py +15 -0
- glaip_sdk/cli/slash/tui/theme/catalog.py +79 -0
- glaip_sdk/cli/slash/tui/theme/manager.py +112 -0
- glaip_sdk/cli/slash/tui/theme/tokens.py +55 -0
- glaip_sdk/cli/slash/tui/toast.py +388 -0
- glaip_sdk/cli/transcript/__init__.py +12 -52
- glaip_sdk/cli/transcript/cache.py +255 -44
- glaip_sdk/cli/transcript/capture.py +66 -1
- glaip_sdk/cli/transcript/history.py +815 -0
- glaip_sdk/cli/transcript/viewer.py +72 -463
- glaip_sdk/cli/tui_settings.py +125 -0
- glaip_sdk/cli/update_notifier.py +227 -10
- glaip_sdk/cli/validators.py +5 -6
- glaip_sdk/client/__init__.py +3 -1
- glaip_sdk/client/_schedule_payloads.py +89 -0
- glaip_sdk/client/agent_runs.py +147 -0
- glaip_sdk/client/agents.py +576 -44
- glaip_sdk/client/base.py +26 -0
- glaip_sdk/client/hitl.py +136 -0
- glaip_sdk/client/main.py +25 -14
- glaip_sdk/client/mcps.py +165 -24
- glaip_sdk/client/payloads/agent/__init__.py +23 -0
- glaip_sdk/client/{_agent_payloads.py → payloads/agent/requests.py} +63 -47
- glaip_sdk/client/payloads/agent/responses.py +43 -0
- glaip_sdk/client/run_rendering.py +546 -92
- glaip_sdk/client/schedules.py +439 -0
- glaip_sdk/client/shared.py +21 -0
- glaip_sdk/client/tools.py +206 -32
- glaip_sdk/config/constants.py +33 -2
- glaip_sdk/guardrails/__init__.py +80 -0
- glaip_sdk/guardrails/serializer.py +89 -0
- glaip_sdk/hitl/__init__.py +48 -0
- glaip_sdk/hitl/base.py +64 -0
- glaip_sdk/hitl/callback.py +43 -0
- glaip_sdk/hitl/local.py +121 -0
- glaip_sdk/hitl/remote.py +523 -0
- glaip_sdk/mcps/__init__.py +21 -0
- glaip_sdk/mcps/base.py +345 -0
- glaip_sdk/models/__init__.py +136 -0
- glaip_sdk/models/_provider_mappings.py +101 -0
- glaip_sdk/models/_validation.py +97 -0
- glaip_sdk/models/agent.py +48 -0
- glaip_sdk/models/agent_runs.py +117 -0
- glaip_sdk/models/common.py +42 -0
- glaip_sdk/models/constants.py +141 -0
- glaip_sdk/models/mcp.py +33 -0
- glaip_sdk/models/model.py +170 -0
- glaip_sdk/models/schedule.py +224 -0
- glaip_sdk/models/tool.py +33 -0
- glaip_sdk/payload_schemas/__init__.py +1 -13
- glaip_sdk/payload_schemas/agent.py +1 -0
- glaip_sdk/payload_schemas/guardrails.py +34 -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 +445 -0
- glaip_sdk/rich_components.py +58 -2
- glaip_sdk/runner/__init__.py +76 -0
- glaip_sdk/runner/base.py +84 -0
- glaip_sdk/runner/deps.py +115 -0
- glaip_sdk/runner/langgraph.py +1055 -0
- glaip_sdk/runner/logging_config.py +77 -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 +116 -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 +242 -0
- glaip_sdk/schedules/__init__.py +22 -0
- glaip_sdk/schedules/base.py +291 -0
- glaip_sdk/tools/__init__.py +22 -0
- glaip_sdk/tools/base.py +488 -0
- glaip_sdk/utils/__init__.py +59 -12
- glaip_sdk/utils/a2a/__init__.py +34 -0
- glaip_sdk/utils/a2a/event_processor.py +188 -0
- glaip_sdk/utils/agent_config.py +8 -2
- glaip_sdk/utils/bundler.py +403 -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 +524 -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 +299 -1434
- glaip_sdk/utils/rendering/renderer/config.py +1 -5
- 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 -33
- glaip_sdk/utils/rendering/renderer/summary_window.py +79 -0
- 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 +426 -0
- glaip_sdk/utils/serialization.py +18 -0
- glaip_sdk/utils/sync.py +162 -0
- glaip_sdk/utils/tool_detection.py +301 -0
- glaip_sdk/utils/tool_storage_provider.py +140 -0
- glaip_sdk/utils/validation.py +16 -24
- {glaip_sdk-0.1.2.dist-info → glaip_sdk-0.7.17.dist-info}/METADATA +69 -23
- glaip_sdk-0.7.17.dist-info/RECORD +224 -0
- {glaip_sdk-0.1.2.dist-info → glaip_sdk-0.7.17.dist-info}/WHEEL +2 -1
- glaip_sdk-0.7.17.dist-info/entry_points.txt +2 -0
- glaip_sdk-0.7.17.dist-info/top_level.txt +1 -0
- glaip_sdk/cli/commands/agents.py +0 -1369
- glaip_sdk/cli/commands/mcps.py +0 -1187
- glaip_sdk/cli/commands/tools.py +0 -584
- glaip_sdk/cli/utils.py +0 -1278
- glaip_sdk/models.py +0 -240
- glaip_sdk-0.1.2.dist-info/RECORD +0 -82
- glaip_sdk-0.1.2.dist-info/entry_points.txt +0 -3
glaip_sdk/branding.py
CHANGED
|
@@ -17,6 +17,7 @@ import platform
|
|
|
17
17
|
import sys
|
|
18
18
|
|
|
19
19
|
from rich.console import Console
|
|
20
|
+
from rich.text import Text
|
|
20
21
|
|
|
21
22
|
from glaip_sdk._version import __version__ as SDK_VERSION
|
|
22
23
|
from glaip_sdk.rich_components import AIPPanel
|
|
@@ -90,6 +91,14 @@ GDP Labs AI Agents Package
|
|
|
90
91
|
# ---- small helpers --------------------------------------------------------
|
|
91
92
|
@staticmethod
|
|
92
93
|
def _auto_version(package_name: str | None) -> str:
|
|
94
|
+
"""Auto-detect version from environment, package metadata, or fallback.
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
package_name: Optional package name to read version from installed metadata.
|
|
98
|
+
|
|
99
|
+
Returns:
|
|
100
|
+
Version string from AIP_VERSION env var, package metadata, or SDK_VERSION fallback.
|
|
101
|
+
"""
|
|
93
102
|
# Priority: env → package metadata → fallback
|
|
94
103
|
env_version = os.getenv("AIP_VERSION")
|
|
95
104
|
if env_version:
|
|
@@ -102,7 +111,16 @@ GDP Labs AI Agents Package
|
|
|
102
111
|
return SDK_VERSION
|
|
103
112
|
|
|
104
113
|
@staticmethod
|
|
105
|
-
def _make_console() -> Console:
|
|
114
|
+
def _make_console(force_terminal: bool | None = None, *, soft_wrap: bool = True) -> Console:
|
|
115
|
+
"""Create a Rich Console instance respecting NO_COLOR environment variables.
|
|
116
|
+
|
|
117
|
+
Args:
|
|
118
|
+
force_terminal: Override terminal detection when True/False.
|
|
119
|
+
soft_wrap: Whether to enable soft wrapping in the console.
|
|
120
|
+
|
|
121
|
+
Returns:
|
|
122
|
+
Console instance with color system configured based on environment.
|
|
123
|
+
"""
|
|
106
124
|
# Respect NO_COLOR/AIP_NO_COLOR environment variables
|
|
107
125
|
no_color_env = os.getenv("NO_COLOR") is not None or os.getenv("AIP_NO_COLOR") is not None
|
|
108
126
|
if no_color_env:
|
|
@@ -111,7 +129,12 @@ GDP Labs AI Agents Package
|
|
|
111
129
|
else:
|
|
112
130
|
color_system = "auto"
|
|
113
131
|
no_color = False
|
|
114
|
-
return Console(
|
|
132
|
+
return Console(
|
|
133
|
+
color_system=color_system,
|
|
134
|
+
no_color=no_color,
|
|
135
|
+
soft_wrap=soft_wrap,
|
|
136
|
+
force_terminal=force_terminal,
|
|
137
|
+
)
|
|
115
138
|
|
|
116
139
|
# ---- public API -----------------------------------------------------------
|
|
117
140
|
def get_welcome_banner(self) -> str:
|
|
@@ -196,3 +219,104 @@ GDP Labs AI Agents Package
|
|
|
196
219
|
AIPBranding instance
|
|
197
220
|
"""
|
|
198
221
|
return cls(version=sdk_version, package_name=package_name)
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
class LogoAnimator:
|
|
225
|
+
"""Animated logo with pulse effect for CLI startup.
|
|
226
|
+
|
|
227
|
+
Provides a "Knight Rider" style light pulse animation that sweeps across
|
|
228
|
+
the GL AIP logo during initialization tasks. Respects NO_COLOR and non-TTY
|
|
229
|
+
environments with graceful degradation.
|
|
230
|
+
"""
|
|
231
|
+
|
|
232
|
+
# Animation colors from GDP Labs brand palette
|
|
233
|
+
BASE_BLUE = SECONDARY_MEDIUM # "#005CB8" - Medium Blue
|
|
234
|
+
HIGHLIGHT = SECONDARY_LIGHT # "#40B4E5" - Light Blue
|
|
235
|
+
WHITE = "#FFFFFF" # Bright white center
|
|
236
|
+
|
|
237
|
+
def __init__(self, console: Console | None = None) -> None:
|
|
238
|
+
"""Initialize LogoAnimator.
|
|
239
|
+
|
|
240
|
+
Args:
|
|
241
|
+
console: Optional console instance. If None, creates a default console.
|
|
242
|
+
"""
|
|
243
|
+
self.console = console or AIPBranding._make_console()
|
|
244
|
+
self.logo = AIPBranding.AIP_LOGO
|
|
245
|
+
self.lines = self.logo.split("\n")
|
|
246
|
+
self.max_width = max(len(line) for line in self.lines) if self.lines else 0
|
|
247
|
+
|
|
248
|
+
def generate_frame(self, step: int, status_text: str = "") -> Text:
|
|
249
|
+
"""Generate a single animation frame with logo pulse and status.
|
|
250
|
+
|
|
251
|
+
Args:
|
|
252
|
+
step: Current animation step (position of the pulse).
|
|
253
|
+
status_text: Optional status text to display below the logo.
|
|
254
|
+
|
|
255
|
+
Returns:
|
|
256
|
+
Text object with styled logo and status.
|
|
257
|
+
"""
|
|
258
|
+
text = Text()
|
|
259
|
+
|
|
260
|
+
for line in self.lines:
|
|
261
|
+
for x, char in enumerate(line):
|
|
262
|
+
distance = abs(x - step)
|
|
263
|
+
|
|
264
|
+
if distance == 0:
|
|
265
|
+
style = f"bold {self.WHITE}" # Bright white center
|
|
266
|
+
elif distance <= 3:
|
|
267
|
+
style = f"bold {self.HIGHLIGHT}" # Light blue glow
|
|
268
|
+
else:
|
|
269
|
+
style = self.BASE_BLUE # Base blue
|
|
270
|
+
|
|
271
|
+
text.append(char, style=style)
|
|
272
|
+
text.append("\n")
|
|
273
|
+
|
|
274
|
+
# Add status area below the logo
|
|
275
|
+
if status_text:
|
|
276
|
+
text.append(f"\n{status_text}\n")
|
|
277
|
+
|
|
278
|
+
return text
|
|
279
|
+
|
|
280
|
+
def should_animate(self) -> bool:
|
|
281
|
+
"""Check if animation should be used.
|
|
282
|
+
|
|
283
|
+
Returns:
|
|
284
|
+
True if animation should be used (interactive TTY with colors),
|
|
285
|
+
False otherwise (NO_COLOR set or non-TTY).
|
|
286
|
+
"""
|
|
287
|
+
# Check for NO_COLOR environment variables
|
|
288
|
+
no_color = os.getenv("NO_COLOR") is not None or os.getenv("AIP_NO_COLOR") is not None
|
|
289
|
+
if no_color:
|
|
290
|
+
return False
|
|
291
|
+
|
|
292
|
+
# Check if console is a TTY
|
|
293
|
+
if not self.console.is_terminal:
|
|
294
|
+
return False
|
|
295
|
+
|
|
296
|
+
# Check if console explicitly disables colors
|
|
297
|
+
if self.console.no_color:
|
|
298
|
+
return False
|
|
299
|
+
|
|
300
|
+
# If we get here, we have a TTY without NO_COLOR set
|
|
301
|
+
# Rich will handle color detection, so we can animate
|
|
302
|
+
return True
|
|
303
|
+
|
|
304
|
+
def display_static_logo(self, status_text: str = "") -> None:
|
|
305
|
+
"""Display static logo without animation (for non-TTY or NO_COLOR).
|
|
306
|
+
|
|
307
|
+
Args:
|
|
308
|
+
status_text: Optional status text to display below the logo.
|
|
309
|
+
"""
|
|
310
|
+
self.console.print(self.static_frame(status_text))
|
|
311
|
+
|
|
312
|
+
def static_frame(self, status_text: str = "") -> Text:
|
|
313
|
+
"""Return a static logo frame for use in non-animated renders.
|
|
314
|
+
|
|
315
|
+
Args:
|
|
316
|
+
status_text: Optional status text to display below the logo.
|
|
317
|
+
"""
|
|
318
|
+
logo_text = Text(self.logo, style=self.BASE_BLUE)
|
|
319
|
+
if status_text:
|
|
320
|
+
logo_text.append("\n")
|
|
321
|
+
logo_text.append(status_text)
|
|
322
|
+
return logo_text
|