codemie-sdk-python 0.1.701__tar.gz → 0.1.703__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 (81) hide show
  1. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/PKG-INFO +1 -1
  2. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/pyproject.toml +1 -1
  3. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/cost_center.py +27 -0
  4. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/datasource.py +24 -4
  5. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/mcp_config.py +48 -1
  6. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/cost_center.py +22 -0
  7. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/mcp_configs.py +46 -1
  8. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/project.py +1 -1
  9. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/README.md +0 -0
  10. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/__init__.py +0 -0
  11. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/auth/__init__.py +0 -0
  12. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/auth/credentials.py +0 -0
  13. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/builders/__init__.py +0 -0
  14. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/builders/workflow/__init__.py +0 -0
  15. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/builders/workflow/builder.py +0 -0
  16. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/builders/workflow/definition.py +0 -0
  17. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/builders/workflow/publish.py +0 -0
  18. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/client/__init__.py +0 -0
  19. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/client/client.py +0 -0
  20. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/exceptions.py +0 -0
  21. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/__init__.py +0 -0
  22. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/a2a.py +0 -0
  23. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/activity_event.py +0 -0
  24. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/admin.py +0 -0
  25. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/analytics.py +0 -0
  26. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/assistant.py +0 -0
  27. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/categories.py +0 -0
  28. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/common.py +0 -0
  29. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/conversation.py +0 -0
  30. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/errors.py +0 -0
  31. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/file_operation.py +0 -0
  32. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/guardrails.py +0 -0
  33. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/integration.py +0 -0
  34. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/llm.py +0 -0
  35. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/mermaid.py +0 -0
  36. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/project.py +0 -0
  37. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/skill.py +0 -0
  38. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/task.py +0 -0
  39. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/user.py +0 -0
  40. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/vendor_assistant.py +0 -0
  41. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/vendor_guardrail.py +0 -0
  42. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/vendor_knowledgebase.py +0 -0
  43. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/vendor_runtime.py +0 -0
  44. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/vendor_workflow.py +0 -0
  45. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/workflow.py +0 -0
  46. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/workflow_execution_payload.py +0 -0
  47. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/workflow_state.py +0 -0
  48. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/workflow_thoughts.py +0 -0
  49. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/workflow_transition.py +0 -0
  50. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/models/workspace.py +0 -0
  51. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/a2a.py +0 -0
  52. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/activity_event.py +0 -0
  53. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/admin.py +0 -0
  54. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/analytics.py +0 -0
  55. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/assistant.py +0 -0
  56. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/categories.py +0 -0
  57. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/codemie_guardrails.py +0 -0
  58. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/conversation.py +0 -0
  59. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/customer_config_service.py +0 -0
  60. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/datasource.py +0 -0
  61. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/dynamic_config.py +0 -0
  62. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/files.py +0 -0
  63. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/integration.py +0 -0
  64. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/llm.py +0 -0
  65. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/mermaid.py +0 -0
  66. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/project_budget_groups.py +0 -0
  67. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/skill.py +0 -0
  68. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/task.py +0 -0
  69. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/user.py +0 -0
  70. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/vendor_assistant.py +0 -0
  71. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/vendor_guardrail.py +0 -0
  72. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/vendor_knowledgebase.py +0 -0
  73. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/vendor_runtime.py +0 -0
  74. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/vendor_workflow.py +0 -0
  75. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/webhook.py +0 -0
  76. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/workflow.py +0 -0
  77. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/workflow_execution.py +0 -0
  78. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/workflow_execution_state.py +0 -0
  79. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/services/workspace.py +0 -0
  80. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/utils/__init__.py +0 -0
  81. {codemie_sdk_python-0.1.701 → codemie_sdk_python-0.1.703}/src/codemie_sdk/utils/http.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codemie-sdk-python
3
- Version: 0.1.701
3
+ Version: 0.1.703
4
4
  Summary: CodeMie SDK for Python
5
5
  License: Apache-2.0
6
6
  Author: CodeMie
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "codemie-sdk-python"
3
- version = "0.1.701"
3
+ version = "0.1.703"
4
4
  description = "CodeMie SDK for Python"
5
5
  authors = ["CodeMie"]
6
6
  license = "Apache-2.0"
@@ -59,3 +59,30 @@ class PaginatedCostCenterListResponse(BaseModel):
59
59
 
60
60
  data: list[CostCenterResponse]
61
61
  pagination: PaginationInfo
62
+
63
+
64
+ class CostCenterAssignedBudgetSummary(BaseModel):
65
+ """Per-category budget totals aggregated across a cost center's linked projects."""
66
+
67
+ model_config = ConfigDict(extra="ignore")
68
+
69
+ budget_category: str
70
+ budget_duration: str | None = None
71
+ soft_budget: float
72
+ max_budget: float
73
+ member_count: int
74
+ allocated_member_budget_total: float
75
+ current_spending: float
76
+ excluded_count: int = 0
77
+ unsynced_count: int = 0
78
+
79
+
80
+ class CostCenterBudgetSummary(BaseModel):
81
+ """Combined budget rollup for a cost center across its linked projects."""
82
+
83
+ model_config = ConfigDict(extra="ignore")
84
+
85
+ current_spending: float
86
+ budget_limit: float | None = None
87
+ total_percent: float
88
+ budgets: list[CostCenterAssignedBudgetSummary] = []
@@ -1,4 +1,5 @@
1
1
  import re
