mirror of
https://github.com/Lydanne/spaceflow.git
synced 2026-03-11 19:52:45 +08:00
chore: 初始化仓库
This commit is contained in:
200
docs/advanced/core-modules.md
Normal file
200
docs/advanced/core-modules.md
Normal file
@@ -0,0 +1,200 @@
|
||||
# 核心模块
|
||||
|
||||
`@spaceflow/core` 提供的共享模块,所有 Extension 都可以导入使用。
|
||||
|
||||
## 模块总览
|
||||
|
||||
| 模块 | 导出 | 说明 |
|
||||
|------|------|------|
|
||||
| Git Provider | `GitProviderModule`, `GitProviderService` | Git 平台适配(GitHub / Gitea) |
|
||||
| Git SDK | `GitSdkModule`, `GitSdkService` | Git 命令封装 |
|
||||
| LLM Proxy | `LlmProxyModule`, `LlmProxyService` | 多 LLM 统一代理 |
|
||||
| Feishu SDK | `FeishuSdkModule`, `FeishuSdkService` | 飞书 API |
|
||||
| Storage | `StorageModule`, `StorageService` | 本地存储 |
|
||||
| Parallel | `ParallelModule`, `ParallelService` | 并行执行工具 |
|
||||
| Logger | `Logger` | 日志系统 |
|
||||
| i18n | `t()`, `initI18n()`, `addLocaleResources()` | 国际化 |
|
||||
| Config | `loadSpaceflowConfig()` | 配置加载 |
|
||||
|
||||
## Git Provider
|
||||
|
||||
Git 平台适配器,支持 GitHub 和 Gitea。
|
||||
|
||||
```typescript
|
||||
import { GitProviderModule, GitProviderService } from "@spaceflow/core";
|
||||
|
||||
@Module({
|
||||
imports: [GitProviderModule.forFeature()],
|
||||
})
|
||||
export class MyModule {}
|
||||
|
||||
@Injectable()
|
||||
export class MyService {
|
||||
constructor(private readonly gitProvider: GitProviderService) {}
|
||||
|
||||
async createComment(prNumber: number, body: string): Promise<void> {
|
||||
await this.gitProvider.createPRComment(prNumber, body);
|
||||
}
|
||||
|
||||
async listFiles(prNumber: number): Promise<string[]> {
|
||||
const files = await this.gitProvider.getPRFiles(prNumber);
|
||||
return files.map((f) => f.filename);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 支持的平台
|
||||
|
||||
| 平台 | 适配器 | 检测方式 |
|
||||
|------|--------|----------|
|
||||
| GitHub | `GithubAdapter` | `GITHUB_TOKEN` 环境变量 |
|
||||
| Gitea | `GiteaAdapter` | `GITEA_TOKEN` 环境变量 |
|
||||
|
||||
默认使用 GitHub。可通过 `GIT_PROVIDER_TYPE` 环境变量显式指定。
|
||||
|
||||
## Git SDK
|
||||
|
||||
封装常用 Git 命令操作。
|
||||
|
||||
```typescript
|
||||
import { GitSdkModule, GitSdkService } from "@spaceflow/core";
|
||||
|
||||
@Injectable()
|
||||
export class MyService {
|
||||
constructor(private readonly gitSdk: GitSdkService) {}
|
||||
|
||||
async getChanges(): Promise<string> {
|
||||
return this.gitSdk.diff("main", "HEAD");
|
||||
}
|
||||
|
||||
async getCurrentBranch(): Promise<string> {
|
||||
return this.gitSdk.currentBranch();
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## LLM Proxy
|
||||
|
||||
多 LLM 统一代理,支持 OpenAI、Claude、Claude Code、OpenCode 等。
|
||||
|
||||
```typescript
|
||||
import { LlmProxyModule, LlmProxyService } from "@spaceflow/core";
|
||||
|
||||
@Injectable()
|
||||
export class MyService {
|
||||
constructor(private readonly llm: LlmProxyService) {}
|
||||
|
||||
async analyze(code: string): Promise<string> {
|
||||
const result = await this.llm.chat({
|
||||
messages: [
|
||||
{ role: "system", content: "你是一个代码分析助手" },
|
||||
{ role: "user", content: `分析以下代码:\n${code}` },
|
||||
],
|
||||
});
|
||||
return result.content;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Logger
|
||||
|
||||
日志系统,支持 Plain 模式(CI/管道)和 TUI 模式(终端交互)。
|
||||
|
||||
```typescript
|
||||
import { Logger } from "@spaceflow/core";
|
||||
|
||||
const logger = new Logger("my-extension");
|
||||
await logger.init(); // 加载 TUI 渲染器
|
||||
|
||||
// 基础日志
|
||||
logger.info("信息");
|
||||
logger.success("成功");
|
||||
logger.warn("警告");
|
||||
logger.error("错误");
|
||||
|
||||
// Spinner
|
||||
const spinner = logger.spin("处理中...");
|
||||
spinner.update("仍在处理...");
|
||||
spinner.succeed("处理完成");
|
||||
|
||||
// 进度条
|
||||
const progress = logger.progress({ total: 100, label: "下载" });
|
||||
progress.update(50);
|
||||
progress.finish();
|
||||
|
||||
// 子 Logger
|
||||
const child = logger.child("compile");
|
||||
child.info("编译中..."); // 输出: [my-extension:compile] 编译中...
|
||||
```
|
||||
|
||||
### 日志级别
|
||||
|
||||
| 级别 | 说明 |
|
||||
|------|------|
|
||||
| `silent` | 不输出任何日志 |
|
||||
| `info` | 默认级别 |
|
||||
| `verbose` | 详细日志(`-v`) |
|
||||
| `debug` | 调试日志(`-vv`) |
|
||||
|
||||
## Feishu SDK
|
||||
|
||||
飞书 API 封装,支持发送消息。
|
||||
|
||||
```typescript
|
||||
import { FeishuSdkModule, FeishuSdkService } from "@spaceflow/core";
|
||||
|
||||
@Injectable()
|
||||
export class MyService {
|
||||
constructor(private readonly feishu: FeishuSdkService) {}
|
||||
|
||||
async notify(chatId: string, message: string): Promise<void> {
|
||||
await this.feishu.sendMessage(chatId, message);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
需要配置环境变量 `FEISHU_APP_ID` 和 `FEISHU_APP_SECRET`。
|
||||
|
||||
## Storage
|
||||
|
||||
本地存储服务。
|
||||
|
||||
```typescript
|
||||
import { StorageModule, StorageService } from "@spaceflow/core";
|
||||
|
||||
@Injectable()
|
||||
export class MyService {
|
||||
constructor(private readonly storage: StorageService) {}
|
||||
|
||||
async saveData(key: string, data: unknown): Promise<void> {
|
||||
await this.storage.set(key, data);
|
||||
}
|
||||
|
||||
async loadData<T>(key: string): Promise<T | undefined> {
|
||||
return this.storage.get<T>(key);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Parallel
|
||||
|
||||
并行执行工具,支持并发控制。
|
||||
|
||||
```typescript
|
||||
import { ParallelModule, ParallelService } from "@spaceflow/core";
|
||||
|
||||
@Injectable()
|
||||
export class MyService {
|
||||
constructor(private readonly parallel: ParallelService) {}
|
||||
|
||||
async processFiles(files: string[]): Promise<void> {
|
||||
await this.parallel.run(
|
||||
files,
|
||||
async (file) => {
|
||||
// 处理单个文件
|
||||
},
|
||||
{ concurrency: 10 },
|
||||
);
|
||||
}
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user