@viberlabs/opencode
v1.1.1
Published
OpenCode integration for VIBER Universal
Maintainers
Readme
@viberlabs/opencode
OpenCode integration for VIBER Labs / VIBER v2 - HTTP client and agent integration
Installation
npm install @viberlabs/opencodeFeatures
OpenCode Client
HTTP client for OpenCode API communication.
import { OpenCodeClient } from '@viberlabs/opencode';
const client = new OpenCodeClient({
baseUrl: 'http://localhost:51262',
username: 'opencode',
password: 'your-password'
});
// Health check
const health = await client.healthCheck();
console.log(health.status); // 'ok'
// Create session
const session = await client.createSession({
title: 'VIBER: Build authentication',
model: 'claude-3-opus'
});
// Send message (synchronous)
const response = await client.sendMessage(session.id, {
parts: [{ type: 'text', text: 'Build JWT authentication' }],
agent: 'build'
});
// Send message (asynchronous)
await client.sendMessageAsync(session.id, {
parts: [{ type: 'text', text: 'Implement feature X' }],
agent: 'build'
});
// Get session
const retrieved = await client.getSession(session.id);
// Abort session
await client.abortSession(session.id);Agent Integration
High-level agent spawning and result capture.
import { AgentIntegration } from '@viberlabs/opencode/integration';
const integration = new AgentIntegration(client, db);
// Spawn agent
const agent = await integration.spawnAgent({
taskId: 'task-1',
role: 'coder',
model: 'claude-3-opus',
instruction: 'Implement JWT authentication with refresh tokens'
});
// Wait for completion with timeout
const result = await integration.waitForCompletion(agent.id, {
timeout: 300000, // 5 minutes
onProgress: (progress) => {
console.log('Progress:', progress);
}
});
console.log(result.success); // true/false
console.log(result.summary); // Result summary
console.log(result.artifacts); // Files created/modified
console.log(result.duration); // Time takenEvent Streaming
Real-time event monitoring via SSE.
const events = client.subscribeToEvents();
events.on('server.connected', () => {
console.log('Connected to OpenCode');
});
events.on('message.start', (event) => {
console.log('Message started:', event.sessionId);
});
events.on('message.delta', (event) => {
console.log('Progress:', event.delta);
});
events.on('message.complete', (event) => {
console.log('Message completed:', event.message);
});
events.on('error', (error) => {
console.error('Error:', error);
});Authentication
OpenCode uses HTTP Basic Auth. Store credentials in .viber/opencode-auth.json:
{
"username": "opencode",
"password": "uuid-v4-password",
"port": 51262
}Port Discovery
The client automatically discovers the OpenCode server port:
- Try port from environment
OPENCODE_SERVER_PORT - Try port from auth file
- Try default port 51262
- Try alternative port 4096
API Reference
OpenCodeClient Methods
healthCheck()- Check server healthcreateSession(options)- Create new sessionsendMessage(sessionId, message)- Send synchronous messagesendMessageAsync(sessionId, message)- Send asynchronous messagegetSession(sessionId)- Retrieve sessionabortSession(sessionId)- Abort active sessionsubscribeToEvents()- Subscribe to SSE events
AgentIntegration Methods
spawnAgent(config)- Spawn AI agentwaitForCompletion(agentId, options)- Wait for agent completioncaptureResult(agentId)- Capture agent resultdetectCompletion(sessionId)- Detect if session is complete
Error Handling
try {
const session = await client.createSession({ title: 'Test' });
} catch (error) {
if (error.code === 'ECONNREFUSED') {
console.error('OpenCode server not running');
} else if (error.code === 'UNAUTHORIZED') {
console.error('Invalid credentials');
} else {
console.error('Error:', error.message);
}
}License
MIT
