autocoder-cli-sdk
Version:
Node.js SDK for AutoCoder CLI - 便于在Node.js代码中调用auto-coder.run功能
430 lines (323 loc) • 10 kB
Markdown
# AutoCoder CLI SDK for Node.js
一个便于在Node.js/TypeScript代码中调用`auto-coder.run`功能的SDK,无需直接使用child_process或fork进程。
## 特性
- 🚀 **易于使用**: 提供简洁直观的API接口
- 🔄 **异步优先**: 基于AsyncGenerator的现代异步设计
- 📡 **流式处理**: 支持实时流式输出和事件处理
- 💬 **会话管理**: 内置会话管理,支持多轮对话
- ⚡ **并发支持**: 支持批量并发查询
- 🛠 **完整配置**: 支持所有auto-coder.run命令行选项
- 📦 **TypeScript优先**: 完整的类型定义和类型安全
- 🔧 **进程控制**: 支持abort操作和进程管理
- 🧪 **诊断工具**: 内置环境诊断和问题排查
## 安装
### 使用 pnpm (推荐)
```bash
cd cli-sdks/nodejs
pnpm install
```
### 使用 npm
```bash
cd cli-sdks/nodejs
npm install
```
## 快速开始
### 基础用法(文本格式 - AsyncGenerator接口)
```typescript
import { AutoCoderClient } from 'autocoder-cli-sdk';
const client = new AutoCoderClient();
for await (const line of client.query('创建一个TypeScript函数来计算斐波那契数列')) {
console.log(line); // 逐行输出生成的代码
}
```
### JSON格式输出(类型安全的响应)
```typescript
import { AutoCoderClient, QueryResponseModel } from 'autocoder-cli-sdk';
const client = new AutoCoderClient();
for await (const response of client.query('创建一个TypeScript类', { outputFormat: 'json' })) {
if (response instanceof QueryResponseModel) {
console.log(`事件总数: ${response.summary.totalEvents}`);
console.log(`最终结果: ${response.finalResult}`);
}
}
```
### 便利方法
```typescript
import { AutoCoderClient } from 'autocoder-cli-sdk';
const client = new AutoCoderClient();
// 快速查询(返回字符串)
const result = await client.quickQuery('创建一个TypeScript接口');
console.log(result);
// JSON查询(返回类型安全的模型)
const model = await client.jsonQuery('创建一个类');
console.log(`事件数: ${model.summary.totalEvents}`);
```
### 中止操作
```typescript
import { AutoCoderClient } from 'autocoder-cli-sdk';
const client = new AutoCoderClient();
// 启动查询
const queryPromise = (async () => {
for await (const line of client.query('复杂的查询任务')) {
console.log(line);
}
})();
// 5秒后中止
setTimeout(async () => {
if (client.isRunning()) {
await client.abort(); // 优雅中止
// 或 await client.abortForce(); // 强制中止
}
}, 5000);
```
## API 文档
### 客户端类
#### `AutoCoderClient`
主要的客户端类,提供所有核心功能。
```typescript
class AutoCoderClient {
constructor(config?: Partial<SDKConfig>);
// 核心方法
query(prompt: string, options?: Partial<QueryOptions>): AsyncGenerator<QueryResult>;
quickQuery(prompt: string, options?: Partial<QuickQueryOptions>): Promise<string>;
jsonQuery(prompt: string, options?: Partial<JsonQueryOptions>): Promise<QueryResponseModel>;
queryFromFile(filePath: string, options?: Partial<QueryOptions>): AsyncGenerator<QueryResult>;
// 配置和状态
configure(configDict: Record<string, string>): Promise<ConfigResultModel>;
getVersion(): Promise<string>;
checkAvailability(): { sdkAvailable: boolean; subprocessAvailable: Promise<boolean> };
// 进程控制
abort(): Promise<boolean>;
abortForce(): Promise<boolean>;
isRunning(): boolean;
}
```
#### `SessionManager`
会话管理器,支持多轮对话。
```typescript
class SessionManager {
constructor(client: AutoCoderClient, sessionId?: string);
query(prompt: string, options?: Partial<QueryOptions>): AsyncGenerator<QueryResult>;
quickQuery(prompt: string, options?: Partial<QuickQueryOptions>): Promise<string>;
jsonQuery(prompt: string, options?: Partial<JsonQueryOptions>): Promise<QueryResponseModel>;
}
```
#### `BatchQueryManager`
批量查询管理器,支持并发查询。
```typescript
class BatchQueryManager {
constructor(client: AutoCoderClient);
batchQuery(
prompts: string[],
options?: Partial<QueryOptions>,
maxConcurrency?: number
): Promise<Array<string[] | QueryResponseModel>>;
}
```
### 配置类型
#### `SDKConfig`
```typescript
interface SDKConfig {
defaultModel?: string;
defaultMaxTurns?: number;
defaultPermissionMode?: 'manual' | 'acceptEdits';
defaultOutputFormat?: 'text' | 'json' | 'stream-json';
verbose?: boolean;
defaultCwd?: string;
systemPromptPath?: string;
includeRules?: boolean;
defaultAllowedTools?: string[];
}
```
#### `QueryOptions`
```typescript
interface QueryOptions {
// 基础查询选项
model?: string;
maxTurns?: number;
systemPrompt?: string;
systemPromptPath?: string;
outputFormat?: 'text' | 'json' | 'stream-json';
inputFormat?: 'text' | 'json' | 'stream-json';
verbose?: boolean;
cwd?: string;
// 会话管理
sessionId?: string;
continueSession?: boolean;
// 工具和权限
allowedTools?: string[];
permissionMode?: 'manual' | 'acceptEdits';
// 高级选项
includeRules?: boolean;
pr?: boolean;
isSubAgent?: boolean;
// 异步代理运行器选项
asyncMode?: boolean;
splitMode?: 'h1' | 'h2' | 'h3' | 'any' | 'delimiter';
delimiter?: string;
minLevel?: number;
maxLevel?: number;
workdir?: string;
fromBranch?: string;
bgMode?: boolean;
taskPrefix?: string;
worktreeName?: string;
}
```
## 高级用法
### 会话管理
```typescript
import { AutoCoderClient, SessionManager } from 'autocoder-cli-sdk';
const client = new AutoCoderClient();
const session = new SessionManager(client);
// 多轮对话
const result1 = await session.quickQuery('创建一个User接口');
const result2 = await session.quickQuery('为User接口添加验证方法'); // 基于上下文
const result3 = await session.quickQuery('添加单元测试'); // 继续上下文
```
### 批量并发查询
```typescript
import { AutoCoderClient, BatchQueryManager } from 'autocoder-cli-sdk';
const client = new AutoCoderClient();
const batchManager = new BatchQueryManager(client);
const prompts = [
'创建一个用户管理模块',
'创建一个日志模块',
'创建一个配置管理模块'
];
// 并发执行,最大并发数为2
const results = await batchManager.batchQuery(prompts, {}, 2);
results.forEach((result, i) => {
console.log(`查询 ${i+1}: ${Array.isArray(result) ? '文本结果' : 'JSON结果'}`);
});
```
### 文件输入
```typescript
import { AutoCoderClient } from 'autocoder-cli-sdk';
const client = new AutoCoderClient();
// 从文件读取提示内容
for await (const line of client.queryFromFile('./prompt.txt', { outputFormat: 'text' })) {
console.log(line);
}
```
### 配置管理
```typescript
import { AutoCoderClient } from 'autocoder-cli-sdk';
const client = new AutoCoderClient();
// 设置配置
const result = await client.configure({
'model': 'gpt-4',
'max_turns': '25',
'permission_mode': 'acceptEdits'
});
if (result.success) {
console.log('配置更新成功');
console.log('应用的配置:', result.appliedConfigs);
}
```
## 开发
### 设置开发环境
```bash
cd cli-sdks/nodejs
pnpm install # 安装所有依赖
```
### 开发任务
```bash
# 构建
pnpm run build
# 开发模式(监听文件变化)
pnpm run dev
# 运行测试
pnpm run test
pnpm run test:coverage
# 代码检查和格式化
pnpm run lint
pnpm run lint:fix
pnpm run format
pnpm run typecheck
# 运行示例
pnpm run example:basic
pnpm run example:async
pnpm run example:generator
pnpm run example:diagnostics
```
## 示例项目
查看 `examples/` 目录中的完整示例:
- `basic-usage.ts` - 基础用法演示
- `async-usage.ts` - 异步用法演示
- `generator-usage.ts` - Generator接口演示
运行示例:
```bash
pnpm run example:basic
pnpm run example:async
pnpm run example:generator
```
## 错误处理
```typescript
import {
AutoCoderClient,
AutoCoderError,
ValidationError,
ExecutionError
} from 'autocoder-cli-sdk';
const client = new AutoCoderClient();
try {
for await (const line of client.query('创建一个函数')) {
console.log(line);
}
} catch (error) {
if (error instanceof ValidationError) {
console.error('参数验证失败:', error.message);
} else if (error instanceof ExecutionError) {
console.error('执行失败:', error.message, '退出码:', error.exitCode);
} else if (error instanceof AutoCoderError) {
console.error('SDK错误:', error.message);
} else {
console.error('未知错误:', error);
}
}
```
## 诊断工具
```typescript
import { runDiagnostics } from 'autocoder-cli-sdk';
// 运行完整诊断
const results = await runDiagnostics(true); // verbose=true
// 检查结果
console.log('环境状态:', results.environment);
console.log('依赖状态:', results.dependencies);
console.log('AutoCoder状态:', results.autocoder);
```
## 类型安全
SDK 提供完整的 TypeScript 支持:
```typescript
import {
AutoCoderClient,
type QueryOptions,
type QueryResponseModel
} from 'autocoder-cli-sdk';
const client: AutoCoderClient = new AutoCoderClient();
const options: QueryOptions = { maxTurns: 10 };
for await (const result of client.query('prompt', options)) {
// TypeScript 会自动推断 result 的类型
if (typeof result === 'string') {
console.log('文本结果:', result);
} else {
console.log('JSON结果:', result.summary.totalEvents);
}
}
```
## 版本兼容性
- Node.js 14.0+
- TypeScript 5.0+
- 兼容所有版本的auto-coder.run命令行工具
- 使用 pnpm 作为包管理器
## 许可证
MIT License - 详见 LICENSE 文件。
## 贡献
欢迎提交Issue和Pull Request来改进这个SDK。开发流程:
1. Fork 项目
2. 创建功能分支
3. 使用 `pnpm install` 设置开发环境
4. 运行 `pnpm run test` 确保测试通过
5. 运行 `pnpm run lint:fix` 和 `pnpm run format` 格式化代码
6. 提交 Pull Request