glaip-sdk 0.0.4__py3-none-any.whl → 0.0.5b1__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.
Files changed (48) hide show
  1. glaip_sdk/__init__.py +5 -5
  2. glaip_sdk/branding.py +18 -17
  3. glaip_sdk/cli/__init__.py +1 -1
  4. glaip_sdk/cli/agent_config.py +82 -0
  5. glaip_sdk/cli/commands/__init__.py +3 -3
  6. glaip_sdk/cli/commands/agents.py +570 -673
  7. glaip_sdk/cli/commands/configure.py +2 -2
  8. glaip_sdk/cli/commands/mcps.py +148 -143
  9. glaip_sdk/cli/commands/models.py +1 -1
  10. glaip_sdk/cli/commands/tools.py +250 -179
  11. glaip_sdk/cli/display.py +244 -0
  12. glaip_sdk/cli/io.py +106 -0
  13. glaip_sdk/cli/main.py +14 -18
  14. glaip_sdk/cli/resolution.py +59 -0
  15. glaip_sdk/cli/utils.py +305 -264
  16. glaip_sdk/cli/validators.py +235 -0
  17. glaip_sdk/client/__init__.py +3 -224
  18. glaip_sdk/client/agents.py +631 -191
  19. glaip_sdk/client/base.py +66 -4
  20. glaip_sdk/client/main.py +226 -0
  21. glaip_sdk/client/mcps.py +143 -18
  22. glaip_sdk/client/tools.py +146 -11
  23. glaip_sdk/config/constants.py +10 -1
  24. glaip_sdk/models.py +42 -2
  25. glaip_sdk/rich_components.py +29 -0
  26. glaip_sdk/utils/__init__.py +18 -171
  27. glaip_sdk/utils/agent_config.py +181 -0
  28. glaip_sdk/utils/client_utils.py +159 -79
  29. glaip_sdk/utils/display.py +100 -0
  30. glaip_sdk/utils/general.py +94 -0
  31. glaip_sdk/utils/import_export.py +140 -0
  32. glaip_sdk/utils/rendering/formatting.py +6 -1
  33. glaip_sdk/utils/rendering/renderer/__init__.py +67 -8
  34. glaip_sdk/utils/rendering/renderer/base.py +340 -247
  35. glaip_sdk/utils/rendering/renderer/debug.py +3 -2
  36. glaip_sdk/utils/rendering/renderer/panels.py +11 -10
  37. glaip_sdk/utils/rendering/steps.py +1 -1
  38. glaip_sdk/utils/resource_refs.py +192 -0
  39. glaip_sdk/utils/rich_utils.py +29 -0
  40. glaip_sdk/utils/serialization.py +285 -0
  41. glaip_sdk/utils/validation.py +273 -0
  42. {glaip_sdk-0.0.4.dist-info → glaip_sdk-0.0.5b1.dist-info}/METADATA +22 -21
  43. glaip_sdk-0.0.5b1.dist-info/RECORD +55 -0
  44. {glaip_sdk-0.0.4.dist-info → glaip_sdk-0.0.5b1.dist-info}/WHEEL +1 -1
  45. glaip_sdk-0.0.5b1.dist-info/entry_points.txt +3 -0
  46. glaip_sdk/cli/commands/init.py +0 -93
  47. glaip_sdk-0.0.4.dist-info/RECORD +0 -41
  48. glaip_sdk-0.0.4.dist-info/entry_points.txt +0 -2
