codemie-sdk-python 0.1.569__tar.gz → 0.1.570__tar.gz

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 (68) hide show
  1. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/PKG-INFO +1 -1
  2. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/pyproject.toml +1 -1
  3. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/client/client.py +4 -0
  4. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/skill.py +9 -0
  5. codemie_sdk_python-0.1.570/src/codemie_sdk/services/dynamic_config.py +81 -0
  6. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/skill.py +9 -0
  7. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/README.md +0 -0
  8. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/__init__.py +0 -0
  9. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/auth/__init__.py +0 -0
  10. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/auth/credentials.py +0 -0
  11. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/client/__init__.py +0 -0
  12. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/exceptions.py +0 -0
  13. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/__init__.py +0 -0
  14. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/activity_event.py +0 -0
  15. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/admin.py +0 -0
  16. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/analytics.py +0 -0
  17. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/assistant.py +0 -0
  18. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/categories.py +0 -0
  19. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/common.py +0 -0
  20. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/conversation.py +0 -0
  21. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/datasource.py +0 -0
  22. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/errors.py +0 -0
  23. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/file_operation.py +0 -0
  24. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/guardrails.py +0 -0
  25. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/integration.py +0 -0
  26. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/llm.py +0 -0
  27. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/mcp_config.py +0 -0
  28. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/mermaid.py +0 -0
  29. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/project.py +0 -0
  30. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/task.py +0 -0
  31. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/user.py +0 -0
  32. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/vendor_assistant.py +0 -0
  33. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/vendor_guardrail.py +0 -0
  34. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/vendor_knowledgebase.py +0 -0
  35. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/vendor_runtime.py +0 -0
  36. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/vendor_workflow.py +0 -0
  37. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/workflow.py +0 -0
  38. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/workflow_execution_payload.py +0 -0
  39. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/workflow_state.py +0 -0
  40. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/workflow_thoughts.py +0 -0
  41. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/models/workflow_transition.py +0 -0
  42. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/activity_event.py +0 -0
  43. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/admin.py +0 -0
  44. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/analytics.py +0 -0
  45. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/assistant.py +0 -0
  46. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/categories.py +0 -0
  47. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/codemie_guardrails.py +0 -0
  48. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/conversation.py +0 -0
  49. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/datasource.py +0 -0
  50. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/files.py +0 -0
  51. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/integration.py +0 -0
  52. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/llm.py +0 -0
  53. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/mcp_configs.py +0 -0
  54. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/mermaid.py +0 -0
  55. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/project.py +0 -0
  56. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/task.py +0 -0
  57. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/user.py +0 -0
  58. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/vendor_assistant.py +0 -0
  59. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/vendor_guardrail.py +0 -0
  60. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/vendor_knowledgebase.py +0 -0
  61. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/vendor_runtime.py +0 -0
  62. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/vendor_workflow.py +0 -0
  63. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/webhook.py +0 -0
  64. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/workflow.py +0 -0
  65. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/workflow_execution.py +0 -0
  66. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/services/workflow_execution_state.py +0 -0
  67. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/utils/__init__.py +0 -0
  68. {codemie_sdk_python-0.1.569 → codemie_sdk_python-0.1.570}/src/codemie_sdk/utils/http.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: codemie-sdk-python
3
- Version: 0.1.569
3
+ Version: 0.1.570
4
4
  Summary: CodeMie SDK for Python
5
5
  Author: Vadym Vlasenko
6
6
  Author-email: vadym_vlasenko@epam.com
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "codemie-sdk-python"
3
- version = "0.1.569"
3
+ version = "0.1.570"
4
4
  description = "CodeMie SDK for Python"
