From 1edb2b3eeb980af0f006a6db5d906c551bd208b6 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Mon, 1 Sep 2025 20:24:17 +0000
Subject: [PATCH] feat(api): api update
---
.stats.yml | 2 +-
api.md | 4 +-
session.go | 220 ++++++++++++++++++++++++------------------------
session_test.go | 96 ++++++++++-----------
4 files changed, 161 insertions(+), 161 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index a729a61..8d606c8 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 43
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/opencode%2Fopencode-57001be06439e5325d0cb6837dd39d04fb7e438386668dcb67b4375ce6fabcf5.yml
openapi_spec_hash: 5c3f5b2a345e5e6cda17865e3bae1fd2
-config_hash: 1b0d220e033fe9f683abf7048e7ad076
+config_hash: 026ef000d34bf2f930e7b41e77d2d3ff
diff --git a/api.md b/api.md
index ba2a388..02ac42b 100644
--- a/api.md
+++ b/api.md
@@ -143,10 +143,10 @@ Response Types:
- opencode.ToolStatePending
- opencode.ToolStateRunning
- opencode.UserMessage
-- opencode.SessionChatResponse
- opencode.SessionCommandResponse
- opencode.SessionMessageResponse
- opencode.SessionMessagesResponse
+- opencode.SessionPromptResponse
Methods:
@@ -155,13 +155,13 @@ Methods:
- client.Session.List(ctx context.Context, query opencode.SessionListParams) ([]opencode.Session, error)
- client.Session.Delete(ctx context.Context, id string, body opencode.SessionDeleteParams) (bool, error)
- client.Session.Abort(ctx context.Context, id string, body opencode.SessionAbortParams) (bool, error)
-- client.Session.Chat(ctx context.Context, id string, params opencode.SessionChatParams) (opencode.SessionChatResponse, error)
- client.Session.Children(ctx context.Context, id string, query opencode.SessionChildrenParams) ([]opencode.Session, error)
- client.Session.Command(ctx context.Context, id string, params opencode.SessionCommandParams) (opencode.SessionCommandResponse, error)
- client.Session.Get(ctx context.Context, id string, query opencode.SessionGetParams) (opencode.Session, error)
- client.Session.Init(ctx context.Context, id string, params opencode.SessionInitParams) (bool, error)
- client.Session.Message(ctx context.Context, id string, messageID string, query opencode.SessionMessageParams) (opencode.SessionMessageResponse, error)
- client.Session.Messages(ctx context.Context, id string, query opencode.SessionMessagesParams) ([]opencode.SessionMessagesResponse, error)
+- client.Session.Prompt(ctx context.Context, id string, params opencode.SessionPromptParams) (opencode.SessionPromptResponse, error)
- client.Session.Revert(ctx context.Context, id string, params opencode.SessionRevertParams) (opencode.Session, error)
- client.Session.Share(ctx context.Context, id string, body opencode.SessionShareParams) (opencode.Session, error)
- client.Session.Shell(ctx context.Context, id string, params opencode.SessionShellParams) (opencode.AssistantMessage, error)
diff --git a/session.go b/session.go
index efdd4c3..88d71b5 100644
--- a/session.go
+++ b/session.go
@@ -92,18 +92,6 @@ func (r *SessionService) Abort(ctx context.Context, id string, body SessionAbort
return
}
-// Create and send a new message to a session
-func (r *SessionService) Chat(ctx context.Context, id string, params SessionChatParams, opts ...option.RequestOption) (res *SessionChatResponse, err error) {
- opts = append(r.Options[:], opts...)
- if id == "" {
- err = errors.New("missing required id parameter")
- return
- }
- path := fmt.Sprintf("session/%s/message", id)
- err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, params, &res, opts...)
- return
-}
-
// Get a session's children
func (r *SessionService) Children(ctx context.Context, id string, query SessionChildrenParams, opts ...option.RequestOption) (res *[]Session, err error) {
opts = append(r.Options[:], opts...)
@@ -180,6 +168,18 @@ func (r *SessionService) Messages(ctx context.Context, id string, query SessionM
return
}
+// Create and send a new message to a session
+func (r *SessionService) Prompt(ctx context.Context, id string, params SessionPromptParams, opts ...option.RequestOption) (res *SessionPromptResponse, err error) {
+ opts = append(r.Options[:], opts...)
+ if id == "" {
+ err = errors.New("missing required id parameter")
+ return
+ }
+ path := fmt.Sprintf("session/%s/message", id)
+ err = requestconfig.ExecuteNewRequest(ctx, http.MethodPost, path, params, &res, opts...)
+ return
+}
+
// Revert a message
func (r *SessionService) Revert(ctx context.Context, id string, params SessionRevertParams, opts ...option.RequestOption) (res *Session, err error) {
opts = append(r.Options[:], opts...)
@@ -333,7 +333,7 @@ func (r AgentPartInputParam) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}
-func (r AgentPartInputParam) implementsSessionChatParamsPartUnion() {}
+func (r AgentPartInputParam) implementsSessionPromptParamsPartUnion() {}
type AgentPartInputType string
@@ -709,7 +709,7 @@ func (r FilePartInputParam) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}
-func (r FilePartInputParam) implementsSessionChatParamsPartUnion() {}
+func (r FilePartInputParam) implementsSessionPromptParamsPartUnion() {}
type FilePartInputType string
@@ -1820,7 +1820,7 @@ func (r TextPartInputParam) MarshalJSON() (data []byte, err error) {
return apijson.MarshalRoot(r)
}
-func (r TextPartInputParam) implementsSessionChatParamsPartUnion() {}
+func (r TextPartInputParam) implementsSessionPromptParamsPartUnion() {}
type TextPartInputType string
@@ -2296,29 +2296,6 @@ func (r userMessageTimeJSON) RawJSON() string {
return r.raw
}
-type SessionChatResponse struct {
- Info AssistantMessage `json:"info,required"`
- Parts []Part `json:"parts,required"`
- JSON sessionChatResponseJSON `json:"-"`
-}
-
-// sessionChatResponseJSON contains the JSON metadata for the struct
-// [SessionChatResponse]
-type sessionChatResponseJSON struct {
- Info apijson.Field
- Parts apijson.Field
- raw string
- ExtraFields map[string]apijson.Field
-}
-
-func (r *SessionChatResponse) UnmarshalJSON(data []byte) (err error) {
- return apijson.UnmarshalRoot(data, r)
-}
-
-func (r sessionChatResponseJSON) RawJSON() string {
- return r.raw
-}
-
type SessionCommandResponse struct {
Info AssistantMessage `json:"info,required"`
Parts []Part `json:"parts,required"`
@@ -2388,6 +2365,29 @@ func (r sessionMessagesResponseJSON) RawJSON() string {
return r.raw
}
+type SessionPromptResponse struct {
+ Info AssistantMessage `json:"info,required"`
+ Parts []Part `json:"parts,required"`
+ JSON sessionPromptResponseJSON `json:"-"`
+}
+
+// sessionPromptResponseJSON contains the JSON metadata for the struct
+// [SessionPromptResponse]
+type sessionPromptResponseJSON struct {
+ Info apijson.Field
+ Parts apijson.Field
+ raw string
+ ExtraFields map[string]apijson.Field
+}
+
+func (r *SessionPromptResponse) UnmarshalJSON(data []byte) (err error) {
+ return apijson.UnmarshalRoot(data, r)
+}
+
+func (r sessionPromptResponseJSON) RawJSON() string {
+ return r.raw
+}
+
type SessionNewParams struct {
Directory param.Field[string] `query:"directory"`
ParentID param.Field[string] `json:"parentID"`
@@ -2459,78 +2459,6 @@ func (r SessionAbortParams) URLQuery() (v url.Values) {
})
}
-type SessionChatParams struct {
- Parts param.Field[[]SessionChatParamsPartUnion] `json:"parts,required"`
- Directory param.Field[string] `query:"directory"`
- Agent param.Field[string] `json:"agent"`
- MessageID param.Field[string] `json:"messageID"`
- Model param.Field[SessionChatParamsModel] `json:"model"`
- System param.Field[string] `json:"system"`
- Tools param.Field[map[string]bool] `json:"tools"`
-}
-
-func (r SessionChatParams) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
-
-// URLQuery serializes [SessionChatParams]'s query parameters as `url.Values`.
-func (r SessionChatParams) URLQuery() (v url.Values) {
- return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
- ArrayFormat: apiquery.ArrayQueryFormatComma,
- NestedFormat: apiquery.NestedQueryFormatBrackets,
- })
-}
-
-type SessionChatParamsPart struct {
- Type param.Field[SessionChatParamsPartsType] `json:"type,required"`
- ID param.Field[string] `json:"id"`
- Filename param.Field[string] `json:"filename"`
- Mime param.Field[string] `json:"mime"`
- Name param.Field[string] `json:"name"`
- Source param.Field[interface{}] `json:"source"`
- Synthetic param.Field[bool] `json:"synthetic"`
- Text param.Field[string] `json:"text"`
- Time param.Field[interface{}] `json:"time"`
- URL param.Field[string] `json:"url"`
-}
-
-func (r SessionChatParamsPart) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
-
-func (r SessionChatParamsPart) implementsSessionChatParamsPartUnion() {}
-
-// Satisfied by [TextPartInputParam], [FilePartInputParam], [AgentPartInputParam],
-// [SessionChatParamsPart].
-type SessionChatParamsPartUnion interface {
- implementsSessionChatParamsPartUnion()
-}
-
-type SessionChatParamsPartsType string
-
-const (
- SessionChatParamsPartsTypeText SessionChatParamsPartsType = "text"
- SessionChatParamsPartsTypeFile SessionChatParamsPartsType = "file"
- SessionChatParamsPartsTypeAgent SessionChatParamsPartsType = "agent"
-)
-
-func (r SessionChatParamsPartsType) IsKnown() bool {
- switch r {
- case SessionChatParamsPartsTypeText, SessionChatParamsPartsTypeFile, SessionChatParamsPartsTypeAgent:
- return true
- }
- return false
-}
-
-type SessionChatParamsModel struct {
- ModelID param.Field[string] `json:"modelID,required"`
- ProviderID param.Field[string] `json:"providerID,required"`
-}
-
-func (r SessionChatParamsModel) MarshalJSON() (data []byte, err error) {
- return apijson.MarshalRoot(r)
-}
-
type SessionChildrenParams struct {
Directory param.Field[string] `query:"directory"`
}
@@ -2619,6 +2547,78 @@ func (r SessionMessagesParams) URLQuery() (v url.Values) {
})
}
+type SessionPromptParams struct {
+ Parts param.Field[[]SessionPromptParamsPartUnion] `json:"parts,required"`
+ Directory param.Field[string] `query:"directory"`
+ Agent param.Field[string] `json:"agent"`
+ MessageID param.Field[string] `json:"messageID"`
+ Model param.Field[SessionPromptParamsModel] `json:"model"`
+ System param.Field[string] `json:"system"`
+ Tools param.Field[map[string]bool] `json:"tools"`
+}
+
+func (r SessionPromptParams) MarshalJSON() (data []byte, err error) {
+ return apijson.MarshalRoot(r)
+}
+
+// URLQuery serializes [SessionPromptParams]'s query parameters as `url.Values`.
+func (r SessionPromptParams) URLQuery() (v url.Values) {
+ return apiquery.MarshalWithSettings(r, apiquery.QuerySettings{
+ ArrayFormat: apiquery.ArrayQueryFormatComma,
+ NestedFormat: apiquery.NestedQueryFormatBrackets,
+ })
+}
+
+type SessionPromptParamsPart struct {
+ Type param.Field[SessionPromptParamsPartsType] `json:"type,required"`
+ ID param.Field[string] `json:"id"`
+ Filename param.Field[string] `json:"filename"`
+ Mime param.Field[string] `json:"mime"`
+ Name param.Field[string] `json:"name"`
+ Source param.Field[interface{}] `json:"source"`
+ Synthetic param.Field[bool] `json:"synthetic"`
+ Text param.Field[string] `json:"text"`
+ Time param.Field[interface{}] `json:"time"`
+ URL param.Field[string] `json:"url"`
+}
+
+func (r SessionPromptParamsPart) MarshalJSON() (data []byte, err error) {
+ return apijson.MarshalRoot(r)
+}
+
+func (r SessionPromptParamsPart) implementsSessionPromptParamsPartUnion() {}
+
+// Satisfied by [TextPartInputParam], [FilePartInputParam], [AgentPartInputParam],
+// [SessionPromptParamsPart].
+type SessionPromptParamsPartUnion interface {
+ implementsSessionPromptParamsPartUnion()
+}
+
+type SessionPromptParamsPartsType string
+
+const (
+ SessionPromptParamsPartsTypeText SessionPromptParamsPartsType = "text"
+ SessionPromptParamsPartsTypeFile SessionPromptParamsPartsType = "file"
+ SessionPromptParamsPartsTypeAgent SessionPromptParamsPartsType = "agent"
+)
+
+func (r SessionPromptParamsPartsType) IsKnown() bool {
+ switch r {
+ case SessionPromptParamsPartsTypeText, SessionPromptParamsPartsTypeFile, SessionPromptParamsPartsTypeAgent:
+ return true
+ }
+ return false
+}
+
+type SessionPromptParamsModel struct {
+ ModelID param.Field[string] `json:"modelID,required"`
+ ProviderID param.Field[string] `json:"providerID,required"`
+}
+
+func (r SessionPromptParamsModel) MarshalJSON() (data []byte, err error) {
+ return apijson.MarshalRoot(r)
+}
+
type SessionRevertParams struct {
MessageID param.Field[string] `json:"messageID,required"`
Directory param.Field[string] `query:"directory"`
diff --git a/session_test.go b/session_test.go
index 73c7f5b..f4cbc04 100644
--- a/session_test.go
+++ b/session_test.go
@@ -148,54 +148,6 @@ func TestSessionAbortWithOptionalParams(t *testing.T) {
}
}
-func TestSessionChatWithOptionalParams(t *testing.T) {
- t.Skip("Prism tests are disabled")
- baseURL := "http://localhost:4010"
- if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
- baseURL = envURL
- }
- if !testutil.CheckTestServer(t, baseURL) {
- return
- }
- client := opencode.NewClient(
- option.WithBaseURL(baseURL),
- )
- _, err := client.Session.Chat(
- context.TODO(),
- "id",
- opencode.SessionChatParams{
- Parts: opencode.F([]opencode.SessionChatParamsPartUnion{opencode.TextPartInputParam{
- Text: opencode.F("text"),
- Type: opencode.F(opencode.TextPartInputTypeText),
- ID: opencode.F("id"),
- Synthetic: opencode.F(true),
- Time: opencode.F(opencode.TextPartInputTimeParam{
- Start: opencode.F(0.000000),
- End: opencode.F(0.000000),
- }),
- }}),
- Directory: opencode.F("directory"),
- Agent: opencode.F("agent"),
- MessageID: opencode.F("msg"),
- Model: opencode.F(opencode.SessionChatParamsModel{
- ModelID: opencode.F("modelID"),
- ProviderID: opencode.F("providerID"),
- }),
- System: opencode.F("system"),
- Tools: opencode.F(map[string]bool{
- "foo": true,
- }),
- },
- )
- if err != nil {
- var apierr *opencode.Error
- if errors.As(err, &apierr) {
- t.Log(string(apierr.DumpRequest(true)))
- }
- t.Fatalf("err should be nil: %s", err.Error())
- }
-}
-
func TestSessionChildrenWithOptionalParams(t *testing.T) {
t.Skip("Prism tests are disabled")
baseURL := "http://localhost:4010"
@@ -373,6 +325,54 @@ func TestSessionMessagesWithOptionalParams(t *testing.T) {
}
}
+func TestSessionPromptWithOptionalParams(t *testing.T) {
+ t.Skip("Prism tests are disabled")
+ baseURL := "http://localhost:4010"
+ if envURL, ok := os.LookupEnv("TEST_API_BASE_URL"); ok {
+ baseURL = envURL
+ }
+ if !testutil.CheckTestServer(t, baseURL) {
+ return
+ }
+ client := opencode.NewClient(
+ option.WithBaseURL(baseURL),
+ )
+ _, err := client.Session.Prompt(
+ context.TODO(),
+ "id",
+ opencode.SessionPromptParams{
+ Parts: opencode.F([]opencode.SessionPromptParamsPartUnion{opencode.TextPartInputParam{
+ Text: opencode.F("text"),
+ Type: opencode.F(opencode.TextPartInputTypeText),
+ ID: opencode.F("id"),
+ Synthetic: opencode.F(true),
+ Time: opencode.F(opencode.TextPartInputTimeParam{
+ Start: opencode.F(0.000000),
+ End: opencode.F(0.000000),
+ }),
+ }}),
+ Directory: opencode.F("directory"),
+ Agent: opencode.F("agent"),
+ MessageID: opencode.F("msg"),
+ Model: opencode.F(opencode.SessionPromptParamsModel{
+ ModelID: opencode.F("modelID"),
+ ProviderID: opencode.F("providerID"),
+ }),
+ System: opencode.F("system"),
+ Tools: opencode.F(map[string]bool{
+ "foo": true,
+ }),
+ },
+ )
+ if err != nil {
+ var apierr *opencode.Error
+ if errors.As(err, &apierr) {
+ t.Log(string(apierr.DumpRequest(true)))
+ }
+ t.Fatalf("err should be nil: %s", err.Error())
+ }
+}
+
func TestSessionRevertWithOptionalParams(t *testing.T) {
t.Skip("Prism tests are disabled")
baseURL := "http://localhost:4010"