codai-sdk 0.2.1__tar.gz → 0.3.0__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 (39) hide show
  1. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/CHANGELOG.md +16 -0
  2. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/PKG-INFO +1 -1
  3. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/pyproject.toml +1 -1
  4. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/src/codai/__init__.py +11 -1
  5. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/src/codai/_operations.py +45 -0
  6. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/src/codai/_types.py +1009 -3
  7. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/src/codai/resources/__init__.py +19 -0
  8. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/src/codai/resources/core.py +13 -0
  9. codai_sdk-0.3.0/src/codai/resources/environments.py +183 -0
  10. codai_sdk-0.3.0/src/codai/resources/triggers.py +107 -0
  11. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/tests/test_resources.py +48 -1
  12. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  13. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  14. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/.github/dependabot.yml +0 -0
  15. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/.github/pull_request_template.md +0 -0
  16. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/.github/workflows/publish.yml +0 -0
  17. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/.gitignore +0 -0
  18. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/CODE_OF_CONDUCT.md +0 -0
  19. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/CONTRIBUTING.md +0 -0
  20. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/LICENSE +0 -0
  21. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/README.md +0 -0
  22. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/SECURITY.md +0 -0
  23. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/examples/agent.py +0 -0
  24. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/examples/chat.py +0 -0
  25. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/examples/feedback.py +0 -0
  26. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/examples/streaming.py +0 -0
  27. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/scripts/gen-types.py +0 -0
  28. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/scripts/smoke_local.py +0 -0
  29. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/src/codai/_http.py +0 -0
  30. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/src/codai/resources/_base.py +0 -0
  31. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/src/codai/resources/agents.py +0 -0
  32. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/src/codai/resources/chat.py +0 -0
  33. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/src/codai/resources/messages.py +0 -0
  34. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/src/codai/resources/platform.py +0 -0
  35. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/src/codai/resources/responses.py +0 -0
  36. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/src/codai/resources/sessions.py +0 -0
  37. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/tests/conftest.py +0 -0
  38. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/tests/test_http.py +0 -0
  39. {codai_sdk-0.2.1 → codai_sdk-0.3.0}/tests/test_parity.py +0 -0
@@ -6,6 +6,22 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.3.0] - 2026-09-25
10
+
11
+ ### Added
12
+
13
+ - Projects + environments resources (26 operations), restoring full parity with the gateway
14
+ OpenAPI (88 operations): `projects.{list,create,get,update,delete}`,
15
+ `environments.{list,create,enroll,get,update,start,stop,archive,destroy,enroll_token}`,
16
+ `environments.members.{list,add,set_ssh_key,set_role,remove}`,
17
+ `environments.ports.{list,set,remove}` and `environments.secrets.{list,set,remove}`.
18
+ `enroll`, `create` and `enroll_token` are never retried (the enrolment token is single-use).
19
+ - `_types.py` regenerated: `Project*` and `Environment*` TypedDicts.
20
+ - `system_one.create({"state", "questions"})` — typed decisions from codai-s1 (`POST /v1/systemone`,
21
+ Choice / Score / Noul with calibrated probabilities). Raises on 503 `s1_unavailable`; keep a fallback.
22
+ - `triggers.*`, `notifications.*`, `environments.members.ssh_cert`, `environments.ssh_ca`,
23
+ `environments.tasks.{list,create,get}` — parity with the TypeScript SDK.
24
+
9
25
  ## [0.2.1] - 2026-09-24
10
26
 
11
27
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: codai-sdk
3
- Version: 0.2.1
3
+ Version: 0.3.0
4
4
  Summary: Official Python SDK for the codai AI gateway — chat, messages, responses, streaming, agents, sessions, hosts, tasks, account.
5
5
  Project-URL: Homepage, https://codai.ro
6
6
  Project-URL: Repository, https://github.com/codai-ro/codai-sdk-python
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "codai-sdk"
7
- version = "0.2.1"
7
+ version = "0.3.0"
8
8
  description = "Official Python SDK for the codai AI gateway — chat, messages, responses, streaming, agents, sessions, hosts, tasks, account."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -43,20 +43,25 @@ from .resources import (
43
43
  ChatStream,
44
44
  Devices,
45
45
  Embeddings,
46
+ Environments,
46
47
  EphemeralToken,
47
48
  Feedback,
48
49
  Health,
49
50
  Hosts,
50
51
  Messages,
51
52
  Models,
53
+ Notifications,
52
54
  Orgs,
53
55
  PhoneModels,
56
+ Projects,
54
57
  Receipts,
55
58
  Responses,
56
59
  Sessions,
60
+ SystemOne,
57
61
  Tasks,
58
62
  Tokens,
59
63
  Tools,
64
+ Triggers,
60
65
  )
61
66
 
