import { z } from "zod";
import { AdoClient } from "../../ado-client.js";
import { RepositorySummary } from "../../types.js";
export const getRepositorySchema = z.object({
project: z.string().optional().describe("Project name, defaults to ADO_PROJECT env var"),
repository: z.string().describe("Repository name or ID"),
});
export const getRepositoryTool = {
name: "get_repository",
description: "Get details for a specific repository",
inputSchema: {
type: "object" as const,
properties: {
project: {
type: "string",
description: "Project name, defaults to ADO_PROJECT env var",
},
repository: {
type: "string",
description: "Repository name or ID",
},
},
required: ["repository"],
},
};
interface RepositoryDetails extends RepositorySummary {
size: number;
sshUrl?: string;
webUrl: string;
}
export async function getRepository(
client: AdoClient,
params: z.infer<typeof getRepositorySchema>
): Promise<RepositoryDetails> {
const validatedParams = getRepositorySchema.parse(params);
const project = client.resolveProject(validatedParams.project);
const gitApi = await client.getGitApi();
const repo = await gitApi.getRepository(validatedParams.repository, project);
if (!repo) {
throw new Error(`Repository '${validatedParams.repository}' not found`);
}
return {
id: repo.id || "",
name: repo.name || "",
url: repo.remoteUrl || repo.url || "",
defaultBranch: repo.defaultBranch?.replace("refs/heads/", ""),
project: {
id: repo.project?.id || "",
name: repo.project?.name || "",
},
size: repo.size || 0,
sshUrl: repo.sshUrl,
webUrl: repo.webUrl || "",
};
}