diff options
| author | Dax <[email protected]> | 2025-07-23 20:30:46 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-07-23 20:30:46 -0400 |
| commit | 96866e52ce4b28d8f380d84722f411e786781f51 (patch) | |
| tree | fbe8df4e706510b3158d1659d8aa54b0c533c849 /packages/sdk | |
| parent | 507c975e929d1d8bd58ae26e7bbcf9537daaf5b6 (diff) | |
| download | opencode-96866e52ce4b28d8f380d84722f411e786781f51.tar.gz opencode-96866e52ce4b28d8f380d84722f411e786781f51.zip | |
basic undo feature (#1268)
Co-authored-by: adamdotdevin <[email protected]>
Co-authored-by: Jay V <[email protected]>
Co-authored-by: Aiden Cline <[email protected]>
Co-authored-by: Andrew Joslin <[email protected]>
Co-authored-by: GitHub Action <[email protected]>
Co-authored-by: Tobias Walle <[email protected]>
Diffstat (limited to 'packages/sdk')
| -rw-r--r-- | packages/sdk/.stats.yml | 8 | ||||
| -rw-r--r-- | packages/sdk/api.md | 2 | ||||
| -rw-r--r-- | packages/sdk/src/client.ts | 2 | ||||
| -rw-r--r-- | packages/sdk/src/resources/config.ts | 12 | ||||
| -rw-r--r-- | packages/sdk/src/resources/index.ts | 1 | ||||
| -rw-r--r-- | packages/sdk/src/resources/session.ts | 23 | ||||
| -rw-r--r-- | packages/sdk/tests/api-resources/session.test.ts | 29 |
7 files changed, 71 insertions, 6 deletions
diff --git a/packages/sdk/.stats.yml b/packages/sdk/.stats.yml index f9f86831f..da0b08b5a 100644 --- a/packages/sdk/.stats.yml +++ b/packages/sdk/.stats.yml @@ -1,4 +1,4 @@ -configured_endpoints: 24 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/opencode%2Fopencode-9574184bd9e916aa69eae8e26e0679556038d3fcfb4009a445c97c6cc3e4f3ee.yml -openapi_spec_hash: 93ba1215ab0dc853a1691b049cc47d75 -config_hash: 09e4835d57ec7ed0b2d316c6815bcf0a +configured_endpoints: 26 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/opencode%2Fopencode-1efc45c35b58e88b0550fbb0c7a204ef66522742f87c9e29c76a18b120c0d945.yml +openapi_spec_hash: 5e15d85e4704624f9b13bae1c71aa416 +config_hash: 1ae82c93499b9f0b9ba828b8919f9cb3 diff --git a/packages/sdk/api.md b/packages/sdk/api.md index 7cbaaf6c5..d1f4a482f 100644 --- a/packages/sdk/api.md +++ b/packages/sdk/api.md @@ -121,8 +121,10 @@ Methods: - <code title="post /session/{id}/message">client.session.<a href="./src/resources/session.ts">chat</a>(id, { ...params }) -> AssistantMessage</code> - <code title="post /session/{id}/init">client.session.<a href="./src/resources/session.ts">init</a>(id, { ...params }) -> SessionInitResponse</code> - <code title="get /session/{id}/message">client.session.<a href="./src/resources/session.ts">messages</a>(id) -> SessionMessagesResponse</code> +- <code title="post /session/{id}/revert">client.session.<a href="./src/resources/session.ts">revert</a>(id, { ...params }) -> Session</code> - <code title="post /session/{id}/share">client.session.<a href="./src/resources/session.ts">share</a>(id) -> Session</code> - <code title="post /session/{id}/summarize">client.session.<a href="./src/resources/session.ts">summarize</a>(id, { ...params }) -> SessionSummarizeResponse</code> +- <code title="post /session/{id}/unrevert">client.session.<a href="./src/resources/session.ts">unrevert</a>(id) -> Session</code> - <code title="delete /session/{id}/share">client.session.<a href="./src/resources/session.ts">unshare</a>(id) -> Session</code> # Tui diff --git a/packages/sdk/src/client.ts b/packages/sdk/src/client.ts index c514ca877..7045719f6 100644 --- a/packages/sdk/src/client.ts +++ b/packages/sdk/src/client.ts @@ -67,6 +67,7 @@ import { SessionListResponse, SessionMessagesResponse, SessionResource, + SessionRevertParams, SessionSummarizeParams, SessionSummarizeResponse, SnapshotPart, @@ -846,6 +847,7 @@ export declare namespace Opencode { type SessionSummarizeResponse as SessionSummarizeResponse, type SessionChatParams as SessionChatParams, type SessionInitParams as SessionInitParams, + type SessionRevertParams as SessionRevertParams, type SessionSummarizeParams as SessionSummarizeParams, }; diff --git a/packages/sdk/src/resources/config.ts b/packages/sdk/src/resources/config.ts index e1fc09de5..638af98f8 100644 --- a/packages/sdk/src/resources/config.ts +++ b/packages/sdk/src/resources/config.ts @@ -305,11 +305,21 @@ export interface KeybindsConfig { messages_previous: string; /** - * Revert message + * Redo message + */ + messages_redo: string; + + /** + * @deprecated use messages_undo. Revert message */ messages_revert: string; /** + * Undo message + */ + messages_undo: string; + + /** * List available models */ model_list: string; diff --git a/packages/sdk/src/resources/index.ts b/packages/sdk/src/resources/index.ts index 50df8ff46..db8bde9b4 100644 --- a/packages/sdk/src/resources/index.ts +++ b/packages/sdk/src/resources/index.ts @@ -71,6 +71,7 @@ export { type SessionSummarizeResponse, type SessionChatParams, type SessionInitParams, + type SessionRevertParams, type SessionSummarizeParams, } from './session'; export { diff --git a/packages/sdk/src/resources/session.ts b/packages/sdk/src/resources/session.ts index 6e160321d..bb761033a 100644 --- a/packages/sdk/src/resources/session.ts +++ b/packages/sdk/src/resources/session.ts @@ -58,6 +58,13 @@ export class SessionResource extends APIResource { } /** + * Revert a message + */ + revert(id: string, body: SessionRevertParams, options?: RequestOptions): APIPromise<Session> { + return this._client.post(path`/session/${id}/revert`, { body, ...options }); + } + + /** * Share a session */ share(id: string, options?: RequestOptions): APIPromise<Session> { @@ -76,6 +83,13 @@ export class SessionResource extends APIResource { } /** + * Restore all reverted messages + */ + unrevert(id: string, options?: RequestOptions): APIPromise<Session> { + return this._client.post(path`/session/${id}/unrevert`, options); + } + + /** * Unshare the session */ unshare(id: string, options?: RequestOptions): APIPromise<Session> { @@ -231,7 +245,7 @@ export namespace Session { export interface Revert { messageID: string; - part: number; + partID?: string; snapshot?: string; } @@ -513,6 +527,12 @@ export interface SessionInitParams { providerID: string; } +export interface SessionRevertParams { + messageID: string; + + partID?: string; +} + export interface SessionSummarizeParams { modelID: string; @@ -550,6 +570,7 @@ export declare namespace SessionResource { type SessionSummarizeResponse as SessionSummarizeResponse, type SessionChatParams as SessionChatParams, type SessionInitParams as SessionInitParams, + type SessionRevertParams as SessionRevertParams, type SessionSummarizeParams as SessionSummarizeParams, }; } diff --git a/packages/sdk/tests/api-resources/session.test.ts b/packages/sdk/tests/api-resources/session.test.ts index efa1d9db4..1c4984a62 100644 --- a/packages/sdk/tests/api-resources/session.test.ts +++ b/packages/sdk/tests/api-resources/session.test.ts @@ -119,6 +119,23 @@ describe('resource session', () => { }); // skipped: tests are disabled for the time being + test.skip('revert: only required params', async () => { + const responsePromise = client.session.revert('id', { messageID: 'msg' }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // skipped: tests are disabled for the time being + test.skip('revert: required and optional params', async () => { + const response = await client.session.revert('id', { messageID: 'msg', partID: 'prt' }); + }); + + // skipped: tests are disabled for the time being test.skip('share', async () => { const responsePromise = client.session.share('id'); const rawResponse = await responsePromise.asResponse(); @@ -148,6 +165,18 @@ describe('resource session', () => { }); // skipped: tests are disabled for the time being + test.skip('unrevert', async () => { + const responsePromise = client.session.unrevert('id'); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // skipped: tests are disabled for the time being test.skip('unshare', async () => { const responsePromise = client.session.unshare('id'); const rawResponse = await responsePromise.asResponse(); |
