01
Ouvert, sans céder l’autorité de l’hôte.
Un plugin RightMenu est un paquet JavaScript maintenu indépendamment. L’hôte contrôle validation, installation, consentement et exécution ; le plugin ne reçoit que les capacités déclarées pour l’action en cours et accordées par l’utilisateur.
Limite de sécurité
Les plugins n’ont aucune autorité ambiante et ne chargent pas de code natif. Accès aux fichiers, modifications, divulgation à l’IA et autorisations système restent des décisions séparées de l’hôte.
Cycle indépendant
L’hôte et chaque plugin ont leurs propres dépôt, version et calendrier. Logique métier, textes, icônes, ressources et notes de version appartiennent au dépôt du plugin.
La portée actuelle couvre le développement ouvert, l’import local et la confiance utilisateur, sans marketplace, index communautaire ni mise à jour automatique.
02
Démarrage rapide
Après avoir installé RightMenu, utilisez l’outil signé inclus dans l’app pour générer un projet et lancer doctor.
Chemin du CLI inclus
/Applications/RightMenu.app/Contents/Helpers/rightmenu-pluginctlGénérer un projet exécutable
init refuse d’écraser un chemin existant. Le projet contient un plugin exécutable, le Schema API v1.5 et la déclaration TypeScript correspondante.
CLI="/Applications/RightMenu.app/Contents/Helpers/rightmenu-pluginctl"
"$CLI" init ./MyPlugin \
--id dev.example.my-plugin \
--name "My Plugin"
"$CLI" doctor ./MyPluginOptionnel Développer avec un Agent IA
Copiez cette instruction standard dans Codex, Claude Code, Cursor ou un autre Agent. Il lit d’abord les contrats locaux du projet et considère doctor comme condition de réussite.
Développez un plugin RightMenu Plugin API v1.5 dans le dossier actuel.
Besoin du plugin : [décrivez la fonction ici]
Exigences :
- Lisez d’abord README.md, schema/rightmenu-plugin-manifest-v1.5.schema.json et types/rightmenu-plugin-api-v1.5.d.ts.
- Modifiez uniquement ce projet de plugin, pas le code source de l’hôte RightMenu.
- Produisez une sortie compatible JavaScriptCore, bundlez tous les import et n’utilisez ni require Node.js ni code natif.
- Déclarez requiredCapabilities pour chaque action et uiContribution, avec des permissions minimales.
- Après toute modification de payload, actualisez byteCount et SHA-256 dans files de manifest.json.
- Terminez par "/Applications/RightMenu.app/Contents/Helpers/rightmenu-pluginctl" doctor .
- Le travail est terminé seulement si doctor retourne 0 et validation.ok.
- Sans demande explicite, ne générez pas de clé privée, ne signez pas et ne créez pas de paquet.03
Structure générée
Les paquets finissent par .rightmenuplugin. manifest.json déclare le point d’entrée, les actions, les accès et chaque fichier ; distribuez uniquement du JavaScript simple déjà bundlé.
MyPlugin/
├── README.md
├── plugin/
│ └── my-plugin.rightmenuplugin/
│ ├── manifest.json
│ └── main.js
├── schema/
│ └── rightmenu-plugin-manifest-v1.5.schema.json
└── types/
└── rightmenu-plugin-api-v1.5.d.ts04
Manifest et API v1.5
Chaque action Finder et contribution UI déclare requiredCapabilities ; utilisez un tableau vide si aucune capacité n’est requise. Chaque capacité doit figurer dans permissions et les permissions larges inutilisées sont refusées.
{
"apiVersion": "1.5",
"permissions": [{
"capability": "selection.read",
"reason": "Reads metadata for selected Finder items."
}],
"actions": [
{ "id": "about", "title": "About", "requiredCapabilities": [] },
{ "id": "inspect", "title": "Inspect", "requiredCapabilities": ["selection.read"] }
],
"uiContributions": []
}globalThis.rightMenuPlugin = Object.freeze({
run(actionID, input) {
if (actionID !== "inspect") return { handled: false };
return RightMenu.call("selection.read", {});
}
});Le JSON Schema aide l’éditeur. rightmenu-pluginctl doctor reste l’autorité pour la sécurité des fichiers, les empreintes, les règles croisées, la compatibilité et les signatures.
05
Développer et valider avec doctor
Après une modification JavaScript, actualisez byteCount et SHA-256 de chaque fichier changé dans le manifest, puis lancez doctor. Il émet au plus 32 diagnostics bornés et retourne un état non nul en cas d’erreur.
- 1
Produisez du JavaScript compatible JavaScriptCore ; bundlez les imports sans laisser de require Node.js.
- 2
Actualisez tailles et SHA-256 dans files ; n’y inscrivez jamais manifest.json.
- 3
Lancez doctor jusqu’à validation.ok et corrigez les diagnostics d’API, capacité, signature ou paquet.
"$CLI" doctor ./MyPlugin
"$CLI" doctor ./MyPlugin/plugin/my-plugin.rightmenuplugin06
Import local et mode développeur
Ouvrez RightMenu → Réglages → Plugins. Utilisez Import Signed Plugin pour un paquet signé. Pour un dossier non signé, activez explicitement le mode développeur puis Import Unsigned Development Plugin. Les emplacements sont physiquement séparés.
Installer n’accorde aucun accès. L’hôte valide avant et après la copie et termine seulement après le déplacement final. Désactiver le mode développeur bloque les plugins non signés.
07
Accès par action
L’API v1.5 évalue les capacités action par action. Un accès manquant masque uniquement les actions dépendantes ; les autres restent disponibles. Tout accès est révocable.
selection.readInformations de sélection · accord explicitevision.recognizeTextReconnaissance locale de texte · accord explicitefiles.rename.*Renommage · accord explicite et confirmation de mutationai.generateStructuredIA structurée · accord explicite et consentement de divulgation par plugin/fournisseurui.flashScreen / desktopItems.toggleVisibilityEffet d’écran et visibilité du bureau · automatique, révocablediagnostics.logDiagnostics · accord explicite08
Signature de l’éditeur et empreinte
La distribution utilise Ed25519. Au premier import d’un éditeur auto-signé inconnu, l’utilisateur compare l’empreinte SHA-256 complète avant Trust & Install. L’identité signée n’accorde aucune capacité.
"$CLI" keygen ./publisher.private.json "Example Publisher"
"$CLI" sign \
./MyPlugin/plugin/my-plugin.rightmenuplugin \
./publisher.private.json
"$CLI" inspect-signature \
./MyPlugin/plugin/my-plugin.rightmenuplugin
"$CLI" pack \
./MyPlugin/plugin/my-plugin.rightmenuplugin \
./my-plugin.rightmenuplugin.zipConservez la clé privée hors du projet, sauvegardez-la et ne la validez ou distribuez jamais. Sa perte empêche les installations existantes d’accepter les mises à jour sous la même identité.
Une mise à jour du même ID doit employer exactement la clé déjà installée. Une autre clé fiable ne peut pas prendre le contrôle. Mises à jour automatiques et rotation de clé ne sont pas incluses.
09
Codes de diagnostic courants
L’automatisation doit lire le code stable et l’état de sortie, sans analyser le texte explicatif.
validation.okManifest, tailles et empreintes valides.api.current / api.legacyAPI actuelle ou ancienne compatible.capability.unsupportedCapacité déclarée non fournie par l’hôte.signature.missingNon signé, réservé au mode développeur.signature.self-issued-validIdentité auto-émise et signature valides.manifest.*Échec borné du contrat Manifest.package.*Échec borné de structure, intégrité ou limite.invocation.*Résultat borné du cycle hôte ou Runner.10
Compatibilité et contraintes
Les nouveaux projets utilisent l’API v1.5 et exigent RightMenu 0.1.41 ou ultérieur. La compatibilité v1.0–v1.4 est conservée avec leurs accès globaux. Ciblez JavaScriptCore et bornez boucles, récursion, mémoire et sortie.
Les actions Finder couvrent les sélections prises en charge de 1 à 20 fichiers locaux ordinaires. Avant l’appel, l’hôte réanalyse et revalide l’action et ses accès exacts.
11
Fichiers de référence versionnés
Ces fichiers sont des copies exactes du dossier Documentation de RightMenu 0.1.41 (commit 9a25a54). Un script du site vérifie l’absence de dérive avec la source hôte.