codex-python 1.114.2__tar.gz → 1.122.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 (41) hide show
  1. {codex_python-1.114.2 → codex_python-1.122.0}/PKG-INFO +1 -1
  2. {codex_python-1.114.2 → codex_python-1.122.0}/codex/__init__.py +1 -1
  3. {codex_python-1.114.2 → codex_python-1.122.0}/codex/app_server/_async_services.py +71 -3
  4. {codex_python-1.114.2 → codex_python-1.122.0}/codex/app_server/_async_threads.py +18 -8
  5. {codex_python-1.114.2 → codex_python-1.122.0}/codex/app_server/_sync_services.py +90 -3
  6. {codex_python-1.114.2 → codex_python-1.122.0}/codex/app_server/_sync_threads.py +19 -4
  7. {codex_python-1.114.2 → codex_python-1.122.0}/codex/app_server/models.py +33 -4
  8. {codex_python-1.114.2 → codex_python-1.122.0}/codex/app_server/options.py +32 -0
  9. {codex_python-1.114.2 → codex_python-1.122.0}/codex/protocol/types.py +5344 -4126
  10. {codex_python-1.114.2 → codex_python-1.122.0}/crates/codex_native/Cargo.lock +7 -7
  11. {codex_python-1.114.2 → codex_python-1.122.0}/crates/codex_native/Cargo.toml +1 -1
  12. {codex_python-1.114.2 → codex_python-1.122.0}/LICENSE +0 -0
  13. {codex_python-1.114.2 → codex_python-1.122.0}/README.md +0 -0
  14. {codex_python-1.114.2 → codex_python-1.122.0}/codex/_binary.py +0 -0
  15. {codex_python-1.114.2 → codex_python-1.122.0}/codex/_config_types.py +0 -0
  16. {codex_python-1.114.2 → codex_python-1.122.0}/codex/_file_utils.py +0 -0
  17. {codex_python-1.114.2 → codex_python-1.122.0}/codex/_runtime.py +0 -0
  18. {codex_python-1.114.2 → codex_python-1.122.0}/codex/_turn_options.py +0 -0
  19. {codex_python-1.114.2 → codex_python-1.122.0}/codex/app_server/__init__.py +0 -0
  20. {codex_python-1.114.2 → codex_python-1.122.0}/codex/app_server/_async_client.py +0 -0
  21. {codex_python-1.114.2 → codex_python-1.122.0}/codex/app_server/_payloads.py +0 -0
  22. {codex_python-1.114.2 → codex_python-1.122.0}/codex/app_server/_protocol_helpers.py +0 -0
  23. {codex_python-1.114.2 → codex_python-1.122.0}/codex/app_server/_session.py +0 -0
  24. {codex_python-1.114.2 → codex_python-1.122.0}/codex/app_server/_sync_client.py +0 -0
  25. {codex_python-1.114.2 → codex_python-1.122.0}/codex/app_server/_sync_support.py +0 -0
  26. {codex_python-1.114.2 → codex_python-1.122.0}/codex/app_server/_types.py +0 -0
  27. {codex_python-1.114.2 → codex_python-1.122.0}/codex/app_server/errors.py +0 -0
  28. {codex_python-1.114.2 → codex_python-1.122.0}/codex/app_server/transports.py +0 -0
  29. {codex_python-1.114.2 → codex_python-1.122.0}/codex/codex.py +0 -0
  30. {codex_python-1.114.2 → codex_python-1.122.0}/codex/dynamic_tools.py +0 -0
  31. {codex_python-1.114.2 → codex_python-1.122.0}/codex/errors.py +0 -0
  32. {codex_python-1.114.2 → codex_python-1.122.0}/codex/options.py +0 -0
  33. {codex_python-1.114.2 → codex_python-1.122.0}/codex/output_schema.py +0 -0
  34. {codex_python-1.114.2 → codex_python-1.122.0}/codex/output_schema_file.py +0 -0
  35. {codex_python-1.114.2 → codex_python-1.122.0}/codex/protocol/__init__.py +0 -0
  36. {codex_python-1.114.2 → codex_python-1.122.0}/codex/py.typed +0 -0
  37. {codex_python-1.114.2 → codex_python-1.122.0}/codex/thread.py +0 -0
  38. {codex_python-1.114.2 → codex_python-1.122.0}/codex/vendor/.gitkeep +0 -0
  39. {codex_python-1.114.2 → codex_python-1.122.0}/crates/codex_native/codex/__init__.py +0 -0
  40. {codex_python-1.114.2 → codex_python-1.122.0}/crates/codex_native/src/lib.rs +0 -0
  41. {codex_python-1.114.2 → codex_python-1.122.0}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codex-python
