plugin npm dependencies are INTERSECTED into one plugins/node_modules, and ^0.33 and ^0.35 do not overlap — a 0.x caret pins the minor, so the install failed outright rather than picking one. av-club could not come down: its vocabulary exposes autoOrient as an input option, which is sharp 0.34+. atelier calls exactly one sharp method, .metadata(), in sidecar/generations/inspect.ts. resolved to 0.35.4. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
55 lines
2.9 KiB
TypeScript
55 lines
2.9 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: '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',
|
||
},
|
||
],
|
||
};
|