FN-7474: add GitHub onboarding action choices

Add first-run onboarding paths for GitHub OAuth and GitHub CLI setup while preserving existing GitHub warning behavior.

- Add a GitHub onboarding action model for OAuth, authenticated gh CLI, unauthenticated gh CLI, missing gh CLI, and skip states.
- Render in-flow GitHub OAuth connection, gh auth login guidance, and gh CLI install guidance with mobile styling and coverage.
- Update onboarding docs, locale resources, and the release changeset as a minor user-facing feature.
- Preserve the one-day GitHub warning-delay copy and dashboard OAuth browser behavior docs from main.

Files changed:
 .changeset/fn-7474-github-onboarding-actions.md    |   7 +
 docs/dashboard-guide.md                            |   2 +-
 docs/getting-started.md                            |   2 +-
 packages/cli/vitest.config.ts                      |  12 ++
 .../app/components/ModelOnboardingModal.css        |  68 ++++++++-
 .../app/components/ModelOnboardingModal.tsx        | 153 +++++++++++++++++++--
 .../__tests__/ModelOnboardingModal.test.tsx        | 101 +++++++++++++-
 packages/dashboard/vitest.config.ts                |  20 +++
 packages/i18n/locales/en/app.json                  |  11 +-
 packages/i18n/locales/es/app.json                  |  11 +-
 packages/i18n/locales/fr/app.json                  |  11 +-
 packages/i18n/locales/ko/app.json                  |  11 +-
 packages/i18n/locales/zh-CN/app.json               |  11 +-
 packages/i18n/locales/zh-TW/app.json               |  11 +-
 packages/i18n/src/resources.d.ts                   |  11 +-
 15 files changed, 413 insertions(+), 29 deletions(-)

Fusion-Task-Id: FN-7474

Fusion-Task-Lineage: c06d3db5-da4b-43f7-8b74-a41f6a041029

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
This commit is contained in:
gsxdsm
2026-07-03 16:38:31 -07:00
parent ced783ea79
commit 50cdab17b9
14 changed files with 389 additions and 29 deletions

View File

@@ -0,0 +1,7 @@
---
"@runfusion/fusion": minor
---
summary: Add GitHub OAuth and CLI setup actions to first-run onboarding.
category: feature
dev: GitHub onboarding now shows in-flow OAuth connect, gh auth login, and gh install guidance.

View File

@@ -793,7 +793,7 @@ Memory view provides a multi-file editor for project and daily memory files. Its
## Setup Wizard Project Registration
First-run setup checks the **GitHub (Optional)** step for the `git` executable on the Fusion server host before users continue into repository setup. If Git is installed, the step shows a low-noise prerequisite-ready note. If Git is missing, the step shows platform-aware install guidance for macOS, Windows, and Linux plus a Git downloads link, while still allowing users to skip optional GitHub authentication. The check reflects the machine or service container running Fusion, not the browser device.
First-run setup uses the **GitHub (Optional)** step for all GitHub prerequisites and auth choices. When dashboard GitHub OAuth is configured, the step offers an in-flow **Connect GitHub OAuth** action with Cancel/Retry feedback instead of sending users to Settings first. It also checks GitHub CLI (`gh`) on the Fusion server host: installed-but-unauthenticated hosts show `gh auth login` guidance, missing hosts show platform-aware GitHub CLI install guidance and a releases link, and authenticated `gh` still counts as GitHub-ready while OAuth remains optional. The same step checks the `git` executable before users continue into repository setup. If Git is installed, the step shows a low-noise prerequisite-ready note. If Git is missing, it shows platform-aware install guidance for macOS, Windows, and Linux plus a Git downloads link, while still allowing users to skip optional GitHub authentication. These checks reflect the machine or service container running Fusion, not the browser device; users can later manage OAuth from **Settings → Authentication**.
First-run setup and embedded project setup both expose a **Repository setup** section before path entry:

View File

