Files
IdeA/frontend/src/adapters/permission.ts
Blomios e283f4a9e4 feat(agents,plugins): surface unifiée Capacités de l'agent — skills et tools MCP natifs + plugins #296 (domain: PluginMcpToolMetadata dans PluginMcpServerContribution, validation hôte alignée SDK — name requis non vide, description optionnelle non vide, doublons rejetés; application: McpToolPermissionCatalogue.vue structurée additive tools {name, description, access read|writeAction} enrichie des descriptions canoniques infrastructure orchestrator mcp tools, use case SetAgentMcpToolAllowed — toggle atomique idempotente d'un tool natif dans l'allowlist explicite d'un agent, refus unknown tool sans mutation, overrides vides retirés; backend DTO: catalogue.tools additive + SetAgentMcpToolAllowedRequestDto, wire camelCase; app-tauri + web-server: commande set_agent_mcp_tool_allowed; frontend: AgentPluginCapabilities devient la surface unifiée — skills natifs assign/unassign, tools natifs via setAgentMcpToolAllowed (catalogue structuré avec fallback legacy), skills/tools plugins avec metadata statiques mcpServers[].tools et saisie manuelle fallback pour serveurs sans catalogue, tombstones indisponibles, bannière redémarrage requis si agent actif; AgentsPanel retire l'ancienne section Skills séparée au profit de la surface unifiée; ProjectPluginsPanel recentré enable/disable avec renvoi Capacités des agents; adapters Tauri/HTTP/mock + permission.test.ts; QA verte reconfirmée par Git: application mcp_tool_permissions 5/5 + plugin::tests 37/37, backend ciblés 3/3 + checks domain/application/backend, app-tauri dto 33/33 + dto_agents 30/30 + dto_plugins 2/2, check web-server, npm test 35/35 + 65/65, npm run build; suites complètes rouges classées non bloquantes par QA: web-server parallèle too many open files + 7 PTY série passant individuellement, frontend 32 échecs sur 6 fichiers web non modifiés reproduits isolément)
2026-09-09 19:52:38 +02:00

122 lines
3.4 KiB
TypeScript

import { invoke } from "@tauri-apps/api/core";
import type {
McpToolPolicy,
PermissionSet,
ProjectMcpToolPermissions,
ProjectPermissions,
ProjectSystemPermissions,
ResolvedAgentPermissions,
ResolvedAgentSystemPermissions,
SystemPermissionSet,
} from "@/domain";
import type { PermissionGateway } from "@/ports";
/** Tauri-backed permissions gateway. */
export class TauriPermissionGateway implements PermissionGateway {
getProjectPermissions(projectId: string): Promise<ProjectPermissions> {
return invoke<ProjectPermissions>("get_project_permissions", { projectId });
}
updateProjectPermissions(
projectId: string,
permissions: PermissionSet | null,
): Promise<ProjectPermissions> {
return invoke<ProjectPermissions>("update_project_permissions", {
request: { projectId, permissions },
});
}
updateAgentPermissions(
projectId: string,
agentId: string,
permissions: PermissionSet | null,
): Promise<ProjectPermissions> {
return invoke<ProjectPermissions>("update_agent_permissions", {
request: { projectId, agentId, permissions },
});
}
resolveAgentPermissions(
projectId: string,
agentId: string,
): Promise<ResolvedAgentPermissions> {
return invoke<ResolvedAgentPermissions>("resolve_agent_permissions", {
request: { projectId, agentId },
});
}
getProjectSystemPermissions(projectId: string): Promise<ProjectSystemPermissions> {
return invoke<ProjectSystemPermissions>("get_project_system_permissions", {
projectId,
});
}
updateProjectSystemPermissions(
projectId: string,
permissions: SystemPermissionSet | null,
): Promise<ProjectSystemPermissions> {
return invoke<ProjectSystemPermissions>("update_project_system_permissions", {
request: { projectId, permissions },
});
}
updateAgentSystemPermissions(
projectId: string,
agentId: string,
permissions: SystemPermissionSet | null,
): Promise<ProjectSystemPermissions> {
return invoke<ProjectSystemPermissions>("update_agent_system_permissions", {
request: { projectId, agentId, permissions },
});
}
resolveAgentSystemPermissions(
projectId: string,
agentId: string,
): Promise<ResolvedAgentSystemPermissions> {
return invoke<ResolvedAgentSystemPermissions>(
"resolve_agent_system_permissions",
{ request: { projectId, agentId } },
);
}
getMcpToolPermissions(projectId: string): Promise<ProjectMcpToolPermissions> {
return invoke<ProjectMcpToolPermissions>("get_mcp_tool_permissions", {
projectId,
});
}
updateProjectMcpToolPermissions(
projectId: string,
policy: McpToolPolicy | null,
): Promise<ProjectMcpToolPermissions> {
return invoke<ProjectMcpToolPermissions>(
"update_project_mcp_tool_permissions",
{ request: { projectId, policy } },
);
}
updateAgentMcpToolPermissions(
projectId: string,
agentId: string,
policy: McpToolPolicy | null,
): Promise<ProjectMcpToolPermissions> {
return invoke<ProjectMcpToolPermissions>(
"update_agent_mcp_tool_permissions",
{ request: { projectId, agentId, policy } },
);
}
setAgentMcpToolAllowed(
projectId: string,
agentId: string,
toolName: string,
allowed: boolean,
): Promise<ProjectMcpToolPermissions> {
return invoke<ProjectMcpToolPermissions>("set_agent_mcp_tool_allowed", {
request: { projectId, agentId, toolName, allowed },
});
}
}