mirror of
https://github.com/stablyai/orca.git
synced 2026-10-01 00:02:10 +00:00
The GitLab, GitHub, Jira and Linear integration modules, their two IPC registrars, and the shared GitHub project types each carried a file-level `eslint-disable max-lines` and ran 351-614 counted lines against a 300-line budget. AGENTS.md calls for splitting rather than suppressing, and config/max-lines-baseline.txt is a shrink-only ratchet, so this removes all eight suppressions and prunes their entries (341 -> 333). Pure move, no behavior change. Each client is cut along the seam it already had: per-operation modules for the issue APIs (create / update / comment / field options), and for Jira the request queue, site credential store, authenticated request, and site identity. The two IPC registrars keep their own handlers and delegate the rest to per-domain sub-registrars, so they remain real entry points rather than re-export shims. The IPC surface is proved intact rather than assumed: comparing (method, channel) multisets between HEAD and the split gives 52 registrations across 52 distinct channels on both sides. Provider-neutrality is preserved -- GitLab and GitHub keep separate, parallel module layouts rather than being merged behind a shared abstraction. Verified: oxlint clean, ratchet passes, typecheck clean, full unit suite green (the one remaining failure is a pre-existing load flake in an untouched file, green when re-run serially), no new runtime import cycles among 744 modules, and no lint suppression added anywhere.
55 lines
2.1 KiB
TypeScript
55 lines
2.1 KiB
TypeScript
import { ipcMain } from 'electron'
|
|
import type { Store } from '../persistence'
|
|
import {
|
|
diagnoseAuth,
|
|
getAuthenticatedViewer,
|
|
getProjectSlug,
|
|
getRateLimit,
|
|
listTodos
|
|
} from '../gitlab/client'
|
|
import { registerGitLabCiJobHandlers } from './gitlab-ci-job-handlers'
|
|
import { registerGitLabIssueHandlers } from './gitlab-issue-handlers'
|
|
import { registerGitLabMergeRequestMutationHandlers } from './gitlab-merge-request-mutation-handlers'
|
|
import { registerGitLabMergeRequestQueryHandlers } from './gitlab-merge-request-query-handlers'
|
|
import type { GitLabRepoSelectorArgs } from './gitlab-repo-access'
|
|
import {
|
|
assertRegisteredRepo,
|
|
hostedReviewOptionArgs,
|
|
localGitOptionArgs,
|
|
repoConnectionId
|
|
} from './gitlab-repo-access'
|
|
import { registerGitLabWorkItemHandlers } from './gitlab-work-item-handlers'
|
|
|
|
export function registerGitLabHandlers(store: Store): void {
|
|
ipcMain.handle('gitlab:viewer', async () => {
|
|
return getAuthenticatedViewer()
|
|
})
|
|
|
|
ipcMain.handle('gitlab:diagnoseAuth', async () => diagnoseAuth())
|
|
|
|
ipcMain.handle(
|
|
'gitlab:rateLimit',
|
|
async (_event, args?: { force?: boolean; host?: string | null }) =>
|
|
getRateLimit({ force: Boolean(args?.force), host: args?.host ?? null })
|
|
)
|
|
|
|
ipcMain.handle('gitlab:projectSlug', async (_event, args: GitLabRepoSelectorArgs) => {
|
|
const repo = assertRegisteredRepo(args, store)
|
|
return getProjectSlug(repo.path, repoConnectionId(repo), ...hostedReviewOptionArgs(store, repo))
|
|
})
|
|
|
|
registerGitLabMergeRequestQueryHandlers(store)
|
|
registerGitLabIssueHandlers(store)
|
|
registerGitLabWorkItemHandlers(store)
|
|
registerGitLabMergeRequestMutationHandlers(store)
|
|
registerGitLabCiJobHandlers(store)
|
|
|
|
// Why: My Todos surface — cross-project, user-scoped. The repoPath is
|
|
// only used for the registered-repo guard; `glab api todos` doesn't
|
|
// care about cwd because the endpoint is user-scoped.
|
|
ipcMain.handle('gitlab:todos', async (_event, args: GitLabRepoSelectorArgs) => {
|
|
const repo = assertRegisteredRepo(args, store)
|
|
return listTodos(repo.path, repoConnectionId(repo), ...localGitOptionArgs(store, repo))
|
|
})
|
|
}
|