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:
Tom Rochette
2026-06-08 15:37:42 +03:00
committed by GitHub
co-authored by Bohdan Triapitsyn
parent 5589ca991a
commit 7b1b3167a4
16 changed files with 457 additions and 149 deletions
+4 -4
View File
@@ -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",