diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 1c0bb88..380b6f9 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.1.0-alpha.23" + ".": "0.1.0-alpha.24" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index 02591cb..32b1351 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 22 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/opencode%2Fopencode-a1da357fcefd3105736841fbf44018022fade78e67ffc81e178cf9196da723ee.yml -openapi_spec_hash: 9bd27afcc5b8f43d8e4223f7c984035f -config_hash: 62b73a3397120578a992bffd1e69386a +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/opencode%2Fopencode-5e3b108daef12bb43f728ee42261cd1322e8909e6225db58d6fe0617f3b5904c.yml +openapi_spec_hash: 1f9d2853ba0c1179e45426560e082ef4 +config_hash: 6d56a7ca0d6ed899ecdb5c053a8278ae diff --git a/CHANGELOG.md b/CHANGELOG.md index e892995..42c2638 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 0.1.0-alpha.24 (2025-07-21) + +Full Changelog: [v0.1.0-alpha.23...v0.1.0-alpha.24](https://github.com/sst/opencode-sdk-python/compare/v0.1.0-alpha.23...v0.1.0-alpha.24) + +### Features + +* **api:** api update ([bd6dd48](https://github.com/sst/opencode-sdk-python/commit/bd6dd48f11b23c77802e0a36af94c1a92c0326c7)) + ## 0.1.0-alpha.23 (2025-07-18) Full Changelog: [v0.1.0-alpha.22...v0.1.0-alpha.23](https://github.com/sst/opencode-sdk-python/compare/v0.1.0-alpha.22...v0.1.0-alpha.23) diff --git a/api.md b/api.md index dddb269..e8f80d9 100644 --- a/api.md +++ b/api.md @@ -23,7 +23,6 @@ Types: ```python from opencode_ai.types import ( App, - LogLevel, Mode, Model, Provider, @@ -96,12 +95,16 @@ from opencode_ai.types import ( AssistantMessage, FilePart, FilePartInput, + FilePartSource, + FilePartSourceText, + FileSource, Message, Part, Session, SnapshotPart, StepFinishPart, StepStartPart, + SymbolSource, TextPart, TextPartInput, ToolPart, diff --git a/pyproject.toml b/pyproject.toml index 55a9f68..cc7a6a2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "opencode-ai" -version = "0.1.0-alpha.23" +version = "0.1.0-alpha.24" description = "The official Python library for the opencode API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/opencode_ai/_version.py b/src/opencode_ai/_version.py index 3ac2a7b..87c4570 100644 --- a/src/opencode_ai/_version.py +++ b/src/opencode_ai/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "opencode_ai" -__version__ = "0.1.0-alpha.23" # x-release-please-version +__version__ = "0.1.0-alpha.24" # x-release-please-version diff --git a/src/opencode_ai/resources/session.py b/src/opencode_ai/resources/session.py index 472dfe0..baf2060 100644 --- a/src/opencode_ai/resources/session.py +++ b/src/opencode_ai/resources/session.py @@ -2,7 +2,7 @@ from __future__ import annotations -from typing import Iterable +from typing import Dict, Iterable import httpx @@ -163,6 +163,7 @@ def chat( provider_id: str, message_id: str | NotGiven = NOT_GIVEN, mode: str | NotGiven = NOT_GIVEN, + tools: Dict[str, bool] | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -195,6 +196,7 @@ def chat( "provider_id": provider_id, "message_id": message_id, "mode": mode, + "tools": tools, }, session_chat_params.SessionChatParams, ), @@ -529,6 +531,7 @@ async def chat( provider_id: str, message_id: str | NotGiven = NOT_GIVEN, mode: str | NotGiven = NOT_GIVEN, + tools: Dict[str, bool] | NotGiven = NOT_GIVEN, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -561,6 +564,7 @@ async def chat( "provider_id": provider_id, "message_id": message_id, "mode": mode, + "tools": tools, }, session_chat_params.SessionChatParams, ), diff --git a/src/opencode_ai/types/__init__.py b/src/opencode_ai/types/__init__.py index f5d4e4a..5151b92 100644 --- a/src/opencode_ai/types/__init__.py +++ b/src/opencode_ai/types/__init__.py @@ -19,16 +19,18 @@ from .session import Session as Session from .provider import Provider as Provider from .file_part import FilePart as FilePart -from .log_level import LogLevel as LogLevel from .text_part import TextPart as TextPart from .tool_part import ToolPart as ToolPart +from .file_source import FileSource as FileSource from .mode_config import ModeConfig as ModeConfig from .user_message import UserMessage as UserMessage from .snapshot_part import SnapshotPart as SnapshotPart +from .symbol_source import SymbolSource as SymbolSource from .app_log_params import AppLogParams as AppLogParams from .keybinds_config import KeybindsConfig as KeybindsConfig from .step_start_part import StepStartPart as StepStartPart from .app_log_response import AppLogResponse as AppLogResponse +from .file_part_source import FilePartSource as FilePartSource from .file_read_params import FileReadParams as FileReadParams from .find_text_params import FindTextParams as FindTextParams from .mcp_local_config import McpLocalConfig as McpLocalConfig @@ -36,6 +38,7 @@ from .tool_state_error import ToolStateError as ToolStateError from .app_init_response import AppInitResponse as AppInitResponse from .assistant_message import AssistantMessage as AssistantMessage +from .file_source_param import FileSourceParam as FileSourceParam from .find_files_params import FindFilesParams as FindFilesParams from .mcp_remote_config import McpRemoteConfig as McpRemoteConfig from .app_modes_response import AppModesResponse as AppModesResponse @@ -48,16 +51,20 @@ from .find_symbols_params import FindSymbolsParams as FindSymbolsParams from .session_chat_params import SessionChatParams as SessionChatParams from .session_init_params import SessionInitParams as SessionInitParams +from .symbol_source_param import SymbolSourceParam as SymbolSourceParam from .file_status_response import FileStatusResponse as FileStatusResponse from .tool_state_completed import ToolStateCompleted as ToolStateCompleted from .file_part_input_param import FilePartInputParam as FilePartInputParam +from .file_part_source_text import FilePartSourceText as FilePartSourceText from .find_symbols_response import FindSymbolsResponse as FindSymbolsResponse from .session_init_response import SessionInitResponse as SessionInitResponse from .session_list_response import SessionListResponse as SessionListResponse from .text_part_input_param import TextPartInputParam as TextPartInputParam from .app_providers_response import AppProvidersResponse as AppProvidersResponse +from .file_part_source_param import FilePartSourceParam as FilePartSourceParam from .session_abort_response import SessionAbortResponse as SessionAbortResponse from .session_delete_response import SessionDeleteResponse as SessionDeleteResponse from .session_summarize_params import SessionSummarizeParams as SessionSummarizeParams from .session_messages_response import SessionMessagesResponse as SessionMessagesResponse from .session_summarize_response import SessionSummarizeResponse as SessionSummarizeResponse +from .file_part_source_text_param import FilePartSourceTextParam as FilePartSourceTextParam diff --git a/src/opencode_ai/types/config.py b/src/opencode_ai/types/config.py index 19963ad..927bfc5 100644 --- a/src/opencode_ai/types/config.py +++ b/src/opencode_ai/types/config.py @@ -7,7 +7,6 @@ from .._utils import PropertyInfo from .._models import BaseModel -from .log_level import LogLevel from .mode_config import ModeConfig from .keybinds_config import KeybindsConfig from .mcp_local_config import McpLocalConfig @@ -146,9 +145,6 @@ class Config(BaseModel): layout: Optional[Literal["auto", "stretch"]] = None """@deprecated Always uses stretch layout.""" - log_level: Optional[LogLevel] = None - """Minimum log level to write to log files""" - mcp: Optional[Dict[str, Mcp]] = None """MCP (Model Context Protocol) server configurations""" @@ -167,6 +163,12 @@ class Config(BaseModel): enables automatic sharing, 'disabled' disables all sharing """ + small_model: Optional[str] = None + """ + Small model to use for tasks like summarization and title generation in the + format of provider/model + """ + theme: Optional[str] = None """Theme name to use for the interface""" diff --git a/src/opencode_ai/types/file_part.py b/src/opencode_ai/types/file_part.py index a4b9934..42851c9 100644 --- a/src/opencode_ai/types/file_part.py +++ b/src/opencode_ai/types/file_part.py @@ -6,6 +6,7 @@ from pydantic import Field as FieldInfo from .._models import BaseModel +from .file_part_source import FilePartSource __all__ = ["FilePart"] @@ -24,3 +25,5 @@ class FilePart(BaseModel): url: str filename: Optional[str] = None + + source: Optional[FilePartSource] = None diff --git a/src/opencode_ai/types/file_part_input_param.py b/src/opencode_ai/types/file_part_input_param.py index 53002cc..96325e0 100644 --- a/src/opencode_ai/types/file_part_input_param.py +++ b/src/opencode_ai/types/file_part_input_param.py @@ -4,6 +4,8 @@ from typing_extensions import Literal, Required, TypedDict +from .file_part_source_param import FilePartSourceParam + __all__ = ["FilePartInputParam"] @@ -17,3 +19,5 @@ class FilePartInputParam(TypedDict, total=False): id: str filename: str + + source: FilePartSourceParam diff --git a/src/opencode_ai/types/file_part_source.py b/src/opencode_ai/types/file_part_source.py new file mode 100644 index 0000000..25cb97d --- /dev/null +++ b/src/opencode_ai/types/file_part_source.py @@ -0,0 +1,12 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Union +from typing_extensions import Annotated, TypeAlias + +from .._utils import PropertyInfo +from .file_source import FileSource +from .symbol_source import SymbolSource + +__all__ = ["FilePartSource"] + +FilePartSource: TypeAlias = Annotated[Union[FileSource, SymbolSource], PropertyInfo(discriminator="type")] diff --git a/src/opencode_ai/types/file_part_source_param.py b/src/opencode_ai/types/file_part_source_param.py new file mode 100644 index 0000000..7b5bcbb --- /dev/null +++ b/src/opencode_ai/types/file_part_source_param.py @@ -0,0 +1,13 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Union +from typing_extensions import TypeAlias + +from .file_source_param import FileSourceParam +from .symbol_source_param import SymbolSourceParam + +__all__ = ["FilePartSourceParam"] + +FilePartSourceParam: TypeAlias = Union[FileSourceParam, SymbolSourceParam] diff --git a/src/opencode_ai/types/file_part_source_text.py b/src/opencode_ai/types/file_part_source_text.py new file mode 100644 index 0000000..95af821 --- /dev/null +++ b/src/opencode_ai/types/file_part_source_text.py @@ -0,0 +1,13 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from .._models import BaseModel + +__all__ = ["FilePartSourceText"] + + +class FilePartSourceText(BaseModel): + end: int + + start: int + + value: str diff --git a/src/opencode_ai/types/file_part_source_text_param.py b/src/opencode_ai/types/file_part_source_text_param.py new file mode 100644 index 0000000..40d94bc --- /dev/null +++ b/src/opencode_ai/types/file_part_source_text_param.py @@ -0,0 +1,15 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Required, TypedDict + +__all__ = ["FilePartSourceTextParam"] + + +class FilePartSourceTextParam(TypedDict, total=False): + end: Required[int] + + start: Required[int] + + value: Required[str] diff --git a/src/opencode_ai/types/file_source.py b/src/opencode_ai/types/file_source.py new file mode 100644 index 0000000..fd5f328 --- /dev/null +++ b/src/opencode_ai/types/file_source.py @@ -0,0 +1,16 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing_extensions import Literal + +from .._models import BaseModel +from .file_part_source_text import FilePartSourceText + +__all__ = ["FileSource"] + + +class FileSource(BaseModel): + path: str + + text: FilePartSourceText + + type: Literal["file"] diff --git a/src/opencode_ai/types/file_source_param.py b/src/opencode_ai/types/file_source_param.py new file mode 100644 index 0000000..caf14a5 --- /dev/null +++ b/src/opencode_ai/types/file_source_param.py @@ -0,0 +1,17 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal, Required, TypedDict + +from .file_part_source_text_param import FilePartSourceTextParam + +__all__ = ["FileSourceParam"] + + +class FileSourceParam(TypedDict, total=False): + path: Required[str] + + text: Required[FilePartSourceTextParam] + + type: Required[Literal["file"]] diff --git a/src/opencode_ai/types/log_level.py b/src/opencode_ai/types/log_level.py deleted file mode 100644 index 7d35a2e..0000000 --- a/src/opencode_ai/types/log_level.py +++ /dev/null @@ -1,7 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from typing_extensions import Literal, TypeAlias - -__all__ = ["LogLevel"] - -LogLevel: TypeAlias = Literal["DEBUG", "INFO", "WARN", "ERROR"] diff --git a/src/opencode_ai/types/session_chat_params.py b/src/opencode_ai/types/session_chat_params.py index f9dfee5..b1f197a 100644 --- a/src/opencode_ai/types/session_chat_params.py +++ b/src/opencode_ai/types/session_chat_params.py @@ -2,7 +2,7 @@ from __future__ import annotations -from typing import Union, Iterable +from typing import Dict, Union, Iterable from typing_extensions import Required, Annotated, TypeAlias, TypedDict from .._utils import PropertyInfo @@ -23,5 +23,7 @@ class SessionChatParams(TypedDict, total=False): mode: str + tools: Dict[str, bool] + Part: TypeAlias = Union[TextPartInputParam, FilePartInputParam] diff --git a/src/opencode_ai/types/symbol_source.py b/src/opencode_ai/types/symbol_source.py new file mode 100644 index 0000000..f8982d8 --- /dev/null +++ b/src/opencode_ai/types/symbol_source.py @@ -0,0 +1,40 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing_extensions import Literal + +from .._models import BaseModel +from .file_part_source_text import FilePartSourceText + +__all__ = ["SymbolSource", "Range", "RangeEnd", "RangeStart"] + + +class RangeEnd(BaseModel): + character: float + + line: float + + +class RangeStart(BaseModel): + character: float + + line: float + + +class Range(BaseModel): + end: RangeEnd + + start: RangeStart + + +class SymbolSource(BaseModel): + kind: int + + name: str + + path: str + + range: Range + + text: FilePartSourceText + + type: Literal["symbol"] diff --git a/src/opencode_ai/types/symbol_source_param.py b/src/opencode_ai/types/symbol_source_param.py new file mode 100644 index 0000000..b1ec7a0 --- /dev/null +++ b/src/opencode_ai/types/symbol_source_param.py @@ -0,0 +1,41 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal, Required, TypedDict + +from .file_part_source_text_param import FilePartSourceTextParam + +__all__ = ["SymbolSourceParam", "Range", "RangeEnd", "RangeStart"] + + +class RangeEnd(TypedDict, total=False): + character: Required[float] + + line: Required[float] + + +class RangeStart(TypedDict, total=False): + character: Required[float] + + line: Required[float] + + +class Range(TypedDict, total=False): + end: Required[RangeEnd] + + start: Required[RangeStart] + + +class SymbolSourceParam(TypedDict, total=False): + kind: Required[int] + + name: Required[str] + + path: Required[str] + + range: Required[Range] + + text: Required[FilePartSourceTextParam] + + type: Required[Literal["symbol"]] diff --git a/tests/api_resources/test_session.py b/tests/api_resources/test_session.py index 644f9a7..08ecc09 100644 --- a/tests/api_resources/test_session.py +++ b/tests/api_resources/test_session.py @@ -203,6 +203,7 @@ def test_method_chat_with_all_params(self, client: Opencode) -> None: provider_id="providerID", message_id="msg", mode="mode", + tools={"foo": True}, ) assert_matches_type(AssistantMessage, session, path=["response"]) @@ -677,6 +678,7 @@ async def test_method_chat_with_all_params(self, async_client: AsyncOpencode) -> provider_id="providerID", message_id="msg", mode="mode", + tools={"foo": True}, ) assert_matches_type(AssistantMessage, session, path=["response"])