1use clawedcode_mcp::McpServerConfig;
2use clawedcode_tools::ToolSpec;
3use serde::Serialize;
4use std::collections::BTreeMap;
5
6#[derive(Debug, Clone)]
7pub struct CompletionRequest {
8 pub model: String,
9 pub prompt_pack: String,
10 pub system_prompt_name: String,
11 pub system_prompt_body: String,
12 pub prompt: String,
13 pub tools: Vec<ToolSpec>,
14 pub skill_count: usize,
15 pub mcp_servers: BTreeMap<String, McpServerConfig>,
16}
17
18#[derive(Debug, Clone, Serialize)]
19pub struct CompletionResponse {
20 pub system_prompt: String,
21 pub response: String,
22 pub tool_count: usize,
23 pub skill_count: usize,
24 pub mcp_server_count: usize,
25}
26
27pub trait ApiClient {
28 fn complete(&self, request: &CompletionRequest) -> CompletionResponse;
29}
30
31#[derive(Debug, Default, Clone)]
32pub struct MockApiClient;
33
34impl ApiClient for MockApiClient {
35 fn complete(&self, request: &CompletionRequest) -> CompletionResponse {
36 let response = format!(
37 "Model: {}\nPrompt pack: {}\nSystem prompt: {}\nTools: {}\nSkills discovered: {}\nMCP servers discovered: {}\n\nRequest queued for the execution loop.\n\nNext priorities:\n1. Parse instructions into an explicit task graph.\n2. Resolve tool approvals before execution.\n3. Stream structured updates into the terminal UI.",
38 request.model,
39 request.prompt_pack,
40 request.system_prompt_name,
41 request
42 .tools
43 .iter()
44 .map(|tool| tool.name)
45 .collect::<Vec<_>>()
46 .join(", "),
47 request.skill_count,
48 request.mcp_servers.len(),
49 );
50
51 CompletionResponse {
52 system_prompt: request.system_prompt_name.clone(),
53 response,
54 tool_count: request.tools.len(),
55 skill_count: request.skill_count,
56 mcp_server_count: request.mcp_servers.len(),
57 }
58 }
59}