Skip to main content
Glama
config.ts4.79 kB
/** * 配置管理命令 */ import { ClientOptions } from '../utils/client.js'; import { success, error, outputDetails, info } from '../utils/output.js'; import { ProjectConfigManager } from '../../config/project.js'; import { GlobalConfigManager } from '../../config/global.js'; import { detectGitInfo } from '../../utils/git-detector.js'; import { cwd } from 'process'; import prompts from 'prompts'; /** * 初始化项目配置 */ export async function configInit(options: ClientOptions & { giteaUrl?: string; owner?: string; repo?: string; force?: boolean; }) { try { const projectRoot = cwd(); const projectConfigManager = new ProjectConfigManager(projectRoot); // 检查是否已有配置 const existingConfig = projectConfigManager.loadProjectConfig(); if (existingConfig?.gitea?.url && !options.force) { error('配置文件已存在'); error('使用 --force 选项强制覆盖'); process.exit(1); } // 尝试自动检测 Git 信息 const gitInfo = detectGitInfo(projectRoot); let giteaUrl = options.giteaUrl || gitInfo?.serverUrl; let owner = options.owner || gitInfo?.owner; let repo = options.repo || gitInfo?.repo; // 如果仍然缺少信息,交互式询问 if (!giteaUrl || !owner || !repo) { info('自动检测到的信息:', options); if (gitInfo) { outputDetails({ serverUrl: gitInfo.serverUrl || '(未检测到)', owner: gitInfo.owner || '(未检测到)', repo: gitInfo.repo || '(未检测到)', }, options); } const response = await prompts([ { type: giteaUrl ? null : 'text', name: 'giteaUrl', message: 'Gitea 服务器地址:', initial: gitInfo?.serverUrl || 'https://gitea.example.com', validate: (value: string) => value ? true : '服务器地址不能为空', }, { type: owner ? null : 'text', name: 'owner', message: '仓库所有者 (用户名或组织名):', initial: gitInfo?.owner || '', validate: (value: string) => value ? true : '所有者不能为空', }, { type: repo ? null : 'text', name: 'repo', message: '仓库名称:', initial: gitInfo?.repo || '', validate: (value: string) => value ? true : '仓库名称不能为空', }, ]); giteaUrl = giteaUrl || response.giteaUrl; owner = owner || response.owner; repo = repo || response.repo; } // 使用正确的 API 创建配置 projectConfigManager.createProjectConfig( { url: giteaUrl! }, { owner: owner!, repo: repo! } ); // 添加 .gitea-mcp.local.json 到 .gitignore projectConfigManager.addLocalConfigToGitignore(); success('配置文件已创建: .gitea-mcp.json', options); info('\n提示: Token 应保存在 .gitea-mcp.local.json 中(此文件会被 Git 忽略)', options); outputDetails({ giteaUrl, owner, repo, }, options); } catch (err: any) { error(`初始化配置失败: ${err.message}`); process.exit(1); } } /** * 显示当前配置 */ export async function configShow(options: ClientOptions) { try { const projectRoot = cwd(); const projectConfigManager = new ProjectConfigManager(projectRoot); const mergedConfig = projectConfigManager.getMergedConfig(); const globalConfigManager = new GlobalConfigManager(); const globalConfig = globalConfigManager.getConfig(); info('=== 项目配置 ===', options); if (mergedConfig.url) { outputDetails({ giteaUrl: mergedConfig.url, owner: mergedConfig.owner || '(未设置)', repo: mergedConfig.repo || '(未设置)', org: mergedConfig.org || '(未设置)', token: mergedConfig.apiToken ? '***已配置***' : '(未设置)', }, options); } else { info('未找到项目配置文件', options); } info('\n=== 全局配置 ===', options); if (globalConfig.giteaServers && globalConfig.giteaServers.length > 0) { const servers = globalConfig.giteaServers.map(s => ({ url: s.url, name: s.name || '-', isDefault: s.isDefault ? 'Yes' : 'No', tokens: s.tokens.length > 0 ? `${s.tokens.length} 个` : '(未设置)', })); info(`服务器数量: ${servers.length}`, options); for (const server of servers) { outputDetails(server, options); } outputDetails({ language: globalConfig.settings?.language || 'en', }, options); } else { info('未找到全局配置', options); } } catch (err: any) { error(`显示配置失败: ${err.message}`); process.exit(1); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/SupenBysz/gitea-mcp-tool'

If you have feedback or need assistance with the MCP directory API, please join our Discord server