flutter_acp 0.1.0
flutter_acp: ^0.1.0 copied to clipboard
A Flutter/Dart implementation of the Agent Client Protocol (ACP). Supports both Client and Agent roles for building AI coding assistants.
example/flutter_acp_example.dart
/// Example usage of Flutter ACP library.
///
/// This example demonstrates how to use the ACP client and agent.
library;
import 'package:flutter_acp/flutter_acp.dart';
void main() async {
// Create an in-process transport for testing
final transport = InProcessTransport();
// Create and start an agent
final agent = AcpAgent(
handler: ExampleAgentHandler(),
);
await agent.start(transport: transport);
// Create a client
final client = AcpClient(transport: transport);
try {
// Connect the client
await client.connect();
// Initialize the protocol
final initResult = await client.initialize(
protocolVersion: 1,
capabilities: ClientCapabilities(
fs: FsCapabilities(
readTextFile: true,
writeTextFile: true,
),
terminal: true,
),
clientInfo: ClientInfo(
name: 'example_client',
version: '1.0.0',
),
);
print('Connected to agent: ${initResult.agentInfo.name}');
print('Agent version: ${initResult.agentInfo.version}');
print('Protocol version: ${initResult.protocolVersion}');
// Create a session
final session = await client.createSession(
config: SessionConfig(cwd: '/path/to/project'),
);
print('Created session: ${session.sessionId}');
// Send a prompt
final result = await client.sendPrompt(
sessionId: session.sessionId,
contents: [
PromptContent.text('Hello, Agent!'),
],
);
print('Prompt status: ${result.status}');
print('Messages: ${result.messages}');
// Close the session
await client.closeSession(session.sessionId);
} finally {
// Clean up
await client.disconnect();
await agent.stop();
}
}
/// Example agent handler implementation.
class ExampleAgentHandler implements AgentHandler {
@override
Future<InitializeResult> onInitialize(InitializeParams params) async {
return InitializeResult(
protocolVersion: params.protocolVersion,
agentCapabilities: AgentCapabilities(
loadSession: true,
promptCapabilities: PromptCapabilities(
image: true,
audio: false,
),
),
agentInfo: AgentInfo(
name: 'example_agent',
version: '1.0.0',
),
);
}
@override
Future<AuthenticateResult>? onAuthenticate(AuthenticateParams params) {
return null; // Authentication not supported
}
@override
Future<Session> onCreateSession(SessionConfig? config) async {
return Session(
sessionId: 'session-${DateTime.now().millisecondsSinceEpoch}',
state: SessionState.active,
config: config,
);
}
@override
Future<Session>? onLoadSession(String sessionId) {
return null; // Session loading not supported
}
@override
Future<PromptResult> onPrompt(PromptParams params) async {
// Simple echo response
return PromptResult(
sessionId: params.sessionId,
status: PromptStatus.completed,
messages: [
{
'role': 'assistant',
'content': 'You said: ${params.contents.first.text}',
},
],
);
}
@override
void onCancel(String sessionId) {
print('Session cancelled: $sessionId');
}
}