feat: server-side GitHub search for issue/PR pickers (#1352)
Replace local-only filtering in GitHub issue/PR picker dialogs with server-side GitHub Search API queries. Search text is sent as a query parameter to the server, which uses the GitHub Search API (issuesAndPullRequests endpoint) with repo: qualifiers including fork network support. Results are debounced at 350ms to respect API rate limits. - Add query parameter to GitHubAPI issuesList/prsList interface - Server routes use Search API when query is present, standard list endpoint when absent - Fork networks handled via repo:owner/repo OR repo:owner/upstream - PR search fetches full PR details after Search API for head/base/draft fields - Remove local filter memos from all three picker dialogs - Add debounced search effect with abort controller cleanup - Update VS Code backend and webview API for parity - Update search placeholders in all locales Closes #1350 Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
This commit is contained in:
committed by
GitHub
co-authored by
Bohdan Triapitsyn
parent
5589ca991a
commit
7b1b3167a4
@@ -1076,14 +1076,14 @@ export interface GitHubAPI {
|
||||
prMerge(payload: GitHubPullRequestMergeInput): Promise<GitHubPullRequestMergeResult>;
|
||||
prReady(payload: GitHubPullRequestReadyInput): Promise<GitHubPullRequestReadyResult>;
|
||||
|
||||
prsList(directory: string, options?: { page?: number }): Promise<GitHubPullRequestsListResult>;
|
||||
prsList(directory: string, options?: { page?: number; query?: string }): Promise<GitHubPullRequestsListResult>;
|
||||
prContext(
|
||||
directory: string,
|
||||
number: number,
|
||||
options?: { includeDiff?: boolean; includeCheckDetails?: boolean; sourceRepo?: GitHubRepoSelector | null }
|
||||
): Promise<GitHubPullRequestContextResult>;
|
||||
|
||||
issuesList(directory: string, options?: { page?: number }): Promise<GitHubIssuesListResult>;
|
||||
issuesList(directory: string, options?: { page?: number; query?: string }): Promise<GitHubIssuesListResult>;
|
||||
issueGet(directory: string, number: number, options?: { sourceRepo?: GitHubRepoSelector | null }): Promise<GitHubIssueGetResult>;
|
||||
issueComments(directory: string, number: number, options?: { sourceRepo?: GitHubRepoSelector | null }): Promise<GitHubIssueCommentsResult>;
|
||||
repoUpstream(directory: string): Promise<GitHubRepoUpstreamResult>;
|
||||
|
||||
@@ -1437,7 +1437,7 @@ export const dict = {
|
||||
'session.githubIssuePicker.title.createSession': 'New Session From GitHub Issue',
|
||||
'session.githubIssuePicker.description.select': 'Select an issue to link to this session.',
|
||||
'session.githubIssuePicker.description.createSession': 'Seeds a new session with hidden issue context (title/body/labels/comments).',
|
||||
'session.githubIssuePicker.searchPlaceholder': 'Search by title or #123, or paste issue URL',
|
||||
'session.githubIssuePicker.searchPlaceholder': 'Search using GitHub code search syntax',
|
||||
'session.githubIssuePicker.empty.noActiveProject': 'No active project selected.',
|
||||
'session.githubIssuePicker.empty.runtimeUnavailable': 'GitHub runtime API unavailable.',
|
||||
'session.githubIssuePicker.empty.notConnected': 'GitHub not connected. Connect your GitHub account in settings.',
|
||||
@@ -1464,7 +1464,7 @@ export const dict = {
|
||||
'session.githubPrPicker.toast.loadDetailsFailed': 'Failed to load pull request details',
|
||||
'session.githubPrPicker.title': 'Link GitHub Pull Request',
|
||||
'session.githubPrPicker.description': 'Select a pull request to attach review context to this message.',
|
||||
'session.githubPrPicker.searchPlaceholder': 'Search by title or #123, or paste pull request URL',
|
||||
'session.githubPrPicker.searchPlaceholder': 'Search using GitHub code search syntax',
|
||||
'session.githubPrPicker.includeDiffAria': 'Include PR diff in attached context',
|
||||
'session.githubPrPicker.includeDiff': 'Include PR diff',
|
||||
'session.githubPrPicker.empty.noActiveProject': 'No active project selected.',
|
||||
@@ -1531,8 +1531,8 @@ export const dict = {
|
||||
'session.githubIntegration.connect.title': 'Connect to GitHub',
|
||||
'session.githubIntegration.connect.description': 'Link issues or pull requests to auto-fill worktree details',
|
||||
'session.githubIntegration.connect.action': 'Connect GitHub',
|
||||
'session.githubIntegration.search.issuesPlaceholder': 'Search issues or enter #123...',
|
||||
'session.githubIntegration.search.prsPlaceholder': 'Search PRs or enter #456...',
|
||||
'session.githubIntegration.search.issuesPlaceholder': 'Search using GitHub code search syntax',
|
||||
'session.githubIntegration.search.prsPlaceholder': 'Search using GitHub code search syntax',
|
||||
'session.githubIntegration.empty.noIssuesFound': 'No issues found',
|
||||
'session.githubIntegration.empty.noPullRequestsFound': 'No pull requests found',
|
||||
'session.githubIntegration.actions.loadMore': 'Load more',
|
||||
|
||||
@@ -1403,7 +1403,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
"session.githubIssuePicker.title.createSession": "Nueva sesión desde issue de GitHub",
|
||||
"session.githubIssuePicker.description.select": "Selecciona un issue para vincularlo a esta sesión.",
|
||||
"session.githubIssuePicker.description.createSession": "Inicia una nueva sesión con contexto oculto del issue (título/cuerpo/etiquetas/comentarios).",
|
||||
"session.githubIssuePicker.searchPlaceholder": "Buscar por título o #123, o pegar la URL del issue",
|
||||
"session.githubIssuePicker.searchPlaceholder": "Buscar usando la sintaxis de búsqueda de código de GitHub",
|
||||
"session.githubIssuePicker.empty.noActiveProject": "No hay ningún proyecto activo seleccionado.",
|
||||
"session.githubIssuePicker.empty.runtimeUnavailable": "API de runtime de GitHub no disponible.",
|
||||
"session.githubIssuePicker.empty.notConnected": "GitHub no está conectado. Conecta tu cuenta de GitHub en configuración.",
|
||||
@@ -1430,7 +1430,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
"session.githubPrPicker.toast.loadDetailsFailed": "No se pudieron cargar los detalles de la PR",
|
||||
"session.githubPrPicker.title": "Vincular PR de GitHub",
|
||||
"session.githubPrPicker.description": "Selecciona una PR para adjuntar contexto de revisión a este mensaje.",
|
||||
"session.githubPrPicker.searchPlaceholder": "Buscar por título o #123, o pegar la URL de la PR",
|
||||
"session.githubPrPicker.searchPlaceholder": "Buscar usando la sintaxis de búsqueda de código de GitHub",
|
||||
"session.githubPrPicker.includeDiffAria": "Incluir diff de la PR en el contexto adjunto",
|
||||
"session.githubPrPicker.includeDiff": "Incluir diff de la PR",
|
||||
"session.githubPrPicker.empty.noActiveProject": "No hay ningún proyecto activo seleccionado.",
|
||||
@@ -1497,8 +1497,8 @@ export const dict: Record<I18nKey, string> = {
|
||||
"session.githubIntegration.connect.title": "Conectar a GitHub",
|
||||
"session.githubIntegration.connect.description": "Vincula issues o PR para rellenar automáticamente los detalles del worktree",
|
||||
"session.githubIntegration.connect.action": "Conectar a GitHub",
|
||||
"session.githubIntegration.search.issuesPlaceholder": "Buscar issues o introducir #123...",
|
||||
"session.githubIntegration.search.prsPlaceholder": "Buscar PRs o introducir #456...",
|
||||
"session.githubIntegration.search.issuesPlaceholder": "Buscar usando la sintaxis de búsqueda de código de GitHub",
|
||||
"session.githubIntegration.search.prsPlaceholder": "Buscar usando la sintaxis de búsqueda de código de GitHub",
|
||||
"session.githubIntegration.empty.noIssuesFound": "No se encontraron issues",
|
||||
"session.githubIntegration.empty.noPullRequestsFound": "No se encontraron PR",
|
||||
"session.githubIntegration.actions.loadMore": "Cargar más",
|
||||
|
||||
@@ -1439,7 +1439,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
'session.githubIssuePicker.title.createSession': 'GitHub 이슈로 새 세션 만들기',
|
||||
'session.githubIssuePicker.description.select': '이 세션에 연결할 이슈를 선택하세요.',
|
||||
'session.githubIssuePicker.description.createSession': '제목, 본문, 라벨, 댓글을 숨겨진 이슈 컨텍스트로 새 세션에 추가합니다.',
|
||||
'session.githubIssuePicker.searchPlaceholder': '제목 또는 #123으로 검색하거나 이슈 URL을 붙여넣으세요',
|
||||
'session.githubIssuePicker.searchPlaceholder': 'GitHub 코드 검색 구문을 사용하여 검색',
|
||||
'session.githubIssuePicker.empty.noActiveProject': '선택된 활성 프로젝트가 없습니다',
|
||||
'session.githubIssuePicker.empty.runtimeUnavailable': 'GitHub 런타임 API를 사용할 수 없습니다.',
|
||||
'session.githubIssuePicker.empty.notConnected': 'GitHub에 연결되지 않았습니다. 설정에서 GitHub 계정을 연결하세요.',
|
||||
@@ -1466,7 +1466,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
'session.githubPrPicker.toast.loadDetailsFailed': 'PR 상세 정보를 불러오지 못했습니다',
|
||||
'session.githubPrPicker.title': 'GitHub PR 연결',
|
||||
'session.githubPrPicker.description': '이 메시지에 리뷰 컨텍스트로 첨부할 PR을 선택하세요.',
|
||||
'session.githubPrPicker.searchPlaceholder': '제목 또는 #123으로 검색하거나 PR URL을 붙여넣으세요',
|
||||
'session.githubPrPicker.searchPlaceholder': 'GitHub 코드 검색 구문을 사용하여 검색',
|
||||
'session.githubPrPicker.includeDiffAria': 'PR 변경사항을 첨부 컨텍스트에 포함',
|
||||
'session.githubPrPicker.includeDiff': 'PR 변경사항 포함',
|
||||
'session.githubPrPicker.empty.noActiveProject': '선택된 활성 프로젝트가 없습니다',
|
||||
@@ -1533,8 +1533,8 @@ export const dict: Record<I18nKey, string> = {
|
||||
'session.githubIntegration.connect.title': 'GitHub에 연결',
|
||||
'session.githubIntegration.connect.description': '이슈 또는 PR을 연결해 워크트리 정보를 자동으로 채웁니다',
|
||||
'session.githubIntegration.connect.action': 'GitHub 연결',
|
||||
'session.githubIntegration.search.issuesPlaceholder': '이슈 검색 또는 #123 입력…',
|
||||
'session.githubIntegration.search.prsPlaceholder': 'PR 검색 또는 #456 입력…',
|
||||
'session.githubIntegration.search.issuesPlaceholder': 'GitHub 코드 검색 구문을 사용하여 검색',
|
||||
'session.githubIntegration.search.prsPlaceholder': 'GitHub 코드 검색 구문을 사용하여 검색',
|
||||
'session.githubIntegration.empty.noIssuesFound': '이슈 없음',
|
||||
'session.githubIntegration.empty.noPullRequestsFound': 'PR이 없습니다',
|
||||
'session.githubIntegration.actions.loadMore': '더 불러오기',
|
||||
|
||||
@@ -513,8 +513,8 @@ export const dict: Record<I18nKey, string> = {
|
||||
'session.githubIntegration.connect.title': 'Połącz z GitHub',
|
||||
'session.githubIntegration.connect.description': 'Połącz zagadnienia lub pull requesty aby auto-wypełnić szczegóły drzewa pracy',
|
||||
'session.githubIntegration.connect.action': 'Połącz GitHub',
|
||||
'session.githubIntegration.search.issuesPlaceholder': 'Szukaj zagadnień lub wpisz #123...',
|
||||
'session.githubIntegration.search.prsPlaceholder': 'Szukaj PR lub wpisz #456...',
|
||||
'session.githubIntegration.search.issuesPlaceholder': 'Szukaj używając składni wyszukiwania kodu GitHub',
|
||||
'session.githubIntegration.search.prsPlaceholder': 'Szukaj używając składni wyszukiwania kodu GitHub',
|
||||
'session.githubIntegration.empty.noIssuesFound': 'Nie znaleziono zagadnień',
|
||||
'session.githubIntegration.empty.noPullRequestsFound': 'Nie znaleziono pull requestów',
|
||||
'session.githubIntegration.actions.loadMore': 'Załaduj więcej',
|
||||
@@ -2227,7 +2227,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
'session.githubIssuePicker.error.runtimeUnavailable': 'API środowiska GitHub jest niedostępne',
|
||||
'session.githubIssuePicker.loading.issues': 'Ładowanie zgłoszeń...',
|
||||
'session.githubIssuePicker.loading.more': 'Ładowanie...',
|
||||
'session.githubIssuePicker.searchPlaceholder': 'Szukaj po tytule lub #123, albo wklej URL zgłoszenia',
|
||||
'session.githubIssuePicker.searchPlaceholder': 'Szukaj używając składni wyszukiwania kodu GitHub',
|
||||
'session.githubIssuePicker.title.createSession': 'Nowa sesja ze zgłoszenia GitHub',
|
||||
'session.githubIssuePicker.title.select': 'Połącz zgłoszenie GitHub',
|
||||
'session.githubIssuePicker.toast.loadIssueDetailsFailed': 'Nie udało się załadować szczegółów zgłoszenia',
|
||||
@@ -2255,7 +2255,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
'session.githubPrPicker.includeDiffAria': 'Dołącz diff PR do załączonego kontekstu',
|
||||
'session.githubPrPicker.loading.more': 'Ładowanie...',
|
||||
'session.githubPrPicker.loading.pullRequests': 'Ładowanie pull requestów...',
|
||||
'session.githubPrPicker.searchPlaceholder': 'Szukaj po tytule lub #123, albo wklej URL pull requesta',
|
||||
'session.githubPrPicker.searchPlaceholder': 'Szukaj używając składni wyszukiwania kodu GitHub',
|
||||
'session.githubPrPicker.title': 'Połącz pull request GitHub',
|
||||
'session.githubPrPicker.toast.loadDetailsFailed': 'Nie udało się załadować szczegółów pull requesta',
|
||||
'session.githubPrPicker.toast.loadMoreFailed': 'Nie udało się załadować kolejnych pull requestów',
|
||||
|
||||
@@ -1403,7 +1403,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
"session.githubIssuePicker.title.createSession": "Nova sessão de issue de GitHub",
|
||||
"session.githubIssuePicker.description.select": "Selecione uma issue para vinculá-la a esta sessão.",
|
||||
"session.githubIssuePicker.description.createSession": "Inicie uma nova sessão com contexto oculto do issue (título/corpo/etiquetas/comentários).",
|
||||
"session.githubIssuePicker.searchPlaceholder": "Buscar por título ou #123, ou colar a URL da issue",
|
||||
"session.githubIssuePicker.searchPlaceholder": "Pesquisar usando a sintaxe de busca de código do GitHub",
|
||||
"session.githubIssuePicker.empty.noActiveProject": "Não há nenhum projeto ativo selecionado.",
|
||||
"session.githubIssuePicker.empty.runtimeUnavailable": "API de runtime de GitHub não disponível.",
|
||||
"session.githubIssuePicker.empty.notConnected": "GitHub não está conectado. Conecte sua conta do GitHub nas configurações.",
|
||||
@@ -1430,7 +1430,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
"session.githubPrPicker.toast.loadDetailsFailed": "Não foi possível carregar os detalhes da PR",
|
||||
"session.githubPrPicker.title": "Vincular PR de GitHub",
|
||||
"session.githubPrPicker.description": "Selecione uma PR para anexar contexto de revisão a esta mensagem.",
|
||||
"session.githubPrPicker.searchPlaceholder": "Buscar por título ou #123, ou colar a URL da PR",
|
||||
"session.githubPrPicker.searchPlaceholder": "Pesquisar usando a sintaxe de busca de código do GitHub",
|
||||
"session.githubPrPicker.includeDiffAria": "Incluir diff da PR no contexto adjunto",
|
||||
"session.githubPrPicker.includeDiff": "Incluir diff da PR",
|
||||
"session.githubPrPicker.empty.noActiveProject": "Não há nenhum projeto ativo selecionado.",
|
||||
@@ -1497,8 +1497,8 @@ export const dict: Record<I18nKey, string> = {
|
||||
"session.githubIntegration.connect.title": "Conectar a GitHub",
|
||||
"session.githubIntegration.connect.description": "Vincule issues ou PRs para preencher automaticamente os detalhes do worktree",
|
||||
"session.githubIntegration.connect.action": "Conectar a GitHub",
|
||||
"session.githubIntegration.search.issuesPlaceholder": "Buscar issues ou digitar #123...",
|
||||
"session.githubIntegration.search.prsPlaceholder": "Buscar PRs ou digitar #456...",
|
||||
"session.githubIntegration.search.issuesPlaceholder": "Pesquisar usando a sintaxe de busca de código do GitHub",
|
||||
"session.githubIntegration.search.prsPlaceholder": "Pesquisar usando a sintaxe de busca de código do GitHub",
|
||||
"session.githubIntegration.empty.noIssuesFound": "Nenhuma issue encontrada",
|
||||
"session.githubIntegration.empty.noPullRequestsFound": "Nenhuma PR encontrada",
|
||||
"session.githubIntegration.actions.loadMore": "Carregar mais",
|
||||
|
||||
@@ -1403,7 +1403,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
"session.githubIssuePicker.title.createSession": "Нова сесія з GitHub issue",
|
||||
"session.githubIssuePicker.description.select": "Виберіть issue, щоб пов’язати її з цією сесією.",
|
||||
"session.githubIssuePicker.description.createSession": "Запускає нову сесію із прихованим контекстом issue: заголовком, текстом, мітками й коментарями.",
|
||||
"session.githubIssuePicker.searchPlaceholder": "Шукайте за назвою або №123, чи вставте URL issue",
|
||||
"session.githubIssuePicker.searchPlaceholder": "Пошук за допомогою синтаксису пошуку коду GitHub",
|
||||
"session.githubIssuePicker.empty.noActiveProject": "Не вибрано жодного активного проєкту.",
|
||||
"session.githubIssuePicker.empty.runtimeUnavailable": "GitHub API недоступний.",
|
||||
"session.githubIssuePicker.empty.notConnected": "GitHub не підключено. Підключіть обліковий запис GitHub у налаштуваннях.",
|
||||
@@ -1430,7 +1430,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
"session.githubPrPicker.toast.loadDetailsFailed": "Не вдалося завантажити деталі PR",
|
||||
"session.githubPrPicker.title": "Пов’язати GitHub PR",
|
||||
"session.githubPrPicker.description": "Виберіть PR, щоб додати контекст рев’ю до цього повідомлення.",
|
||||
"session.githubPrPicker.searchPlaceholder": "Шукайте за назвою або #123, чи вставте URL PR",
|
||||
"session.githubPrPicker.searchPlaceholder": "Пошук за допомогою синтаксису пошуку коду GitHub",
|
||||
"session.githubPrPicker.includeDiffAria": "Додати diff PR у вкладений контекст",
|
||||
"session.githubPrPicker.includeDiff": "Додати diff PR",
|
||||
"session.githubPrPicker.empty.noActiveProject": "Не вибрано жодного активного проєкту.",
|
||||
@@ -1497,8 +1497,8 @@ export const dict: Record<I18nKey, string> = {
|
||||
"session.githubIntegration.connect.title": "Підключитися до GitHub",
|
||||
"session.githubIntegration.connect.description": "Пов’яжіть issue або PR, щоб автоматично заповнити деталі worktree",
|
||||
"session.githubIntegration.connect.action": "Підключити GitHub",
|
||||
"session.githubIntegration.search.issuesPlaceholder": "Знайдіть issue або введіть #123...",
|
||||
"session.githubIntegration.search.prsPlaceholder": "Знайдіть PR або введіть #456...",
|
||||
"session.githubIntegration.search.issuesPlaceholder": "Пошук за допомогою синтаксису пошуку коду GitHub",
|
||||
"session.githubIntegration.search.prsPlaceholder": "Пошук за допомогою синтаксису пошуку коду GitHub",
|
||||
"session.githubIntegration.empty.noIssuesFound": "Issue не знайдено",
|
||||
"session.githubIntegration.empty.noPullRequestsFound": "PR не знайдено",
|
||||
"session.githubIntegration.actions.loadMore": "Завантажити ще",
|
||||
|
||||
@@ -1403,7 +1403,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
'session.githubIssuePicker.title.createSession': '从 GitHub Issue 新建会话',
|
||||
'session.githubIssuePicker.description.select': '选择一个 Issue 关联到当前会话。',
|
||||
'session.githubIssuePicker.description.createSession': '使用隐藏的 Issue 上下文(标题/正文/标签/评论)初始化新会话。',
|
||||
'session.githubIssuePicker.searchPlaceholder': '按标题或 #123 搜索,或粘贴 Issue URL',
|
||||
'session.githubIssuePicker.searchPlaceholder': '使用 GitHub 代码搜索语法进行搜索',
|
||||
'session.githubIssuePicker.empty.noActiveProject': '未选择活动项目。',
|
||||
'session.githubIssuePicker.empty.runtimeUnavailable': 'GitHub 运行时 API 不可用。',
|
||||
'session.githubIssuePicker.empty.notConnected': 'GitHub 未连接。请在设置中连接 GitHub 账号。',
|
||||
@@ -1430,7 +1430,7 @@ export const dict: Record<I18nKey, string> = {
|
||||
'session.githubPrPicker.toast.loadDetailsFailed': '加载 Pull Request 详情失败',
|
||||
'session.githubPrPicker.title': '关联 GitHub Pull Request',
|
||||
'session.githubPrPicker.description': '选择一个 Pull Request,将审查上下文附加到此消息。',
|
||||
'session.githubPrPicker.searchPlaceholder': '按标题或 #123 搜索,或粘贴 Pull Request URL',
|
||||
'session.githubPrPicker.searchPlaceholder': '使用 GitHub 代码搜索语法进行搜索',
|
||||
'session.githubPrPicker.includeDiffAria': '在附加上下文中包含 PR 差异',
|
||||
'session.githubPrPicker.includeDiff': '包含 PR 差异',
|
||||
'session.githubPrPicker.empty.noActiveProject': '未选择活动项目。',
|
||||
@@ -1497,8 +1497,8 @@ export const dict: Record<I18nKey, string> = {
|
||||
'session.githubIntegration.connect.title': '连接到 GitHub',
|
||||
'session.githubIntegration.connect.description': '关联 Issue 或 Pull Request 以自动填充工作树详情',
|
||||
'session.githubIntegration.connect.action': '连接 GitHub',
|
||||
'session.githubIntegration.search.issuesPlaceholder': '搜索 Issue 或输入 #123...',
|
||||
'session.githubIntegration.search.prsPlaceholder': '搜索 PR 或输入 #456...',
|
||||
'session.githubIntegration.search.issuesPlaceholder': '使用 GitHub 代码搜索语法进行搜索',
|
||||
'session.githubIntegration.search.prsPlaceholder': '使用 GitHub 代码搜索语法进行搜索',
|
||||
'session.githubIntegration.empty.noIssuesFound': '未找到 Issue',
|
||||
'session.githubIntegration.empty.noPullRequestsFound': '未找到 Pull Request',
|
||||
'session.githubIntegration.actions.loadMore': '加载更多',
|
||||
|
||||
Reference in New Issue
Block a user