# opencode-java-sdk
**Repository Path**: tianchaixiaoniuniu/opencode-java-sdk
## Basic Information
- **Project Name**: opencode-java-sdk
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-02-12
- **Last Updated**: 2026-02-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# OpenCode Java SDK
适用于 OpenCode 的 Java SDK - 开源 AI 编程助手。
## 概述
本 SDK 提供了一个类型安全的 Java 客户端,用于与 OpenCode 服务器进行交互。它支持所有 OpenCode API,并能无缝集成到 Spring Boot 应用程序中。
## 功能特性
- 完整的 OpenCode API 支持
- 基于 Project Reactor 的响应式非阻塞 API
- Spring Boot 自动配置
- 配置属性支持
- 身份验证支持
- 连接池和超时配置
- 自动重试机制
## 安装
### Maven
在 `pom.xml` 中添加以下依赖:
```xml
ai.opencode
opencode-java-sdk
1.0.0
```
### Gradle
在 `build.gradle` 中添加以下依赖:
```groovy
implementation 'ai.opencode:opencode-java-sdk:1.0.0'
```
## 快速开始
### 1. 配置 OpenCode
在 `application.yml` 中添加以下配置:
```yaml
opencode:
sdk:
base-url: http://localhost:4096
connection-timeout: 5000 # 连接超时(毫秒)
request-timeout: 30000 # 请求超时(毫秒)
username: opencode # 用户名(可选)
password: your-password # 密码(可选)
```
### 2. 在 Spring Boot 应用中使用
```java
import ai.opencode.sdk.client.OpenCodeClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Mono;
@RestController
@RequestMapping("/api/opencode")
public class OpenCodeController {
@Autowired
private OpenCodeClient openCodeClient;
@GetMapping("/health")
public Mono health() {
return openCodeClient.getHealth();
}
@PostMapping("/sessions")
public Mono createSession(@RequestParam String title) {
return openCodeClient.createSession(title);
}
@PostMapping("/sessions/{sessionId}/message")
public Mono sendMessage(
@PathVariable String sessionId,
@RequestParam String message) {
return openCodeClient.sendMessage(sessionId, message);
}
}
```
### 3. 独立使用(非 Spring Boot 项目)
```java
import ai.opencode.sdk.config.OpenCodeProperties;
import ai.opencode.sdk.client.OpenCodeClient;
import com.fasterxml.jackson.databind.ObjectMapper;
// 配置
OpenCodeProperties properties = new OpenCodeProperties();
properties.setBaseUrl("http://localhost:4096");
properties.setConnectionTimeout(5000);
properties.setRequestTimeout(30000);
// 创建客户端
ObjectMapper objectMapper = new ObjectMapper();
OpenCodeClient client = new OpenCodeClient(properties, objectMapper);
// 使用
HealthResponse health = client.getHealthSync();
System.out.println("服务器版本: " + health.getVersion());
Session session = client.createSession("我的会话").block();
System.out.println("会话 ID: " + session.getId());
```
## API 参考
### 健康检查
```java
// 异步方式
Mono health = openCodeClient.getHealth();
// 同步方式
HealthResponse health = openCodeClient.getHealthSync();
```
### 项目管理
```java
// 列出所有项目
Mono> projects = openCodeClient.listProjects();
// 获取当前项目
Mono currentProject = openCodeClient.getCurrentProject();
```
### 会话管理
```java
// 创建新会话
Mono session = openCodeClient.createSession("我的会话");
// 列出所有会话
Mono> sessions = openCodeClient.listSessions();
// 获取指定会话
Mono session = openCodeClient.getSession("session-id");
// 删除会话
Mono deleted = openCodeClient.deleteSession("session-id");
```
### 消息发送
```java
// 发送简单消息
Mono response = openCodeClient.sendMessage("session-id", "你好!");
// 发送完全控制的消息
SendMessageRequest request = SendMessageRequest.builder()
.parts(List.of(new Part("text", "解释 Java Stream 的用法")))
.model(new ModelInfo("anthropic", "claude-3-5-sonnet"))
.build();
Mono response = openCodeClient.sendMessage("session-id", request);
// 中止运行中的会话
Mono aborted = openCodeClient.abortSession("session-id");
```
### 文件操作
```java
// 在文件中搜索文本
Mono> results = openCodeClient.searchText("function.*opencode");
// 按名称查找文件
Mono> files = openCodeClient.findFiles("*.java");
// 读取文件内容
Mono content = openCodeClient.readFile("src/main/java/App.java");
```
### 配置管理
```java
// 获取当前配置
Mono config = openCodeClient.getConfig();
// 列出可用的 providers
Mono providers = openCodeClient.listProviders();
```
### 身份验证
```java
// 为 provider 设置身份验证
AuthCredentials credentials = AuthCredentials.builder()
.type("api")
.apiKey("your-api-key")
.build();
Mono result = openCodeClient.setAuth("anthropic", credentials);
```
### 日志记录
```java
// 写入日志条目
Mono logged = openCodeClient.writeLog("my-app", "info", "操作已完成");
```
### TUI 控制
```java
// 向提示符追加文本
Mono appended = openCodeClient.appendPrompt("你的文本");
// 提交提示符
Mono submitted = openCodeClient.submitPrompt();
// 显示 toast 通知
Mono shown = openCodeClient.showToast("任务完成", "success");
```
## 高级用法
### 自定义 WebClient
如果需要自定义 WebClient:
```java
@Bean
public WebClient.Builder openCodeWebClientBuilder(OpenCodeProperties properties) {
HttpClient httpClient = HttpClient.create()
.responseTimeout(Duration.ofMinutes(5))
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000);
return WebClient.builder()
.baseUrl(properties.getBaseUrl())
.clientConnector(new ReactorClientHttpConnector(httpClient))
.defaultHeader("X-Custom-Header", "value");
}
```
### 错误处理
```java
openCodeClient.getHealth()
.doOnSuccess(response -> System.out.println("健康状态: " + response.isHealthy()))
.doOnError(error -> {
if (error instanceof WebClientResponseException) {
WebClientResponseException ex = (WebClientResponseException) error;
System.err.println("HTTP 状态码: " + ex.getStatusCode());
System.err.println("响应内容: " + ex.getResponseBodyAsString());
} else {
System.err.println("错误: " + error.getMessage());
}
})
.subscribe();
```
### 响应式流
```java
// 使用 Flux 处理多个项目
openCodeClient.listSessions()
.flatMapMany(Flux::fromIterable)
.filter(session -> "active".equals(session.getStatus()))
.subscribe(session -> System.out.println("活跃会话: " + session.getId()));
// 使用 Mono 处理单个项目
openCodeClient.getSession("session-id")
.map(Session::getTitle)
.subscribe(title -> System.out.println("会话标题: " + title));
```
## 配置属性
| 属性 | 类型 | 默认值 | 描述 |
|------|------|--------|------|
| `opencode.sdk.base-url` | String | `http://localhost:4096` | OpenCode 服务器的基础 URL |
| `opencode.sdk.connection-timeout` | int | `5000` | 连接超时时间(毫秒) |
| `opencode.sdk.request-timeout` | int | `30000` | 请求超时时间(毫秒) |
| `opencode.sdk.username` | String | - | HTTP 基本认证的用户名 |
| `opencode.sdk.password` | String | - | HTTP 基本认证的密码 |
| `opencode.sdk.auto-reconnect` | boolean | `false` | 启用自动重连 |
| `opencode.sdk.max-retries` | int | `3` | 最大重试次数 |
| `opencode.sdk.default-provider` | String | - | 默认 provider ID |
| `opencode.sdk.default-model` | String | - | 默认模型 ID |
| `opencode.sdk.validate-ssl` | boolean | `true` | 是否验证 SSL 证书 |
## 环境要求
- Java 17 或更高版本
- Spring Boot 3.2.0 或更高版本(可选,用于自动配置)
## 构建
```bash
# 构建 SDK
mvn clean install
# 运行测试
mvn test
# 生成 JavaDoc
mvn javadoc:javadoc
```
## 发布
```bash
# 发布到 Maven Central
mvn clean deploy -P release
```
## 贡献指南
1. Fork 本仓库
2. 创建功能分支
3. 提交你的更改
4. 推送到分支
5. 提交 Pull Request
## 许可证
MIT 许可证 - 详情请参阅 [LICENSE](LICENSE) 文件。
## 技术支持
- 官方文档: https://opencode.ai/docs/
- GitHub: https://github.com/anomalyco/opencode
- Discord: https://opencode.ai/discord