129 lines · 4.3 KB · TypeScript
RawDownload
import {  ClaudeSettings,  CodexSettings,  type ExecutionEnvironmentPlatformOs,  type ServerProvider,  type ServerSettings,} from "@t3tools/contracts";import * as Option from "effect/Option";import * as Schema from "effect/Schema"; const decodeClaudeSettings = Schema.decodeUnknownOption(ClaudeSettings);const decodeCodexSettings = Schema.decodeUnknownOption(CodexSettings);const SAFE_SHELL_BINARY_PATTERN = /^[A-Za-z0-9_./:\\-]+$/; function quoteProviderBinary(  binaryPath: string,  fallback: string,  platform: ExecutionEnvironmentPlatformOs,): string {  if (    SAFE_SHELL_BINARY_PATTERN.test(binaryPath) &&    (platform === "windows" || !binaryPath.includes("\\"))  ) {    return binaryPath;  }  if (platform === "windows") return `& '${binaryPath.replaceAll("'", "''")}'`;  if (platform === "darwin" || platform === "linux") {    if (binaryPath.startsWith("~/") || binaryPath.startsWith("~\\")) {      return `~/'${binaryPath.slice(2).replaceAll("'", `'"'"'`)}'`;    }    return `'${binaryPath.replaceAll("'", `'"'"'`)}'`;  }  return fallback;} export function getOnboardingProviderState(provider: ServerProvider | undefined) {  if (provider === undefined) return "checking";  if (!provider.enabled || provider.status === "disabled") return "disabled";  if (!provider.installed) return "install";  if (provider.auth.status === "unauthenticated") return "signIn";  if (provider.status === "ready") return "ready";  return "attention";} const PROVIDER_STATE_PRIORITY = {  checking: 0,  disabled: 1,  install: 2,  attention: 3,  signIn: 4,  ready: 5,} as const; /** Select the most usable configured instance for each provider driver. */export function selectOnboardingProvidersByDriver(  providers: ReadonlyArray<ServerProvider> | null | undefined,) {  const providersByDriver = new Map<string, ServerProvider>();   for (const provider of providers ?? []) {    const existing = providersByDriver.get(provider.driver);    if (      existing === undefined ||      PROVIDER_STATE_PRIORITY[getOnboardingProviderState(provider)] >        PROVIDER_STATE_PRIORITY[getOnboardingProviderState(existing)]    ) {      providersByDriver.set(provider.driver, provider);    }  }   return providersByDriver;} /** * Official standalone installers. Neither needs Node or npm, and both land in * the paths the server's provider maintenance recognizes as native, so the * one-click updater in Settings keeps working after install. */const NATIVE_INSTALL_COMMANDS = {  claudeAgent: {    windows: "irm https://claude.ai/install.ps1 | iex",    posix: "curl -fsSL https://claude.ai/install.sh | bash",  },  codex: {    windows: "irm https://chatgpt.com/codex/install.ps1 | iex",    posix: "curl -fsSL https://chatgpt.com/codex/install.sh | sh",  },} as const; /** * Install command for the setup terminal, keyed on the environment's platform * (not the client's): a Windows desktop driving a WSL server gets the shell * script. Unknown platforms get the shell script too, since the terminal there * is a POSIX shell in practice. */export function resolveOnboardingProviderInstallCommand(  driver: keyof typeof NATIVE_INSTALL_COMMANDS,  platform: ExecutionEnvironmentPlatformOs,): string {  const commands = NATIVE_INSTALL_COMMANDS[driver];  return platform === "windows" ? commands.windows : commands.posix;} /** Use the selected provider instance's binary when the setup terminal opens its login flow. */export function resolveOnboardingProviderLoginCommand(  provider: ServerProvider,  settings: ServerSettings,  platform: ExecutionEnvironmentPlatformOs,): string {  const instance = settings.providerInstances[provider.instanceId];   if (provider.driver === "claudeAgent") {    const config = decodeClaudeSettings(      instance ? (instance.config ?? {}) : settings.providers.claudeAgent,    );    const binaryPath = Option.isSome(config) ? config.value.binaryPath : "claude";    return `${quoteProviderBinary(binaryPath, "claude", platform)} auth login`;  }   if (provider.driver === "codex") {    const config = decodeCodexSettings(      instance ? (instance.config ?? {}) : settings.providers.codex,    );    const binaryPath = Option.isSome(config) ? config.value.binaryPath : "codex";    return `${quoteProviderBinary(binaryPath, "codex", platform)} login`;  }   return provider.driver;}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t