5
5
  authors = [
6
6
  "Vadym Vlasenko <vadym_vlasenko@epam.com>",
@@ -26,6 +26,7 @@ from ..services.vendor_guardrail import VendorGuardrailService
26
26
  from ..services.vendor_runtime import VendorRuntimeService
27
27
  from ..services.activity_event import ActivityEventService
28
28
  from ..services.codemie_guardrails import CodemieGuardrailService
29
+ from ..services.dynamic_config import DynamicConfigService
29
30
  from ..services.mcp_configs import MCPConfigsService
30
31
 
31
32
 
@@ -165,6 +166,9 @@ class CodeMieClient:
165
166
  self.mcp_configs = MCPConfigsService(
166
167
  self._api_domain, _token_source, verify_ssl=self._verify_ssl
167
168
  )
169
+ self.dynamic_config = DynamicConfigService(
170
+ self._api_domain, _token_source, verify_ssl=self._verify_ssl
171
+ )
168
172
 
169
173
  @property
170
174
  def token(self) -> str:
@@ -214,3 +214,12 @@ class SingleSkillStatsResponse(BaseModel):
214
214
  installs: int
215
215
  removals: int
216
216
  by_agent: dict[str, int] = Field(default_factory=dict)
217
+
218
+
219
+ class SkillConfigResponse(BaseModel):
220
+ """Response model for GET /v1/skills/config."""
221
+
222
+ model_config = ConfigDict(extra="ignore")
223
+
224
+ max_content_length: int
225
+ min_content_length: int
@@ -0,0 +1,81 @@
1
+ """Dynamic config service implementation."""
2
+
3
+ import requests
4
+ from requests.exceptions import HTTPError
5
+
6
+ from ..utils.http import ApiRequestHandler, TokenSource
7
+
8
+
9
+ class DynamicConfigService:
10
+ """Service for managing dynamic configuration values via the admin endpoint."""
11
+
12
+ def __init__(self, api_domain: str, token: TokenSource, verify_ssl: bool = True):
13
+ """Initialize the dynamic config service.
14
+
15
+ Args:
16
+ api_domain: Base URL for the CodeMie API
17
+ token: Authentication token
18
+ verify_ssl: Whether to verify SSL certificates. Default: True
19
+ """
20
+ self._api = ApiRequestHandler(api_domain, token, verify_ssl)
21
+
22
+ def set(self, key: str, value: int) -> dict:
23
+ """Upsert a dynamic config integer value.
24
+
25
+ Tries POST /v1/dynamic-config/ to create the key. If the key already
26
+ exists (HTTP 409), falls back to PUT /v1/dynamic-config/{key} to update.
27
+ The value is serialised as a string with value_type 'int' as required by
28
+ the API.
29
+
30
+ Args:
31
+ key: Config key name (e.g. "SKILL_MAX_CONTENT_LENGTH")
32
+ value: Integer value to set
33
+
34
+ Returns:
35
+ Response dict from the admin endpoint
36
+
37
+ Raises:
38
+ ValueError: If key is empty or contains a path separator
39
+ """
40
+ if not key or "/" in key:
41
+ raise ValueError(f"Invalid config key: {key!r}")
42
+ # Try to create first; use raw Response so we can inspect the status code
43
+ response = self._api.post(
44
+ "/v1/dynamic-config/",
45
+ requests.Response,
46
+ json_data={"key": key, "value": str(value), "value_type": "int"},
47
+ wrap_response=False,
48
+ raise_on_error=False,
49
+ )
50
+ if response.status_code == 409:
51
+ # Key already exists — update it via PUT
52
+ return self._api.put(
53
+ f"/v1/dynamic-config/{key}",
54
+ dict,
55
+ json_data={"value": str(value)},
56
+ wrap_response=False,
57
+ )
58
+ response.raise_for_status()
59
+ return response.json()
60
+
61
+ def delete(self, key: str) -> None:
62
+ """Delete a dynamic config key, restoring the system to its built-in default.
63
+
64
+ Silently succeeds when the key does not exist (404 is treated as already
65
+ absent — the operation is idempotent).
66
+
67
+ Args:
68
+ key: Config key name (e.g. "SKILL_MAX_CONTENT_LENGTH")
69
+
70
+ Raises:
71
+ ValueError: If key is empty or contains a path separator
72
+ requests.HTTPError: On non-2xx / non-404 response
73
+ """
74
+ if not key or "/" in key:
75
+ raise ValueError(f"Invalid config key: {key!r}")
76
+ try:
77
+ self._api.delete(f"/v1/dynamic-config/{key}", dict, wrap_response=False)
78
+ except HTTPError as exc:
79
+ if exc.response is not None and exc.response.status_code == 404:
80
+ return # Key did not exist — already at default state
81
+ raise
@@ -9,6 +9,7 @@ from ..models.skill import (
9
9
  SkillAttachRequest,
10
10
  SkillBulkAttachRequest,
11
11
  SkillCategory,
12
+ SkillConfigResponse,
12
13
  SkillCreateRequest,
13
14
  SkillDetailResponse,
14
15
  SkillEventItem,
@@ -388,3 +389,11 @@ class SkillService:
388
389
  return self._api.get(
389
390
  f"/v1/skills/events/{slug}/stats", SingleSkillStatsResponse
390
391
  )
392
+
393
+ def get_config(self) -> SkillConfigResponse:
394
+ """Get effective skill content-length limits.
395
+
396
+ Returns:
397
+ Skill config with max_content_length and min_content_length
398
+ """
399
+ return self._api.get("/v1/skills/config", SkillConfigResponse)