From 3469165c9245124bcd577635e65371da215909c1 Mon Sep 17 00:00:00 2001 From: cynarAI <155274210+cynarAI@users.noreply.github.com> Date: Sat, 10 Oct 2026 13:18:44 +0200 Subject: [PATCH] Connect GitHub from a token alone (#195) * Connect GitHub from a token alone, without a vendor account Integrations only reached GitHub through Composio or Pipedream, which a self-hosted instance does not have. A built-in GitHub row now opens GitHub's prefilled token form, and the pasted token connects GitHub's own MCP server through the existing installed-connector path. Web and mobile. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ * Sync web catalogs for the GitHub connect strings Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01Tgvrj34NMnaqvtgvruYQZZ --------- Co-authored-by: Claude --- apps/api/src/router.ts | 5 + apps/mobile/app/integrations.tsx | 90 +++++++++++- apps/mobile/lib/locales/de.ts | 4 + apps/mobile/lib/locales/ru.ts | 4 + apps/mobile/lib/locales/zh.ts | 4 + apps/web/e2e/github-connect.spec.ts | 30 ++++ apps/web/e2e/golden.spec.ts | 3 +- .../components/integrations/GithubConnect.tsx | 130 ++++++++++++++++++ apps/web/src/locales/de/messages.po | 16 +++ apps/web/src/locales/en/messages.po | 16 +++ apps/web/src/locales/es/messages.po | 16 +++ apps/web/src/locales/hi/messages.po | 16 +++ apps/web/src/locales/ko/messages.po | 16 +++ apps/web/src/locales/pt-BR/messages.po | 16 +++ apps/web/src/locales/ru/messages.po | 16 +++ apps/web/src/locales/tr/messages.po | 16 +++ apps/web/src/locales/zh-CN/messages.po | 16 +++ apps/web/src/pages/PluginsOverlay.tsx | 68 +++++---- packages/adapters/src/installed-connectors.ts | 2 +- .../src/third-party-connector-emulator.ts | 6 +- packages/core/src/github-connector.ts | 10 ++ packages/core/src/index.ts | 1 + packages/testkit/src/connections.test.ts | 38 +++++ 23 files changed, 504 insertions(+), 35 deletions(-) create mode 100644 apps/web/e2e/github-connect.spec.ts create mode 100644 apps/web/src/components/integrations/GithubConnect.tsx create mode 100644 packages/core/src/github-connector.ts diff --git a/apps/api/src/router.ts b/apps/api/src/router.ts index 97b7f3c..5f75292 100644 --- a/apps/api/src/router.ts +++ b/apps/api/src/router.ts @@ -114,6 +114,7 @@ import { AttachmentValidationError, containsSecret, expandSkillReferencesInPrompt, + GITHUB_MCP_SOURCE, hasMixedOneShotSchedule, isOneShotRoutineCrons, isProjectColor, @@ -3321,6 +3322,10 @@ export function createRouter(deps: RouterDeps) { source = "https://treg.to/mcp/"; config = { ...config, preset: "treg", auth: { type: "bearer" } }; } + if (config.preset === "github") { + source = GITHUB_MCP_SOURCE; + config = { preset: "github", auth: { type: "bearer" } }; + } const verified = await verifyMcpInstall({ source, config, diff --git a/apps/mobile/app/integrations.tsx b/apps/mobile/app/integrations.tsx index d105bb8..304f9a8 100644 --- a/apps/mobile/app/integrations.tsx +++ b/apps/mobile/app/integrations.tsx @@ -5,7 +5,10 @@ import { CONNECTION_CATALOG_PAGE_SIZE, EMPTY_PLUGIN_CATALOG_MESSAGE, filterConnectionCatalogItems, + GITHUB_MCP_SOURCE, + GITHUB_TOKEN_URL, humanizeToolName, + isGithubInstall, } from "@rakazo/core"; import { useEffect, useMemo, useRef, useState } from "react"; import { @@ -84,6 +87,11 @@ export default function Integrations() { const [query, setQuery] = useState(""); const [visibleCount, setVisibleCount] = useState(CONNECTION_CATALOG_PAGE_SIZE); const [sources, setSources] = useState([]); + const github = sources.find(isGithubInstall); + const customSources = sources.filter((source) => !isGithubInstall(source)); + const [githubOpen, setGithubOpen] = useState(false); + const [githubToken, setGithubToken] = useState(""); + const [githubError, setGithubError] = useState(null); const [sourceKind, setSourceKind] = useState(null); const [advancedOpen, setAdvancedOpen] = useState(false); const [name, setName] = useState(""); @@ -388,6 +396,27 @@ export default function Integrations() { } } + async function connectGithub() { + setPending("github"); + setGithubError(null); + try { + await rpc("capabilities/install", { + kind: "mcp", + name: "GitHub", + source: GITHUB_MCP_SOURCE, + credential: githubToken.trim(), + config: { preset: "github" }, + }); + setGithubToken(""); + setGithubOpen(false); + await refresh(); + } catch (reason) { + setGithubError(reason instanceof Error ? reason.message : t("Could not connect GitHub")); + } finally { + setPending(null); + } + } + async function removeSource(source: CapabilityInstall) { setPending(source.id); setSourceError(null); @@ -592,6 +621,63 @@ export default function Integrations() { renderDetail(detailItem) ) : ( <> + + + + GitHub + {github ? ( + void removeSource(github)} + > + {t("Disconnect")} + + ) : githubOpen ? null : ( + setGithubOpen(true)} + style={styles.smallButton} + > + {t("Connect")} + + )} + + {!github && githubOpen ? ( + <> + void Linking.openURL(GITHUB_TOKEN_URL)} + style={styles.cardButton} + > + {t("Create token on GitHub")} + + + void connectGithub()} + style={styles.cardButton} + > + + {pending === "github" ? t("Connecting…") : t("Connect")} + + + + ) : null} + {githubError ? {githubError} : null} + + {!catalogReady ? : null} {catalogReady && catalog.length === 0 ? ( @@ -782,10 +868,10 @@ export default function Integrations() { ) : null} {t("Tool sources")} - {sources.length === 0 ? ( + {customSources.length === 0 ? ( {t("No custom sources installed.")} ) : null} - {sources.map((source) => ( + {customSources.map((source) => ( {source.name} diff --git a/apps/mobile/lib/locales/de.ts b/apps/mobile/lib/locales/de.ts index 0c61f3c..d105756 100644 --- a/apps/mobile/lib/locales/de.ts +++ b/apps/mobile/lib/locales/de.ts @@ -1,4 +1,8 @@ export const DE_MESSAGES: Record = { + "Connecting…": "Verbinde…", + "GitHub token": "GitHub-Token", + "Create token on GitHub": "Token bei GitHub erstellen", + "Could not connect GitHub": "GitHub konnte nicht verbunden werden", "1 step": "1 Schritt", "1 tool": "1 Tool", "@{name}": "@{name}", diff --git a/apps/mobile/lib/locales/ru.ts b/apps/mobile/lib/locales/ru.ts index f1368ef..9394f53 100644 --- a/apps/mobile/lib/locales/ru.ts +++ b/apps/mobile/lib/locales/ru.ts @@ -1,4 +1,8 @@ export const RU_MESSAGES: Record = { + "Connecting…": "Подключение…", + "GitHub token": "Токен GitHub", + "Create token on GitHub": "Создать токен на GitHub", + "Could not connect GitHub": "Не удалось подключить GitHub", "Update your server to use AI data sharing in this mobile version.": "Обновите сервер, чтобы использовать обмен данными с ИИ в этой версии мобильного приложения.", "Ask the server owner to configure this provider.": diff --git a/apps/mobile/lib/locales/zh.ts b/apps/mobile/lib/locales/zh.ts index 3469bd8..a2af302 100644 --- a/apps/mobile/lib/locales/zh.ts +++ b/apps/mobile/lib/locales/zh.ts @@ -1,4 +1,8 @@ export const ZH_MESSAGES: Record = { + "Connecting…": "正在连接…", + "GitHub token": "GitHub 令牌", + "Create token on GitHub": "在 GitHub 上创建令牌", + "Could not connect GitHub": "无法连接 GitHub", "Update your server to use AI data sharing in this mobile version.": "请更新服务器,以便在此移动版本中使用 AI 数据共享功能。", "Release computer": "释放电脑", diff --git a/apps/web/e2e/github-connect.spec.ts b/apps/web/e2e/github-connect.spec.ts new file mode 100644 index 0000000..2c6ac93 --- /dev/null +++ b/apps/web/e2e/github-connect.spec.ts @@ -0,0 +1,30 @@ +import { expect, test } from "@playwright/test"; +import { captureScreenshot, completeOnboarding, openUserSettings, signup } from "./helpers"; + +test("GitHub connects from a token alone and disconnects again", async ({ page }, testInfo) => { + const stamp = Date.now(); + await signup(page, `github-connect-${stamp}@rakazo.test`, "password12", "GitHub Connect"); + await completeOnboarding(page); + + await openUserSettings(page, "integrations"); + const github = page.getByTestId("github-connect"); + await expect(github).toBeVisible(); + await github.getByRole("button", { name: "Connect", exact: true }).click(); + await expect(github.getByRole("link", { name: "Create token on GitHub" })).toHaveAttribute( + "href", + /^https:\/\/github\.com\/settings\/tokens\/new\?description=evOo&scopes=repo/, + ); + const token = github.getByLabel("GitHub token"); + await token.fill("fake-github-token-value"); + await captureScreenshot(page, testInfo, "github-connect"); + await token.press("Enter"); + await expect(github.getByText("Connected", { exact: true })).toBeVisible({ timeout: 30_000 }); + await expect(token).toBeHidden(); + await captureScreenshot(page, testInfo, "github-connected"); + + await page.reload({ waitUntil: "domcontentloaded" }); + await openUserSettings(page, "integrations"); + await expect(github.getByText("Connected", { exact: true })).toBeVisible({ timeout: 30_000 }); + await github.getByRole("button", { name: "Disconnect" }).click(); + await expect(github.getByRole("button", { name: "Connect", exact: true })).toBeVisible(); +}); diff --git a/apps/web/e2e/golden.spec.ts b/apps/web/e2e/golden.spec.ts index 48ac601..8487097 100644 --- a/apps/web/e2e/golden.spec.ts +++ b/apps/web/e2e/golden.spec.ts @@ -151,7 +151,8 @@ test("takeover, routine, plugins, and export are reachable", async ({ page }, te await expect(featured).toContainText( /Gmail[\s\S]*Google Calendar[\s\S]*Google Drive[\s\S]*Slack[\s\S]*Notion/, ); - await expect(page.getByText("GitHub", { exact: true })).toBeVisible(); + // The catalog tile and the built-in token connection. + await expect(page.getByText("GitHub", { exact: true })).toHaveCount(2); await expect(page.getByRole("button", { name: "Add Executor", exact: true })).toBeHidden(); await expect(page.getByRole("button", { name: "Add Treg", exact: true })).toBeHidden(); await expect(page.getByRole("button", { name: "Add MCP server", exact: true })).toBeHidden(); diff --git a/apps/web/src/components/integrations/GithubConnect.tsx b/apps/web/src/components/integrations/GithubConnect.tsx new file mode 100644 index 0000000..39b4972 --- /dev/null +++ b/apps/web/src/components/integrations/GithubConnect.tsx @@ -0,0 +1,130 @@ +import { Trans, useLingui } from "@lingui/react/macro"; +import type { CapabilityInstall } from "@rakazo/contracts"; +import { GITHUB_MCP_SOURCE, GITHUB_TOKEN_URL, isGithubInstall } from "@rakazo/core"; +import { Button, buttonVariants, cn, Input } from "@rakazo/ui-web"; +import { useState } from "react"; +import { rpc } from "../../lib/rpc"; + +/** GitHub's mark, monochrome like the rest of the app. */ +function GithubMark({ className }: { className?: string }) { + return ( + + ); +} + +/** + * GitHub without a vendor account or an app registration: a token from GitHub's prefilled form + * connects GitHub's own MCP server for every bot. + */ +export function GithubConnect({ + sources, + onChanged, +}: { + sources: CapabilityInstall[]; + onChanged: () => Promise; +}) { + const { t } = useLingui(); + const installed = sources.find(isGithubInstall); + const [open, setOpen] = useState(false); + const [token, setToken] = useState(""); + const [pending, setPending] = useState(false); + const [error, setError] = useState(null); + + async function run(task: () => Promise) { + setPending(true); + setError(null); + try { + await task(); + await onChanged(); + } catch (err) { + setError(err instanceof Error ? err.message : t`Could not connect GitHub`); + } finally { + setPending(false); + } + } + + return ( +
+
+
+ +
+
+ GitHub +
+ {installed ? ( + <> + + Connected + + + + ) : open ? null : ( + + )} +
+ {!installed && open ? ( +
{ + event.preventDefault(); + void run(async () => { + await rpc.capabilities.install({ + kind: "mcp", + name: "GitHub", + source: GITHUB_MCP_SOURCE, + credential: token.trim(), + config: { preset: "github" }, + }); + setToken(""); + setOpen(false); + }); + }} + > + + Create token on GitHub + +
+ setToken(event.target.value)} + aria-label={t`GitHub token`} + placeholder="ghp_…" + className="h-10 flex-1 rounded-full px-4" + /> + +
+
+ ) : null} + {error ?

{error}

: null} +
+ ); +} diff --git a/apps/web/src/locales/de/messages.po b/apps/web/src/locales/de/messages.po index 3315a97..0f2dd39 100644 --- a/apps/web/src/locales/de/messages.po +++ b/apps/web/src/locales/de/messages.po @@ -1462,6 +1462,7 @@ msgstr "Löschen bestätigen" msgid "Confirm password" msgstr "Passwort bestätigen" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/memory-providers/BuiltinSettingsForm.tsx #: src/pages/memory-providers/SerenitySettingsForm.tsx @@ -1506,6 +1507,7 @@ msgstr "Verbinde Tools, wenn du bereit bist" msgid "Connect Treg" msgstr "Treg verbinden" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/McpOAuthCallback.tsx #: src/pages/ModelSettingsOverlay.tsx @@ -1537,6 +1539,7 @@ msgstr "Verbunden. Die Tools sind ab deiner nächsten Nachricht verfügbar." msgid "Connecting you with {target}." msgstr "Ich verbinde dich mit {target}." +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/McpServersOverlay.tsx #: src/pages/memory-providers/BuiltinSettingsForm.tsx @@ -1642,6 +1645,10 @@ msgstr "Verbindung fehlgeschlagen" msgid "Could not connect {0}" msgstr "Verbindung mit {0} fehlgeschlagen" +#: src/components/integrations/GithubConnect.tsx +msgid "Could not connect GitHub" +msgstr "GitHub konnte nicht verbunden werden" + #: src/pages/ModelSettingsOverlay.tsx msgid "Could not connect this provider" msgstr "Anbieter konnte nicht verbunden werden" @@ -2010,6 +2017,10 @@ msgstr "Projekt erstellen" msgid "Create space" msgstr "Space erstellen" +#: src/components/integrations/GithubConnect.tsx +msgid "Create token on GitHub" +msgstr "Token bei GitHub erstellen" + #: src/pages/Auth.tsx msgid "Create your evOo" msgstr "Dein evOo erstellen" @@ -2217,6 +2228,7 @@ msgstr "Diktat fehlgeschlagen." msgid "Direct MCP" msgstr "Direktes MCP" +#: src/components/integrations/GithubConnect.tsx #: src/pages/McpServersOverlay.tsx #: src/pages/MemorySettingsOverlay.tsx msgid "Disconnect" @@ -2694,6 +2706,10 @@ msgstr "Geist" msgid "Git event" msgstr "Git-Ereignis" +#: src/components/integrations/GithubConnect.tsx +msgid "GitHub token" +msgstr "GitHub-Token" + #: src/components/OoAtelier.tsx msgid "Glass" msgstr "Glas" diff --git a/apps/web/src/locales/en/messages.po b/apps/web/src/locales/en/messages.po index 891fcbe..32e8b6e 100644 --- a/apps/web/src/locales/en/messages.po +++ b/apps/web/src/locales/en/messages.po @@ -1462,6 +1462,7 @@ msgstr "Confirm delete" msgid "Confirm password" msgstr "Confirm password" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/memory-providers/BuiltinSettingsForm.tsx #: src/pages/memory-providers/SerenitySettingsForm.tsx @@ -1506,6 +1507,7 @@ msgstr "Connect tools when you''re ready" msgid "Connect Treg" msgstr "Connect Treg" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/McpOAuthCallback.tsx #: src/pages/ModelSettingsOverlay.tsx @@ -1537,6 +1539,7 @@ msgstr "Connected. Its tools are available from your next message." msgid "Connecting you with {target}." msgstr "Connecting you with {target}." +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/McpServersOverlay.tsx #: src/pages/memory-providers/BuiltinSettingsForm.tsx @@ -1642,6 +1645,10 @@ msgstr "Could not connect" msgid "Could not connect {0}" msgstr "Could not connect {0}" +#: src/components/integrations/GithubConnect.tsx +msgid "Could not connect GitHub" +msgstr "Could not connect GitHub" + #: src/pages/ModelSettingsOverlay.tsx msgid "Could not connect this provider" msgstr "Could not connect this provider" @@ -2010,6 +2017,10 @@ msgstr "Create project" msgid "Create space" msgstr "Create space" +#: src/components/integrations/GithubConnect.tsx +msgid "Create token on GitHub" +msgstr "Create token on GitHub" + #: src/pages/Auth.tsx msgid "Create your evOo" msgstr "Create your evOo" @@ -2217,6 +2228,7 @@ msgstr "Dictation failed." msgid "Direct MCP" msgstr "Direct MCP" +#: src/components/integrations/GithubConnect.tsx #: src/pages/McpServersOverlay.tsx #: src/pages/MemorySettingsOverlay.tsx msgid "Disconnect" @@ -2694,6 +2706,10 @@ msgstr "Ghost" msgid "Git event" msgstr "Git event" +#: src/components/integrations/GithubConnect.tsx +msgid "GitHub token" +msgstr "GitHub token" + #: src/components/OoAtelier.tsx msgid "Glass" msgstr "Glass" diff --git a/apps/web/src/locales/es/messages.po b/apps/web/src/locales/es/messages.po index 74a0921..117650a 100644 --- a/apps/web/src/locales/es/messages.po +++ b/apps/web/src/locales/es/messages.po @@ -1462,6 +1462,7 @@ msgstr "Confirmar eliminación" msgid "Confirm password" msgstr "Confirmar contraseña" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/memory-providers/BuiltinSettingsForm.tsx #: src/pages/memory-providers/SerenitySettingsForm.tsx @@ -1506,6 +1507,7 @@ msgstr "" msgid "Connect Treg" msgstr "Conectar Treg" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/McpOAuthCallback.tsx #: src/pages/ModelSettingsOverlay.tsx @@ -1537,6 +1539,7 @@ msgstr "Conectado: sus herramientas estarán disponibles desde tu próximo mensa msgid "Connecting you with {target}." msgstr "" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/McpServersOverlay.tsx #: src/pages/memory-providers/BuiltinSettingsForm.tsx @@ -1642,6 +1645,10 @@ msgstr "No se pudo conectar" msgid "Could not connect {0}" msgstr "No se pudo conectar {0}" +#: src/components/integrations/GithubConnect.tsx +msgid "Could not connect GitHub" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Could not connect this provider" msgstr "No se pudo conectar este proveedor" @@ -2010,6 +2017,10 @@ msgstr "" msgid "Create space" msgstr "Crear space" +#: src/components/integrations/GithubConnect.tsx +msgid "Create token on GitHub" +msgstr "" + #: src/pages/Auth.tsx msgid "Create your evOo" msgstr "" @@ -2217,6 +2228,7 @@ msgstr "" msgid "Direct MCP" msgstr "" +#: src/components/integrations/GithubConnect.tsx #: src/pages/McpServersOverlay.tsx #: src/pages/MemorySettingsOverlay.tsx msgid "Disconnect" @@ -2694,6 +2706,10 @@ msgstr "" msgid "Git event" msgstr "Evento de Git" +#: src/components/integrations/GithubConnect.tsx +msgid "GitHub token" +msgstr "" + #: src/components/OoAtelier.tsx msgid "Glass" msgstr "" diff --git a/apps/web/src/locales/hi/messages.po b/apps/web/src/locales/hi/messages.po index ab8f7b7..438c784 100644 --- a/apps/web/src/locales/hi/messages.po +++ b/apps/web/src/locales/hi/messages.po @@ -1462,6 +1462,7 @@ msgstr "डिलीट की पुष्टि करें" msgid "Confirm password" msgstr "पासवर्ड की पुष्टि करें" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/memory-providers/BuiltinSettingsForm.tsx #: src/pages/memory-providers/SerenitySettingsForm.tsx @@ -1506,6 +1507,7 @@ msgstr "" msgid "Connect Treg" msgstr "Treg कनेक्ट करें" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/McpOAuthCallback.tsx #: src/pages/ModelSettingsOverlay.tsx @@ -1537,6 +1539,7 @@ msgstr "कनेक्टेड। इसके टूल आपके अग msgid "Connecting you with {target}." msgstr "" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/McpServersOverlay.tsx #: src/pages/memory-providers/BuiltinSettingsForm.tsx @@ -1642,6 +1645,10 @@ msgstr "कनेक्ट नहीं हो सका" msgid "Could not connect {0}" msgstr "{0} कनेक्ट नहीं हो सका" +#: src/components/integrations/GithubConnect.tsx +msgid "Could not connect GitHub" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Could not connect this provider" msgstr "यह प्रोवाइडर कनेक्ट नहीं हो सका" @@ -2010,6 +2017,10 @@ msgstr "" msgid "Create space" msgstr "" +#: src/components/integrations/GithubConnect.tsx +msgid "Create token on GitHub" +msgstr "" + #: src/pages/Auth.tsx msgid "Create your evOo" msgstr "" @@ -2217,6 +2228,7 @@ msgstr "" msgid "Direct MCP" msgstr "" +#: src/components/integrations/GithubConnect.tsx #: src/pages/McpServersOverlay.tsx #: src/pages/MemorySettingsOverlay.tsx msgid "Disconnect" @@ -2694,6 +2706,10 @@ msgstr "" msgid "Git event" msgstr "" +#: src/components/integrations/GithubConnect.tsx +msgid "GitHub token" +msgstr "" + #: src/components/OoAtelier.tsx msgid "Glass" msgstr "" diff --git a/apps/web/src/locales/ko/messages.po b/apps/web/src/locales/ko/messages.po index 299bb31..3e50368 100644 --- a/apps/web/src/locales/ko/messages.po +++ b/apps/web/src/locales/ko/messages.po @@ -1462,6 +1462,7 @@ msgstr "삭제 확인" msgid "Confirm password" msgstr "비밀번호 확인" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/memory-providers/BuiltinSettingsForm.tsx #: src/pages/memory-providers/SerenitySettingsForm.tsx @@ -1506,6 +1507,7 @@ msgstr "" msgid "Connect Treg" msgstr "Treg 연결" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/McpOAuthCallback.tsx #: src/pages/ModelSettingsOverlay.tsx @@ -1537,6 +1539,7 @@ msgstr "연결되었습니다. 다음 메시지부터 이 도구를 사용할 msgid "Connecting you with {target}." msgstr "" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/McpServersOverlay.tsx #: src/pages/memory-providers/BuiltinSettingsForm.tsx @@ -1642,6 +1645,10 @@ msgstr "연결하지 못했습니다." msgid "Could not connect {0}" msgstr "{0}에 연결하지 못했습니다." +#: src/components/integrations/GithubConnect.tsx +msgid "Could not connect GitHub" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Could not connect this provider" msgstr "AI 서비스에 연결하지 못했습니다." @@ -2010,6 +2017,10 @@ msgstr "" msgid "Create space" msgstr "스페이스 만들기" +#: src/components/integrations/GithubConnect.tsx +msgid "Create token on GitHub" +msgstr "" + #: src/pages/Auth.tsx msgid "Create your evOo" msgstr "" @@ -2217,6 +2228,7 @@ msgstr "" msgid "Direct MCP" msgstr "" +#: src/components/integrations/GithubConnect.tsx #: src/pages/McpServersOverlay.tsx #: src/pages/MemorySettingsOverlay.tsx msgid "Disconnect" @@ -2694,6 +2706,10 @@ msgstr "" msgid "Git event" msgstr "Git 이벤트" +#: src/components/integrations/GithubConnect.tsx +msgid "GitHub token" +msgstr "" + #: src/components/OoAtelier.tsx msgid "Glass" msgstr "" diff --git a/apps/web/src/locales/pt-BR/messages.po b/apps/web/src/locales/pt-BR/messages.po index 2aa0a6d..60ed39e 100644 --- a/apps/web/src/locales/pt-BR/messages.po +++ b/apps/web/src/locales/pt-BR/messages.po @@ -1462,6 +1462,7 @@ msgstr "Confirmar exclusão" msgid "Confirm password" msgstr "Confirmar senha" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/memory-providers/BuiltinSettingsForm.tsx #: src/pages/memory-providers/SerenitySettingsForm.tsx @@ -1506,6 +1507,7 @@ msgstr "" msgid "Connect Treg" msgstr "Conectar Treg" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/McpOAuthCallback.tsx #: src/pages/ModelSettingsOverlay.tsx @@ -1537,6 +1539,7 @@ msgstr "Conectado. Suas ferramentas estão disponíveis na sua próxima mensagem msgid "Connecting you with {target}." msgstr "" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/McpServersOverlay.tsx #: src/pages/memory-providers/BuiltinSettingsForm.tsx @@ -1642,6 +1645,10 @@ msgstr "Não foi possível conectar" msgid "Could not connect {0}" msgstr "Não foi possível conectar o {0}" +#: src/components/integrations/GithubConnect.tsx +msgid "Could not connect GitHub" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Could not connect this provider" msgstr "Não foi possível conectar este provedor" @@ -2010,6 +2017,10 @@ msgstr "" msgid "Create space" msgstr "" +#: src/components/integrations/GithubConnect.tsx +msgid "Create token on GitHub" +msgstr "" + #: src/pages/Auth.tsx msgid "Create your evOo" msgstr "" @@ -2217,6 +2228,7 @@ msgstr "" msgid "Direct MCP" msgstr "" +#: src/components/integrations/GithubConnect.tsx #: src/pages/McpServersOverlay.tsx #: src/pages/MemorySettingsOverlay.tsx msgid "Disconnect" @@ -2694,6 +2706,10 @@ msgstr "" msgid "Git event" msgstr "" +#: src/components/integrations/GithubConnect.tsx +msgid "GitHub token" +msgstr "" + #: src/components/OoAtelier.tsx msgid "Glass" msgstr "" diff --git a/apps/web/src/locales/ru/messages.po b/apps/web/src/locales/ru/messages.po index 7eb2672..a12ef43 100644 --- a/apps/web/src/locales/ru/messages.po +++ b/apps/web/src/locales/ru/messages.po @@ -1462,6 +1462,7 @@ msgstr "Подтвердить удаление" msgid "Confirm password" msgstr "Подтвердите пароль" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/memory-providers/BuiltinSettingsForm.tsx #: src/pages/memory-providers/SerenitySettingsForm.tsx @@ -1506,6 +1507,7 @@ msgstr "" msgid "Connect Treg" msgstr "Подключить Treg" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/McpOAuthCallback.tsx #: src/pages/ModelSettingsOverlay.tsx @@ -1537,6 +1539,7 @@ msgstr "Подключено. Его инструменты доступны и msgid "Connecting you with {target}." msgstr "" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/McpServersOverlay.tsx #: src/pages/memory-providers/BuiltinSettingsForm.tsx @@ -1642,6 +1645,10 @@ msgstr "Не удалось подключиться" msgid "Could not connect {0}" msgstr "Не удалось подключить {0}" +#: src/components/integrations/GithubConnect.tsx +msgid "Could not connect GitHub" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Could not connect this provider" msgstr "Не удалось подключить этого провайдера" @@ -2010,6 +2017,10 @@ msgstr "" msgid "Create space" msgstr "Создайте пространство" +#: src/components/integrations/GithubConnect.tsx +msgid "Create token on GitHub" +msgstr "" + #: src/pages/Auth.tsx msgid "Create your evOo" msgstr "" @@ -2217,6 +2228,7 @@ msgstr "" msgid "Direct MCP" msgstr "Прямой MCP" +#: src/components/integrations/GithubConnect.tsx #: src/pages/McpServersOverlay.tsx #: src/pages/MemorySettingsOverlay.tsx msgid "Disconnect" @@ -2694,6 +2706,10 @@ msgstr "" msgid "Git event" msgstr "Git-событие" +#: src/components/integrations/GithubConnect.tsx +msgid "GitHub token" +msgstr "" + #: src/components/OoAtelier.tsx msgid "Glass" msgstr "" diff --git a/apps/web/src/locales/tr/messages.po b/apps/web/src/locales/tr/messages.po index 1bc865a..9abb50b 100644 --- a/apps/web/src/locales/tr/messages.po +++ b/apps/web/src/locales/tr/messages.po @@ -1462,6 +1462,7 @@ msgstr "Silmeyi onayla" msgid "Confirm password" msgstr "Parolayı doğrulayın" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/memory-providers/BuiltinSettingsForm.tsx #: src/pages/memory-providers/SerenitySettingsForm.tsx @@ -1506,6 +1507,7 @@ msgstr "" msgid "Connect Treg" msgstr "Treg'i bağla" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/McpOAuthCallback.tsx #: src/pages/ModelSettingsOverlay.tsx @@ -1537,6 +1539,7 @@ msgstr "Bağlandı. Araçları bir sonraki mesajından itibaren kullanılabilir. msgid "Connecting you with {target}." msgstr "" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/McpServersOverlay.tsx #: src/pages/memory-providers/BuiltinSettingsForm.tsx @@ -1642,6 +1645,10 @@ msgstr "Bağlanılamadı" msgid "Could not connect {0}" msgstr "{0} bağlanamadı" +#: src/components/integrations/GithubConnect.tsx +msgid "Could not connect GitHub" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Could not connect this provider" msgstr "Bu sağlayıcı bağlanamadı" @@ -2010,6 +2017,10 @@ msgstr "" msgid "Create space" msgstr "" +#: src/components/integrations/GithubConnect.tsx +msgid "Create token on GitHub" +msgstr "" + #: src/pages/Auth.tsx msgid "Create your evOo" msgstr "" @@ -2217,6 +2228,7 @@ msgstr "" msgid "Direct MCP" msgstr "" +#: src/components/integrations/GithubConnect.tsx #: src/pages/McpServersOverlay.tsx #: src/pages/MemorySettingsOverlay.tsx msgid "Disconnect" @@ -2694,6 +2706,10 @@ msgstr "" msgid "Git event" msgstr "" +#: src/components/integrations/GithubConnect.tsx +msgid "GitHub token" +msgstr "" + #: src/components/OoAtelier.tsx msgid "Glass" msgstr "" diff --git a/apps/web/src/locales/zh-CN/messages.po b/apps/web/src/locales/zh-CN/messages.po index 4a161ef..32c7f27 100644 --- a/apps/web/src/locales/zh-CN/messages.po +++ b/apps/web/src/locales/zh-CN/messages.po @@ -1462,6 +1462,7 @@ msgstr "确认删除" msgid "Confirm password" msgstr "确认密码" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/memory-providers/BuiltinSettingsForm.tsx #: src/pages/memory-providers/SerenitySettingsForm.tsx @@ -1506,6 +1507,7 @@ msgstr "" msgid "Connect Treg" msgstr "连接 Treg" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/McpOAuthCallback.tsx #: src/pages/ModelSettingsOverlay.tsx @@ -1537,6 +1539,7 @@ msgstr "已连接,下一条消息起即可使用其工具。" msgid "Connecting you with {target}." msgstr "" +#: src/components/integrations/GithubConnect.tsx #: src/components/integrations/IntegrationSetup.tsx #: src/pages/McpServersOverlay.tsx #: src/pages/memory-providers/BuiltinSettingsForm.tsx @@ -1642,6 +1645,10 @@ msgstr "无法连接" msgid "Could not connect {0}" msgstr "无法连接 {0}" +#: src/components/integrations/GithubConnect.tsx +msgid "Could not connect GitHub" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Could not connect this provider" msgstr "无法连接此提供方" @@ -2010,6 +2017,10 @@ msgstr "" msgid "Create space" msgstr "创建工作区" +#: src/components/integrations/GithubConnect.tsx +msgid "Create token on GitHub" +msgstr "" + #: src/pages/Auth.tsx msgid "Create your evOo" msgstr "" @@ -2217,6 +2228,7 @@ msgstr "" msgid "Direct MCP" msgstr "" +#: src/components/integrations/GithubConnect.tsx #: src/pages/McpServersOverlay.tsx #: src/pages/MemorySettingsOverlay.tsx msgid "Disconnect" @@ -2694,6 +2706,10 @@ msgstr "" msgid "Git event" msgstr "Git 事件" +#: src/components/integrations/GithubConnect.tsx +msgid "GitHub token" +msgstr "" + #: src/components/OoAtelier.tsx msgid "Glass" msgstr "" diff --git a/apps/web/src/pages/PluginsOverlay.tsx b/apps/web/src/pages/PluginsOverlay.tsx index 01daf66..199eda0 100644 --- a/apps/web/src/pages/PluginsOverlay.tsx +++ b/apps/web/src/pages/PluginsOverlay.tsx @@ -13,6 +13,7 @@ import { EMPTY_PLUGIN_CATALOG_MESSAGE, filterConnectionCatalogItems, humanizeToolName, + isGithubInstall, } from "@rakazo/core"; import { Button, @@ -31,6 +32,7 @@ import { } from "@rakazo/ui-web"; import { ChevronDown, ChevronLeft, ChevronUp, X } from "lucide-react"; import { useEffect, useMemo, useRef, useState } from "react"; +import { GithubConnect } from "../components/integrations/GithubConnect"; import { IntegrationSetup } from "../components/integrations/IntegrationSetup"; import { optionalCatalogFeedProbe } from "../lib/optional-catalog-feed"; import { rpc } from "../lib/rpc"; @@ -717,6 +719,7 @@ export function PluginsOverlay({ renderDetail(detailItem) ) : ( <> + {!loading ? : null} {loading ? (

Loading integrations… @@ -1096,41 +1099,46 @@ export function PluginsOverlay({

Tool sources
- {sources.length === 0 && !sourceKind ? ( + {sources.every(isGithubInstall) && !sourceKind ? (

No MCP or API tool sources installed yet.

) : null} - {sources.map((source) => ( -
-
- {source.kind === "mcp" ? "M" : source.kind === "graphql" ? "G" : "A"} -
-
-
- {source.name} -
-
- {source.kind.toUpperCase()} · {source.source} ·{" "} - {source.secretConfigured ? ( - credential saved - ) : ( - no auth - )} -
-
- -
- ))} +
+ {source.kind === "mcp" ? "M" : source.kind === "graphql" ? "G" : "A"} +
+
+
+ {source.name} +
+
+ {source.kind.toUpperCase()} · {source.source} ·{" "} + {source.secretConfigured ? ( + credential saved + ) : ( + no auth + )} +
+
+ + + ))} {onOpenMcp ? (