gitops-ai 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/core/dependencies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/core/dependencies.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { BootstrapConfig } from "../schemas.js";
1
+ import { type BootstrapConfig } from "../schemas.js";
2
2
  export declare function installOperator(): Promise<void>;
3
3
  export declare function installInstance(config: BootstrapConfig, repoRoot: string): Promise<void>;
4
4
  export declare function waitForInstance(): Promise<void>;
package/dist/core/flux.js CHANGED
@@ -1,6 +1,8 @@
1
1
  import { readFileSync, writeFileSync, unlinkSync } from "node:fs";
2
- import { exec, execAsync } from "../utils/shell.js";
3
- import { log, withSpinner } from "../utils/log.js";
2
+ import { exec, execAsync, execSafe } from "../utils/shell.js";
3
+ import { log, withSpinner, p, pc } from "../utils/log.js";
4
+ import { getProvider } from "./git-provider.js";
5
+ import { shouldUseSshDeployKey } from "../schemas.js";
4
6
  export async function installOperator() {
5
7
  const cmd = [
6
8
  "helm install flux-operator",
@@ -16,13 +18,27 @@ export async function installOperator() {
16
18
  export async function installInstance(config, repoRoot) {
17
19
  const templatePath = `${repoRoot}/flux-instance-values.yaml`;
18
20
  const tmpPath = "/tmp/flux-instance-values.yaml";
21
+ const provider = await getProvider(config.gitProvider ?? "gitlab");
22
+ const gitHost = config.gitHost ?? provider.defaultHost;
19
23
  let content = readFileSync(templatePath, "utf-8");
20
- content = envsubst(content, {
21
- FLUX_GITLAB_REPO_OWNER: config.repoOwner,
22
- FLUX_GITLAB_REPO_NAME: config.repoName,
23
- FLUX_GITLAB_REPO_BRANCH: config.repoBranch,
24
+ const vars = {
25
+ FLUX_GIT_HOST: gitHost,
26
+ FLUX_GIT_REPO_OWNER: config.repoOwner,
27
+ FLUX_GIT_REPO_NAME: config.repoName,
28
+ FLUX_GIT_REPO_BRANCH: config.repoBranch,
24
29
  CLUSTER_NAME: config.clusterName,
25
- });
30
+ };
31
+ content = envsubst(content, vars);
32
+ // Replace hardcoded gitlab.com URLs in the template with the actual host
33
+ if (gitHost !== "gitlab.com") {
34
+ content = content.replaceAll("https://gitlab.com/", `https://${gitHost}/`);
35
+ }
36
+ // SSH deploy key: rewrite HTTPS URL → SSH URL for Flux source-controller
37
+ if (shouldUseSshDeployKey(config)) {
38
+ const httpsUrl = `https://${gitHost}/${config.repoOwner}/${config.repoName}.git`;
39
+ const sshUrl = `ssh://git@${gitHost}/${config.repoOwner}/${config.repoName}.git`;
40
+ content = content.replaceAll(httpsUrl, sshUrl);
41
+ }
26
42
  writeFileSync(tmpPath, content);
27
43
  const cmd = [
28
44
  "helm install flux",
@@ -36,7 +52,40 @@ export async function installInstance(config, repoRoot) {
36
52
  unlinkSync(tmpPath);
37
53
  }
38
54
  export async function waitForInstance() {
39
- await withSpinner("Waiting for FluxInstance to be ready", () => execAsync("kubectl -n flux-system wait fluxinstance/flux --for=condition=Ready --timeout=5m"));
55
+ const s = p.spinner();
56
+ s.start("Waiting for FluxInstance to be ready");
57
+ const waitPromise = execAsync("kubectl -n flux-system wait fluxinstance/flux --for=condition=Ready --timeout=5m");
58
+ const poll = setInterval(() => {
59
+ const status = getPodStatusLine();
60
+ if (status) {
61
+ s.message(`Waiting for FluxInstance to be ready\n${pc.dim(status)}`);
62
+ }
63
+ }, 3000);
64
+ try {
65
+ await waitPromise;
66
+ s.stop(pc.green("FluxInstance is ready"));
67
+ }
68
+ catch (err) {
69
+ s.stop(pc.red("FluxInstance failed to become ready"));
70
+ throw err;
71
+ }
72
+ finally {
73
+ clearInterval(poll);
74
+ }
75
+ }
76
+ function getPodStatusLine() {
77
+ const { stdout, exitCode } = execSafe(`kubectl get pods -n flux-system --no-headers -o custom-columns="NAME:.metadata.name,STATUS:.status.phase,READY:.status.conditions[?(@.type=='Ready')].status" 2>/dev/null`);
78
+ if (exitCode !== 0 || !stdout)
79
+ return "";
80
+ const pods = stdout.split("\n").filter(Boolean).map((line) => {
81
+ const parts = line.trim().split(/\s+/);
82
+ const name = (parts[0] ?? "").replace(/^(.*?)-[a-f0-9]+-[a-z0-9]+$/, "$1");
83
+ const phase = parts[1] ?? "?";
84
+ const ready = parts[2] === "True";
85
+ const icon = ready ? pc.green("✓") : phase === "Running" ? pc.yellow("●") : pc.dim("○");
86
+ return ` ${icon} ${pc.dim(name)} ${pc.dim(phase)}`;
87
+ });
88
+ return pods.join("\n");
40
89
  }
41
90
  export async function reconcile() {
42
91
  await withSpinner("Reconciling Flux", async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"flux.js","sourceRoot":"","sources":["../../src/core/flux.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGnD,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,GAAG,GAAG;QACV,4BAA4B;QAC5B,0DAA0D;QAC1D,yBAAyB;QACzB,oBAAoB;QACpB,yBAAyB;QACzB,QAAQ;KACT,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChB,MAAM,WAAW,CAAC,mCAAmC,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAuB,EACvB,QAAgB;IAEhB,MAAM,YAAY,GAAG,GAAG,QAAQ,4BAA4B,CAAC;IAC7D,MAAM,OAAO,GAAG,gCAAgC,CAAC;IAEjD,IAAI,OAAO,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAClD,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE;QAC1B,sBAAsB,EAAE,MAAM,CAAC,SAAS;QACxC,qBAAqB,EAAE,MAAM,CAAC,QAAQ;QACtC,uBAAuB,EAAE,MAAM,CAAC,UAAU;QAC1C,YAAY,EAAE,MAAM,CAAC,WAAW;KACjC,CAAC,CAAC;IACH,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEhC,MAAM,GAAG,GAAG;QACV,mBAAmB;QACnB,0DAA0D;QAC1D,yBAAyB;QACzB,YAAY,OAAO,EAAE;QACrB,QAAQ;KACT,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChB,MAAM,WAAW,CAAC,mCAAmC,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAE7E,UAAU,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,WAAW,CAAC,sCAAsC,EAAE,GAAG,EAAE,CAC7D,SAAS,CACP,kFAAkF,CACnF,CACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,WAAW,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QACzC,MAAM,SAAS,CACb,kGAAkG,EAAE,GAAG,CACxG,CAAC;QACF,GAAG,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC;QAC1D,MAAM,SAAS,CACb,kFAAkF,CACnF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,6BAA6B,CAAC;IACvC,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CACf,OAAe,EACf,IAA4B;IAE5B,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAChC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,EAAE,KAAK,CAAC,EAC1D,OAAO,CACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"flux.js","sourceRoot":"","sources":["../../src/core/flux.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export type ProviderType = "gitlab" | "github";
2
+ export interface GitUser {
3
+ username: string;
4
+ name: string;
5
+ }
6
+ export interface GitOrganization {
7
+ name: string;
8
+ path: string;
9
+ fullPath: string;
10
+ }
11
+ export interface GitProjectSummary {
12
+ name: string;
13
+ description: string | null;
14
+ pathWithNamespace: string;
15
+ httpUrl: string;
16
+ }
17
+ export interface ProjectInfo {
18
+ id: string;
19
+ httpUrl: string;
20
+ pathWithNamespace: string;
21
+ }
22
+ export interface GitProvider {
23
+ readonly type: ProviderType;
24
+ readonly defaultHost: string;
25
+ readonly cliTool: string;
26
+ readonly tokenLabel: string;
27
+ fetchCurrentUser(token: string, host: string): Promise<GitUser>;
28
+ fetchOrganizations(token: string, host: string): Promise<GitOrganization[]>;
29
+ fetchNamespaceProjects(token: string, host: string, namespace: string): Promise<GitProjectSummary[]>;
30
+ authenticate(token: string, host: string): Promise<string>;
31
+ resolveNamespaceId(namespace: string, host: string, token: string): Promise<string>;
32
+ getProject(namespace: string, name: string, host: string, token: string): Promise<ProjectInfo | null>;
33
+ createProject(name: string, namespaceId: string, host: string, token: string): Promise<ProjectInfo>;
34
+ configureGitCredentials(token: string, cwd: string): void;
35
+ getAuthRemoteUrl(host: string, pathWithNamespace: string, token: string): string;
36
+ loginWithBrowser(host: string): Promise<string>;
37
+ }
38
+ export declare function getProvider(type: ProviderType): Promise<GitProvider>;
@@ -0,0 +1,30 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Provider type
3
+ // ---------------------------------------------------------------------------
4
+ // ---------------------------------------------------------------------------
5
+ // Factory (dynamic imports to avoid circular module references)
6
+ // ---------------------------------------------------------------------------
7
+ const providerCache = new Map();
8
+ export async function getProvider(type) {
9
+ const cached = providerCache.get(type);
10
+ if (cached)
11
+ return cached;
12
+ let provider;
13
+ switch (type) {
14
+ case "gitlab": {
15
+ const { createGitLabProvider } = await import("./gitlab.js");
16
+ provider = createGitLabProvider();
17
+ break;
18
+ }
19
+ case "github": {
20
+ const { createGitHubProvider } = await import("./github.js");
21
+ provider = createGitHubProvider();
22
+ break;
23
+ }
24
+ default:
25
+ throw new Error(`Unknown git provider: ${type}`);
26
+ }
27
+ providerCache.set(type, provider);
28
+ return provider;
29
+ }
30
+ //# sourceMappingURL=git-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-provider.js","sourceRoot":"","sources":["../../src/core/git-provider.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AA+E9E,8EAA8E;AAC9E,gEAAgE;AAChE,8EAA8E;AAE9E,MAAM,aAAa,GAAG,IAAI,GAAG,EAA6B,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAkB;IAClD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,IAAI,QAAqB,CAAC;IAC1B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAC7D,QAAQ,GAAG,oBAAoB,EAAE,CAAC;YAClC,MAAM;QACR,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAC7D,QAAQ,GAAG,oBAAoB,EAAE,CAAC;YAClC,MAAM;QACR,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAc,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAClC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function loginWithGitHubDevice(host: string): Promise<string>;
@@ -0,0 +1,108 @@
1
+ import { execSync } from "node:child_process";
2
+ import * as p from "@clack/prompts";
3
+ import pc from "picocolors";
4
+ import { isMacOS } from "../utils/platform.js";
5
+ const GITHUB_CLIENT_ID = "Ov23lig0eFrzARzjfqy6";
6
+ const OAUTH_SCOPES = "repo read:org";
7
+ const POLL_TIMEOUT_MS = 120_000;
8
+ // ---------------------------------------------------------------------------
9
+ // Browser opener
10
+ // ---------------------------------------------------------------------------
11
+ function openUrl(url) {
12
+ const cmd = isMacOS() ? "open" : "xdg-open";
13
+ try {
14
+ execSync(`${cmd} '${url}'`, { stdio: "ignore" });
15
+ }
16
+ catch {
17
+ /* user will see the manual URL in the terminal */
18
+ }
19
+ }
20
+ // ---------------------------------------------------------------------------
21
+ // Helpers
22
+ // ---------------------------------------------------------------------------
23
+ function authBaseUrl(host) {
24
+ return host === "github.com" ? "https://github.com" : `https://${host}`;
25
+ }
26
+ function getClientId(host) {
27
+ const fromEnv = process.env.GITHUB_OAUTH_CLIENT_ID;
28
+ if (fromEnv)
29
+ return fromEnv;
30
+ if (host === "github.com")
31
+ return GITHUB_CLIENT_ID;
32
+ throw new Error(`No OAuth application configured for ${host}. ` +
33
+ `Set GITHUB_OAUTH_CLIENT_ID env var for GitHub Enterprise hosts.`);
34
+ }
35
+ async function requestDeviceCode(host, clientId) {
36
+ const res = await fetch(`${authBaseUrl(host)}/login/device/code`, {
37
+ method: "POST",
38
+ headers: {
39
+ Accept: "application/json",
40
+ "Content-Type": "application/json",
41
+ },
42
+ body: JSON.stringify({
43
+ client_id: clientId,
44
+ scope: OAUTH_SCOPES,
45
+ }),
46
+ });
47
+ if (!res.ok) {
48
+ const body = await res.text();
49
+ throw new Error(`GitHub device code request failed (${res.status}): ${body}`);
50
+ }
51
+ return res.json();
52
+ }
53
+ async function pollForToken(host, clientId, deviceCode, intervalSec) {
54
+ const start = Date.now();
55
+ let interval = intervalSec * 1000;
56
+ while (Date.now() - start < POLL_TIMEOUT_MS) {
57
+ await new Promise((r) => setTimeout(r, interval));
58
+ const res = await fetch(`${authBaseUrl(host)}/login/oauth/access_token`, {
59
+ method: "POST",
60
+ headers: {
61
+ Accept: "application/json",
62
+ "Content-Type": "application/json",
63
+ },
64
+ body: JSON.stringify({
65
+ client_id: clientId,
66
+ device_code: deviceCode,
67
+ grant_type: "urn:ietf:params:oauth:grant-type:device_code",
68
+ }),
69
+ });
70
+ if (!res.ok)
71
+ continue;
72
+ const data = (await res.json());
73
+ if (data.access_token) {
74
+ return data.access_token;
75
+ }
76
+ switch (data.error) {
77
+ case "authorization_pending":
78
+ break;
79
+ case "slow_down":
80
+ interval += 5000;
81
+ break;
82
+ case "expired_token":
83
+ throw new Error("Device code expired — please try again");
84
+ case "access_denied":
85
+ throw new Error("Authorization denied by user");
86
+ default:
87
+ if (data.error) {
88
+ throw new Error(`GitHub OAuth error: ${data.error_description ?? data.error}`);
89
+ }
90
+ }
91
+ }
92
+ throw new Error("Login timed out — no response within 2 minutes");
93
+ }
94
+ // ---------------------------------------------------------------------------
95
+ // Public entry point
96
+ // ---------------------------------------------------------------------------
97
+ export async function loginWithGitHubDevice(host) {
98
+ const clientId = getClientId(host);
99
+ const dc = await requestDeviceCode(host, clientId);
100
+ p.log.info(`Enter code ${pc.bold(pc.cyan(dc.user_code))} at ${pc.cyan(dc.verification_uri)}`);
101
+ p.log.info(pc.dim("If the browser doesn't open, visit the URL above manually."));
102
+ p.log.info(pc.dim("Opening browser in 3 seconds…"));
103
+ await new Promise((r) => setTimeout(r, 3000));
104
+ openUrl(dc.verification_uri);
105
+ const token = await pollForToken(host, clientId, dc.device_code, dc.interval);
106
+ return token;
107
+ }
108
+ //# sourceMappingURL=github-oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-oauth.js","sourceRoot":"","sources":["../../src/core/github-oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { GitProvider } from "./git-provider.js";
2
+ export interface GitHubProvider extends GitProvider {
3
+ readonly type: "github";
4
+ }
5
+ export declare function createGitHubProvider(): GitHubProvider;
6
+ export declare function getKnownHosts(host: string): string;
7
+ export interface DeployKeyResult {
8
+ privateKey: string;
9
+ publicKey: string;
10
+ knownHosts: string;
11
+ }
12
+ export declare function createGitHubDeployKey(owner: string, repo: string, host: string, token: string): Promise<DeployKeyResult>;
@@ -0,0 +1,188 @@
1
+ import { readFileSync, unlinkSync } from "node:fs";
2
+ import { execSync } from "node:child_process";
3
+ import { exec, execSafe } from "../utils/shell.js";
4
+ import { log } from "../utils/log.js";
5
+ import { loginWithGitHubDevice } from "./github-oauth.js";
6
+ // ---------------------------------------------------------------------------
7
+ // REST helpers
8
+ // ---------------------------------------------------------------------------
9
+ async function apiFetch(path, token, host) {
10
+ const apiBase = host === "github.com"
11
+ ? "https://api.github.com"
12
+ : `https://${host}/api/v3`;
13
+ const url = `${apiBase}${path}`;
14
+ const res = await fetch(url, {
15
+ headers: {
16
+ Authorization: `Bearer ${token}`,
17
+ Accept: "application/vnd.github+json",
18
+ "X-GitHub-Api-Version": "2022-11-28",
19
+ },
20
+ });
21
+ if (!res.ok) {
22
+ throw new Error(`GitHub API ${path}: ${res.status} ${res.statusText}`);
23
+ }
24
+ return res.json();
25
+ }
26
+ async function apiPost(path, token, host, body) {
27
+ const apiBase = host === "github.com"
28
+ ? "https://api.github.com"
29
+ : `https://${host}/api/v3`;
30
+ const url = `${apiBase}${path}`;
31
+ const res = await fetch(url, {
32
+ method: "POST",
33
+ headers: {
34
+ Authorization: `Bearer ${token}`,
35
+ Accept: "application/vnd.github+json",
36
+ "Content-Type": "application/json",
37
+ "X-GitHub-Api-Version": "2022-11-28",
38
+ },
39
+ body: JSON.stringify(body),
40
+ });
41
+ if (!res.ok) {
42
+ const text = await res.text();
43
+ throw new Error(`GitHub API POST ${path}: ${res.status} ${text}`);
44
+ }
45
+ return res.json();
46
+ }
47
+ export function createGitHubProvider() {
48
+ return {
49
+ type: "github",
50
+ defaultHost: "github.com",
51
+ cliTool: "gh",
52
+ tokenLabel: "GitHub Personal Access Token (repo, read:org)",
53
+ async fetchCurrentUser(token, host) {
54
+ const u = await apiFetch("/user", token, host);
55
+ return { username: u.login, name: u.name ?? u.login };
56
+ },
57
+ async fetchOrganizations(token, host) {
58
+ const orgs = await apiFetch("/user/orgs?per_page=100", token, host);
59
+ return orgs.map((o) => ({
60
+ name: o.login,
61
+ path: o.login,
62
+ fullPath: o.login,
63
+ }));
64
+ },
65
+ async fetchNamespaceProjects(token, host, namespace) {
66
+ // Try as an org first, then fall back to user repos
67
+ let repos;
68
+ try {
69
+ repos = await apiFetch(`/orgs/${encodeURIComponent(namespace)}/repos?per_page=100&sort=updated&direction=desc`, token, host);
70
+ }
71
+ catch {
72
+ repos = await apiFetch(`/users/${encodeURIComponent(namespace)}/repos?per_page=100&sort=updated&direction=desc`, token, host);
73
+ }
74
+ return repos.map((r) => ({
75
+ name: r.name,
76
+ description: r.description,
77
+ pathWithNamespace: r.full_name,
78
+ httpUrl: r.clone_url,
79
+ }));
80
+ },
81
+ async authenticate(token, host) {
82
+ const user = await this.fetchCurrentUser(token, host);
83
+ log.success(`Authenticated as: ${user.username}`);
84
+ return user.username;
85
+ },
86
+ async resolveNamespaceId(namespace, host, token) {
87
+ // GitHub doesn't use numeric namespace IDs. We return the namespace
88
+ // string itself so `createProject` can decide org vs user.
89
+ try {
90
+ await apiFetch(`/orgs/${encodeURIComponent(namespace)}`, token, host);
91
+ return namespace;
92
+ }
93
+ catch {
94
+ // Not an org — treat as personal user namespace
95
+ return namespace;
96
+ }
97
+ },
98
+ async getProject(namespace, name, host, token) {
99
+ try {
100
+ const r = await apiFetch(`/repos/${encodeURIComponent(namespace)}/${encodeURIComponent(name)}`, token, host);
101
+ return {
102
+ id: String(r.id),
103
+ httpUrl: r.clone_url,
104
+ pathWithNamespace: r.full_name,
105
+ };
106
+ }
107
+ catch {
108
+ return null;
109
+ }
110
+ },
111
+ async createProject(name, namespaceId, host, token) {
112
+ // Determine if namespace is an org or the authenticated user
113
+ const user = await this.fetchCurrentUser(token, host);
114
+ const isOrg = namespaceId !== user.username;
115
+ let repo;
116
+ if (isOrg) {
117
+ repo = await apiPost(`/orgs/${encodeURIComponent(namespaceId)}/repos`, token, host, { name, private: true, auto_init: false });
118
+ }
119
+ else {
120
+ repo = await apiPost("/user/repos", token, host, { name, private: true, auto_init: false });
121
+ }
122
+ return {
123
+ id: String(repo.id),
124
+ httpUrl: repo.clone_url,
125
+ pathWithNamespace: repo.full_name,
126
+ };
127
+ },
128
+ configureGitCredentials(token, cwd) {
129
+ const { exitCode, stdout } = execSafe("git remote get-url origin 2>/dev/null");
130
+ let host = "github.com";
131
+ if (exitCode === 0 && stdout) {
132
+ const match = stdout.match(/https:\/\/([^/]+)\//);
133
+ if (match)
134
+ host = match[1];
135
+ }
136
+ exec(`git config --local --replace-all credential.helper '!f() { echo "username=x-access-token"; echo "password=${token}"; }; f'`, { cwd });
137
+ log.success(`git credentials configured for ${host}`);
138
+ },
139
+ getAuthRemoteUrl(host, pathWithNamespace, token) {
140
+ return `https://x-access-token:${token}@${host}/${pathWithNamespace}.git`;
141
+ },
142
+ async loginWithBrowser(host) {
143
+ return loginWithGitHubDevice(host);
144
+ },
145
+ };
146
+ }
147
+ // ---------------------------------------------------------------------------
148
+ // Deploy key management (SSH-based auth for Flux)
149
+ // ---------------------------------------------------------------------------
150
+ const GITHUB_COM_KNOWN_HOSTS = [
151
+ "github.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl",
152
+ "github.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg=",
153
+ ].join("\n");
154
+ export function getKnownHosts(host) {
155
+ if (host === "github.com")
156
+ return GITHUB_COM_KNOWN_HOSTS;
157
+ const { stdout } = execSafe(`ssh-keyscan ${host} 2>/dev/null`);
158
+ if (stdout?.trim())
159
+ return stdout.trim();
160
+ throw new Error(`Could not retrieve SSH host keys for ${host}. ` +
161
+ `Ensure ssh-keyscan is installed and the host is reachable.`);
162
+ }
163
+ export async function createGitHubDeployKey(owner, repo, host, token) {
164
+ const keyPath = "/tmp/flux-deploy-key";
165
+ try {
166
+ execSync(`rm -f "${keyPath}" "${keyPath}.pub"`, { stdio: "ignore" });
167
+ }
168
+ catch { /* ignore */ }
169
+ execSync(`ssh-keygen -t ed25519 -f "${keyPath}" -N "" -q -C "flux-system"`, { stdio: "ignore" });
170
+ const privateKey = readFileSync(keyPath, "utf-8");
171
+ const publicKey = readFileSync(`${keyPath}.pub`, "utf-8").trim();
172
+ try {
173
+ unlinkSync(keyPath);
174
+ }
175
+ catch { /* ignore */ }
176
+ try {
177
+ unlinkSync(`${keyPath}.pub`);
178
+ }
179
+ catch { /* ignore */ }
180
+ await apiPost(`/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}/keys`, token, host, {
181
+ title: "flux-system (GitOps AI Bootstrapper)",
182
+ key: publicKey,
183
+ read_only: false,
184
+ });
185
+ log.success(`Deploy key added to ${owner}/${repo}`);
186
+ return { privateKey, publicKey, knownHosts: getKnownHosts(host) };
187
+ }
188
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/core/github.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function loginWithBrowser(host: string): Promise<string>;