the platform now merges every plugin's `npmDependencies` into one shared install at plugins/node_modules/, so this declares a RANGE and shares whatever the next image plugin resolves rather than carrying its own 50 MB copy of sharp's platform binaries. replaces the package.json and lockfile added an hour earlier. that version worked and was the normal thing for a git repository to do; it just did not survive the question "what happens when a second plugin wants sharp".
47 lines
2.2 KiB
TypeScript
47 lines
2.2 KiB
TypeScript
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: '1.0.0',
|
||
platform: '>=1.0.0',
|
||
|
||
label: 'Atelier',
|
||
summary: 'Image generation — prompt, gallery, collections, backed by OpenAI’s image models',
|
||
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: {
|
||
sharp: '^0.33.5',
|
||
},
|
||
|
||
permissions: [
|
||
{
|
||
key: 'atelier',
|
||
label: 'Atelier',
|
||
description: 'Image generation: prompts, gallery, collections and provider configuration',
|
||
},
|
||
],
|
||
};
|