62
67
  __all__ = [
@@ -75,7 +80,7 @@ __all__ = [
75
80
  "frame_json",
76
81
  "read_sse",
77
82
  ]
78
- __version__ = "0.2.1"
83
+ __version__ = "0.3.0"
79
84
 
80
85
 
81
86
  class _CallableGroup:
@@ -134,6 +139,7 @@ class Codai:
134
139
  self.messages = Messages(http)
135
140
  self.responses = Responses(http)
136
141
  self.audio = Audio(http)
142
+ self.system_one = SystemOne(http)
137
143
  self.tokens = Tokens(http)
138
144
  self.health = Health(http)
139
145
  self.agents = Agents(http)
@@ -143,9 +149,13 @@ class Codai:
143
149
  self.devices = Devices(http)
144
150
  self.hosts = Hosts(http)
145
151
  self.orgs = Orgs(http)
152
+ self.projects = Projects(http)
153
+ self.environments = Environments(http)
146
154
  self.account = Account(http)
147
155
  self.receipt = Receipts(http)
148
156
  self.phone_models = PhoneModels(http)
157
+ self.triggers = Triggers(http)
158
+ self.notifications = Notifications(http)
149
159
 
150
160
  self.chat: Any = _CallableGroup(Chat(http), self._legacy_chat)
151
161
  self.embeddings: Any = _CallableGroup(Embeddings(http), self._legacy_embeddings)
@@ -16,6 +16,7 @@ OPERATION_METHODS: Dict[str, str] = {
16
16
  "createMessage": "messages.create",
17
17
  # Embeddings & Audio
18
18
  "createEmbeddings": "embeddings.create",
19
+ "createSystemOne": "system_one.create",
19
20
  "createTranscription": "audio.transcribe",
20
21
  "createSpeech": "audio.speech",
21
22
  "createEphemeralToken": "tokens.create",
@@ -78,6 +79,50 @@ OPERATION_METHODS: Dict[str, str] = {
78
79
  "listOrgMembers": "orgs.members.list",
79
80
  "addOrgMember": "orgs.members.add",
80
81
  "removeOrgMember": "orgs.members.remove",
82
+ # Projects
83
+ "listProjects": "projects.list",
84
+ "createProject": "projects.create",
85
+ "getProject": "projects.get",
86
+ "updateProject": "projects.update",
87
+ "deleteProject": "projects.delete",
88
+ # Environments
89
+ "listEnvironments": "environments.list",
90
+ "createEnvironment": "environments.create",
91
+ "enrollEnvironment": "environments.enroll",
92
+ "getEnvironment": "environments.get",
93
+ "updateEnvironment": "environments.update",
94
+ "startEnvironment": "environments.start",
95
+ "stopEnvironment": "environments.stop",
96
+ "archiveEnvironment": "environments.archive",
97
+ "destroyEnvironment": "environments.destroy",
98
+ "createEnvironmentEnrollToken": "environments.enroll_token",
99
+ "listEnvironmentMembers": "environments.members.list",
100
+ "addEnvironmentMember": "environments.members.add",
101
+ "setMyEnvironmentSshKey": "environments.members.set_ssh_key",
102
+ "setEnvironmentMemberRole": "environments.members.set_role",
103
+ "removeEnvironmentMember": "environments.members.remove",
104
+ "listEnvironmentPorts": "environments.ports.list",
105
+ "setEnvironmentPort": "environments.ports.set",
106
+ "removeEnvironmentPort": "environments.ports.remove",
107
+ "listEnvironmentSecrets": "environments.secrets.list",
108
+ "setEnvironmentSecret": "environments.secrets.set",
109
+ "removeEnvironmentSecret": "environments.secrets.remove",
110
+ "issueMyEnvironmentSshCert": "environments.members.ssh_cert",
111
+ "getEnvironmentSshCa": "environments.ssh_ca",
112
+ "listEnvironmentTasks": "environments.tasks.list",
113
+ "createEnvironmentTask": "environments.tasks.create",
114
+ "getEnvironmentTask": "environments.tasks.get",
115
+ "listTriggers": "triggers.list",
116
+ "createTrigger": "triggers.create",
117
+ "updateTrigger": "triggers.update",
118
+ "deleteTrigger": "triggers.delete",
119
+ "rotateTriggerSecret": "triggers.rotate_secret",
120
+ "setTriggerSecret": "triggers.set_secret",
121
+ "testTrigger": "triggers.test",
122
+ "listTriggerEvents": "triggers.events",
123
+ "receiveTriggerHook": "triggers.fire_hook",
124
+ "listNotifications": "notifications.list",
125
+ "markNotificationsRead": "notifications.mark_read",
81
126
  # Account
82
127
  "getAccount": "account.get",
83
128
  "patchAccount": "account.update",