Skip to content

核心模块

@spaceflow/core 提供了一系列共享模块,Extension 可以直接导入使用。在新架构中,不再使用 NestJS 依赖注入,而是直接实例化或通过 SpaceflowContext 获取服务。

模块总览

模块说明
Git ProviderGit 平台适配(GitHub / Gitea / GitLab)
Git SDKGit 命令封装
LLM Proxy多 LLM 统一代理
Logger日志系统(Plain / TUI)
飞书 SDK飞书开放平台 API
Storage本地存储(支持 TTL)
Parallel并行执行工具
i18n国际化

Git Provider

Git 平台适配器,支持 GitHub、Gitea 和 GitLab。

typescript
import { GitProviderService } from "@spaceflow/core";

const gitProvider = new GitProviderService();

// 获取 PR diff
const diff = await gitProvider.getPullRequestDiff(prNumber);

// 创建 PR 评论
await gitProvider.createPullRequestComment(prNumber, body);

// 创建行内审查评论
await gitProvider.createReviewComment(prNumber, {
  path: "src/index.ts",
  line: 42,
  body: "建议优化此处逻辑",
});

// 更新 PR 信息
await gitProvider.updatePullRequest(prNumber, { title, body });

支持的平台

平台环境变量说明
GitHubGITHUB_TOKENGitHub API
GiteaGITEA_TOKEN, GITEA_SERVER_URLGitea API
GitLabGITLAB_TOKEN, GITLAB_SERVER_URLGitLab API

平台类型通过 GIT_PROVIDER_TYPE 环境变量或配置文件的 gitProvider.provider 指定。

Git SDK

Git 命令封装,提供常用 Git 操作。

typescript
import { GitSdkService } from "@spaceflow/core";

const gitSdk = new GitSdkService();

const diff = await gitSdk.diff("HEAD~1", "HEAD");
const log = await gitSdk.log({ maxCount: 10 });
const status = await gitSdk.status();

主要方法

方法说明
diff()获取代码差异
log()获取提交历史
status()获取工作区状态
add()暂存文件
commit()提交更改
push()推送到远程
fetch()获取远程更新

LLM Proxy

多 LLM 统一代理,支持 OpenAI 和 Claude。

typescript
import { LlmProxyService } from "@spaceflow/core";

const llm = new LlmProxyService();

const result = await llm.chat({
  messages: [
    { role: "system", content: "你是一个代码分析助手" },
    { role: "user", content: "分析以下代码..." },
  ],
});
console.log(result.content);

支持的模型

模式环境变量说明
openaiOPENAI_API_KEY, OPENAI_API_BASE_URLOpenAI API
claudeANTHROPIC_API_KEYClaude API

通过 LLM_PROVIDER 环境变量或命令行 -l 参数指定模式。

Logger

日志系统,支持 Plain 和 TUI 两种模式。

typescript
import { LoggerService } from "@spaceflow/core";

const logger = new LoggerService();

logger.info("操作开始");
logger.debug("调试信息");
logger.warn("警告");
logger.error("错误");

也可通过 SpaceflowContext 使用内置的输出服务:

typescript
run: async (args, options, ctx) => {
  ctx.output.info("信息");
  ctx.output.success("成功");
  ctx.output.warn("警告");
  ctx.output.error("错误");
  ctx.output.debug("调试");
};

日志级别

级别说明
error错误,始终显示
warn警告,始终显示
info信息,默认显示
debug调试,-v 时显示
trace详细跟踪,-vv 时显示

飞书 SDK

飞书开放平台 API 封装。

typescript
import { FeishuSdkService } from "@spaceflow/core";

const feishu = new FeishuSdkService();

await feishu.sendMessage({
  chatId: "oc_xxx",
  content: message,
});

环境变量

变量说明
FEISHU_APP_ID飞书应用 ID
FEISHU_APP_SECRET飞书应用密钥

Storage

本地存储,支持 TTL(过期时间)。通过 SpaceflowContext 使用:

typescript
run: async (args, options, ctx) => {
  // 存储数据,TTL 1小时
  await ctx.storage.set("cache-key", { data: "value" }, 3600);

  // 读取数据
  const cached = await ctx.storage.get<MyData>("cache-key");

  // 删除数据
  await ctx.storage.del("cache-key");
};

Parallel

并行执行工具,支持并发控制。

typescript
import { ParallelService } from "@spaceflow/core";

const parallel = new ParallelService();

const results = await parallel.run(
  files,
  async (file) => {
    return processFile(file);
  },
  { concurrency: 5 },
);

i18n

国际化工具函数。

typescript
import { t, addLocaleResources } from "@spaceflow/core";

// 注册翻译资源
addLocaleResources("my-ext", {
  "zh-CN": { greeting: "你好" },
  en: { greeting: "Hello" },
});

// 使用翻译
const message = t("my-ext:greeting"); // "你好" 或 "Hello"

详细说明请参考 i18n 国际化

基于 MIT 许可发布