@@ -93,7 +93,7 @@ fn dashboard
On first launch, Fusion opens an onboarding wizard with guided setup steps:
1. **AI Setup** — choose a provider and authenticate (you only need one to start). Anthropic/Claude and OpenAI Codex use a pasted authorization-code OAuth flow in onboarding and Settings (sign in, then paste the final redirect URL or code back into Fusion), and Fusion warns before login so you remember to copy the browser address bar URL before the redirect tab appears to fail. After the initial Claude OAuth login, Fusion normally refreshes the OAuth credential automatically with the stored refresh token when the access token expires, so repeated manual re-login is not usually required. **Anthropic — via Claude CLI** remains available as a separate optional path. Deprecated Google Gemini CLI / Antigravity entries are hidden; Google/Gemini API key, Google Generative AI, Vertex, and Cloud Code options remain available.
2. **GitHub (Optional)** — connect GitHub for issue import and PR workflows. This step also checks whether the Fusion host can run `git`; if Git is missing, onboarding shows platform install guidance before you reach clone, init, or repository registration flows. Install Git on the machine or service container running Fusion, not just on the browser/client device. See [Git downloads](https://git-scm.com/downloads) for macOS, Windows, and Linux options.
2. **GitHub (Optional)** — connect GitHub for issue import and PR workflows. When dashboard OAuth is configured, this step includes an in-flow **Connect GitHub OAuth** action. It also shows whether the Fusion host has GitHub CLI (`gh`) available: run `gh auth login` on the host when `gh` is installed but unauthenticated, or use the GitHub CLI releases/install guidance when `gh` is missing. The step also checks whether the Fusion host can run `git`; if Git is missing, onboarding shows platform install guidance before you reach clone, init, or repository registration flows. Install Git and GitHub CLI on the machine or service container running Fusion, not just on the browser/client device. See [Git downloads](https://git-scm.com/downloads) and [GitHub CLI releases](https://github.com/cli/cli/releases/latest) for macOS, Windows, and Linux options.
3. **Project Setup** — choose how Fusion should prepare a repository:
- **Use Existing Directory** registers a folder that is already a git repository or a workspace root with detected sub-repositories.
- **Initialize New Repository** registers an existing local folder and lets the server run `git init` during registration when the folder is not already a git repository.

View File

@@ -819,6 +819,62 @@
margin: 0;
}
.onboarding-github-setup-card {
display: flex;
flex-direction: column;
gap: var(--space-sm);
padding: var(--space-md);
border: 1px solid var(--border);
border-radius: var(--radius-md);
background: var(--surface);
color: var(--text-muted);
line-height: 1.5;
}
.onboarding-github-setup-card--warning {
border-color: color-mix(in srgb, var(--color-warning) 40%, var(--border));
border-left: var(--space-xs) solid var(--color-warning);
background: color-mix(in srgb, var(--color-warning) 10%, transparent);
}
.onboarding-github-setup-card--info {
border-color: color-mix(in srgb, var(--color-info) 35%, var(--border));
background: color-mix(in srgb, var(--color-info) 8%, transparent);
}
.onboarding-github-setup-card__heading {
display: flex;
align-items: center;
gap: var(--space-xs);
color: var(--text);
}
.onboarding-github-setup-card p {
margin: 0;
}
.onboarding-github-setup-card a {
align-self: flex-start;
}
.onboarding-github-setup-list {
display: flex;
flex-direction: column;
gap: var(--space-xxs);
margin: 0;
padding-left: var(--space-xl);
}
.onboarding-github-command {
align-self: flex-start;
padding: var(--space-xs) var(--space-sm);
border: 1px solid var(--border);
border-radius: var(--radius-sm);
background: var(--surface-raised);
color: var(--text);
font-family: var(--font-mono);
}
/* === GitHub Connection Status Feedback (FN-1934) === */
.onboarding-github-feedback {
margin-top: var(--space-sm);
@@ -1315,10 +1371,20 @@
min-height: 36px;
}
.onboarding-github-git-prerequisite a {
.onboarding-github-git-prerequisite a,
.onboarding-github-setup-card a,
.onboarding-github-command {
align-self: stretch;
}
.onboarding-github-setup-card {
padding: var(--space-sm);
}
.onboarding-github-setup-card__heading {
align-items: flex-start;
}
/* Compact provider card on mobile.
Earlier rule forced flex-direction: column so the icon, body, and
actions each took their own full-width row — combined with --space-lg

View File

@@ -590,12 +590,85 @@ export type ProviderConnectionStatus = "connected" | "not-connected" | "skipped"
/** GitHub-specific status variants for richer connection feedback */
type GitHubConnectionStatus = "connected" | "failed" | "pending" | "skipped" | "not-connected";
type GitHubOAuthActionState = "unavailable" | "not-connected" | "connected" | "pending" | "failed" | "skipped";
type GitHubCliActionState = "unknown" | "missing" | "unauthenticated" | "authenticated";
interface GhCliStatus {
available: boolean;
authenticated: boolean;
}
interface GitHubActionViewModel {
oauth: {
provider?: AuthProvider;
providerAvailable: boolean;
authenticated: boolean;
loginInProgress: boolean;
state: GitHubOAuthActionState;
};
ghCli: {
status?: GhCliStatus;
state: GitHubCliActionState;
authenticated: boolean;
};
ready: boolean;
readyVia: "oauth" | "gh-cli" | null;
}
const GIT_INSTALL_URL = "https://git-scm.com/downloads";
const GH_CLI_INSTALL_URL = "https://github.com/cli/cli/releases/latest";
function buildGitHubActionViewModel(params: {
providers: AuthProvider[];
ghCliStatus?: GhCliStatus;
loginOutcomes: Record<string, LoginOutcome>;
skipped: boolean;
}): GitHubActionViewModel {
const githubProvider = params.providers.find((provider) => provider.id === "github");
const oauthAuthenticated = githubProvider?.authenticated ?? false;
const oauthLoginInProgress = githubProvider?.loginInProgress ?? false;
const ghCliState: GitHubCliActionState = !params.ghCliStatus
? "unknown"
: params.ghCliStatus.authenticated
? "authenticated"
: params.ghCliStatus.available
? "unauthenticated"
: "missing";
const ghCliAuthenticated = ghCliState === "authenticated";
let oauthState: GitHubOAuthActionState = "unavailable";
if (githubProvider) {
const outcome = params.loginOutcomes.github;
if (oauthAuthenticated) {
oauthState = "connected";
} else if (outcome === "pending" || oauthLoginInProgress) {
oauthState = "pending";
} else if (outcome === "failed" || outcome === "timeout") {
oauthState = "failed";
} else if (params.skipped) {
oauthState = "skipped";
} else {
oauthState = "not-connected";
}
}
return {
oauth: {
provider: githubProvider,
providerAvailable: !!githubProvider,
authenticated: oauthAuthenticated,
loginInProgress: oauthLoginInProgress,
state: oauthState,
},
ghCli: {
status: params.ghCliStatus,
state: ghCliState,
authenticated: ghCliAuthenticated,
},
ready: oauthAuthenticated || ghCliAuthenticated,
readyVia: oauthAuthenticated ? "oauth" : ghCliAuthenticated ? "gh-cli" : null,
};
}
/** Maximum number of poll cycles before timing out (150 × 2s = 5 minutes) */
const MAX_POLL_CYCLES = 150;
@@ -915,19 +988,32 @@ export function ModelOnboardingModal({
return () => clearInterval(interval);
}, [authProviders, loadAuthStatus]);
/*
FNXC:Onboarding 2026-07-03-17:04:
The GitHub onboarding step needs an explicit action model so OAuth login, GitHub CLI install/auth, and optional skip states stay independent.
GitHub readiness remains OAuth-authenticated OR `gh`-authenticated; GitHub-named AI providers such as `github-copilot` must never satisfy the GitHub integration provider check.
*/
const githubActionState = useMemo(
() => buildGitHubActionViewModel({
providers: authProviders,
ghCliStatus,
loginOutcomes,
skipped: isGithubSkipped,
}),
[authProviders, ghCliStatus, loginOutcomes, isGithubSkipped],
);
// OAuth status for the GitHub provider (used for OAuth-specific controls like Connect/Disconnect).
const githubProvider = authProviders.find((p) => p.id === "github");
const hasGithubProvider = !!githubProvider;
const isGithubAuthenticated = githubProvider?.authenticated ?? false;
const isGithubLoginInProgress = githubProvider?.loginInProgress ?? false;
const isGithubCliAuthenticated = ghCliStatus?.authenticated ?? false;
const hasGithubProvider = githubActionState.oauth.providerAvailable;
const isGithubAuthenticated = githubActionState.oauth.authenticated;
const isGithubLoginInProgress = githubActionState.oauth.loginInProgress;
const isGithubCliAuthenticated = githubActionState.ghCli.authenticated;
const gitInstallUrl = gitCliStatus?.installUrl ?? GIT_INSTALL_URL;
const gitVersionLabel = gitCliStatus?.version
? t("setup.gitPrerequisiteInstalledVersion", "Git is installed on the Fusion host ({{version}}).", { version: gitCliStatus.version })
: t("setup.gitPrerequisiteInstalled", "Git is installed on the Fusion host.");
// Effective GitHub readiness (matches useSetupReadiness): OAuth OR authenticated gh CLI session.
const isGitHubReady = isGithubAuthenticated || isGithubCliAuthenticated;
const isGitHubReadyViaCli = !isGithubAuthenticated && isGithubCliAuthenticated;
const isGitHubReady = githubActionState.ready;
const isGitHubReadyViaCli = githubActionState.readyVia === "gh-cli";
// Get provider connection status for UI display
const getProviderStatus = useCallback((provider: AuthProvider): ProviderConnectionStatus => {
@@ -966,23 +1052,22 @@ export function ModelOnboardingModal({
}
const getGitHubStatus = useCallback((): GitHubConnectionStatus => {
if (isGitHubReady) {
if (githubActionState.ready) {
return "connected";
}
const githubOutcome = loginOutcomes["github"];
if (githubOutcome === "pending") {
if (githubActionState.oauth.state === "pending") {
return "pending";
}
if (githubOutcome === "failed" || githubOutcome === "timeout") {
if (githubActionState.oauth.state === "failed") {
return "failed";
}
if (isGithubSkipped) {
if (githubActionState.oauth.state === "skipped") {
return "skipped";
}
return "not-connected";
}, [isGitHubReady, loginOutcomes, isGithubSkipped]);
}, [githubActionState]);
function GitHubStatusBadge({ status }: { status: GitHubConnectionStatus }) {
const config: Record<GitHubConnectionStatus, { text: string; className: string }> = {
@@ -2759,6 +2844,44 @@ export function ModelOnboardingModal({
</p>
</OnboardingDisclosure>
{/*
FNXC:Onboarding 2026-07-03-17:22:
GitHub onboarding must give users in-flow paths for both supported auth modes instead of Settings-only explanatory copy.
The dashboard can start OAuth when the GitHub provider exists; `gh` CLI setup remains explicit host-side guidance because Fusion does not install third-party binaries automatically.
*/}
{!isGithubCliAuthenticated && githubActionState.ghCli.state === "missing" && (
<div className="onboarding-github-setup-card onboarding-github-setup-card--warning" data-testid="onboarding-gh-cli-install-card" role="status">
<div className="onboarding-github-setup-card__heading">
<ProviderIcon provider="github" size="sm" />
<strong>{t("setup.githubCliInstallTitle", "Install GitHub CLI")}</strong>
</div>
<p>
{t("setup.githubCliInstallBody", "Fusion could not find `gh` on the host running Fusion. Install GitHub CLI there to import issues and track pull requests with CLI authentication.")}
</p>
<ul className="onboarding-github-setup-list">
<li>{t("setup.githubCliInstallMac", "macOS: `brew install gh` or download the installer from GitHub CLI releases.")}</li>
<li>{t("setup.githubCliInstallWindows", "Windows: install GitHub CLI with WinGet, Chocolatey, or the GitHub CLI installer, then restart the Fusion host shell or service.")}</li>
<li>{t("setup.githubCliInstallLinux", "Linux: install `gh` with your distribution package manager or the packages from cli.github.com.")}</li>
</ul>
<a className="btn btn-sm" href={GH_CLI_INSTALL_URL} target="_blank" rel="noreferrer">
{t("setup.githubCliInstallLink", "Open GitHub CLI releases")}
</a>
</div>
)}
{!isGithubCliAuthenticated && githubActionState.ghCli.state === "unauthenticated" && (
<div className="onboarding-github-setup-card onboarding-github-setup-card--info" data-testid="onboarding-gh-cli-auth-card" role="status">
<div className="onboarding-github-setup-card__heading">
<ProviderIcon provider="github" size="sm" />
<strong>{t("setup.githubCliAuthTitle", "Authenticate GitHub CLI")}</strong>
</div>
<p>
{t("setup.githubCliAuthBody", "GitHub CLI is installed but not authenticated on the Fusion host. Run this command in the environment where Fusion is running, then return here and continue.")}
</p>
<code className="onboarding-github-command">gh auth login</code>
</div>
)}
{!hasGithubProvider ? (
<div className="model-onboarding-github-optional">
<div className="optional-icon optional-icon--github" aria-hidden="true">
@@ -2770,7 +2893,7 @@ export function ModelOnboardingModal({
</p>
) : (
<p>
{t("setup.githubOauthNotConnected", "GitHub OAuth isn't connected yet. You can set it up in Settings → Authentication, or continue now and connect later.")}
{t("setup.githubOauthUnavailable", "Dashboard GitHub OAuth is not configured on this Fusion host. You can still continue without GitHub, or use the GitHub CLI setup guidance above when available.")}
</p>
)}
<div className="model-onboarding-github-optional__actions">
@@ -2862,7 +2985,7 @@ export function ModelOnboardingModal({
onClick={() => handleLogin("github")}
>
<GitPullRequest size={16} />
{t("setup.connect", "Connect")}
{t("setup.connectGitHubOauth", "Connect GitHub OAuth")}
</button>
)}
{(authActionInProgress === "github" || isGithubLoginInProgress) && loginInstructions.github && (

View File

@@ -1698,13 +1698,13 @@ describe("ModelOnboardingModal", () => {
});
describe("GitHub step", () => {
it("GitHub step shows OAuth setup fallback when neither OAuth nor gh CLI auth is available", async () => {
it("GitHub step shows optional fallback when neither OAuth nor gh CLI auth is available", async () => {
render(<ModelOnboardingModal onComplete={vi.fn()} addToast={vi.fn()} projectId="proj_123" />);
await navigateToGitHubStep();
expect(screen.getByText(/GitHub OAuth isn't connected yet/)).toBeTruthy();
expect(screen.getByText(/Settings → Authentication/)).toBeTruthy();
expect(screen.getByText(/Dashboard GitHub OAuth is not configured/)).toBeTruthy();
expect(screen.getByText(/GitHub CLI setup guidance above/)).toBeTruthy();
expect(screen.getByRole("button", { name: "Continue without GitHub →" })).toBeTruthy();
});
@@ -1728,7 +1728,7 @@ describe("ModelOnboardingModal", () => {
const ctaContainer = screen.getByTestId("onboarding-github-connect-cta");
expect(ctaContainer).toHaveClass("onboarding-github-connect-cta");
const connectButton = screen.getByRole("button", { name: /Connect/ });
const connectButton = screen.getByRole("button", { name: /Connect GitHub OAuth/ });
expect(connectButton).toHaveClass("btn", "btn-primary", "btn-sm");
});
@@ -1800,6 +1800,99 @@ describe("ModelOnboardingModal", () => {
expect(screen.getByTestId("github-status-badge")).toHaveTextContent("Not connected");
});
it("keeps legacy auth status responses without ghCli non-blocking", async () => {
mockFetchAuthStatus.mockResolvedValueOnce({
providers: [],
gitCli: { available: true, version: "2.45.1", installUrl: "https://git-scm.com/downloads" },
});
render(<ModelOnboardingModal onComplete={vi.fn()} addToast={vi.fn()} projectId="proj_123" />);
await navigateToGitHubStep();
expect(screen.getByTestId("onboarding-git-prerequisite")).toHaveTextContent("Git prerequisite ready");
expect(screen.queryByTestId("github-status-badge")).toBeNull();
expect(screen.getByRole("button", { name: "Continue without GitHub →" })).toBeTruthy();
});
it("does not treat GitHub Copilot provider auth as GitHub integration readiness", async () => {
mockFetchAuthStatus.mockResolvedValueOnce({
providers: [
{ id: "github-copilot", name: "GitHub Copilot", authenticated: true, type: "oauth" },
],
ghCli: { available: false, authenticated: false },
});
render(<ModelOnboardingModal onComplete={vi.fn()} addToast={vi.fn()} projectId="proj_123" />);
await navigateToGitHubStep();
expect(screen.queryByTestId("github-status-badge")).toBeNull();
expect(screen.getByText(/Dashboard GitHub OAuth is not configured/)).toBeTruthy();
expect(screen.getByRole("button", { name: "Continue without GitHub →" })).toBeTruthy();
expect(screen.queryByText(/GitHub is connected — issue imports/)).toBeNull();
});
it("models installed but unauthenticated gh CLI as not ready while preserving OAuth connect", async () => {
mockFetchAuthStatus.mockResolvedValueOnce({
providers: [
{ id: "github", name: "GitHub", authenticated: false, type: "oauth" },
],
ghCli: { available: true, authenticated: false },
});
render(<ModelOnboardingModal onComplete={vi.fn()} addToast={vi.fn()} projectId="proj_123" />);
await navigateToGitHubStep();
expect(screen.getByTestId("github-status-badge")).toHaveTextContent("Not connected");
const authCard = screen.getByTestId("onboarding-gh-cli-auth-card");
expect(authCard).toHaveTextContent("Authenticate GitHub CLI");
expect(authCard).toHaveTextContent("gh auth login");
expect(screen.getByRole("button", { name: /Connect GitHub OAuth/ })).toBeTruthy();
expect(screen.getByText(/task creation works without it/i)).toBeTruthy();
});
it("models missing gh CLI as not ready while preserving optional skip", async () => {
mockFetchAuthStatus.mockResolvedValueOnce({
providers: [
{ id: "github", name: "GitHub", authenticated: false, type: "oauth" },
],
ghCli: { available: false, authenticated: false },
});
render(<ModelOnboardingModal onComplete={vi.fn()} addToast={vi.fn()} projectId="proj_123" />);
await navigateToGitHubStep();
expect(screen.getByTestId("github-status-badge")).toHaveTextContent("Not connected");
const installCard = screen.getByTestId("onboarding-gh-cli-install-card");
expect(installCard).toHaveTextContent("Install GitHub CLI");
expect(installCard).toHaveTextContent("host running Fusion");
expect(installCard).toHaveTextContent("macOS");
expect(installCard).toHaveTextContent("Windows");
expect(installCard).toHaveTextContent("Linux");
expect(screen.getByRole("link", { name: "Open GitHub CLI releases" })).toHaveAttribute("href", "https://github.com/cli/cli/releases/latest");
expect(screen.getByRole("button", { name: /Connect GitHub OAuth/ })).toBeTruthy();
expect(screen.getByRole("button", { name: "Skip GitHub →" })).toBeTruthy();
});
it("shows GitHub CLI install guidance even when dashboard GitHub OAuth provider is absent", async () => {
mockFetchAuthStatus.mockResolvedValueOnce({
providers: [],
ghCli: { available: false, authenticated: false },
});
render(<ModelOnboardingModal onComplete={vi.fn()} addToast={vi.fn()} projectId="proj_123" />);
await navigateToGitHubStep();
expect(screen.getByTestId("onboarding-gh-cli-install-card")).toHaveTextContent("Install GitHub CLI");
expect(screen.getByText(/Dashboard GitHub OAuth is not configured/)).toBeTruthy();
expect(screen.queryByRole("button", { name: /Connect GitHub OAuth/ })).toBeNull();
expect(screen.getByRole("button", { name: "Continue without GitHub →" })).toBeTruthy();
});
it("preserves missing-Git guidance when GitHub OAuth provider is absent and gh CLI is ready", async () => {
mockFetchAuthStatus.mockResolvedValueOnce({
providers: [],

View File

@@ -530,6 +530,14 @@ export default defineConfig({
__dirname,
"../../plugins/fusion-plugin-cursor-runtime/src/index.ts",
),
"@fusion-plugin-examples/roadmap/roadmap-suggestions": resolve(
__dirname,
"../../plugins/fusion-plugin-roadmap/src/roadmap-suggestions.ts",
),
"@fusion-plugin-examples/roadmap": resolve(
__dirname,
"../../plugins/fusion-plugin-roadmap/src/index.ts",
),
},
},
test: {

View File

@@ -6729,6 +6729,16 @@
"getApiKeyLink": "Get your API key →",
"getStarted": "Get Started",
"githubCliAlreadyAuth": "GitHub CLI is already authenticated — issue imports and pull request tracking work right now. You're all set; no further action needed.",
"connectGitHubOauth": "Connect GitHub OAuth",
"githubCliAuthBody": "GitHub CLI is installed but not authenticated on the Fusion host. Run this command in the environment where Fusion is running, then return here and continue.",
"githubCliAuthTitle": "Authenticate GitHub CLI",
"githubCliInstallBody": "Fusion could not find `gh` on the host running Fusion. Install GitHub CLI there to import issues and track pull requests with CLI authentication.",
"githubCliInstallLink": "Open GitHub CLI releases",
"githubCliInstallLinux": "Linux: install `gh` with your distribution package manager or the packages from cli.github.com.",
"githubCliInstallMac": "macOS: `brew install gh` or download the installer from GitHub CLI releases.",
"githubCliInstallTitle": "Install GitHub CLI",
"githubCliInstallWindows": "Windows: install GitHub CLI with WinGet, Chocolatey, or the GitHub CLI installer, then restart the Fusion host shell or service.",
"githubOauthUnavailable": "Dashboard GitHub OAuth is not configured on this Fusion host. You can still continue without GitHub, or use the GitHub CLI setup guidance above when available.",
"githubCliAuthNote": "GitHub CLI is already authenticated, so imports and PR tracking work now. OAuth from the dashboard is optional and only controls dashboard-managed connect/disconnect.",
"githubCliAuthSuccess": "GitHub CLI is authenticated. Imports and pull request tracking are available. Connect OAuth in Settings → Authentication if you want dashboard-managed sign-in controls.",
"githubConnected": "GitHub is connected — issue imports and pull request tracking are available. You're all set; no further action needed.",
@@ -6926,7 +6936,6 @@
"repositorySetupDescription": "Choose how Fusion should prepare the project directory before registration.",
"repositorySetupTitle": "Repository setup",
"useExistingDirectoryHint": "Register a folder that is already a git repository or workspace root.",
"connectGithub": "Connect GitHub",
"gitPrerequisiteInstalled": "Git is installed on the Fusion host.",
"gitPrerequisiteInstalledVersion": "Git is installed on the Fusion host ({{version}}).",
"gitPrerequisiteInstallLink": "Open Git install downloads",

View File

@@ -6719,6 +6719,16 @@
"getApiKeyLink": "Obtener tu clave API →",
"getStarted": "Empezar",
"githubCliAlreadyAuth": "GitHub CLI ya está autenticado — las importaciones de issues y el seguimiento de pull requests funcionan ahora mismo. Todo está listo, no se necesita ninguna acción adicional.",
"connectGitHubOauth": "Connect GitHub OAuth",
"githubCliAuthBody": "GitHub CLI is installed but not authenticated on the Fusion host. Run this command in the environment where Fusion is running, then return here and continue.",
"githubCliAuthTitle": "Authenticate GitHub CLI",
"githubCliInstallBody": "Fusion could not find `gh` on the host running Fusion. Install GitHub CLI there to import issues and track pull requests with CLI authentication.",
"githubCliInstallLink": "Open GitHub CLI releases",
"githubCliInstallLinux": "Linux: install `gh` with your distribution package manager or the packages from cli.github.com.",
"githubCliInstallMac": "macOS: `brew install gh` or download the installer from GitHub CLI releases.",
"githubCliInstallTitle": "Install GitHub CLI",
"githubCliInstallWindows": "Windows: install GitHub CLI with WinGet, Chocolatey, or the GitHub CLI installer, then restart the Fusion host shell or service.",
"githubOauthUnavailable": "Dashboard GitHub OAuth is not configured on this Fusion host. You can still continue without GitHub, or use the GitHub CLI setup guidance above when available.",
"githubCliAuthNote": "GitHub CLI ya está autenticado, por lo que las importaciones y el seguimiento de PR funcionan ahora. OAuth desde el panel es opcional y solo controla la conexión/desconexión gestionada por el panel.",
"githubCliAuthSuccess": "GitHub CLI está autenticado. Las importaciones y el seguimiento de pull requests están disponibles. Conecta OAuth en Ajustes → Autenticación si deseas controles de inicio de sesión gestionados por el panel.",
"githubConnected": "GitHub está conectado — las importaciones de issues y el seguimiento de pull requests están disponibles. Todo está listo, no se necesita ninguna acción adicional.",
@@ -6916,7 +6926,6 @@
"repositorySetupDescription": "Choose how Fusion should prepare the project directory before registration.",
"repositorySetupTitle": "Repository setup",
"useExistingDirectoryHint": "Register a folder that is already a git repository or workspace root.",
"connectGithub": "Connect GitHub",
"gitPrerequisiteInstalled": "Git is installed on the Fusion host.",
"gitPrerequisiteInstalledVersion": "Git is installed on the Fusion host ({{version}}).",
"gitPrerequisiteInstallLink": "Open Git install downloads",

View File

@@ -6719,6 +6719,16 @@
"getApiKeyLink": "Obtenir votre clé API →",
"getStarted": "Commencer",
"githubCliAlreadyAuth": "GitHub CLI est déjà authentifié — les imports de tickets et le suivi des pull requests fonctionnent dès maintenant. Tout est prêt, aucune action supplémentaire requise.",
"connectGitHubOauth": "Connect GitHub OAuth",
"githubCliAuthBody": "GitHub CLI is installed but not authenticated on the Fusion host. Run this command in the environment where Fusion is running, then return here and continue.",
"githubCliAuthTitle": "Authenticate GitHub CLI",
"githubCliInstallBody": "Fusion could not find `gh` on the host running Fusion. Install GitHub CLI there to import issues and track pull requests with CLI authentication.",
"githubCliInstallLink": "Open GitHub CLI releases",
"githubCliInstallLinux": "Linux: install `gh` with your distribution package manager or the packages from cli.github.com.",
"githubCliInstallMac": "macOS: `brew install gh` or download the installer from GitHub CLI releases.",
"githubCliInstallTitle": "Install GitHub CLI",
"githubCliInstallWindows": "Windows: install GitHub CLI with WinGet, Chocolatey, or the GitHub CLI installer, then restart the Fusion host shell or service.",
"githubOauthUnavailable": "Dashboard GitHub OAuth is not configured on this Fusion host. You can still continue without GitHub, or use the GitHub CLI setup guidance above when available.",
"githubCliAuthNote": "GitHub CLI est déjà authentifié, les imports et le suivi des PR fonctionnent donc maintenant. L'OAuth depuis le tableau de bord est optionnel et ne contrôle que la connexion/déconnexion gérée par le tableau de bord.",
"githubCliAuthSuccess": "GitHub CLI est authentifié. Les imports et le suivi des pull requests sont disponibles. Connectez OAuth dans Paramètres → Authentification si vous souhaitez des contrôles de connexion gérés par le tableau de bord.",
"githubConnected": "GitHub est connecté — les imports de tickets et le suivi des pull requests sont disponibles. Tout est prêt, aucune action supplémentaire requise.",
@@ -6916,7 +6926,6 @@
"repositorySetupDescription": "Choose how Fusion should prepare the project directory before registration.",
"repositorySetupTitle": "Repository setup",
"useExistingDirectoryHint": "Register a folder that is already a git repository or workspace root.",
"connectGithub": "Connect GitHub",
"gitPrerequisiteInstalled": "Git is installed on the Fusion host.",
"gitPrerequisiteInstalledVersion": "Git is installed on the Fusion host ({{version}}).",
"gitPrerequisiteInstallLink": "Open Git install downloads",

View File

@@ -6719,6 +6719,16 @@
"getApiKeyLink": "API 키 받기 →",
"getStarted": "시작하기",
"githubCliAlreadyAuth": "GitHub CLI가 이미 인증되어 있습니다 — 이슈 가져오기 및 풀 리퀘스트 추적이 즉시 작동합니다. 모두 완료되었으며 추가 작업이 필요하지 않습니다.",
"connectGitHubOauth": "Connect GitHub OAuth",
"githubCliAuthBody": "GitHub CLI is installed but not authenticated on the Fusion host. Run this command in the environment where Fusion is running, then return here and continue.",
"githubCliAuthTitle": "Authenticate GitHub CLI",
"githubCliInstallBody": "Fusion could not find `gh` on the host running Fusion. Install GitHub CLI there to import issues and track pull requests with CLI authentication.",
"githubCliInstallLink": "Open GitHub CLI releases",
"githubCliInstallLinux": "Linux: install `gh` with your distribution package manager or the packages from cli.github.com.",
"githubCliInstallMac": "macOS: `brew install gh` or download the installer from GitHub CLI releases.",
"githubCliInstallTitle": "Install GitHub CLI",
"githubCliInstallWindows": "Windows: install GitHub CLI with WinGet, Chocolatey, or the GitHub CLI installer, then restart the Fusion host shell or service.",
"githubOauthUnavailable": "Dashboard GitHub OAuth is not configured on this Fusion host. You can still continue without GitHub, or use the GitHub CLI setup guidance above when available.",
"githubCliAuthNote": "GitHub CLI가 이미 인증되어 있어 가져오기 및 PR 추적이 지금 작동합니다. 대시보드의 OAuth는 선택 사항이며 대시보드 관리 연결/연결 해제만 제어합니다.",
"githubCliAuthSuccess": "GitHub CLI가 인증되었습니다. 가져오기 및 풀 리퀘스트 추적을 사용할 수 있습니다. 대시보드 관리 로그인 제어를 원하면 설정 → 인증에서 OAuth를 연결하세요.",
"githubConnected": "GitHub가 연결되었습니다 — 이슈 가져오기 및 풀 리퀘스트 추적을 사용할 수 있습니다. 모두 완료되었으며 추가 작업이 필요하지 않습니다.",
@@ -6916,7 +6926,6 @@
"repositorySetupDescription": "Choose how Fusion should prepare the project directory before registration.",
"repositorySetupTitle": "Repository setup",
"useExistingDirectoryHint": "Register a folder that is already a git repository or workspace root.",
"connectGithub": "Connect GitHub",
"gitPrerequisiteInstalled": "Git is installed on the Fusion host.",
"gitPrerequisiteInstalledVersion": "Git is installed on the Fusion host ({{version}}).",
"gitPrerequisiteInstallLink": "Open Git install downloads",

View File

@@ -6719,6 +6719,16 @@
"getApiKeyLink": "获取您的 API 密钥 →",
"getStarted": "开始使用",
"githubCliAlreadyAuth": "GitHub CLI 已经过身份验证——问题导入和拉取请求跟踪现在即可使用。您已准备就绪,无需进一步操作。",
"connectGitHubOauth": "Connect GitHub OAuth",
"githubCliAuthBody": "GitHub CLI is installed but not authenticated on the Fusion host. Run this command in the environment where Fusion is running, then return here and continue.",
"githubCliAuthTitle": "Authenticate GitHub CLI",
"githubCliInstallBody": "Fusion could not find `gh` on the host running Fusion. Install GitHub CLI there to import issues and track pull requests with CLI authentication.",
"githubCliInstallLink": "Open GitHub CLI releases",
"githubCliInstallLinux": "Linux: install `gh` with your distribution package manager or the packages from cli.github.com.",
"githubCliInstallMac": "macOS: `brew install gh` or download the installer from GitHub CLI releases.",
"githubCliInstallTitle": "Install GitHub CLI",
"githubCliInstallWindows": "Windows: install GitHub CLI with WinGet, Chocolatey, or the GitHub CLI installer, then restart the Fusion host shell or service.",
"githubOauthUnavailable": "Dashboard GitHub OAuth is not configured on this Fusion host. You can still continue without GitHub, or use the GitHub CLI setup guidance above when available.",
"githubCliAuthNote": "GitHub CLI 已通过身份验证,因此导入和 PR 跟踪现在即可使用。仪表板的 OAuth 是可选的,仅控制仪表板管理的连接/断开连接。",
"githubCliAuthSuccess": "GitHub CLI 已通过身份验证。导入和拉取请求跟踪功能已可用。如需仪表板管理的登录控件,请在设置 → 身份验证中连接 OAuth。",
"githubConnected": "GitHub 已连接——问题导入和拉取请求跟踪功能已可用。您已准备就绪,无需进一步操作。",
@@ -6916,7 +6926,6 @@
"repositorySetupDescription": "Choose how Fusion should prepare the project directory before registration.",
"repositorySetupTitle": "Repository setup",
"useExistingDirectoryHint": "Register a folder that is already a git repository or workspace root.",
"connectGithub": "Connect GitHub",
"gitPrerequisiteInstalled": "Git is installed on the Fusion host.",
"gitPrerequisiteInstalledVersion": "Git is installed on the Fusion host ({{version}}).",
"gitPrerequisiteInstallLink": "Open Git install downloads",

View File

@@ -6719,6 +6719,16 @@
"getApiKeyLink": "取得您的 API 金鑰 →",
"getStarted": "開始使用",
"githubCliAlreadyAuth": "GitHub CLI 已通過身份驗證——問題匯入和拉取請求追蹤現在即可使用。您已準備就緒,無需進一步操作。",
"connectGitHubOauth": "Connect GitHub OAuth",
"githubCliAuthBody": "GitHub CLI is installed but not authenticated on the Fusion host. Run this command in the environment where Fusion is running, then return here and continue.",
"githubCliAuthTitle": "Authenticate GitHub CLI",
"githubCliInstallBody": "Fusion could not find `gh` on the host running Fusion. Install GitHub CLI there to import issues and track pull requests with CLI authentication.",
"githubCliInstallLink": "Open GitHub CLI releases",
"githubCliInstallLinux": "Linux: install `gh` with your distribution package manager or the packages from cli.github.com.",
"githubCliInstallMac": "macOS: `brew install gh` or download the installer from GitHub CLI releases.",
"githubCliInstallTitle": "Install GitHub CLI",
"githubCliInstallWindows": "Windows: install GitHub CLI with WinGet, Chocolatey, or the GitHub CLI installer, then restart the Fusion host shell or service.",
"githubOauthUnavailable": "Dashboard GitHub OAuth is not configured on this Fusion host. You can still continue without GitHub, or use the GitHub CLI setup guidance above when available.",
"githubCliAuthNote": "GitHub CLI 已通過身份驗證,因此匯入和 PR 追蹤現在即可使用。儀表板的 OAuth 是選用的,僅控制儀表板管理的連接/斷開連接。",
"githubCliAuthSuccess": "GitHub CLI 已通過身份驗證。匯入和拉取請求追蹤功能已可用。如需儀表板管理的登入控件,請在設定 → 驗證中連接 OAuth。",
"githubConnected": "GitHub 已連線——問題匯入和拉取請求追蹤功能已可用。您已準備就緒,無需進一步操作。",
@@ -6916,7 +6926,6 @@
"repositorySetupDescription": "Choose how Fusion should prepare the project directory before registration.",
"repositorySetupTitle": "Repository setup",
"useExistingDirectoryHint": "Register a folder that is already a git repository or workspace root.",
"connectGithub": "Connect GitHub",
"gitPrerequisiteInstalled": "Git is installed on the Fusion host.",
"gitPrerequisiteInstalledVersion": "Git is installed on the Fusion host ({{version}}).",
"gitPrerequisiteInstallLink": "Open Git install downloads",

View File

@@ -6662,7 +6662,7 @@ export default interface Resources {
"connectGitHubAnytime": "No worries if you're not ready — connect GitHub anytime from Settings → Authentication.",
"connectGitHubButton": "Connect GitHub",
"connectGitHubDesc": "Connect GitHub to import issues and track pull requests",
"connectGithub": "Connect GitHub",
"connectGitHubOauth": "Connect GitHub OAuth",
"connectOauthOptional": "Connect OAuth (optional)",
"connectRemoteServer": "Connect remote Fusion server",
"connectedProviders": "Connected providers",
@@ -6745,13 +6745,22 @@ export default interface Resources {
"gitPrerequisiteReadyTitle": "Git prerequisite ready",
"gitPrerequisiteWindows": "Windows: install Git for Windows and restart the Fusion host shell or service.",
"githubCliAlreadyAuth": "GitHub CLI is already authenticated — issue imports and pull request tracking work right now. You're all set; no further action needed.",
"githubCliAuthBody": "GitHub CLI is installed but not authenticated on the Fusion host. Run this command in the environment where Fusion is running, then return here and continue.",
"githubCliAuthNote": "GitHub CLI is already authenticated, so imports and PR tracking work now. OAuth from the dashboard is optional and only controls dashboard-managed connect/disconnect.",
"githubCliAuthSuccess": "GitHub CLI is authenticated. Imports and pull request tracking are available. Connect OAuth in Settings → Authentication if you want dashboard-managed sign-in controls.",
"githubCliAuthTitle": "Authenticate GitHub CLI",
"githubCliInstallBody": "Fusion could not find `gh` on the host running Fusion. Install GitHub CLI there to import issues and track pull requests with CLI authentication.",
"githubCliInstallLink": "Open GitHub CLI releases",
"githubCliInstallLinux": "Linux: install `gh` with your distribution package manager or the packages from cli.github.com.",
"githubCliInstallMac": "macOS: `brew install gh` or download the installer from GitHub CLI releases.",
"githubCliInstallTitle": "Install GitHub CLI",
"githubCliInstallWindows": "Windows: install GitHub CLI with WinGet, Chocolatey, or the GitHub CLI installer, then restart the Fusion host shell or service.",
"githubConnected": "GitHub is connected — issue imports and pull request tracking are available. You're all set; no further action needed.",
"githubConnectionDescription": "Connecting GitHub unlocks issue imports and pull request tracking. You can skip this — task creation works without it.",
"githubConnectionFailed": "Connection failed or timed out.",
"githubOauthConnected": "GitHub OAuth is connected. You can import issues and track pull requests.",
"githubOauthNotConnected": "GitHub OAuth isn't connected yet. You can set it up in Settings → Authentication, or continue now and connect later.",
"githubOauthUnavailable": "Dashboard GitHub OAuth is not configured on this Fusion host. You can still continue without GitHub, or use the GitHub CLI setup guidance above when available.",
"githubProvider": "GitHub",
"githubSkipped": "GitHub was skipped. You can connect anytime from Settings → Authentication.",
"goBackToStep": "Go back to {{label}}",