Forge
csharp3407750f
1using AgentForge.Abstractions;
2using AgentForge.Plugin.Sdk;
3using AgentForge.Contracts;
4using AgentForge.Data;
5using AgentForge.Services;
6
7namespace AgentForge.Endpoints;
8
9internal static class ForgeProvenanceEndpoints
10{
11 internal static RouteGroupBuilder MapProvenanceEndpoints(this RouteGroupBuilder api)
12 {
13 api.MapPost($"/repos/{ForgeRepoRouting.Pattern}/commits/provenance", RecordCommitProvenance);
14 api.MapGet($"/repos/{ForgeRepoRouting.Pattern}/commits/{{sha}}/provenance", GetCommitProvenance);
15 return api;
16 }
17
18 private static IResult RecordCommitProvenance(
19 string name,
20 RecordCommitProvenanceRequest request,
21 HttpContext http,
22 ForgeRepository repository)
23 {
24 var repo = ForgePluginEndpoints.RequireRepo(repository, name, http);
25 var sha = ForgeCommitProvenanceHelper.NormalizeSha(request.Sha);
26 var entity = repository.UpsertCommitProvenance(
27 repo,
28 sha,
29 request.Provenance ?? throw new ForgeApiException(400, "provenance is required."));
30 return Results.Ok(ForgeCommitProvenanceHelper.ToResponse(entity, repo.Name));
31 }
32
33 private static IResult GetCommitProvenance(string name, string sha, HttpContext http, ForgeRepository repository)
34 {
35 var repo = ForgePluginEndpoints.RequireRepo(repository, name, http);
36 var normalized = ForgeCommitProvenanceHelper.NormalizeSha(sha);
37 var entity = repository.GetCommitProvenance(repo.Id, normalized)
38 ?? throw new ForgeApiException(404, $"No provenance for commit '{normalized}'.");
39 return Results.Ok(ForgeCommitProvenanceHelper.ToResponse(entity, repo.Name));
40 }
41}
42
View only · write via MCP/CIDE