Files
openchamber/packages/vscode/webview/api/github.ts
T
Bohdan Triapitsyn 5b0a97d170 feat(ui): add desktop git sidebar + terminal dock and improve in-app PR workflow (#362)
* feat: add unified dropdown with services content in header

* feat: add right Git sidebar with resizable panel

* feat: implement responsive panel auto-toggle and terminal rehydration

- Auto-close the right sidebar when width is below a threshold and auto-open it when space permits
- Auto-close the bottom terminal when height is below a threshold and auto-open it when enough space
- Apply a dedicated rehydrated streaming configuration for terminal sessions to optimize reconnect behavior

* feat: enhance PR view with status caching and annotations

* feat(ui): enable chat dispatch in PullRequestSection

* feat(TerminalView): adjust layout

* feat: refine chat input layout and text selection menu

* fix(ui): show empty state in GitView when no changes

* feat(git): update PR actions styling and create PR button
2026-02-09 03:13:34 +02:00

62 lines
3.0 KiB
TypeScript

import type {
GitHubAPI,
GitHubAuthStatus,
GitHubIssueCommentsResult,
GitHubIssueGetResult,
GitHubIssuesListResult,
GitHubPullRequestContextResult,
GitHubPullRequestsListResult,
GitHubPullRequest,
GitHubPullRequestCreateInput,
GitHubPullRequestMergeInput,
GitHubPullRequestMergeResult,
GitHubPullRequestReadyInput,
GitHubPullRequestReadyResult,
GitHubPullRequestUpdateInput,
GitHubPullRequestStatus,
GitHubDeviceFlowComplete,
GitHubDeviceFlowStart,
GitHubUserSummary,
} from '@openchamber/ui/lib/api/types';
import { sendBridgeMessage } from './bridge';
export const createVSCodeGitHubAPI = (): GitHubAPI => ({
authStatus: async () => sendBridgeMessage<GitHubAuthStatus>('api:github/auth:status'),
authStart: async () => sendBridgeMessage<GitHubDeviceFlowStart>('api:github/auth:start'),
authComplete: async (deviceCode: string) =>
sendBridgeMessage<GitHubDeviceFlowComplete>('api:github/auth:complete', { deviceCode }),
authDisconnect: async () => sendBridgeMessage<{ removed: boolean }>('api:github/auth:disconnect'),
authActivate: async (accountId: string) =>
sendBridgeMessage<GitHubAuthStatus>('api:github/auth:activate', { accountId }),
me: async () => sendBridgeMessage<GitHubUserSummary>('api:github/me'),
prStatus: async (directory: string, branch: string) =>
sendBridgeMessage<GitHubPullRequestStatus>('api:github/pr:status', { directory, branch }),
prCreate: async (payload: GitHubPullRequestCreateInput) =>
sendBridgeMessage<GitHubPullRequest>('api:github/pr:create', payload),
prUpdate: async (payload: GitHubPullRequestUpdateInput) =>
sendBridgeMessage<GitHubPullRequest>('api:github/pr:update', payload),
prMerge: async (payload: GitHubPullRequestMergeInput) =>
sendBridgeMessage<GitHubPullRequestMergeResult>('api:github/pr:merge', payload),
prReady: async (payload: GitHubPullRequestReadyInput) =>
sendBridgeMessage<GitHubPullRequestReadyResult>('api:github/pr:ready', payload),
issuesList: async (directory: string, options?: { page?: number }) =>
sendBridgeMessage<GitHubIssuesListResult>('api:github/issues:list', { directory, page: options?.page ?? 1 }),
issueGet: async (directory: string, number: number) =>
sendBridgeMessage<GitHubIssueGetResult>('api:github/issues:get', { directory, number }),
issueComments: async (directory: string, number: number) =>
sendBridgeMessage<GitHubIssueCommentsResult>('api:github/issues:comments', { directory, number }),
prsList: async (directory: string, options?: { page?: number }) =>
sendBridgeMessage<GitHubPullRequestsListResult>('api:github/pulls:list', { directory, page: options?.page ?? 1 }),
prContext: async (directory: string, number: number, options?: { includeDiff?: boolean; includeCheckDetails?: boolean }) =>
sendBridgeMessage<GitHubPullRequestContextResult>('api:github/pulls:context', {
directory,
number,
includeDiff: Boolean(options?.includeDiff),
includeCheckDetails: Boolean(options?.includeCheckDetails),
}),
});