feat: Public-Flag für Agents + verfügbare Agents/Bots Endpoints erweitert
- AgentRecord: neues IsPublic-Feld mit DB-Migration - GET /api/agents/available: eigene + public Agents (alle Properties + isOwner) - GET /api/telegram/bots/available: alle Properties außer Token/Secret + sessionCount - Agent-Page: Public-Checkbox (andere User können Agent in Sessions verwenden) - Dashboard: agentMap aus availableAgents gebaut (public Agents fremder User auflösbar) - Session-Page + Cronjob-Page: Agent-Picker nutzt /available statt /agents - Agent-Cards: Public- und Fremd-Badges - Fix: Chat-Button bei Sessions mit public Agent eines anderen Users nicht mehr disabled
This commit is contained in:
1 parent
ec73ccd71e
commit
b0d8bef5ea
11 files changed
+90
-10
No files matched your search
@@ -16,6 +16,7 @@ public static class AgentEndpoint
|
||||
public static void MapAgentEndpoints(this IEndpointRouteBuilder app)
|
||||
{
|
||||
app.MapGet("/api/agents", HandleList);
|
||||
app.MapGet("/api/agents/available", HandleListAvailable);
|
||||
app.MapGet("/api/agents/{agentId}", HandleGet);
|
||||
app.MapPost("/api/agents", HandleCreate);
|
||||
app.MapPut("/api/agents/{agentId}", HandleUpdate);
|
||||
@@ -59,6 +60,7 @@ public static class AgentEndpoint
|
||||
a.AvatarScale,
|
||||
a.AvatarOffsetX,
|
||||
a.AvatarOffsetY,
|
||||
a.IsPublic,
|
||||
a.IsDeleted,
|
||||
a.CreatedAt,
|
||||
a.UpdatedAt,
|
||||
@@ -69,6 +71,55 @@ public static class AgentEndpoint
|
||||
await ctx.Response.WriteAsJsonAsync(results);
|
||||
}
|
||||
|
||||
private static async Task HandleListAvailable(HttpContext ctx, DatabaseService db, SkillService skillService)
|
||||
{
|
||||
var userId = ctx.GetUserId();
|
||||
var agents = await db.GetAvailableAgents(userId);
|
||||
var allSkills = skillService.GetAllSkills();
|
||||
var skillMap = allSkills.ToDictionary(s => s.Slug);
|
||||
|
||||
var results = new List<object>();
|
||||
foreach (var a in agents)
|
||||
{
|
||||
var agentSkillSlugs = await db.GetAgentSkills(a.AgentId);
|
||||
var skills = agentSkillSlugs
|
||||
.Where(slug => skillMap.ContainsKey(slug))
|
||||
.Select(slug => new { slug, name = skillMap[slug].Name, description = skillMap[slug].Description })
|
||||
.ToList();
|
||||
|
||||
results.Add(new
|
||||
{
|
||||
a.AgentId,
|
||||
a.Name,
|
||||
Avatar = a.AvatarSmall ?? a.Avatar,
|
||||
a.Description,
|
||||
a.Model,
|
||||
a.ToolChoice,
|
||||
a.CustomCommands,
|
||||
a.AutoCommit,
|
||||
a.UseSoul,
|
||||
a.UseIdentity,
|
||||
a.UseUserInfo,
|
||||
a.UseMemory,
|
||||
a.UseWebSearch,
|
||||
a.WebSearchVersion,
|
||||
a.AllowUserChoice,
|
||||
a.TaskInstruction,
|
||||
a.AvatarScale,
|
||||
a.AvatarOffsetX,
|
||||
a.AvatarOffsetY,
|
||||
a.IsPublic,
|
||||
a.IsDeleted,
|
||||
a.CreatedAt,
|
||||
a.UpdatedAt,
|
||||
IsOwner = a.UserId == userId,
|
||||
Skills = skills
|
||||
});
|
||||
}
|
||||
|
||||
await ctx.Response.WriteAsJsonAsync(results);
|
||||
}
|
||||
|
||||
private static async Task HandleGet(HttpContext ctx, DatabaseService db)
|
||||
{
|
||||
var agentId = ctx.Request.RouteValues["agentId"]?.ToString();
|
||||
@@ -112,7 +163,8 @@ public static class AgentEndpoint
|
||||
TaskInstruction = body.TryGetProperty("taskInstruction", out var ti) ? ti.GetString() : null,
|
||||
AvatarScale = body.TryGetProperty("avatarScale", out var asc) ? asc.GetDouble() : 1.0,
|
||||
AvatarOffsetX = body.TryGetProperty("avatarOffsetX", out var aox) ? aox.GetDouble() : 0,
|
||||
AvatarOffsetY = body.TryGetProperty("avatarOffsetY", out var aoy) ? aoy.GetDouble() : 0
|
||||
AvatarOffsetY = body.TryGetProperty("avatarOffsetY", out var aoy) ? aoy.GetDouble() : 0,
|
||||
IsPublic = body.TryGetProperty("isPublic", out var ip) && ip.GetBoolean()
|
||||
};
|
||||
|
||||
agent = await db.CreateAgent(agent);
|
||||
@@ -157,6 +209,7 @@ public static class AgentEndpoint
|
||||
if (body.TryGetProperty("avatarScale", out var asc)) agent.AvatarScale = asc.GetDouble();
|
||||
if (body.TryGetProperty("avatarOffsetX", out var aox)) agent.AvatarOffsetX = aox.GetDouble();
|
||||
if (body.TryGetProperty("avatarOffsetY", out var aoy)) agent.AvatarOffsetY = aoy.GetDouble();
|
||||
if (body.TryGetProperty("isPublic", out var ip)) agent.IsPublic = ip.GetBoolean();
|
||||
|
||||
await db.UpdateAgent(agent);
|
||||
memoryService.InitializeAgentFiles(agentId, agent.Name);
|
||||
|
||||
Reference in new issue
Block a user