@@ -0,0 +1,273 @@
1
+ """Validation utilities for resource names, timeouts, and other constraints.
2
+
3
+ This module provides pure validation functions that raise ValueError for invalid
4
+ inputs. CLI layer wraps these with click.ClickException for user-friendly errors.
5
+
6
+ Authors:
7
+ Raymond Christopher (raymond.christopher@gdplabs.id)
8
+ """
9
+
10
+ import re
11
+ from pathlib import Path
12
+ from typing import Any
13
+
14
+ from glaip_sdk.utils.resource_refs import validate_name_format
15
+
16
+ # Constants for validation
17
+ RESERVED_NAMES = ["admin", "root", "system", "api", "test", "demo"]
18
+
19
+
20
+ def validate_agent_name(name: str) -> str:
21
+ """Validate agent name and return cleaned version.
22
+
23
+ Args:
24
+ name: Agent name to validate
25
+
26
+ Returns:
27
+ Cleaned agent name
28
+
29
+ Raises:
30
+ ValueError: If name is invalid
31
+ """
32
+ cleaned_name = validate_name_format(name, "agent")
33
+
34
+ # Check for reserved names
35
+ if cleaned_name.lower() in RESERVED_NAMES:
36
+ raise ValueError(f"'{cleaned_name}' is a reserved name and cannot be used")
37
+
38
+ return cleaned_name
39
+
40
+
41
+ def validate_agent_instruction(instruction: str) -> str:
42
+ """Validate agent instruction and return cleaned version.
43
+
44
+ Args:
45
+ instruction: Agent instruction to validate
46
+
47
+ Returns:
48
+ Cleaned agent instruction
49
+
50
+ Raises:
51
+ ValueError: If instruction is invalid
52
+ """
53
+ if not instruction or not instruction.strip():
54
+ raise ValueError("Agent instruction cannot be empty or whitespace")
55
+
56
+ cleaned_instruction = instruction.strip()
57
+
58
+ if len(cleaned_instruction) > 10000:
59
+ raise ValueError("Agent instruction cannot be longer than 10,000 characters")
60
+
61
+ return cleaned_instruction
62
+
63
+
64
+ def validate_tool_name(name: str) -> str:
65
+ """Validate tool name and return cleaned version.
66
+
67
+ Args:
68
+ name: Tool name to validate
69
+
70
+ Returns:
71
+ Cleaned tool name
72
+
73
+ Raises:
74
+ ValueError: If name is invalid
75
+ """
76
+ cleaned_name = validate_name_format(name, "tool")
77
+
78
+ # Check for reserved names
79
+ if cleaned_name.lower() in RESERVED_NAMES:
80
+ raise ValueError(f"'{cleaned_name}' is a reserved name and cannot be used")
81
+
82
+ return cleaned_name
83
+
84
+
85
+ def validate_mcp_name(name: str) -> str:
86
+ """Validate MCP name and return cleaned version.
87
+
88
+ Args:
89
+ name: MCP name to validate
90
+
91
+ Returns:
92
+ Cleaned MCP name
93
+
94
+ Raises:
95
+ ValueError: If name is invalid
96
+ """
97
+ cleaned_name = validate_name_format(name, "mcp")
98
+
99
+ # Check for reserved names
100
+ if cleaned_name.lower() in RESERVED_NAMES:
101
+ raise ValueError(f"'{cleaned_name}' is a reserved name and cannot be used")
102
+
103
+ return cleaned_name
104
+
105
+
106
+ def validate_timeout(timeout: int) -> int:
107
+ """Validate timeout value.
108
+
109
+ Args:
110
+ timeout: Timeout value in seconds
111
+
112
+ Returns:
113
+ Validated timeout value
114
+
115
+ Raises:
116
+ ValueError: If timeout is invalid
117
+ """
118
+ if timeout < 1:
119
+ raise ValueError("Timeout must be at least 1 second")
120
+
121
+ if timeout > 3600: # 1 hour max
122
+ raise ValueError("Timeout cannot be longer than 1 hour (3600 seconds)")
123
+
124
+ return timeout
125
+
126
+
127
+ def coerce_timeout(value: Any) -> int:
128
+ """Coerce timeout value to integer, handling various input types.
129
+
130
+ Args:
131
+ value: The timeout value to coerce (int, float, str, etc.)
132
+
133
+ Returns:
134
+ Integer timeout value
135
+
136
+ Raises:
137
+ ValueError: If value cannot be coerced to valid timeout
138
+
139
+ Examples:
140
+ coerce_timeout(300) -> 300
141
+ coerce_timeout(300.0) -> 300
142
+ coerce_timeout("300") -> 300
143
+ coerce_timeout(None) -> 300 # Uses DEFAULT_AGENT_RUN_TIMEOUT
144
+ """
145
+ from glaip_sdk.config.constants import DEFAULT_AGENT_RUN_TIMEOUT
146
+
147
+ if value is None:
148
+ return DEFAULT_AGENT_RUN_TIMEOUT
149
+ elif isinstance(value, int):
150
+ return validate_timeout(value)
151
+ elif isinstance(value, float):
152
+ if value.is_integer():
153
+ return validate_timeout(int(value))
154
+ return validate_timeout(int(value)) # Truncate if not integer
155
+ elif isinstance(value, str):
156
+ try:
157
+ fval = float(value)
158
+ return validate_timeout(int(fval))
159
+ except ValueError:
160
+ raise ValueError(f"Invalid timeout value: {value}")
161
+ else:
162
+ try:
163
+ return validate_timeout(int(value))
164
+ except (TypeError, ValueError):
165
+ raise ValueError(f"Invalid timeout value: {value}")
166
+
167
+
168
+ def validate_file_path(file_path: str | Path, must_exist: bool = True) -> Path:
169
+ """Validate file path.
170
+
171
+ Args:
172
+ file_path: File path to validate
173
+ must_exist: Whether file must exist
174
+
175
+ Returns:
176
+ Path object
177
+
178
+ Raises:
179
+ ValueError: If file path is invalid
180
+ """
181
+ path = Path(file_path)
182
+
183
+ if must_exist and not path.exists():
184
+ raise ValueError(f"File does not exist: {file_path}")
185
+
186
+ if must_exist and not path.is_file():
187
+ raise ValueError(f"Path is not a file: {file_path}")
188
+
189
+ return path
190
+
191
+
192
+ def validate_directory_path(dir_path: str | Path, must_exist: bool = True) -> Path:
193
+ """Validate directory path.
194
+
195
+ Args:
196
+ dir_path: Directory path to validate
197
+ must_exist: Whether directory must exist
198
+
199
+ Returns:
200
+ Path object
201
+
202
+ Raises:
203
+ ValueError: If directory path is invalid
204
+ """
205
+ path = Path(dir_path)
206
+
207
+ if must_exist and not path.exists():
208
+ raise ValueError(f"Directory does not exist: {dir_path}")
209
+
210
+ if must_exist and not path.is_dir():
211
+ raise ValueError(f"Path is not a directory: {dir_path}")
212
+
213
+ return path
214
+
215
+
216
+ def validate_url(url: str) -> str:
217
+ """Validate URL format.
218
+
219
+ Args:
220
+ url: URL to validate
221
+
222
+ Returns:
223
+ Validated URL
224
+
225
+ Raises:
226
+ ValueError: If URL is invalid
227
+ """
228
+ url_pattern = re.compile(
229
+ r"^https?://" # http:// or https://
230
+ r"(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?|" # domain...
231
+ r"localhost|" # localhost...
232
+ r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})" # ...or ip
233
+ r"(?::\d+)?" # optional port
234
+ r"(?:/?|[/?]\S+)$",
235
+ re.IGNORECASE,
236
+ )
237
+
238
+ if not url_pattern.match(url):
239
+ raise ValueError(f"Invalid URL format: {url}")
240
+
241
+ return url
242
+
243
+
244
+ def validate_api_key(api_key: str) -> str:
245
+ """Validate API key format.
246
+
247
+ Args:
248
+ api_key: API key to validate
249
+
250
+ Returns:
251
+ Validated API key
252
+
253
+ Raises:
254
+ ValueError: If API key is invalid
255
+ """
256
+ if not api_key or not api_key.strip():
257
+ raise ValueError("API key cannot be empty")
258
+
259
+ cleaned_key = api_key.strip()
260
+
261
+ if len(cleaned_key) < 10:
262
+ raise ValueError("API key appears to be too short")
263
+
264
+ if len(cleaned_key) > 200:
265
+ raise ValueError("API key appears to be too long")
266
+
267
+ # Check for potentially invalid characters
268
+ if not re.match(r"^[a-zA-Z0-9_-]+$", cleaned_key):
269
+ raise ValueError(
270
+ "API key contains invalid characters. Only letters, numbers, hyphens, and underscores are allowed."
271
+ )
272
+
273
+ return cleaned_key
@@ -1,27 +1,27 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.1
2
2
  Name: glaip-sdk