2
+ import warnings
2
3
  from datetime import datetime
3
4
  from enum import Enum
4
5
  from typing import Tuple
@@ -387,7 +388,14 @@ class UpdateXWikiDataSourceRequest(BaseUpdateDataSourceRequest, XWiki):
387
388
 
388
389
 
389
390
  class CodeAnalysisDataSourceRequest(BaseModel):
390
- """Model for provider-based datasource creation requests"""
391
+ """Model for provider-based datasource creation requests.
392
+
393
+ Deprecated: targets the standalone 'CodeAnalysisServiceProvider', which
394
+ the combined AICE provider (CodeExplorationToolkit) has superseded for
395
+ datasource creation. Kept for now since we have not confirmed that
396
+ provider type is fully retired on every deployment — use
397
+ CodeExplorationDataSourceRequest for new code.
398
+ """
391
399
 
392
400
  model_config = ConfigDict(extra="ignore", populate_by_name=True)
393
401
 
@@ -405,6 +413,16 @@ class CodeAnalysisDataSourceRequest(BaseModel):
405
413
  )
406
414
  datasource_root: str = Field("/", description="Root directory to analyze")
407
415
 
416
+ def __init__(self, **data):
417
+ warnings.warn(
418
+ "CodeAnalysisDataSourceRequest targets the standalone "
419
+ "'CodeAnalysisServiceProvider', superseded by the combined AICE "
420
+ "provider. Use CodeExplorationDataSourceRequest instead.",
421
+ DeprecationWarning,
422
+ stacklevel=2,
423
+ )
424
+ super().__init__(**data)
425
+
408
426
 
409
427
  class CodeExplorationDataSourceRequest(BaseModel):
410
428
  """Model for CodeExplorationToolkit datasource creation requests"""
@@ -417,10 +435,12 @@ class CodeExplorationDataSourceRequest(BaseModel):
417
435
  project_space_visible: bool = Field(
418
436
  False, description="Make the datasource visible to the whole project"
419
437
  )
