Files
m3e-canvas/manifest.ts
T
pastilhas 33ba6c7f03 release 2026.09.05.01
First release. The version was '0.1.0', which is not what anything here reads: a
release is a tag, the catalogue compares tags for difference rather than order,
and every other plugin names its tag in the manifest.

The repository was also private, which would have registered a clone URL that
answers 401 to everyone who is not on this machine — the failure that reads as
'the plugin is broken' rather than 'the catalogue is wrong'. It is public now.
2026-09-05 19:56:28 +01:00

55 lines
2.5 KiB
TypeScript

import type { PluginManifest } from '@@/plugins/manifest';
// Sketch a Material 3 screen, and hand the prompt to the agent.
//
// ── What this is, and what it is not ──
//
// The editor is [M3E Canvas](https://github.com/lnkiai/m3e-canvas), MIT, vendored under `web/vendor/`
// and re-copied by `scripts/vendor.sh`. Officer contributes none of the drawing, none of the Material
// 3 vocabulary and none of the prompt wording — that is upstream's work and there is no wish to fork
// its direction.
//
// What Officer contributes is the last step. Upstream's export button writes the prompt to the
// clipboard for you to paste into a coding tool. Here it opens a chat session with the prompt already
// in it, pointed at a directory on this machine, and the agent writes the app. That is the whole
// reason this plugin exists; everything else is hosting.
//
// ── Why the permission is grantable ──
//
// A design is a document, like a note or a dashboard. There is no credential involved, nothing here
// reaches another machine, and a member sketching a screen is exactly the case this should serve. So
// it is grantable, and documents are scoped per user by the schema rather than by a filter someone
// has to remember.
//
// The one owner-only corner is `/_handoff`, which starts an agent session. Spawning an agent runs as
// the owner and can write to the owner's disk, so it is not a thing to hand out with a drawing tool.
export const manifest: PluginManifest = {
publisher: 'officerdev',
// The release tag, not semver — `marketplace-sync.ts` publishes what a tag names and the catalogue
// compares tags for difference rather than order, so `0.1.0` here would disagree with every other
// plugin and with the thing that actually gets published.
version: '2026.09.05.01',
platform: '>=1.0.0',
label: 'Canvas',
summary: 'Sketch a Material 3 screen, and hand the prompt to the agent',
icon: 'PenTool',
color: '#6750A4', // Material 3's own primary, since the whole editor is drawn in that vocabulary
permissions: [
{
key: 'm3e-canvas',
label: 'Canvas',
description: 'Sketch Material 3 screens and turn them into prompts',
ownerOnly: ['/_handoff'],
},
],
// `motion` is the only thing the platform does not already have — `html-to-image` is present at the
// same version upstream asks for, and React is React. These are INTERSECTED across every installed
// plugin into one `plugins/node_modules/`, so the range is upstream's own rather than tightened.
npmDependencies: {
motion: '^13.1.1',
},
};