3
- Version: 0.0.4
4
- Summary: Python SDK for AI Agent Platform - Simplified CLI Design
5
- Author-email: Raymond Christopher <raymond.christopher@gdplabs.id>
3
+ Version: 0.0.5b1
4
+ Summary: Python SDK for GL AIP (GDP Labs AI Agent Package) - Simplified CLI Design
6
5
  License: MIT
6
+ Author: Raymond Christopher
7
+ Author-email: raymond.christopher@gdplabs.id
7
8
  Requires-Python: >=3.10
8
- Requires-Dist: click>=8.2.0
9
- Requires-Dist: httpx>=0.28.1
10
- Requires-Dist: pydantic>=2.0.0
11
- Requires-Dist: python-dotenv<2.0.0,>=1.1.1
12
- Requires-Dist: pyyaml>=6.0.0
13
- Requires-Dist: questionary<3.0.0,>=2.1.0
14
- Requires-Dist: readchar<5.0.0,>=4.2.1
15
- Requires-Dist: rich>=13.0.0
16
- Provides-Extra: dev
17
- Requires-Dist: pre-commit>=4.3.0; extra == 'dev'
18
- Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
19
- Requires-Dist: pytest-dotenv>=0.5.2; extra == 'dev'
20
- Requires-Dist: pytest-xdist>=3.8.0; extra == 'dev'
21
- Requires-Dist: pytest>=7.0.0; extra == 'dev'
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)
15
+ Requires-Dist: httpx (>=0.28.1)
16
+ Requires-Dist: pydantic (>=2.0.0)
17
+ Requires-Dist: python-dotenv (>=1.1.1,<2.0.0)
18
+ Requires-Dist: pyyaml (>=6.0.0)
19
+ Requires-Dist: questionary (>=2.1.0,<3.0.0)
20
+ Requires-Dist: readchar (>=4.2.1,<5.0.0)
21
+ Requires-Dist: rich (>=13.0.0)
22
22
  Description-Content-Type: text/markdown