420
- code_analysis_datasource_ids: list[str] = Field(
421
- ...,
438
+ code_analysis_datasource_ids: list[str] | None = Field(
439
+ None,
422
440
  alias="code_analysis_datasource_ids",
423
- description="List of CodeAnalysisToolkit datasource IDs",
441
+ description="List of CodeAnalysisToolkit datasource IDs. Optional: the "
442
+ "combined AICE provider creates a CodeExplorationToolkit datasource from "
443
+ "name/description alone, with no separate CodeAnalysisToolkit datasources.",
424
444
  )
425
445
 
426
446
 
@@ -24,6 +24,16 @@ class MCPServerConfigData(BaseModel):
24
24
  allow_issuer_prefix_match: bool = False
25
25
 
26
26
 
27
+ class MCPVariableDefinition(BaseModel):
28
+ """Definition of an environment variable required by an MCP server."""
29
+
30
+ model_config = ConfigDict(extra="ignore")
31
+
32
+ name: str
33
+ description: str
34
+ required: bool = True
35
+
36
+
27
37
  class MCPConfigCreateRequest(BaseModel):
28
38
  """Request model for creating a global MCP configuration entry."""
29
39
 
@@ -39,6 +49,42 @@ class MCPConfigCreateRequest(BaseModel):
39
49
  is_public: bool = False
40
50
 
41
51
 
52
+ class MCPConfigCloneRequest(BaseModel):
53
+ """Request model for cloning a global MCP configuration from a submitted form payload.
54
+
55
+ ``is_public`` and ``is_system`` are not part of the request: the clone always
56
+ inherits them from the source configuration.
57
+ """
58
+
59
+ model_config = ConfigDict(extra="ignore")
60
+
61
+ name: str = Field(..., min_length=1, max_length=255)
62
+ description: str | None = None
63
+ server_home_url: str | None = None
64
+ source_url: str | None = None
65
+ logo_url: str | None = None
66
+ categories: list[str] = Field(default_factory=list)
67
+ config: MCPServerConfigData
68
+ required_env_vars: list[MCPVariableDefinition] = Field(default_factory=list)
69
+
70
+
71
+ class MCPConfigUpdateRequest(BaseModel):
72
+ """Request model for updating a global MCP configuration; only provided fields are sent."""
73
+
74
+ model_config = ConfigDict(extra="ignore")
75
+
76
+ name: str | None = Field(None, min_length=1, max_length=255)
77
+ description: str | None = None
78
+ server_home_url: str | None = None
79
+ source_url: str | None = None
80
+ logo_url: str | None = None
81
+ categories: list[str] | None = None
82
+ config: MCPServerConfigData | None = None
83
+ required_env_vars: list[MCPVariableDefinition] | None = None
84
+ is_public: bool | None = None
85
+ is_active: bool | None = None
86
+
87
+
42
88
  class MCPConfigResponse(BaseModel):
43
89
  """Response model for a global MCP configuration entry."""
44
90
 
@@ -52,6 +98,7 @@ class MCPConfigResponse(BaseModel):
52
98
  logo_url: str | None = None
53
99
  categories: list[str] = Field(default_factory=list)
54
100
  config: MCPServerConfigData | None = None
101
+ required_env_vars: list[MCPVariableDefinition] = Field(default_factory=list)
55
102
  user_id: str | None = None
56
103
  is_public: bool = False
57
104
  is_system: bool = False
@@ -66,7 +113,7 @@ class MCPConfigListResponse(BaseModel):
66
113
 
67
114
  model_config = ConfigDict(extra="ignore")
68
115
 
69
- data: list[MCPConfigResponse] = Field(default_factory=list)
116
+ configs: list[MCPConfigResponse] = Field(default_factory=list)
70
117
  total: int = 0
71
118
  page: int = 0
72
119
  per_page: int = 20
@@ -17,6 +17,7 @@
17
17
  from uuid import UUID
18
18
 
19
19
  from ..models.cost_center import (
20
+ CostCenterBudgetSummary,
20
21
  CostCenterResponse,
21
22
  CreateCostCenterRequest,
22
23
  PaginatedCostCenterListResponse,
@@ -104,3 +105,24 @@ class CostCenterService:
104
105
  params=params,
105
106
  wrap_response=False,
106
107
  )
108
+
109
+ def get_budget_rollup(self, cost_center_id: UUID) -> CostCenterBudgetSummary:
110
+ """Get the budget rollup across the projects linked to a cost center (admin-only).
111
+
112
+ Sums the budgets of every linked project per category and overall.
113
+
114
+ Args:
115
+ cost_center_id: UUID of the cost center
116
+
117
+ Returns:
118
+ CostCenterBudgetSummary with overall spending, limit and percentage plus
119
+ a per-category breakdown
120
+
121
+ Raises:
122
+ HTTPError: If the request fails
123
+ """
124
+ return self._api.get(
125
+ f"/v1/admin/cost-centers/{cost_center_id}/budget-rollup",
126
+ response_model=CostCenterBudgetSummary,
127
+ wrap_response=False,
128
+ )
@@ -1,9 +1,11 @@
1
1
  """MCPConfigs service — Settings > MCPs management (global catalog entries)."""
2
2
 
3
3
  from ..models.mcp_config import (
4
+ MCPConfigCloneRequest,
4
5
  MCPConfigCreateRequest,
5
6
  MCPConfigListResponse,
6
7
  MCPConfigResponse,
8
+ MCPConfigUpdateRequest,
7
9
  )
8
10
  from ..utils import ApiRequestHandler, TokenSource
9
11
 
@@ -71,7 +73,50 @@ class MCPConfigsService:
71
73
  params=params,
72
74
  wrap_response=False,
73
75
  )
74
- return response.data
76
+ return response.configs
77
+
78
+ def clone(
79
+ self, config_id: str, request: MCPConfigCloneRequest
80
+ ) -> MCPConfigResponse:
81
+ """Create a new global MCP configuration from a clone form payload (admin only).
82
+
83
+ ``is_public`` and ``is_system`` are always copied from the source configuration.
84
+ An unchanged ``client_secret`` is carried over from the source.
85
+
86
+ Args:
87
+ config_id: ID of the source MCP config entry.
88
+ request: MCPConfigCloneRequest with the (possibly edited) parameters of the clone.
89
+
90
+ Returns:
91
+ The newly created MCPConfigResponse.
92
+ """
93
+ return self._api.post(
94
+ f"/v1/mcp-configs/{config_id}/clone",
95
+ MCPConfigResponse,
96
+ json_data=request.model_dump(exclude_none=True),
97
+ wrap_response=False,
98
+ )
99
+
100
+ def update(
101
+ self, config_id: str, request: MCPConfigUpdateRequest
102
+ ) -> MCPConfigResponse:
103
+ """Update a global MCP configuration (admin only).
104
+
105
+ Only the fields set on the request are sent.
106
+
107
+ Args:
108
+ config_id: The MCP config entry ID to update.
109
+ request: MCPConfigUpdateRequest with the fields to change.
110
+
111
+ Returns:
112
+ Updated MCPConfigResponse.
113
+ """
114
+ return self._api.put(
115
+ f"/v1/mcp-configs/{config_id}",
116
+ MCPConfigResponse,
117
+ json_data=request.model_dump(exclude_none=True),
118
+ wrap_response=False,
119
+ )
75
120
 
76
121
  def delete(self, config_id: str) -> None:
77
122
  """Delete a global MCP configuration entry.
@@ -205,7 +205,7 @@ class ProjectService:
205
205
  return self._api.patch(
206
206
  f"/v1/projects/{project_name}",
207
207
  response_model=ProjectUpdateResponse,
208
- json_data=payload.model_dump(exclude_none=True),
208
+ json_data=payload.model_dump(mode="json", exclude_none=True),
209
209
  )
210
210
 
211
211
  def delete_project(self, project_name: str) -> ProjectDeleteResponse: