opencode-python-sdk 0.0.1.dev1__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 (62) hide show
  1. opencode/.generated.json +39 -0
  2. opencode/__init__.py +221 -0
  3. opencode/_base_client.py +539 -0
  4. opencode/_client.py +255 -0
  5. opencode/_constants.py +27 -0
  6. opencode/_errors.py +547 -0
  7. opencode/_events.py +732 -0
  8. opencode/_exceptions.py +271 -0
  9. opencode/_models.py +54 -0
  10. opencode/_pagination.py +192 -0
  11. opencode/_pty.py +586 -0
  12. opencode/_qs.py +95 -0
  13. opencode/_resource.py +42 -0
  14. opencode/_rpc.py +489 -0
  15. opencode/_server.py +335 -0
  16. opencode/_streaming.py +248 -0
  17. opencode/_types.py +77 -0
  18. opencode/_unions.py +46 -0
  19. opencode/_version.py +8 -0
  20. opencode/lib/__init__.py +5 -0
  21. opencode/lib/_ready.py +91 -0
  22. opencode/lib/_session.py +231 -0
  23. opencode/py.typed +0 -0
  24. opencode/resources/__init__.py +364 -0
  25. opencode/resources/agent.py +179 -0
  26. opencode/resources/command.py +100 -0
  27. opencode/resources/config.py +240 -0
  28. opencode/resources/credential.py +384 -0
  29. opencode/resources/debug.py +178 -0
  30. opencode/resources/event.py +88 -0
  31. opencode/resources/experimental.py +765 -0
  32. opencode/resources/file.py +355 -0
  33. opencode/resources/form.py +100 -0
  34. opencode/resources/generate.py +110 -0
  35. opencode/resources/integration.py +1033 -0
  36. opencode/resources/location.py +162 -0
  37. opencode/resources/mcp.py +492 -0
  38. opencode/resources/message.py +152 -0
  39. opencode/resources/migration.py +118 -0
  40. opencode/resources/model.py +177 -0
  41. opencode/resources/permission.py +704 -0
  42. opencode/resources/plugin.py +250 -0
  43. opencode/resources/project.py +187 -0
  44. opencode/resources/provider.py +183 -0
  45. opencode/resources/pty.py +522 -0
  46. opencode/resources/reference.py +100 -0
  47. opencode/resources/rpc.py +113 -0
  48. opencode/resources/server.py +230 -0
  49. opencode/resources/session.py +3567 -0
  50. opencode/resources/shell.py +412 -0
  51. opencode/resources/skill.py +100 -0
  52. opencode/resources/vcs.py +500 -0
  53. opencode/resources/voice.py +113 -0
  54. opencode/resources/websearch.py +184 -0
  55. opencode/resources/worktree.py +336 -0
  56. opencode/testing.py +508 -0
  57. opencode/types/__init__.py +1462 -0
  58. opencode/types/_generated.py +8540 -0
  59. opencode_python_sdk-0.0.1.dev1.dist-info/METADATA +468 -0
  60. opencode_python_sdk-0.0.1.dev1.dist-info/RECORD +62 -0
  61. opencode_python_sdk-0.0.1.dev1.dist-info/WHEEL +4 -0
  62. opencode_python_sdk-0.0.1.dev1.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,184 @@
