import type { PluginManifest } from '@@/plugins/manifest'; // The reference plugin. Not a fixture — this is what a plugin author reads first, and it is deliberately // the smallest thing that is still a real one: a manifest and one route. // // Everything structural is convention, so this directory IS the documentation: // // manifest.ts you are here — only what a directory listing cannot say // api/router.ts exports `router`; mounted at /api/example // db/schema.ts tables, if it had any (every name prefixed `example_`) // sidecar/index.ts a process, if it needed one (.mjs instead means node) // web/Router.tsx a frontend, if it had one // // `appName` is not declared anywhere: it is the directory name, so the id cannot disagree with where the // code sits. export const manifest: PluginManifest = { publisher: 'officerdev', version: '1.0.0', platform: '>=1.0.0', label: 'Example', summary: 'The reference plugin — one route, nothing else', icon: 'Puzzle', color: '#94a3b8', // One permission gating the whole surface. `ownerOnly: false` means a role can be granted it — which is // the interesting case, because it is the one the capability gate actually has to resolve. permissions: [ { key: 'example', label: 'Example', description: 'The reference plugin', ownerOnly: false, }, ], };