pub mod github;
pub mod runtime;
pub use runtime::{AsyncStream, AsyncTask, EmitterBuilder};
pub use github::{GitHubClient, GitHubClientBuilder};
pub use github::{GitHubError, GitHubResult};
pub use github::{
CreatePullRequestReviewOptions, CreateReleaseOptions as GitHubReleaseOptions,
ListCommitsOptions, MergePullRequestOptions, ReleaseResult as GitHubReleaseResult,
UpdatePullRequestOptions, create_release, delete_release, get_release_by_tag,
update_release,
};
pub use github::upload_release_asset::{UploadAssetOptions, upload_release_asset};
pub use github::{
ActivityMetrics,
CiCdMetrics,
CodeQualityMetrics,
DependencyMetrics,
DocumentationMetrics,
GithubSearch,
LocalMetrics,
MetadataInfo,
Output as SearchOutput,
QualityMetrics,
ReadmeMetrics,
RepositoryResult,
SearchConfig,
SearchError,
SearchOrder,
SearchProvider,
SearchQuery,
SearchSession,
SecurityMetrics,
StructureMetrics,
TestMetrics,
UserSearchSort,
search_repositories,
search_repositories_with_config,
};
#[cfg(feature = "mcp")]
pub mod tool;
#[cfg(feature = "mcp")]
pub use tool::{
AddIssueCommentTool, AddPullRequestReviewCommentTool, CreateBranchTool, CreateIssueTool,
CreatePullRequestReviewTool, CreatePullRequestTool, CreateRepositoryTool, ForkRepositoryTool,
GetCommitTool, GetIssueCommentsTool, GetIssueTool, GetPullRequestFilesTool,
GetPullRequestReviewsTool, GetPullRequestStatusTool, ListBranchesTool, ListCommitsTool,
ListIssuesTool, MergePullRequestTool, RequestCopilotReviewTool, SearchCodeTool,
SearchIssuesTool, SearchRepositoriesTool, SearchUsersTool, UpdateIssueTool,
UpdatePullRequestTool,
};
#[cfg(feature = "mcp")]
pub async fn start_server(
addr: std::net::SocketAddr,
tls_cert: Option<std::path::PathBuf>,
tls_key: Option<std::path::PathBuf>,
) -> anyhow::Result<kodegen_server_http::ServerHandle> {
use kodegen_server_http::{create_http_server, Managers, RouterSet, register_tool};
use rmcp::handler::server::router::{prompt::PromptRouter, tool::ToolRouter};
use std::time::Duration;
let tls_config = match (tls_cert, tls_key) {
(Some(cert), Some(key)) => Some((cert, key)),
_ => None,
};
let shutdown_timeout = Duration::from_secs(30);
create_http_server("github", addr, tls_config, shutdown_timeout, |_config, _tracker| {
Box::pin(async move {
let mut tool_router = ToolRouter::new();
let mut prompt_router = PromptRouter::new();
let managers = Managers::new();
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, CreateIssueTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, GetIssueTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, ListIssuesTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, UpdateIssueTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, SearchIssuesTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, AddIssueCommentTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, GetIssueCommentsTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, CreatePullRequestTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, UpdatePullRequestTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, MergePullRequestTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, GetPullRequestStatusTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, GetPullRequestFilesTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, GetPullRequestReviewsTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, CreatePullRequestReviewTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, AddPullRequestReviewCommentTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, RequestCopilotReviewTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, CreateRepositoryTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, ForkRepositoryTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, ListBranchesTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, CreateBranchTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, ListCommitsTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, GetCommitTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, SearchCodeTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, SearchRepositoriesTool);
(tool_router, prompt_router) = register_tool(tool_router, prompt_router, SearchUsersTool);
Ok(RouterSet::new(tool_router, prompt_router, managers))
})
}).await
}