Jalon vert regroupant deux chantiers entrelacés dans le working tree, indissociables au niveau fichier mais tous deux verts (cargo test --workspace + tests frontend permissions au vert). Permissions — voie « projection CLI » (advisory), complète : - LP0 domaine pur : modèle PermissionSet/EffectivePermissions, resolve deny-wins + postures Allow<Ask<Deny (crates/domain/src/permission.rs). - LP1 store : FsPermissionStore (.ideai/permissions.json). - LP2 use cases : Get/Update project, Update agent override, Resolve. - LP3 projecteurs Claude/Codex (settings.local.json / config.toml), câblage launch-path + PermissionProjectorRegistry, nettoyage des fichiers Replace orphelins au swap de profil (LP3-4), composition root + commandes Tauri, UI PermissionsPanel (projet + override agent). - ports.rs : PermissionStore + FileSystem::remove_file (cleanup au swap). Reste ouvert (hors scope, marqué dans le code) : LP4 enforcement OS airtight (Landlock fichiers) + résumé de permissions injecté. Inclut aussi le chantier Codex/input/sessions structurées en cours (McpConfigStrategy, StructuredAdapter, gestion d'input) partageant les mêmes fichiers (lifecycle.rs, commands.rs, dto.rs, state.rs). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
import { invoke } from "@tauri-apps/api/core";
|
|
|
|
import type {
|
|
EffectivePermissions,
|
|
PermissionSet,
|
|
ProjectPermissions,
|
|
} 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<EffectivePermissions | null> {
|
|
return invoke<EffectivePermissions | null>("resolve_agent_permissions", {
|
|
request: { projectId, agentId },
|
|
});
|
|
}
|
|
}
|