3
- Version: 1.114.2
3
+ Version: 1.122.0
4
4
  Classifier: Programming Language :: Python :: 3
5
5
  Classifier: Programming Language :: Python :: 3 :: Only
6
6
  Classifier: Programming Language :: Python :: 3.12
@@ -17,7 +17,7 @@ from codex.options import (
17
17
  )
18
18
  from codex.thread import CodexTurnStream, Input, Thread
19
19
 
20
- __version__ = "1.114.2"
20
+ __version__ = "1.122.0"
21
21
 
22
22
  __all__ = [
23
23
  "Codex",
@@ -26,6 +26,7 @@ from codex.app_server.models import (
26
26
  ModelInfo,
27
27
  ModelListResult,
28
28
  SkillsConfigWriteResult,
29
+ SkillsListEntry,
29
30
  SkillsListResult,
30
31
  WindowsSandboxSetupStartResult,
31
32
  )
@@ -113,7 +114,7 @@ class AsyncSkillsClient(_AsyncServiceClient):
113
114
  cwds: Sequence[str] | None = None,
114
115
  force_reload: bool | None = None,
115
116
  per_cwd_extra_user_roots: Sequence[protocol.SkillsListExtraRootsForCwd] | None = None,
116
- ) -> list[protocol.SkillsListEntry]:
117
+ ) -> list[SkillsListEntry]:
117
118
  return (
118
119
  await self.list_page(
119
120
  cwds=cwds,
@@ -139,7 +140,10 @@ class AsyncSkillsClient(_AsyncServiceClient):
139
140
  return await self._rpc.request_typed("skills/list", params, SkillsListResult)
140
141
 
141
142
  async def write_config(self, *, path: str, enabled: bool) -> SkillsConfigWriteResult:
142
- params = protocol.SkillsConfigWriteParams(path=path, enabled=enabled)
143
+ params = protocol.SkillsConfigWriteParams(
144
+ path=protocol.AbsolutePathBuf(path),
145
+ enabled=enabled,
146
+ )
143
147
  return await self._rpc.request_typed("skills/config/write", params, SkillsConfigWriteResult)
144
148
 
145
149
 
@@ -322,19 +326,80 @@ class AsyncCommandClient(_AsyncServiceClient):
322
326
  *,
323
327
  command: Sequence[str],
324
328
  cwd: str | None = None,
329
+ disable_output_cap: bool | None = None,
330
+ disable_timeout: bool | None = None,
331
+ env: Mapping[str, object | None] | None = None,
332
+ output_bytes_cap: int | None = None,
333
+ process_id: str | None = None,
325
334
  sandbox_policy: protocol.SandboxPolicy | None = None,
335
+ size: protocol.CommandExecTerminalSize | None = None,
336
+ stream_stdin: bool | None = None,
337
+ stream_stdout_stderr: bool | None = None,
326
338
  timeout_ms: int | None = None,
339
+ tty: bool | None = None,
327
340
  ) -> CommandExecResult:
328
341
  params = protocol.CommandExecParams(
329
342
  command=list(command),
330
343
  cwd=cwd,
344
+ disableOutputCap=disable_output_cap,
345
+ disableTimeout=disable_timeout,
346
+ env=dict(env) if env is not None else None,
347
+ outputBytesCap=output_bytes_cap,
348
+ processId=process_id,
331
349
  sandboxPolicy=sandbox_policy,
350
+ size=size,
351
+ streamStdin=stream_stdin,
352
+ streamStdoutStderr=stream_stdout_stderr,
332
353
  timeoutMs=timeout_ms,
354
+ tty=tty,
333
355
  )
334
356
  return await self._rpc.request_typed("command/exec", params, CommandExecResult)
335
357
 
336
358
  exec = execute
337
359
 
360
+ async def write_stdin(
361
+ self,
362
+ *,
363
+ process_id: str,
364
+ close_stdin: bool | None = None,
365
+ delta_base64: str | None = None,
366
+ ) -> EmptyResult:
367
+ """Write stdin bytes to a running `command/exec` process or close stdin.
368
+
369
+ This wraps the app-server `command/exec/write` request. `delta_base64`
370
+ is optional base64-encoded stdin data; `close_stdin` closes the
371
+ process stdin after the optional write.
372
+ """
373
+ params = protocol.CommandExecWriteParams(
374
+ closeStdin=close_stdin,
375
+ deltaBase64=delta_base64,
376
+ processId=process_id,
377
+ )
378
+ return await self._rpc.request_typed("command/exec/write", params, EmptyResult)
379
+
380
+ async def resize_terminal(
381
+ self,
382
+ *,
383
+ process_id: str,
384
+ size: protocol.CommandExecTerminalSize,
385
+ ) -> EmptyResult:
386
+ """Resize the terminal attached to a running `command/exec` process.
387
+
388
+ This wraps the app-server `command/exec/resize` request and sends the
389
+ new terminal dimensions as `cols` and `rows`.
390
+ """
391
+ params = protocol.CommandExecResizeParams(processId=process_id, size=size)
392
+ return await self._rpc.request_typed("command/exec/resize", params, EmptyResult)
393
+
394
+ async def terminate_process(self, *, process_id: str) -> EmptyResult:
395
+ """Terminate a running `command/exec` process.
396
+
397
+ This wraps the app-server `command/exec/terminate` request for the
398
+ client-supplied process id.
399
+ """
400
+ params = protocol.CommandExecTerminateParams(processId=process_id)
401
+ return await self._rpc.request_typed("command/exec/terminate", params, EmptyResult)
402
+
338
403
 
339
404
  class AsyncExternalAgentConfigClient(_AsyncServiceClient):
340
405
  async def detect(
@@ -369,7 +434,10 @@ class AsyncWindowsSandboxClient(_AsyncServiceClient):
369
434
  mode: protocol.WindowsSandboxSetupMode,
370
435
  cwd: str | None = None,
371
436
  ) -> WindowsSandboxSetupStartResult:
372
- params = protocol.WindowsSandboxSetupStartParams(cwd=cwd, mode=mode)
437
+ params = protocol.WindowsSandboxSetupStartParams(
438
+ cwd=protocol.AbsolutePathBuf(cwd) if cwd is not None else None,
439
+ mode=mode,
440
+ )
373
441
  return await self._rpc.request_typed(
374
442
  "windowsSandbox/setupStart",
375
443
  params,
@@ -41,9 +41,13 @@ _TURN_STREAM_NOTIFICATION_METHODS = {
41
41
  "turn/completed",
42
42
  "turn/diff/updated",
43
43
  "turn/plan/updated",
44
+ "hook/started",
45
+ "hook/completed",
44
46
  "thread/tokenUsage/updated",
45
47
  "item/started",
46
48
  "item/completed",
49
+ "item/autoApprovalReview/started",
50
+ "item/autoApprovalReview/completed",
47
51
  "item/agentMessage/delta",
48
52
  "item/plan/delta",
49
53
  "item/reasoning/summaryTextDelta",
@@ -235,15 +239,21 @@ class AsyncTurnStream:
235
239
  self._require_terminal_turn()
236
240
  return self._final_message
237
241
 
238
- async def steer(self, input: TurnInput) -> TurnIdResult:
242
+ async def steer(
243
+ self,
244
+ input: TurnInput,
245
+ *,
246
+ responsesapi_client_metadata: Mapping[str, object] | None = None,
247
+ ) -> TurnIdResult:
239
248
  """Append additional user input to the in-flight turn."""
240
- params = protocol.TurnSteerParams.model_validate(
241
- {
242
- "threadId": self.thread_id,
243
- "expectedTurnId": self.turn_id,
244
- "input": normalize_turn_input(input),
245
- }
246
- )
249
+ payload: dict[str, object] = {
250
+ "threadId": self.thread_id,
251
+ "expectedTurnId": self.turn_id,
252
+ "input": normalize_turn_input(input),
253
+ }
254
+ if responsesapi_client_metadata is not None:
255
+ payload["responsesapiClientMetadata"] = dict(responsesapi_client_metadata)
256
+ params = protocol.TurnSteerParams.model_validate(payload)
247
257
  return await self._thread._client.rpc.request_typed("turn/steer", params, TurnIdResult)
248
258
 
249
259
  async def interrupt(self) -> EmptyResult:
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections.abc import Callable, Coroutine, Sequence
3
+ from collections.abc import Callable, Coroutine, Mapping, Sequence
4
4
  from typing import Any, Protocol
5
5
 
6
6
  from codex.app_server._sync_support import _SyncRunner
@@ -25,6 +25,7 @@ from codex.app_server.models import (
25
25
  ModelInfo,
26
26
  ModelListResult,
27
27
  SkillsConfigWriteResult,
28
+ SkillsListEntry,
28
29
  SkillsListResult,
29
30
  WindowsSandboxSetupStartResult,
30
31
  )
@@ -76,7 +77,7 @@ class _AsyncSkillsClientLike(Protocol):
76
77
  cwds: Sequence[str] | None = None,
77
78
  force_reload: bool | None = None,
78
79
  per_cwd_extra_user_roots: Sequence[protocol.SkillsListExtraRootsForCwd] | None = None,
79
- ) -> list[protocol.SkillsListEntry]: ...
80
+ ) -> list[SkillsListEntry]: ...
80
81
 
81
82
  async def list_page(
82
83
  self,
@@ -184,10 +185,36 @@ class _AsyncCommandClientLike(Protocol):
184
185
  *,
185
186
  command: Sequence[str],
186
187
  cwd: str | None = None,
188
+ disable_output_cap: bool | None = None,
189
+ disable_timeout: bool | None = None,
190
+ env: Mapping[str, object | None] | None = None,
191
+ output_bytes_cap: int | None = None,
192
+ process_id: str | None = None,
187
193
  sandbox_policy: protocol.SandboxPolicy | None = None,
194
+ size: protocol.CommandExecTerminalSize | None = None,
195
+ stream_stdin: bool | None = None,
196
+ stream_stdout_stderr: bool | None = None,
188
197
  timeout_ms: int | None = None,
198
+ tty: bool | None = None,
189
199
  ) -> CommandExecResult: ...
190
200
 
201
+ async def write_stdin(
202
+ self,
203
+ *,
204
+ process_id: str,
205
+ close_stdin: bool | None = None,
206
+ delta_base64: str | None = None,
207
+ ) -> EmptyResult: ...
208
+
209
+ async def resize_terminal(
210
+ self,
211
+ *,
212
+ process_id: str,
213
+ size: protocol.CommandExecTerminalSize,
214
+ ) -> EmptyResult: ...
215
+
216
+ async def terminate_process(self, *, process_id: str) -> EmptyResult: ...
217
+
191
218
 
192
219
  class _AsyncExternalAgentConfigClientLike(Protocol):
193
220
  async def detect(
@@ -312,7 +339,7 @@ class _SkillsClient(_SyncRunner):
312
339
  cwds: Sequence[str] | None = None,
313
340
  force_reload: bool | None = None,
314
341
  per_cwd_extra_user_roots: Sequence[protocol.SkillsListExtraRootsForCwd] | None = None,
315
- ) -> list[protocol.SkillsListEntry]:
342
+ ) -> list[SkillsListEntry]:
316
343
  return self._run(
317
344
  self._async_client.list(
318
345
  cwds=cwds,
@@ -529,20 +556,80 @@ class _CommandClient(_SyncRunner):
529
556
  *,
530
557
  command: Sequence[str],
531
558
  cwd: str | None = None,
559
+ disable_output_cap: bool | None = None,
560
+ disable_timeout: bool | None = None,
561
+ env: Mapping[str, object | None] | None = None,
562
+ output_bytes_cap: int | None = None,
563
+ process_id: str | None = None,
532
564
  sandbox_policy: protocol.SandboxPolicy | None = None,
565
+ size: protocol.CommandExecTerminalSize | None = None,
566
+ stream_stdin: bool | None = None,
567
+ stream_stdout_stderr: bool | None = None,
533
568
  timeout_ms: int | None = None,
569
+ tty: bool | None = None,
534
570
  ) -> CommandExecResult:
535
571
  return self._run(
536
572
  self._async_client.execute(
537
573
  command=command,
538
574
  cwd=cwd,
575
+ disable_output_cap=disable_output_cap,
576
+ disable_timeout=disable_timeout,
577
+ env=env,
578
+ output_bytes_cap=output_bytes_cap,
579
+ process_id=process_id,
539
580
  sandbox_policy=sandbox_policy,
581
+ size=size,
582
+ stream_stdin=stream_stdin,
583
+ stream_stdout_stderr=stream_stdout_stderr,
540
584
  timeout_ms=timeout_ms,
585
+ tty=tty,
541
586
  )
542
587
  )
543
588
 
544
589
  exec = execute
545
590
 
591
+ def write_stdin(
592
+ self,
593
+ *,
594
+ process_id: str,
595
+ close_stdin: bool | None = None,
596
+ delta_base64: str | None = None,
597
+ ) -> EmptyResult:
598
+ """Write stdin bytes to a running `command/exec` process or close stdin.
599
+
600
+ This wraps the app-server `command/exec/write` request. `delta_base64`
601
+ is optional base64-encoded stdin data; `close_stdin` closes the
602
+ process stdin after the optional write.
603
+ """
604
+ return self._run(
605
+ self._async_client.write_stdin(
606
+ process_id=process_id,
607
+ close_stdin=close_stdin,
608
+ delta_base64=delta_base64,
609
+ )
610
+ )
611
+
612
+ def resize_terminal(
613
+ self,
614
+ *,
615
+ process_id: str,
616
+ size: protocol.CommandExecTerminalSize,
617
+ ) -> EmptyResult:
618
+ """Resize the terminal attached to a running `command/exec` process.
619
+
620
+ This wraps the app-server `command/exec/resize` request and sends the
621
+ new terminal dimensions as `cols` and `rows`.
622
+ """
623
+ return self._run(self._async_client.resize_terminal(process_id=process_id, size=size))
624
+
625
+ def terminate_process(self, *, process_id: str) -> EmptyResult:
626
+ """Terminate a running `command/exec` process.
627
+
628
+ This wraps the app-server `command/exec/terminate` request for the
629
+ client-supplied process id.
630
+ """
631
+ return self._run(self._async_client.terminate_process(process_id=process_id))
632
+
546
633
 
547
634
  class _ExternalAgentConfigClient(_SyncRunner):
548
635
  def __init__(
@@ -2,7 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from collections.abc import Callable, Collection, Coroutine
5
+ from collections.abc import Callable, Collection, Coroutine, Mapping
6
6
  from typing import Any, Protocol, TypeVar
7
7
 
8
8
  from pydantic import BaseModel
@@ -45,7 +45,12 @@ class _AsyncTurnStreamLike(Protocol):
45
45
 
46
46
  def raise_for_terminal_status(self) -> None: ...
47
47
 
48
- async def steer(self, input: TurnInput) -> TurnIdResult: ...
48
+ async def steer(
49
+ self,
50
+ input: TurnInput,
51
+ *,
52
+ responsesapi_client_metadata: Mapping[str, object] | None = None,
53
+ ) -> TurnIdResult: ...
49
54
 
50
55
  async def interrupt(self) -> EmptyResult: ...
51
56
 
@@ -217,8 +222,18 @@ class TurnStream(_SyncRunner):
217
222
  def raise_for_terminal_status(self) -> None:
218
223
  self._async_stream.raise_for_terminal_status()
219
224
 
220
- def steer(self, input: TurnInput) -> TurnIdResult:
221
- return self._run(self._async_stream.steer(input))
225
+ def steer(
226
+ self,
227
+ input: TurnInput,
228
+ *,
229
+ responsesapi_client_metadata: Mapping[str, object] | None = None,
230
+ ) -> TurnIdResult:
231
+ return self._run(
232
+ self._async_stream.steer(
233
+ input,
234
+ responsesapi_client_metadata=responsesapi_client_metadata,
235
+ )
236
+ )
222
237
 
223
238
  def interrupt(self) -> EmptyResult:
224
239
  return self._run(self._async_stream.interrupt())
@@ -71,6 +71,7 @@ DEFAULT_INPUT_MODALITIES: tuple[Literal["text", "image"], Literal["text", "image
71
71
 
72
72
 
73
73
  class ModelInfo(AppServerResultModel):
74
+ additional_speed_tiers: list[str] | None = Field(default_factory=list)
74
75
  availability_nux: ModelAvailabilityNux | None = None
75
76
  default_reasoning_effort: protocol.ReasoningEffort
76
77
  description: str
@@ -98,8 +99,34 @@ class AppListResult(AppServerResultModel):
98
99
  next_cursor: str | None = None
99
100
 
100
101
 
102
+ class SkillInterface(AppServerResultModel):
103
+ display_name: str | None = None
104
+ short_description: str | None = None
105
+ icon_small: str | None = None
106
+ icon_large: str | None = None
107
+ brand_color: str | None = None
108
+ default_prompt: str | None = None
109
+
110
+
111
+ class SkillInfo(AppServerResultModel):
112
+ name: str
113
+ description: str
114
+ dependencies: protocol.SkillDependencies | None = None
115
+ enabled: bool
116
+ path: str
117
+ scope: str
118
+ interface: SkillInterface | None = None
119
+ short_description: str | None = None
120
+
121
+
122
+ class SkillsListEntry(AppServerResultModel):
123
+ cwd: str
124
+ skills: list[SkillInfo]
125
+ errors: list[protocol.SkillErrorInfo] = Field(default_factory=list)
126
+
127
+
101
128
  class SkillsListResult(AppServerResultModel):
102
- data: list[protocol.SkillsListEntry]
129
+ data: list[SkillsListEntry]
103
130
 
104
131
 
105
132
  class SkillsConfigWriteResult(AppServerResultModel):
@@ -181,10 +208,12 @@ class ConfigWriteResult(AppServerResultModel):
181
208
 
182
209
  class ConfigRequirements(AppServerResultModel):
183
210
  allowed_approval_policies: list[protocol.AskForApproval] | None = None
211
+ allowed_approvals_reviewers: list[protocol.ApprovalsReviewer] | None = None
184
212
  allowed_sandbox_modes: list[protocol.SandboxMode] | None = None
185
- allowed_web_search_modes: list[Literal["disabled", "cached", "live"]] | None = None
186
- enforce_residency: Literal["us"] | None = None
187
- feature_requirements: dict[str, bool] | None = None
213
+ allowed_web_search_modes: list[protocol.WebSearchMode] | None = None
214
+ enforce_residency: protocol.ResidencyRequirement | None = None
215
+ feature_requirements: dict[str, object] | None = None
216
+ network: protocol.NetworkRequirements | None = None
188
217
 
189
218
 
190
219
  class ConfigRequirementsReadResult(AppServerResultModel):
@@ -189,6 +189,10 @@ class AppServerTurnOptions(_AppServerOptionsModel):
189
189
  default=None,
190
190
  description="Sent as turn/start approvalPolicy.",
191
191
  )
192
+ approvals_reviewer: protocol.ApprovalsReviewer | None = Field(
193
+ default=None,
194
+ description="Sent as turn/start approvalsReviewer.",
195
+ )
192
196
  collaboration_mode: protocol.CollaborationMode | None = Field(
193
197
  default=None,
194
198
  description="Sent as turn/start collaborationMode.",
@@ -216,6 +220,10 @@ class AppServerTurnOptions(_AppServerOptionsModel):
216
220
  default=None,
217
221
  description="Sent as turn/start personality.",
218
222
  )
223
+ responsesapi_client_metadata: dict[str, object] | None = Field(
224
+ default=None,
225
+ description="Sent as turn/start responsesapiClientMetadata.",
226
+ )
219
227
  sandbox_policy: protocol.SandboxPolicy | None = Field(
220
228
  default=None,
221
229
  description="Sent as turn/start sandboxPolicy.",
@@ -249,6 +257,10 @@ class AppServerThreadStartOptions(_AppServerOptionsModel):
249
257
  default=None,
250
258
  description="Sent as thread/start approvalPolicy.",
251
259
  )
260
+ approvals_reviewer: protocol.ApprovalsReviewer | None = Field(
261
+ default=None,
262
+ description="Sent as thread/start approvalsReviewer.",
263
+ )
252
264
  base_instructions: str | None = Field(
253
265
  default=None,
254
266
  description="Sent as thread/start baseInstructions.",
@@ -321,6 +333,10 @@ class AppServerThreadStartOptions(_AppServerOptionsModel):
321
333
  default=None,
322
334
  description="Sent as thread/start serviceTier.",
323
335
  )
336
+ session_start_source: protocol.ThreadStartSource | None = Field(
337
+ default=None,
338
+ description="Sent as thread/start sessionStartSource.",
339
+ )
324
340
 
325
341
  def to_params(self) -> protocol.ThreadStartParams:
326
342
  return cast(
@@ -336,6 +352,10 @@ class AppServerThreadResumeOptions(_AppServerOptionsModel):
336
352
  default=None,
337
353
  description="Sent as thread/resume approvalPolicy.",
338
354
  )
355
+ approvals_reviewer: protocol.ApprovalsReviewer | None = Field(
356
+ default=None,
357
+ description="Sent as thread/resume approvalsReviewer.",
358
+ )
339
359
  base_instructions: str | None = Field(
340
360
  default=None,
341
361
  description="Sent as thread/resume baseInstructions.",
@@ -404,6 +424,10 @@ class AppServerThreadForkOptions(_AppServerOptionsModel):
404
424
  default=None,
405
425
  description="Sent as thread/fork approvalPolicy.",
406
426
  )
427
+ approvals_reviewer: protocol.ApprovalsReviewer | None = Field(
428
+ default=None,
429
+ description="Sent as thread/fork approvalsReviewer.",
430
+ )
407
431
  base_instructions: str | None = Field(
408
432
  default=None,
409
433
  description="Sent as thread/fork baseInstructions.",
@@ -420,6 +444,10 @@ class AppServerThreadForkOptions(_AppServerOptionsModel):
420
444
  default=None,
421
445
  description="Sent as thread/fork developerInstructions.",
422
446
  )
447
+ ephemeral: bool | None = Field(
448
+ default=None,
449
+ description="Sent as thread/fork ephemeral.",
450
+ )
423
451
  model: str | None = Field(
424
452
  default=None,
425
453
  description="Sent as thread/fork model.",
@@ -491,6 +519,10 @@ class AppServerThreadListOptions(_AppServerOptionsModel):
491
519
  default=None,
492
520
  description="Sent as thread/list sortKey.",
493
521
  )
522
+ sort_direction: protocol.SortDirection | None = Field(
523
+ default=None,
524
+ description="Sent as thread/list sortDirection.",
525
+ )
494
526
  source_kinds: list[protocol.ThreadSourceKind] | None = Field(
495
527
  default=None,
496
528
  description="Sent as thread/list sourceKinds.",