feat(plugins): paramètres projet plugins + attribution skills/tools aux agents — #282 (manifeste accepte contributes.skills IdeA-native multi-harness; store .ideai/project-plugins.json v1: enable plugin par projet + assignments skills/tools par agent; refs + use cases settings/assign/unassign; resolver skills pour idea_skill_read et injection catalogue lancement agent; permissions MCP dynamiques projetées par harness Claude Code/Codex/OpenCode; tombstones uninstall, hot reload recalcule catalogue et marque assignments cassés; frontend: Settings projet Plugins, détail capabilities, attribution agent, catalogue permissions; bump pointeur IdeaSDK 6eb8db3; QA verte: cargo test -p application, project_plugin_settings 3/3, dto_plugins 2/2, structured_launch_d3 26/26, catalogue mcp 7/7, frontend 5 tests ProjectPluginSettings/plugin, npm build frontend)

This commit is contained in:
2026-09-08 15:48:57 +02:00
parent bdc20a134a
commit 86ed0aa00b
38 changed files with 2127 additions and 89 deletions

View File

@ -1856,6 +1856,8 @@ export type PluginLifecycleState =
/** Counts of what a plugin declares, shown in the admin list (carnet §5). */
export interface PluginContributionSummary {
/** Agent skills shipped by the plugin. Absent on older backend DTOs. */
skills?: number;
topLevelMenus: number;
menuItems: number;
layouts: number;
@ -1917,6 +1919,8 @@ export interface PluginUninstallResult {
/** Contribution declarations for one plugin, as consumed by the runtime loader. */
export interface PluginContributionDto {
/** Read-only, package-relative skills exposed to project agents. */
skills?: PluginSkillContribution[];
menus: PluginTopLevelMenuContribution[];
menuItems: PluginMenuItemContribution[];
slashCommands?: PluginSlashCommandContribution[];
@ -1924,6 +1928,66 @@ export interface PluginContributionDto {
mcpServers: PluginMcpServerSummary[];
}
/** One agent skill declared by an IdeA plugin manifest. */
export interface PluginSkillContribution {
id: string;
name: string;
description: string;
kind: SkillKind;
path: string;
}
/** Validated plugin manifest returned by the project-plugin settings catalogue. */
export interface ProjectPluginManifest {
ideaPluginManifestVersion: number;
id: string;
displayName: string;
publisher?: string;
version: string;
description?: string;
engineIdea?: string;
main: string;
icon?: string;
trustLevel: "full";
capabilities: Array<"ui" | "mcp" | "tooling">;
activationScope: "app" | "project";
contributes: PluginContributionDto;
}
export interface ProjectPluginActivation {
pluginId: string;
enabled: boolean;
}
export interface PluginSkillRef {
pluginId: string;
skillId: string;
}
export interface PluginToolRef {
pluginId: string;
serverId: string;
toolName: string;
}
export interface AgentPluginAssignments {
agentId: string;
skills: PluginSkillRef[];
tools: PluginToolRef[];
}
export interface ProjectPluginSettings {
version: number;
plugins: ProjectPluginActivation[];
agents: AgentPluginAssignments[];
}
/** Project settings plus the currently installed global plugin manifests. */
export interface ProjectPluginSettingsView {
settings: ProjectPluginSettings;
installed: ProjectPluginManifest[];
}
/** One entry of `plugin_list_runtime_contributions` (mirror of `PluginRuntimePluginDto`). */
export interface PluginRuntimePlugin {
id: string;
@ -2266,5 +2330,11 @@ export interface CustomPluginLayoutCell {
export interface PluginMcpServerSummary {
id: string;
displayName: string;
command?: string;
args?: string[];
env?: Array<[string, string]>;
cwd?: string;
transport?: "stdio";
autoStart?: boolean;
allowAbsoluteCommand?: boolean;
}