diff options
| author | Dax <[email protected]> | 2025-09-01 17:15:49 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-09-01 17:15:49 -0400 |
| commit | f993541e0b538388969defc94d08c3a7af5ef873 (patch) | |
| tree | ae9898664175faf69583e0bbb1b10135c645d798 /packages/sdk/js/src | |
| parent | e2df3eb44dc8b032f74ed0273a53be5f83aaab13 (diff) | |
| download | opencode-f993541e0b538388969defc94d08c3a7af5ef873.tar.gz opencode-f993541e0b538388969defc94d08c3a7af5ef873.zip | |
Refactor to support multiple instances inside single opencode process (#2360)
This release has a bunch of minor breaking changes if you are using opencode plugins or sdk
1. storage events have been removed (we might bring this back but had some issues)
2. concept of `app` is gone - there is a new concept called `project` and endpoints to list projects and get the current project
3. plugin receives `directory` which is cwd and `worktree` which is where the root of the project is if it's a git repo
4. the session.chat function has been renamed to session.prompt in sdk. it no longer requires model to be passed in (model is now an object)
5. every endpoint takes an optional `directory` parameter to operate as though opencode is running in that directory
Diffstat (limited to 'packages/sdk/js/src')
| -rw-r--r-- | packages/sdk/js/src/gen/sdk.gen.ts | 114 | ||||
| -rw-r--r-- | packages/sdk/js/src/gen/types.gen.ts | 296 |
2 files changed, 252 insertions, 158 deletions
diff --git a/packages/sdk/js/src/gen/sdk.gen.ts b/packages/sdk/js/src/gen/sdk.gen.ts index a50f5e142..ac6be13d5 100644 --- a/packages/sdk/js/src/gen/sdk.gen.ts +++ b/packages/sdk/js/src/gen/sdk.gen.ts @@ -2,14 +2,16 @@ import type { Options as ClientOptions, TDataShape, Client } from "./client/index.js" import type { + ProjectListData, + ProjectListResponses, + ProjectCurrentData, + ProjectCurrentResponses, EventSubscribeData, EventSubscribeResponses, - AppGetData, - AppGetResponses, - AppInitData, - AppInitResponses, ConfigGetData, ConfigGetResponses, + PathGetData, + PathGetResponses, SessionListData, SessionListResponses, SessionCreateData, @@ -35,8 +37,8 @@ import type { SessionSummarizeResponses, SessionMessagesData, SessionMessagesResponses, - SessionChatData, - SessionChatResponses, + SessionPromptData, + SessionPromptResponses, SessionMessageData, SessionMessageResponses, SessionCommandData, @@ -120,59 +122,35 @@ class _HeyApiClient { } } -class Event extends _HeyApiClient { - /** - * Get events - */ - public subscribe<ThrowOnError extends boolean = false>(options?: Options<EventSubscribeData, ThrowOnError>) { - return (options?.client ?? this._client).get.sse<EventSubscribeResponses, unknown, ThrowOnError>({ - url: "/event", - ...options, - }) - } -} - -class App extends _HeyApiClient { - /** - * Get app info - */ - public get<ThrowOnError extends boolean = false>(options?: Options<AppGetData, ThrowOnError>) { - return (options?.client ?? this._client).get<AppGetResponses, unknown, ThrowOnError>({ - url: "/app", - ...options, - }) - } - +class Project extends _HeyApiClient { /** - * Initialize the app + * List all projects */ - public init<ThrowOnError extends boolean = false>(options?: Options<AppInitData, ThrowOnError>) { - return (options?.client ?? this._client).post<AppInitResponses, unknown, ThrowOnError>({ - url: "/app/init", + public list<ThrowOnError extends boolean = false>(options?: Options<ProjectListData, ThrowOnError>) { + return (options?.client ?? this._client).get<ProjectListResponses, unknown, ThrowOnError>({ + url: "/project", ...options, }) } /** - * Write a log entry to the server logs + * Get the current project */ - public log<ThrowOnError extends boolean = false>(options?: Options<AppLogData, ThrowOnError>) { - return (options?.client ?? this._client).post<AppLogResponses, unknown, ThrowOnError>({ - url: "/log", + public current<ThrowOnError extends boolean = false>(options?: Options<ProjectCurrentData, ThrowOnError>) { + return (options?.client ?? this._client).get<ProjectCurrentResponses, unknown, ThrowOnError>({ + url: "/project/current", ...options, - headers: { - "Content-Type": "application/json", - ...options?.headers, - }, }) } +} +class Event extends _HeyApiClient { /** - * List all agents + * Get events */ - public agents<ThrowOnError extends boolean = false>(options?: Options<AppAgentsData, ThrowOnError>) { - return (options?.client ?? this._client).get<AppAgentsResponses, unknown, ThrowOnError>({ - url: "/agent", + public subscribe<ThrowOnError extends boolean = false>(options?: Options<EventSubscribeData, ThrowOnError>) { + return (options?.client ?? this._client).get.sse<EventSubscribeResponses, unknown, ThrowOnError>({ + url: "/event", ...options, }) } @@ -200,6 +178,18 @@ class Config extends _HeyApiClient { } } +class Path extends _HeyApiClient { + /** + * Get the current path + */ + public get<ThrowOnError extends boolean = false>(options?: Options<PathGetData, ThrowOnError>) { + return (options?.client ?? this._client).get<PathGetResponses, unknown, ThrowOnError>({ + url: "/path", + ...options, + }) + } +} + class Session extends _HeyApiClient { /** * List all sessions @@ -340,8 +330,8 @@ class Session extends _HeyApiClient { /** * Create and send a new message to a session */ - public chat<ThrowOnError extends boolean = false>(options: Options<SessionChatData, ThrowOnError>) { - return (options.client ?? this._client).post<SessionChatResponses, unknown, ThrowOnError>({ + public prompt<ThrowOnError extends boolean = false>(options: Options<SessionPromptData, ThrowOnError>) { + return (options.client ?? this._client).post<SessionPromptResponses, unknown, ThrowOnError>({ url: "/session/{id}/message", ...options, headers: { @@ -490,6 +480,32 @@ class File extends _HeyApiClient { } } +class App extends _HeyApiClient { + /** + * Write a log entry to the server logs + */ + public log<ThrowOnError extends boolean = false>(options?: Options<AppLogData, ThrowOnError>) { + return (options?.client ?? this._client).post<AppLogResponses, unknown, ThrowOnError>({ + url: "/log", + ...options, + headers: { + "Content-Type": "application/json", + ...options?.headers, + }, + }) + } + + /** + * List all agents + */ + public agents<ThrowOnError extends boolean = false>(options?: Options<AppAgentsData, ThrowOnError>) { + return (options?.client ?? this._client).get<AppAgentsResponses, unknown, ThrowOnError>({ + url: "/agent", + ...options, + }) + } +} + class Tui extends _HeyApiClient { /** * Append prompt to the TUI @@ -630,13 +646,15 @@ export class OpencodeClient extends _HeyApiClient { }, }) } + project = new Project({ client: this._client }) event = new Event({ client: this._client }) - app = new App({ client: this._client }) config = new Config({ client: this._client }) + path = new Path({ client: this._client }) session = new Session({ client: this._client }) command = new Command({ client: this._client }) find = new Find({ client: this._client }) file = new File({ client: this._client }) + app = new App({ client: this._client }) tui = new Tui({ client: this._client }) auth = new Auth({ client: this._client }) } diff --git a/packages/sdk/js/src/gen/types.gen.ts b/packages/sdk/js/src/gen/types.gen.ts index 434606d86..c56ea309b 100644 --- a/packages/sdk/js/src/gen/types.gen.ts +++ b/packages/sdk/js/src/gen/types.gen.ts @@ -1,5 +1,15 @@ // This file is auto-generated by @hey-api/openapi-ts +export type Project = { + id: string + worktree: string + vcs?: "git" + time: { + created: number + initialized?: number + } +} + export type Event = | ({ type: "installation.updated" @@ -20,9 +30,6 @@ export type Event = type: "message.part.removed" } & EventMessagePartRemoved) | ({ - type: "storage.write" - } & EventStorageWrite) - | ({ type: "permission.updated" } & EventPermissionUpdated) | ({ @@ -46,12 +53,6 @@ export type Event = | ({ type: "server.connected" } & EventServerConnected) - | ({ - type: "file.watcher.updated" - } & EventFileWatcherUpdated) - | ({ - type: "ide.installed" - } & EventIdeInstalled) export type EventInstallationUpdated = { type: "installation.updated" @@ -420,14 +421,6 @@ export type EventMessagePartRemoved = { } } -export type EventStorageWrite = { - type: "storage.write" - properties: { - key: string - content?: unknown - } -} - export type EventPermissionUpdated = { type: "permission.updated" properties: Permission @@ -474,6 +467,8 @@ export type EventSessionUpdated = { export type Session = { id: string + projectID: string + directory: string parentID?: string share?: { url: string @@ -533,37 +528,6 @@ export type EventServerConnected = { } } -export type EventFileWatcherUpdated = { - type: "file.watcher.updated" - properties: { - file: string - event: "rename" | "change" - } -} - -export type EventIdeInstalled = { - type: "ide.installed" - properties: { - ide: string - } -} - -export type App = { - hostname: string - git: boolean - path: { - home: string - config: string - data: string - root: string - cwd: string - state: string - } - time: { - initialized?: number - } -} - export type Config = { /** * JSON schema reference for configuration validation @@ -681,7 +645,11 @@ export type Config = { options?: { apiKey?: string baseURL?: string - [key: string]: unknown | string | undefined + /** + * Timeout in milliseconds for requests to this provider. Default is 300000 (5 minutes). Set to false to disable timeout. + */ + timeout?: number | false + [key: string]: unknown | string | (number | false) | undefined } } } @@ -1085,6 +1053,13 @@ export type McpRemoteConfig = { export type LayoutConfig = "auto" | "stretch" +export type Path = { + state: string + config: string + worktree: string + directory: string +} + export type _Error = { data: { [key: string]: unknown @@ -1209,58 +1184,66 @@ export type WellKnownAuth = { token: string } -export type EventSubscribeData = { +export type ProjectListData = { body?: never path?: never - query?: never - url: "/event" + query?: { + directory?: string + } + url: "/project" } -export type EventSubscribeResponses = { +export type ProjectListResponses = { /** - * Event stream + * List of projects */ - 200: Event + 200: Array<Project> } -export type EventSubscribeResponse = EventSubscribeResponses[keyof EventSubscribeResponses] +export type ProjectListResponse = ProjectListResponses[keyof ProjectListResponses] -export type AppGetData = { +export type ProjectCurrentData = { body?: never path?: never - query?: never - url: "/app" + query?: { + directory?: string + } + url: "/project/current" } -export type AppGetResponses = { +export type ProjectCurrentResponses = { /** - * 200 + * Current project */ - 200: App + 200: Project } -export type AppGetResponse = AppGetResponses[keyof AppGetResponses] +export type ProjectCurrentResponse = ProjectCurrentResponses[keyof ProjectCurrentResponses] -export type AppInitData = { +export type EventSubscribeData = { body?: never path?: never - query?: never - url: "/app/init" + query?: { + directory?: string + } + url: "/event" } -export type AppInitResponses = { +export type EventSubscribeResponses = { /** - * Initialize the app + * Event stream */ - 200: boolean + 200: Event } -export type AppInitResponse = AppInitResponses[keyof AppInitResponses] +export type EventSubscribeResponse = EventSubscribeResponses[keyof EventSubscribeResponses] export type ConfigGetData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/config" } @@ -1273,10 +1256,30 @@ export type ConfigGetResponses = { export type ConfigGetResponse = ConfigGetResponses[keyof ConfigGetResponses] +export type PathGetData = { + body?: never + path?: never + query?: { + directory?: string + } + url: "/path" +} + +export type PathGetResponses = { + /** + * Path + */ + 200: Path +} + +export type PathGetResponse = PathGetResponses[keyof PathGetResponses] + export type SessionListData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/session" } @@ -1295,7 +1298,9 @@ export type SessionCreateData = { title?: string } path?: never - query?: never + query?: { + directory?: string + } url: "/session" } @@ -1322,7 +1327,9 @@ export type SessionDeleteData = { path: { id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}" } @@ -1340,7 +1347,9 @@ export type SessionGetData = { path: { id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}" } @@ -1360,7 +1369,9 @@ export type SessionUpdateData = { path: { id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}" } @@ -1378,7 +1389,9 @@ export type SessionChildrenData = { path: { id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/children" } @@ -1403,7 +1416,9 @@ export type SessionInitData = { */ id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/init" } @@ -1421,7 +1436,9 @@ export type SessionAbortData = { path: { id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/abort" } @@ -1439,7 +1456,9 @@ export type SessionUnshareData = { path: { id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/share" } @@ -1457,7 +1476,9 @@ export type SessionShareData = { path: { id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/share" } @@ -1481,7 +1502,9 @@ export type SessionSummarizeData = { */ id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/summarize" } @@ -1502,7 +1525,9 @@ export type SessionMessagesData = { */ id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/message" } @@ -1518,11 +1543,13 @@ export type SessionMessagesResponses = { export type SessionMessagesResponse = SessionMessagesResponses[keyof SessionMessagesResponses] -export type SessionChatData = { +export type SessionPromptData = { body?: { messageID?: string - providerID: string - modelID: string + model?: { + providerID: string + modelID: string + } agent?: string system?: string tools?: { @@ -1546,11 +1573,13 @@ export type SessionChatData = { */ id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/message" } -export type SessionChatResponses = { +export type SessionPromptResponses = { /** * Created message */ @@ -1560,7 +1589,7 @@ export type SessionChatResponses = { } } -export type SessionChatResponse = SessionChatResponses[keyof SessionChatResponses] +export type SessionPromptResponse = SessionPromptResponses[keyof SessionPromptResponses] export type SessionMessageData = { body?: never @@ -1574,7 +1603,9 @@ export type SessionMessageData = { */ messageID: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/message/{messageID}" } @@ -1604,7 +1635,9 @@ export type SessionCommandData = { */ id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/command" } @@ -1631,7 +1664,9 @@ export type SessionShellData = { */ id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/shell" } @@ -1652,7 +1687,9 @@ export type SessionRevertData = { path: { id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/revert" } @@ -1670,7 +1707,9 @@ export type SessionUnrevertData = { path: { id: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/unrevert" } @@ -1691,7 +1730,9 @@ export type PostSessionByIdPermissionsByPermissionIdData = { id: string permissionID: string } - query?: never + query?: { + directory?: string + } url: "/session/{id}/permissions/{permissionID}" } @@ -1708,7 +1749,9 @@ export type PostSessionByIdPermissionsByPermissionIdResponse = export type CommandListData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/command" } @@ -1724,7 +1767,9 @@ export type CommandListResponse = CommandListResponses[keyof CommandListResponse export type ConfigProvidersData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/config/providers" } @@ -1746,6 +1791,7 @@ export type FindTextData = { body?: never path?: never query: { + directory?: string pattern: string } url: "/find" @@ -1780,6 +1826,7 @@ export type FindFilesData = { body?: never path?: never query: { + directory?: string query: string } url: "/find/file" @@ -1798,6 +1845,7 @@ export type FindSymbolsData = { body?: never path?: never query: { + directory?: string query: string } url: "/find/symbol" @@ -1816,6 +1864,7 @@ export type FileListData = { body?: never path?: never query: { + directory?: string path: string } url: "/file" @@ -1834,6 +1883,7 @@ export type FileReadData = { body?: never path?: never query: { + directory?: string path: string } url: "/file/content" @@ -1854,7 +1904,9 @@ export type FileReadResponse = FileReadResponses[keyof FileReadResponses] export type FileStatusData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/file/status" } @@ -1889,7 +1941,9 @@ export type AppLogData = { } } path?: never - query?: never + query?: { + directory?: string + } url: "/log" } @@ -1905,7 +1959,9 @@ export type AppLogResponse = AppLogResponses[keyof AppLogResponses] export type AppAgentsData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/agent" } @@ -1923,7 +1979,9 @@ export type TuiAppendPromptData = { text: string } path?: never - query?: never + query?: { + directory?: string + } url: "/tui/append-prompt" } @@ -1939,7 +1997,9 @@ export type TuiAppendPromptResponse = TuiAppendPromptResponses[keyof TuiAppendPr export type TuiOpenHelpData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/tui/open-help" } @@ -1955,7 +2015,9 @@ export type TuiOpenHelpResponse = TuiOpenHelpResponses[keyof TuiOpenHelpResponse export type TuiOpenSessionsData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/tui/open-sessions" } @@ -1971,7 +2033,9 @@ export type TuiOpenSessionsResponse = TuiOpenSessionsResponses[keyof TuiOpenSess export type TuiOpenThemesData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/tui/open-themes" } @@ -1987,7 +2051,9 @@ export type TuiOpenThemesResponse = TuiOpenThemesResponses[keyof TuiOpenThemesRe export type TuiOpenModelsData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/tui/open-models" } @@ -2003,7 +2069,9 @@ export type TuiOpenModelsResponse = TuiOpenModelsResponses[keyof TuiOpenModelsRe export type TuiSubmitPromptData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/tui/submit-prompt" } @@ -2019,7 +2087,9 @@ export type TuiSubmitPromptResponse = TuiSubmitPromptResponses[keyof TuiSubmitPr export type TuiClearPromptData = { body?: never path?: never - query?: never + query?: { + directory?: string + } url: "/tui/clear-prompt" } @@ -2037,7 +2107,9 @@ export type TuiExecuteCommandData = { command: string } path?: never - query?: never + query?: { + directory?: string + } url: "/tui/execute-command" } @@ -2057,7 +2129,9 @@ export type TuiShowToastData = { variant: "info" | "success" | "warning" | "error" } path?: never - query?: never + query?: { + directory?: string + } url: "/tui/show-toast" } @@ -2075,7 +2149,9 @@ export type AuthSetData = { path: { id: string } - query?: never + query?: { + directory?: string + } url: "/auth/{id}" } |
