import type { PluginManifest } from '@@/plugins/manifest'; // Atelier — image generation as a service: a provider-shaped API over OpenAI's image endpoints, // storing what it makes so every image has a durable reference inside Officer. // // Extracted 2026-08-20 from a standalone server (~/officer-dev/dockers/officer-atelier) that predates // the plugin system. See PLUGIN.md for what moved, what did not, and why — most notably that the // `atelier` Postgres database stays separate rather than folding into officer_db (both `collections` // and `provider_settings` had rows on the machine this was extracted from), and that generated images // are now served through an authenticated route instead of an unauthenticated `PUBLIC_URL`. // // api/router.ts a thin auth-gated proxy — no Atelier knowledge, and it must never grow app logic // sidecar/ the whole image-generation contract: providers, the queue, the database // web/ three panels — Generate, Gallery, Collections — and a layout // // Providers (which adapter, which model, whose key) is NOT a panel — it moved to // Settings → Integrations → Atelier, per PLUGIN.md's "Providers as a settings screen" decision. export const manifest: PluginManifest = { publisher: 'officerdev', version: '2026.08.27.01', platform: '>=1.0.0', label: 'Atelier', summary: 'Image generation — prompt, gallery, collections, backed by OpenAI’s image models', /** image generation you play with; not a work tool. */ tags: ['Personal', 'Fun'], icon: 'Palette', color: '#f59e0b', // `sharp` measures the width, height and alpha channel of a written image (sidecar/generations/ // inspect.ts) — load-bearing, not incidental: it is how a `background: transparent` request that // silently produced an opaque image gets caught. // // A range, not a pin. Every plugin's declarations merge into one shared install at // `plugins/node_modules/`, so the next plugin that wants sharp shares this copy rather than adding // another 50 MB of platform binaries. See src/servers/plugins/npm-deps.ts. npmDependencies: { // ^0.35 since 2026-08-28, moved up to meet av-club. These are INTERSECTED across every plugin into // one `plugins/node_modules/`, and `^0.33` and `^0.35` do not overlap — a 0.x caret pins the minor, // so the two ranges could not both be satisfied and the install failed outright. av-club could not // come down: its vocabulary exposes `autoOrient` as an INPUT option, which is sharp 0.34+, and the // owner asked for the current release on both rather than a floor. Atelier calls exactly one // sharp method, `.metadata()`, in `sidecar/generations/inspect.ts`. sharp: '^0.35.3', }, permissions: [ { key: 'atelier', label: 'Atelier', description: 'Image generation: prompts, gallery, collections and provider configuration', }, ], };