codemie-sdk-python 0.1.434__tar.gz → 0.1.436__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.
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/PKG-INFO +1 -1
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/pyproject.toml +1 -1
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/__init__.py +10 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/skill.py +88 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/skill.py +86 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/README.md +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/auth/__init__.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/auth/credentials.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/client/__init__.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/client/client.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/exceptions.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/__init__.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/admin.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/analytics.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/assistant.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/categories.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/common.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/conversation.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/datasource.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/errors.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/file_operation.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/guardrails.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/integration.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/llm.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/mermaid.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/project.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/task.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/user.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/vendor_assistant.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/vendor_guardrail.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/vendor_knowledgebase.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/vendor_workflow.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/workflow.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/workflow_execution_payload.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/workflow_state.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/workflow_thoughts.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/admin.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/analytics.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/assistant.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/categories.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/codemie_guardrails.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/conversation.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/datasource.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/files.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/integration.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/llm.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/mermaid.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/project.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/task.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/user.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/vendor_assistant.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/vendor_guardrail.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/vendor_knowledgebase.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/vendor_workflow.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/webhook.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/workflow.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/workflow_execution.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/workflow_execution_state.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/utils/__init__.py +0 -0
- {codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/utils/http.py +0 -0
|
@@ -125,6 +125,11 @@ from .models.skill import (
|
|
|
125
125
|
SkillDetailResponse,
|
|
126
126
|
SkillListResponse,
|
|
127
127
|
SkillListPaginatedResponse,
|
|
128
|
+
SkillEventRequest,
|
|
129
|
+
SkillEventItem,
|
|
130
|
+
SkillStatsItem,
|
|
131
|
+
SingleSkillStatsResponse,
|
|
132
|
+
SkillPagination,
|
|
128
133
|
)
|
|
129
134
|
from .services.skill import SkillService
|
|
130
135
|
|
|
@@ -221,5 +226,10 @@ __all__ = [
|
|
|
221
226
|
"SkillDetailResponse",
|
|
222
227
|
"SkillListResponse",
|
|
223
228
|
"SkillListPaginatedResponse",
|
|
229
|
+
"SkillEventRequest",
|
|
230
|
+
"SkillEventItem",
|
|
231
|
+
"SkillStatsItem",
|
|
232
|
+
"SingleSkillStatsResponse",
|
|
233
|
+
"SkillPagination",
|
|
224
234
|
"SkillService",
|
|
225
235
|
]
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from datetime import datetime
|
|
4
4
|
from enum import Enum
|
|
5
|
+
from typing import Any, Literal
|
|
5
6
|
|
|
6
7
|
from pydantic import BaseModel, ConfigDict, Field
|
|
7
8
|
|
|
@@ -122,3 +123,90 @@ class SkillReactionResponse(BaseModel):
|
|
|
122
123
|
reaction: str
|
|
123
124
|
reaction_at: str = Field(alias="reactionAt")
|
|
124
125
|
resource_type: str | None = Field(None, alias="resourceType")
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
class SkillPagination(BaseModel):
|
|
129
|
+
"""Shared pagination envelope for skills statistics endpoints."""
|
|
130
|
+
|
|
131
|
+
model_config = ConfigDict(extra="ignore")
|
|
132
|
+
|
|
133
|
+
page: int
|
|
134
|
+
per_page: int
|
|
135
|
+
total: int
|
|
136
|
+
pages: int
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
class SkillEventRequest(BaseModel):
|
|
140
|
+
"""Request body for POST /v1/skills/events."""
|
|
141
|
+
|
|
142
|
+
session_id: str
|
|
143
|
+
command: Literal["add", "update", "remove", "list", "find"]
|
|
144
|
+
status: Literal["started", "completed", "failed"]
|
|
145
|
+
scope: Literal["global", "project", "unknown"] | None = None
|
|
146
|
+
error_code: str | None = None
|
|
147
|
+
agent_selection_mode: (
|
|
148
|
+
Literal["explicit", "auto_detected", "prompted", "upstream"] | None
|
|
149
|
+
) = None
|
|
150
|
+
target_agents: list[str] | None = None
|
|
151
|
+
source: str | None = None
|
|
152
|
+
skill_name: str | None = None
|
|
153
|
+
skill_slug: str | None = None
|
|
154
|
+
skill_id: str | None = None
|
|
155
|
+
agent: str = "codemie-skills"
|
|
156
|
+
agent_version: str | None = None
|
|
157
|
+
repository: str | None = None
|
|
158
|
+
branch: str | None = None
|
|
159
|
+
project: str | None = None
|
|
160
|
+
attributes: dict[str, Any] | None = None
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
class SkillEventItem(BaseModel):
|
|
164
|
+
"""Single row from the raw event log."""
|
|
165
|
+
|
|
166
|
+
model_config = ConfigDict(extra="ignore")
|
|
167
|
+
|
|
168
|
+
skill_slug: str | None = None
|
|
169
|
+
source: str | None = None
|
|
170
|
+
target_agents: list[str] = Field(default_factory=list)
|
|
171
|
+
date: datetime
|
|
172
|
+
command: str
|
|
173
|
+
user_id: str
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
class SkillEventsPaginatedResponse(BaseModel):
|
|
177
|
+
"""Paginated response from GET /v1/skills/events."""
|
|
178
|
+
|
|
179
|
+
model_config = ConfigDict(extra="ignore")
|
|
180
|
+
|
|
181
|
+
data: list[SkillEventItem]
|
|
182
|
+
pagination: SkillPagination
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
class SkillStatsItem(BaseModel):
|
|
186
|
+
"""Per-skill aggregated stats item."""
|
|
187
|
+
|
|
188
|
+
model_config = ConfigDict(extra="ignore")
|
|
189
|
+
|
|
190
|
+
skill_slug: str | None = None
|
|
191
|
+
installs: int
|
|
192
|
+
removals: int
|
|
193
|
+
by_agent: dict[str, int] = Field(default_factory=dict)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
class SkillStatsPaginatedResponse(BaseModel):
|
|
197
|
+
"""Paginated response from GET /v1/skills/events/stats."""
|
|
198
|
+
|
|
199
|
+
model_config = ConfigDict(extra="ignore")
|
|
200
|
+
|
|
201
|
+
data: list[SkillStatsItem]
|
|
202
|
+
pagination: SkillPagination
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
class SingleSkillStatsResponse(BaseModel):
|
|
206
|
+
"""Response from GET /v1/skills/events/{slug}/stats."""
|
|
207
|
+
|
|
208
|
+
model_config = ConfigDict(extra="ignore")
|
|
209
|
+
|
|
210
|
+
installs: int
|
|
211
|
+
removals: int
|
|
212
|
+
by_agent: dict[str, int] = Field(default_factory=dict)
|
|
@@ -11,10 +11,14 @@ from ..models.skill import (
|
|
|
11
11
|
SkillCategory,
|
|
12
12
|
SkillCreateRequest,
|
|
13
13
|
SkillDetailResponse,
|
|
14
|
+
SkillEventItem,
|
|
15
|
+
SkillEventRequest,
|
|
14
16
|
SkillImportRequest,
|
|
15
17
|
SkillListPaginatedResponse,
|
|
16
18
|
SkillListResponse,
|
|
19
|
+
SkillStatsItem,
|
|
17
20
|
SkillUpdateRequest,
|
|
21
|
+
SingleSkillStatsResponse,
|
|
18
22
|
)
|
|
19
23
|
from ..utils.http import ApiRequestHandler, TokenSource
|
|
20
24
|
|
|
@@ -302,3 +306,85 @@ class SkillService:
|
|
|
302
306
|
Removal confirmation
|
|
303
307
|
"""
|
|
304
308
|
return self._api.delete(f"/v1/skills/{skill_id}/reactions", dict)
|
|
309
|
+
|
|
310
|
+
# Statistics / Event Log
|
|
311
|
+
|
|
312
|
+
def record_event(self, request: SkillEventRequest) -> dict:
|
|
313
|
+
"""Record a skill lifecycle event.
|
|
314
|
+
|
|
315
|
+
Args:
|
|
316
|
+
request: Skill event request
|
|
317
|
+
|
|
318
|
+
Returns:
|
|
319
|
+
Confirmation dict
|
|
320
|
+
"""
|
|
321
|
+
return self._api.post(
|
|
322
|
+
"/v1/skills/events",
|
|
323
|
+
dict,
|
|
324
|
+
json_data=request.model_dump(exclude_none=True),
|
|
325
|
+
)
|
|
326
|
+
|
|
327
|
+
def get_events(
|
|
328
|
+
self,
|
|
329
|
+
from_: str | None = None,
|
|
330
|
+
to: str | None = None,
|
|
331
|
+
limit: int = 100,
|
|
332
|
+
offset: int = 0,
|
|
333
|
+
) -> list[SkillEventItem]:
|
|
334
|
+
"""Get raw skill event log.
|
|
335
|
+
|
|
336
|
+
Args:
|
|
337
|
+
from_: ISO datetime lower bound (inclusive)
|
|
338
|
+
to: ISO datetime upper bound (inclusive)
|
|
339
|
+
limit: Maximum number of results
|
|
340
|
+
offset: Pagination offset
|
|
341
|
+
|
|
342
|
+
Returns:
|
|
343
|
+
List of skill event items
|
|
344
|
+
"""
|
|
345
|
+
params: dict[str, Any] = {"limit": limit, "offset": offset}
|
|
346
|
+
if from_ is not None:
|
|
347
|
+
params["from"] = from_
|
|
348
|
+
if to is not None:
|
|
349
|
+
params["to"] = to
|
|
350
|
+
return self._api.get("/v1/skills/events", list[SkillEventItem], params=params)
|
|
351
|
+
|
|
352
|
+
def get_events_stats(
|
|
353
|
+
self,
|
|
354
|
+
from_: str | None = None,
|
|
355
|
+
to: str | None = None,
|
|
356
|
+
limit: int = 100,
|
|
357
|
+
offset: int = 0,
|
|
358
|
+
) -> list[SkillStatsItem]:
|
|
359
|
+
"""Get per-skill aggregated install/removal counts.
|
|
360
|
+
|
|
361
|
+
Args:
|
|
362
|
+
from_: ISO datetime lower bound (inclusive)
|
|
363
|
+
to: ISO datetime upper bound (inclusive)
|
|
364
|
+
limit: Maximum number of results
|
|
365
|
+
offset: Pagination offset
|
|
366
|
+
|
|
367
|
+
Returns:
|
|
368
|
+
List of skill stats items
|
|
369
|
+
"""
|
|
370
|
+
params: dict[str, Any] = {"limit": limit, "offset": offset}
|
|
371
|
+
if from_ is not None:
|
|
372
|
+
params["from"] = from_
|
|
373
|
+
if to is not None:
|
|
374
|
+
params["to"] = to
|
|
375
|
+
return self._api.get(
|
|
376
|
+
"/v1/skills/events/stats", list[SkillStatsItem], params=params
|
|
377
|
+
)
|
|
378
|
+
|
|
379
|
+
def get_skill_stats(self, slug: str) -> SingleSkillStatsResponse:
|
|
380
|
+
"""Get aggregated stats for a single skill.
|
|
381
|
+
|
|
382
|
+
Args:
|
|
383
|
+
slug: Skill slug identifier
|
|
384
|
+
|
|
385
|
+
Returns:
|
|
386
|
+
Single skill stats
|
|
387
|
+
"""
|
|
388
|
+
return self._api.get(
|
|
389
|
+
f"/v1/skills/events/{slug}/stats", SingleSkillStatsResponse
|
|
390
|
+
)
|
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/auth/credentials.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/client/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/analytics.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/assistant.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/categories.py
RENAMED
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/conversation.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/datasource.py
RENAMED
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/file_operation.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/guardrails.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/integration.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/vendor_assistant.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/vendor_guardrail.py
RENAMED
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/vendor_workflow.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/workflow.py
RENAMED
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/models/workflow_state.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/analytics.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/assistant.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/categories.py
RENAMED
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/conversation.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/datasource.py
RENAMED
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/integration.py
RENAMED
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/mermaid.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/project.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/webhook.py
RENAMED
|
File without changes
|
{codemie_sdk_python-0.1.434 → codemie_sdk_python-0.1.436}/src/codemie_sdk/services/workflow.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|