1
+ # This file is generated by `python -m codegen` from spec/contract.json. Do not edit it by hand.
2
+ # OpenCode 2.1.2
3
+
4
+ """The ``websearch`` resource."""
5
+
6
+ from __future__ import annotations
7
+
8
+ from typing import TYPE_CHECKING, cast
9
+
10
+ from .._base_client import RequestOptions
11
+ from .._resource import AsyncAPIResource, SyncAPIResource
12
+ from .._types import NOT_GIVEN, Body, Headers, NotGiven, Query, Timeout
13
+
14
+ if TYPE_CHECKING:
15
+ from ..types import (
16
+ Location,
17
+ WebSearchID,
18
+ WebsearchProvidersResponse,
19
+ WebsearchQueryResponse,
20
+ )
21
+
22
+ __all__ = ["WebsearchResource", "AsyncWebsearchResource"]
23
+
24
+
25
+ class WebsearchResource(SyncAPIResource):
26
+ """Operations under ``client.websearch`` (OpenCode ``websearch``)."""
27
+
28
+ def providers(
29
+ self,
30
+ *,
31
+ location: Location | NotGiven | None = NOT_GIVEN,
32
+ extra_headers: Headers | None = None,
33
+ extra_query: Query | None = None,
34
+ extra_body: Body | None = None,
35
+ timeout: Timeout | NotGiven = NOT_GIVEN,
36
+ ) -> WebsearchProvidersResponse:
37
+ """List web search providers.
38
+
39
+ Return the registered web search providers.
40
+
41
+ Raises:
42
+ InvalidRequestError: The server answered 400.
43
+ UnauthorizedError: The server answered 401.
44
+ LocationNotFoundError: The server answered 404.
45
+ ServiceUnavailableError: The server answered 503.
46
+
47
+ ``GET /api/websearch/provider``
48
+ """
49
+ return cast(
50
+ "WebsearchProvidersResponse",
51
+ self._client.request(
52
+ RequestOptions(
53
+ method="GET",
54
+ path="/api/websearch/provider",
55
+ query={"location": self._location(location)},
56
+ extra_headers=extra_headers,
57
+ extra_query=extra_query,
58
+ extra_body=extra_body,
59
+ timeout=timeout,
60
+ ),
61
+ response_type="WebsearchProvidersResponse",
62
+ ),
63
+ )
64
+
65
+ def query(
66
+ self,
67
+ *,
68
+ query: str,
69
+ location: Location | NotGiven | None = NOT_GIVEN,
70
+ provider_id: WebSearchID | NotGiven = NOT_GIVEN,
71
+ extra_headers: Headers | None = None,
72
+ extra_query: Query | None = None,
73
+ extra_body: Body | None = None,
74
+ timeout: Timeout | NotGiven = NOT_GIVEN,
75
+ ) -> WebsearchQueryResponse:
76
+ """Search the web.
77
+
78
+ Run one web search through the selected provider. Specify a provider to override the configured default.
79
+
80
+ Raises:
81
+ InvalidRequestError: The server answered 400.
82
+ UnauthorizedError: The server answered 401.
83
+ LocationNotFoundError: The server answered 404.
84
+ ServiceUnavailableError: The server answered 503.
85
+
86
+ ``POST /api/websearch``
87
+ """
88
+ return cast(
89
+ "WebsearchQueryResponse",
90
+ self._client.request(
91
+ RequestOptions(
92
+ method="POST",
93
+ path="/api/websearch",
94
+ query={"location": self._location(location)},
95
+ body={"query": query, "providerID": provider_id},
96
+ extra_headers=extra_headers,
97
+ extra_query=extra_query,
98
+ extra_body=extra_body,
99
+ timeout=timeout,
100
+ ),
101
+ response_type="WebsearchQueryResponse",
102
+ ),
103
+ )
104
+
105
+
106
+ class AsyncWebsearchResource(AsyncAPIResource):
107
+ """Operations under ``client.websearch`` (OpenCode ``websearch``)."""
108
+
109
+ async def providers(
110
+ self,
111
+ *,
112
+ location: Location | NotGiven | None = NOT_GIVEN,
113
+ extra_headers: Headers | None = None,
114
+ extra_query: Query | None = None,
115
+ extra_body: Body | None = None,
116
+ timeout: Timeout | NotGiven = NOT_GIVEN,
117
+ ) -> WebsearchProvidersResponse:
118
+ """List web search providers.
119
+
120
+ Return the registered web search providers.
121
+
122
+ Raises:
123
+ InvalidRequestError: The server answered 400.
124
+ UnauthorizedError: The server answered 401.
125
+ LocationNotFoundError: The server answered 404.
126
+ ServiceUnavailableError: The server answered 503.
127
+
128
+ ``GET /api/websearch/provider``
129
+ """
130
+ return cast(
131
+ "WebsearchProvidersResponse",
132
+ await self._client.request(
133
+ RequestOptions(
134
+ method="GET",
135
+ path="/api/websearch/provider",
136
+ query={"location": self._location(location)},
137
+ extra_headers=extra_headers,
138
+ extra_query=extra_query,
139
+ extra_body=extra_body,
140
+ timeout=timeout,
141
+ ),
142
+ response_type="WebsearchProvidersResponse",
143
+ ),
144
+ )
145
+
146
+ async def query(
147
+ self,
148
+ *,
149
+ query: str,
150
+ location: Location | NotGiven | None = NOT_GIVEN,
151
+ provider_id: WebSearchID | NotGiven = NOT_GIVEN,
152
+ extra_headers: Headers | None = None,
153
+ extra_query: Query | None = None,
154
+ extra_body: Body | None = None,
155
+ timeout: Timeout | NotGiven = NOT_GIVEN,
156
+ ) -> WebsearchQueryResponse:
157
+ """Search the web.
158
+
159
+ Run one web search through the selected provider. Specify a provider to override the configured default.
160
+
161
+ Raises:
162
+ InvalidRequestError: The server answered 400.
163
+ UnauthorizedError: The server answered 401.
164
+ LocationNotFoundError: The server answered 404.
165
+ ServiceUnavailableError: The server answered 503.
166
+
167
+ ``POST /api/websearch``
168
+ """
169
+ return cast(
170
+ "WebsearchQueryResponse",
171
+ await self._client.request(
172
+ RequestOptions(
173
+ method="POST",
174
+ path="/api/websearch",
175
+ query={"location": self._location(location)},
176
+ body={"query": query, "providerID": provider_id},
177
+ extra_headers=extra_headers,
178
+ extra_query=extra_query,
179
+ extra_body=extra_body,
180
+ timeout=timeout,
181
+ ),
182
+ response_type="WebsearchQueryResponse",
183
+ ),
184
+ )
@@ -0,0 +1,336 @@
1
+ # This file is generated by `python -m codegen` from spec/contract.json. Do not edit it by hand.
2
+ # OpenCode 2.1.2
3
+
4
+ """The ``worktree`` resource."""
5
+
6
+ from __future__ import annotations
7
+
8
+ from typing import TYPE_CHECKING, cast
9
+
10
+ from .._base_client import RequestOptions
11
+ from .._resource import AsyncAPIResource, SyncAPIResource
12
+ from .._types import NOT_GIVEN, Body, Headers, NotGiven, Query, Timeout
13
+
14
+ if TYPE_CHECKING:
15
+ from ..types import (
16
+ AbsolutePath,
17
+ ProjectID,
18
+ WorktreeInfo,
19
+ WorktreeList,
20
+ )
21
+
22
+ __all__ = ["WorktreeResource", "AsyncWorktreeResource"]
23
+
24
+
25
+ class WorktreeResource(SyncAPIResource):
26
+ """Operations under ``client.worktree`` (OpenCode ``worktree``)."""
27
+
28
+ def list(
29
+ self,
30
+ *,
31
+ project_id: ProjectID,
32
+ extra_headers: Headers | None = None,
33
+ extra_query: Query | None = None,
34
+ extra_body: Body | None = None,
35
+ timeout: Timeout | NotGiven = NOT_GIVEN,
36
+ ) -> WorktreeList:
37
+ """List worktrees.
38
+
39
+ Return the project's saved worktree inventory without loading configuration or running discovery.
40
+
41
+ Raises:
42
+ InvalidRequestError: The server answered 400.
43
+ UnauthorizedError: The server answered 401.
44
+ ProjectNotFoundError: The server answered 404.
45
+
46
+ ``GET /api/worktree``
47
+ """
48
+ return cast(
49
+ "WorktreeList",
50
+ self._client.request(
51
+ RequestOptions(
52
+ method="GET",
53
+ path="/api/worktree",
54
+ query={"projectID": project_id},
55
+ extra_headers=extra_headers,
56
+ extra_query=extra_query,
57
+ extra_body=extra_body,
58
+ timeout=timeout,
59
+ ),
60
+ response_type="WorktreeList",
61
+ ),
62
+ )
63
+
64
+ def create(
65
+ self,
66
+ *,
67
+ project_id: ProjectID,
68
+ from_: AbsolutePath | NotGiven = NOT_GIVEN,
69
+ branch: str | NotGiven = NOT_GIVEN,
70
+ directory: AbsolutePath | NotGiven = NOT_GIVEN,
71
+ name: str | NotGiven = NOT_GIVEN,
72
+ extra_headers: Headers | None = None,
73
+ extra_query: Query | None = None,
74
+ extra_body: Body | None = None,
75
+ timeout: Timeout | NotGiven = NOT_GIVEN,
76
+ ) -> WorktreeInfo:
77
+ """Create worktree.
78
+
79
+ Load the project's canonical configuration, create a local worktree using its selected strategy, then run the project's setup script.
80
+
81
+ Raises:
82
+ WorktreeError: The server answered 400.
83
+ InvalidRequestError: The server answered 400.
84
+ UnauthorizedError: The server answered 401.
85
+ ProjectNotFoundError: The server answered 404.
86
+
87
+ ``POST /api/worktree``
88
+ """
89
+ return cast(
90
+ "WorktreeInfo",
91
+ self._client.request(
92
+ RequestOptions(
93
+ method="POST",
94
+ path="/api/worktree",
95
+ body={
96
+ "projectID": project_id,
97
+ "from": from_,
98
+ "branch": branch,
99
+ "directory": directory,
100
+ "name": name,
101
+ },
102
+ extra_headers=extra_headers,
103
+ extra_query=extra_query,
104
+ extra_body=extra_body,
105
+ timeout=timeout,
106
+ ),
107
+ response_type="WorktreeInfo",
108
+ ),
109
+ )
110
+
111
+ def remove(
112
+ self,
113
+ *,
114
+ project_id: ProjectID,
115
+ directory: AbsolutePath,
116
+ force: bool,
117
+ extra_headers: Headers | None = None,
118
+ extra_query: Query | None = None,
119
+ extra_body: Body | None = None,
120
+ timeout: Timeout | NotGiven = NOT_GIVEN,
121
+ ) -> None:
122
+ """Remove worktree.
123
+
124
+ Load the project's canonical configuration and remove a saved worktree using its recorded strategy.
125
+
126
+ Raises:
127
+ WorktreeError: The server answered 400.
128
+ InvalidRequestError: The server answered 400.
129
+ UnauthorizedError: The server answered 401.
130
+ ProjectNotFoundError: The server answered 404.
131
+
132
+ ``DELETE /api/worktree``
133
+ """
134
+ self._client.request(
135
+ RequestOptions(
136
+ method="DELETE",
137
+ path="/api/worktree",
138
+ body={"projectID": project_id, "directory": directory, "force": force},
139
+ extra_headers=extra_headers,
140
+ extra_query=extra_query,
141
+ extra_body=extra_body,
142
+ timeout=timeout,
143
+ ),
144
+ kind="void",
145
+ )
146
+
147
+ def refresh(
148
+ self,
149
+ *,
150
+ project_id: ProjectID,
151
+ extra_headers: Headers | None = None,
152
+ extra_query: Query | None = None,
153
+ extra_body: Body | None = None,
154
+ timeout: Timeout | NotGiven = NOT_GIVEN,
155
+ ) -> None:
156
+ """Refresh worktrees.
157
+
158
+ Load the project's canonical configuration, discover worktrees across known checkout roots using all available strategies, and reconcile saved state.
159
+
160
+ Raises:
161
+ WorktreeError: The server answered 400.
162
+ InvalidRequestError: The server answered 400.
163
+ UnauthorizedError: The server answered 401.
164
+ ProjectNotFoundError: The server answered 404.
165
+
166
+ ``POST /api/worktree/refresh``
167
+ """
168
+ self._client.request(
169
+ RequestOptions(
170
+ method="POST",
171
+ path="/api/worktree/refresh",
172
+ body={"projectID": project_id},
173
+ extra_headers=extra_headers,
174
+ extra_query=extra_query,
175
+ extra_body=extra_body,
176
+ timeout=timeout,
177
+ ),
178
+ kind="void",
179
+ )
180
+
181
+
182
+ class AsyncWorktreeResource(AsyncAPIResource):
183
+ """Operations under ``client.worktree`` (OpenCode ``worktree``)."""
184
+
185
+ async def list(
186
+ self,
187
+ *,
188
+ project_id: ProjectID,
189
+ extra_headers: Headers | None = None,
190
+ extra_query: Query | None = None,
191
+ extra_body: Body | None = None,
192
+ timeout: Timeout | NotGiven = NOT_GIVEN,
193
+ ) -> WorktreeList:
194
+ """List worktrees.
195
+
196
+ Return the project's saved worktree inventory without loading configuration or running discovery.
197
+
198
+ Raises:
199
+ InvalidRequestError: The server answered 400.
200
+ UnauthorizedError: The server answered 401.
201
+ ProjectNotFoundError: The server answered 404.
202
+
203
+ ``GET /api/worktree``
204
+ """
205
+ return cast(
206
+ "WorktreeList",
207
+ await self._client.request(
208
+ RequestOptions(
209
+ method="GET",
210
+ path="/api/worktree",
211
+ query={"projectID": project_id},
212
+ extra_headers=extra_headers,
213
+ extra_query=extra_query,
214
+ extra_body=extra_body,
215
+ timeout=timeout,
216
+ ),
217
+ response_type="WorktreeList",
218
+ ),
219
+ )
220
+
221
+ async def create(
222
+ self,
223
+ *,
224
+ project_id: ProjectID,
225
+ from_: AbsolutePath | NotGiven = NOT_GIVEN,
226
+ branch: str | NotGiven = NOT_GIVEN,
227
+ directory: AbsolutePath | NotGiven = NOT_GIVEN,
228
+ name: str | NotGiven = NOT_GIVEN,
229
+ extra_headers: Headers | None = None,
230
+ extra_query: Query | None = None,
231
+ extra_body: Body | None = None,
232
+ timeout: Timeout | NotGiven = NOT_GIVEN,
233
+ ) -> WorktreeInfo:
234
+ """Create worktree.
235
+
236
+ Load the project's canonical configuration, create a local worktree using its selected strategy, then run the project's setup script.
237
+
238
+ Raises:
239
+ WorktreeError: The server answered 400.
240
+ InvalidRequestError: The server answered 400.
241
+ UnauthorizedError: The server answered 401.
242
+ ProjectNotFoundError: The server answered 404.
243
+
244
+ ``POST /api/worktree``
245
+ """
246
+ return cast(
247
+ "WorktreeInfo",
248
+ await self._client.request(
249
+ RequestOptions(
250
+ method="POST",
251
+ path="/api/worktree",
252
+ body={
253
+ "projectID": project_id,
254
+ "from": from_,
255
+ "branch": branch,
256
+ "directory": directory,
257
+ "name": name,
258
+ },
259
+ extra_headers=extra_headers,
260
+ extra_query=extra_query,
261
+ extra_body=extra_body,
262
+ timeout=timeout,
263
+ ),
264
+ response_type="WorktreeInfo",
265
+ ),
266
+ )
267
+
268
+ async def remove(
269
+ self,
270
+ *,
271
+ project_id: ProjectID,
272
+ directory: AbsolutePath,
273
+ force: bool,
274
+ extra_headers: Headers | None = None,
275
+ extra_query: Query | None = None,
276
+ extra_body: Body | None = None,
277
+ timeout: Timeout | NotGiven = NOT_GIVEN,
278
+ ) -> None:
279
+ """Remove worktree.
280
+
281
+ Load the project's canonical configuration and remove a saved worktree using its recorded strategy.
282
+
283
+ Raises:
284
+ WorktreeError: The server answered 400.
285
+ InvalidRequestError: The server answered 400.
286
+ UnauthorizedError: The server answered 401.
287
+ ProjectNotFoundError: The server answered 404.
288
+
289
+ ``DELETE /api/worktree``
290
+ """
291
+ await self._client.request(
292
+ RequestOptions(
293
+ method="DELETE",
294
+ path="/api/worktree",
295
+ body={"projectID": project_id, "directory": directory, "force": force},
296
+ extra_headers=extra_headers,
297
+ extra_query=extra_query,
298
+ extra_body=extra_body,
299
+ timeout=timeout,
300
+ ),
301
+ kind="void",
302
+ )
303
+
304
+ async def refresh(
305
+ self,
306
+ *,
307
+ project_id: ProjectID,
308
+ extra_headers: Headers | None = None,
309
+ extra_query: Query | None = None,
310
+ extra_body: Body | None = None,
311
+ timeout: Timeout | NotGiven = NOT_GIVEN,
312
+ ) -> None:
313
+ """Refresh worktrees.
314
+
315
+ Load the project's canonical configuration, discover worktrees across known checkout roots using all available strategies, and reconcile saved state.
316
+
317
+ Raises:
318
+ WorktreeError: The server answered 400.
319
+ InvalidRequestError: The server answered 400.
320
+ UnauthorizedError: The server answered 401.
321
+ ProjectNotFoundError: The server answered 404.
322
+
323
+ ``POST /api/worktree/refresh``
324
+ """
325
+ await self._client.request(
326
+ RequestOptions(
327
+ method="POST",
328
+ path="/api/worktree/refresh",
329
+ body={"projectID": project_id},
330
+ extra_headers=extra_headers,
331
+ extra_query=extra_query,
332
+ extra_body=extra_body,
333
+ timeout=timeout,
334
+ ),
335
+ kind="void",
336
+ )