23
23
 
24
- # AIP SDK — Enterprise AI Agent Platform (Python)
24
+ # GL AIP SDK — Enterprise AI Agent Package (Python)
25
25
 
26
26
  [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
27
27
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
@@ -230,7 +230,7 @@ agent.delete()
230
230
  **CLI:**
231
231
  ```bash
232
232
  # Configure and create your first agent
233
- aip init
233
+ aip configure
234
234
  aip agents create --name "hello" --instruction "You are a helpful assistant"
235
235
  aip agents run <AGENT_ID> --input "Hello! What can you do?"
236
236
  aip agents delete <AGENT_ID>
@@ -431,7 +431,7 @@ tool.delete()
431
431
 
432
432
  ```bash
433
433
  # Configure
434
- aip init
434
+ aip configure
435
435
 
436
436
  # Agents
437
437
  aip agents create --name "helper" --instruction "You are helpful"
@@ -642,3 +642,4 @@ aip agents list --view json
642
642
  ## License
643
643
 
644
644
  MIT — see [LICENSE](LICENSE)
645
+
@@ -0,0 +1,55 @@
1
+ glaip_sdk/__init__.py,sha256=AmY3ggfFTMzWNiHc6RYkdr-IgDqU6CZvU7PGdoyVULg,370
2
+ glaip_sdk/_version.py,sha256=Rb9YLDvK1DXCVFrjlLDbtucpwKh_PyCnmZ-ia9VX3Cc,1650
3
+ glaip_sdk/branding.py,sha256=TLx2j4q3QJrmsbQsvtbd9Ta99rQkX8HzYIDwy-D8tz4,5301
4
+ glaip_sdk/cli/__init__.py,sha256=xCCfuF1Yc7mpCDcfhHZTX0vizvtrDSLeT8MJ3V7m5A0,156
5
+ glaip_sdk/cli/agent_config.py,sha256=VHjebw68wAdhGUzYdPH8qz10oADZPRgUQcPW6F7iHIU,2421
6
+ glaip_sdk/cli/commands/__init__.py,sha256=ZAzgT9y68_BbSpuIClPoZureIxEM8gqmG9qL3iFkCyQ,173
7
+ glaip_sdk/cli/commands/agents.py,sha256=xd8zFF8J7Qdes5ywFGhqSpEpe9UhB9oLJfrhT3kbr-I,33989
8
+ glaip_sdk/cli/commands/configure.py,sha256=5Rr_gGc7j53CipCC9shE4uyvpX-06Sif0p2YpbAz33s,7306
9
+ glaip_sdk/cli/commands/mcps.py,sha256=HK3XCnVajjnU02eFHzVtqCEJK5X39ozt9ag-fe32tRM,12476
10
+ glaip_sdk/cli/commands/models.py,sha256=JhVhH-c5V-VkxJu4jXvm2hmaeU7LXuT9KOH9XWcpubg,1417
11
+ glaip_sdk/cli/commands/tools.py,sha256=1Qm-FrWkxF-pjsU0jP9MSW4L1gfzqIYDiZdDy7qhQRg,17475
12
+ glaip_sdk/cli/display.py,sha256=wFYReJQ0VTiQYepWd6uFLvHdYkpAj321o8e7P2zSvfY,8058
13
+ glaip_sdk/cli/io.py,sha256=9DxJsuJyl_kDkxXCt661mZIpBxnfT7rvJ6Xq2a1ie5M,3326
14
+ glaip_sdk/cli/main.py,sha256=U13On-zpLZLTDbruWHDhkgo6HYbcxrc5SL9ttiXsnlw,10414
15
+ glaip_sdk/cli/resolution.py,sha256=FlWEg7Frtw2jwdLLfed58mTXsUv73loI677CezDp4KM,1619
16
+ glaip_sdk/cli/utils.py,sha256=dwiZ6P6j75fcE_hDmLmV2IfrIlXsVdFWR4EI_1LMhqU,29653
17
+ glaip_sdk/cli/validators.py,sha256=0VXG91hVlFVGYMfk5gm1XpiRqDKS_3wWfmfjPZmWPYw,5446
18
+ glaip_sdk/client/__init__.py,sha256=nYLXfBVTTWwKjP0e63iumPYO4k5FifwWaELQPaPIKIg,188
19
+ glaip_sdk/client/agents.py,sha256=j6MljkfVIDAL5sAa0fcIre_ZjQ_1co9pGhqFphBPT8c,30702
20
+ glaip_sdk/client/base.py,sha256=NcxiM2oGKXktNi4zubljO5OhD3DCEP-X0KfuJ9QY4xg,12098
21
+ glaip_sdk/client/main.py,sha256=LlvYHP7-Hy7Eq1ep1kfk337K-Oue5SdKWJpqYfX9eXY,7993
22
+ glaip_sdk/client/mcps.py,sha256=yxwrAtztElYDEGhp2EHRpeYUxNsOlTLTqtw9jSKJmcI,8936
23
+ glaip_sdk/client/tools.py,sha256=ZvRRbXHvd33XUKqmKAIFSvz_IO-1glTvJNyxOeivK9Q,15962
24
+ glaip_sdk/client/validators.py,sha256=3MtOt11IivEwQAgzmdRGWUBzP223ytECOLU_a77x7IU,7101
25
+ glaip_sdk/config/constants.py,sha256=mOH2conxcj8t-bGhwgP_iFX4NMkNEm-9k5QN2F8yqyY,925
26
+ glaip_sdk/exceptions.py,sha256=QTVtwxRHMN4e8gGn0icXphZvdugiRvcSrlMYylwGsDc,1993
27
+ glaip_sdk/models.py,sha256=d8VSE1lm8jR0p_ep8cNaPZ6h2FfKudeAtCZlTxrw_wc,8729
28
+ glaip_sdk/rich_components.py,sha256=pmJd-81OQE8bC9UOXtga5rsax4zphKlzCZ1JoWbbQzQ,803
29
+ glaip_sdk/utils/__init__.py,sha256=9Y4eCjXx9_t_29CfnH-ChCf2b0YsYCLSJN9s9_HnzLo,926
30
+ glaip_sdk/utils/agent_config.py,sha256=b7_J5DELyk0b_XEoi7tsxbS3wqzAKbMa-3_C-65pPIY,6791
31
+ glaip_sdk/utils/client_utils.py,sha256=JdmP2OolXy83lzXxKDvswRw3bCorh2c3Gm5uy-sDeXQ,11839
32
+ glaip_sdk/utils/display.py,sha256=BHVD194MS1vEWm5oaLfEx_vxGoUyHGMGcQJDnKLh2AI,3071
33
+ glaip_sdk/utils/general.py,sha256=YolKDCs1wNcefQ9fOk5wd9prSxJZe1-PHsZSH1a8wDQ,2186
34
+ glaip_sdk/utils/import_export.py,sha256=-XX21D0emPyC6EWpBsxySU1-lb3dkY1jJEjx11oLa6I,4503
35
+ glaip_sdk/utils/rendering/__init__.py,sha256=vXjwk5rPhhfPyD8S0DnV4GFFEtPJp4HCCg1Um9SXfs0,70
36
+ glaip_sdk/utils/rendering/formatting.py,sha256=zTF5E7BcswaIHHGFMjy1ylo6kJfpLQmeeAgFYITthcU,7165
37
+ glaip_sdk/utils/rendering/models.py,sha256=ffPMv4XrKY4V2-THL69KONZf1NL7msIa-jVZAVuz2Js,1559
38
+ glaip_sdk/utils/rendering/renderer/__init__.py,sha256=EXwVBmGkSYcype4ocAXo69Z1kXu0gpNXmhH5LW0_B7A,2939
39
+ glaip_sdk/utils/rendering/renderer/base.py,sha256=LjtJmEs_pAw4uux1XgfZRJGA-myPzCCpwmYbBg0io98,34067
40
+ glaip_sdk/utils/rendering/renderer/config.py,sha256=E4ER8TJJbqr1hcWjkwG7XROqLuccQy4EL99CbuLvSXE,783
41
+ glaip_sdk/utils/rendering/renderer/console.py,sha256=ibQU07rmrWw-MMX6n3J2ewxuOEY-Z6RnKEfzMH2-IrA,1744
42
+ glaip_sdk/utils/rendering/renderer/debug.py,sha256=VqpQAmBA3DtHVIqIeWJSgrycmzORUBk1kJ5m6b3tz4s,2884
43
+ glaip_sdk/utils/rendering/renderer/panels.py,sha256=_KJohKOsyOBkqKzlC-hOSwZt1SGsJRhQwizlrRgWMis,3040
44
+ glaip_sdk/utils/rendering/renderer/progress.py,sha256=i4HG_iNwtK4c3Gf2sviLCiOJ-5ydX4t-YE5dgtLOxNI,3438
45
+ glaip_sdk/utils/rendering/renderer/stream.py,sha256=ZKitYkt_7OirNeERu3cc_NybQ8mWUMoEstg9UL1S090,7323
46
+ glaip_sdk/utils/rendering/steps.py,sha256=SPImcV6f-TY_ITLyi4mSTeTu4SJxlMN7fWEKfDLL3Z8,5862
47
+ glaip_sdk/utils/resource_refs.py,sha256=0YzblJNfRhz9xhpaKE9aE68XEV-6_ssr0fIkiMVOka0,5489
48
+ glaip_sdk/utils/rich_utils.py,sha256=8jPG8HsDTr6nj2vh4_be5ULCGxG1ZSinJqHZT6pdXsY,755
49
+ glaip_sdk/utils/run_renderer.py,sha256=JGQzXymsptgr927-F49H1AOT5bzqErDXZMF2pOxqbfw,1365
50
+ glaip_sdk/utils/serialization.py,sha256=eqbxPOBxuJ88NpES_rGWs1m7QJcs00IwhFOk1GHoZyE,7803
51
+ glaip_sdk/utils/validation.py,sha256=QjBRsYFrP8MLl-xMq68Sk-Gyev-EGLGiY2l5t0ALySc,6990
52
+ glaip_sdk-0.0.5b1.dist-info/METADATA,sha256=BwVLXLD8FOOvs68IBMCUcpZyobzW2qrx9AZEgbJGWsY,19549
53
+ glaip_sdk-0.0.5b1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
54
+ glaip_sdk-0.0.5b1.dist-info/entry_points.txt,sha256=EGs8NO8J1fdFMWA3CsF7sKBEvtHb_fujdCoNPhfMouE,47
55
+ glaip_sdk-0.0.5b1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: poetry-core 1.9.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ aip=glaip_sdk.cli.main:main
3
+
@@ -1,93 +0,0 @@
1
- """CLI initialization command.
2
-
3
- Authors:
4
- Raymond Christopher (raymond.christopher@gdplabs.id)
5
- """
6
-
7
- import getpass
8
- import os
9
- from pathlib import Path
10
-
11
- import click
12
- import yaml
13
- from rich.console import Console
14
- from rich.text import Text
15
-
16
- from glaip_sdk import Client
17
- from glaip_sdk._version import __version__ as _SDK_VERSION
18
- from glaip_sdk.branding import AIPBranding
19
-
20
- console = Console()
21
-
22
-
23
- @click.command()
24
- def init_command():
25
- """Initialize AIP project configuration."""
26
- # Display AIP welcome banner
27
- branding = AIPBranding.create_from_sdk(
28
- sdk_version=_SDK_VERSION, package_name="glaip-sdk"
29
- )
30
- branding.display_welcome_panel(title="🚀 AIP Initialization")
31
-
32
- # Get configuration
33
- console.print("\n[bold]API Configuration[/bold]")
34
- console.print("─" * 50)
35
-
36
- console.print(
37
- "\n[cyan]AIP API URL[/cyan] (default: https://your-aip-instance.com):"
38
- )
39
- api_url = input("> ").strip()
40
- if not api_url:
41
- api_url = "https://your-aip-instance.com"
42
-
43
- console.print("\n[cyan]AIP API Key[/cyan]:")
44
- api_key = getpass.getpass("> ")
45
-
46
- # Create config directory
47
- config_dir = Path.home() / ".aip"
48
- try:
49
- config_dir.mkdir(exist_ok=True)
50
- except Exception as e:
51
- console.print(Text(f"⚠️ Warning: Could not create config directory: {e}"))
52
- return
53
-
54
- # Save configuration
55
- config = {"api_url": api_url, "api_key": api_key}
56
- config_file = config_dir / "config.yaml"
57
- try:
58
- with open(config_file, "w") as f:
59
- yaml.dump(config, f, default_flow_style=False)
60
- except Exception as e:
61
- console.print(Text(f"⚠️ Warning: Could not save configuration: {e}"))
62
- return
63
-
64
- # Set secure file permissions (0600) - best effort on all platforms
65
- try:
66
- os.chmod(config_file, 0o600)
67
- except Exception:
68
- pass # Ignore permission errors
69
-
70
- console.print(Text(f"\n✅ Configuration saved to: {config_file}"))
71
-
72
- # Test the new configuration
73
- console.print("\n🔌 Testing connection...")
74
- try:
75
- # Set environment variables
76
- os.environ["AIP_API_URL"] = api_url
77
- os.environ["AIP_API_KEY"] = api_key
78
-
79
- client = Client()
80
- agents = client.list_agents()
81
- console.print(Text(f"✅ Connection successful! Found {len(agents)} agents"))
82
- except Exception as e:
83
- console.print(Text(f"⚠️ Connection established but API call failed: {e}"))
84
- console.print(
85
- Text(" You may need to check your API permissions or network access")
86
- )
87
-
88
- console.print("\n🎉 [bold green]AIP initialization complete![/bold green]")
89
- console.print(f"📁 Configuration: {config_file}")
90
- console.print("💡 Next steps:")
91
- console.print(" • Run 'aip agents list' to see your agents")
92
- console.print(" • Run 'aip tools list' to see your tools")
93
- console.print(" • Run 'aip status' to check connection")
@@ -1,41 +0,0 @@
1
- glaip_sdk/__init__.py,sha256=UGBsYHHSgSc1HGCTsA9bbz2ARJJ1g49cTieXEINHtAk,323
2
- glaip_sdk/_version.py,sha256=Rb9YLDvK1DXCVFrjlLDbtucpwKh_PyCnmZ-ia9VX3Cc,1650
3
- glaip_sdk/branding.py,sha256=Iwm9qsPoRNCiv7IS_pet_vno8ltdVR4UwyEHoYH7qp0,4891
4
- glaip_sdk/exceptions.py,sha256=QTVtwxRHMN4e8gGn0icXphZvdugiRvcSrlMYylwGsDc,1993
5
- glaip_sdk/models.py,sha256=kkuH66cj5Oyrma3bLldPpheeXR4H9xZa_z32bpLd3DU,7229
6
- glaip_sdk/cli/__init__.py,sha256=cPI-uOOBww_ESiH6NQBdJiTg8CUVNigFOU3kl0tgTuI,143
7
- glaip_sdk/cli/main.py,sha256=jiZmj9smpFYkdToJip_JMBNoBEIqOrt1cTaTQrNmN7w,10557
8
- glaip_sdk/cli/utils.py,sha256=UBIrLIKLi4UZjwEa8J1AiOyGJe8o6eVhYBCwjx51CxQ,29182
9
- glaip_sdk/cli/commands/__init__.py,sha256=WShiuYqHcbuexPboibDJ_Q2jOPIWp-TgsyUAO2-T20I,134
10
- glaip_sdk/cli/commands/agents.py,sha256=yNrlOooe9vx_A_frycdJ9U4aibXAHV4aYwVYn54RbSY,38515
11
- glaip_sdk/cli/commands/configure.py,sha256=SNaWPO0bgI6bztlKgoqGr0qh2KSSDztyubKhrw_HLEI,7285
12
- glaip_sdk/cli/commands/init.py,sha256=W4z5TBlfSn9fmHpH1W92llgqfF0OvhgJSdny-P61Y_4,2934
13
- glaip_sdk/cli/commands/mcps.py,sha256=4Ny54ApHYFCkJCXORD7zslVnrNdKs981adIbJNaYAMQ,12099
14
- glaip_sdk/cli/commands/models.py,sha256=j8VqQ2edSEvD-sQXWm8ifUco9gX8J-OBib6OvzthpqU,1405
15
- glaip_sdk/cli/commands/tools.py,sha256=-xPMOKD-shI2ly9Tl-IwhKQR2kEekEs63bw7EEXNoAU,14508
16
- glaip_sdk/client/__init__.py,sha256=jnsD3HCiOGiuL_4aqJiVnBsF8HNFS-s_aNLfg26gJqs,7530
17
- glaip_sdk/client/agents.py,sha256=k3QthlIu82KeXV_W29LuFTGZVzyGL11ZY5OA4P4a2Ug,15041
18
- glaip_sdk/client/base.py,sha256=3Ri5GVYrZ4cZ5lex1pyG0nvEmGxeXwAY194MxSH1_cY,9463
19
- glaip_sdk/client/mcps.py,sha256=UEwgFbl4ogeozfJGcUbQQ7JGfwYliN9i5V6fTvkbOZ0,4311
20
- glaip_sdk/client/tools.py,sha256=v5jxHPgoGHwB2PXzlm0yywvqKaYLcrm6dJz9aT1SxuM,10954
21
- glaip_sdk/client/validators.py,sha256=3MtOt11IivEwQAgzmdRGWUBzP223ytECOLU_a77x7IU,7101
22
- glaip_sdk/config/constants.py,sha256=Pm0tGYiJ9VdW9XXz0CG36l8-sAhnlFPTKbHKKleUgik,705
23
- glaip_sdk/utils/__init__.py,sha256=5pOPBTjJ4hzvMNYjLnTut_ovwU8QJ39kARKx9-qr5Qs,5101
24
- glaip_sdk/utils/client_utils.py,sha256=O44OlbQD4X0cMo_3E_Ysb_XyfEG20v0wecl5SlM9kxo,9407
25
- glaip_sdk/utils/run_renderer.py,sha256=JGQzXymsptgr927-F49H1AOT5bzqErDXZMF2pOxqbfw,1365
26
- glaip_sdk/utils/rendering/__init__.py,sha256=vXjwk5rPhhfPyD8S0DnV4GFFEtPJp4HCCg1Um9SXfs0,70
27
- glaip_sdk/utils/rendering/formatting.py,sha256=HPCBcpWP3EpSXsIgfm-uWm6Fjo6VWzqxrnhEc137wjA,6941
28
- glaip_sdk/utils/rendering/models.py,sha256=ffPMv4XrKY4V2-THL69KONZf1NL7msIa-jVZAVuz2Js,1559
29
- glaip_sdk/utils/rendering/steps.py,sha256=qx6aNhfYYAbcXaHws-zdHOc4Yw3me3Cd19SZkZluJvg,5837
30
- glaip_sdk/utils/rendering/renderer/__init__.py,sha256=kZwCYRcQdK-9sfZPxAAqLB--A2icLbSKq7AW1_NIIGQ,987
31
- glaip_sdk/utils/rendering/renderer/base.py,sha256=IRQMNW4WHPRpBFXfXuHSo8oOWi4-Tn1_hF9a9x0_q3c,32288
32
- glaip_sdk/utils/rendering/renderer/config.py,sha256=E4ER8TJJbqr1hcWjkwG7XROqLuccQy4EL99CbuLvSXE,783
33
- glaip_sdk/utils/rendering/renderer/console.py,sha256=ibQU07rmrWw-MMX6n3J2ewxuOEY-Z6RnKEfzMH2-IrA,1744
34
- glaip_sdk/utils/rendering/renderer/debug.py,sha256=2XP6A4w3EIjVVY_M-BDPvHf05QQSz0TDTo-dRPf1fSc,2862
35
- glaip_sdk/utils/rendering/renderer/panels.py,sha256=iTDJoRBaa73pX9z9nTcb6aKhfXe1Mds0RzCuhwtvkdc,2994
36
- glaip_sdk/utils/rendering/renderer/progress.py,sha256=i4HG_iNwtK4c3Gf2sviLCiOJ-5ydX4t-YE5dgtLOxNI,3438
37
- glaip_sdk/utils/rendering/renderer/stream.py,sha256=ZKitYkt_7OirNeERu3cc_NybQ8mWUMoEstg9UL1S090,7323
38
- glaip_sdk-0.0.4.dist-info/METADATA,sha256=H5uB6CuucGboUl_Z9LhzJHOIc7PS_a0pgHcqNX7-ANE,19501
39
- glaip_sdk-0.0.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
40
- glaip_sdk-0.0.4.dist-info/entry_points.txt,sha256=65vNPUggyYnVGhuw7RhNJ8Fp2jygTcX0yxJBcBY3iLU,48
41
- glaip_sdk-0.0.4.dist-info/RECORD,,
@@ -1,2 +0,0 @@
1
- [console_scripts]
2
- aip = glaip_sdk.cli.main:main